
    Ng                     l   d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	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mZmZ d
edefdZdZ edddd          	 	 	 ddededee         deee                  dedefd            Z edddd          	 	 ddededee         dedef
d            ZdS )    )AnyListOptional)
deprecated)BaseLanguageModel)JsonKeyOutputFunctionsParser!PydanticAttrOutputFunctionsParser)BasePromptTemplateChatPromptTemplate)	BaseModel)Chain)LLMChain)_convert_schema_resolve_schema_referencesget_llm_kwargsentity_schemareturnc                 <    dddddt          |           didgddS )	Ninformation_extractionz3Extracts the relevant information from the passage.objectinfoarray)typeitems)r   
propertiesrequired)namedescription
parameters)r   )r   s    h/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain/chains/openai_functions/extraction.py_get_extraction_functionr!      sE    (L?=3Q3QRR  
 

 
 
    a<  Extract and save the relevant entities mentioned in the following passage together with their properties.

Only extract the properties mentioned in the 'information_extraction' function.

If a property is not present and is not required in the function parameters, do not include it in the output.

Passage:
{input}
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/>. 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alternativeNFschemallmprompttagsverbosec                     t          |           }|pt          j        t                    }t	          d          }t          |          }t          ||||||          }	|	S )a  Creates a chain that extracts information from a passage.

    Args:
        schema: The schema of the entities to extract.
        llm: The language model to use.
        prompt: The prompt to use for extraction.
        verbose: Whether to run in verbose mode. In verbose mode, some intermediate
            logs will be printed to the console. Defaults to the global `verbose` value,
            accessible via `langchain.globals.get_verbose()`.

    Returns:
        Chain that can be used to extract information from a passage.
    r   )key_name)r(   r)   
llm_kwargsoutput_parserr*   r+   )r!   r   from_template_EXTRACTION_TEMPLATEr   r   r   )
r'   r(   r)   r*   r+   functionextraction_promptr/   r.   chains
             r    create_extraction_chainr5   /   st    n (//HX"4"BCW"X"X0&AAAM))J #  E Lr"   pydantic_schemac                      G  fddt                     }t           d          r                                 }n                                 }t	          ||                    di                     }t          |          }|pt          j        t                    }t          |d          }t          |          }	t          |||	||          }
|
S )a@  Creates a chain that extracts information from a passage using pydantic schema.

    Args:
        pydantic_schema: The pydantic schema of the entities to extract.
        llm: The language model to use.
        prompt: The prompt to use for extraction.
        verbose: Whether to run in verbose mode. In verbose mode, some intermediate
            logs will be printed to the console. Defaults to the global `verbose` value,
            accessible via `langchain.globals.get_verbose()`

    Returns:
        Chain that can be used to extract information from a passage.
    c                   (    e Zd ZU e          ed<   dS )8create_extraction_chain_pydantic.<locals>.PydanticSchemar   N)__name__
__module____qualname__r   __annotations__)r6   s   r    PydanticSchemar9      s$         ?######r"   r>   model_json_schemadefinitionsr   )r6   	attr_name)r(   r)   r.   r/   r+   )r   hasattrr?   r'   r   getr!   r   r0   r1   r	   r   r   )r6   r(   r)   r+   r>   openai_schemar2   r3   r/   r.   r4   s   `          r     create_extraction_chain_pydanticrE   u   s   n$ $ $ $ $ $ $ $ $ $  344 1'99;;'..00.}((;; M (66HX"4"BCW"X"X5&&  M  ))J #  E Lr"   )NNF)NF)typingr   r   r   langchain_core._apir   langchain_core.language_modelsr   .langchain_core.output_parsers.openai_functionsr   r	   langchain_core.promptsr
   r   pydanticr   langchain.chains.baser   langchain.chains.llmr   'langchain.chains.openai_functions.utilsr   r   r   dictr!   r1   strboolr5   rE    r"   r    <module>rS      sS   & & & & & & & & & & * * * * * * < < < < < <        J I I I I I I I       ' ' ' ' ' ' ) ) ) ) ) )         D T    	  
		H 	!" " "L ,0 $    	  '(  49
	 
        G" "F F 
		H 	!" " "L ,0	- --	- '(- 	-
 - - -G" "F- - -r"   