import logging from config import MODEL_NAME logger = logging.getLogger(__name__) INSTRUCTIONS = """ Your task is to answer questions from the person at accident site based on the provided context. Use the context to find relevant information and provide accurate answers. If the answer is not found in the context, respond with "I don't know." """ PROMPT_TEMPLATE = """ QUESTION: {question} CONTEXT: {context} """.strip() def rewrite_query(user_query: str, client) -> str: system_prompt = ( "You are an AI assistant specialized in optimizing search queries for RAG pipelines. " "Your task is to rewrite the user's raw input query to make it clearer, more descriptive, " "and packed with relevant keywords that match technical documentation. " "Output ONLY the final rewritten query text. Do not add explanations or quotes." ) logger.debug("Original query: %s", user_query) response = client.completion( model=MODEL_NAME, messages=[ {"role": "system", "content": system_prompt}, {"role": "user", "content": f"Original query: {user_query}"}, ], temperature=0.0, ) rewritten = response.choices[0].message.content.strip() logger.debug("Rewritten query: %s", rewritten) return rewritten class RAGBase: def __init__( self, index=None, llm_client=None, instructions=INSTRUCTIONS, prompt_template=PROMPT_TEMPLATE, model=MODEL_NAME, ): self.index = index self.llm_client = llm_client self.instructions = instructions self.prompt_template = prompt_template self.model = model def search(self, query, num_results=10): boost_dict = {"question": 0.5, "answer": 1.0} return self.index.search(query, num_results=num_results, boost_dict=boost_dict) def build_context(self, search_results): lines = [] for doc in search_results: lines.append("Q: " + doc["question"]) lines.append("A: " + doc["answer"]) lines.append("") return "\n".join(lines).strip() def build_prompt(self, query, search_results): context = self.build_context(search_results) return self.prompt_template.format(question=query, context=context) def _call_llm(self, prompt): return self.llm_client.completion( model=self.model, messages=[ {"role": "developer", "content": self.instructions}, {"role": "user", "content": prompt}, ], ) def llm(self, prompt): response = self._call_llm(prompt) return response.choices[0].message.content def rag(self, query): search_results = self.search(query, num_results=10) prompt = self.build_prompt(query, search_results) return self.llm(prompt)