§
    ‰eîil  ã                  óª   — d Z ddlmZ ddlZddlmZmZmZ  eh d£¦  «        Z	 eh d£¦  «        Z
 eh d£¦  «        Zddd„Zdd„Zdd„Zdd„Zdd„ZdS )uò  Helpers for translating OpenAI-style tool schemas to Moonshot's schema subset.

Moonshot (Kimi) accepts a stricter subset of JSON Schema than standard OpenAI
tool calling.  Requests that violate it fail with HTTP 400:

    tools.function.parameters is not a valid moonshot flavored json schema,
    details: <...>

Known rejection modes documented at
https://forum.moonshot.ai/t/tool-calling-specification-violation-on-moonshot-api/102
and MoonshotAI/kimi-cli#1595:

1. Every property schema must carry a ``type``.  Standard JSON Schema allows
   type to be omitted (the value is then unconstrained); Moonshot refuses.
2. When ``anyOf`` is used, ``type`` must be on the ``anyOf`` children, not
   the parent.  Presence of both causes "type should be defined in anyOf
   items instead of the parent schema".

The ``#/definitions/...`` â†’ ``#/$defs/...`` rewrite for draft-07 refs is
handled separately in ``tools/mcp_tool._normalize_mcp_input_schema`` so it
applies at MCP registration time for all providers.
é    )ÚannotationsN)ÚAnyÚDictÚList>   ú$defsÚ
propertiesÚdefinitionsÚpatternProperties>   ÚallOfÚanyOfÚoneOfÚprefixItems>   ÚnotÚitemsÚcontainsÚpropertyNamesÚadditionalPropertiesTÚnoder   Ú	is_schemaÚboolÚreturnc                ó¢  — t          | t          ¦  «        rd„ | D ¦   «         S t          | t          ¦  «        s| S i }|                      ¦   «         D ]±\  }}|t          v r7t          |t          ¦  «        r"d„ |                     ¦   «         D ¦   «         ||<   ŒE|t
          v r%t          |t          ¦  «        rd„ |D ¦   «         ||<   Œs|t          v r0t          |t          ¦  «        rt          |d¬¦  «        ||<   Œ¦|||<   Œ¬|||<   Œ²|s|S d|v r3t          |d         t          ¦  «        r|                     dd¦  «         |S d	|v r|S t          |¦  «        S )
a5  Recursively apply Moonshot repairs to a schema node.

    ``is_schema=True`` means this dict is a JSON Schema node and gets the
    missing-type + anyOf-parent repairs applied.  ``is_schema=False`` means
    it's a container map (e.g. the value of ``properties``) and we only
    recurse into its values.
    c                ó0   — g | ]}t          |d ¬¦  «        ‘ŒS ©T©r   ©Ú_repair_schema)Ú.0Úitems     ú7/home/div/.hermes/hermes-agent/agent/moonshot_schema.pyú
<listcomp>z"_repair_schema.<locals>.<listcomp>4   s%   € ÐFÐFÐF¸•˜t¨tÐ4Ñ4Ô4ÐFÐFÐFó    c                ó8   — i | ]\  }}|t          |d ¬¦  «        “ŒS r   r   )r   Úsub_keyÚsub_vals      r    ú
<dictcomp>z"_repair_schema.<locals>.<dictcomp>?   s;   € ð ð ð á$�G˜Wð �¨¸4Ð@Ñ@Ô@ðð ð r"   c                ó0   — g | ]}t          |d ¬¦  «        ‘ŒS r   r   )r   Úvs     r    r!   z"_repair_schema.<locals>.<listcomp>D   s%   € ÐNÐNÐNÀ1�^¨A¸Ð>Ñ>Ô>ÐNÐNÐNr"   Tr   r   ÚtypeNz$ref)
Ú
isinstanceÚlistÚdictr   Ú_SCHEMA_MAP_KEYSÚ_SCHEMA_LIST_KEYSÚ_SCHEMA_NODE_KEYSr   ÚpopÚ_fill_missing_type)r   r   ÚrepairedÚkeyÚvalues        r    r   r   )   s›  € õ �$�ÑÔð Gð GÐFÀÐFÑFÔFÐFÝ�d�DÑ!Ô!ð Øˆð  "€HØ—j’j‘l”lð "ð "‰
ˆˆUØÕ"Ð"Ð"¥z°%½Ñ'>Ô'>Ð"ðð à(-¯ª©¬ðñ ô ˆH�S‰MˆMð Õ%Ð%Ð%­*°U½DÑ*AÔ*AÐ%ØNÐNÈÐNÑNÔNˆH�S‰MˆMØÕ%Ð%Ð%õ ˜%¥Ñ&Ô&ð &Ý .¨uÀÐ EÑ EÔ E�˜‘�à %�˜‘�ð "ˆH�S‰MˆMàð Øˆð �(ÐÐ�z¨(°7Ô*;½TÑBÔBÐØ�Š�V˜TÑ"Ô"Ð"Øˆð �ÐÐØˆÝ˜hÑ'Ô'Ð'r"   úDict[str, Any]c                ój  — d| v r| d         dvr| S d| v sd| v sd| v rd}n�d| v sd| v rd	}n‚d
| v r|t          | d
         t          ¦  «        ra| d
         rY| d
         d         }t          |t          ¦  «        rd}n5t          |t          ¦  «        rd}nt          |t          ¦  «        rd}nd}nd}i | ¥d|i¥S )z9Infer a reasonable ``type`` if this schema node has none.r)   )NÚ r   Úrequiredr   Úobjectr   r   ÚarrayÚenumr   ÚbooleanÚintegerÚnumberÚstring)r*   r+   r   ÚintÚfloat)r   ÚinferredÚsamples      r    r1   r1   _   sý   € à�€~€~˜$˜vœ,¨jÐ8Ð8Øˆð �tÐÐ˜z¨TÐ1Ð1Ð5KÈtÐ5SÐ5SØˆˆØ	�Dˆˆ˜M¨TÐ1Ð1ØˆˆØ	�4ˆˆ�J t¨F¤|µTÑ:Ô:ˆ¸tÀF¼|ˆØ�f”˜a”ˆÝ�f�dÑ#Ô#ð 	 Ø ˆHˆHÝ˜¥Ñ$Ô$ð 	 Ø ˆHˆHÝ˜¥Ñ&Ô&ð 	 ØˆHˆHàˆHˆHàˆà%ˆdÐ%�F˜HÐ%Ð%Ð%r"   Ú
parametersc                ó  — t          | t          ¦  «        sdi dœS t          t          j        | ¦  «        d¬¦  «        }t          |t          ¦  «        sdi dœS |                     d¦  «        dk    rd|d<   d|vri |d<   |S )z¶Normalize tool parameters to a Moonshot-compatible object schema.

    Returns a deep-copied schema with the two flavored-JSON-Schema repairs
    applied.  Input is not mutated.
    r9   )r)   r   Tr   r)   r   )r*   r,   r   ÚcopyÚdeepcopyÚget)rD   r2   s     r    Ú!sanitize_moonshot_tool_parametersrI   z   s�   € õ �j¥$Ñ'Ô'ð 4Ø °Ð3Ð3Ð3å�dœm¨JÑ7Ô7À4ÐHÑHÔH€HÝ�h¥Ñ%Ô%ð 4Ø °Ð3Ð3Ð3ð ‡|‚|�FÑÔ˜xÒ'Ð'Ø#ˆ�ÑØ˜8Ð#Ð#Ø!#ˆ�Ñà€Or"   ÚtoolsúList[Dict[str, Any]]c                óÄ  — | s| S g }d}| D ]Ð}t          |t          ¦  «        s|                     |¦  «         Œ-|                     d¦  «        }t          |t          ¦  «        s|                     |¦  «         Œm|                     d¦  «        }t	          |¦  «        }||ur&d}i |¥d|i¥}|                     i |¥d|i¥¦  «         Œ»|                     |¦  «         ŒÑ|r|n| S )zGApply ``sanitize_moonshot_tool_parameters`` to every tool's parameters.FÚfunctionrD   T)r*   r,   ÚappendrH   rI   )rJ   Ú	sanitizedÚ
any_changeÚtoolÚfnÚparamsr2   Únew_fns           r    Úsanitize_moonshot_toolsrU   �   s  € àð Øˆà&(€IØ€JØð #ð #ˆÝ˜$¥Ñ%Ô%ð 	Ø×Ò˜TÑ"Ô"Ð"ØØ�XŠX�jÑ!Ô!ˆÝ˜"�dÑ#Ô#ð 	Ø×Ò˜TÑ"Ô"Ð"ØØ—’˜Ñ%Ô%ˆÝ4°VÑ<Ô<ˆØ˜6Ð!Ð!ØˆJØ3˜Ð3˜L¨(Ð3Ð3ˆFØ×ÒÐ9 Ð9 j°&Ð9Ð9Ñ:Ô:Ð:Ð:à×Ò˜TÑ"Ô"Ð"Ð"à"Ð-ˆ9ˆ9¨Ð-r"   Úmodelú
str | Nonec                ó
  — | sdS |                       ¦   «                              ¦   «         }|                     dd¦  «        d         }|                     d¦  «        s|dk    rdS d|v sd	|v s|                     d¦  «        rdS dS )
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``, ``openrouter/moonshotai/...``).
    Detection by model name covers Nous / OpenRouter / other aggregators that
    route to Moonshot's inference, where the base URL is the aggregator's, not
    ``api.moonshot.ai``.
    Fú/é   éÿÿÿÿzkimi-ÚkimiTÚmoonshotz/kimi)ÚstripÚlowerÚrsplitÚ
startswith)rV   ÚbareÚtails      r    Úis_moonshot_modelrd   «   s�   € ð ð ØˆuØ�;Š;‰=Œ=×ÒÑ Ô €Dà�;Š;�s˜AÑÔ˜rÔ"€DØ‡‚�wÑÔð  4¨6¢> >Øˆtà�TÐÐ˜W¨˜_˜_°·²ÀÑ0GÔ0G˜_ØˆtØˆ5r"   )T)r   r   r   r   r   r   )r   r5   r   r5   )rD   r   r   r5   )rJ   rK   r   rK   )rV   rW   r   r   )Ú__doc__Ú
__future__r   rF   Útypingr   r   r   Ú	frozensetr-   r.   r/   r   r1   rI   rU   rd   © r"   r    ú<module>rj      s	  ððð ð. #Ð "Ð "Ð "Ð "Ð "à €€€Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "ð
 �9ÐXÐXÐXÑYÔYÐ ð �IÐHÐHÐHÑIÔIÐ ð �IÐcÐcÐcÑdÔdÐ ð3(ð 3(ð 3(ð 3(ð 3(ðl&ð &ð &ð &ð6ð ð ð ð,.ð .ð .ð .ð6ð ð ð ð ð r"   