§
    ÷žyj±  ã                  óF   — d Z ddlmZ ddlZddlmZmZ h d£Zdd
„Zdd„Z	dS )zLHelpers for translating OpenAI-style tool schemas to Gemini's schema subset.é    )ÚannotationsN)ÚAnyÚDict>   ÚenumÚtypeÚanyOfÚitemsÚtitleÚformatÚdefaultÚexampleÚmaximumÚminimumÚpatternÚmaxItemsÚminItemsÚnullableÚrequiredÚ	maxLengthÚ	minLengthÚ
propertiesÚdescriptionÚmaxPropertiesÚminPropertiesÚpropertyOrderingÚschemar   ÚreturnúDict[str, Any]c                ó–  ‡— t          | t          ¦  «        si S i }|                      ¦   «         D ]¿\  }}|t          vrŒ|dk    r`t          |t          ¦  «        sŒ+i }|                     ¦   «         D ]-\  }}t          |t          ¦  «        sŒt          |¦  «        ||<   Œ.|||<   Œu|dk    rt          |¦  «        ||<   ŒŽ|dk    r&t          |t          ¦  «        sŒªd„ |D ¦   «         ||<   Œº|||<   ŒÀ|                     d¦  «        }|                     d¦  «        }t          |t          ¦  «        rÌ|dv rÈg }	|D ]¥}
t          |
t          ¦  «        r|
}nrt          |
t          ¦  «        r|
rdnd	}nVt          |
t          t          f¦  «        r9t          |
t          ¦  «        s$t          j        |
¦  «        rt	          |
¦  «        }nŒŒ||	vr|	                     |¦  «         Œ¦|	r|	|d<   n|                     dd
¦  «         |                     d¦  «        }t          |t          ¦  «        r¥|                     d¦  «        }t          |t          ¦  «        r!t          |                     ¦   «         ¦  «        nt          ¦   «         Šˆfd„|D ¦   «         }|s|                     dd
¦  «         n%t#          |¦  «        t#          |¦  «        k    r||d<   |S )a‡  Return a Gemini-compatible copy of a tool parameter schema.

    Hermes tool schemas are OpenAI-flavored JSON Schema and may contain keys
    such as ``$schema`` or ``additionalProperties`` that Google's Gemini
    ``Schema`` object rejects.  This helper preserves the documented Gemini
    subset and recursively sanitizes nested ``properties`` / ``items`` /
    ``anyOf`` definitions.
    r   r	   r   c                óV   — g | ]&}t          |t          ¦  «        ¯t          |¦  «        ‘Œ'S © )Ú
isinstanceÚdictÚsanitize_gemini_schema)Ú.0Úitems     ú9/home/ragecks/.hermes/hermes-agent/agent/gemini_schema.pyú
<listcomp>z*sanitize_gemini_schema.<locals>.<listcomp>F   s@   € ð ð ð àÝ˜d¥DÑ)Ô)ðÝ& tÑ,Ô,ðð ð ó    r   r   >   ÚnumberÚbooleanÚintegerÚtrueÚfalseNr   c                óF   •— g | ]}t          |t          ¦  «        r|‰v ¯|‘ŒS r!   )r"   Ústr)r%   ÚnameÚ
prop_namess     €r'   r(   z*sanitize_gemini_schema.<locals>.<listcomp>z   s@   ø€ ð 
ð 
ð 
ØÝ˜$¥Ñ$Ô$ð
à)-°Ð);Ð);ð Ø);Ð);Ð);r)   )r"   r#   r	   Ú_GEMINI_SCHEMA_ALLOWED_KEYSr0   r$   ÚlistÚgetÚboolÚintÚfloatÚmathÚisfiniteÚappendÚpopÚsetÚkeysÚlen)r   ÚcleanedÚkeyÚvalueÚpropsÚ	prop_nameÚprop_schemaÚenum_valÚtype_valÚstringifiedr&   Úrequired_valÚ	props_valÚvalid_requiredr2   s                 @r'   r$   r$   %   s.  ø€ õ �f�dÑ#Ô#ð Øˆ	à €GØ—l’l‘n”nð ð ‰
ˆˆUØÕ1Ð1Ð1ØØ�,ÒÐÝ˜e¥TÑ*Ô*ð ØØ$&ˆEØ*/¯+ª+©-¬-ð Gð GÑ&�	˜;Ý! )­SÑ1Ô1ð ØÝ#9¸+Ñ#FÔ#F��iÑ Ð Ø ˆG�C‰LØØ�'Š>ˆ>Ý1°%Ñ8Ô8ˆG�C‰LØØ�'Š>ˆ>Ý˜e¥TÑ*Ô*ð Øðð à!ðñ ô ˆG�C‰Lð
 Øˆ�‰ˆð �{Š{˜6Ñ"Ô"€HØ�{Š{˜6Ñ"Ô"€HÝ�(�DÑ!Ô!ð & hÐ2RÐ&RÐ&RØˆØð 	*ð 	*ˆDÝ˜$¥Ñ$Ô$ð Ø��Ý˜D¥$Ñ'Ô'ð 	Ø"&Ð3˜˜¨G��å˜4¥#¥u Ñ.Ô.ðå" 4­Ñ.Ô.ðõ ”M $Ñ'Ô'ðõ
 ˜D™	œ	��àØ˜KÐ'Ð'Ø×"Ò" 5Ñ)Ô)Ð)øØð 	&Ø)ˆG�F‰OˆOà�KŠK˜ Ñ%Ô%Ð%ð —;’;˜zÑ*Ô*€LÝ�,¥Ñ%Ô%ð 
1Ø—K’K Ñ-Ô-ˆ	Ý.8¸ÅDÑ.IÔ.IÐT•S˜ŸšÑ)Ô)Ñ*Ô*Ð*ÍsÉuÌuˆ
ð
ð 
ð 
ð 
Ø)ð
ñ 
ô 
ˆð ð 	1Ø�KŠK˜
 DÑ)Ô)Ð)Ð)Ý�Ñ Ô ¥C¨Ñ$5Ô$5Ò5Ð5Ø"0ˆG�JÑà€Nr)   Ú
parametersc                ó2   — t          | ¦  «        }|sdi dœS |S )z:Normalize tool parameters to a valid Gemini object schema.Úobject)r   r   )r$   )rL   r@   s     r'   Úsanitize_gemini_tool_parametersrO   †   s,   € õ % ZÑ0Ô0€GØð 4Ø °Ð3Ð3Ð3Ø€Nr)   )r   r   r   r   )rL   r   r   r   )
Ú__doc__Ú
__future__r   r9   Útypingr   r   r3   r$   rO   r!   r)   r'   ú<module>rS      s‡   ðØ RÐ Rà "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð Ð Ð ð
ð ð Ð ð4^ð ^ð ^ð ^ðBð ð ð ð ð r)   