
    `gj&                    <    d Z ddlmZ ddlmZmZ h dZddZd	dZy)
zLHelpers for translating OpenAI-style tool schemas to Gemini's schema subset.    )annotations)AnyDict>   enumtypeanyOfitemstitleformatdefaultexamplemaximumminimumpatternmaxItemsminItemsnullablerequired	maxLength	minLength
propertiesdescriptionmaxPropertiesminPropertiespropertyOrderingc                   t        | t              si S i }| j                         D ]  \  }}|t        vr|dk(  rPt        |t              s%i }|j                         D ]$  \  }}t        |t              st        |      ||<   & |||<   d|dk(  rt        |      ||<   x|dk(  r>t        |t              s|D cg c]  }t        |t              rt        |       c}||<   |||<    |j                  d      }|j                  d      }	t        |t              r(|	dv r$t        d |D              r|j                  dd       |j                  d	      }
t        |
t              r|j                  d      }t        |t              rt        |j                               n	t               }|
D cg c]  }t        |t              r||v r| }}|s|j                  d	d       |S t        |      t        |
      k7  r||d	<   |S c c}w c c}w )
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   r   r   >   numberbooleanintegerc              3  >   K   | ]  }t        |t                 y w)N)
isinstancestr).0items     F/root/.hermes/venv/lib/python3.12/site-packages/agent/gemini_schema.py	<genexpr>z)sanitize_gemini_schema.<locals>.<genexpr>W   s     >T:dC((>s   Nr   )r!   dictr	   _GEMINI_SCHEMA_ALLOWED_KEYSr"   sanitize_gemini_schemalistgetanypopsetkeyslen)schemacleanedkeyvalueprops	prop_nameprop_schemar$   enum_valtype_valrequired_val	props_val
prop_namesnamevalid_requireds                  r%   r)   r)   $   s    fd#	 Glln 
U11,eT*$&E*/++- G&	;!)S1#9+#Fi G !GCL'>1%8GCL'>eT* "dD) 't,GCL
 3D {{6"H{{6"H(D!h2R&R>X>>KK% ;;z*L,%KK-	.8D.IS)*su
)
$$); 
 
 KK
D) N  C$55"0GJN[H
s   7"G=*Hc                *    t        |       }|sdi dS |S )z:Normalize tool parameters to a valid Gemini object schema.object)r   r   )r)   )
parametersr2   s     r%   sanitize_gemini_tool_parametersrB   u   s!     %Z0G 33N    N)r1   r   returnDict[str, Any])rA   r   rD   rE   )	__doc__
__future__r   typingr   r   r(   r)   rB    rC   r%   <module>rJ      s"    R " 
 4NbrC   