Spaces:
Sleeping
Sleeping
| """ | |
| Planner: "1. Query Understanding" and "5. Refine Query" nodes. | |
| History-aware reformulation — takes raw user query + prior conversation | |
| turns and produces a standalone query with pronouns/references resolved, | |
| so retrieval isn't polluted by ambiguous follow-ups like "what about that?". | |
| """ | |
| from __future__ import annotations | |
| from gateway.llm_gateway import get_gateway | |
| _QUERY_UNDERSTANDING_SYSTEM = """You are a query rewriting module in a RAG system. | |
| Given the conversation history and the latest user message, rewrite the latest | |
| message into a standalone, fully self-contained question. Resolve pronouns and | |
| references using the history. Do not answer the question. Output ONLY the | |
| rewritten question, nothing else.""" | |
| _REFINE_QUERY_SYSTEM = """You are a query refinement module in a RAG system. | |
| The previous retrieval + answer attempt was judged NOT satisfactory for the | |
| reason given below. Rewrite the standalone query to retrieve better, more | |
| specific "true data" and avoid the noisy/irrelevant results that caused the | |
| problem. Output ONLY the rewritten query, nothing else.""" | |
| def understand_query(raw_query: str, conversation_history: str = "") -> str: | |
| gateway = get_gateway() | |
| user_content = f"Conversation history:\n{conversation_history or '(none)'}\n\nLatest message: {raw_query}" | |
| messages = [ | |
| {"role": "system", "content": _QUERY_UNDERSTANDING_SYSTEM}, | |
| {"role": "user", "content": user_content}, | |
| ] | |
| response = gateway.call(messages, temperature=0.0, max_tokens=200) | |
| return response.text.strip().strip('"') | |
| def refine_query(standalone_query: str, critique_feedback: str) -> str: | |
| gateway = get_gateway() | |
| messages = [ | |
| {"role": "system", "content": _REFINE_QUERY_SYSTEM}, | |
| { | |
| "role": "user", | |
| "content": f"Original query: {standalone_query}\n\nWhy it failed: {critique_feedback}\n\nRewrite the query:", | |
| }, | |
| ] | |
| response = gateway.call(messages, temperature=0.3, max_tokens=200) | |
| return response.text.strip().strip('"') | |