§
    ØŽ’jµ  ã                   óø   — d Z ddlmZ ddl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 ddl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edefd„Z  e e	¦  «        Z! G d„ de¦  «        Z"dS )zAThe builtin tool used to generate the required structured output.é    )Údeepcopy)ÚAnyÚ	GeneratorÚListÚType)ÚDraft202012ValidatorÚ
validators)Ú	BaseModelÚValidationErroré   )ÚPermissionContext)ÚPermissionDecision)ÚPermissionBehavior)Ú_remove_title_field)Ú	TextBlockÚToolResultState)ÚToolBaseÚToolMiddlewareBase)Ú	ToolChunk)Ú
AgentStateÚvalidator_classÚreturnc                 óº   ‡— | j         d         Šdt          dt          dt          dt          dt          t          ddf         f
ˆfd„}t	          j        | d|i¦  «        S )zkExtend a jsonschema validator to fill the schema-declared defaults
    into the instance during validation.Ú
propertiesÚ	validatorÚinstanceÚschemar   Nc              3   óì   •K  — |                      ¦   «         D ]G\  }}t          |t          ¦  «        r-d|v r)|                     |t	          |d         ¦  «        ¦  «         ŒH ‰| |||¦  «        E d {V —† d S )NÚdefault)ÚitemsÚ
isinstanceÚdictÚ
setdefaultr   )r   r   r   r   ÚpropÚ	subschemaÚvalidate_propertiess         €úVC:\Projects\DSCons\.venv\Lib\site-packages\agentscope\agent\_structured_output_tool.pyÚset_defaultsz*_extend_with_default.<locals>.set_defaults   sš   øè è € ð  *×/Ò/Ñ1Ô1ð 	Jð 	J‰OˆD�)Ý˜(¥DÑ)Ô)ð J¨i¸9Ð.DÐ.DØ×#Ò# D­(°9¸YÔ3GÑ*HÔ*HÑIÔIÐIøØ&Ð& y°*¸hÈÑOÔOÐOÐOÐOÐOÐOÐOÐOÐOÐOó    )Ú
VALIDATORSr   r"   r   r	   Úextend)r   r(   r&   s     @r'   Ú_extend_with_defaultr,      s�   ø€ ð *Ô4°\ÔBÐð	PÝð	Påð	Põ ð	Põ ð		Põ
 
•3˜˜d�?Ô	#ð	Pð 	Pð 	Pð 	Pð 	Pð 	Põ Ô˜_¨|¸\Ð.JÑKÔKÐKr)   c                   óÀ   ‡ — e Zd ZdZdZdZdZdZdZ	 dde	e
         ez  dee         dz  ddfˆ fd	„Zedefd
„¦   «         Zdeeef         dedefd„Zdededefd„Zˆ xZS )Ú_GenerateStructuredOutputz4The builtin tool used to generate structured output.ÚGenerateStructuredOutputa6  Generate the required structured output by this tool.

This tool is equipped only when you're required to generate structured output.
The input schema represents the required structured output.
When you are ready to generate a structured output, call this tool with the
structured output as input.
When you're equipped this tool, you MUST end your response with calling this
tool. Once this tool is called, your current response is finished and the
structured output is sent to the user.

# When to Use This Tool
- When you collect enough resources and information.
TNr   Úmiddlewaresr   c                 óZ   •— t          ¦   «                              |¬¦  «         || _        dS )z=Initialize the tool with a model class or a JSON schema dict.)r0   N)ÚsuperÚ__init__r   )Úselfr   r0   Ú	__class__s      €r'   r3   z"_GenerateStructuredOutput.__init__@   s+   ø€ õ 	‰Œ×Ò [ÐÑ1Ô1Ð1ØˆŒˆˆr)   c                 óÄ   — t          | j        t          ¦  «        r&t          | j                             ¦   «         ¦  «        S t          t          | j        ¦  «        ¦  «        S )zThe input schema of this tool.)r!   r   Útyper   Úmodel_json_schemar   )r4   s    r'   Úinput_schemaz&_GenerateStructuredOutput.input_schemaI   sM   € õ �d”k¥4Ñ(Ô(ð 	HÝ& t¤{×'DÒ'DÑ'FÔ'FÑGÔGÐGÝ"¥8¨D¬KÑ#8Ô#8Ñ9Ô9Ð9r)   Ú
tool_inputÚcontextc              ƒ   óL   K  — t          t          j        | j        › d�¬¦  «        S )zKThe generate structured output tool is always allowed
        to be called.z is always allowed.)ÚbehaviorÚmessage)r   r   ÚALLOWÚname)r4   r:   r;   s      r'   Úcheck_permissionsz+_GenerateStructuredOutput.check_permissionsP   s3   è è € õ "Ý'Ô-Ø”yÐ5Ð5Ð5ð
ñ 
ô 
ð 	
r)   Ú_agent_stateÚkwargsc              ‹   ó®  K  — |j         j        }|s*t          t          d¬¦  «        gt          j        ¬¦  «        S t          |t          ¦  «        rÒ	 |                     |¦  «        }nš# t          $ r�}t          |t          ¦  «        r2d                     d„ |                     ¦   «         D ¦   «         ¦  «        }nt          |¦  «        }t          t          d|› �¬¦  «        gt          j        ¬¦  «        cY d}~S d}~ww xY w|                     d¬	¦  «        |j         _        n‹t#          |¦  «        }t%          |                     |¦  «        ¦  «        }|rLd                     d
„ |D ¦   «         ¦  «        }	t          t          d|	› �¬¦  «        gt          j        ¬¦  «        S ||j         _        t          t          d¬¦  «        gt          j        ¬¦  «        S )zªValidate the given structured output and record it in the agent
        state. The tool input fields (defined by the required schema) arrive
        as keyword arguments.z)No structured output is required for now.)Útext)ÚcontentÚstatez; c              3   óv   K  — | ]4}d                       d„ |d         D ¦   «         ¦  «        › d|d         › �V — Œ5dS )ú.c              3   ó4   K  — | ]}t          |¦  «        V — Œd S ©N)Ústr©Ú.0Ú_s     r'   ú	<genexpr>z;_GenerateStructuredOutput.call.<locals>.<genexpr>.<genexpr>x   s(   è è € Ð#?Ð#?¨q¥C¨¡F¤FÐ#?Ð#?Ð#?Ð#?Ð#?Ð#?r)   Úlocú: ÚmsgN)Újoin)rN   Úerrs     r'   rP   z1_GenerateStructuredOutput.call.<locals>.<genexpr>w   sr   è è € ð (ð (ð  ð Ÿ8š8Ð#?Ð#?°C¸´JÐ#?Ñ#?Ô#?Ñ?Ô?ð (ð (Ø˜uœ:ð(ð (ð(ð (ð (ð (ð (ð (r)   zAValidationError: Structured output validation failed with error: NÚjson)Úmodec              3   ó8   K  — | ]}|j         › d |j        › �V — ŒdS )rR   N)Ú	json_pathr>   rM   s     r'   rP   z1_GenerateStructuredOutput.call.<locals>.<genexpr>�   sE   è è € ð %ð %Ø67�q”{Ð1Ð1 a¤iÐ1Ð1ð%ð %ð %ð %ð %ð %r)   z)Structured output generated successfully.)Úreply_contextÚstructured_schemar   r   r   ÚSUCCESSr!   r7   Úmodel_validateÚ	Exceptionr   rT   ÚerrorsrL   ÚERRORÚ
model_dumpÚstructured_outputÚ_DefaultFillingValidatorÚlistÚiter_errors)
r4   rB   rC   r   Ú	validatedÚer>   r   r_   Úmessagess
             r'   Úcallz_GenerateStructuredOutput.call\   sy  è è € ð Ô+Ô=ˆØð 	ÝåØHðñ ô ðõ
 &Ô-ðñ ô ð õ �f�dÑ#Ô#ð ,	BðØ"×1Ò1°&Ñ9Ô9�	�	øåð ð ð Ý˜a¥Ñ1Ô1ð %Ø"Ÿišið (ð (ð $%§8¢8¡:¤:ð(ñ (ô (ñ ô �G�Gõ " !™fœf�GÝ å!ð"GØ=Dð"Gð "Gðñ ô ðõ *Ô/ðñ ô ð ð ð ð ð ð øøøøðøøøð& ×$Ò$¨&Ð$Ñ1Ô1ð Ô&Ô8Ð8õ 1°Ñ8Ô8ˆIÝ˜)×/Ò/°Ñ7Ô7Ñ8Ô8ˆFØð ØŸ9š9ð %ð %Ø;Að%ñ %ô %ñ ô �õ !å!ð"HØ=Eð"Hð "Hðñ ô ðõ *Ô/ðñ ô ð ð <BˆLÔ&Ô8ååØDðñ ô ðõ
 "Ô)ð
ñ 
ô 
ð 	
s   ÁA' Á'
C>Á1BC9Ã3C>Ã9C>rK   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r@   ÚdescriptionÚis_state_injectedÚis_concurrency_safeÚis_read_onlyr   r
   r"   r   r   r3   Úpropertyr9   rL   r   r   r   rA   r   r   ri   Ú__classcell__)r5   s   @r'   r.   r.   *   s6  ø€ € € € € Ø>Ð>à%€Dð€Kð ÐØÐØ€Lð
 8<ðð à�Y” $Ñ&ðð Ð,Ô-°Ñ4ðð 
ð	ð ð ð ð ð ð ð:˜dð :ð :ð :ñ „Xð:ð

à˜˜c˜”Nð

ð #ð

ð 
ð	

ð 

ð 

ð 

ðI
à ðI
ð ðI
ð 
ð	I
ð I
ð I
ð I
ð I
ð I
ð I
ð I
r)   r.   N)#rm   Úcopyr   Útypingr   r   r   r   Ú
jsonschemar   r	   Úpydanticr
   r   Úpermission._contextr   Úpermission._decisionr   Úpermission._typesr   Útool._utilsr   r>   r   r   Ú
tool._baser   r   Útool._responser   rG   r   r,   rc   r.   © r)   r'   ú<module>r      s‡  ðà GÐ GØ Ð Ð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -à 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2à -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð ðL¨#ð L°#ð Lð Lð Lð Lð& 0Ð/Ð0DÑEÔEÐ ð{
ð {
ð {
ð {
ð {
 ñ {
ô {
ð {
ð {
ð {
r)   