"""Router chain - routes questions to vectorstore or web search.""" from typing import Literal from langchain_core.prompts import ChatPromptTemplate from langchain_core.runnables import RunnableSequence from pydantic import BaseModel, Field from src.config.prompts import Prompts from src.core.llm import get_llm class RouterQuery(BaseModel): """Route user query to the most relevant datasource.""" datasource: Literal["vectorstore", "websearch"] = Field( ..., description="Given a user question, route to web search or vectorstore.", ) def _build_router() -> RunnableSequence: """Build the question router chain.""" llm = get_llm() structured_llm = llm.with_structured_output(RouterQuery) prompt = ChatPromptTemplate.from_messages( [ ("system", Prompts.ROUTER_SYSTEM), ("human", "{question}"), ] ) return prompt | structured_llm question_router = _build_router()