
    AhO                        S SK Jr  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Jr  S S	KJr  S S
KJr  S SKJr  S SKJr  \" SSSS9 " S S\5      5       rg)    )annotationsN)AnyOptional)
deprecated)CallbackManagerForChainRun)BaseLanguageModel)BasePromptTemplate)RecursiveCharacterTextSplitterTextSplitter)Field)Chain)LLMChain)PROMPT_SELECTORz0.2.7zexample in API reference with more detail: https://api.python.langchain.com/en/latest/chains/langchain.chains.qa_generation.base.QAGenerationChain.htmlz1.0)sincealternativeremovalc                      \ rS rSr% SrS\S'    \" \" SS9S9rS\S	'    S
r	S\S'    Sr
S\S'    SrS\S'    \ S       SS jj5       r\SS j5       r\SS j5       r\SS j5       r S     SS jjrSrg)QAGenerationChain   aQ  Base class for question-answer generation chains.

This class is deprecated. See below for an alternative implementation.

Advantages of this implementation include:

- Supports async and streaming;
- Surfaces prompt and text splitter for easier customization;
- Use of JsonOutputParser supports JSONPatch operations in streaming mode,
  as well as robustness to markdown.

    .. code-block:: python

        from langchain.chains.qa_generation.prompt import CHAT_PROMPT as prompt
        # Note: import PROMPT if using a legacy non-chat model.
        from langchain_core.output_parsers import JsonOutputParser
        from langchain_core.runnables import (
            RunnableLambda,
            RunnableParallel,
            RunnablePassthrough,
        )
        from langchain_core.runnables.base import RunnableEach
        from langchain_openai import ChatOpenAI
        from langchain_text_splitters import RecursiveCharacterTextSplitter

        llm = ChatOpenAI()
        text_splitter = RecursiveCharacterTextSplitter(chunk_overlap=500)
        split_text = RunnableLambda(
            lambda x: text_splitter.create_documents([x])
        )

        chain = RunnableParallel(
            text=RunnablePassthrough(),
            questions=(
                split_text | RunnableEach(bound=prompt | llm | JsonOutputParser())
            )
        )
r   	llm_chaini  )chunk_overlap)defaultr   text_splittertextstr	input_key	questions
output_keyNzOptional[int]kc                f    U=(       d    [         R                  " U5      n[        XS9nU " SSU0UD6$ )z
Create a QAGenerationChain from a language model.

Args:
    llm: a language model
    prompt: a prompt template
    **kwargs: additional arguments

Returns:
    a QAGenerationChain class
)llmpromptr    )r   
get_promptr   )clsr!   r"   kwargs_promptchains         [/var/www/html/shao/venv/lib/python3.13/site-packages/langchain/chains/qa_generation/base.pyfrom_llmQAGenerationChain.from_llmO   s6    $ ;O66s;S1-U-f--    c                    [         eN)NotImplementedErrorselfs    r)   _chain_typeQAGenerationChain._chain_typee   s    !!r,   c                    U R                   /$ r.   )r   r0   s    r)   
input_keysQAGenerationChain.input_keysi   s    r,   c                    U R                   /$ r.   )r   r0   s    r)   output_keysQAGenerationChain.output_keysm   s      r,   c                f   U R                   R                  XR                     /5      nU R                  R	                  U Vs/ sH  nSUR
                  0PM     snUS9nUR                   Vs/ sH&  n[        R                  " US   R                  5      PM(     nnU R                  U0$ s  snf s  snf )Nr   )run_managerr   )r   create_documentsr   r   generatepage_contentgenerationsjsonloadsr   r   )r1   inputsr;   docsdresultsresqas           r)   _callQAGenerationChain._callq   s    
 !!22F>>4J3KL..))/34t!fann%t4# * 
 291D1DE1D#djjQ%1DE$$	 5 Fs   B)-,B.r#   r.   )r!   r   r"   zOptional[BasePromptTemplate]r&   r   returnr   )rJ   r   )rJ   z	list[str])rB   zdict[str, Any]r;   z$Optional[CallbackManagerForChainRun]rJ   zdict[str, list])__name__
__module____qualname____firstlineno____doc____annotations__r   r
   r   r   r   r   classmethodr*   propertyr2   r5   r8   rH   __static_attributes__r#   r,   r)   r   r      s    %N I"'.SA#M<  ;Is(!J!)A}* 04.. -. 	.
 
. .* " "     ! ! =A%% :% 
	% %r,   r   )
__future__r   r@   typingr   r   langchain_core._apir   langchain_core.callbacksr   langchain_core.language_modelsr   langchain_core.promptsr	   langchain_text_splittersr
   r   pydanticr   langchain.chains.baser   langchain.chains.llmr   %langchain.chains.qa_generation.promptr   r   r#   r,   r)   <module>r_      sZ    "    * ? < 5 Q  ' ) A 
	w b% b%b%r,   