Spaces:
Sleeping
Sleeping
from sqlalchemy import ( | |
create_engine, | |
MetaData, | |
Table, | |
Column, | |
String, | |
Integer, | |
select, | |
column, | |
) | |
import os | |
from llama_index.core import Settings, VectorStoreIndex | |
from llama_index.core import SQLDatabase | |
from llama_index.llms.ollama import Ollama | |
from llama_index.core.query_engine import NLSQLTableQueryEngine | |
from llama_index.embeddings.huggingface import HuggingFaceEmbedding | |
from llama_index.core.objects import ( | |
SQLTableNodeMapping, | |
ObjectIndex, | |
SQLTableSchema, | |
) | |
from llama_index.core.indices.struct_store import SQLTableRetrieverQueryEngine | |
from rich.console import Console | |
from rich.theme import Theme | |
custom_theme = Theme({ | |
"title": "bold white on orchid1", | |
"text": "dim chartreuse1", | |
}) | |
console = Console(theme=custom_theme) | |
Settings.llm = Ollama(model="phi3", request_timeout=360.0) | |
Settings.embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-base-en-v1.5") | |
engine = create_engine("sqlite:///multi-agents-analysis/data/laps.db") | |
metadata_obj = MetaData() | |
sql_database = SQLDatabase(engine) | |
# manually set extra context text | |
city_stats_text = """This table gives information regarding the performance in a race about each driver. | |
The time is split into 3 different sectors. | |
The speed is split into SpeedI1, SpeedI2, SpeedFL and SpeedST""" | |
table_node_mapping = SQLTableNodeMapping(sql_database) | |
table_schema_objs = [ | |
(SQLTableSchema(table_name="laps", context_str=city_stats_text)) | |
] | |
obj_index = ObjectIndex.from_objects( | |
table_schema_objs, | |
table_node_mapping | |
) | |
query_engine = SQLTableRetrieverQueryEngine( | |
sql_database, obj_index.as_retriever(similarity_top_k=1) | |
) | |
response = query_engine.query("Which driver had the lowers time in sector 1?") | |
print(response) | |