USAMA BHATTI
Feat: Added Visual Search, API Key Auth, and Docker Optimization
ba2fc46
# backend/src/services/tools/secure_agent.py
from langchain.agents import create_agent
from backend.src.services.llm.factory import get_llm_model
from backend.src.services.tools.sql_tool import get_sql_toolkit # Updated Import
from typing import Optional, Dict
# --- PROMPTS (Same as before) ---
ADMIN_PREFIX = "You are a PostgreSQL expert... full access..."
CUSTOMER_PREFIX = """You are a SQL helper for User ID: {user_id}.
CRITICAL: For every query, you MUST add a "WHERE user_id = {user_id}" clause.
Never show data of other users.
Always present data in a clean MARKDOWN TABLE.
"""
# --- AGENT ADAPTER (Same as before) ---
class AgentAdapter:
def __init__(self, agent):
self.agent = agent
async def ainvoke(self, input_dict):
user_text = input_dict.get("input", "")
payload = {"messages": [("user", user_text)]}
result = await self.agent.ainvoke(payload)
last_message = result["messages"][-1]
return {"output": last_message.content}
# --- DYNAMIC AGENT FACTORY ---
def get_secure_agent(
user_id: int,
role: str,
db_credentials: Dict[str, str],
llm_credentials: Optional[Dict[str, str]] = None
):
"""
Creates a Secure SQL Agent using the specific user's databases and LLM.
"""
# 1. Load User's LLM (via factory)
llm = get_llm_model(credentials=llm_credentials)
# 2. Get User-specific SQL Toolkit
toolkit = get_sql_toolkit(db_credentials, llm_credentials)
tools = toolkit.get_tools() # Toolkit se tools nikalo
# 3. Select the right security prompt
if role == "admin":
system_prefix = ADMIN_PREFIX
else:
system_prefix = CUSTOMER_PREFIX.format(user_id=user_id)
# 4. Create the Agent (New V1 'create_agent' syntax)
agent_runnable = create_agent(
model=llm,
tools=tools,
system_prompt=system_prefix
)
return AgentAdapter(agent_runnable)