
    9|hj              
           d dl mZ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 d	Z ed
ddd      efdeeee      ee   f   dededefd       Zy)    )ListTypeUnion)
deprecated)BaseLanguageModel)PydanticToolsParser)ChatPromptTemplate)Runnable)#convert_pydantic_to_openai_function)	BaseModelzExtract and save the relevant entities mentioned in the following passage together with their properties.

If a property is not present and is not required in the function parameters, do not include it in the output.z0.1.14a|  LangChain has introduced a method called `with_structured_output` thatis available on ChatModels capable of tool calling.You can read more about the method here: <https://python.langchain.com/docs/modules/model_io/chat/structured_output/>. Please follow our extraction use case documentation for more guidelineson how to do information extraction with LLMs.<https://python.langchain.com/docs/use_cases/extraction/>. with_structured_output does not currently support a list of pydantic schemas. If this is a blocker or if you notice other issues, please provide feedback here:<https://github.com/langchain-ai/langchain/discussions/18154>z1.0a4  
            from pydantic import BaseModel, Field
            from langchain_anthropic import ChatAnthropic
    
            class Joke(BaseModel):
                setup: str = Field(description="The setup of the joke")
                punchline: str = Field(description="The punchline to the joke") 
    
            # Or any other chat model that supports tools.
            # Please reference to to the documentation of structured_output
            # to see an up to date list of which models support 
            # with_structured_output.
            model = ChatAnthropic(model="claude-3-opus-20240229", temperature=0)
            structured_llm = model.with_structured_output(Joke)
            structured_llm.invoke("Tell me a joke about cats. 
                Make sure to call the Joke function.")
            )sincemessageremovalalternativepydantic_schemasllmsystem_messagereturnc                    t        | t              s| g} t        j                  d|fdg      }| D cg c]  }t	        |       }}|D cg c]  }d|d	 }}|j                  |      }||z  t        |       z  }	|	S c c}w c c}w )a?  Creates a chain that extracts information from a passage.

    Args:
        pydantic_schemas: The schema of the entities to extract.
        llm: The language model to use.
        system_message: The system message to use for extraction.

    Returns:
        A runnable that extracts information from a passage.
    system)userz{input}function)typer   )tools)
isinstancelistr	   from_messagesr   bindr   )
r   r   r   promptp	functionsdr   modelchains
             g/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain/chains/openai_tools/extraction.py create_extraction_chain_pydanticr&      s    f &-,---~&	
F BRRA4Q7RIR:CDQja0DEDHH5H!EUN07GHHEL	 SDs   A=	BN)typingr   r   r   langchain_core._apir   langchain_core.language_modelsr   *langchain_core.output_parsers.openai_toolsr   langchain_core.promptsr	   langchain_core.runnablesr
   %langchain_core.utils.function_callingr   pydanticr   _EXTRACTION_TEMPLATEstrr&        r%   <module>r3      s    $ $ * < J 5 - U q  

	H 	##N /Di14	?BC	  	I#Hr2   