+
    iHàj<  ã                  óì   € R t ^ RIHt ^ RIt^ RIHtHtHt ]! 0 Rm4      t	]! 0 Rm4      t
]! 0 Rm4      t]! 0 Rm4      t]R3]R3]R33tR R ltR	 R
 ltR R ltR R ltR R ltR R ltR R ltR# )u9  Translate OpenAI-style tool schemas to Moonshot's (Kimi) stricter JSON Schema subset.

Violations fail with HTTP 400 "tools.function.parameters is not a valid moonshot
flavored json schema". Rules: (1) every property schema carries a ``type``;
(2) with ``anyOf``, ``type`` belongs on the children, never the parent; (3) enum
arrays under scalar types may not contain null / empty string; (4) every object
schema carries a ``required`` array, even an empty one. The ``#/definitions/`` â†’
``#/$defs/`` rewrite lives in ``tools/mcp_tool`` so it applies to all providers.
)ÚannotationsN)ÚAnyÚDictÚListÚintegerÚnumberÚbooleanc               ó   € V ^8„  d   QhRR/# )é   Úreturnúdict[str, Any]© )Úformats   "Ú:/home/ubuntu/.hermes/hermes-agent/agent/moonshot_schema.pyÚ__annotate__r      s   € ÷ @ñ @˜nñ @ó    c                 ó   € R RR/ R. /# )ÚtypeÚobjectÚ
propertiesÚrequiredr   r   r   r   Ú_empty_object_schemar      s   € Ø�H˜l¨B°
¸BÐ?Ð?r   c               ó    € V ^8„  d   QhRRRR/# )r
   Únoder   r   r   )r   s   "r   r   r   #   s   € ÷ 3ñ 3˜ð 3 ñ 3r   c           	     óÐ  € \        V \        4      '       d   V  Uu. uF  p\        V4      NK  	  up# \        V \        4      '       g   V # / pV P	                  4        F­  w  r4V\
        9   dI   \        V\        4      '       d3   VP	                  4        UUu/ uF  w  rVV\        V4      bK  	  uppW#&   KX  V\        9   d   \        V\        4      '       g"   V\        9   d&   \        V\        4      '       d   \        V4      W#&   K©  WBV&   K¯  	  RV9   dð   \        VR,          \        4      '       dÓ   VP                  RR4       VR,           Uu. uF5  p\        V\        4      '       g   K  VP                  R4      R8w  g   K3  VNK7  	  ppV'       d!   \        V4      \        VR,          4      8X  d   V# \        V4      ^8”  d   W‚R&   V# / VP	                  4        U	U
u/ uF  w  ršV	R8w  g   K  WšbK  	  up
p	CV^ ,          CpVP                  RR4       RV9  d   \        V4      p\        VP                  R4      \        4      '       d_   VP                  R4      \        9   dE   VR,           U
u. uF  qªf   K  V
R8w  g   K  V
NK  	  pp
V'       d   W²R&   MVP                  R4       VP                  R4      R	8X  d   \        V4      pV# u upi u uppi u upi u up
p	i u up
i )
z8Recursively apply the Moonshot repairs to a schema node.ÚanyOfr   NÚnullÚnullablez$refÚenumÚ r   )Ú
isinstanceÚlistÚ_repair_schemaÚdictÚitemsÚ_SCHEMA_MAP_KEYSÚ_SCHEMA_LIST_KEYSÚ_SCHEMA_NODE_KEYSÚpopÚgetÚlenÚ_fill_missing_typeÚ_SCALAR_TYPESÚ_ensure_required_array)r   ÚitemÚrepairedÚkeyÚvalueÚsub_keyÚsub_valÚbÚnon_nullÚkÚvÚcleaneds   &           r   r"   r"   #   sj  € ä�$œ×ÒÙ15Ó6±¨”˜tÖ$±Ñ6Ð6Ü�dœD×!Ò!Øˆà!€HØ—j‘j–l‰
ˆØÔ"Ô"¤z°%¼×'>Ò'>ØV[×VaÑVaÔVcÔdÑVcÑBRÀ'˜W¤n°WÓ&=Ò=ÑVcÒdˆH‹MØÔ&Ô&¬:°e¼T×+BÒ+BØÔ$Ô$¬°E¼4×)@Ò)@ä*¨5Ó1ˆH‹Mà!�S‹Mñ #ð �(Ôœz¨(°7Õ*;¼T×BÒBØ�‰�V˜TÔ"Ø'¨Ö0ÓdÑ0˜!´J¸qÄ$×4G”AÈAÏEÉEÐRXËMÐ]cÑLc—A�AÑ0ˆÐdßœ3˜x›=¬C°¸Õ0AÓ,BÔBØˆOÜˆx‹=˜1ÔØ (�WÑØˆOØY¨¯©Ô(8ÔIÑ(8¡ ¸AÀ¹L”t�q’tÑ(8ÒIÐYÈXÐVWÍ[ÐYˆð ‡L�L�˜TÔ"ð �XÔÜ% hÓ/ˆô �(—,‘,˜vÓ&¬×-Ò-°(·,±,¸vÓ2FÌ-Ô2WØ& vÖ.ÓLÑ.˜”1ÀAÈÁG—1�1Ñ.ˆÐLßØ&�VÒà�L‰L˜Ô ð ‡|�|�FÓ˜xÔ'Ü)¨(Ó3ˆà€Oùòa 7ùó eùò eùó Jùò Ms;   ›KÂKÅKÅ+KÆKÇKÇ/KÉ1K#É;K#ÊK#c               ó    € V ^8„  d   QhRRRR/# ©r
   r   r   r   r   )r   s   "r   r   r   Y   s   € ÷ 
ñ 
 ð 
°Nñ 
r   c                óô   € V P                  R4      pV P                  R4      p\        V\        4      '       d6   \        V\        4      '       d   V Uu. uF  q3V9   g   K  VNK  	  upV R&   V # . V R&   V # u upi )z¡Guarantee an object schema carries a ``required`` list, pruning names not in
``properties`` (Moonshot also rejects dangling names). Mutates and returns ``node``.r   r   )r)   r    r!   r#   )r   ÚpropsÚreqÚrs   &   r   r-   r-   Y   sv   € ð �H‰H�\Ó"€EØ
�(‰(�:Ó
€CÜ�#”t×ÒÜ�eœT×"Ò"Ù+.Ó=©3 a°u±*§ ©3Ñ=ˆD�Ñð €Kð ˆˆZÑØ€Kùò  >s   ÁA5Á A5c               ó    € V ^8„  d   QhRRRR/# r:   r   )r   s   "r   r   r   f   s   € ÷ &ñ &˜^ð &°ñ &r   c                óú  a€ V P                  R4      p\        V\        4      '       d   \        R V 4       R4      p/ V CRV/C# RV 9   d
   VR9  d   V # RV 9   g   RV 9   g   RV 9   d   RpM‰RV 9   g   R	V 9   d   R
pMx\        V P                  R4      \        4      '       d;   V R,          '       d,   V R,          ^ ,          o\        V3R l\         4       R4      pMRV 9   g   RV 9   g   RV 9   d   V # Rp/ V CRV/C# )uÏ  Infer a ``type`` if this schema node has none.

A type list collapses to its first concrete member; otherwise
``properties``/``required``/``additionalProperties`` â†’ object,
``items``/``prefixItems`` â†’ array, ``enum`` â†’ type of its first value,
else ``string`` (safest scalar). A bare ``if``/``then``/``else`` node
constrains whatever instance it is attached to rather than describing
its own type, so it is left untyped instead of defaulting to ``string``.
r   c              3  óh   "  € T F(  p\        V\        4      '       g   K  VR9  g   K$  Vx € K*  	  R# 5i)r   N>   r   r   )r    Ústr)Ú.0Úts   & r   Ú	<genexpr>Ú%_fill_missing_type.<locals>.<genexpr>r   s%   é € Ð^¡I˜q´¸A¼s×1CœÈÐQ]ÑH]Ÿš£Iùs   ‚2Ÿ2¨
2Ústringr   r   ÚadditionalPropertiesr   r$   ÚprefixItemsÚarrayr   c              3  óT   <"  € T F  w  r\        SV4      '       g   K  Vx € K  	  R # 5i)N)r    )rC   ÚclsrD   Úsamples   &  €r   rE   rF   }   s!   øé € ÐWÑ);™v˜s¼zÈ&ÐRU×?VŸšÓ);ùs   ƒ(ž
(ÚifÚthenÚelse>   Nr   )r)   r    r!   ÚnextÚ_ENUM_SAMPLE_TYPES)r   Ú	node_typeÚconcreteÚinferredrM   s   &   @r   r+   r+   f   sõ   ø€ ð —‘˜Ó €IÜ�)œT×"Ò"ÜÑ^¡IÓ^Ð`hÓiˆØ)�$Ð)˜ Ñ)Ð)Ø�„~˜)¨:Ô5Øˆà�tÔ˜z¨TÔ1Ð5KÈtÔ5SØ‰Ø	�DŒ˜M¨TÔ1Ø‰Ü	�D—H‘H˜VÓ$¤d×	+Ò	+°°V·´Ø�f•˜a•ˆÜÔWÕ);ÓWÐYaÓb‰Ø	�Œ˜ 4œ¨6°T¬>ØˆàˆØ%ˆdÐ%�F˜HÑ%Ð%r   c               ó    € V ^8„  d   QhRRRR/# )r
   Ú
parametersr   r   r   r   )r   s   "r   r   r   …   s   € ÷ 
,ñ 
,°#ð 
,¸.ñ 
,r   c                ó  € \        V \        4      '       g   \        4       # \        \        P
                  ! V 4      4      p\        V\        4      '       g   \        4       # RVR&   VP                  R/ 4       \        V4      # )zEDeep-copied, Moonshot-compatible object schema; input is not mutated.r   r   r   )r    r#   r   r"   ÚcopyÚdeepcopyÚ
setdefaultr-   )rW   r/   s   & r   Ú!sanitize_moonshot_tool_parametersr\   …   sf   € ä�j¤$×'Ò'Ü#Ó%Ð%ÜœdŸmšm¨JÓ7Ó8€HÜ�h¤×%Ò%Ü#Ó%Ð%à€HˆVÑØ×Ñ˜ bÔ)Ü! (Ó+Ð+r   c               ó    € V ^8„  d   QhRRRR/# )r
   Útoolszlist[dict[str, Any]]r   r   )r   s   "r   r   r   ’   s   € ÷ .ñ .Ð#7ð .Ð<Pñ .r   c                óJ  € V '       g   V # . pRpV  F„  p\        V\        4      '       d   VP                  R4      MRp\        V\        4      '       d2   VP                  R4      p\        V4      pWeJd   Rp/ VCR/ VCRV/C/CpVP	                  V4       K†  	  V'       d   V# T # )z�Apply ``sanitize_moonshot_tool_parameters`` to every tool's parameters.

Returns the input list object itself when nothing needed repairing.
FÚfunctionNrW   T)r    r#   r)   r\   Úappend)r^   Ú	sanitizedÚ
any_changeÚtoolÚfnÚparamsr/   s   &      r   Úsanitize_moonshot_toolsrg   ’   s§   € ÷
 ØˆØ&(€IØ€JÛˆÜ%/°´d×%;Ò%;ˆT�X‰X�jÔ!ÀˆÜ�bœ$×ÒØ—V‘V˜LÓ)ˆFÜ8¸Ó@ˆHØÓ%Ø!�
ØK˜$ÐK 
Ð,J¨rÐ,J°<ÀÑ,JÑK�Ø×Ñ˜Öñ ÷ #ˆ9Ð-¨Ð-r   c               ó    € V ^8„  d   QhRRRR/# )r
   Úmodelz
str | Noner   Úboolr   )r   s   "r   r   r   §   s   € ÷ Lñ L˜Zð L¨Dñ Lr   c                óZ  € V '       g   R# V P                  4       P                  4       pVP                  R^4      R	,          pVP                  R4      '       g   VR8X  d   R# VR8X  g   VP                  R
4      '       d   R# RV9   ;'       g    RV9   ;'       g    VP                  R4      # )a  True for any Kimi / Moonshot model slug, regardless of aggregator prefix.

Matches bare names (``kimi-k2.6``, ``moonshotai/Kimi-K2.6``) and
aggregator-prefixed slugs (``nous/moonshotai/kimi-k2.6``), since aggregators
route to Moonshot inference under their own base URL.
FÚ/zkimi-ÚkimiTÚk3Úmoonshotz/kimiéÿÿÿÿ)zk3.zk3-)ÚstripÚlowerÚrsplitÚ
startswith)ri   ÚbareÚtails   &  r   Úis_moonshot_modelrw   §   s‹   € ÷ ÙØ�;‰;‹=×ÑÓ €DØ�;‰;�s˜AÓ˜rÕ"€DØ‡��w×Ò 4¨6¤>Ùàˆt„|�t—‘ ~×6Ò6ÙØ˜Ñ×KÐK ¨D¡×KÐK°D·O±OÀFÓ4KÐKr   >   r   ÚdefinitionsÚpatternPropertiesú$defs>   ÚallOfr   ÚoneOfrI   >   rN   ÚnotrP   rO   r$   ÚcontainsÚpropertyNamesrH   >   r   rG   r   r   )Ú__doc__Ú
__future__r   rY   Útypingr   r   r   Ú	frozensetr%   r&   r'   r,   rj   ÚintÚfloatrR   r   r"   r-   r+   r\   rg   rw   r   r   r   Ú<module>r†      s�   ðñõ #ã ß "Ñ "ñ ÒXÓYÐ áÒHÓIÐ áÚ_óÐ ñ ÒDÓE€à˜YÐ'¨#¨yÐ)9¸EÀ8Ð;LÐMÐ õ@õ3õl
õ&õ>
,õ.÷*Lr   