Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| from src.schemas.outputs import RetrievalPlan | |
| from src.schemas.prompts import QUERY_PLANNER_PROMPT, TASK_QUERY_HINTS | |
| def fallback_plan(mode: str, user_input: str, query_count: int) -> RetrievalPlan: | |
| hints = TASK_QUERY_HINTS.get(mode, TASK_QUERY_HINTS["Ask with Citations"]) | |
| queries = [user_input.strip()] | |
| for hint in hints: | |
| queries.append(f"{user_input.strip()} — {hint}") | |
| while len(queries) < query_count: | |
| queries.append(f"{user_input.strip()} — evidence, scope, limitations, and caveats") | |
| return RetrievalPlan( | |
| queries=list(dict.fromkeys(queries))[:query_count], | |
| rationale="Fallback task-specific query expansion was used.", | |
| ) | |
| def generate_retrieval_plan( | |
| reasoner, | |
| mode: str, | |
| user_input: str, | |
| query_count: int, | |
| ) -> RetrievalPlan: | |
| hints = "\n".join(f"- {item}" for item in TASK_QUERY_HINTS.get(mode, [])) | |
| prompt = f""" | |
| Selected task: {mode} | |
| User request: {user_input} | |
| Create exactly {query_count} complementary retrieval queries. | |
| Task-specific evidence targets: | |
| {hints} | |
| """.strip() | |
| try: | |
| result = reasoner.parse( | |
| system_prompt=QUERY_PLANNER_PROMPT, | |
| user_prompt=prompt, | |
| output_schema=RetrievalPlan, | |
| max_output_tokens=900, | |
| ) | |
| cleaned = [query.strip() for query in result.queries if query.strip()] | |
| if len(cleaned) >= 2: | |
| result.queries = list(dict.fromkeys(cleaned))[:query_count] | |
| return result | |
| except Exception: | |
| pass | |
| return fallback_plan(mode, user_input, query_count) | |