+
    Wi                        ^ RI t ^ RIHtHtHtHt ^ RIHt ^ RIH	t	 ^ RI
Ht ]'       d	   ^ RIHtHt R R ltR	 R
 ltRR R llt ! R R]4      t]]]	,          ]]]3,          3,          t ! R R]4      tR R ltR R ltR# )    N)TYPE_CHECKINGAnyOptionalUnion)ChatCompletion)	BaseModel)GenerateJsonSchema)ResultWithTextSearchResponsec                :    V ^8  d   QhR\         \        ,          /#    return)r   str)formats   "K/home/ubuntu/hermes-agent/venv/lib/python3.14/site-packages/exa_py/utils.py__annotate__r      s      8C=     c                \   V P                   ^ ,          P                  P                  '       d   V P                   ^ ,          P                  P                   FS  pVP                  P                  R8X  g   K   \
        P                  ! VP                  P                  4      R,          pVu # 	  R# )z+Extract query from completion if it exists.searchqueryN)choicesmessage
tool_callsfunctionnamejsonloads	arguments)
completion	tool_callr   s   &  r   maybe_get_queryr"      s~    !$$///#++A.66AAI!!&&(2

9#5#5#?#?@I B r   c                :    V ^8  d   QhR\         \        ,          /# r   )listdict)r   s   "r   r   r      s      d r   c                8   V P                   ^ ,          P                  pVP                  '       g   Q R4       hV Uu. uF  qDP                  R4      R8X  d   K  VNK  	  ppVP	                  VRRRRRVP                  ^ ,          P
                  RV/.4       V# u upi )	zaAdd assistant message and exa result to messages list. Also remove previous exa call and results.z&Must use this with a tool call requestroler   toolr   r   tool_call_idcontent)r   r   r   getextendid)r    messages
exa_resultassistant_messager   s   &&&  r   add_message_to_messagesr1      s    "**1-55'''Q)QQ'  ('GF0Cz0Qx   OO 1 < <Q ? B B:		

 O!s   BBc                $    V ^8  d   QhR\         /# )r   max_len)int)r   s   "r   r   r   .   s      3 r   c                    V P                    Uu. uF0  pRVP                   RVP                   RVP                  RV  R2NK2  	  ppRP	                  V4      # u upi )z(Format exa result for pasting into chat.zUrl: z
Title: 
N)resultsurltitletextjoin)r/   r3   resultr   s   &&  r   format_exa_resultr=   .   sh     !(((F 

|9V\\N"V[['5J4K2N(  
 99S>s   6Ac                   b   a a ] tR t^8t oRtRV3R lV 3R lllt]V3R lR l4       tRtVt	V ;t
# )ExaOpenAICompletionz"Exa wrapper for OpenAI completion.c                .   < V ^8  d   QhRS[ R,          /# )r   r/   SearchResponse[ResultWithText])r   )r   __classdict__s   "r   r    ExaOpenAICompletion.__annotate__;   s     % %=>%r   c	           
     @   < \         S	V `  VVVVVVVR 7       Wn        R# )r-   r   createdmodelobjectsystem_fingerprintusageN)super__init__r/   )
selfr/   r-   r   rF   rG   rH   rI   rJ   	__class__s
   &&&&&&&&&r   rL   ExaOpenAICompletion.__init__;   s3     	1 	 	
 %r   c                4   < V ^8  d   QhRS[ R,          RS[/# )r   r/   rA   r    )r   r   )r   rB   s   "r   r   rC   R   s%     
 
=>
 #
r   c                    V ! VVP                   VP                  VP                  VP                  VP                  VP
                  VP                  R 7      # ))r/   r-   r   rF   rG   rH   rI   rJ   rE   )clsr/   r    s   &&&r   from_completion#ExaOpenAICompletion.from_completionQ   sQ     !}}&&&&""$$)<<""	
 		
r   )r/   )NN)__name__
__module____qualname____firstlineno____doc__rL   classmethodrS   __static_attributes____classdictcell____classcell__rN   rB   s   @@r   r?   r?   8   s+     ,% %, 
 
 
r   r?   c                   @   a a ] tR t^ft oRtRV 3R lltR tRtVtV ;t	# )InlineJsonSchemaGeneratorzXCustom JSON schema generator that inlines all schemas without creating $defs references.c                   < \         SV `  W4      pRV9   d'   VR,          pV P                  W44      pRV9   d   VR V# V# )zDGenerate JSON schema normally, then post-process to inline all refs.z$defs)rK   generate_inline_refs)rM   schemamoder<   definitionsinlined_resultrN   s   &&&   r   rb   "InlineJsonSchemaGenerator.generatei   sR     !&/ f /K!..vCN.("7+!!r   c           	        \        V\        4      '       d   RV9   dZ   \        V4      ^8X  dJ   VR,          pVP                  R4      '       d(   VR,          pWB9   d   V P	                  W$,          V4      # V# VP                  4        UUu/ uF  w  rVWPP	                  Wb4      bK  	  upp# \        V\        4      '       d!   V Uu. uF  qpP	                  Wr4      NK  	  up# V# u uppi u upi )z5Recursively replace all $ref with actual definitions.z$refz#/$defs/:   NN)
isinstancer%   len
startswithrc   itemsr$   )rM   objrf   ref_pathdef_namekeyvalueitems   &&&     r   rc   &InlineJsonSchemaGenerator._inline_refsy   s    c4  }SQv;&&z22'|H.#001FTT

 '*iik&1
 **5>>&1  T""EHIST%%d8SII J Js   
C"C( )
validation)
rU   rV   rW   rX   rY   rb   rc   r[   r\   r]   r^   s   @@r   r`   r`   f   s     b  r   r`   c                J    V ^8  d   QhRRR\         \        \        3,          /# )r   schema_inputJSONSchemaInputr   )r%   r   r   )r   s   "r   r   r      s#     
 
(9 
d38n 
r   c                    \        V \        4      '       d/   \        V \        4      '       d   V P	                  RR\
        R7      # \        V \        4      '       d   V # \        R\        V 4       R24      h)zConvert various schema input types to JSON Schema dict.

Args:
    schema_input: Either a Pydantic BaseModel class or a dict containing JSON Schema

Returns:
    dict: JSON Schema representation (fully inlined without $defs)
Fserialization)by_aliasre   schema_generatorzUnsupported schema type: z#. Expected BaseModel class or dict.)rk   type
issubclassr   model_json_schemar`   r%   
ValueError)ry   s   &r   _convert_schema_inputr      ss     ,%%*\9*M*M-- 6 . 
 	

 
L$	'	''\(:';;^_
 	
r   c                $    V ^8  d   QhR\         /# r   )r   )r   s   "r   r   r      s      c r   c                 V     ^ RI p ^ RIpVP                  P                  VP                  P                  \        4      4      pVP                  P                  V4      pVP                  P                  VR4      pVP                  P                  V4      '       dS   \        VR4      ;_uu_ 4       pV P                  V4      pVP                  R/ 4      P                  RR4      uuRRR4       #  R#   \         d    ^ RIp  Li ; i  + '       g   i     R# ; i  \         d     R# i ; i)z,Get the package version from pyproject.toml.Nzpyproject.tomlrbprojectversionunknown)tomllibImportErrortomliospathdirnameabspath__file__r;   existsopenloadr+   	Exception)r   r   current_dirproject_rootpyproject_pathfdatas          r   _get_package_versionr      s    	$ 	ggoobggooh&?@ww{3l4DE77>>.))nd++q||Axx	2.229iH ,+ * !  	$#	$ ,+   sS   C0 BD D /3D"
D 0D?D DD D	D D D('D())r   typingr   r   r   r   openai.types.chatr   pydanticr   pydantic.json_schemar	   
exa_py.apir
   r   r"   r1   r=   r?   r   r%   r   rz   r`   r   r   rv   r   r   <module>r      sn     6 6 ,  390(
. (
V Yc3h78) 2 )X
0r   