USAMA BHATTI
Feat: Added Visual Search, API Key Auth, and Docker Optimization
ba2fc46
# backend/src/services/tools/sql_tool.py
from langchain_community.utilities import SQLDatabase
from langchain_community.agent_toolkits import SQLDatabaseToolkit
from backend.src.services.llm.factory import get_llm_model
from typing import Optional, Dict
# --- DYNAMIC FUNCTIONS ---
def get_database_connection(db_credentials: Dict[str, str]) -> SQLDatabase:
"""
User ki di hui connection string se connect karta hai.
"""
db_uri = db_credentials.get("url")
if not db_uri:
raise ValueError("SQL Database URL not found in user's settings.")
# --- FIX for SQLAlchemy Async Driver ---
# Ensure the URL is compatible with the synchronous SQLDatabase object
if "+asyncpg" in db_uri:
db_uri = db_uri.replace("+asyncpg", "") # Sync object needs sync driver
print(f"INFO: [SQL Tool] Connecting to user's SQL DB: {db_uri[:30]}...")
db = SQLDatabase.from_uri(
db_uri,
sample_rows_in_table_info=2 # 2 samples kafi hain
)
return db
def get_sql_toolkit(
db_credentials: Dict[str, str],
llm_credentials: Optional[Dict[str, str]] = None
) -> SQLDatabaseToolkit:
"""
User ke DB aur User ke LLM se Toolkit banata hai.
"""
# 1. Connect to User's DB
db = get_database_connection(db_credentials)
# 2. Load User's LLM
llm = get_llm_model(credentials=llm_credentials)
# 3. Create Toolkit
toolkit = SQLDatabaseToolkit(db=db, llm=llm)
return toolkit