Spaces:
Sleeping
Sleeping
| # backend/src/services/tools/cms_agent.py | |
| import json | |
| from langchain.agents import create_agent | |
| from backend.src.services.llm.factory import get_llm_model | |
| from backend.src.services.tools.cms_tool import CMSQueryTool | |
| from typing import Optional, Dict | |
| # --- THE CMS EXPERT PROMPT (ANTI-YAP VERSION 🤐) --- | |
| CMS_SYSTEM_PROMPT = """You are a Sanity GROQ Query Generator. | |
| Your goal is to query the database based on the user's request. | |
| --- KNOWLEDGE BASE (SCHEMA) --- | |
| {schema_map} | |
| --- RULES (READ CAREFULLY) --- | |
| 1. **NO EXPLANATIONS:** Do NOT say "Here is the query" or "I will search for...". | |
| 2. **JUST THE QUERY:** Directly call the 'cms_query_tool' with the GROQ string. | |
| 3. **USE THE SCHEMA:** Look at the schema map above. If `price` is inside `variants`, use `variants[].price`. | |
| 4. **SYNTAX:** `*[_type == "product" && title match "Blue*"]` | |
| --- ERROR HANDLING --- | |
| If the query fails or returns empty, just say: "No products found matching your criteria." | |
| Do NOT make up fake products from Amazon or other websites. | |
| User Input: {input} | |
| """ | |
| # --- AGENT ADAPTER --- | |
| class AgentAdapter: | |
| def __init__(self, agent): | |
| self.agent = agent | |
| async def ainvoke(self, input_dict): | |
| # Hum input ko thoda modify karke bhejenge taake AI focus kare | |
| user_text = input_dict.get("input", "") | |
| # Force instruction appended to user query | |
| strict_input = f"{user_text} (Return ONLY the GROQ query tool call. Do not explain.)" | |
| payload = {"messages": [("user", strict_input)]} | |
| result = await self.agent.ainvoke(payload) | |
| last_message = result["messages"][-1] | |
| return {"output": last_message.content} | |
| # --- DYNAMIC AGENT FACTORY --- | |
| def get_cms_agent( | |
| user_id: str, | |
| schema_map: dict, | |
| llm_credentials: Optional[Dict[str, str]] = None | |
| ): | |
| # 1. Load User's LLM | |
| llm = get_llm_model(credentials=llm_credentials) | |
| # 2. Initialize Tool | |
| tool = CMSQueryTool(user_id=str(user_id)) | |
| tools = [tool] | |
| # Convert schema to string | |
| schema_str = json.dumps(schema_map, indent=2) | |
| # 3. Create Agent | |
| agent_runnable = create_agent( | |
| model=llm, | |
| tools=tools, | |
| system_prompt=CMS_SYSTEM_PROMPT.format(schema_map=schema_str, input="{input}") | |
| ) | |
| return AgentAdapter(agent_runnable) |