
    Ah
                         S SK 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  \ R$                  " \5      rS
r\R,                  " \5      r " S S\5      rg)    N)#AsyncCallbackManagerForRetrieverRunCallbackManagerForRetrieverRun)Document)BaseLLMStrOutputParser)BasePromptTemplate)PromptTemplate)BaseRetriever)RunnablezYou are an assistant tasked with taking a natural language query from a user and converting it into a query for a vectorstore. In this process, you strip out information that is not relevant for the retrieval task. Here is the user query: {question}c            
           \ rS rSr% Sr\\S'   \\S'   \\	4S\S\
S\SS 4S jj5       rS	\S
\S\\   4S jrS	\S
\S\\   4S jrSrg)RePhraseQueryRetriever   zXGiven a query, use an LLM to re-phrase it.
Then, retrieve docs for the re-phrased query.	retriever	llm_chainllmpromptreturnc                 .    X2-  [        5       -  nU " UUS9$ )a0  Initialize from llm using default template.

The prompt used here expects a single input: `question`

Args:
    retriever: retriever to query documents from
    llm: llm for query generation using DEFAULT_QUERY_PROMPT
    prompt: prompt template for query generation

Returns:
    RePhraseQueryRetriever
)r   r   r   )clsr   r   r   r   s        W/var/www/html/shao/venv/lib/python3.13/site-packages/langchain/retrievers/re_phraser.pyfrom_llmRePhraseQueryRetriever.from_llm"   s&    & L?#44	
 	
    queryrun_managerc                    U R                   R                  USUR                  5       05      n[        R	                  SU5        U R
                  R                  USUR                  5       0S9$ )zGet relevant documents given a user question.

Args:
    query: user question

Returns:
    Relevant documents for re-phrased question
	callbackszRe-phrased question: %s)config)r   invoke	get_childloggerinfor   )selfr   r   re_phrased_questions       r   _get_relevant_documents.RePhraseQueryRetriever._get_relevant_documents;   so     #nn33+//12
 	-/BC~~$$!6!6!89 % 
 	
r   c                   #    [         e7f)N)NotImplementedError)r$   r   r   s      r   _aget_relevant_documents/RePhraseQueryRetriever._aget_relevant_documentsS   s      "!s   	 N)__name__
__module____qualname____firstlineno____doc__r   __annotations__r   classmethodDEFAULT_QUERY_PROMPTr   r	   r   strr   listr   r&   r   r*   __static_attributes__r,   r   r   r   r      s    5 
 &:	
 
 
 #	

 
"
 
0

 4	

 
h
0"" 9	"
 
h"r   r   )logginglangchain_core.callbacksr   r   langchain_core.documentsr   langchain_core.language_modelsr   langchain_core.output_parsersr   langchain_core.promptsr	   langchain_core.prompts.promptr
   langchain_core.retrieversr   langchain_core.runnablesr   	getLoggerr-   r"   DEFAULT_TEMPLATEfrom_templater4   r   r,   r   r   <module>rD      s\     . 2 9 5 8 3 -			8	$:  &334DE >"] >"r   