+
    iHàj¨Ç  ã                   ó^  a€ RO tH0 t R t^ RIt^ RIt^ RIt^ RIt^ RIHtHtH	t	 ^ RI
HtHtHtHtHtHtHt ^ RIHt ^ RIHtHt ]P.                  ! ]4      t]P4                  ! R4      tR R ltR	 R
 ltR R ltR R ltRt RPt!RQt"RRt#]$! RR04      t%Rt&. ]!O]"O]#O U u/ uF
  p ]& V  2V bK  	  up t'R]'] &   R R lt(R R lt)R R 3R R llt*R R lt+R R lt,R  R! lt-RSR# R$ llt.]/! 4       t0] ^ k R"s1R% R& lt2RTt3]P4                  ! R'R(Pi                  R) ]3 4       4       R*24      t5R+ R, lt6R- R. lt7R/ R0 lt8R1R"/R2 R3 llt9R4 R5 lt:RUR6 R7 llt;RVR8 R9 llt<R: R; lt=R< R= lt>R> R? lt?R@ RA lt@RB RC ltARD RE ltBRF RG ltCRHR"/RI RJ lltD ! RK RL]4      tE^ RMIFHGtG ]G! RN]E4       R# u up i )WuÄ   OpenAI Responses API (Codex) transport.

Owns format conversion/normalization on top of agent/codex_responses_adapter.py â€”
NOT client lifecycle, streaming, or the _run_codex_stream() call path.
N)ÚAnyÚCallableÚOptional)ÚCODEX_ASTRA_EFFORTSÚCODEX_LEGACY_EFFORTSÚXAI_GROK46_EFFORTSÚXAI_LEGACY_EFFORTSÚclamp_effortÚis_astra_modelÚcodex_supported_efforts)ÚProviderTransport)ÚNormalizedResponseÚToolCallz^(cron_.+)_\d{8}_\d{6}$c                óF   € V ^8„  d   QhR\         \        ,          R\        /# )é   Ú
session_idÚreturn)r   Ústr)Úformats   "Ú;/home/ubuntu/.hermes/hermes-agent/agent/transports/codex.pyÚ__annotate__r      s   € ÷ ñ ¬X´c­]ð ¼sñ ó    c                óJ  € \        T ;'       g    R4      p\        P                  V4      pV'       d   VP                  ^4      # ^ RIHp V! 4       pVeO   \        V^,          4      V8X  d8   \        V^,          ;'       g    R4      P                  4       pV'       d   RV 2# V# )zBNormalize a physical session_id into a stable logical cache scope.Ú )Úcurrent_executionÚcron_)r   Ú_CRON_SESSION_ID_REÚmatchÚgroupÚgateway.session_cronr   Ústrip)r   Úsidr   r   Ú	executionÚjob_ids   &     r   Ú_cache_scope_from_session_idr$      sŒ   € ä
ˆj×Ð˜BÓ
€CÜ×%Ñ% cÓ*€EßØ�{‰{˜1‹~Ðõ 7á!Ó#€IØÒ¤ Y¨q¥\Ó!2°cÔ!9Ü�Y˜q•\×'Ð' RÓ(×.Ñ.Ó0ˆßØ˜6˜(Ð#Ð#Ø€Jr   c                óF   € V ^8„  d   QhR\         R\        \        ,          /# )r   Úvaluer   )r   r   r   )r   s   "r   r   r   2   s"   € ÷ vñ v¤Sð v¬X´c­]ñ vr   c                óþ   € V f   RM\        V 4      P                  4       pV'       g   R# \        V4      ^@8:  d   V# R\        P                  ! VP                  RRR7      4      P                  4       R,          ,           # )zOReturn a provider-safe (<=64 char) cache key without changing session identity.Nr   Úpck_úutf-8Úreplace©ÚerrorsºNé   N)r   r    ÚlenÚhashlibÚsha256ÚencodeÚ	hexdigest)r&   Úkeys   & r   Ú_bounded_prompt_cache_keyr5   2   s`   € à’‰"¤3 u£:×#3Ñ#3Ó#5€CßÙÜ�c“(˜b”.ˆ3Ðu f¬w¯~ª~¸c¿j¹jÈÐYb¸jÓ>cÓ/d×/nÑ/nÓ/pÐqtÕ/uÕ&uÐur   c                ó(   € V ^8„  d   QhR\         RR/# )r   Ú	containerr   N)r   )r   s   "r   r   r   :   s   € ÷ 4ñ 4¬Sð 4°Tñ 4r   c                ó¬   € \        V \        4      '       d>   RV 9   d5   \        V R,          4      pV'       d   WR&   R# V P                  RR4       R# R# R# )zCBound (or drop, when empty) an in-place ``prompt_cache_key`` entry.Úprompt_cache_keyN)Ú
isinstanceÚdictr5   Úpop)r7   Úboundeds   & r   Ú_bound_prompt_cache_key_fieldr>   :   sK   € ä�)œT×"Ò"Ð'9¸YÔ'FÜ+¨IÐ6HÕ,IÓJˆßØ,3Ð(Ó)à�M‰MÐ,¨dÖ3ñ (GÑ"r   c                óV   € V ^8„  d   QhR\         \        \        3,          R\        RR/# )r   ÚkwargsÚheadersr   N©r;   r   r   )r   s   "r   r   r   D   s)   € ÷ %ñ %¤¤c¬3 h¥ð %¼Cð %ÀDñ %r   c                ó  € V P                  R4      p\        V\        4      '       dH   VP                  4        UUu/ uF*  w  r4V'       g   K  Vf   K  \	        V4      \	        V4      bK,  	  uppM/ pVP                  V4       WPR&   R# u uppi )zeMerge ``headers`` into a str-coerced copy of ``kwargs['extra_headers']`` (SDK kwarg -> HTTP headers).Úextra_headersN)Úgetr:   r;   Úitemsr   Úupdate)r@   rA   ÚexistingÚkÚvÚmergeds   &,    r   Ú_merge_extra_headersrL   D   sn   € à�z‰z˜/Ó*€HÜU_Ð`hÔjn×UoÒUo¨¯©Ô)9ÔQÑ)9¡ ¼QŒnÀ1ŒnŒc�!‹f”c˜!“fŠnÑ)9ÓQÐuw€FØ
‡M�M�'ÔØ$ˆ?Óùó Rs   »BÁBÁBÚhermes_web_searchÚ
web_searchúapi.openai.comzchatgpt.comÚhermes_c                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# ©r   Úparamsr   ©r;   r   r   Úbool)r   s   "r   r   r   o   s"   € ÷ ñ ¬4´´S°­>ð ¼dñ r   c                ó  €  ^ RI Hp V! V P                  R4      4      e   R#   ^ RIHp T! \        V P                  R4      ;'       g    R4      4      P                  4       R8H  #   \         d     LOi ; i  \         d     R# i ; i)	zRTrue for opencode-zen/go providers, ``opencode-*`` families, or opencode.ai hosts.)Úopencode_provider_familyÚproviderT©Úbase_url_hostnameÚbase_urlr   zopencode.aiF)Úhermes_cli.modelsrW   rE   Ú	ExceptionÚutilsrZ   r   Úlower)rS   rW   rZ   s   &  r   Ú_is_opencode_responses_backendr`   o   s…   € ðÝ>á# F§J¡J¨zÓ$:Ó;ÒGÙð HðÝ+á ¤ V§Z¡Z°
Ó%;×%AÐ%A¸rÓ!BÓC×IÑIÓKÈ}Ñ\Ð\øô ô Ùðûô ô Úðús(   ‚A& ¥$A7 Á
A7 Á&A4Á3A4Á7BÂBc                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# rR   rT   )r   s   "r   r   r   €   s"   € ÷ ñ ¬T´#´s°(­^ð Äñ r   c                óª   €  ^ RI Hp T! \        V P                  R4      ;'       g    R4      4      P	                  4       R8H  #   \
         d     R# i ; i)z>True for Perplexity's Responses-compatible Agent API endpoint.rY   r[   r   zapi.perplexity.aiF)r^   rZ   r   rE   r_   r]   )rS   rZ   s   & r   Ú _is_perplexity_responses_backendrc   €   sL   € ðÝ+á ¤ V§Z¡Z°
Ó%;×%AÐ%A¸rÓ!BÓC×IÑIÓKÐObÑbÐbøÜô Úðús   ‚$A §A ÁAÁAc                 ó$   € V P                  R 4      # ©Úname)rE   ©Úts   &r   Ú<lambda>ri   Œ   s   € ¨q¯u©u°V¬}r   c                 ó   € / V CR V/C# re   © )rh   Úaliass   &&r   ri   ri   �   s   € Ð;O¸aÐ;OÀÈÒ;Or   c                ót  € V ^8„  d   QhR\         \        \        \        3,          ,          R\        \        R3,          R\
        \        .\        3,          R\
        \        \        .\        3,          R\        \         \        \        \        3,          ,          \        \        \        3,          3,          /# )r   Úresponse_toolsÚreserved_names.Úname_ofÚrenamer   )Úlistr;   r   r   Útupler   )r   s   "r   r   r   Š   s…   € ÷  ñ  Üœœc¤3˜h�Õ(ð Ü:?ÄÀSÀ½/ð ä”t�fœc�kÕ"ð ô ”dœC�[¤$Ð&Õ'ð ô Œ4””Sœ#�X•Õ¤¤c¬3 h¥Ð/Õ0ñ	 r   c                ó¼  € . p/ pV  Uu0 uF3  p\        V\        4      '       g   K  V! V4      '       g   K+  V! V4      kK5  	  ppV  FŒ  p\        V\        4      '       d	   V! V4      MRpW�9  d   VP                  V4       K<  \         V 2;rš^pW§9   d   V	 RV 2V^,           rºK  VP	                  V
4       W…V
&   VP                  V! Wj4      4       KŽ  	  WE3# u upi )a  Alias provider-reserved function names on the wire; returns ``(tools, {alias: original_name})``.

An alias already taken by a real tool gets a ``_2``/``_3`` suffix. ``name_of``/``rename``
adapt the tool shape (Responses ``{name}`` by default; chat_completions passes ``function.name``).
NÚ_)r:   r;   ÚappendÚ_RESERVED_TOOL_ALIAS_PREFIXÚadd)rn   ro   rp   rq   Ú	rewrittenÚ	alias_mapÚtoolÚtakenrf   Úbaserl   Úsuffixs   &&&&        r   Ú_alias_reserved_toolsr   Š   sÞ   € ð ')€IØ "€IÙ'5Ób¡~˜t¼ÀDÌ$×9OŒ]ÑT[Ð\`×TaŒ]‰W�TŽ]¡~€EÐbÛˆÜ *¨4´× 6Ò 6‰w�tŒ}¸DˆØÔ%Ø×Ñ˜TÔ"ÙÜ5Ð6°t°fÐ=Ð=ˆØˆØŒnØ#˜f A f XÐ.°¸µ
’6Ø�	‰	�%ÔØ�%ÑØ×Ñ™ Ó,Ö-ñ ð ÐÐùò cs   ‰C¦C¶Cc                ó$   € V ^8„  d   QhR\         /# ©r   r   ©rU   )r   s   "r   r   r   ¦   s   € ÷ ñ ¬ñ r   c                 óÖ   €  ^ RI Hp  V ! 4       pVe   \        VRR4      R8H  # ^ RIHp V! 4       ;'       g    RP                  4       P                  4       R8H  #   \         d     R# i ; i)uô  True when xAI Responses should use Grok's native ``web_search`` built-in.

Web-search registry first, then the legacy ``_get_search_backend`` probe; fails closed to native (True).

Delegates to the web-search registry's provider resolution (which reads ``web.search_backend`` /
``web.backend`` from config) and checks whether the resolved provider is xAI. On any resolution failure,
returns True (fail-closed to native â€” preserves the #48108 incomplete-hang fix rather than risk
reintroducing it).
©Úget_active_search_providerNrf   Úxai©Ú_get_search_backendr   T©Úagent.web_search_registryr…   ÚgetattrÚtools.web_toolsrˆ   r    r_   r]   ©r…   rX   rˆ   s      r   Ú_xai_prefers_native_web_searchrŽ   ¦   si   € ðÝHá-Ó/ˆØÒÜ˜8 V¨TÓ2°eÑ;Ð;å7á#Ó%×+Ð+¨×2Ñ2Ó4×:Ñ:Ó<ÀÑEÐEøÜô Úðúó   ‚ A £A ·!A ÁA(Á'A(c                ó^   € V ^8„  d   QhR\         \        \        3,          R\        R\        /# )r   rS   Úis_xai_responsesr   rT   )r   s   "r   r   r   ¾   s)   € ÷ 	ñ 	¤$¤s¬C x¥.ð 	ÄDð 	ÌTñ 	r   c                óð   € V'       g   V P                  R4      RJ d   R#  ^ RIHp T! \        V P                  R4      ;'       g    R4      4      P	                  4       \
        9   #   \         d     R# i ; i)zaTrue when the Responses endpoint owns the ``tool_search`` namespace (xAI, OpenAI, ChatGPT Codex).Úis_codex_backendTrY   r[   r   F)rE   r^   rZ   r   r_   Ú_OPENAI_RESPONSES_HOSTSr]   )rS   r‘   rZ   s   && r   Ú_reserves_tool_searchr•   ¾   sc   € ç˜6Ÿ:™:Ð&8Ó9¸TÓAÙðÝ+á ¤ V§Z¡Z°
Ó%;×%AÐ%A¸rÓ!BÓC×IÑIÓKÔOfÑfÐføÜô Úðús   ¡$A& ÁA& Á&A5Á4A5c                ó$   € V ^8„  d   QhR\         /# r�   r‚   )r   s   "r   r   r   Ê   s   € ÷ ñ ¬4ñ r   c                 óÖ   €  ^ RI Hp  V ! 4       pVe   \        VRR4      R8H  # ^ RIHp V! 4       ;'       g    RP                  4       P                  4       R8H  #   \         d     R# i ; i)aÞ  True when the active web-search backend selects OpenAI's server-side ``web_search``.

Same contract as :func:`_xai_prefers_native_web_search` with one deliberate
difference: it fails CLOSED (False). A resolution failure must leave the client-side
Hermes tool in place rather than swap in a built-in the endpoint might reject.

Only consulted for the Codex backend (``chatgpt.com/backend-api/codex``); a custom
OpenAI-compatible endpoint does not implement the server-side tool.
r„   Nrf   zopenai-nativer‡   r   Fr‰   r�   s      r   Ú!_openai_prefers_native_web_searchr˜   Ê   si   € ðÝHá-Ó/ˆØÒÜ˜8 V¨TÓ2°oÑEÐEå7á#Ó%×+Ð+¨×2Ñ2Ó4×:Ñ:Ó<ÀÑOÐOøÜô Úðúr�   Fc                óº   € V ^8„  d   QhR\         R\        \        \         3,          R\        R\        R\        \         \        \        \        3,          3,          /# )r   rn   rS   r‘   r“   r   )r   r;   r   rU   rs   )r   s   "r   r   r   â   sN   € ÷ :(ñ :(Üð:(Ü!%¤c¬3 h¥ð:(ÜCGð:(Ü[_ð:(ä
Œ3””Sœ#�X•ÐÕñ:(r   c                ó:  a	€ / pR R lo	V'       dº   V '       d²   \         ;QJ d    V	3R lV  4       F  '       g   K   RM	  RM! V	3R lV  4       4      '       dr   \        4       '       d.   V  Uu. uF  pS	! V4      '       d   K  VNK  	  upRR/.,           p M4V  Uu. uF  pS	! V4      '       d   / VCR\        /CMTNK!  	  p pRV\        &   V'       d…   V '       d}   \         ;QJ d    V	3R	 lV  4       F  '       g   K   RM	  RM! V	3R	 lV  4       4      '       d=   \        4       '       d-   V  Uu. uF  pS	! V4      '       d   K  VNK  	  upRR/.,           p V '       d5   \	        V4      '       d$   \        V \        4      w  rVP                  V4       V '       d5   \        V4      '       d$   \        V \        4      w  rVP                  V4       V '       d5   \        W4      '       d$   \        V \        4      w  rVP                  V4       W3# u upi u upi u upi )
u¤  Apply provider-reserved tool-name aliasing; returns ``(tools, {alias: original})`` for THIS request.

xAI: a client ``web_search`` collides with Grok's native search â€” native mode
swaps it 1:1 for the built-in, client mode keeps Hermes dispatch under an alias.

OpenAI Codex: the Responses endpoint carries the same collision, so the backend
selection drives the same 1:1 swap (``web.search_backend: openai-native``).
c                ó0   € V ^8„  d   QhR\         R\        /# )r   rh   r   ©r   rU   )r   s   "r   r   Ú'_alias_wire_tools.<locals>.__annotate__ï   s   € ÷ Eñ E¤ð E¬ñ Er   c                 óZ   € \        V \        4      ;'       d    V P                  R 4      R8H  # )rf   rN   ©r:   r;   rE   rg   s   &r   Úis_client_web_searchÚ/_alias_wire_tools.<locals>.is_client_web_searchï   s$   € Ü˜!œTÓ"×DÐD q§u¡u¨V£}¸Ñ'DÐDr   c              3   ó4   <"  € T F  pS! V4      x € K  	  R # 5i©Nrk   ©Ú.0rh   r    s   & €r   Ú	<genexpr>Ú$_alias_wire_tools.<locals>.<genexpr>ò   ó   øé € Ð2cÑTbÈqÑ3GÈ×3JÐ3JÓTbùó   ƒTFÚtyperN   rf   c              3   ó4   <"  € T F  pS! V4      x € K  	  R # 5ir£   rk   r¤   s   & €r   r¦   r§   þ   r¨   r©   )ÚanyrŽ   Ú_XAI_CLIENT_WEB_SEARCH_ALIASr˜   r`   r   Ú_OPENCODE_RESERVED_TOOL_NAMESrG   rc   Ú_PERPLEXITY_RESERVED_TOOL_NAMESr•   Ú_XAI_RESERVED_TOOL_NAMES)
rn   rS   r‘   r“   Úwire_aliasesrh   Ú_oc_aliasesÚ_pplx_aliasesÚ_xai_aliasesr    s
   &&&&     @r   Ú_alias_wire_toolsrµ   â   sÅ  ø€ ð $&€LõE÷ ŸN¯s«sÔ2cÑTbÓ2c¯s¯sªsÔ2cÑTbÓ2c×/cÒ/cÜ)×+Ò+Ù)7ÓW© AÑ?SÐTU×?VŸa˜a©ÑWÐ\bÐdpÐ[qÐZrÕr‰Nñ hvóÙguÐbcÑ?SÐTU×?VÒ?VÐ;�1Ð;�fÔ:Ò;Ð\]Ò]Ñguð ð ð :FˆLÔ5Ñ6÷
 ŸN¯s«sÔ2cÑTbÓ2c¯s¯sªsÔ2cÑTbÓ2c×/cÒ/cÜ,×.Ò.Ù)7ÓW© AÑ?SÐTU×?VŸa˜a©ÑWÐ\bÐdpÐ[qÐZrÕrˆN÷ Ô8¸×@Ò@Ü&;¸NÔLiÓ&jÑ#ˆØ×Ñ˜KÔ(÷ Ô:¸6×BÒBÜ(=¸nÔNmÓ(nÑ%ˆØ×Ñ˜MÔ*÷ Ô/°×IÒIÜ'<¸^ÔMeÓ'fÑ$ˆØ×Ñ˜LÔ)ØÐ'Ð'ùòQ Xùòùò Xs$   Á.HÂHÂHÂ.HÄ/HÅHc                ó€   € V ^8„  d   QhR\         R\        \         \        3,          R\        \        \        3,          /# ©r   ÚmodelrS   r   )r   r;   r   rs   rU   )r   s   "r   r   r   %  s7   € ÷ 2Hñ 2Hœcð 2H¬4´´S°­>ð 2H¼eÄCÌÀIÕ>Nñ 2Hr   c                óŽ  € RRr2VP                  R4      pV'       dO   \        V\        4      '       d9   VP                  R4      RJ d   RpM VP                  R4      '       d
   VR,          pVP                  RR4      '       d"   ^ RIHp V! V 4      '       d   \
        M\        pMwVP                  R	4      pVP                  R
4      RJ pRp	V'       g-   \        V4      '       g   \        VP                  R4      W4      p	V	e   T	M\        WVR7      pV'       g   R# V'       g˜   \        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      p
V
'       gN   V \        9  dC   \        P                  V 4       \        P                  RV RP                  R V 4       4      4       V
'       d   R# RR3# \!        W&4      V3# )u@  ``(effort, enabled)`` for the request, effort clamped (never escalated) to the endpoint's vocabulary.

A profile-declared ``()`` (or a model that takes no ``reasoning`` field on its route) means "no
reasoning parameters accepted" (400 on any reasoning field) and disables reasoning outright:
``(None, False)``. An explicit ``reasoning_effort: none`` on a route whose vocabulary has ``none``
resolves to ``("none", False)`` so the disable goes on the wire instead of being omitted â€” omitting
it re-enables the model's default effort (gpt-5.6 defaults to ``medium``, #75227).
ÚmediumTÚreasoning_configÚenabledFÚeffortr‘   ©Úis_grok_46_familyr[   r“   NrX   )r“   c              3   óv   "  € T F/  p\        V4      P                  4       P                  4       R 8H  x € K1  	  R# 5i)ÚnoneN)r   r    r_   ©r¥   Úlevels   & r   r¦   Ú%_resolve_reasoning.<locals>.<genexpr>M  s+   é € ÐSÉÀ”s˜5“z×'Ñ'Ó)×/Ñ/Ó1°VÖ;Ëùs   ‚79u¤   reasoning_effort: none cannot be sent for %s â€” its route accepts only %s, so the model's default effort stays on (an omitted reasoning field does not disable it).z, c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir£   ©r   rÂ   s   & r   r¦   rÄ   T  s   é € Ð C¹°¤ U§ »ùs   ‚)NF)rÁ   F)rE   r:   r;   Úagent.model_metadatar¿   r   r   Ú_is_openai_api_originÚ_profile_declared_effortsÚ_codex_efforts_for_router¬   Ú_UNPROJECTABLE_DISABLE_WARNEDrx   ÚloggerÚwarningÚjoinr	   )r¸   rS   Úreasoning_effortÚreasoning_enabledr»   r¿   Ú	supportedr[   r“   ÚdeclaredÚhas_nones   &&         r   Ú_resolve_reasoningrÔ   %  s…  € ð +3°DÐ'Ø—z‘zÐ"4Ó5ÐßœJÐ'7¼×>Ò>Ø×Ñ 	Ó*¨eÓ3Ø %ÑØ×!Ñ! (×+Ò+Ø/°Õ9Ðð ‡z�zÐ$ e×,Ò,Ý:ñ +<¸E×*BÒ*BÕ&ÔHZ‰	à—:‘:˜jÓ)ˆØ!Ÿ:™:Ð&8Ó9¸TÐAÐð ˆß Ô$9¸(×$CÒ$CÜ0°·±¸JÓ1GÈÓYˆHØ (Ò 4‘HÔ:RØÐ.>ô;@ˆ	çØÐßß“3ÑSÉÓS—3—3’3ÑSÉÓSÓSˆß˜EÔ)FÔFä)×-Ñ-¨eÔ4Ü�N‰Nð\à�t—y‘yÑ C¹Ó CÓCô÷
 #Ð4Ð4¨¨uÐ4Ð4ÜÐ(Ó4Ð6GÐGÐGr   z(?:^|[./:])(?:Ú|c              #   óN   "  € T F  p\         P                  ! V4      x € K  	  R # 5ir£   )ÚreÚescape)r¥   rf   s   & r   r¦   r¦   `  s   é € ÐYÑ;X°4œrŸyšy¨Ÿ˜Ó;Xùs   ‚#%z)(?:-\d{4}-\d{2}-\d{2})?$c                óR   € V ^8„  d   QhR\         R\        R\        \         ,          /# ©r   r¸   r[   r   )r   r   r   )r   s   "r   r   r   e  s+   € ÷ Qñ Q´sð QÄcð QÌhÔWZÍmñ Qr   c                ó  € ^ RI Hp T! \        T;'       g    R4      4      P                  4       pVR8X  d   R# VP	                  R4      p\        V4      ^8H  ;'       d=    V^ ,          R8H  ;'       d)    \        V^,          4      ;'       d    VR,          RR	.8H  pV'       g   R
# \        T ;'       g    R4      P                  4       P                  4       P                  RR4      p\        P                  V4      '       d   R# R
# )zAReturn ``24h`` for supported hosts/models (Bedrock Mantle, Meta).rY   r   zapi.meta.aiÚ24hÚ.zbedrock-mantle:r   NNÚapiÚawsNru   Ú-)r^   rZ   r   r_   Úsplitr/   rU   r    r*   Ú_EXTENDED_PROMPT_CACHE_MODEL_REÚsearch)r¸   r[   rZ   ÚhostnameÚpartsÚis_bedrock_mantleÚ
normalizeds   &&     r   Ú+_default_prompt_cache_retention_for_requestrè   e  sÜ   € å'á ¤ X§^ ^°Ó!4Ó5×;Ñ;Ó=€Hð �=Ô ÙØ�N‰N˜3Ó€EÜ˜E›
 a™×{Ð{¨E°!­HÐ8HÑ,H×{Ð{ÌTÐRWÐXYÕRZË^×{Ð{Ð`eÐfhÕ`iÐnsÐuzÐm{Ñ`{ÐßÙÜ�U—[�[˜bÓ!×'Ñ'Ó)×/Ñ/Ó1×9Ñ9¸#¸sÓC€JÜ3×:Ñ:¸:×FÒFˆ5ÐPÈDÐPr   c                ó0   € V ^8„  d   QhR\         R\        /# )r   r[   r   rœ   )r   s   "r   r   r   z  s   € ÷ Nñ N¤Cð N¬Dñ Nr   c                óf   € ^ RI Hp T! \        T ;'       g    R4      4      P                  4       R8H  # )z`Exact host, so a Responses-compatible proxy or a lookalike subdomain keeps the generic contract.rY   r   rO   )r^   rZ   r   r_   )r[   rZ   s   & r   rÈ   rÈ   z  s*   € å'áœS § ¨RÓ0Ó1×7Ñ7Ó9Ð=MÑMÐMr   c                ó<   € V ^8„  d   QhR\         R\         R\        /# rÚ   rœ   )r   s   "r   r   r   �  s&   € ÷ Eñ E¬sð E¼cð EÄdñ Er   c                ó>   € \        V 4      ;'       d    \        V4      # )z'Astra on the canonical API origin only.)r
   rÈ   )r¸   r[   s   &&r   Ú#_is_official_openai_responses_routerí   �  s   € ä˜%Ó ×DÐDÔ%:¸8Ó%DÐDr   r“   c          
      ób   € V ^8„  d   QhR\         R\         R\        R\        \        R3,          /# )r   r¸   r[   r“   r   .)r   rU   rs   r   )r   s   "r   r   r   †  s5   € ÷ 5ñ 5¤Cð 5´3ð 5ÌTð 5Ô^cÔdgÐilÐdlÕ^mñ 5r   c               ó"  € V'       g;   \        V4      '       d*   ^ RIHp T! \        T ;'       g    R4      4      '       d   R# \	        V 4      '       d    V'       g   \        W4      '       g   \        # \        \        T ;'       g    R4      4      # )a‹  Effort vocabulary for a Responses route; ``()`` when the model takes no ``reasoning`` field at all.

Keeps Astra's new vocabulary off unrelated Responses-compatible endpoints, and sends nothing for the
chat-era OpenAI families (gpt-4o, gpt-4.1, ...) on api.openai.com, which 400 on any ``reasoning``
key (#76255). Only the exact OpenAI origin is judged: a relay serving those ids may translate.
)Úopenai_model_rejects_reasoningr   rk   )rÈ   rÇ   rð   r   r
   rí   r   r   )r¸   r[   r“   rð   s   &&$ r   rÊ   rÊ   †  se   € ÷ Ô 5°h× ?Ò ?ÝGá)¬#¨e¯k¨k°rÓ*:×;Ò;ØˆIÜ�e×ÒßÔ?À×PÒPä#Ð#Ü"¤3 u§{ {°Ó#3Ó4Ð4r   c                ób   € V ^8„  d   QhR\         \        \        3,          R\        R\        RR/# )r   r@   r¸   r[   r   NrB   )r   s   "r   r   r   ™  s8   € ÷ ]ñ ]¬4´´S°­>ð ]Ä#ð ]ÔQTð ]ÐY]ñ ]r   c                ó0  € \        W4      '       g   R# V P                  R4      p\        V\        4      '       d^   \	        VP                  R4      ;'       g    R4      P                  4       P                  4       pV'       d   \        V\        4      MRVR&   R F  pV P                  VR4       K  	  V P                  R4      p\        V\        4      '       d8   V Uu. uF%  pR\	        V4      P                  4       9  g   K#  VNK'  	  upV R&   R# R# u upi )	a¥  Astra's official-API contract, applied AFTER ``request_overrides`` so an override can't put a
rejected field back on the wire: ``reasoning.effort`` is ``low..max`` only (``none``/``minimal``
400), sampling and logprob knobs are rejected, and cache lifetime is fixed server-side (the
pre-5.6 ``prompt_cache_retention`` knob is dropped here; ``prompt_cache_options`` is already
stripped on every route by ``build_kwargs``).NÚ	reasoningr½   r   ÚlowÚincludeÚlogprob)ÚtemperatureÚtop_pÚtop_logprobsÚlogprobsÚprompt_cache_retention)rí   rE   r:   r;   r   r    r_   r	   r   r<   rr   )r@   r¸   r[   ró   Ú	requestedr4   rõ   Úitems   &&&     r   Ú_sanitize_astra_request_kwargsrþ   ™  sÚ   € ô /¨u×?Ò?ÙØ—
‘
˜;Ó'€IÜ�)œT×"Ò"Ü˜	Ÿ™ hÓ/×5Ð5°2Ó6×<Ñ<Ó>×DÑDÓFˆ	ßNWœl¨9Ô6IÔJÐ]bˆ	�(ÑÛ]ˆØ�
‰
�3˜Öñ ^à�j‰j˜Ó#€GÜ�'œ4× Ò Ù.5Ó\©g d¸Ì#ÈdË)Ï/É/ÓJ[Ñ9[ŸT˜T©gÑ\ˆˆyÓñ !ùÚ\s   Ã DÄDc          	      ó¬   € V ^8„  d   QhR\         R\        \        \        \         \        3,          ,          ,          R\         R\        \         ,          /# )r   ÚinstructionsÚtoolsÚscope_idr   )r   r   rr   r;   r   )r   s   "r   r   r   ¬  sH   € ÷ _ñ _¤Sð _´¼$¼tÄCÌÀH½~Õ:NÕ1Oð _Ô[^ð _ÔhpÔqtÕhuñ _r   c                óF  € V '       g   V'       g   R# RpV'       d0   \        R V 4       R R7      p\        P                  ! VRRRR7      pT R	T ;'       g    R R	V 2pR
\        P                  ! VP                  RRR7      4      P                  4       R,          ,           # )u’  ``pck_<sha256[:24]>`` of (scope_id, instructions, name-sorted tools), or None if nothing static.

Routing hint only; ``scope_id`` keeps unrelated sessions off one bucket.

``scope_id`` (pass ``_cache_scope_from_session_id(session_id)``) keeps unrelated sessions â€” independent
conversations, main vs. child/subagent, sibling children â€” from concentrating onto the same bucket
merely because their static prefix matches (see #78941), while still letting recurring cron fires of one
job share a stable key across their timestamped session_ids (the original #51395/#52295 fix this built
on). Sorting tools by name keeps the hash insertion-order independent.
Nr   c              3   óV   "  € T F  p\        V\        4      '       g   K  Vx € K!  	  R # 5ir£   )r:   r;   )r¥   rh   s   & r   r¦   Ú%_content_cache_key.<locals>.<genexpr>¼  s   é € Ð5™�1¤¨A¬t×!4�QŠQ›ùs   ‚)Ÿ
)c                 ó|   € \        V P                  R 4      ;'       g    V P                  R4      ;'       g    R4      # )rf   rª   r   )r   rE   rg   s   &r   ri   Ú$_content_cache_key.<locals>.<lambda>¼  s/   € ÄSÈÏÉÈvË×ImÐImÐZ[×Z_ÑZ_Ð`fÓZg×ImÐImÐkmÔEnr   )r4   TF)Ú	sort_keysÚensure_asciiÚ
separatorsÚ r(   r)   r*   r+   r-   )Ú,Ú:)ÚsortedÚjsonÚdumpsr0   r1   r2   r3   )r   r  r  Ú
tools_partÚsorted_toolsÚcontents   &&&   r   Ú_content_cache_keyr  ¬  s�   € ÷ §ÙØ€JßÜÙ5™Ó5Ñ;nô
ˆô —Z’Z ¸È5Ð]gÔhˆ
à�
˜$˜|×1Ð1¨rÐ2°$°z°lÐC€GØ”G—N’N 7§>¡>°'À) >Ó#LÓM×WÑWÓYÐZ]Õ^Õ^Ð^r   c          	      ót   € V ^8„  d   QhR\         R\        \        ,          R\         R\        \        ,          /# )r   rX   r¸   r[   r   )r   r   r   rs   )r   s   "r   r   r   Ä  s3   € ÷ 9ñ 9¬ð 9´H¼SµMð 9ÌSð 9Ô\dÔejÕ\kñ 9r   c                óä  €  ^ RI Hp \        T ;'       g    R4      P                  4       P	                  4       pRpV'       dC   ^ RIHp V! \        V4      4      pV'       d$   Wt8w  d   V! V4      pVe   VP                  V4      pVf*   V'       d	   V! V4      MRp	V	e   V	P                  V4      MRpTf   R# \        T4      #   \         d"   p
\        P                  RT
4        Rp
?
R# Rp
?
ii ; i)ab  Provider-profile-declared reasoning-effort vocabulary, or None (fail-open).

Resolves by endpoint host first, then by provider name: a ``custom:<name>`` entry pointed
at a host with a registered profile must follow that host's vocabulary, not the generic
custom declaration. Lazy import: provider plugins import this transport during registry
discovery.
)Úget_provider_profiler   N)Ú_infer_provider_from_urlz*profile-declared efforts lookup failed: %s)Ú	providersr  r   r    r_   rÇ   r  Úsupported_reasoning_effortsr]   rÌ   Údebugrs   )rX   r¸   r[   r  rf   rÒ   r  ÚinferredÚinferred_profileÚprofileÚexcs   &&&        r   rÉ   rÉ   Ä  sÕ   € ðÝ2ä�8—>�>˜rÓ"×(Ñ(Ó*×0Ñ0Ó2ˆØˆßÝEá/´°H³Ó>ˆHß˜HÔ,Ù#7¸Ó#AÐ Ø#Ò/Ø/×KÑKÈEÓR�HØÒß48Ñ*¨4Ô0¸dˆGØELÒEX�w×:Ñ:¸5ÔAÐ^bˆHð Ò#ˆ4Ð8¬¨x«Ð8øô ô Ü�‰ÐAÀ3ÔGÝûðús)   ‚C –,C ÁAC Â!C ÃC/ÃC*Ã*C/c                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# rR   rT   )r   s   "r   r   r   â  s&   € ÷ ]ñ ]¬¬S´#¨X­ð ]¼4ñ ]r   c                óò   € ^ RI Hp \        V P                  R4      ;'       g    R4      P	                  4       P                  4       R8X  d   R# T! \        V P                  R4      ;'       g    R4      R4      # )u\   True for Microsoft Foundry's Responses API (provider id, else host match â€” not substring).©Úbase_url_host_matchesrX   r   úazure-foundryTr[   úservices.ai.azure.com©r^   r#  r   rE   r    r_   )rS   r#  s   & r   Ú_is_azure_foundry_responsesr'  â  s\   € å+ä
ˆ6�:‰:�jÓ!×'Ð' RÓ(×.Ñ.Ó0×6Ñ6Ó8¸OÔKÙÙ ¤ V§Z¡Z°
Ó%;×%AÐ%A¸rÓ!BÐD[Ó\Ð\r   c                ó~   € V ^8„  d   QhR\         \        \        \        \        3,          ,          ,          R\
        /# ©r   Úmessagesr   )r   rr   r;   r   r   rU   )r   s   "r   r   r   ë  s,   € ÷ (ñ (¤8¬D´´c¼3°hµÕ,@Õ#Að (Ädñ (r   c                óF  aaaa€ ^ RI HoHo RR VV3R lllo\        4       o\	        T ;'       g    R4       Få  p\        V\        4      '       d   VP                  R4      MRpVR8X  d   K5  VR8X  d.   S! VP                  R4      4      pV'       g    R	# SV,          oKi  VR
8w  d    R	# \        ;QJ d=    VV3R lVP                  R4      ;'       g    .  4       F  '       g   K   Ru # 	  R	u # ! VV3R lVP                  R4      ;'       g    .  4       4      u # 	  R	# )aN  True when ``messages`` end on a tool-result run issued by the preceding assistant turn.

Azure Foundry rejects only this post-tool shape when encrypted reasoning is
replayed, so only the *trailing* messages are checked (a whole-history scan
would make suppression sticky). Call ids resolve like ``_chat_messages_to_responses_input``.
)Ú_canonical_call_id_from_fcÚ_split_responses_tool_idNc                ó<   € V ^8„  d   QhR\         R\         R\        /# )r   ÚrawÚexplicitr   )r   Úset)r   s   "r   r   Ú*_is_post_tool_replay.<locals>.__annotate__ô  s!   € ÷ 
ñ 
”sð 
¤cð 
´Sñ 
r   c                 óÄ  <€ S! V 4      w  r#V'       d   V0M	\        4       p\        V\        4      '       d6   VP                  4       '       d    VP	                  VP                  4       4       V'       gL   \        V \        4      '       d6   V P                  4       '       d    VP	                  V P                  4       4       S! V4      pV'       d   VP	                  V4       V# r£   )r1  r:   r   r    rx   )r/  r0  Úembedded_call_idÚitem_idÚidsÚ	canonicalr,  r-  s   &&    €€r   Ú	_pair_idsÚ'_is_post_tool_replay.<locals>._pair_idsô  s•   ø€ Ù$<¸SÓ$AÑ!Ðß$4ÐÑ ¼#»%ˆÜ�h¤×$Ò$¨¯©×)9Ò)9Ø�G‰G�H—N‘NÓ$Ô%ß”z #¤s×+Ò+°·	±	·²Ø�G‰G�C—I‘I“KÔ Ù.¨wÓ7ˆ	ßØ�G‰G�IÔØˆ
r   ÚroleÚsystemr{   Útool_call_idFÚ	assistantc              3   ó°   <"  € T FK  p\        V\        4      '       g   K  SS! VP                  R 4      VP                  R4      4      ,          x € KM  	  R# 5i)ÚidÚcall_idNrŸ   )r¥   Úcallr8  Útrailings   & €€r   r¦   Ú'_is_post_tool_replay.<locals>.<genexpr>  sE   øé € ð 
á3�Ü˜$¤×%ô FˆH‘y §¡¨$£°·±¸)Ó1DÓE×EÒEÛ3ùs
   ƒA 6AÚ
tool_callsTr£   rk   )	Úagent.codex_responses_adapterr,  r-  r1  Úreversedr:   r;   rE   r¬   )r*  Úmsgr:  r6  r,  r8  r-  rB  s   &   @@@@r   Ú_is_post_tool_replayrH  ë  sö   û€ ÷ c÷
ó 
ô ‹u€HÜ˜Ÿ˜ BÖ'ˆÜ",¨S´$×"7Ò"7ˆs�w‰w�vŒ¸TˆØ�8ÔÙØ�6Œ>Ù˜CŸG™G NÓ3Ó4ˆCßÚØ˜�OˆHÙà�;ÔÚß‹sõ 
àŸ™ Ó-×3Ð3°Ð3ó
�sŒsò 	
Šsò 	
ˆsõ 
àŸ™ Ó-×3Ð3°Ð3ó
ó 
ò 	
ñ (ñ$ r   c                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# rR   rT   )r   s   "r   r   r     s&   € ÷ {ñ {¤¤S¬# X¥ð {´4ñ {r   c                ó  € ^ RI Hp \        V P                  R4      ;'       g    R4      P	                  4       P                  4       R8X  d   R# \        V P                  R4      ;'       g    R4      pV! VR4      ;'       g
    V! VR4      # )	z¶True for any Azure-hosted Responses endpoint: the ``azure-foundry`` provider, a resource-level
``*.openai.azure.com`` host, or the project-scoped ``*.services.ai.azure.com`` gateway.r"  rX   r   r$  Tr[   zopenai.azure.comr%  r&  )rS   r#  r[   s   &  r   Ú_is_azure_responsesrK    su   € õ ,ä
ˆ6�:‰:�jÓ!×'Ð' RÓ(×.Ñ.Ó0×6Ñ6Ó8¸OÔKÙÜ�6—:‘:˜jÓ)×/Ð/¨RÓ0€HÙ  Ð+=Ó>×zÐzÑBWÐX`ÐbyÓBzÐzr   c                ó    € V ^8„  d   QhR\         \        \        \        3,          ,          R\         \        \        \        3,          ,          /# r)  ©rr   r;   r   r   )r   s   "r   r   r   !  s4   € ÷ ñ ¤T¬$¬s´C¨x­.Õ%9ð ¼dÄ4ÌÌSÈÅ>Õ>Rñ r   c                óŒ  € . pRp\        V 4       EF  p\        V\        4      '       d(   VP                  R4      R8X  d   VP                  R4      MRp\        V\        4      '       d±   \
        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       dw   V'       dm   V Uu. uF5  p\        V\        4      '       g   K  VP                  R4      R	8X  g   K3  VNK7  	  pp\        VRR
7      pV'       d   WcR&   MVP                  R4       RpVP                  V4       EK  	  VP                  4        V# u upi )a£  Copy of ``messages`` keeping ``codex_reasoning_items`` only on the newest assistant row that has any.
Foundry rejects a request that replays encrypted reasoning from more than one prior response (HTTP 400
"Conflicting authenticated continuation identities", #105369). ``compaction`` checkpoints stay everywhere.
A trimmed row is marked ``codex_reasoning_trimmed`` so the converter still drops its ``msg_*`` id (#97427).Fr:  r=  Úcodex_reasoning_itemsNc              3   óz   "  € T F1  p\        V\        4      ;'       d    VP                  R 4      R8g  x € K3  	  R# 5i)rª   Ú
compactionNrŸ   )r¥   Úis   & r   r¦   Ú)_newest_reasoning_only.<locals>.<genexpr>*  s3   é € Ð*pÑjoÐef¬:°a¼Ó+>×+`Ð+`À1Ç5Á5ÈÃ=ÐT`ÑC`Ô+`Ójoùs   ‚;ž;Trª   rQ  )Úcodex_reasoning_trimmed)	rF  r:   r;   rE   rr   r¬   r<   rv   Úreverse)r*  ÚoutÚnewest_keptrG  rF   rR  Úcheckpointss   &      r   Ú_newest_reasoning_onlyrY  !  sû   € ð
 !#€CØ€KÜ˜×!ˆÜ4>¸sÄD×4IÒ4IÈcÏgÉgÐV\ËoÐalÔNl�—‘Ð/Ô0ÐrvˆÜ�eœT×"Ò"§s£sÑ*pÑjoÓ*p§s§s¢sÑ*pÑjoÓ*p×'pÒ'pßÙ*/Ói©% Q´:¸aÄ×3FœqÈ1Ï5É5ÐQWË=Ð\hÑKhŸq˜q©%�ÐiÜ˜3¸Ô=�ßØ3>Ð/Ò0à—G‘GÐ3Ô4ØˆKØ�
‰
�3�ñ "ð ‡K�K„MØ€Jùò js   Â/EÃEÃ$Ec                ó0   € V ^8„  d   QhR\         R\        /# )r   Úcontext_managementr   rœ   )r   s   "r   r   r   8  s   € ÷ Mñ M´#ð M¼$ñ Mr   c                óH   € \        V \        4      ;'       d    \        V 4      # )zÚTrue only when the caller's eligibility gate produced a non-empty payload.

Every native-compaction wire effect hangs off this predicate, so a persisted
checkpoint cannot keep reshaping requests after the gate closes.
)r:   rr   rU   )r[  s   &r   Ú_native_compaction_activer]  8  s    € ô Ð(¬$Ó/×LÐL´DÐ9KÓ4LÐLr   c                óF   € V ^8„  d   QhR\         R\        \        ,          /# )r   Útimeoutr   )r   r   Úfloat)r   s   "r   r   r   A  s   € ÷ ñ œSð ¤X¬e¥_ñ r   c                óÊ   € \        V \        \        34      '       dG   \        V \        4      '       g1   ^ \        V 4      u;8  d   \        R4      8  d   M R# \        V 4      # R# )zNFinite positive number -> float; anything else (None, bool, str, inf) -> None.ÚinfN)r:   Úintr`  rU   )r_  s   &r   Ú_coerce_timeoutrd  A  sK   € ä�'œC¤˜<×(Ò(´¸GÄT×1JÒ1JÈqÔSXÐY`ÓSaÖOpÔdiÐjoÓdpÖOpáô �W‹~ÐÙr   c                ó^   € V ^8„  d   QhR\         R\        \        \         3,          R\        /# r·   )r   r;   r   rU   )r   s   "r   r   r   H  s)   € ÷ 	ñ 	œCð 	¬¬c´3¨h­ð 	¼Dñ 	r   c                óœ   € ^ RI Hp VP                  R4      RJ;'       d-    \        VP                  R4      4      ;'       d    V! V 4      RJ# )a*  ``reasoning.context: "all_turns"`` goes only to api.openai.com models in the live-verified family
table (gpt-5.4/5.5 default to ``current_turn`` and discard replayed earlier-turn blobs without it;
o-series and gpt-5.1-5.3 400 on it). Never the ChatGPT Codex backend: acceptance there is unverified.)Úopenai_reasoning_familyr“   Tr[   N)rE  rg  rE   rÈ   )r¸   rS   rg  s   && r   Ú_sends_all_turnsrh  H  sT   € õ Fð 	�
‰
Ð%Ó&¨dÐ2÷ 	7ð 	7Ô7LÈVÏZÉZÐXbÓMcÓ7d÷ 	7ð 	7Ù# EÓ*°$Ð6ðr   Ú	all_turnsc                óÈ   € V ^8„  d   QhR\         R\        \         \        3,          R\        R\        R\        R\        R\        R\        R	\        \         \        3,          /	# )
r   r¸   rS   r½   r¼   Úreplay_encrypted_reasoningr‘   Úis_github_responsesri  r   )r   r;   r   rU   )r   s   "r   r   r   T  sf   € ÷ 'ñ 'Üð'ÜœS¤#˜X�ð'Ü36ð'ÜAEð'Ücgð'äð'ä15ð'äBFð'ô 
Œ#Œsˆ(…^ñ'r   c               óv  € V'       d   R.M. p/ p	V'       d*   V'       d"   ^ RI Hp
 W‰R&   V
! V 4      '       d   RV/V	R&   V	# V'       dN   V'       d(   VP                  R4      e   / VR,          CRR/CV	R&   V	# RVRR/V'       d   R	R
/M/ CV	R&   W‰R&    V	# V'       g   V'       g   . V	R&   VR8X  d   RR/V	R&   V	# )uú  ``reasoning`` / ``include`` request fields for the endpoint family.

xAI 400s on ``reasoning.effort`` outside its allowlist; GitHub Models takes a
verbatim ``github_reasoning_extra`` and never ``include``. A disabled ask resolved to
``effort="none"`` is sent as ``{"effort": "none"}`` â€” the wire has no other way to switch
a reasoning model's default effort off (#75227). ``all_turns`` adds ``context: "all_turns"``
so the model renders replayed reasoning from earlier user turns (``_sends_all_turns``).
zreasoning.encrypted_content)Úgrok_supports_reasoning_effortrõ   r½   ró   Úgithub_reasoning_extraÚsummaryÚautoÚcontextri  rÁ   )rÇ   rn  rE   )r¸   rS   r½   r¼   rk  r‘   rl  ri  rõ   Úfieldsrn  s   &&$$$$$$   r   Ú_reasoning_fieldsrt  T  sì   € ÷ 2LÐ,Ñ-ÐQS€GØ€Fß×#ÝGà#ˆyÑÙ)¨%×0Ò0Ø#+¨VÐ"4ˆF�;Ñð( €M÷' 
ßØ�z‰zÐ2Ó3Ò?ð '^¨Ð0HÕ)IÐ&]È9ÐV\Ñ&]��{Ñ#ð €Mð $,¨V°YÀÐ"z×gpÈIÐWbÑKcÐvxÐ"zˆF�;ÑØ '�9Òð
 €M÷	 !×)9ØˆˆyÑØ�VÔØ#+¨VÐ"4ˆF�;ÑØ€Mr   c                   ó4  a € ] tR tRt o RtRRRRRRRR/tR	tR	tR	t]	! 4       t
R
tV 3R lR ltV 3R lR lt]V 3R lR l4       tV 3R lR ltV 3R lR ltV 3R lR ltR$V 3R lR lltV 3R lR ltV 3R lR ltRR
RR
RR
/V 3R  lR! lltV 3R" ltR#tV tR	# )%ÚResponsesApiTransporti~  z)Transport for api_mode='codex_responses'.Ú	completedÚstopÚ
incompleteÚlengthÚfailedÚ	cancelledNFc                ó&   <€ V ^8„  d   QhRS[ RS[/# )r   Úerrorr   rœ   )r   Ú__classdict__s   "€r   r   Ú"ResponsesApiTransport.__annotate__�  s   ø€ ÷ ñ ¡cð ©dñ r   c                ó4  € \        V4      P                  4       pV P                  '       d!   \        VRR4      R9  g   RV9   g
   RV9   g   R# V P                  V P
                  0,          V n        RV n        \        P                  RV P
                  4       R# )	zÁ400 naming ``reasoning.context``/``all_turns`` on a request that carried the opt-in: omit it for that
model for the rest of the session. False otherwise, so it buys at most one retry per model.Ústatus_codeNzreasoning.contextri  Fz>reasoning.context rejected by %s; omitting it for this sessionT)i�  N)r   r_   Ú_last_sent_all_turnsr‹   Ú_all_turns_rejectedÚ_last_issuer_modelrÌ   rÍ   )Úselfr~  Útexts   && r   Úreject_all_turnsÚ&ResponsesApiTransport.reject_all_turns�  s‚   € ô �5‹z×ÑÓ!ˆØ×(×(Ð(¬G°E¸=È$Ó,OÐWbÔ,bØ 4Ô'¨;¸$Ô+>áØ#'×#;Ñ#;¸t×?VÑ?VÐ>WÕ#WˆÔ Ø$)ˆÔ!Ü�‰ÐWÐY]×YpÑYpÔqÙr   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r   Úmessage_listsr   )r   rc  )r   r  s   "€r   r   r€  š  s   ø€ ÷ ,ñ ,±Sð ,¹Sñ ,r   c           	     óÔ   € ^ RI Hp V P                  e   V P                  f   ^ # V Uu. uF!  pV! W0P                  V P                  R7      NK#  	  ppV'       d
   V^ ,          # ^ # u upi )a  First ``invalid_encrypted_content`` rung: drop the replayed blobs the failing request could not vouch
for (not stamped by exactly its endpoint + model), keeping the session's own continuity. Returns the
count removed from the first list; 0 means only the route's own blobs were sent.)Ú strip_unverified_reasoning_items©Úissuer_kindÚissuer_model)rE  r�  Ú_last_issuer_kindr…  )r†  r‹  r�  ÚmsgsÚremoveds   &*   r   Údrop_unverified_replayÚ,ResponsesApiTransport.drop_unverified_replayš  sp   € õ 	Sà×!Ñ!Ò)¨T×-DÑ-DÒ-LÙñ &ó
á%�ñ -¨T×?UÑ?UÐdh×d{Ñd{×|Ù%ð 	ð 
÷ %ˆw�q�zÐ+¨!Ð+ùò	
s   ©'A%c                ó    <€ V ^8„  d   QhRS[ /# r�   rÆ   )r   r  s   "€r   r   r€  ©  s   ø€ ÷ !ñ !™#ñ !r   c                ó   € R # )Úcodex_responsesrk   )r†  s   &r   Úapi_modeÚResponsesApiTransport.api_mode¨  s   € á r   c                ó<   <€ V ^8„  d   QhRS[ S[S[3,          RS[/# rR   rB   )r   r  s   "€r   r   r€  ¬  s#   ø€ ÷ 
&ñ 
&©4±±S°­>ð 
&¹cñ 
&r   c                óÌ   € ^ RI Hp V! VP                  R4      RJ VP                  R4      RJ VP                  R4      RJ VP                  R4      R7      V n        V P                  # )z_Classify the current Responses endpoint from transport params (stashed for normalize_response).)Ú_classify_responses_issuerr‘   Trl  r“   r[   )r‘   rl  r“   r[   )rE  r�  rE   r‘  )r†  rS   r�  s   && r   Ú_resolve_issuer_kindÚ*ResponsesApiTransport._resolve_issuer_kind¬  sb   € åLá!;Ø#ŸZ™ZÐ(:Ó;¸tÐCØ &§
¡
Ð+@Ó AÀTÐ IØ#ŸZ™ZÐ(:Ó;¸tÐCØ—Z‘Z 
Ó+ô	"
ˆÔð ×%Ñ%Ð%r   c                óL   <€ V ^8„  d   QhRS[ S[S[S[3,          ,          RS[/# r)  rM  )r   r  s   "€r   r   r€  ¸  s(   ø€ ÷ 
ñ 
©©d±3¹°8­nÕ)=ð 
ÉCñ 
r   c                ó>  € ^ RI HpHp V! VP                  R4      4      V n        V! WP                  R4      RJ VP                  R4      RJ \        VP                  RR4      4      V P                  V4      V P                  \        VP                  R4      4      R7      # )	z:Convert OpenAI chat messages to Responses API input items.)Ú!_chat_messages_to_responses_inputÚ_wire_model_identityr¸   r‘   Trl  rk  r[  )r‘   rl  rk  Úcurrent_issuer_kindÚcurrent_issuer_modelÚnative_compaction_eligible)rE  r¢  r£  rE   r…  rU   rž  r]  )r†  r*  r@   r¢  r£  s   &&,  r   Úconvert_messagesÚ&ResponsesApiTransport.convert_messages¸  sŠ   € çiá"6°v·z±zÀ'Ó7JÓ"KˆÔÙ0Ø§z¡zÐ2DÓ'EÈÐ'MØ &§
¡
Ð+@Ó AÀTÐ IÜ'+¨F¯J©JÐ7SÐUYÓ,ZÓ'[Ø $× 9Ñ 9¸&Ó AØ!%×!8Ñ!8Ü'@ÀÇÁÐL`ÓAaÓ'bô
ð 	
r   c                ó\   <€ V ^8„  d   QhRS[ S[S[S[S[3,          ,          ,          RS[/# )r   r  r   )r   rr   r;   r   r   )r   r  s   "€r   r   r€  Æ  s-   ø€ ÷ 'ñ '¡8©D±±c¹3°hµÕ,@Õ#Að 'Ácñ 'r   c                ó   € ^ RI Hp V! V4      # )zBConvert OpenAI tool schemas to Responses API function definitions.)Ú_responses_tools)rE  r«  )r†  r  r«  s   && r   Úconvert_toolsÚ#ResponsesApiTransport.convert_toolsÆ  s   € åBá Ó&Ð&r   c          
      ó¤   <€ V ^8„  d   QhRS[ RS[S[S[ S[3,          ,          RS[S[S[S[ S[3,          ,          ,          RS[S[ S[3,          /# )r   r¸   r*  r  r   )r   rr   r;   r   r   )r   r  s   "€r   r   r€  Ì  s]   ø€ ÷ mñ mÙðmÙ$(©©c±3¨h­Õ$8ðmÙAIÉ$ÉtÑTWÑY\ÐT\Í~ÕJ^ÕA_ðmá	‰c‘3ˆh�ñmr   c                óö
  € ^ RI Hp VP                  RR4      pTpV'       gh   V'       d`   V^ ,          P                  R4      R8X  dC   \        V^ ,          P                  R4      ;'       g    R4      P	                  4       pVR,          pT;'       g    TpVP                  R4      R	J pVP                  R
4      R	J p	VP                  R4      R	J p
\        VP                  RR	4      4      ;'       d$    \        V4      ;'       d    \        V4      '       * pV'       d   \        V4      '       d   \        V4      pTP                  R4      p\        V4      p\        W4      w  rï\        V P                  V4      WJV	4      w  pV n        ^ RIHp VP                  R4      ;'       g    / pV! VP                  RV4      4      pRVRVRV P#                  WzVW´P                  R4      WœVR7      RR/pV'       d   VVR&   RVR&   R	VR&   V'       d   VVR&   VP                  R4      p\%        VP                  R4      ;'       g    T4      p\'        VVV4      ;'       g    TpV'       g   V
'       g   V'       d   VVR&   \)        WP                  R4      4      pV'       d   VP+                  RV4       T;'       d$    \-        VV4      ;'       d    VV P.                  9  V n        VP3                  \5        WWïVW¨V P0                  R7      4       VP                  R4      pV'       d   V
'       g   R V/VR!&   V'       d   VP3                  V4       VVR&   VP7                  R"R#4      e$   \8        '       g   R	s\:        P=                  R$4       \?        VWP                  R4      4       \A        V4       V
'       d=   ^ R%IH!p V! V4      '       d   VP                  R&4      R'8X  g   VP7                  R&R#4       \E        VP                  R(VP                  R(4      4      4      pVe   VVR(&   MVP7                  R(R#4       V	'       d€   RV'       d   \        V4      MR#R)VP                  R4      ;'       g    \G        V4      /pVPI                  4        UUu/ uF  w  ppV'       g   K  VVbK  	  pppV'       d   \K        V3/ VB  MVP                  R*4      e   VR*,          VR+&   V
'       dw   V'       do   \K        V3/ R,V/B  VP                  R-4      p\M        V\N        4      '       d   \O        V4      M/ VR-&   VR-,          P+                  RVP                  RV4      4       \A        VP                  R-4      4       V# u uppi ).u«  Build Responses API kwargs (calls convert_messages/convert_tools internally).

params: instructions, reasoning_config ({effort, enabled}), session_id (transcript id;
Codex header; cache-scope fallback), cache_scope_id (rotation-stable scope for the
cache key / xAI conv header), max_tokens, timeout, request_overrides, provider, base_url,
is_github_responses, is_codex_backend, is_xai_responses, github_reasoning_extra,
context_management, replay_encrypted_reasoning.

params: instructions: str â€” system prompt (extracted from messages[0] if not given)
reasoning_config: dict | None â€” {effort, enabled} session_id: str | None â€” transcript/session id;
drives the Codex ``session_id`` header, and is the cache-scope fallback when no ``cache_scope_id``
is given cache_scope_id: str | None â€” rotation-stable logical scope id (compression-lineage root;
see agent/prompt_cache_scope.py). Preferred over session_id when deriving the prompt_cache_key
content hash and the xAI x-grok-conv-id header; the Codex x-client-request-id header mirrors the
resulting body key. Keeps the cache warm across context-compression session rotation (#79017)
max_tokens: int | None â€” max_output_tokens timeout: float | None â€” per-request timeout forwarded to
the SDK request_overrides: dict | None â€” extra kwargs merged in provider: str | None â€” provider name
for backend-specific logic base_url: str | None â€” endpoint URL base_url_hostname: str | None â€”
hostname for backend detection is_github_responses: bool â€” Copilot/GitHub models backend
is_codex_backend: bool â€” chatgpt.com/backend-api/codex is_xai_responses: bool â€” xAI/Grok backend
github_reasoning_extra: dict | None â€” Copilot reasoning params
)ÚDEFAULT_AGENT_IDENTITYr   r   r:  r;  r  :é   NNrl  Tr“   r‘   rk  r[  )Ú"strip_codex_context_variant_suffixÚrequest_overridesr¸   Úinputr[   )r‘   rl  rk  r[   r“   r[  r¸   ÚstoreFr  rq  Útool_choiceÚparallel_tool_callsr   Úcache_scope_idr9   rû   )r½   r¼   rk  r‘   rl  ri  Útext_verbosityÚ	verbosityr‡  Úprompt_cache_optionsNz~Dropped prompt_cache_options: not a Responses.create() kwarg (use request_overrides={'extra_body': ...} for wire-only fields).r¾   Úservice_tierÚpriorityr_  zx-client-request-idÚ
max_tokensÚmax_output_tokenszx-grok-conv-idÚ
extra_body)(Úagent.prompt_builderr°  rE   r   r    rU   r'  rH  rK  rY  r]  rÔ   rµ   r¬  Ú_last_wire_aliasesrÇ   r²  r§  r$   r  rè   Ú
setdefaultrh  r„  rƒ  rG   rt  r<   Ú!_PROMPT_CACHE_OPTIONS_DROP_WARNEDrÌ   rÍ   rþ   r>   r¿   rd  r5   rF   rL   r:   r;   ) r†  r¸   r*  r  rS   r°  r   Úpayload_messagesrl  r“   r‘   rk  r[  Únative_compaction_activerÏ   rÐ   rn   Ú_strip_ctx_variantr³  Ú
wire_modelr@   r   Ú_cache_scopeÚ	cache_keyÚcache_retentionr¹  r¿   r_  rA   rI   rJ   Úexisting_extra_bodys    &&&&,                           r   Úbuild_kwargsÚ"ResponsesApiTransport.build_kwargsÌ  sÿ  € õ2 	@à—z‘z .°"Ó5ˆØ#Ðß§¨X°a­[¯_©_¸VÓ-DÈÔ-PÜ˜x¨�{Ÿ™¨yÓ9×?Ð?¸RÓ@×FÑFÓHˆLØ'¨�|ÐØ#×=Ð=Ð'=ˆà$Ÿj™jÐ)>Ó?À4ÐGÐØ!Ÿ:™:Ð&8Ó9¸TÐAÐØ!Ÿ:™:Ð&8Ó9¸TÐAÐä%)¨&¯*©*Ð5QÐSWÓ*XÓ%Y÷ &
ð &
Ü'¨Ó/×ZÐZÔ4HÐIYÓ4Zô_
Ð"÷
 &Ô*=¸f×*EÒ*EÜ5Ð6FÓGÐà#ŸZ™ZÐ(<Ó=ÐÜ#<Ð=OÓ#PÐ ä.@ÀÓ.OÑ+ÐÜ2CØ×Ñ˜uÓ% vÐAQó3
Ñ/ˆ˜Ô/õ
 	bØ"ŸJ™JÐ':Ó;×AÐA¸rÐá'Ð(9×(=Ñ(=¸gÀuÓ(MÓNˆ
ð �ZØ˜LØ�T×*Ñ*Ø ÐYlØ+E×PZÑPZÐ[eÓPfØ!1Ð`jð +ó ð
 �Uð

ˆ÷ Ø,ˆF�7‰OØ$*ˆF�=Ñ!Ø,0ˆFÐ(Ñ)ß#Ø+=ˆFÐ'Ñ(à—Z‘Z Ó-ˆ
ô 4°F·J±JÐ?OÓ4P×4^Ð4^ÐT^Ó_ˆÜ& |°^À\ÓR×bÐbÐVbˆ	ç"×+;Ç	Ø)2ˆFÐ%Ñ&äEÀeÏZÉZÐXbÓMcÓdˆßØ×ÑÐ6¸ÔHð ×uÐuÔ"2°:¸vÓ"F×uÐuÈ:Ð]a×]uÑ]uÑKuð 	Ô!ð 	�‰Ô'ØÐ"2Ø'AØ-Ø×/Ñ/ô	
ô 	ð  Ÿ™Ð$4Ó5ˆß×"2Ø)¨>Ð:ˆF�6‰NßØ�M‰MÐ+Ô,Ø(ˆF�7‰Oð �:‰:Ð,¨dÓ3Ò?ç4Ó4Ø48Ð1Ü—‘ðXôô
 	' v¨u·j±jÀÓ6LÔMä% fÔ-÷
 Ý>á% e×,Ò,°·±¸NÓ1KÈzÔ1YØ—
‘
˜>¨4Ô0ô " &§*¡*¨Y¸¿
¹
À9Ó8MÓ"NÓOˆØÒØ 'ˆF�9Òà�J‰J�y $Ô'çð ·œc *œoÀØ% v§z¡zÐ2DÓ'E×'pÐ'pÔIbÐcoÓIpðˆGð )0¯©¬Ô=©¡  1¼1”t�q˜!’t©ˆGÑ=ßÜ$ VÑ7¨wÒ7øØ�Z‰Z˜Ó%Ò1Ø*0°Õ*>ˆFÐ&Ñ'ç§
ä  ÑLÐ,<¸lÐ+KÒLð #)§*¡*¨\Ó":ÐÜ@JÐK^Ô`d×@eÒ@e¤4Ð(;Ô#<ÐkmˆF�<Ñ Ø�<Õ ×+Ñ+Ð,>ÀÇ
Á
ÐK]Ð_hÓ@iÔjä% f§j¡j°Ó&>Ô?Øˆùó/ >s   ÒU5ÒU5c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r   Úresponser   )r   r   )r   r  s   "€r   r   r€  {  s   ø€ ÷ (
ñ (
©3ð (
Ñ=Oñ (
r   c                ód  € ^ RI Hp T! YP                  R4      ;'       g    V P                  VP                  R4      ;'       g    V P                  R7      w  rERpV'       Ed>   VP
                  '       Ed+   . pV P                  pVP
                   EF  pR U	u/ uF#  p	\        W‰R4      '       g   K  V	\        W‰4      bK%  	  p
p	\        VR4      pV'       d   VP                  P                  M\        VRR4      pVf   \        P                  WÌ4      pMWÇ9   d	   W|,          pTP                  \        \        VR	4      '       d   VP                  MT;'       g    RTV'       d   VP                  P                  M\        VR
R4      T
;'       g    RR7      4       EK  	  R U	u/ uF.  p	V'       g   K  \        WIR4      '       g   K!  V	\        WIR4      bK0  	  p
p	\!        V'       d   VP"                  MRYe;'       g    RV'       d   \        VRR4      MRRT
;'       g    RR7      # u up	i u up	i )z=Normalize Codex Responses API response to NormalizedResponse.)Ú_normalize_codex_responser�  r�  rŽ  NÚfunctionrf   r   r?  Ú	argumentsz{})r?  rf   rÕ  Úprovider_datarx  ró   )r  rD  Úfinish_reasonró   ÚusagerÖ  )r@  Úresponse_item_id)rO  Úcodex_message_itemsÚreasoning_details)rE  rÓ  rE   r‘  r…  rD  rÂ  r‹   ÚhasattrrÔ  rf   Ú_LEGACY_ALIAS_FALLBACKrv   r   r?  rÕ  r   r  )r†  rÑ  r@   rÓ  rG  r×  rD  rz   Útcr4   rÖ  Úhas_fnrf   s   &&,          r   Únormalize_responseÚ(ResponsesApiTransport.normalize_response{  sã  € åKá6Ø§*¡*¨]Ó";×"UÐ"U¸t×?UÑ?UØŸ™ NÓ3×NÐN°t×7NÑ7Nô
Ñˆð
 ˆ
ßˆ3�3—>—>‘>ØˆJØ×/Ñ/ˆIØ—n•n�á5Tó!Ù5T¨cÔX_Ð`bÐim×XnÔ)�Cœ Ó)Ò)Ñ5Tð ð !ô !  ZÓ0�ß+1�r—{‘{×'Ò'´w¸rÀ6È2Ó7N�àÒ$Ü1×5Ñ5°dÓA‘DØÔ&Ø$�?�DØ×!Ñ!¤(Ü '¨¨D× 1Ò 1�r—u’u¸¿¸ÀÈDß7=˜bŸk™k×3Ò3Ä7È2È{Ð\`ÓCaØ"/×"7Ð"7°4ô#÷ ñ %ñ& ]ó
á\�Üô )ä˜s¨×.ô )ˆC”˜ 4Ó(Ò(Ù\ð 	ð 
ô
 "ß#&�C—K’K¨D¸Z×WnÐWnÐhnß9<”g˜c ;°Ô5À$ØØ'×/Ð/¨4ô	
ð 	
ùò+!ùò 
s   ÂH(Â2H(Æ%
H-Æ4H-ÇH-c                ó&   <€ V ^8„  d   QhRS[ RS[/# rÐ  rœ   )r   r  s   "€r   r   r€  ¥  s   ø€ ÷ dñ d©#ð d±$ñ dr   c                óä  € Vf   R# \        VRR4      p\        V\        4      '       d   V'       d   R# \        \        VRR4      ;'       g    R4      P	                  4       P                  4       p\        VRR4      p\        V\        4      '       d   VP                  R4      M\        VRR4      pVR	8H  ;'       d5    \        T;'       g    R4      P	                  4       P                  4       R
8H  # )uñ   True if response.output is a non-empty list, or a terminal content_filter refusal.

An incomplete/content_filter response with no output must reach normalization,
not a retry. Does NOT check output_text fallback â€” the caller handles that.
NFÚoutputTÚstatusr   Úincomplete_detailsÚreasonry  Úcontent_filter)r‹   r:   rr   r   r    r_   r;   rE   )r†  rÑ  rä  rå  ÚdetailsÚ
raw_reasons   &&    r   Úvalidate_responseÚ'ResponsesApiTransport.validate_response¥  sÉ   € ð ÒÙÜ˜ 8¨TÓ2ˆÜ�fœd×#Ò#¯ÙÜ”W˜X x°Ó4×:Ð:¸Ó;×AÑAÓC×IÑIÓKˆÜ˜(Ð$8¸$Ó?ˆÜ.8¸Ä$×.GÒ.G�W—[‘[ Ô*ÌWÐU\Ð^fÐhjÓMkˆ
Ø˜Ñ%×cÐc¬#¨j×.>Ð.>¸BÓ*?×*EÑ*EÓ*G×*MÑ*MÓ*OÐScÑ*cÐcr   Úallow_streamrl  Úsanitize_harmony_tokensc          
      ó8   <€ V ^8„  d   QhRS[ RS[RS[RS[RS[/# )r   Ú
api_kwargsrí  rl  rî  r   )r   rU   r;   )r   r  s   "€r   r   r€  µ  s7   ø€ ÷ ñ ÙðÙ04ðÙSWðá!%ðñ 
ñr   c               ór   € ^ RI Hp V! WVVR7      p\        V4       \        VP                  R4      4       V# )z�Validate and sanitize Codex API kwargs before the call.

``sanitize_harmony_tokens`` is for the ChatGPT Codex backend only (rejects literal Harmony tokens).
)Ú_preflight_codex_api_kwargs)rí  rl  rî  rÀ  )rE  rò  r>   rE   )r†  rð  rí  rl  rî  rò  rç   s   &&$$$  r   Úpreflight_kwargsÚ&ResponsesApiTransport.preflight_kwargsµ  s<   € õ 	Ná0ØÐGZØ$;ô
ˆ
ô 	& jÔ1Ü% j§n¡n°\Ó&BÔCØÐr   c                óœ   <€ V ^8„  d   Qh/ S[ S[,          ;R&   S[ S[,          ;R&   S[ S[S[S[3,          ,          ;R&   S[;R&   S[;R&   # )r   r‘  r…  rÂ  r„  rƒ  )r   r   r;   Ú	frozensetrU   )r   r  s   "€r   r   r€  ~  s[   ø‡ ‚ ñ  ¡•}Ñ+ñ ñ !¡�Ñ,ñ ñ !¡¡c©3 h¥Õ0Ñ7ñ ñ #Ñ0ñ ñ Ñ&ò r   )r„  r‘  r…  rƒ  rÂ  r£   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú_STOP_REASON_MAPr‘  r…  rÂ  rö  r„  rƒ  rˆ  r”  Úpropertyr™  rž  r§  r¬  rÍ  rà  rë  ró  Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__)r  s   @r   rv  rv  ~  sÙ   ø‡ € Ù3ð $ V¨\¸8ÀXÈvÐWbÐdjÐkÐð (,ÐØ(,Ðà37Ðá%.£[ÐØ!&Ð÷ð ÷,ð ,ð ÷!ó ð!÷
&ð 
&÷
ð 
÷'ð '÷mò m÷^(
ð (
÷Tdð dð Ø7<ðØZ_ðà(-÷ò ÷o	 ƒ r   rv  )Úregister_transportr˜  c                óV   € V ^8„  d   Qh/ ^ \         9   d   \        \        ,          ;R&   # )r   rË   )Ú__conditional_annotations__r1  r   )r   s   "r   r   r      s$   € ÷ ñ ÷~ 0Ò /œs¤3�xÑ /òr   )rN   Úsearch_files)rN   r  Ú	fetch_urlÚpeople_searchÚfinance_search)Útool_search)F)zgpt-5.5-prozgpt-5.5zgpt-5.4zgpt-5.2zgpt-5.1-codex-maxzgpt-5.1-codex-minizgpt-5.1-chat-latestzgpt-5.1-codexzgpt-5.1zgpt-5-codexzgpt-5zgpt-4.1)r   r£   )Ir  rû  r0   r  Úloggingr×   Útypingr   r   r   Úagent.reasoning_effortr   r   r   r   r	   r
   r   Úagent.transports.baser   Úagent.transports.typesr   r   Ú	getLoggerr÷  rÌ   Úcompiler   r$   r5   r>   rL   r­   r®   r¯   r°   rö  r”   rw   rÝ  r`   rc   r   rŽ   r•   r˜   rµ   r1  rË   rÄ  rÔ   Ú_EXTENDED_PROMPT_CACHE_MODELSrÎ   râ   rè   rÈ   rí   rÊ   rþ   r  rÉ   r'  rH  rK  rY  r]  rd  rh  rt  rv  Úagent.transportsr  r   )rf   r  s   0@r   Ú<module>r     s  øðöó Û Û Û 	ß *Ñ *÷÷ ñ õ 4ß ?à	×	Ò	˜8Ó	$€ð
 —j’jÐ!;Ó<Ð õõ&võ4õ%ð  3Ð ð !?Ð ð#Ð ð ,Ð Ù#Ð%5°}Ð$EÓFÐ Ø'Ð ð nÐ/ÐmÐ2QÐmÐTlÑmóámˆð #Ð# D 6Ð*¨DÒ0ÙmñÐ ð 8DÐ Ð3Ñ 4õõ"ñ &=Ù*O÷ õ8õ0	õ÷0:(ñ| +.«%Ð Ó /à$)Ð !õ2Hðj!Ð ð
 #%§*¢*Ø�c—h‘hÑYÑ;XÓYÓYÐZð [ ð  ó#Ð õQõ*NõEð
5ÐTY÷ 5õ&]÷&_÷09õ<]õ(õV{õõ.Mõõ	ð'àIN÷'ôTGÐ-ô GõV
 0á Ð$Ð&;Ö <ùòGs   ÂF*