§
    œŠtjŒ;  ã                  óì  — d Z ddlmZ ddlZddlZddlmZmZ ddlm	Z	 ddl
mZmZmZmZmZmZmZmZ ddlmZmZ ddlmZmZ dd	lmZmZ erdd
lmZmZ ddlm Z   ed¦  «        Z!ed         Z" G d„ de#¦  «        Z$ G d„ de$¦  «        Z% G d„ de$¦  «        Z&d+d„Z' ed¬¦  «         G d„ d ee!         ¦  «        ¦   «         Z( ed¬¦  «         G d!„ d"ee!         ¦  «        ¦   «         Z) ed¬¦  «         G d#„ d$ee!         ¦  «        ¦   «         Z*e G d%„ d&ee!         ¦  «        ¦   «         Z+e G d'„ d(ee!         ¦  «        ¦   «         Z, G d)„ d*ee!         ¦  «        Z-e)e!         e*e!         z  e-e!         z  Z.dS ),z)Types for setting agent response formats.é    )ÚannotationsN)Ú	dataclassÚis_dataclass)Ú	UnionType)ÚTYPE_CHECKINGÚAnyÚGenericÚLiteralÚTypeVarÚUnionÚget_argsÚ
get_origin)ÚBaseToolÚStructuredTool)Ú	BaseModelÚTypeAdapter)ÚSelfÚis_typeddict)ÚCallableÚIterable)Ú	AIMessageÚSchemaT)Úpydanticr   Ú	typeddictÚjson_schemac                  ó   — e Zd ZU dZded<   dS )ÚStructuredOutputErrorz(Base class for structured output errors.r   Ú
ai_messageN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    ú`/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain/agents/structured_output.pyr   r   #   s$   € € € € € € Ø2Ð2àÐÐÑÐÐr%   r   c                  ó$   ‡ — e Zd ZdZd	ˆ fd„Zˆ xZS )
ÚMultipleStructuredOutputsErrorzZRaised when model returns multiple structured output tool calls when only one is expected.Ú
tool_namesú	list[str]r   r   ÚreturnÚNonec                ó”   •— || _         || _        t          ¦   «                              dd                     |¦  «        › d�¦  «         dS )zèInitialize `MultipleStructuredOutputsError`.

        Args:
            tool_names: The names of the tools called for structured output.
            ai_message: The AI message that contained the invalid multiple tool calls.
        z:Model incorrectly returned multiple structured responses (z, z) when only one is expected.N)r)   r   ÚsuperÚ__init__Újoin)Úselfr)   r   Ú	__class__s      €r&   r/   z'MultipleStructuredOutputsError.__init__,   s`   ø€ ð %ˆŒØ$ˆŒå‰Œ×ÒðDØ—	’	˜*Ñ%Ô%ðDð Dð Dñ	
ô 	
ð 	
ð 	
ð 	
r%   )r)   r*   r   r   r+   r,   ©r   r    r!   r"   r/   Ú__classcell__©r2   s   @r&   r(   r(   )   sC   ø€ € € € € ØdÐdð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r%   r(   c                  ó$   ‡ — e Zd ZdZdˆ fd
„Zˆ xZS )ÚStructuredOutputValidationErrorzXRaised when structured output tool call arguments fail to parse according to the schema.Ú	tool_nameÚstrÚsourceÚ	Exceptionr   r   r+   r,   c                ó‚   •— || _         || _        || _        t          ¦   «                              d|› d|› d�¦  «         dS )a  Initialize `StructuredOutputValidationError`.

        Args:
            tool_name: The name of the tool that failed.
            source: The exception that occurred.
            ai_message: The AI message that contained the invalid structured output.
        z,Failed to parse structured output for tool 'z': ú.N)r8   r:   r   r.   r/   )r1   r8   r:   r   r2   s       €r&   r/   z(StructuredOutputValidationError.__init__?   sM   ø€ ð #ˆŒØˆŒØ$ˆŒÝ‰Œ×ÒÐ_È	Ð_Ð_ÐV\Ð_Ð_Ð_Ñ`Ô`Ð`Ð`Ð`r%   )r8   r9   r:   r;   r   r   r+   r,   r3   r5   s   @r&   r7   r7   <   sM   ø€ € € € € ØbÐbðað að að að að að að að að ar%   r7   Úschemaútype[SchemaT] | dict[str, Any]Úschema_kindÚ
SchemaKindÚdataúdict[str, Any]r+   úSchemaT | dict[str, Any]c                ó  — |dk    r|S 	 t          t                   | ¦  «        }|                     |¦  «        S # t          $ r;}t	          | dt          | ¦  «        ¦  «        }d|› d|› �}t          |¦  «        |‚d}~ww xY w)a�  Parse data using for any supported schema type.

    Args:
        schema: The schema type (Pydantic model, `dataclass`, or `TypedDict`)
        schema_kind: One of `'pydantic'`, `'dataclass'`, `'typeddict'`, or
            `'json_schema'`
        data: The data to parse

    Returns:
        The parsed instance according to the schema type

    Raises:
        ValueError: If parsing fails
    r   r   zFailed to parse data to z: N)r   r   Úvalidate_pythonr;   Úgetattrr9   Ú
ValueError)r>   r@   rB   ÚadapterÚeÚschema_nameÚmsgs          r&   Ú_parse_with_schemarM   M   s˜   € ð" �mÒ#Ð#àˆð%Ý�gÔ& vÑ.Ô.ˆØ×&Ò& tÑ,Ô,Ð,øÝð %ð %ð %Ý˜f jµ#°f±+´+Ñ>Ô>ˆØ;¨Ð;Ð;¸Ð;Ð;ˆÝ˜‰oŒo 1Ð$øøøøð%øøøs   Š.9 ¹
A>Á6A9Á9A>F)Úinitc                  ór   — e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   	 d	ed
<   	 dZded<   	 ddddœdd„ZdS )Ú_SchemaSpecz%Describes a structured output schema.r?   r>   r9   ÚnameÚdescriptionrA   r@   rC   r   Núbool | NoneÚstrict)rQ   rR   rT   ú
str | Noner+   r,   c               ó@  — || _         |r|| _        n³t          |t          ¦  «        rRt	          |                     ddt	          t          j        ¦   «         ¦  «        dd…         › �¦  «        ¦  «        | _        nLt	          t          |ddt	          t          j        ¦   «         ¦  «        dd…         › �¦  «        ¦  «        | _        |p=t          |t          ¦  «        r|                     dd¦  «        nt          |dd¦  «        pd| _	        || _
        t          |t          ¦  «        rd	| _        || _        dS t          |t          ¦  «        r7t          |t          ¦  «        r"d
| _        |                     ¦   «         | _        dS t#          |¦  «        r/d| _        t%          |¦  «                             ¦   «         | _        dS t'          |¦  «        r/d| _        t%          |¦  «                             ¦   «         | _        dS dt          |¦  «        › d�}t)          |¦  «        ‚)a~  Initialize `SchemaSpec` with schema and optional parameters.

        Args:
            schema: Schema to describe.
            name: Optional name for the schema.
            description: Optional description for the schema.
            strict: Whether to enforce strict validation of the schema.

        Raises:
            ValueError: If the schema type is unsupported.
        ÚtitleÚresponse_format_Né   r   rR   Ú r"   r   r   r   r   zUnsupported schema type: zS. Supported types: Pydantic models, dataclasses, TypedDicts, and JSON schema dicts.)r>   rQ   Ú
isinstanceÚdictr9   ÚgetÚuuidÚuuid4rG   rR   rT   r@   r   ÚtypeÚ
issubclassr   Úmodel_json_schemar   r   r   rH   )r1   r>   rQ   rR   rT   rL   s         r&   r/   z_SchemaSpec.__init__‹   s  € ð& ˆŒàð 	eØˆDŒIˆIÝ˜¥Ñ%Ô%ð 	eÝ˜FŸJšJ wÐ0ZÅ3ÅtÄzÁ|Ä|ÑCTÔCTÐUWÐVWÐUWÔCXÐ0ZÐ0ZÑ[Ô[Ñ\Ô\ˆDŒIˆIå�G F¨JÐ8bÍ3ÍtÌzÉ|Ì|ÑK\ÔK\Ð]_Ð^_Ð]_ÔK`Ð8bÐ8bÑcÔcÑdÔdˆDŒIà&ð 
å˜&¥$Ñ'Ô'ð8ˆF�JŠJ�} bÑ)Ô)Ð)å˜ ¨DÑ1Ô1Ð7°Rð 	Ôð ˆŒå�f�dÑ#Ô#ð 	"Ø,ˆDÔØ%ˆDÔÐÐÝ˜¥Ñ%Ô%ð 	"­*°V½YÑ*GÔ*Gð 	"Ø)ˆDÔØ%×7Ò7Ñ9Ô9ˆDÔÐÐÝ˜&Ñ!Ô!ð 	"Ø*ˆDÔÝ*¨6Ñ2Ô2×>Ò>Ñ@Ô@ˆDÔÐÐÝ˜&Ñ!Ô!ð 	"Ø*ˆDÔÝ*¨6Ñ2Ô2×>Ò>Ñ@Ô@ˆDÔÐÐðe­D°©L¬Lð eð eð eð õ ˜S‘/”/Ð!r%   )
r>   r?   rQ   rU   rR   rU   rT   rS   r+   r,   )r   r    r!   r"   r#   rT   r/   r$   r%   r&   rP   rP   j   s­   € € € € € € à/Ð/à*Ð*Ð*Ñ*ðð €I€I�Iðð ÐÐÑðð
 ÐÐÑØàÐÐÑØ1à€FÐÐÐÑØ=ð  Ø"&Ø"ð5"ð 5"ð 5"ð 5"ð 5"ð 5"ð 5"ð 5"r%   rP   c                  óT   — e Zd ZU dZded<   	 ded<   	 ded<   	 ded	<   	 d
ddœdd„Zd
S )ÚToolStrategyz0Use a tool calling strategy for model responses.ú*type[SchemaT] | UnionType | dict[str, Any]r>   zlist[_SchemaSpec[Any]]Úschema_specsrU   Útool_message_contentúWbool | str | type[Exception] | tuple[type[Exception], ...] | Callable[[Exception], str]Úhandle_errorsNT)rg   ri   r+   r,   c               ór   ‡— || _         || _        || _        dˆfd„Šd„  ‰|¦  «        D ¦   «         | _        dS )	z�Initialize `ToolStrategy`.

        Initialize `ToolStrategy` with schemas, tool message content, and error handling
        strategy.
        r>   r   r+   úIterable[Any]c              3  ó"  •K  — t          | ¦  «        t          t          hv r%t          | ¦  «        D ]} ‰|¦  «        E d{V —† ŒdS t	          | t
          ¦  «        r0d| v r,|                      dg ¦  «        D ]} ‰|¦  «        E d{V —† ŒdS | V — dS )z5Yield leaf variants from Union and JSON Schema oneOf.NÚoneOf)r   r   r   r   r[   r\   r]   )r>   ÚargÚsubÚ_iter_variantss      €r&   rp   z-ToolStrategy.__init__.<locals>._iter_variantsô   sÐ   øè è € å˜&Ñ!Ô!¥iµÐ%7Ð7Ð7Ý# FÑ+Ô+ð 3ð 3�CØ-˜~¨cÑ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ø�å˜&¥$Ñ'Ô'ð ¨G°vÐ,=Ð,=Ø!Ÿ:š: g¨rÑ2Ô2ð 3ð 3�CØ-˜~¨cÑ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ø�àˆLˆLˆLˆLˆLr%   c                ó,   — g | ]}t          |¦  «        ‘ŒS r$   )rP   )Ú.0Úss     r&   ú
<listcomp>z)ToolStrategy.__init__.<locals>.<listcomp>  s   € ÐLÐLÐL°�[¨™^œ^ÐLÐLÐLr%   N)r>   r   r+   rk   )r>   rg   ri   rf   )r1   r>   rg   ri   rp   s       @r&   r/   zToolStrategy.__init__à   sc   ø€ ð  ˆŒØ$8ˆÔ!Ø*ˆÔð	ð 	ð 	ð 	ð 	ð 	ð MÐL°^°^ÀFÑ5KÔ5KÐLÑLÔLˆÔÐÐr%   )r>   re   rg   rU   ri   rh   r+   r,   ©r   r    r!   r"   r#   r/   r$   r%   r&   rd   rd   Ã   s”   € € € € € € à:Ð:à6Ð6Ð6Ñ6Ø$à(Ð(Ð(Ñ(Ø*à$Ð$Ð$Ñ$ððð ð ñ ð	ð ,0ð
 (,ð"Mð "Mð "Mð "Mð "Mð "Mð "Mð "Mr%   rd   c                  óB   — e Zd ZU dZded<   	 ded<   	 ddœdd„Zdd„ZdS )ÚProviderStrategyz9Use the model provider's native structured output method.r?   r>   ú_SchemaSpec[SchemaT]Úschema_specN©rT   rT   rS   r+   r,   c               ó@   — || _         t          ||¬¦  «        | _        dS )zåInitialize `ProviderStrategy` with schema.

        Args:
            schema: Schema to enforce via the provider's native structured output.
            strict: Whether to request strict provider-side schema enforcement.
        rz   N)r>   rP   ry   )r1   r>   rT   s      r&   r/   zProviderStrategy.__init__  s&   € ð ˆŒÝ& v°fÐ=Ñ=Ô=ˆÔÐÐr%   rC   c                óh   — | j         j        | j         j        dœ}| j         j        rd|d<   d|dœ}d|iS )z†Convert to kwargs to bind to a model to force structured output.

        Returns:
            The kwargs to bind to a model.
        )rQ   r>   TrT   r   )r`   r   Úresponse_format)ry   rQ   r   rT   )r1   r   r}   s      r&   Úto_model_kwargsz ProviderStrategy.to_model_kwargs  s]   € ð Ô$Ô)ØÔ&Ô2ð'
ð '
ˆð ÔÔ"ð 	)Ø$(ˆK˜Ñ!ð "Ø&ð+
ð +
ˆð " ?Ð3Ð3r%   )r>   r?   rT   rS   r+   r,   )r+   rC   )r   r    r!   r"   r#   r/   r~   r$   r%   r&   rw   rw     sq   € € € € € € àCÐCà*Ð*Ð*Ñ*Ø!à%Ð%Ð%Ñ%Ø&ð #ð	>ð >ð >ð >ð >ð >ð4ð 4ð 4ð 4ð 4ð 4r%   rw   c                  óX   — e Zd ZU dZded<   	 ded<   	 ded<   	 edd„¦   «         Zdd„ZdS )ÚOutputToolBindinga*  Information for tracking structured output tool metadata.

    This contains all necessary information to handle structured responses generated via
    tool calls, including the original schema, its type classification, and the
    corresponding tool implementation used by the tools strategy.
    r?   r>   rA   r@   r   Útoolry   rx   r+   r   c           	     óp   —  | |j         |j        t          |j        |j        |j        ¬¦  «        ¬¦  «        S )zèCreate an `OutputToolBinding` instance from a `SchemaSpec`.

        Args:
            schema_spec: The `SchemaSpec` to convert

        Returns:
            An `OutputToolBinding` instance with the appropriate tool created
        )Úargs_schemarQ   rR   )r>   r@   r�   )r>   r@   r   r   rQ   rR   ©Úclsry   s     r&   Úfrom_schema_specz"OutputToolBinding.from_schema_specH  sM   € ð ˆsØÔ%Ø#Ô/ÝØ'Ô3Ø Ô%Ø'Ô3ðñ ô ð
ñ 
ô 
ð 	
r%   Ú	tool_argsrC   rD   c                ó8   — t          | j        | j        |¦  «        S )a  Parse tool arguments according to the schema.

        Args:
            tool_args: The arguments from the tool call

        Returns:
            The parsed response according to the schema type

        Raises:
            ValueError: If parsing fails
        )rM   r>   r@   )r1   r‡   s     r&   ÚparsezOutputToolBinding.parse\  s   € õ " $¤+¨tÔ/?ÀÑKÔKÐKr%   N©ry   rx   r+   r   )r‡   rC   r+   rD   )r   r    r!   r"   r#   Úclassmethodr†   r‰   r$   r%   r&   r€   r€   4  sˆ   € € € € € € ðð ð +Ð*Ð*Ñ*ðð ÐÐÑØMà€N€N�NØLàð
ð 
ð 
ñ „[ð
ð&Lð Lð Lð Lð Lð Lr%   r€   c                  ód   — e Zd ZU dZded<   	 ded<   	 edd
„¦   «         Zdd„Zedd„¦   «         Z	dS )ÚProviderStrategyBindinga   Information for tracking native structured output metadata.

    This contains all necessary information to handle structured responses generated via
    native provider output, including the original schema, its type classification, and
    parsing logic for provider-enforced JSON.
    r?   r>   rA   r@   ry   rx   r+   r   c                ó0   —  | |j         |j        ¬¦  «        S )zõCreate a `ProviderStrategyBinding` instance from a `SchemaSpec`.

        Args:
            schema_spec: The `SchemaSpec` to convert

        Returns:
            A `ProviderStrategyBinding` instance for parsing native structured output
        ©r>   r@   r�   r„   s     r&   r†   z(ProviderStrategyBinding.from_schema_spec|  s)   € ð ˆsØÔ%Ø#Ô/ð
ñ 
ô 
ð 	
r%   Úresponser   rD   c                ó  — |                       |¦  «        }	 t          j        |¦  «        }nA# t          $ r4}t	          | j        dd¦  «        }d|› d|› d�}t          |¦  «        |‚d}~ww xY wt          | j        | j        |¦  «        S )a@  Parse `AIMessage` content according to the schema.

        Args:
            response: The `AIMessage` containing the structured output

        Returns:
            The parsed response according to the schema

        Raises:
            ValueError: If text extraction, JSON parsing or schema validation fails
        r   r}   z1Native structured output expected valid JSON for z, but parsing failed: r=   N)	Ú"_extract_text_content_from_messageÚjsonÚloadsr;   rG   r>   rH   rM   r@   )r1   r�   Úraw_textrB   rJ   rK   rL   s          r&   r‰   zProviderStrategyBinding.parse‹  s±   € ð ×:Ò:¸8ÑDÔDˆð	)Ý”:˜hÑ'Ô'ˆDˆDøÝð 	)ð 	)ð 	)Ý! $¤+¨zÐ;LÑMÔMˆKð,ÀKð ,ð ,Ø'(ð,ð ,ð ,ð õ ˜S‘/”/ qÐ(øøøøð	)øøøõ " $¤+¨tÔ/?ÀÑFÔFÐFs   —, ¬
A*¶/A%Á%A*Úmessager9   c                óæ  — | j         }t          |t          ¦  «        r|S g }|D ]º}t          |t          ¦  «        r�|                     d¦  «        dk    r-d|v r)|                     t          |d         ¦  «        ¦  «         Œ]d|v r6t          |d         t          ¦  «        r|                     |d         ¦  «         Œ˜|                     t          |¦  «        ¦  «         Œ»d                     |¦  «        S )z³Extract text content from an `AIMessage`.

        Args:
            message: The AI message to extract text from

        Returns:
            The extracted text content
        r`   ÚtextÚcontentrZ   )r™   r[   r9   r\   r]   Úappendr0   )r–   r™   ÚpartsÚcs       r&   r’   z:ProviderStrategyBinding._extract_text_content_from_message§  sá   € ð ”/ˆÝ�g�sÑ#Ô#ð 	ØˆNØˆØð 	%ð 	%ˆAÝ˜!�TÑ"Ô"ð %Ø—5’5˜‘=”= FÒ*Ð*¨v¸¨{¨{Ø—L’L¥ Q v¤Y¡¤Ñ0Ô0Ð0Ð0Ø !�^�^­
°1°Y´<ÅÑ(EÔ(E�^Ø—L’L  9¤Ñ.Ô.Ð.øà—’�S ™VœVÑ$Ô$Ð$Ð$Ø�wŠw�u‰~Œ~Ðr%   NrŠ   )r�   r   r+   rD   )r–   r   r+   r9   )
r   r    r!   r"   r#   r‹   r†   r‰   Ústaticmethodr’   r$   r%   r&   r�   r�   k  sš   € € € € € € ðð ð +Ð*Ð*Ñ*ðð ÐÐÑØMàð
ð 
ð 
ñ „[ð
ðGð Gð Gð Gð8 ðð ð ñ „\ðð ð r%   r�   c                  ó(   — e Zd ZU dZded<   	 dd„ZdS )	ÚAutoStrategyz=Automatically select the best strategy for structured output.r?   r>   r+   r,   c                ó   — || _         dS )z&Initialize `AutoStrategy` with schema.N)r>   )r1   r>   s     r&   r/   zAutoStrategy.__init__Æ  s   € ð
 ˆŒˆˆr%   N)r>   r?   r+   r,   ru   r$   r%   r&   rŸ   rŸ   À  s?   € € € € € € ØGÐGà*Ð*Ð*Ñ*Ø$ðð ð ð ð ð r%   rŸ   )r>   r?   r@   rA   rB   rC   r+   rD   )/r"   Ú
__future__r   r“   r^   Údataclassesr   r   Útypesr   Útypingr   r   r	   r
   r   r   r   r   Úlangchain_core.toolsr   r   r   r   r   Útyping_extensionsr   r   Úcollections.abcr   r   Úlangchain_core.messagesr   r   rA   r;   r   r(   r7   rM   rP   rd   rw   r€   r�   rŸ   ÚResponseFormatr$   r%   r&   ú<module>rª      s¾  ðØ /Ð /à "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø Ð Ð Ð Ð Ð ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð :Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0àð 2Ø2Ð2Ð2Ð2Ð2Ð2Ð2Ð2à1Ð1Ð1Ð1Ð1Ð1ð ˆ'�)Ñ
Ô
€àÐHÔI€
ðð ð ð ð ˜Iñ ô ð ð
ð 
ð 
ð 
ð 
Ð%:ñ 
ô 
ð 
ð&að að að að aÐ&;ñ aô að að"%ð %ð %ð %ð: €�ÐÑÔðU"ð U"ð U"ð U"ð U"�'˜'Ô"ñ U"ô U"ñ ÔðU"ðp €�ÐÑÔð>Mð >Mð >Mð >Mð >M�7˜7Ô#ñ >Mô >Mñ Ôð>MðB €�ÐÑÔð+4ð +4ð +4ð +4ð +4�w˜wÔ'ñ +4ô +4ñ Ôð+4ð\ ð3Lð 3Lð 3Lð 3Lð 3L˜ Ô(ñ 3Lô 3Lñ „ð3Lðl ðQð Qð Qð Qð Q˜g gÔ.ñ Qô Qñ „ðQðhð ð ð ð �7˜7Ô#ñ ô ð ð ˜gÔ&Ð)9¸'Ô)BÑBÀ\ÐRYÔEZÑZ€Ø >Ð >r%   