ó
    °"³j2  ã            	      óÄ  • S r SSKJr  SSKrSSKrSSKrSSKJrJrJ	r	  SSKJ
r
JrJrJrJr  SSKJrJrJrJrJrJrJrJr  SSKJr  SSKJrJr  SS	KJrJr  SS
K J!r!  \
(       a  SSKJ"r"  \" S5      r#SS jr$ " S S\5      r% " S S\\&\'\&\4   -     5      r( " S S\%5      r)SS.           SS jjr*SSS.             SS jjr+SS jr,SS.     SS jjr-g) a  Shared spec utilities for constructing objects from YAML/JSON/dict specifications.

This module provides the `NamedSpec` class (generalized from `EvaluatorSpec` in pydantic_evals)
and registry/loading utilities that can be reused by both the evaluator system and the capability system.
é    )ÚannotationsN)ÚCallableÚMappingÚSequence)ÚTYPE_CHECKINGÚAnyÚLiteralÚTypeVarÚcast)Ú	BaseModelÚ
ConfigDictÚ	RootModelÚValidationErrorÚfield_validatorÚmodel_serializerÚmodel_validatorÚwith_config)Úto_jsonable_python)ÚSerializationInfoÚSerializerFunctionWrapHandler)ÚNotRequiredÚ	TypedDict)Úget_function_type_hints)ÚModelWrapValidatorHandlerÚTc                óh   • [        U SS9n[        U[        5      =(       a    [        S U 5       5      $ )aÉ  Check if a value would serialize to a dict with all string keys.

When serialize() uses the compact tuple form (arguments = (value,)), the serialized
output becomes {Name: value}. On deserialization, _SerializedNamedSpec._args
treats any dict with all-string keys as kwargs. This means a single positional argument
that is itself a dict (like ModelSettings) would be incorrectly unpacked as kwargs
on the round-trip. We avoid the compact form in this case.
T)Úserialize_unknownc              3  óB   #   • U  H  n[        U[        5      v •  M     g 7f©N©Ú
isinstanceÚstr©Ú.0Úks     ÚN/home/mande/repo/quber/.venv/lib/python3.13/site-packages/pydantic_ai/_spec.pyÚ	<genexpr>Ú2serializes_as_string_keyed_dict.<locals>.<genexpr>/   s   é € Ð-SÊ(ÀQ¬j¸¼C×.@Ð.@Ê(ùó   ‚)r   r!   ÚdictÚall)ÚvalueÚjsonables     r&   Úserializes_as_string_keyed_dictr.   %   s-   € ô " %¸4Ñ@€HÜ�h¤Ó%×S¬#Ñ-SÉ(Ó-SÓ*SÐSó    c                  óœ   • \ rS rSr% SrS\S'    S\S'    \SS j5       r\SS j5       r\	" S	S
9\
SS j5       5       r\" S	S
9SS j5       rSrg)Ú	NamedSpecé2   uü   A specification for constructing a named object from serialized arguments.

Supports three short forms:
* `'MyClass'` â€” no arguments
* `{'MyClass': single_arg}` â€” a single positional argument
* `{'MyClass': {k1: v1, k2: v2}}` â€” keyword arguments
r"   Únameú"None | tuple[Any] | dict[str, Any]Ú	argumentsc                óZ   • [        U R                  [        5      (       a  U R                  $ g)zGet the positional arguments.© )r!   r5   Útuple©Úselfs    r&   ÚargsÚNamedSpec.argsD   s"   € ô �d—n‘n¤e×,Ñ,Ø—>‘>Ð!Ør/   c                ó\   • [        U R                  [        5      (       a  U R                  $ 0 $ )zGet the keyword arguments.)r!   r5   r*   r9   s    r&   ÚkwargsÚNamedSpec.kwargsK   s$   € ô �d—n‘n¤d×+Ñ+Ø—>‘>Ð!Øˆ	r/   Úwrap)Úmodec                ó²   •  U" U5      $ ! [          aB  n [        R                  U5      nO! [          a    Uef = fUR                  U 5      s SnA$ SnAff = f)z-Deserialize a NamedSpec from various formats.N)r   Ú_SerializedNamedSpecÚmodel_validateÚto_named_spec)Úclsr,   ÚhandlerÚexcÚdeserializeds        r&   ÚdeserializeÚNamedSpec.deserializeR   s[   € ð	3Ù˜5“>Ð!øÜó 	3ðÜ3×BÑBÀ5ÓI‘øÜ"ó Ø�	ðúà×-Ñ-¨cÓ2Õ2ûð	3ús'   ‚
 Š
A•+ªA«8¸AÁAÁAc                ó°  • [        UR                  [        5      (       a°  UR                  R                  S5      (       a�  U R                  c  U R
                  $ [        U R                  [        5      (       a@  [        U R                  S   5      (       a  U" U 5      $ U R
                  U R                  S   0$ U R
                  U R                  0$ U" U 5      $ )z7Serialize using the appropriate short-form if possible.Úuse_short_formr   )r!   Úcontextr*   Úgetr5   r3   r8   r.   )r:   rG   Úinfos      r&   Ú	serializeÚNamedSpec.serialize_   s¤   € ô �d—l‘l¤D×)Ñ)¨d¯l©l×.>Ñ.>Ð?O×.PÑ.PØ�~‰~Ñ%Ø—y‘yÐ Ü˜DŸN™N¬E×2Ñ2ô 3°4·>±>À!Ñ3D×EÑEÙ" 4›=Ð(ØŸ	™	 4§>¡>°!Ñ#4Ð5Ð5àŸ	™	 4§>¡>Ð2Ð2á˜4“=Ð r/   r7   N)Úreturnztuple[Any, ...])rS   údict[str, Any])r,   r   rG   z$ModelWrapValidatorHandler[NamedSpec]rS   r1   )rG   r   rP   r   rS   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__Úpropertyr;   r>   r   ÚclassmethodrJ   r   rQ   Ú__static_attributes__r7   r/   r&   r1   r1   2   s~   ‡ ñð ƒIØ-à1Ó1ðð
 óó ðð óó ðñ ˜&Ñ!Øó	3ó ó "ð	3ñ ˜6Ñ"ó!ó #ó!r/   r1   c                  óz   • \ rS rSrSr\" S5      \S
S j5       5       r\SS j5       r	\SS j5       r
\4SS jjrSrg	)rC   éq   z?Internal class for handling the serialized form of a NamedSpec.Úrootc                óœ   • [        U[        5      (       a  U$ [        U5      S:w  a%  [        S[	        UR                  5       5       35      eU$ )zBEnforce that the root value has exactly one key when it is a dict.é   z<Expected a single key containing the class name, found keys )r!   r"   ÚlenÚ
ValueErrorÚlistÚkeys)rF   r,   s     r&   Úenforce_one_keyÚ$_SerializedNamedSpec.enforce_one_keyt   sJ   € ô �eœS×!Ñ!ØˆLÜˆu‹:˜‹?ÜÐ[Ô\`Ðaf×akÑakÓamÓ\nÐ[oÐpÓqÐqØˆr/   c                ó°   • [        U R                  [        5      (       a  U R                  $ [        [	        U R                  R                  5       5      5      $ r   )r!   r`   r"   ÚnextÚiterrf   r9   s    r&   Ú_nameÚ_SerializedNamedSpec._name~   s8   € ä�d—i‘i¤×%Ñ%Ø—9‘9ÐÜ”D˜Ÿ™Ÿ™Ó)Ó*Ó+Ð+r/   c                ó€  • [        U R                  [        5      (       a  g [        [	        U R                  R                  5       5      5      n[        U[        5      (       aM  [        UR                  5       5      n[        S U 5       5      (       a  [        [        [        [        4   U5      $ [        [        U5      4$ )Nc              3  óB   #   • U  H  n[        U[        5      v •  M     g 7fr   r    r#   s     r&   r'   Ú-_SerializedNamedSpec._args.<locals>.<genexpr>�   s   é € Ð4ªt¨!”:˜a¤×%Ð%ªtùr)   )r!   r`   r"   rj   rk   Úvaluesr*   re   rf   r+   r   r   )r:   r,   rf   s      r&   Ú_argsÚ_SerializedNamedSpec._args„   s‡   € ä�d—i‘i¤×%Ñ%Øä”T˜$Ÿ)™)×*Ñ*Ó,Ó-Ó.ˆä�eœT×"Ñ"Ü" 5§:¡:£<Ó0ˆDÜÑ4©tÓ4×4Ñ4ÜœD¤¤c ™N¨EÓ2Ð2ô ”S˜%Ó Ð"Ð"r/   c                ó8   • U" U R                   U R                  S9$ )N)r3   r5   )rl   rr   ©r:   rF   s     r&   rE   Ú"_SerializedNamedSpec.to_named_spec“   s   € Ù˜Ÿ
™
¨d¯j©jÑ9Ð9r/   r7   N)r,   zstr | dict[str, Any]rS   r   )rS   r"   )rS   r4   )rF   ztype[NamedSpec]rS   r1   )rU   rV   rW   rX   rY   r   r\   rg   r[   rl   rr   r1   rE   r]   r7   r/   r&   rC   rC   q   s[   † ÙIá�VÓØóó ó ðð ó,ó ð,ð
 ó#ó ð#ð 4=÷ :ñ :r/   rC   c                  ó   • \ rS rSrSrSrg)ÚCapabilitySpecé—   zõA capability specification, distinguishable from other NamedSpec types for schema generation.

In JSON schemas, fields typed as CapabilitySpec are replaced with the full
capability Union (the same set of types used in `AgentSpec.capabilities`).
r7   N)rU   rV   rW   rX   rY   r]   r7   r/   r&   rx   rx   —   s   † ôr/   rx   )Úvalidatec                ó  • 0 nU  HP  nUb  U" U5        U" U5      nUc  [        SU SUR                   S35      eXu;   a  [        SU SU< 35      eXeU'   MR     U H!  nU" U5      nUc  M  UR                  Xv5        M#     U$ )aÌ  Create a registry of types from default and custom types.

Args:
    custom_types: Additional classes to include in the registry.
    defaults: Default classes to include (can be overridden by custom types).
    get_name: Callable to get the serialization name from a class. Return None to opt out.
    label: Human-readable label for error messages.
    validate: Optional callback to validate each custom type.

Returns:
    A mapping from names to classes.
zCustom z class z. has opted out of serialization (name is None)z
Duplicate z class name: )rd   rU   Ú
setdefault)Úcustom_typesÚdefaultsÚget_nameÚlabelrz   ÚregistryrF   r3   s           r&   Úbuild_registryr‚   Ÿ   s¢   € ð( $&€HãˆØÑÙ�SŒMÙ˜‹}ˆØ‰<Ü˜w u g¨W°S·\±\°NÐBpÐqÓrÐrØÓÜ˜z¨%¨°¸d¹XÐFÓGÐGØ�‹ñ ó ˆÙ˜‹}ˆØÓà×Ñ Ö*ñ	 ð €Or/   )rN   Úinstantiatec               óÆ  • UR                   nU R                  U5      nUcC  [        UR                  5        SU< SU S[	        U R                  5       5       SU SU S35      e Ub  U" XqR                  UR                  5      $ U" UR                  0 UR                  D6$ ! [         a5  nU(       a  SU 3OS	n	[        S
U SUR                   < U	 SU 35      UeSnAff = f)aá  Load an object from the registry based on a specification.

Args:
    registry: Mapping from names to classes.
    spec: Specification of the object to load.
    label: Human-readable label for error messages.
    custom_types_param: Name of the parameter for custom types, used in error messages.
    context: Optional context for error messages.
    instantiate: Optional callback to instantiate the class. Default: `cls(*args, **kwargs)`.

Returns:
    An initialized instance.
NÚ z is not in the provided `z`. Valid choices: z$. If you are trying to use a custom z$, you must include its type in the `z` argument.z for Ú zFailed to instantiate z: )	r3   rO   rd   Ú
capitalizere   rf   r;   r>   Ú	Exception)
r�   Úspecr€   Úcustom_types_paramrN   rƒ   r3   rF   ÚeÚdetails
             r&   Úload_from_registryr�   È   s  € ð, �9‰9€DØ
�,‰,�tÓ
€CØ
�{ÜØ×ÑÓ!Ð" ! D¡8Ð+DÐEWÐDXÐXjÔkoÐpx×p}Ñp}Ópó  lAð  kBð B2Ø27°Ð8\Ð]oÐ\pÐp{ð}ó
ð 	
ð]ØÑ"Ù˜s§I¡I¨t¯{©{Ó;Ð;á˜Ÿ	™	Ð1 T§[¡[Ñ1Ð1øÜó ]Þ&-�5˜˜	Ñ"°2ˆÜÐ1°%°¸¸$¿)¹)¹ÀvÀhÈbÐQRÐPSÐTÓUÐ[\Ð\ûð]ús   Á%B! ÂB! Â!
C Â+0CÃC c                ó*  • [        U [        5      (       a  g[        R                  " U 5      nU[        L a  gU[        R
                  L d  [        U [        R                  5      (       ap  [        R                  " U 5      nU Vs/ s H  n[        U5      =nc  M  UPM     nnU(       d  g[        U5      S:X  a  US   $ [        R
                  [        U5         $ [        R                  " U 5      nU(       a  [        S U 5       5      (       a  gU $ s  snf )zÏFilter a type to only include members that can be represented in JSON schema.

For Union types, removes non-serializable members (TypeVars, Callables).
Returns None if the type is entirely non-serializable.
Nrb   r   c              3  ó<   #   • U  H  n[        U5      S L v •  M     g 7fr   )Úfilter_serializable_type)r$   Úas     r&   r'   Ú+filter_serializable_type.<locals>.<genexpr>  s   é € ÐFÂ¸AÔ,¨QÓ/°4Õ7Âùs   ‚)r!   r
   ÚtypingÚ
get_originr   ÚUnionÚtypesÚ	UnionTypeÚget_argsr�   rc   r8   Úany)ÚtpÚoriginr;   r‘   ÚfaÚfiltereds         r&   r�   r�   ï   sÞ   € ô �"”g×ÑØä×Ò˜rÓ"€Fð ”ÒØð ”—‘Ò¤¨B´·±×!@Ñ!@Ü�Š˜rÓ"ˆÙ $ÓX¢˜1Ô/GÈÓ/JÐ)J¨—B¡ˆÐXÞØÜˆx‹=˜AÓØ˜A‘;ÐÜ�|‰|œE (›OÑ,Ð,ô �?Š?˜2Ó€DÞ”ÑFÁÓF×FÑFØà€Iùò Ys   ÂDÂD)Úget_schema_targetc               ó„  ^• / nU R                  5        GH¡  u  mnUb  U" U5      OUn[        U5      nUR                  SS5        UR                  5        VVs0 s H  u  pg[        U5      =nc  M  Xh_M     nnn0 n	[        R
                  " U5      R                  R                  5        GH%  n
U
R                  S;   aD  U
R                  U
R                  U
R                  4;   a  UR                  U
R                  S5        MX  U
R                  U
R                  U
R                  4;   a  UR                  U
R                  S5        Mœ  U
R                  U;  a  M®  UR                  U
R                  [        5        U
R                   U
R"                  La$  [$        XZR                        XZR                  '   GM  XZR                     XšR                  '   GM(     S
U4S jjn['        U5      S:X  d  U	(       d  UR)                  [*        T   5        ['        U5      S:X  a-  UR                  5       u  nUR)                  U" STU05      5        O;['        U	5      S:X  a,  U	R                  5       u  nUR)                  U" STU05      5        ['        U5      S:”  d  GM~  U" SU5      nUR)                  U" S	TU05      5        GM¤     U$ s  snnf )ad  Build a list of schema types from a registry for JSON schema generation.

Args:
    registry: Mapping from names to classes.
    get_schema_target: Optional callback to get the schema target (e.g. `from_spec` method)
        from a class. Default: use the class itself.

Returns:
    A list of types suitable for use in a Union for JSON schema generation.
NrS   ru   c                óX   >• [        U  ST 3U5      n[        [        SSS95      " U5      $ )NÚ_ÚforbidT)ÚextraÚarbitrary_types_allowed)r   r   r   )Úcls_name_prefixÚfieldsÚtdr3   s      €r&   Ú_make_typed_dictÚ,build_schema_types.<locals>._make_typed_dict<  s4   ø€ Ü˜oÐ.¨a°¨vÐ6¸Ó?ˆBÜœz°ÐRVÑWÔXÐY[Ó\Ð\r/   r   rb   Ú
short_specÚspec_paramsr‰   )r¥   r"   r¦   rT   rS   r   )Úitemsr   Úpopr�   ÚinspectÚ	signatureÚ
parametersrq   r3   ÚkindÚPOSITIONAL_ONLYÚPOSITIONAL_OR_KEYWORDÚVAR_POSITIONALÚVAR_KEYWORDr|   r   ÚdefaultÚemptyr   rc   Úappendr	   )r�   rž   Úschema_typesrF   ÚtargetÚ
type_hintsr%   ÚvÚfvÚrequired_type_hintsÚpr¨   Útype_hint_typeÚ	params_tdr3   s                 @r&   Úbuild_schema_typesrÂ     sW  ø€ ð !€LØ—^‘^×%‰	ˆˆcØ+<Ñ+HÑ" 3Ô'ÈcˆÜ,¨VÓ4ˆ
Ø�‰�x Ô&ð )3×(8Ñ(8Ô(:ÔnÒ(:¡ ÔE]Ð^_ÓE`Ð?`¸r“e�a’eÑ(:ˆ
Ñnà.0Ðä×"Ò" 6Ó*×5Ñ5×<Ñ<×>ˆAà�v‰v˜Ó(¨Q¯V©V¸×8IÑ8IÈ1×KbÑKbÐ7cÓ-cØ—‘˜qŸv™v tÔ,ÙØ�v‰v˜!×*Ñ*¨A¯M©MÐ:Ó:Ø—‘˜qŸv™v tÔ,Ùà�v‰v˜ZÓ'ÙØ×!Ñ! !§&¡&¬#Ô.Ø�y‰y §¡Ò'Ü%0°¿F¹FÑ1CÑ%D�
Ÿ6™6Ô"à.8¿¹Ñ.@Ð#§F¡FÔ+ñ ?÷"	]ô
 ˆz‹?˜aÓÖ':Ø×Ñ¤¨¡Ô.ô ˆz‹?˜aÓØ)×0Ñ0Ó2Ñˆ^Ø×ÑÑ 0°ÀÀnÐ?UÓ VÕWÜÐ$Ó%¨Ó*Ø2×9Ñ9Ó;Ñˆ^Ø×ÑÑ 0°ÀÀnÐ?UÓ VÔWô ˆz‹?˜QÖÙ(¨¸
ÓCˆIØ×ÑÑ 0°¸$À	Ð9JÓ K×Lñ] &ð` ÐùóU os   ÁJ<Á0J<)r,   r   rS   Úbool)r}   úSequence[type[T]]r~   rÄ   r   zCallable[[type[T]], str | None]r€   r"   rz   z Callable[[type[T]], None] | NonerS   úMapping[str, type[T]])r�   rÅ   r‰   r1   r€   r"   rŠ   r"   rN   z
str | Nonerƒ   z>Callable[[type[T], tuple[Any, ...], dict[str, Any]], T] | NonerS   r   )rš   r   rS   z
Any | None)r�   zMapping[str, type[Any]]rž   z!Callable[[type[Any]], Any] | NonerS   z	list[Any]).rY   Ú
__future__r   r®   r–   r“   Úcollections.abcr   r   r   r   r   r	   r
   r   Úpydanticr   r   r   r   r   r   r   r   Úpydantic_corer   Úpydantic_core.core_schemar   r   Útyping_extensionsr   r   Úpydantic_ai._utilsr   r   r   r.   r1   r"   r*   rC   rx   r‚   r�   r�   rÂ   r7   r/   r&   Ú<module>rÍ      s]  ðñõ #ã Û Û ß 7Ñ 7ß =Õ =÷	÷ 	ó 	õ -ß Vß 4å 6æÝ2áˆCƒL€ô
Tô<!�	ô <!ô~#:˜9 S¨4°°S°©>Ñ%9Ñ:ô #:ôL�Yô ð 26ñ&à#ð&ð  ð&ð .ð	&ð
 ð&ð /ð&ð õ&ð^ ØRVñ$]Ø#ð$]à
ð$]ð ð	$]ð
 ð$]ð ð$]ð Pð$]ð õ$]ôNðJ <@ñ@Ø%ð@ð 9ð@ð ö	@r/   