+
    iHàjµ   ã                   ó‚   € R t ^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RIH	t	H
t
Ht ^ RIHt 0 R
mtR R lt ! R R	4      tR# )zõLifecycle-hook payloads for ``AIAgent`` API requests.

JSON-safe coercion, secret-key redaction, size caps, and the ``api_request_error`` hook dispatch.
Extracted from ``run_agent.py``; every method resolves through ``AIAgent``'s MRO unchanged.
N)Úsuppress)ÚSimpleNamespace)ÚAnyÚDictÚOptional)Únormalize_usagec                ó0   € V ^8„  d   QhR\         R\         /# ©é   ÚvalueÚreturn©r   )Úformats   "Ú</home/ubuntu/.hermes/hermes-agent/agent/api_request_hooks.pyÚ__annotate__r      s   € ÷ &ñ &”sð &œsñ &ó    c                ó¸   €  V P                  RRR7      #   \         d:     T P                  RR7      u #   \         d    T P                  4       u u # i ; ii ; i)zº``value.model_dump(mode="json")`` with graceful degradation for older pydantic signatures.

warnings=False: pydantic UserWarnings on generic-union SDK models would leak to the terminal.
ÚjsonF)ÚmodeÚwarnings)r   )Ú
model_dumpÚ	TypeError)r   s   &r   Ú_model_dumpr      sc   € ð
&Ø×Ñ V°eÐÓ<Ð<øÜô &ð	&Ø×#Ñ#¨Ð#Ó0Ò0øÜô 	&Ø×#Ñ#Ó%Ô%ð	&úð&ús)   ‚ •A¡5²AµAÁAÁAÁAc            
       ó  a € ] tR t^ t o RtV 3R lR lt]V 3R lR l4       t]V 3R lR l4       t]	R^ R	^R
RR^È/V 3R lR ll4       t
]	V 3R lR l4       tV 3R lR ltV 3R lR ltRRRRRRRRRR/V 3R lR lltRtV tR# )ÚApiRequestHooksMixinzPHook payload sanitising + ``api_request_error`` dispatch (see module docstring).c                óL   <€ V ^8„  d   QhRS[ RS[S[S[S[ 3,          ,          /# )r
   Úresponser   )r   r   ÚdictÚstr)r   Ú__classdict__s   "€r   r   Ú!ApiRequestHooksMixin.__annotate__#   s+   ø€ ÷ ñ ¹Cð ÁHÉTÑRUÑWZÐRZÍ^ÕD\ñ r   c                óþ   € Vf   R# \        VRR4      pV'       g   R# ^ RIHp \        W P                  V P
                  R7      pV! V4      pVP                  RR4       VP                  VR&   VP                  VR&   V# )zLToken buckets for ``post_api_request`` plugins (no raw ``response`` object).NÚusage)Úasdict)ÚproviderÚapi_modeÚ	raw_usageÚprompt_tokensÚtotal_tokens)	ÚgetattrÚdataclassesr#   r   r$   r%   Úpopr'   r(   )Úselfr   r&   r#   ÚcuÚsummarys   &&    r   Ú#_usage_summary_for_api_request_hookÚ8ApiRequestHooksMixin._usage_summary_for_api_request_hook#   sp   € àÒÙÜ˜H g¨tÓ4ˆ	ßÙÝ&ä˜Y·±ÈÏÉÔWˆÙ˜“*ˆØ�‰�K Ô&Ø#%×#3Ñ#3ˆ�Ñ Ø"$§/¡/ˆ�ÑØˆr   c                ó    <€ V ^8„  d   QhRS[ /# )r
   r   )Úint)r   r   s   "€r   r   r    4   s   ø€ ÷ ñ ¡Sñ r   c                 óŒ   € \         P                  ! R R4      p  \        R\        V 4      4      #   \        \
        3 d     R# i ; i)ÚHERMES_PLUGIN_PAYLOAD_MAX_CHARSÚ50000éè  iPÃ  )ÚosÚgetenvÚmaxr2   r   Ú
ValueError)Úraws    r   Ú_hook_payload_max_charsÚ,ApiRequestHooksMixin._hook_payload_max_chars3   s@   € ä�iŠiÐ9¸7ÓCˆð	Ü�tœS ›XÓ&Ð&øÜœ:Ð&ô 	Úð	ús   ™. ®AÁAc                ó&   <€ V ^8„  d   QhRS[ RS[/# )r
   Úkeyr   )r   Úbool)r   r   s   "€r   r   r    <   s   ø€ ÷ Oñ O¡Cð O©Dñ Or   c                ó¶   € \        V \        4      '       g   R # V P                  4       P                  RR4      pV\        9   ;'       g    VP                  R4      # )FÚ-Ú_Ú_api_key)Ú
isinstancer   ÚlowerÚreplaceÚ_SENSITIVE_HOOK_KEYSÚendswith)r?   Úlowereds   & r   Ú_is_sensitive_hook_keyÚ+ApiRequestHooksMixin._is_sensitive_hook_key;   sI   € ä˜#œs×#Ò#ÙØ—)‘)“+×%Ñ% c¨3Ó/ˆØÔ.Ñ.×NÐN°'×2BÑ2BÀ:Ó2NÐNr   ÚdepthÚ	max_depthÚ
max_stringi@  Úmax_sequencec                ó>   <€ V ^8„  d   QhRS[ RS[RS[RS[RS[RS[ /# )r
   r   rM   rN   rO   rP   r   )r   r2   )r   r   s   "€r   r   r    C   s?   ø€ ÷ 0'ñ 0'Ùð0'Ù#&ð0'Ù7:ð0'ÙLOð0'áð0'ñ 
ñ0'r   c               óä  a aaaa€ SS8”  d   R \        V4      P                   R2# Ve"   \        V\        \        \
        34      '       d   V# \        V\        4      '       d3   \        V4      S8”  d!   VRS R\        V4      S,
           R2,           # V# \        V\        \        34      '       d   R \        V4       R2# V VVVV3R lp\        V\        4      '       dw   / p\        VP                  4       4       FU  w  pw  ršVS8¼  d   \        V4      S,
          VR&    V# \        V	4      pS P                  V4      '       d   RMV! V
4      W{&   KW  	  V# \        V\        \        \         34      '       dZ   \        V4      pVRS  U
u. uF
  q¦! V
4      NK  	  pp
\        V4      S8”  d$   VP#                  R\        V4      S,
          /4       V# \%        \&        4      ;_uu_ 4        \)        VR	4      '       d   V! \+        V4      4      uuRRR4       #  RRR4       \%        \&        4      ;_uu_ 4        ^ R
IHpHp V! V4      '       d   V! V! V4      4      uuRRR4       #  RRR4       \        V\2        4      '       d   V! \5        V4      4      # \)        VR4      '       dz   \%        \&        4      ;_uu_ 4        T! \5        V4      P                  4        UUu/ uF+  w  pp\        V4      P7                  R4      '       d   K(  VVbK-  	  upp4      uuRRR4       # \        V4      RS # u up
i   + '       g   i     EL%; i  + '       g   i     Lé; iu uppi   + '       g   i     LP; i)Ú<z depth limit>Nz...[truncated z chars]z bytes>c                 ó>   <€ SP                  V S^,           SSSR7      # )é   )rM   rN   rO   rP   )Ú_hook_jsonable)ÚitemÚclsrM   rN   rP   rO   s   &€€€€€r   ÚrecurseÚ4ApiRequestHooksMixin._hook_jsonable.<locals>.recurseR   s+   ø€ Ø×%Ñ%Ø˜E A�I°ÀzØ)ð &ó ð r   Ú_truncated_itemsz
<redacted>r   )r#   Úis_dataclassÚ__dict__rC   )ÚtypeÚ__name__rE   r@   r2   Úfloatr   ÚlenÚbytesÚ	bytearrayr   Ú	enumerateÚitemsrK   ÚlistÚtupleÚsetÚappendr   Ú	ExceptionÚhasattrr   r*   r#   r\   r   ÚvarsÚ
startswith)rX   r   rM   rN   rO   rP   rY   ÚoutÚidxr?   rW   Ústr_keyÚseqr#   r\   ÚkÚvs   f&dddd           r   rV   Ú#ApiRequestHooksMixin._hook_jsonableB   sÐ  ü€ ð
 �9ÔØ”t˜E“{×+Ñ+Ð,¨MÐ:Ð:ØŠ=œJ u¬t´S¼%Ð.@×AÒAØˆLÜ�eœS×!Ò!Ü�5‹z˜JÔ&Ø˜[˜jÐ)¨n¼SÀ»ZÈ*Õ=TÐ<UÐU\Ð,]Õ]Ð]ØˆLÜ�eœe¤YÐ/×0Ò0Ø”s˜5“z�l 'Ð*Ð*÷	ñ 	ô �eœT×"Ò"Ø"$ˆCÜ$-¨e¯k©k«mÖ$<Ñ �‘[�cØ˜,Ô&Ü.1°%«j¸<Õ.G�CÐ*Ñ+Øð ˆJô ˜c›(�Ø/2×/IÑ/IÈ'×/RÒ/R™|ÑX_Ð`dÓXe�“ñ %=ð ˆJÜ�eœd¤E¬3Ð/×0Ò0Ü�u“+ˆCØ-0°°,Ñ-?Ó@Ñ-? T�7˜4–=Ñ-?ˆCÐ@Ü�3‹x˜,Ô&Ø—
‘
Ð.´°C³¸<Õ0GÐHÔIØˆJÜ”i× Õ Ü�u˜l×+Ò+Ùœ{¨5Ó1Ó2÷ !Ò Ø+÷ !ô ”i× Õ ß8Ù˜E×"Ò"Ù™v e›}Ó-÷ !Ò à"÷ !ô �eœ_×-Ò-Ùœ4 ›;Ó'Ð'Ü�5˜*×%Ò%Üœ)×$Õ$Ù´°e³×1BÑ1BÔ1DÔcÑ1D©¨¨AÌCÐPQËF×L]ÑL]Ð^a×Lb¤  1¢Ñ1DÒcÓd÷ %Ò$ä�5‹z˜+˜:Ð&Ð&ùò! A÷ !× Ð ú÷ !× üó  d÷ %×$úsB   Æ	L-Ç'#L2È5$MÊ=MË%MÌMÌMÌ2M	ÍM	ÍMÍM/	c                ó&   <€ V ^8„  d   QhRS[ RS[ /# r	   r   )r   r   s   "€r   r   r    v   s   ø€ ÷ 
ñ 
©3ð 
±3ñ 
r   c                óL  € V P                  4       pRp/ RRR^2/3 FH  pV P                  ! V3/ VB p \        P                  ! VR\        R7      p\        T4      T8:  g   KF  Tu # 	  RR	R
\        V4      P                  RVRV /#   \
         d    \	        T4      RT u u # i ; i)uR   JSON-able payload under the size cap: full â†’ reduced caps â†’ truncated preview.Ú rO   r6   rP   F)Úensure_asciiÚdefaultNÚ
_truncatedTÚoriginal_typeÚpreview)	r<   rV   r   Údumpsr   rj   ra   r^   r_   )rX   r   ÚlimitÚencodedÚcapsÚpayloads   &&    r   Ú_sanitize_hook_payloadÚ+ApiRequestHooksMixin._sanitize_hook_payloadu   s¾   € ð ×+Ñ+Ó-ˆØˆØ˜,¨¨n¸bÐAÓBˆDØ×(Ò(¨Ñ7°$Ñ7ˆGð,ÜŸ*š* W¸5Ì#ÔN�ô �7‹|˜uÖ$Ø’ñ Cð ˜$ ´°e³×1EÑ1EÀyÐRYÐZ`Ð[`ÐRað
ð 	
øô	 ô ,Ü˜7“| F UÐ+Ô+ð,ús   ²BÂB#Â"B#c                ób   <€ V ^8„  d   QhRS[ S[S[S[3,          ,          RS[S[S[3,          /# )r
   Ú
api_kwargsr   )r   r   r   r   )r   r   s   "€r   r   r    †   s9   ø€ ÷ Mñ M¹ÁÁcÉ3ÀhÅÕ8Pð MÑUYÑZ]Ñ_bÐZbÕUcñ Mr   c                ó¤   € T;'       g    / P                  4        UUu/ uF  w  r#VR9  g   K  W#bK  	  pppV P                  RRRV/4      # u uppi )ÚtimeoutÚmethodÚPOSTÚbody>   r‡   Úhttp_client)re   r‚   )r,   r…   r?   r   rŠ   s   &&   r   Ú_api_request_payload_for_hookÚ2ApiRequestHooksMixin._api_request_payload_for_hook†   se   € ð  *×/Ð/¨R×6Ñ6Ô8ô
á8‘
�ØÐ4Ñ4ô ˆCŠJÙ8ð 	ñ 
ð
 ×*Ñ*¨H°f¸fÀdÐ+KÓLÐLùó
s
   žA®Ac          
      óX   <€ V ^8„  d   QhRS[ RS[ RS[S[,          RS[S[S[ 3,          /# )r
   r   Úassistant_messageÚfinish_reasonr   )r   r   r   r   )r   r   s   "€r   r   r    Ž   s:   ø€ ÷ 
ñ 
Ùð
Ù03ð
ÙGOÑPSÅ}ð
á	‰c‘3ˆh�ñ
r   c               óè   € \        VR R4      ;'       g    . pV P                  R\        VRR4      R\        VRR4      RVRR\        VRR4      R	\        VR	R4      R V/R
V P                  V4      /4      # )Ú
tool_callsNÚmodelÚupstream_providerr$   r�   r�   ÚroleÚ	assistantÚcontentr"   )r)   r‚   r/   )r,   r   r�   r�   r’   s   &&&$ r   Ú_api_response_payload_for_hookÚ3ApiRequestHooksMixin._api_response_payload_for_hookŽ   s‘   € ô
 Ð.°¸dÓC×IÐIÀrˆ
Ø×*Ñ*àœ ¨7°DÓ9à#¤W¨X°zÀ4Ó%HØ Ø#ØœGÐ$5°v¸{ÓKØœwÐ'8¸)ÀTÓJØ  *ð&ð
 ˜×AÑAÀ(ÓKðó
ð 	
r   Ústatus_codeNÚretry_countÚmax_retriesÚ	retryableÚreasonc                óâ   <€ V ^8„  d   QhRS[ RS[ RS[ RS[RS[RS[S[S[ S[3,          ,          RS[ RS[ R	S[S[,          R
S[S[,          RS[S[,          RS[S[,          RS[S[ ,          RR/# )r
   Útask_idÚturn_idÚapi_request_idÚapi_call_countÚapi_start_timer…   Ú
error_typeÚerror_messagerš   r›   rœ   r�   rž   r   N)r   r2   r`   r   r   r   r@   )r   r   s   "€r   r   r    £   s¯   ø€ ÷ #ñ #Ùð#Ù(+ð#Ù=@ð#ÙRUð#áð#á+3±D¹¹c¸µNÕ+Cð#áQTð#ñ ð#ñ *2±#­ð#ñ MUÑUXÍMð#ñ ™c•]ð	#ñ 7?¹tµnð	#ñ
 ™•ð#ð 
ñ#r   c               ó  € \        \        4      ;_uu_ 4        ^ RIHp VP	                  R4      '       g    RRR4       R# \
        P
                  ! 4       pTP                  RTTTV P                  ;'       g    RV P                  ;'       g    RV P                  V P                  V P                  V P                  VWõ,
          VVV	V
VVVRVRV/V P                  V4      R7       RRR4       R#   + '       g   i     R# ; i)é    )Ú	lifecycleÚapi_request_errorNrw   r^   Úmessage)r    r¡   r¢   Ú
session_idÚplatformr“   r$   Úbase_urlr%   r£   Úapi_durationÚ
started_atÚended_atrš   r›   rœ   r�   rž   ÚerrorÚrequest)r   rj   Ú
hermes_clir©   Úhas_hookÚtimeÚinvoke_hookr¬   r­   r“   r$   r®   r%   rŒ   )r,   r    r¡   r¢   r£   r¤   r…   r¥   r¦   rš   r›   rœ   r�   rž   Ú
_lifecycler±   s   &$$$$$$$$$$$$$  r   Ú_invoke_api_request_error_hookÚ3ApiRequestHooksMixin._invoke_api_request_error_hook£   sÜ   € ô ”i× Õ Ý:Ø×&Ñ&Ð':×;Ò;Ø÷ !Ñ ô —y’y“{ˆHØ×"Ñ"Ø#ØØØ-ØŸ?™?×0Ð0¨bØŸ™×,Ð,¨"Ø—j‘jØŸ™ØŸ™ØŸ™Ø-Ø%Õ6Ø)Ø!Ø'Ø'Ø'Ø#ØØ˜z¨9°mÐDØ×:Ñ:¸:ÓFð+ #ô ÷ !× × Ò ús   ˜C/Á6C/Á8C/ÂAC/Ã/D 	© )r_   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r/   Ústaticmethodr<   rK   ÚclassmethodrV   r‚   rŒ   r˜   r¹   Ú__static_attributes__Ú__classdictcell__)r   s   @r   r   r       så   ø‡ € ÙZ÷ð ð  ÷ó ðð ÷Oó ðOð ð0'Ø)*ð0'Ø=>ð0'ØRVð0'à÷0'ñ 0'ó ð0'ðd ÷
ó ð
÷ Mð M÷
ð 
ð*#ð :>ð#ð ]að#ð &*ð	#ð HLð	#ð
 !%÷#÷ #ð #r   r   >   ÚcookieÚapi_keyÚ
set_cookieÚauthorizationÚproxy_authorization)r¿   r   r7   r¶   Ú
contextlibr   Útypesr   Útypingr   r   r   Úagent.usage_pricingr   rH   r   r   r»   r   r   Ú<module>rÍ      s;   ðñó
 Û 	Û Ý Ý !ß &Ñ &å /âbÐ õ&÷fó fr   