Spaces:
Sleeping
Sleeping
| from typing import Dict, Any | |
| from langchain_openai import ChatOpenAI | |
| from langchain.prompts import ChatPromptTemplate | |
| from scripts.rag_chat import build_general_qa_chain | |
| def build_router_chain(model_name=None): | |
| general_qa = build_general_qa_chain(model_name=model_name) | |
| llm = ChatOpenAI(model_name=model_name or "gpt-4o-mini", temperature=0.0) | |
| class Router: | |
| def invoke(self, input_dict: Dict[str, Any]): | |
| text = input_dict.get("input", "").lower() | |
| if "code" in text or "program" in text or "debug" in text: | |
| prompt = ChatPromptTemplate.from_template( | |
| "As a coding assistant, help with this Python question.\nQuestion: {input}\nAnswer:" | |
| ) | |
| chain = prompt | llm | |
| return {"result": chain.invoke({"input": input_dict["input"]}).content} | |
| elif "summarize" in text or "summary" in text: | |
| prompt = ChatPromptTemplate.from_template( | |
| "Provide a concise summary about: {input}\nSummary:" | |
| ) | |
| chain = prompt | llm | |
| return {"result": chain.invoke({"input": input_dict["input"]}).content} | |
| elif "calculate" in text or any(char.isdigit() for char in text): | |
| return {"result": "For calculations, please ask a specific calculation or provide more context."} | |
| else: | |
| # Use RAG chain | |
| result = general_qa({"query": input_dict["input"]}) | |
| return result | |
| return Router() | |