Ë
    ò©Ñhú  ã                  óÆ   — d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZmZ ddlmZ  G d„ de«      Zy)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                  ó†   — e Zd ZU dZded<   	 ded<   	 ded<   	 edd„«       Ze	 	 	 dd	d
œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Zy	)ÚMultiRetrievalQAChainz\A 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                ó   — dgS )NÚresult© )Úselfs    úh/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain/chains/router/multi_retrieval_qa.pyÚoutput_keysz!MultiRetrievalQAChain.output_keys"   s
   € àˆzÐó    N)Údefault_chain_llmc               ón  — |r|sd}t        |«      ‚|D 	cg c]  }	|	d   › d|	d   › ‘Œ }
}	dj                  |
«      }t        j                  |¬«      }t	        |dgt        d¬	«      ¬
«      }t        j                  ||«      }i }|D ]:  }|j                  d«      }|d   }t        j                  |||¬«      }|d   }|||<   Œ< |r|}n^|rt        j                  |||¬«      }nCt        j                  dd«      }t	        |ddg¬«      }|€d}t        |«      ‚t        ||dd¬«      } | d|||dœ|¤ŽS c c}	w )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)   züconversation_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
   )Úclsr.   Ú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_retrieversz%MultiRetrievalQAChain.from_retrievers&   s¡  € ñ Ñ"3ð<ð ô ˜S“/Ð!ØDSÖT¸q˜1˜V™9˜+ R¨¨-Ñ(8Ð'9Ò:ÐTˆÐTØŸ9™9 \Ó2ÐÜ9×@Ñ@Ø)ô
ˆô 'Ø$Ø$˜IÜ,À7ÔKô
ˆô
 &×.Ñ.¨s°MÓBˆØÐØ%ò 	-ˆFØ—Z‘Z Ó)ˆFØ˜{Ñ+ˆIÜ×(Ñ(¨°VÀyÔQˆEØ˜&‘>ˆDØ',Ð˜tÒ$ð	-ñ Ø*‰NÙÜ(×1Ñ1ØØ%Ø+ô‰Nô /×6Ñ6°wÀÓHˆOÜ#Ø(Ø!*¨GÐ 4ôˆFð !Ð(ð)ð ô *¨#Ó.Ð.Ü.Ø%ØØ!Ø#ô	ˆNñ ð 
Ø%Ø1Ø(ñ
ð ñ	
ð 	
ùòa Us   –D2)Úreturnz	list[str])NNN)r.   r   r9   zlist[dict[str, Any]]r:   zOptional[BaseRetriever]r;   zOptional[PromptTemplate]r   zOptional[Chain]r   zOptional[BaseLanguageModel]r<   r   rG   r   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__Úpropertyr   ÚclassmethodrF   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)rK   Ú
__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>r\      s?   ðÙ Rå "å #ß  å <Ý 1Ý 3å .Ý 'Ý Aß KÝ 8ß Qõô
V
˜Oõ V
r   