Spaces:
Sleeping
Sleeping
| """Query rewriting using conversation context.""" | |
| from typing import List, Tuple | |
| from app.core.llm import llm_chat | |
| Message = Tuple[str, str] | |
| _REWRITE_SYSTEM_PROMPT = """ | |
| You are a query rewriting assistant. | |
| Given a conversation history and the latest user question, | |
| rewrite the question into a standalone, explicit query | |
| that can be understood without the conversation. | |
| Rules: | |
| - Do NOT answer the question. | |
| - Do NOT add new information. | |
| - Do NOT change the intent. | |
| - If the question is already standalone, return it unchanged. | |
| """ | |
| def rewrite_query( | |
| question: str, | |
| history: List[Message], | |
| ) -> str: | |
| """Rewrite a context-dependent query into a standalone query.""" | |
| if not history: | |
| return question | |
| history_text = "\n".join(f"{role}: {content}" for role, content in history) | |
| messages = [ | |
| {"role": "system", "content": _REWRITE_SYSTEM_PROMPT.strip()}, | |
| { | |
| "role": "user", | |
| "content": f""" | |
| Conversation: | |
| {history_text} | |
| Latest question: | |
| {question} | |
| Standalone rewritten query: | |
| """.strip(), | |
| }, | |
| ] | |
| rewritten = llm_chat(messages=messages).strip() | |
| return rewritten or question | |