+
    iHàjÝ#  ã                  ó  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIHtH	t	H
t
Ht ^ RIHt ]P                  ! ]4      t0 RmtR0 RmR0 Rm/tR	 R
 ltR R ltR R ltR R ltRRR/ /tR]R&   RtR R ltRR R lltR R ltR# )a{  Tool-schema preparation for Gemini's native API.

Two wire shapes: ``parametersJsonSchema`` (plain JSON Schema, v1beta only) gets a light
normalizer (``prepare_gemini_tool_parameters``); the legacy ``parameters`` field accepts
only the OpenAPI ``Schema`` subset and keeps the lossy translator
(``sanitize_gemini_tool_parameters``) for API versions without the JSON Schema field.
)ÚannotationsN)ÚAnyÚDictÚListÚOptional)Ú_normalize_type_arrayÚtypeÚ
propertiesÚarrayÚobjectc               ó    € V ^8„  d   QhRRRR/# )é   Úitemr   Úreturn© )Úformats   "Ú8/home/ubuntu/.hermes/hermes-agent/agent/gemini_schema.pyÚ__annotate__r   #   s   € ÷ 3ñ 3 ð 3¨ñ 3ó    c                ó   € \        V \        4      '       d   V '       d   R# R# \        V \        \        34      '       d(   \        P
                  ! V 4      '       d   \        V 4      # \        V \        4      '       d   V # R# )z?Gemini-safe string for a scalar enum entry, or None to drop it.ÚtrueÚfalseN)Ú
isinstanceÚboolÚintÚfloatÚmathÚisfiniteÚstr)r   s   &r   Ú_stringify_enum_valuer   #   s\   € ä�$œ×ÒßˆvÐ* 7Ð*Ü�$œœe˜×%Ò%¬$¯-ª-¸×*=Ò*=Ü�4‹yÐÜ˜d¤C×(Ò(ˆ4Ð2¨dÐ2r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú
type_arrayÚlistÚcleanedúdict[str, Any]r   ÚNoner   )r   s   "r   r   r   ,   s!   € ÷ #ñ #¨Tð #¸Nð #Ètñ #r   c                óF  € / p\        W4       RV9   dÐ   RV9   d   RVR,          /M/ p\        P                  4        UUu/ uF%  pV F  qUV9   g   K  WQP                  V4      bK  	  K'  	  pppVR,           UUUu. uFZ  p\	        / VCVCVP                  4        UUu/ uF+  w  rXV\        P                  VR,          R4      9   g   K)  WXbK-  	  uppC4      NK\  	  upppVR&   MVR,          VR&   VP                  R4      '       d   RVR&   R# R# u uppi u uppi u upppi )zFKeep union alternatives and their branch-local structural constraints.ÚanyOfr   ÚnullableTNr   )r   Ú_GEMINI_STRUCTURAL_KEYSÚvaluesÚpopÚsanitize_gemini_schemaÚitemsÚget)	r!   r#   ÚderivedÚconstraintsÚkeysÚkeyÚ
structuralÚbranchÚvalues	   &&       r   Ú_normalize_gemini_type_arrayr6   ,   sF  € à €GÜ˜*Ô.Ø�'ÔØ5<ÀÔ5G�w ¨Õ 0Ñ1ÈRˆô 9P×8VÑ8VÔ8Xô 9Ñ8X°Û!%˜#°©ô ,�cŸ;™; sÓ+Ò+Ù!%ñ Ñ8Xˆ
ñ 9ð & gÖ.õ	
ñ /�Fô #ð $ fð $°ð $Ø-7×-=Ñ-=Ô-?ô@Ù-?™z˜sØÔ1×5Ñ5°f¸VµnÀbÓIÑIô �’
Ñ-?ò@ð $ö ñ /ó	
ˆ�Òð " &�/ˆ�‰Ø‡{�{�:×Òð #ˆ�
Óñ ùó9ùó@ùô
s*   Á DÁDÁ;"DÂ&DÃDÃDÄDc               ó    € V ^8„  d   QhRRRR/# )r   Úschemar   r   r$   r   )r   s   "r   r   r   D   s   € ÷ 3ñ 3 3ð 3¨>ñ 3r   c           	     óÂ  € \        V \        4      '       g   / # / pV P                  4        Fë  w  r#V\        9  d   K  VR8X  dc   \        V\        4      '       dK   VP                  4        UUu/ uF)  w  rE\        V\        4      '       g   K  V\        V4      bK+  	  uppW&   Ky  K{  VR8X  d   \        V4      W&   K‘  VR8X  dP   \        V\        4      '       d8   V Uu. uF&  p\        V\        4      '       g   K  \        V4      NK(  	  upW&   Kå  Kç  W1V&   Kí  	  VP                  R4      p\        V\        4      '       d   VP                  R4       \        Wq4       VP                  R4      p\        V\        4      '       d   \        V\        4      '       g   VP                  R4      R	9   dS   \        \        P                  R \        \        V4       4       4      4      ;p	'       d   W‘R&   MVP                  RR4       VP                  R4      p
\        V
\        4      '       d§   VP                  R4      p\        V\        4      '       d   \        V4      M	\        4       pV
 Uu. uF%  p\        V\        4      '       g   K  WL9   g   K#  VNK'  	  ppV'       g   VP                  RR4       V# \        V4      \        V
4      8w  d   WÑR&   V# u uppi u upi u upi )
zÐGemini-compatible copy of a tool parameter schema: keeps only the documented subset
(drops e.g. ``$schema`` / ``additionalProperties``) and recursively sanitizes nested
``properties`` / ``items`` / ``anyOf``.r	   r-   r'   r   Úenumc              3  ó0   "  € T F  qf   K  Vx € K  	  R # 5i)Nr   )Ú.0Úvs   & r   Ú	<genexpr>Ú)sanitize_gemini_schema.<locals>.<genexpr>e   s   é € Ð,nÑ8\°1¯QªQÓ8\ùs   ‚Œ
NÚrequired>   ÚnumberÚbooleanÚinteger)r   Údictr-   Ú_GEMINI_SCHEMA_ALLOWED_KEYSr   r,   r"   r.   r+   r6   ÚfromkeysÚmapr   ÚsetÚlen)r8   r#   r2   r5   ÚnameÚsubr   r!   Úenum_valÚstringifiedÚrequired_valÚ	props_valÚ
prop_namesÚvalid_requireds   &             r   r,   r,   D   sP  € ô �fœd×#Ò#Øˆ	Ø €GØ—l‘l–n‰
ˆØÔ1Ô1ÙØ�,ÔÜ˜%¤×&Ò&ØSX×S^ÑS^ÔS`ÔzÑS`ÁiÀdÔdnÐosÔux×dyÔ A Ô&<¸SÓ&AÒ AÑS`Òz�“ñ 'à�GŒ^Ü1°%Ó8ˆG‹LØ�GŒ^Ü˜%¤×&Ò&ÙINÓiÉÀÔR\Ð]aÔcg×RhÔ <Ô 6°tÖ <ÉÑi�“ñ 'ð !�C‹Lñ %ð —‘˜VÓ$€JÜ�*œd×#Ò#Ø�‰�FÔÜ$ ZÔ9ð
 �{‰{˜6Ó"€HÜ�(œD×!Ò!Ü�:œt×$Ò$¨¯©°FÓ(;Ð?_Ô(_äœtŸ}™}Ñ,n¼Ô<QÐS[Ô8\Ó,nÓnÓoÐoˆ;ÖoØ)�FŠOà�K‰K˜ Ô%ð —;‘;˜zÓ*€LÜ�,¤×%Ò%Ø—K‘K Ó-ˆ	Ü'1°)¼T×'BÒ'B”S˜”^ÌËˆ
Ù+7Óh©< 4¼:ÀdÌC×;Pœ$ÐUYÑUgŸ$˜$©<ˆÐhßØ�K‰K˜
 DÔ)ð €Nô �Ó ¤C¨Ó$5Ô5Ø"0�JÑØ€NùóO  {ùò
  jùò: is*   Á-KÂKÃKÃ:KÉ)KÊKÊKc               ó    € V ^8„  d   QhRRRR/# ©r   Ú
parametersr   r   r$   r   )r   s   "r   r   r   z   s   € ÷ Vñ V°ð V¸ñ Vr   c                ó4   € \        V 4      ;'       g    RRR/ /# )z:Normalize tool parameters to a valid Gemini object schema.r   r   r	   )r,   )rT   s   &r   Úsanitize_gemini_tool_parametersrV   z   s   € ä! *Ó-×UÐU°&¸(ÀLÐRTÐ1UÐUr   r$   Ú_EMPTY_OBJECT_SCHEMAé   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úrootr$   Úrefr   r   zOptional[dict[str, Any]]r   )r   s   "r   r   r   �   s"   € ÷ 
4ñ 
4˜^ð 
4°#ð 
4Ð:Rñ 
4r   c                óh  € \        V\        4      '       d   VP                  R4      '       g   R# T pVR,          P                  R4       FL  pVP	                  RR4      P	                  RR4      p\        V\
        4      '       d   WB9  d    R# W$,          pKN  	  \        V\
        4      '       d   V# R# )zFResolve a same-document JSON pointer (``#/$defs/Foo``) against *root*.z#/N:r   NNÚ/z~1z~0Ú~)r   r   Ú
startswithÚsplitÚreplacerD   )rZ   r[   ÚnodeÚraw_partÚparts   &&   r   Ú_resolve_local_refre   �   s�   € ä�cœ3×Ò s§~¡~°d×';Ò';ÙØ€DØ˜•G—M‘M #Ö&ˆØ×Ñ  cÓ*×2Ñ2°4¸Ó=ˆÜ˜$¤×%Ò%¨Ô)9ÚØ�zŠñ	 'ô
 ˜d¤D×)Ò)ˆ4Ð3¨tÐ3r   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R/# )
r   rb   r   rZ   r$   Úbudgetz	list[int]ÚstackÚtupler   r   )r   s   "r   r   r   š   s7   € ÷ _ñ _�sð _ .ð _¸)ð _ÈEð _Ð[^ñ _r   c                óÚ  € \        V \        4      '       d   V  Uu. uF  p\        WAW#4      NK  	  up# \        V \        4      '       g   V # V P	                  R4      p\        V\
        4      '       g0   V P                  4        UUu/ uF  w  rgV\        WqW#4      bK  	  upp# WS9   d   \        RV: 24      hV^ ;;,          ^,          uu&   V^ ,          ^ 8  d   \        R4      h\        W4      pVf   \        RV: 24      h\        W�W#V3,           4      p	V P                  4        U
Uu/ uF  w  r«V
R8w  g   K  W«bK  	  pp
pV'       d   / V	C\        WÁW#4      C# T	# u upi u uppi u upp
i )z¥Recursively inline same-document ``$ref`` nodes; ``ValueError`` on an unresolvable
or circular reference or an exhausted budget (the caller then keeps the original).z$refzcircular $ref z$ref expansion budget exhaustedzunresolvable $ref )	r   r"   Ú_inline_refsrD   r.   r   r-   Ú
ValueErrorre   )rb   rZ   rg   rh   r   r[   r2   r5   ÚtargetÚinlinedÚkr=   Úsiblingss   &&&&         r   rk   rk   š   sP  € ô �$œ×ÒÙDHÓIÁD¸D”˜T¨Ö7ÁDÑIÐIÜ�dœD×!Ò!ØˆØ
�(‰(�6Ó
€CÜ�cœ3×ÒØPT×PZÑPZÔP\Ô]ÑP\Á*À#�”\ %¨vÓ=Ò=ÑP\Ò]Ð]Ø
„|Ü˜>¨#©Ð1Ó2Ð2Ø
ˆ1‡I�…NƒIØˆa…y�1„}ÜÐ:Ó;Ð;Ü Ó*€FØ‚~ÜÐ-¨c©WÐ5Ó6Ð6Ü˜6¨¸#¸µÓ@€Gð "&§¡¤Ô=¡™˜°°f±”�’¡€HÑ=ßIQÐEˆgÐEœ h°fÓDÐEÐ^ÐW^Ð^ùò% Jùó
 ^ùó >s   ›EÂE!Ä)E'Ä9E'c               ó    € V ^8„  d   QhRRRR/# rS   r   )r   s   "r   r   r   ³   s   € ÷ ñ ¨sð °~ñ r   c                óî  € \        V \        4      '       d	   V '       g   \        \        4      # \        P                  ! V 4      pVP                  RR4        \        W\        .4      pTP                  RR4       TP                  RR4       T'       g   \        \        4      # TP                  R4      R8X  d   RT9  d   / TR&   T#   \         d#   p\        P                  RT4       Tu Rp?# Rp?ii ; i)	zøFull JSON Schema for ``parametersJsonSchema``: deep-copied, root ``$schema`` dropped,
same-document ``$ref`` inlined, object root guaranteed. A schema whose references
cannot all be resolved is sent untouched so the provider names the real problem.z$schemaNz9Gemini tool schema kept as-is ($ref inlining skipped): %sz$defsÚdefinitionsr   r   r	   )r   rD   rW   ÚcopyÚdeepcopyr+   rk   Ú_MAX_REF_EXPANSIONSrl   ÚloggerÚdebugr.   )rT   r8   Úexcs   &  r   Úprepare_gemini_tool_parametersrz   ³   sË   € ô �j¤$×'Ò'¯zÜÔ(Ó)Ð)Ü�]Š]˜:Ó&€FØ
‡J�Jˆy˜$ÔðÜ˜fÔ/BÐ.CÓDˆð ‡J�Jˆw˜ÔØ
‡J�Jˆ}˜dÔ#ßÜÔ(Ó)Ð)Ø‡z�z�&Ó˜XÔ%¨,¸fÔ*DØ!ˆˆ|ÑØ€Møô ô Ü�‰ÐPÐRUÔVØ�ûðús   ÁC ÃC4ÃC/Ã)C4Ã/C4>   r:   r   r'   r-   Útitler   ÚdefaultÚexampleÚmaximumÚminimumÚpatternÚmaxItemsÚminItemsr(   r@   Ú	maxLengthÚ	minLengthr	   ÚdescriptionÚmaxPropertiesÚminPropertiesÚpropertyOrdering>   r-   r�   r‚   >   r@   r	   r†   r‡   rˆ   )r   )Ú__conditional_annotations__Ú__doc__Ú
__future__r   rt   Úloggingr   Útypingr   r   r   r   Útools.schema_sanitizerr   Ú	getLoggerÚ__name__rw   rE   r)   r   r6   r,   rV   rW   Ú__annotations__rv   re   rk   rz   )r‰   s   @r   Ú<module>r’      s”   øðôõ #ã Û Û ß ,Ó ,å 8à	×	Ò	˜8Ó	$€òÐ ð Ò.ØÒ^ðÐ õ3õ#õ03õlVð )/°¸,ÈÐ'KÐ �nÓ Kð Ð õ
4÷_÷2r   