
    Ah                        S r SSKJr  SSKJr  SSKJrJr  SSKJ	r	  SSK
Jr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJrJr  SSKJr  SSKJrJr  SSKJr   " S S\5      rg)zLUse a single chain to route an input to one of multiple retrieval qa chains.    )annotations)Mapping)AnyOptional)BaseLanguageModel)PromptTemplate)BaseRetriever)ConversationChain)Chain)DEFAULT_TEMPLATE)BaseRetrievalQARetrievalQA)MultiRouteChain)LLMRouterChainRouterOutputParser)MULTI_RETRIEVAL_ROUTER_TEMPLATEc                      \ rS rSr% SrS\S'    S\S'    S\S'    \SS	 j5       r\   SS
S.               SS jjj5       r	Sr
g
)MultiRetrievalQAChain   zXA multi-route chain that uses an LLM router chain to choose amongst retrieval
qa chains.r   router_chainzMapping[str, BaseRetrievalQA]destination_chainsr   default_chainc                    S/$ )Nresult )selfs    b/var/www/html/shao/venv/lib/python3.13/site-packages/langchain/chains/router/multi_retrieval_qa.pyoutput_keys!MultiRetrievalQAChain.output_keys"   s
    z    N)default_chain_llmc               |   U(       a  U(       d  Sn[        U5      eU V	s/ sH  oS    SU	S    3PM     n
n	SR                  U
5      n[        R                  " US9n[	        US/[        SS	9S
9n[        R                  " X5      n0 nU H9  nUR                  S5      nUS   n[        R                  " UUUS9nUS   nUUU'   M;     U(       a  UnO]U(       a  [        R                  " UUUS9nO?[        R                  " SS5      n[	        USS/S9nUc  Sn[        U5      e[        UUSSS9nU " SUUUS.UD6$ s  sn	f )Nzf`default_retriever` must be specified if `default_prompt` is provided. Received only `default_prompt`.namez: description
)destinationsinputquery)next_inputs_inner_key)templateinput_variablesoutput_parserprompt	retriever)r-   r.   history)r*   r+   zconversation_llm must be provided if default_chain is not specified. This API has been changed to avoid instantiating default LLMs on behalf of users.You can provide a conversation LLM like so:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI()r   )llmr-   	input_key
output_key)r   r   r   r   )
ValueErrorjoinr   formatr   r   r   from_llmgetr   r   replaceNotImplementedErrorr
   )clsr0   retriever_infosdefault_retrieverdefault_promptr   r!   kwargsmsgrr&   destinations_strrouter_templaterouter_promptr   r   r_infor-   r.   chainr#   _default_chainprompt_templates                          r   from_retrievers%MultiRetrievalQAChain.from_retrievers&   s    "3<  S/!DSTOqV9+R-(8'9:OT99\29@@)
 '$$I,7K

 &..sB%FZZ)F{+I((VyQE&>D',t$ & *N(11%+N /66wHO#(!*G 4F !()  *#...%!#	N  
%1(
 	
 	
a Us   D9r   )returnz	list[str])NNN)r0   r   r;   zlist[dict[str, Any]]r<   zOptional[BaseRetriever]r=   zOptional[PromptTemplate]r   zOptional[Chain]r!   zOptional[BaseLanguageModel]r>   r   rJ   r   )__name__
__module____qualname____firstlineno____doc____annotations__propertyr   classmethodrH   __static_attributes__r   r    r   r   r      s     ! E55GX  
 6:37)-F
 :>F
F
 .F
 3	F

 1F
 'F
 7F
 F
 
F
 F
r    r   N)rO   
__future__r   collections.abcr   typingr   r   langchain_core.language_modelsr   langchain_core.promptsr   langchain_core.retrieversr	   langchain.chainsr
   langchain.chains.baser   $langchain.chains.conversation.promptr   "langchain.chains.retrieval_qa.baser   r   langchain.chains.router.baser   "langchain.chains.router.llm_routerr   r   .langchain.chains.router.multi_retrieval_promptr   r   r   r    r   <module>ra      s?    R " #   < 1 3 . ' A K 8 Q
V
O V
r    