+
    iHàjõµ ã            $       óâ(  a € ERm EtC0 t R t^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIHt ^ RIHtHtHtHtHtHtHtHtHt ^ RIHtHtHt ^ RIHtH t H!t!H"t"H#t# ^ RI$H%t%H&t&H't'H(t(H)t) ^ RI*H+t+ ^ RI,H-t-H.t. ^ R	I/H0t0H1t1H2t2 ^ R
I3H4t5H6t7H8t9H:t; ^ RI<H=t= ^ RI>H?t? ]'       d   ^ RI@HAtA RsB] ^ k R R ltC ! R R4      tD]D! 4       tA]PŠ                  ! 4       tF ! R R4      tGR R ltH]P’                  R 4       tJ^ RIKHLtL ^ RIMHNtNHOtO ^ RIPHQtQ ^ RIRHStSHTtT ^ RIUHVtV ^ RIWHXtX ^ RIYHZtZH[t[H\t\H]t] ^ RI^H_t_H`t`HataHbtbHctc ^ RIdHeteHftf ^ R IgHhthHitiHjtjHktkHltlHmtmHntn ]PÞ                  ! ]p4      tq]r! 4       ts] ^k ]r! 4       tt] ^k ]r! 4       tu] ^k ]r! 4       tv] ^k R! R" ltwR#sxR$R#/R% R& lltyR' R( ltz]PŠ                  ! 4       t{ ! R) R*]|4      t}R+ R, lt~R- R. lt]P’                  ERnR0 R1 ll4       t€R2 R3 lt�R4 R5 lt‚ ! R6 R74      tƒ]PŠ                  ! 4       t„]PŠ                  ! 4       t…]PŠ                  ! 4       t†]PŠ                  ! 4       t‡R8 R9 ltˆR: R; lt‰R< R= ltŠR> R? lt‹R@ RA ltŒRB RC lt�ERoRD RE lltŽRF RG lt�RH RI lt�RJt‘]P’                  RK RL l4       t’]P’                  RM 4       t“RN RO lt”]P’                  RP RQ l4       t•RR RS lt–RT RU lt—RV RW lt˜RX RY lt™R#sšRZR[R\R[R]R[R^R[R_R[/t›Rsœ] ^k R` Ra lt�Rb Rc ltž]Ÿ! 4       t ] ^k Rd Re lt¡Rf Rg lt¢Rh Ri lt£Rjt¤Rkt¥ERoRl Rm llt¦Rn Ro lt§ERoRp Rq llt¨Rr Rs lt©]r! 4       tª] ^k Rt Ru lt«ERpRv Rw llt¬ERoRxR//Ry Rz lllt­ERqt®] ^k ERrt¯] ^	k R~ R lt°R€ R� lt±R‚R#/Rƒ R„ llt²R…R{R†R‡RˆR‰RŠR‹RŒR‰R�RŽR�R�R‘R’R“R”R•R–R—R˜R™RšR›RœR�Rœ/t³] ^
k ]³t´] ^k ]µ! Rž04      t¶] ^k RŸ R  lt·R¡R¢R†R£/t¸] ^k R¤ R¥ lt¹]µ! RˆRŒ04      tº] ^k R¦R§R¨R©RªR«/t»R¬ R­ lt¼ERoR® R¯ llt½R°R±/t¾R² R³ lt¿^ R´IÀHÁtÁ R¦R§R¨R©RµR¶]Á! 4       EP„                   2/tÃ^ R·IÄHÅtÆ R¸ R¹ ltÇR#sÈ] ^k RºtÉR˜tÊR»tËR¼tÌ]V! 4       R½,          tÍ]ÍtÎR¾ tÏERstÐERttÑR¿ RÀ ltÒRÁ RÂ ltÓERuRÄ RÅ lltÔRÆ RÇ ltÕERoRÈ RÉ lltÖRÊ RË lt×ERuRÌ RÍ lltØ]µ! RÎ04      tÙRÏ RÐ ltÚRÑ RÒ ltÛRÓ RÔ ltÜRÕ RÖ ltÝR× RØ ltÞRÙtß ! RÚ RÛ4      tà ! RÜ RÝ4      tá ! RÞ Rß4      tâ ! Rà Rá4      tã ! Râ Rã4      tä]ãtå ! Rä Rå4      tæ ! Ræ Rç]ä4      tçRè Ré ltè ! Rê Rë4      té ! Rì Rí4      tê ! Rî Rï]ä4      të ! Rð Rñ4      tì ! Rò Ró4      tí ! Rô Rõ]ä4      tîRö R÷ ltïERoRø Rù lltðRú Rû ltñRü Rý ltòRþR#/Rÿ ER  lltóRþR#ERR/ER ER lltôER ER ltõER ER ltöER ER	 lt÷ER
 ER ltøER ER ltùERR#ERR#/ER ER lltúER ER ltû]r! 4       tü] ^k ER ER ltýER ER ltþER ER ltÿERvER ER llEt ERoER ER llEtERwER ER llEtER  ER! lEtER"R#/ER# ER$ llEt]EP
                  ! E]ER%R/ER&7      Et]EP
                  ! E]ER'R/R/ER(7      Et]EP
                  ! E]ER)R#ER&7      Et]EP
                  ! E]ER*R#ER&7      Et	ER+ ER, lEt
ER- ER. lEtER/ ER0 lEtRÃEs] ^k RÃEs] ^k RÃEs] ^k RÃEs] ^k RÃEs] ^k RÃEs] ^k ]EP&                  ! ER1RER27      Et] ^k ]EP&                  ! ER3RER27      Et] ^k ]P’                  ER4 ER5 l4       EtER6 EtER7 EtER8 ER9 lEtER: ER; lEtER'RER<R/ER= ER> llEtER'RER<RER?R/ER@ ERA llEtER'RER<RER?R/ERB ERC llEtER'RER<R/ERD ERE llEtERxEs] ^k ]EP@                  ! 4       Et!ERF ERG lEt"ERH ERI lEt#ERJ ERK lEt$ERLRÃER*RÃER)RÃER<RÃERMRÃERNRÃERORÃ/ERP ERQ llEt%ERR ERS lEt&]P’                  ERT ERU l4       Et'ERV ERW lEt(ERX ERY lEt)ERZ ER[ lEt*ER\ ER] lEt+ER^ ER_ lEt,ER` ERa lEt-ERb ERc lEt.ERd ERe lEt/ERf ERg lEt0ER%RERhRERiRER<R/ERj ERk llEt1ERpERl ERm llEt2ERyEt3E]3ERz,           Et4ERn ERo lEt5ERp ERq lEt6ERrEt7/ Et8] ^k / Et9] ^k / Et:] ^k ERsERsERtERtR[ERuERuERuERvERvR}ERv/Et;ERw ERx lEt<ERyEt=ERoER*RR|E]=ERz]EP|                  /ER{ ER| lllEt?ERoER} ER~ llEt@ERoER*R/ER ER€ lllEtAER� ER‚ lEtBERƒ ER„ lEtC]%ER{,           EtDER… ER† lEtEER‡ ERˆ lEtFER|EtGER}EtHERŠ ER‹ lEtIERŒ ER� lEtJERŽ ER� lEtKER� ER‘ lEtLER’ ER“ lEtMER” ER• lEtN^EtOER–EtPER— ER˜ lEtQER™ ERš lEtRER› ERœ lEtSER� ERž lEtTERŸ ER  lEtUER¡ ER¢ lEtVER£ ER¤ lEtWER¥ ER¦ lEtXER§ ER¨ lEtYER© ERª lEtZER« ER¬ lEt[]µ! 0 ER~m4      Et\ER­ ER® lEt]ER¯ ER° lEt^ER± ER² lEt_ERoER³ ER´ llEt`ERµR/ER¶ ER· llEtaEREtbER€EtcERº ER» lEtdERoER¼ ER½ llEteER¾RÃ/ER¿ ERÀ llEtfERÁR/ERÂ ERÃ llEtgERÄ ERÅ lEthERÆ ERÇ lEtiERÈ ERÉ lEtjERÊ ERË lEtkERÌ ERÍ lEtlERÎ ERÏ lEtmERuERÐ ERÑ llEtnERÒ ERÓ lEtoERÔ ERÕ lEtpER¸E]kERvE]lERtE]mR�E]nER¹E]oERÖE]p/Etq] ^k ER¾RÃ/ER× ERØ llEtrERuERÙ ERÚ llEtsERÛ ERÜ lEttERÝ ERÞ lEtuERß ERà lEtvERá ERâ lEtw ! ERã ERä]4      EtxERå ERæ lEtyERç ERè lEtzERé ERê lEt{ERë ERì lEt|ERí ERî lEt}ERï ERð lEt~ER*RÃERñRÃR|R/ERò ERó llEtER¾RÃ/ERô ERõ llEt€ERö ER÷ lEt�ERø ERù lEt‚ER�ERûRÃERüRERµR/ERý ERþ lllEtƒERûRÃERüR/ERÿ ER  llEt„ER‚ER ER llEt…ER ER lEt†ERƒER ER llEt‡ERR#/ER ER	 llEtˆER„ERûRÃERüR/ER
 ER lllEt‰ER ER lEtŠER ER lEt‹ER ER lEtŒER…ERRERûRÃERüR/ER ER lllEt�ER ER lEtŽER ER lEt�ER ER lEt�ERoER ER llEt‘ER ER lEt’ERpER ER  llEt“ER! ER" lEt”ERwER# ER$ llEt•ER% ER& lEt–ER' ER( lEt—ER) ER* lEt˜ER+ ER, lEt™ ! ER- ER.]4      EtšE]›]],          ]E]œ,          3,          Et�ER/ ER0 lEtžER1 ER2 lEtŸER3 ER4 lEt ERƒER5 ER6 llEt¡ER7 ER8 lEt¢ER9 ER: lEt£ER; ER< lEt¤ER= ER> lEt¥ER? ER@ lEt¦ERA ERB lEt§ERC ERD lEt¨ERE ERF lEt©ERG ERH lEtªERoERI ERJ llEt«ERK ERL lEt¬ERM ERN lEt­ERO ERP lEt®ERQ ERR lEt¯ERS ERT lEt°ERU ERV lEt±ERWE]¥ERsE]¦ERtE]§ERvE]¨ER¹E]©R[E]ª/Et²] ^k ER†ERX ERY llEt³ERuERµR/ERZ ER[ lllEt´ER‡EtµER] ER^ lEt¶ER_ ER` lEt·ERa ERb lEt¸ER¸ERc ERsERd ERtERe ERvERf R�ERg ER\E]¸R[ERh /Et¹] ^k ERoERi ERj llEtºERk ERl lEt»ERm ERn lEt¼ERo ERp lEt½ERq ERr lEt¾ERˆEt¿ERpER*RER)RR$R#ERµR/ERs ERt lllEtÀERu ERv lEtÁER%R/ERw ERx llEtÂ/ EtÃ] ^ k ]EP@                  ! 4       EtÄ^@EtÅ ! ERy ERz4      EtÆER{ ER| lEtÇER*RER)RER<RERµRERR#ER}RER%R/ER~ ER llEtÈER€ ER� lEtÉER‚ ERƒ lEtÊER„R/ER… ER† llEtËER*RER)RER<RERµRERR#ER‡RERˆR/ER‰ ERŠ llEtÌER‹ ERŒ lEtÍER� ERŽ lEtÎER� ER� lEtÏER‘R#/ER’ ER“ llEtÐER” ER• lEtÑER– ER— lEtÒER˜ ER™ lEtÓER‰ERš ER› llEtÔERœ ER� lEtÕERž ERŸ lEtÖER  ER¡ lEt×ER¢ ER£ lEtØERŠER¤ ER¥ llEtÙER¦EtÚER§EtÛ^ ER¨EIÜEHÝEtÝ  ! ER© ERª]4      EtÞER« ER¬ lEtßERLRER­RER®R/ER¯ ER° llEtàER± ER² lEtáER³ ER´ lEtâERµ ER¶ lEtãE]Ú3ER· ER¸ llEtäER¹ ERº lEtåER» ER¼ lEtæER½ ER¾ lEtç/ Etè] ^!k / Eté] ^"k ]EP@                  ! 4       EtêER¿ ERÀ lEtëERÁ ERÂ lEtìERÃ ERÄ lEtíERÅ ERÆ lEtîERÇ ERÈ lEtï]µ! 0 ER‹m4      EtðERÉ ERÊ lEtñERËERŒERÌER�/EtòERÍ ERÎ lEtó0 ERŽmEtôERÏ ERÐ lEtõ]µ! 0 ER�m4      EtöERÑ ERÒ lEt÷0 ER�mEtø0 ER‘mEtùERÓ ERÔ lEtúERÕ ERÖ lEtûER× ERØ lEtü ! ERÙ ERÚ]4      EtýERÛ ERÜ lEtþERÝ ERÞ lEtÿERß ERà lEt ER’ERá ERâ llEtERvERã ERä llEtERåERæERçR/ERè ERé llEtERê ERë lEtERì ERí lEtERoERî ERï llEtERð ERñ lEtERò ERó lEtERôEt	ERõEt
ERö ER÷ lEtERø ERù lEtERú ERû lEt]
EP                  ! ERü]
EP                  4      EtERýEt^@EtERþ ERÿ lEtERoER R#/ER ER lllEtERoER ER llEtERoER R#/ER ER lllEtER%RÃERRERR/ER	 ER
 llEtER“Et ! ER ER4      EtER%RÃERR/ER ER llEtERoER ER llEtER ER lEtERoER R#/ER ER lllEt ! ER ER]4      EtER ER lEt ! ER ER]4      Et ER ER lEt! ! ER ER]4      Et"E]RER3E]EERú3E]JER‰3E]YER 3E]ZER!3E][ER"3E]KER#3E]LER$33Et#] ^#k ER% ER& lEt$ER' ER( lEt%ER) ER* lEt& ! ER+ ER,]4      Et'ER- ER. lEt(ER/ ER0 lEt)ER1 ER2 lEt*ER3 ER4 lEt+ER5 ER6 lEt,ER7 ER8 lEt-ER9 ER: lEt.ER; ER< lEt/ER=R#/ER> ER? llEt0ER@ ERA lEt1ERB ERC lEt2ERD ERE lEt3ERF ERG lEt4ERoERH ERI llEt5ERJ ERK lEt6E]ERoER'RER%RER*RER)RERµRERLRERMRERNRERORERPRERQRERÁRER<RERRR#ERSRERTRERUR/ERV ERW lll4       Et7ERX ERY lEt8ERZ ER[ lEt9ER\ ER] lEt:ER^ ER_ lEt;ER` ERa lEt<ERoER'RER%RER*RER)RERµRERLRERMRERNRERORERPRERQRERÁRER<RERRR#ERSRERTR/ERb ERc lllEt=ERd Et>ERe Et?ERfR/ERg ERh llEt@E]ERoER'RER%RER*RER)RERµRERLRERMRERNRERORERPRERQRERTR/ERi ERj lll4       EtAERoER'RER%RER*RER)RERµRERLRERMRERNRERORERPRERQRERTR/ERk ERl lllEtBR# (”  uV  Shared auxiliary client router for side tasks (compression, search, vision, ...).

Text auto chain: main provider+model â†’ OpenRouter â†’ Nous Portal â†’ custom endpoint â†’
native Anthropic â†’ direct API-key providers â†’ None. Vision auto chain: main
provider (if a supported vision backend) â†’ OpenRouter â†’ Nous â†’ Anthropic â†’ custom.
``auxiliary.free_only`` restricts the OpenRouter lane to ``:free`` SKUs. Codex OAuth is
in neither chain (undocumented, shifting allow-list): main provider or explicit
``auxiliary.<task>.provider`` only. HTTP 402 in call_llm() falls through the chain.
N)ÚSimpleNamespace)	ÚAnyÚCallableÚDictÚListÚ
NamedTupleÚOptionalÚTupleÚTYPE_CHECKINGÚUnion)ÚurlparseÚparse_qsÚ
urlunparse)ÚPromptReadingClockÚcurrent_prompt_reading_hookÚprompt_progressÚprompt_reading_hookÚwith_prompt_progress)Ú_BILLING_PATTERNSÚ_OVERLOADED_PATTERNSÚUNSUPPORTED_PARAM_MARKERSÚis_reasoning_field_rejectionÚis_reasoning_required_rejection)Ú_is_managed_local_endpoint)Úremember_reasoning_floorÚwith_reasoning_floor)Ú
_route_keyÚ!_without_structured_output_formatÚ$remember_structured_output_rejection)ÚCODEX_AUX_BASE_URLÚapply_required_codex_headersÚcodex_cloudflare_headersÚis_official_codex_base_url)Ú_codex_event_has_content)Ú!bypass_chat_sdk_request_transform©ÚOpenAIc                ó$   € V ^8„  d   QhR\         /# ©é   Úreturn)Útype)Úformats   "Ú;/home/ubuntu/.hermes/hermes-agent/agent/auxiliary_client.pyÚ__annotate__r.   9   s   € ÷ ñ œ$ñ ó    c                 ó.   € \         f	   ^ RIHp  V s \         # )z#Import and cache ``openai.OpenAI``.r%   )Ú_OPENAI_CLS_CACHEÚopenair&   )Ú_clss    r-   Ú_load_openai_clsr4   9   s   € ô Ò Ý)Ø ÐÜÐr/   c                   ó:   a € ] tR t^Bt o RtRtR tR tR tRt	V t
R# )Ú_OpenAIProxyzbLazy stand-in for ``openai.OpenAI``: forwards calls and isinstance checks, importing on first use.c                ó"   € \        4       ! V/ VB # ©N)r4   )ÚselfÚargsÚkwargss   &*,r-   Ú__call__Ú_OpenAIProxy.__call__F   s   € ÜÔ! 4Ð2¨6Ñ2Ð2r/   c                ó*   € \        V\        4       4      # r8   )Ú
isinstancer4   )r9   Úobjs   &&r-   Ú__instancecheck__Ú_OpenAIProxy.__instancecheck__I   s   € Ü˜#Ô/Ó1Ó2Ð2r/   c                ó   € R # )z<lazy openai.OpenAI proxy>© ©r9   s   &r-   Ú__repr__Ú_OpenAIProxy.__repr__L   s   € Ù+r/   rD   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú	__slots__r<   rA   rF   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r-   r6   r6   B   s!   ø‡ € ÙlØ€Iò3ò3÷,ð ,r/   r6   c                   ób   a € ] tR t^Yt o RtR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t	V t
R	# )Ú_AuxProbeClientStubzENon-functional placeholder returned while `aux_probe_mode` is active.c                ó*   <€ V ^8„  d   QhRS[ RS[ RR/# )r)   Úapi_keyÚbase_urlr*   N©Ústr)r,   rQ   s   "€r-   r.   Ú _AuxProbeClientStub.__annotate__]   s"   ø€ ÷ !ñ !¡ð !±Cð !Àñ !r/   c                ó   € Wn         W n        R # r8   ©rU   rV   )r9   rU   rV   s   &&&r-   Ú__init__Ú_AuxProbeClientStub.__init__]   s   € ØŒØ Žr/   c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r)   Únamer*   ©rX   r   )r,   rQ   s   "€r-   r.   rY   a   s   ø€ ÷ >ñ >¡ð >©ñ >r/   c                ó"   € \        R V: R24      h)z5_AuxProbeClientStub used as a real client (attribute z1); aux_probe_mode is for availability checks only)ÚRuntimeError)r9   r`   s   &&r-   Ú__getattr__Ú_AuxProbeClientStub.__getattr__a   s!   € äØCÀDÁ8ð L=ð =ó>ð 	>r/   c                ó    <€ V ^8„  d   QhRS[ /# r(   rW   )r,   rQ   s   "€r-   r.   rY   g   s   ø€ ÷ 6ñ 6™#ñ 6r/   c                ó   € R # )z$<aux availability-probe client stub>rD   rE   s   &r-   rF   Ú_AuxProbeClientStub.__repr__g   s   € Ù5r/   r[   N©Ú rj   )rH   rI   rJ   rK   rL   rM   r\   rd   rF   rN   rO   rP   s   @r-   rS   rS   Y   s+   ø‡ € ÙOØ'€I÷!ò !÷>ð >÷6ö 6r/   rS   c                ó$   € V ^8„  d   QhR\         /# r(   ©Úbool)r,   s   "r-   r.   r.   k   s   € ÷ <ñ <œ4ñ <r/   c                  ó6   € \        \        \        R R4      4      # ©ÚactiveF)rm   ÚgetattrÚ_aux_probe_staterD   r/   r-   Ú_aux_probe_activers   k   s   € Ü”Ô(¨(°EÓ:Ó;Ð;r/   c               #  ó†   "  € \        \        RR4      p R\        n         Rx € V \        n        R#   T \        n        i ; i5i)zDResolve provider availability without constructing real SDK clients.rp   FTN)rq   rr   rp   )Úprevs    r-   Úaux_probe_moderv   o   s9   é € ô Ô# X¨uÓ5€DØ"ÔÔð'Ûà"&ÔÖø $ÔÕüs   ‚A 1 ¤A±>¾A)Ú	load_pool)Úentry_scoped_poolÚpool_for_aux_provider)Údata_use_requirement)ÚMINIMUM_CONTEXT_LENGTHÚget_model_context_length)Úget_hermes_home)Ú_canonical_api_mode)Ú_custom_health_base_urlÚ_unhealthy_cache_keyÚ!fallback_candidate_quarantine_ttlÚ%fallback_candidate_unavailable_reason)ÚAuxiliaryClientUnavailableÚclear_nous_credential_failureÚ$missing_provider_credentials_messageÚnous_credential_failure_detailÚrecord_nous_credential_failure)ÚOPENROUTER_BASE_URLÚhermes_home_key)Úbase_url_host_matchesÚbase_url_hostnameÚbase_url_originÚ	env_floatÚis_truthy_valueÚ"model_forces_max_completion_tokensÚnormalize_proxy_env_varsc                óF   € V ^8„  d   QhR\         \        ,          R\        /# ©r)   rV   r*   )r   rX   r   )r,   s   "r-   r.   r.   •   s   € ÷ 
ñ 
¤(¬3¥-ð 
´Cñ 
r/   c                ó   €  ^ RI Hp ^ RIHpHp T! \        T ;'       g    R4      V! 4       R7      pT! VP                  R4      VP                  R4      \        T ;'       g    R4      R7      #   \         d     R# i ; i)	u¸   httpx ``verify`` for an aux base_url, mirroring the main client (per-provider ``ssl_ca_cert`` /
``ssl_verify``; otherwise the OS trust store); any failure â†’ httpx default (``True``).)Úresolve_httpx_verify)Ú get_custom_provider_tls_settingsÚload_config_readonlyrj   ©ÚconfigÚssl_ca_certÚ
ssl_verify)Ú	ca_bundlerš   rV   T)Úagent.ssl_verifyr”   Úhermes_cli.configr•   r–   rX   ÚgetÚ	Exception)rV   r”   r•   r–   Útlss   &    r-   Ú_resolve_aux_verifyr¡   •   sr   € ðÝ9ß\Ù.¬s°8·>°>¸rÓ/BÑK_ÓKaÔbˆÙ#Ø—g‘g˜mÓ,¸¿¹ÀÓ9NÔY\Ð]e×]kÐ]kÐikÓYlônð 	nøäô Úðús   ‚A.  AA. Á"A. Á.A=Á<A=FÚ
async_modec                ót   € V ^8„  d   QhR\         \        ,          R\        R\        \        \        3,          /# )r)   rV   r¢   r*   )r   rX   rm   Údictr   )r,   s   "r-   r.   r.   ¥   s7   € ÷ Añ A¬´#­ð AÄtð AÔX\Ô]`ÔbeÐ]eÕXfñ Ar/   c               óê   €  ^ RI Hp T! \        T ;'       g    R4      V\        V 4      R7      pVe   RV/# / #   \        \
        3 d)    \        '       g   Rs\        P                  R4       Rp LBi ; i)zKInject keepalive httpx client with env-only proxy (not macOS system proxy).)Úbuild_keepalive_http_clientrj   )r¢   ÚverifyTuä   agent.process_bootstrap.build_keepalive_http_client is unavailable â€” mixed/stale install detected (#64333). Falling back to the SDK default HTTP client. Run `hermes update` (or reinstall the Desktop app) to resync the runtime.NÚhttp_client)	Úagent.process_bootstrapr¦   rX   r¡   ÚImportErrorÚAttributeErrorÚ_WARNED_KEEPALIVE_IMPORT_SKEWÚloggerÚwarning)rV   r¢   r¦   Úclients   &$  r-   Ú_openai_http_client_kwargsr°   ¥   sƒ   € ðÝGÙ,Ü�—�˜BÓ¨JÔ?RÐS[Ó?\ô^ˆð '-Ò&8ˆM˜6Ð"Ð@¸bÐ@øô œÐ(ô ÷ -Ó,Ø,0Ð)Ü�N‰NðDôEð
 Šðús   ‚9 ˜9 ¹A2ÁA2Á1A2c                óH   € V ^8„  d   QhR\         R\         R\        R\        /# )r)   rU   rV   r;   r*   ra   )r,   s   "r-   r.   r.   º   s.   € ÷ @ñ @¤cð @´Sð @ÄCð @ÌCñ @r/   c                 ó´   € \        4       '       d   \        WR 7      # / \        V4      CVCp\        W VR7       VP	                  R^ 4       \        RRV RV/VB # )r[   ©Úaccess_tokenrV   Úmax_retriesrU   rV   rD   )rs   rS   r°   Ú_apply_required_codex_headersÚ
setdefaultr&   )rU   rV   r;   s   $$,r-   Ú_create_openai_clientr¸   º   s_   € Ü×Òä"¨7ÔFÐFØ?Ô*¨8Ó4Ð?¸Ð?€FÜ! &ÈÕRð ×Ñ�m QÔ'ÜÑ?˜'Ð?¨HÐ?¸Ñ?Ð?r/   c                   óF   a a€ ] tR t^Ùt oRtRtV3R lV 3R lltRtVtV ;t	# )ÚAuxiliaryExplicitCancellationa%  Frozen signal that an auxiliary attempt was explicitly hard-cancelled. ``BaseException`` so broad
``except Exception`` retry/fallback code never treats a host stop as a transport failure; ``cause``
is immutable class data so nothing re-queries a mutable host Event after the transport unwound.Úexplicit_host_cancelc                ó   <€ V ^8„  d   QhRR/# ©r)   r*   NrD   )r,   rQ   s   "€r-   r.   Ú*AuxiliaryExplicitCancellation.__annotate__ß   s   ø€ ÷ Kñ K˜$ñ Kr/   c                ó&   <€ \         SV `  R 4       R# )z.auxiliary request explicitly cancelled by hostN)Úsuperr\   )r9   Ú	__class__s   &€r-   r\   Ú&AuxiliaryExplicitCancellation.__init__ß   s   ø€ Ü‰ÑÐIÖJr/   rD   )
rH   rI   rJ   rK   rL   Úcauser\   rN   rO   Ú__classcell__)rÁ   rQ   s   @@r-   rº   rº   Ù   s$   ù‡ € ñgð #€E÷K÷ Kó Kr/   rº   c                ó$   € V ^8„  d   QhR\         /# r(   rl   )r,   s   "r-   r.   r.   ã   s   € ÷ Eñ E¤$ñ Er/   c                  ó6   € \        \        \        R R4      4      # ro   )rm   rq   Ú_aux_interrupt_protectionrD   r/   r-   Ú_aux_interrupt_protectedrÈ   ã   s   € Ü”Ô1°8¸UÓCÓDÐDr/   c                ó$   € V ^8„  d   QhR\         /# r(   rl   )r,   s   "r-   r.   r.   ç   s   € ÷ Qñ Q¬ñ Qr/   c                 ó8   € \        4       p V e   \        V 4      # R# )z@Return whether an explicit host cancel overrides aux protection.F)Ú_capture_aux_cancel_checkÚ_captured_aux_cancel_requested)Úchecks    r-   Ú_aux_interrupt_cancel_requestedrÎ   ç   s    € ä%Ó'€EØ49Ò4EÔ)¨%Ó0ÐPÈ5ÐPr/   Tc                ó$   € V ^8„  d   QhR\         /# )r)   rp   rl   )r,   s   "r-   r.   r.   î   s   € ÷ Cñ C¤Tñ Cr/   c              #  ó°  "  € \        \        RR4      p\        \        RR4      p\        \        RR4      pV \        n        \        V4      '       d   V\        n        Ve(   \        \        VRR4      4      '       d   V\        n         Rx € V\        n        V\        n        V\        n        R#   T\        n        T\        n        T\        n        i ; i5i)zÀMark this thread's aux LLM call interrupt-protected (re-entrant-safe). ``cancel_check`` /
``cancel_event`` keep an explicit host hard-cancel path (Event preferred); nested scopes inherit both.rp   FÚcancel_checkNÚcancel_eventÚis_set)rq   rÇ   rp   ÚcallablerÑ   rÒ   )rp   rÑ   rÒ   ru   Úprev_cancel_checkÚprev_cancel_events   &&&   r-   Úaux_interrupt_protectionr×   í   s·   é € ô Ô,¨h¸Ó>€DÜÔ 9¸>È4ÓPÐÜÔ 9¸>È4ÓPÐØ'-ÔÔ$Ü�×ÒØ1=Ô!Ô.ØÒ¤H¬W°\À8ÈTÓ-R×$SÒ$SØ1=Ô!Ô.ðCÛà+/Ô!Ô(Ø1BÔ!Ô.Ø1BÔ!Ö.øð ,0Ô!Ô(Ø1BÔ!Ô.Ø1BÔ!Õ.üs   ‚BCÂ	B0 Â#CÂ0#CÃCc                óT   € V ^8„  d   QhR\         \        . \        3,          ,          /# r(   )r   r   r   )r,   s   "r-   r.   r.     s!   € ÷ .ñ .¤8¬H°R¼°WÕ,=Õ#>ñ .r/   c                 ó¬   € \        \        \        RR4      RR4      p \        V 4      '       d   V # \        \        RR4      p\        V4      '       d   V# R# )zHCapture the current explicit-cancel source on the owning request thread.rÒ   NrÓ   rÑ   )rq   rÇ   rÔ   )rÓ   rÍ   s     r-   rË   rË     sM   € ä”WÔ6¸ÈÓMÈxÐY]Ó^€FÜ�×ÒØˆäÔ-¨~¸tÓD€EÜ˜U—O’Oˆ5Ð-¨Ð-r/   c                óJ   € V ^8„  d   QhR\         . \        3,          R\        /# )r)   rÑ   r*   )r   r   rm   )r,   s   "r-   r.   r.     s#   € ÷ ñ ´¸"¼c¸'Õ1Bð Ätñ r/   c                óv   €  \        V ! 4       4      #   \         d    \        P                  RRR7        R# i ; i)zGRead a request-thread cancellation source without leaking its failures.z captured aux cancel check failedT©Úexc_infoF)rm   rŸ   r­   Údebug©rÑ   s   &r-   rÌ   rÌ     s7   € ðÜ‘L“NÓ#Ð#øÜô Ü�‰Ð7À$ˆÔGÚðús   ‚ ’"8·8c                   óZ   a € ] tR tRt o RtV 3R lR ltV 3R lR ltV 3R lR ltR	tV t	R
# )Ú_AuxiliaryCancellationDecisioni  zHAtomically choose explicit cancellation or provider timeout per attempt.c                ó8   <€ V ^8„  d   QhRS[ . S[3,          RR/# )r)   Úsource_cancel_checkr*   N©r   r   )r,   rQ   s   "€r-   r.   Ú+_AuxiliaryCancellationDecision.__annotate__  s$   ø€ ÷ !ñ !©H°R¹°WÕ,=ð !À$ñ !r/   c                óT   € Wn         \        P                  ! 4       V n        R V n        R# )rp   N)Ú_source_cancel_checkÚ	threadingÚLockÚ_lockÚ_outcome)r9   rã   s   &&r-   r\   Ú'_AuxiliaryCancellationDecision.__init__  s   € Ø$7Ô!Ü—^’^Ó%ˆŒ
Ø ˆŽr/   c                ó    <€ V ^8„  d   QhRS[ /# r(   rl   )r,   rQ   s   "€r-   r.   rå     s   ø€ ÷ 0ñ 0™$ñ 0r/   c                óì   € V P                   ;_uu_ 4        V P                  R 8X  d#   \        V P                  4      '       d   RV n        V P                  R8H  uuRRR4       #   + '       g   i     R# ; i)rp   Ú	cancelledN©rê   rë   rÌ   rç   rE   s   &r-   r<   Ú'_AuxiliaryCancellationDecision.__call__  sG   € Ø�Z�Z‹ZØ�}‰} Ô(Ô-KÈD×LeÑLe×-fÒ-fØ +�”Ø—=‘= KÑ/÷ �Z�Z‹Zús   •AA"Á"A3	c                ó    <€ V ^8„  d   QhRS[ /# r(   rl   )r,   rQ   s   "€r-   r.   rå   "  s   ø€ ÷ 0ñ 0¡tñ 0r/   c                óô   € V P                   ;_uu_ 4        V P                  R8X  d'   \        V P                  4      pV'       d   RMRV n        V P                  R8H  uuRRR4       #   + '       g   i     R# ; i)z@Return whether timeout won and destructive cleanup is permitted.rp   rï   Ú	timed_outNrð   )r9   rï   s   & r-   Úbegin_timeout_cleanupÚ4_AuxiliaryCancellationDecision.begin_timeout_cleanup"  sJ   € à�Z�Z‹ZØ�}‰} Ô(Ü:¸4×;TÑ;TÓU�	ß/8¡¸k�”Ø—=‘= KÑ/÷	 �Z�Z‹Zús   •AA&Á&A7	)rê   rë   rç   N)
rH   rI   rJ   rK   rL   r\   r<   rõ   rN   rO   rP   s   @r-   rá   rá     s&   ø‡ € ÙR÷!ð !÷
0ð 0÷0ö 0r/   rá   c                óH   € V ^8„  d   QhR\         P                  R\        RR/# )r)   ÚlocalÚlabelr*   N)rè   rø   rX   )r,   s   "r-   r.   r.   >  s*   € ÷ Añ A”i—o‘oð A¬cð A°dñ Ar/   c                ó�   € \        V RR4      pVf   R#  V! 4        R#   \         d    \        P                  RTRR7        R# i ; i)zHCall the thread-local hook installed on ``local``, if any. Never raises.ÚhookNzaux %s hook failedTrÜ   )rq   rŸ   r­   rÞ   )rø   rù   rû   s   && r-   Ú
_tick_hookrü   >  sG   € ä�5˜& $Ó'€DØ‚|ÙðAÙŽøÜô AÜ�‰Ð)¨5¸4ˆ×@ðAús   • ž#AÁAc                ó   € V ^8„  d   QhRR/# r½   rD   )r,   s   "r-   r.   r.   I  ó   € ÷ *ñ *˜dñ *r/   c                 ó&   € \        \        R4       R# )z1Tick the installed forward-progress hook, if any.ÚprogressN)rü   Ú_aux_progressrD   r/   r-   Ú_notify_aux_progressr  I  ó   € äŒ}˜jÖ)r/   c                ó   € V ^8„  d   QhRR/# r½   rD   )r,   s   "r-   r.   r.   N  rþ   r/   c                 ó&   € \        \        R4       R# )zFRecord an actual provider dispatch without claiming response progress.ÚdispatchN)rü   Ú_aux_dispatchrD   r/   r-   Ú_notify_aux_dispatchr  N  r  r/   c                ó   € V ^8„  d   QhRR/# r½   rD   )r,   s   "r-   r.   r.   S  s   € ÷ <ñ < Tñ <r/   c                 ó&   € \        \        R4       R# )z“Record a content-free frame (keepalive/empty delta): counts toward
``time_to_first_progress_ms`` but must not reset a compression inactivity fence.zprovider responseN)rü   Ú_aux_provider_responserD   r/   r-   Ú_notify_aux_timing_responser  S  s   € ô Ô%Ð':Ö;r/   c                ó   € V ^8„  d   QhRR/# r½   rD   )r,   s   "r-   r.   r.   Y  s   € ÷ ñ  tñ r/   c                 ó.   € \        4        \        4        R# )zDRecord a provider response/chunk, then preserve the liveness signal.N)r  r  rD   r/   r-   Ú_notify_aux_provider_responser  Y  s   € äÔ!ÜÖr/   c                ó$   € V ^8„  d   QhR\         /# r(   rl   )r,   s   "r-   r.   r.   _  s   € ÷ <ñ <œdñ <r/   c                  ó(   € \        \        R R4      RJ# )rû   N)rq   r  rD   r/   r-   Ú_aux_progress_activer  _  s   € Ü”= &¨$Ó/°tÐ;Ð;r/   c                óH   € V ^8„  d   QhR\         R\        R\         R\         /# )r)   r@   ÚkeyÚdefaultr*   ©r   rX   )r,   s   "r-   r.   r.   c  s(   € ÷ +ñ +”ð +œ#ð +¬ð +´sñ +r/   c                óx   € \        V \        4      '       d   V P                  V4      M\        WR4      pVf   V# T# )zOField access for wire objects that may be dicts or SDK/SimpleNamespace objects.N©r?   r¤   rž   rq   )r@   r  r  Úvals   &&& r-   Ú_fieldr  c  s3   € ä$ S¬$×/Ò/ˆ#�'‰'�#Œ,´W¸SÀtÓ5L€CØ’kˆ7Ð* sÐ*r/   c                ó0   € V ^8„  d   QhR\         R\        /# )r)   Úeventr*   ©r   rm   )r,   s   "r-   r.   r.   i  s   € ÷ 	ñ 	¬ð 	´ñ 	r/   c                ó„  aa€ \        V R4      pVR8X  dG   \        V R4      o\        ;QJ d    V3R lR 4       F  '       g   K   R# 	  R# ! V3R lR 4       4      # VR8X  d^   \        V R4      o\        SR4      R	8H  ;'       d;    \        ;QJ d    V3R
 lR 4       F  '       g   K   R# 	  R# ! V3R
 lR 4       4      # R# )z>Whether an Anthropic stream event carries a non-empty payload.r+   Úcontent_block_deltaÚdeltac              3   óN   <"  € T F  p\        \        SV4      4      x € K  	  R # 5ir8   ©rm   r  )Ú.0Úfr   s   & €r-   Ú	<genexpr>Ú/_anthropic_event_has_content.<locals>.<genexpr>n  s"   øé € ÐqÑ3p¨a”4œ˜u aÓ(×)Ð)Ó3pùó   ƒ"%TFÚcontent_block_startÚcontent_blockÚtool_usec              3   óN   <"  € T F  p\        \        SV4      4      x € K  	  R # 5ir8   r"  )r#  r$  Úblocks   & €r-   r%  r&  q  s#   øé € Ð:jÑ[iÐVW¼4ÄÀuÈaÓ@P×;QÐ;QÓ[iùr'  )ÚtextÚthinkingÚpartial_jsonÚ	signatureÚcitation)Úidr`   )r  Úany)r  Ú
event_typer,  r   s   & @@r-   Ú_anthropic_event_has_contentr5  i  s¦   ù€ ä˜˜vÓ&€JØÐ*Ô*Ü�u˜gÓ&ˆß‹sÔqÑ3pÓq�sŒsÐqŠsÐqˆsÔqÑ3pÓqÓqÐqØÐ*Ô*Ü�u˜oÓ.ˆÜ�e˜VÓ$¨
Ñ2×jÐj·s³sÔ:jÑ[iÓ:j·s´sÐj²sÐj°sÔ:jÑ[iÓ:jÓ7jÐjÙr/   c                ó@   € V ^8„  d   QhR\         \        .R3,          /# r½   rä   )r,   s   "r-   r.   r.   u  s   € ÷ ñ ¬(´C°5¸$°;Õ*?ñ r/   c                 ó\   aa€ \        4       o\        P                  ! 4       oR VV3R llp V # )a  Per-event callback for the Anthropic aux wire: progress only for substantive payloads
(keepalives must not keep a stalled summary alive), stop at the host deadline or explicit
cancel. The ``TimeoutError`` text must say "timed out" so ``_is_timeout_error`` classifies it.c                ó(   € V ^8„  d   QhR\         RR/# )r)   r  r*   N©r   )r,   s   "r-   r.   Ú6_anthropic_aux_stream_event_hook.<locals>.__annotate__|  s   € ÷ 
jñ 
jœð 
j ñ 
jr/   c                 ó  <€ \        V 4      '       d   \        4        M
\        4        \        4       '       d   \	        4       hSeG   \
        P                  ! 4       S8¼  d+   \        R\
        P                  ! 4       S,
          R R24      hR # R # )NzLAnthropic auxiliary stream timed out at the host compression deadline after ú.0fz&s (the caller already stopped waiting))r5  r  r  rÎ   rº   ÚtimeÚ	monotonicÚTimeoutError)r  Úhost_deadlineÚstarteds   &€€r-   Ú	_on_eventÚ3_anthropic_aux_stream_event_hook.<locals>._on_event|  sz   ø€ Ü'¨×.Ò.Ü)Õ+ä'Ô)Ü*×,Ò,Ü/Ó1Ð1ØÒ$¬¯ªÓ)9¸]Ô)JÜð"Ü"&§.¢.Ó"2°WÕ"<¸SÐ!AÐAgðiójð jñ *KÑ$r/   )Ú_current_aux_stream_deadliner=  r>  )rB  r@  rA  s    @@r-   Ú _anthropic_aux_stream_event_hookrE  u  s-   ù€ ô 1Ó2€MÜ�nŠnÓ€G÷
jñ 
jð Ðr/   ç      N@c                ó8   € V ^8„  d   QhR\         P                  /# )r)   rø   )rè   rø   )r,   s   "r-   r.   r.   ‘  s   € ÷ ñ ¤)§/¡/ñ r/   c              #  óˆ   "  € \        V RR4      p\        V4      '       d   TMTV n         Rx € W n        R#   Y n        i ; i5i)zXInstall one thread-local hook, restoring the prior on exit (non-callable = passthrough).rû   N)rq   rÔ   rû   )rø   rû   Úpreviouss   && r-   Ú_aux_thread_local_hookrJ  �  s8   é € ô �u˜f dÓ+€HÜ! $Ÿš‘¨X€E„JðÛàŽ
ø�X�
üs   ‚(A«7 ¯A·?¿Ac              #  ó€   "  € \        \        V 4      ;_uu_ 4        Rx € RRR4       R#   + '       g   i     R# ; i5i)zZInstall *hook* as the current thread's aux forward-progress callback (None = passthrough).N)rJ  r  )rû   s   &r-   Úaux_progress_hookrL  ›  s%   é € ô 
 ¤¨t×	4Õ	4Û÷ 
5×	4×	4Ò	4üs   ‚>›* 
>ª;	µ	>c                ó:   € V ^8„  d   QhR\         \        ,          /# r(   ©r   Úfloat)r,   s   "r-   r.   r.   ¢  s   € ÷ 1ñ 1¤h¬u¥oñ 1r/   c                 óX   € \        \        RR4      p \        V 4      '       d   V ! 4       # T # )z`The waiting host's absolute monotonic deadline, if one is installed (read live from a callable).ÚvalueN)rq   Ú_aux_stream_deadlinerÔ   ©rQ  s    r-   rD  rD  ¢  s&   € äÔ(¨'°4Ó8€EÜ˜u—o’o‰5‹7Ð0¨5Ð0r/   c                óp   € V ^8„  d   QhR\         \        . \         R,          3,          ,          R,          /# )r)   ÚdeadlineN)rO  r   )r,   s   "r-   r.   r.   ©  s+   € ÷ .ñ .¤%¬(°2´u¸tµ|Ð3CÕ*DÕ"DÀtÕ"Kñ .r/   c              #  óä   "  € \        \        RR4      p\        V \        \        34      '       g   \        V 4      '       d   T MT\        n         Rx € V\        n        R#   T\        n        i ; i5i)u  Publish the host's absolute ``time.monotonic()`` deadline to the stream consumer.

``None`` is a passthrough; re-entrant-safe. Host->worker return leg of the progress hook:
without it the isolated provider daemon streams to its own ceiling after the host stopped
waiting, billing a summary the commit fence refuses.

``8207862212`` releases the compression OWNER when the fence is cancelled, but the isolated provider
daemon (:func:`_run_protected_sync_provider_call`) that holds the socket keeps streaming to its own
``_aux_stream_total_ceiling`` budget â€” >= the host's ceiling by construction â€” billing an abandoned
summary the commit fence is already guaranteed to refuse, and stacking one fresh orphan per turn on a
session that compression never managed to shrink. See #99692.
rQ  N)rq   rR  r?   ÚintrO  rÔ   rQ  )rU  rI  s   & r-   Úaux_stream_deadlinerX  ¨  sX   é € ô Ô+¨W°dÓ;€HÜ-7¸Ä3ÌÀ,×-OÒ-OÔS[Ð\d×SeÒSe¡ÐksÔÔð.Ûà%-ÔÖ"ø XÔÕ"üs   ‚AA0ÁA  ÁA0Á A-Á-A0c                ó¤   € V ^8„  d   QhR\         \        \        \        3,          .\        3,          R\        \        \        3,          R\        /# )r)   Úcallbackr;   r*   )r   r¤   rX   r   )r,   s   "r-   r.   r.   ¾  sD   € ÷ <%ñ <%´¼$¼sÄC¸x½.Ð9IÌ3Ð9NÕ0Oð <%ÔY]Ô^aÔcfÐ^fÕYgð <%Ôloñ <%r/   c                ó.  a aaaaa	a
aaa€ \        4       p\        4       '       d   \        V4      '       g	   S ! S4      # \        V4      oS! 4       '       d   \	        4       h\        \        RR4      o\        \        RR4      o\        \        RR4      o\        \        RR4      o	\        4       o\        P                  ! 4       p\        P                  ! 4       o/ o
R V VVVV	VV
VVV3
R llp\        P                  ! VP                   V3RRR7      P#                  4         \%        S4      '       d   \	        4       hSP'                  R	4      '       g   K5  \%        S4      '       d   \	        4       hS
P)                  R
4      pVe   VhS
P)                  R4      # )aÅ  Run one protected provider callback in an attempt-isolated daemon thread.

Aux clients are process-shared and cannot be closed to wake one request, so the callback (incl.
stream aggregation) runs in a daemon while the owner polls cancellation; on cancel the owner
unwinds at once and the daemon finishes under the provider timeout in ``kwargs`` (it owns no
transcript/commit state, never holds the session lock). Unprotected / no cancel source: direct.
rû   NrQ  c                ó   € V ^8„  d   QhRR/# r½   rD   )r,   s   "r-   r.   Ú7_run_protected_sync_provider_call.<locals>.__annotate__Ü  s   € ÷ ñ ˜dñ r/   c                  óî  <
€  \        S4      ;_uu_ 4        \        \        S4      ;_uu_ 4        \        \        S	4      ;_uu_ 4        \	        S4      ;_uu_ 4        \        S
4      ;_uu_ 4        \        SR 7      ;_uu_ 4        S! S4      SR&   RRR4       RRR4       RRR4       RRR4       RRR4       RRR4       SP                  4        R#   + '       g   i     LJ; i  + '       g   i     LU; i  + '       g   i     L`; i  + '       g   i     Lk; i  + '       g   i     Lv; i  + '       g   i     L�; i  \         d   p T SR&    Rp ? L™Rp ? ii ; i  SP                  4        i ; i)rß   ÚresultNÚ	exception)	rL  rJ  r  r  rX  r   r×   ÚBaseExceptionÚset)ÚexcrZ  rÑ   Údispatch_hookÚdoner@  r;   ÚoutcomeÚprogress_hookÚprovider_response_hookÚreading_hooks    €€€€€€€€€€r-   Ú_provider_workerÚ;_run_protected_sync_provider_call.<locals>._provider_workerÜ  sé   ø€ ð	ä! -×0Õ0Ü&¤}°m×DÕDÜ&Ô'=Ð?U×VÕVÜ# M×2Õ2Ô4GÈ×4UÕ4UÜ(°l×CÖCá$,¨VÓ$4�˜Ñ!÷ D÷ 5V×2÷ W÷ E÷ 1ð �H‰HŽJ÷ D×Cú÷ 5V×4Uú×2×2ú÷ W×Vú÷ E×Dú÷ 1×0ûô ô 	'Ø#&ˆG�KÖ ûð	'ûð �H‰H�JúsÃ   ƒE –D2¯D	ÁDÁC9Á0C&ÂCÂC&ÂC9Â!DÂ)D	Â1D2Â9E ÃC#ÃC&Ã&C6Ã1C9Ã9D	ÄDÄDÄD	ÄD/Ä*D2Ä2E	Ä=E ÅE" ÅE ÅEÅEÅE" ÅEÅE" Å"E4zhermes-protected-aux-providerT)Útargetr:   r`   Údaemong{®Gáz”?r`  r_  )rË   rÈ   rÔ   rá   rº   rq   r  r  r  rR  r   ÚcontextvarsÚcopy_contextrè   ÚEventÚThreadÚrunÚstartrÌ   Úwaitrž   )rZ  r;   rã   Úprovider_contextrj  r`  rÑ   rd  re  r@  rf  rg  rh  ri  s   ff    @@@@@@@@r-   Ú!_run_protected_sync_provider_callrv  ¾  sR  ÿù€ ô 4Ó5ÐÜ#×%Ò%¬XÐ6I×-JÒ-JÙ˜ÓÐô 2Ð2EÓF€LÙ‡~‚~Ü+Ó-Ð-ô œM¨6°4Ó8€MÜœM¨6°4Ó8€MÜ$Ô%;¸VÀTÓJÐÜÔ0°'¸4Ó@€MÜ.Ó0€Lô #×/Ò/Ó1ÐÜ�?Š?Ó€DØ €G÷÷ ñ ô ×ÒØ×#Ñ#Ð+;Ð*=ÐDcØôç‘U”WØ
ô *¨,×7Ò7Ü/Ó1Ð1Ø�y‰y˜�ŠÙÜ)¨,×7Ò7Ü/Ó1Ð1Ø—K‘K Ó,ˆ	ØÒ ØˆOØ�{‰{˜8Ó$Ð$r/   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r)   Ú
client_objÚflagr*   ©r   rX   rm   )r,   s   "r-   r.   r.   ý  s!   € ÷ ñ ¤ð ¬Cð ´Dñ r/   c                óR   €  \        \        WR4      4      #   \         d     R# i ; i)uÑ   Whether ``client_obj`` (or its class) sets ``flag`` truthy; absent â†’ False. Capability declaration,
not isinstance, so out-of-tree clients can opt out of wrappers unimported (cf. SUPPORTS_HERMES_TOOL_CALLS).F)rm   rq   rŸ   )rx  ry  s   &&r-   Ú_client_declaresr|  ý  s+   € ðÜ”G˜J¨eÓ4Ó5Ð5øÜô Úðús   ‚ —&¥&c                ó<   € V ^8„  d   QhR\         R\         R\        /# )r)   r@   Ú
maybe_typer*   r  )r,   s   "r-   r.   r.     s!   € ÷ ñ œ#ð ¬3ð ´4ñ r/   c                ó>   €  \        W4      #   \         d     R# i ; i)zDReturn False instead of raising when a patched symbol is not a type.F)r?   Ú	TypeError)r@   r~  s   &&r-   Ú_safe_isinstancer�    s$   € ðÜ˜#Ó*Ð*øÜô Úðús   ‚
 �›c                ó$   € V ^8„  d   QhR\         /# )r)   ÚurlrW   )r,   s   "r-   r.   r.     s   € ÷ ñ ¤3ñ r/   c                ó  € \        V 4      pVP                  '       dZ   \        VP                  RR7      4      \	        VP                  4      P                  4        UUu/ uF  w  r#W#^ ,          bK  	  upp3# V R3# u uppi )zNExtract query params from URL, return (clean_url, default_query dict or None).rj   )ÚqueryN)r   r…  r   Ú_replacer   Úitems)rƒ  ÚparsedÚkÚvs   &   r-   Ú_extract_url_query_paramsr‹    sm   € ä�c‹]€FØ‡|‡|€|Ü˜&Ÿ/™/°˜/Ó3Ó4Ì8ÐTZ×T`ÑT`ÓKa×KgÑKgÔKiÔ6jÑKiÁ4À1°q¸A½$²wÑKiÒ6jÐjÐjØ�ˆ9Ðùó 7ks   ÁA;ÚollamaÚcustomÚvllmÚllamacppz	llama.cppz	llama-cppc                óF   € V ^8„  d   QhR\         \        \        3,          /# r(   ©r¤   rX   )r,   s   "r-   r.   r.   %  s   € ÷ ñ œt¤C¬ H�~ñ r/   c                 óê   € \         fT   \        \        4      p \        P                  ! \
        4      ;_uu_ 4        ^ RIHp V P                  V4       RRR4       V s \         #   + '       g   i     L; i)uy  The same alias table the main provider path resolves against (hermes_cli.auth).

A hand-copied mirror here rots silently every time auth grows a family â€” the local
servers (#106010) and the OpenCode entries were both missed that way. Local-server
names stay pinned on top: that set doubles as the guard for the /v1 tail and the
no-key-borrow rule in the custom branch below.
N)Ú_PROVIDER_ALIASES)	Ú_ALIAS_TABLEr¤   Ú_LOCAL_SERVER_ALIASESÚ
contextlibÚsuppressrŸ   Úhermes_cli.authr“  Úupdate)ÚmergedÚ_auth_tables     r-   Ú_provider_alias_tablerœ  %  sP   € ô ÒÜ!%Ô&;Ó!<ˆÜ× Ò ¤×+Õ+ÝHØ�M‰M˜+Ô&÷ ,ð ˆÜÐ÷	 ,×+ús   ºA"Á"A2	c                óF   € V ^8„  d   QhR\         \        ,          R\        /# ©r)   Úproviderr*   ©r   rX   )r,   s   "r-   r.   r.   6  s   € ÷ ?ñ ?¤h¬s¥mð ?¼ñ ?r/   c                 ó¾  € T ;'       g    R P                  4       P                  4       pVP                  R4      '       d4   VP                  R^4      ^,          P                  4       pV'       g   R# TpVR8X  d   R# VR8X  dD   \	        4       ;'       g    RP                  4       P                  4       pV'       d   VR9   d   R# Tp\        4       P                  W4      # )	Úautoúcustom:Ú:r�  Úcodexúopenai-codexÚmainrj   >   r¢  r§  )ÚstripÚlowerÚ
startswithÚsplitÚ_read_main_providerrœ  rž   )rŸ  Ú
normalizedÚsuffixÚ	main_provs   &   r-   Ú_normalize_aux_providerr°  6  s¹   € Ø×$Ð$˜f×+Ñ+Ó-×3Ñ3Ó5€JØ×Ñ˜Y×'Ò'Ø×!Ñ! # qÓ)¨!Õ,×2Ñ2Ó4ˆßÙØˆ
Ø�WÔÙØ�VÔä(Ó*×0Ð0¨b×7Ñ7Ó9×?Ñ?ÓAˆ	ß˜IÐ)9Ô9ÙØˆ
Ü Ó"×&Ñ& zÓ>Ð>r/   c                óF   € V ^8„  d   QhR\         \        ,          R\        /# ©r)   Úmodelr*   r   )r,   s   "r-   r.   r.   M  s   € ÷ <ñ <”x¤•}ð <¬ñ <r/   c                ó€   € T ;'       g    RP                  4       P                  4       P                  R^4      R,          # )z;Lowercased model slug with any ``vendor/`` prefix stripped.rj   Ú/éÿÿÿÿ)r¨  r©  Úrsplit©r³  s   &r-   Ú_bare_modelr¹  M  s2   € à�KˆK�R×ÑÓ ×&Ñ&Ó(×/Ñ/°°QÓ7¸Õ;Ð;r/   c                óF   € V ^8„  d   QhR\         \        ,          R\        /# r²  ©r   rX   rm   )r,   s   "r-   r.   r.   R  s   € ÷ 6ñ 6œ(¤3�-ð 6¬Dñ 6r/   c                óT   € \        V 4      pVP                  R4      ;'       g    VR8H  # )zHTrue for any Kimi / Moonshot model that manages temperature server-side.zkimi-Úkimi©r¹  rª  ©r³  Úbares   & r-   Ú_is_kimi_modelrÁ  R  s'   € ä�uÓ€DØ�?‰?˜7Ó#×5Ð5 t¨v¡~Ð5r/   c                óF   € V ^8„  d   QhR\         \        ,          R\        /# r²  r»  )r,   s   "r-   r.   r.   X  s   € ÷ :ñ :¤h¬s¥mð :¼ñ :r/   c                ó   € \        V 4      R8H  # )zATrue for Arcee Trinity Large Thinking (direct or via OpenRouter).ztrinity-large-thinking)r¹  r¸  s   &r-   Ú_is_arcee_trinity_thinkingrÄ  X  s   € ä�uÓÐ!9Ñ9Ð9r/   g333333ë?gffffffæ?c                óh   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\        /# ©r)   r³  rŸ  r*   r»  )r,   s   "r-   r.   r.   d  s/   € ÷ `ñ `¤H¬S¥Mð `¼XÄc½]ð `ÔVZñ `r/   c                óø   a€ \        W4      oSf   R# ^ RIHp V! S4      '       d   R# RS9   d   RS9  # SR8H  ;'       g;    \        ;QJ d    V3R lR 4       F  '       g   K   R# 	  R# ! V3R lR 4       4      # )	aÏ  True for gpt-5.4/5.5/5.6, gpt-6 Sol/Terra/Luna, gpt-6 Astra (and the Daybreak Sol alias) on the Codex OAuth route only.

Other routes expose a larger window for the same slug and keep the user's threshold.
Prefix-matched so ``-pro`` and dated snapshots track every 272K-capped family; ``-900k``
picker variants are excluded. Astra is substring-matched (any slug containing ``astra``
without ``900k``). Name kept for the ``compression.codex_gpt55_autoraise`` key.
F)Úis_codex_context_variantÚastraÚ900kzgpt-daybreak-blue-latestc              3   ó®   <"  € T FJ  pSV8H  ;'       g9    SP                  VR ,           4      ;'       g    SP                  VR,           4      x € KL  	  R# 5i)Ú-Ú.N©rª  )r#  ÚfamrÀ  s   & €r-   r%  Ú+_is_codex_gpt54_or_gpt55.<locals>.<genexpr>t  sJ   øé € ð 5`á^ˆCð 	�‰×OÐO�t—‘ s¨S¥yÓ1×OÐO°T·_±_ÀSÈ3ÅYÓ5OÔOÛ^ùs   ƒA”A´!AT)zgpt-5.4zgpt-5.5zgpt-5.6z	gpt-6-solzgpt-6.1-solz
gpt-6-luna)Ú_codex_route_bare_modelÚagent.model_metadatarÈ  r3  )r³  rŸ  rÈ  rÀ  s   && @r-   Ú_is_codex_gpt54_or_gpt55rÓ  d  s‘   ø€ ô # 5Ó3€DØ‚|ÙÝ=Ù ×%Ò%ÙØ�$„Ø˜TÑ!Ð!ØÐ-Ñ-÷ `ð `·³ô 5`á^ó5`·´ð `²ð `°ô 5`á^ó5`ó 2`ð `r/   c                ó~   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\         \        ,          /# rÆ  r   )r,   s   "r-   r.   r.   y  s3   € ÷ ^ñ ^¤8¬C¥=ð ^¼HÄS½Mð ^ÌhÔWZÍmñ ^r/   c                óv   € T;'       g    RP                  4       P                  4       R8X  d   \        V 4      # R# )zQLowercased bare model slug when ``provider`` is the Codex OAuth route, else None.rj   r¦  N)r¨  r©  r¹  ©r³  rŸ  s   &&r-   rÑ  rÑ  y  s2   € à"*§. .¨b×!7Ñ!7Ó!9×!?Ñ!?Ó!AÀ^Ô!SŒ;�uÓÐ]ÐY]Ð]r/   c                óh   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\        /# rÆ  r»  )r,   s   "r-   r.   r.   ~  s.   € ÷ Mñ Mœ8¤C�=ð M´H¼SµMð MÌTñ Mr/   c                ó   € \        W4      R8H  # )zYTrue for ``gpt-5.3-codex-spark`` on the Codex OAuth route (the slug exists nowhere else).zgpt-5.3-codex-spark)rÑ  rÖ  s   &&r-   Ú_is_codex_sparkrÙ  ~  s   € ä" 5Ó3Ð7LÑLÐLr/   c                óF   € V ^8„  d   QhR\         \        ,          R\        /# r²  r»  )r,   s   "r-   r.   r.   ƒ  s"   € ÷ ^ñ ^¬x¼­}ð ^Äñ ^r/   c                óv   € \        V 4      pVP                  R4      ;'       d    VP                  R4      '       * # )zéTrue for OpenAI reasoning families that 400 (``unsupported_value``) on any non-default
``temperature``: gpt-5.x (incl. dated snapshots, ``-pro``, ``-codex``), o1/o3/o4. The
``gpt-5-chat`` non-reasoning line still accepts it (#51083).z
gpt-5-chat)zgpt-5Úo1Úo3Úo4r¾  r¿  s   & r-   Ú#_is_openai_default_temperature_onlyrß  ƒ  s3   € ô �uÓ€DØ�?‰?Ð6Ó7×]Ð]ÀÇÁÐP\Ó@]Ô<]Ð]r/   c          
      óš   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\        \        \        3,          R\        RR/# )r)   rŸ  rV   Úrejected_kwargsÚerrorr*   N)r   rX   r¤   r   ra  )r,   s   "r-   r.   r.   �  sL   € ÷ rñ rÜ”s�mðrÜ'/´¥}ðrÜGKÌCÔQTÈHÅ~ðrÜ^kðrà	ñrr/   c                 óv   € \         P                  \        W4      \        VP	                  R 4      4      34       R# )r³  N)Ú_TEMPERATURE_REJECTED_ROUTESÚaddr   r¹  rž   )rŸ  rV   rá  râ  s   &&&&r-   Úremember_temperature_rejectionræ  �  s.   € ô !×$Ñ$¤j°Ó&DÄkÐRa×ReÑReÐfmÓRnÓFoÐ%pÖqr/   c          	      ó¶   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\         \        ,          R\         \        ,          \        ,          /# )r)   r³  rV   rŸ  r*   )r   rX   rO  Úobject)r,   s   "r-   r.   r.   –  sA   € ÷ >ñ >Ü”C�=ð>Ü$,¬S¥Mð>ÜDLÌSÅMð>äŒe…_”vÕñ>r/   c                ó�  € \        V 4      '       d   \        P                  RV 4       \        # ^ RIHp \        V 4      '       g   V! \        V 4      4      '       d   \        P                  RV 4       \        # \        W!4      \        V 4      3\        9   d   \        P                  RV 4       \        # \        V 4      '       d   R# R# )zœ``OMIT_TEMPERATURE`` (drop the key; Kimi/Moonshot, OpenAI reasoning families, Gemini 3.6+, routes
that already rejected it), a fixed ``float``, or ``None``.z7Omitting temperature for Kimi model %r (server-managed))Úgemini_sampling_deprecatedzKOmitting temperature for %r (default-only, or Gemini 3.6+ ignores sampling)z7Omitting temperature for %r (route rejected it earlier)g      à?N)rÁ  r­   rÞ   ÚOMIT_TEMPERATUREÚagent.gemini_native_adapterrê  rß  r¹  r   rä  rÄ  )r³  rV   rŸ  rê  s   &&& r-   Ú_fixed_temperature_for_modelrí  –  sž   € ô
 �e×ÒÜ�‰ÐNÐPUÔVÜÐÝFÜ*¨5×1Ò1Ñ5OÔP[Ð\aÓPb×5cÒ5cÜ�‰ÐbÐdiÔjÜÐÜ�8Ó&¬°EÓ(:Ð;Ô?[Ô[Ü�‰ÐNÐPUÔVÜÐÜ,¨U×3Ò3ˆ3Ð=¸Ð=r/   Úallow_codex_gpt55_autoraisec          	      óŠ   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\        R\         \        ,          /# )r)   r³  rŸ  rî  r*   )r   rX   rm   rO  )r,   s   "r-   r.   r.   ¨  s:   € ÷ ñ Ü”C�=ðÜ$,¬S¥Mðä!%ðô Œe…_ñr/   c               ó˜   € \        V 4      '       d   R# V'       d   \        W4      '       d   \        # \        W4      '       d   \        # R# )u"  Per-model/route compression threshold override (fraction of context used), or None.

Arcee Trinity Large Thinking â†’ 0.75 (preserve reasoning context); Codex-route gpt-5.4/5.5/5.6/Astra
â†’ 0.85, gated by ``allow_codex_gpt55_autoraise``; Codex-route gpt-5.3-codex-spark â†’ 0.70, ungated.
g      è?N)rÄ  rÓ  Ú'_CODEX_GPT54_GPT55_COMPACTION_THRESHOLDrÙ  Ú!_CODEX_SPARK_COMPACTION_THRESHOLD)r³  rŸ  rî  s   &&$r-   Ú _compression_threshold_for_modelró  ¨  s:   € ô " %×(Ò(Ùß"Ô'?À×'PÒ'PÜ6Ð6Ü�u×'Ò'Ü0Ð0Ùr/   úgemini-3.6-flashÚreasonr¥  c                ó0   € V ^8„  d   QhR\         R\        /# )r)   Úmodel_idr*   ©rX   Útuple)r,   s   "r-   r.   r.   Ë  s   € ÷ ^ñ ^¤ð ^¬ñ ^r/   c           
     ó
  € \         ;QJ d@    . R \        \        P                  ! RV P	                  4       4      4       4       F  NK  	  5# ! R \        \        P                  ! RV P	                  4       4      4       4       4      # )z©Sort key putting a family's newest release first: digit runs compare numerically (plain
string order picks ``gpt-3.5-mini`` over ``gpt-5.4-mini`` and breaks at 9 vs 10).c              3   ó~   "  € T F3  w  rV'       g   K  V^,          '       d   ^\        V4      R3M^ RV3x € K5  	  R# 5i)r)   rj   ç        N©rO  )r#  ÚindexÚparts   &  r-   r%  Ú%_model_recency_key.<locals>.<genexpr>Ï  s=   é € ð ^áT‰KˆEÔX\ô 	> ¨§	¤	ˆŒE�$‹K˜Ñ°°3¸¨~Ô=ÛTùs   ‚=“=¢=z(\d+(?:\.\d+)?))rù  Ú	enumerateÚrer«  r©  )r÷  s   &r-   Ú_model_recency_keyr  Ë  sm   € ÷ Œ5ñ ^ä$¤R§X¢XÐ.@À(Ç.Á.ÓBRÓ%SÔTó^�5ð ^ˆ5ñ ^ä$¤R§X¢XÐ.@À(Ç.Á.ÓBRÓ%SÔTó^ó ^ð ^r/   c                ó0   € V ^8„  d   QhR\         R\         /# )r)   Úprovider_idr*   rW   )r,   s   "r-   r.   r.   Ô  s   € ÷ :ñ :¬#ð :´#ñ :r/   c           	     óX  a€ V P                  4       P                  4       R8H  p ^ RIHp ^ RIHp ^ RIHp RRre V! V 4      ;'       g    / p\        VP                  RR4      4      P                  4       p\        VP                  RR4      4      P                  4       pV'       g   V'       d    ^ RIHp V! 4       w  rVV'       g'   \        \        V! V 4      RR4      ;'       g    R4      pVP                  R4      pV'       g   R# VP!                  R4      p/ p	V'       d   ^ RIHp
 RR	RV
/p	T! RRT;'       g    RRVRR/V	B ;'       g    / p\%        R T 4       \&        R	R7      pT'       d    ^ RIHpHp T! YÍ! 4       4      p\,         Fs  pT Fj  pTP                  4       oTS9   g   K  \.        ;QJ d#    T3R l\0         4       F  '       g   K   R	M	  RM! T3R l\0         4       4      '       d   Kf  Tu u # 	  Ku  	  R#   \         d    \        P                  RT R	R
7        ELŽi ; i  \         d    \        P                  RR	R
7        EL—i ; i  \         d    \        P                  RT R	R
7        R# i ; i  \         d    \        P                  RR	R
7        EL!i ; i)zëNewest ``_FAST_MODEL_FAMILIES`` match from the provider's live (cached) catalog.

"" when the catalog is unavailable or holds no small model (caller falls through to the
curated default). Never raises; the fetch is memory+disk cached.
Únous)Ú$resolve_api_key_provider_credentials)Úfetch_models_with_pricing©Úget_provider_profilerj   rU   rV   zNo credentials for %s catalogTrÜ   )Ú!_resolve_nous_pricing_credentialszNo Nous credentials for catalogrµ  ú/v1)Ú_NOUS_CATALOG_TTL_SECONDSÚinclude_sale_originalÚcache_ttl_secondsNÚtimeoutg      @z'Fast-model catalog lookup failed for %sc              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir8   rW   )r#  Úms   & r-   r%  Ú+_fast_model_from_catalog.<locals>.<genexpr>  s   é € Ð*¡'˜Q”#�a—&�&£'ùó   ‚)r  Úreverse©Únous_policy_allowed_idsÚrestrict_to_nous_policyzNous policy filter unavailablec              3   ó,   <"  € T F	  qS9   x € K  	  R # 5ir8   rD   )r#  ÚxÚlowereds   & €r-   r%  r    s   øé € Ð,WÑCV¸a°'®\ÓCVùó   ƒFrD   )r¨  r©  r˜  r  Úhermes_cli.models_pricingr	  Ú	providersr  rX   rž   rŸ   r­   rÞ   r  rq   ÚrstripÚremovesuffixr  Úsortedr  r  r  Ú_FAST_MODEL_FAMILIESr3  Ú_FAST_MODEL_EXCLUDE)r  Úis_nousr  r	  r  rU   rV   Úcredsr  Ú_nous_kwargsr  ÚcatalogÚidsr  r  Úfamilyr÷  r  s   &                @r-   Ú_fast_model_from_catalogr+  Ô  su  ø€ ð ×ÑÓ!×'Ñ'Ó)¨VÑ3€Gð%ÝHÝGÝ2ð  �ð	VÙ8¸ÓE×KÐKÈˆEÜ˜%Ÿ)™) I¨rÓ2Ó3×9Ñ9Ó;ˆGÜ˜5Ÿ9™9 Z°Ó4Ó5×;Ñ;Ó=ˆH÷ Ÿ7ðOÝWÙ$EÓ$GÑ!�÷ Üœ7Ñ#7¸Ó#DÀjÐRTÓU×[Ð[ÐY[Ó\ˆHØ—?‘? 3Ó'ˆßÙØ×(Ñ(¨Ó/ˆð ˆßÝKØ3°TÐ;NÐPiÐjˆLÙ+ñ UØ—O�O˜tðUØ.6ðUØ@CðUØGSñU÷ [ð [ØXZð 	ô
 Ñ*¡'Ó*Ô0BÈDÔ
Q€Cßð	JßbÙ)¨#Ð/FÓ/HÓIˆC÷ 'ˆÛˆHØ—n‘nÓ&ˆGØ˜Ö ¯«Ô,WÕCVÓ,W¯¯ªÔ,WÕCVÓ,W×)WÔ)WØ”ó ñ 'ñ
 øôQ ô 	Vä�L‰LÐ8¸+ÐPTˆL×Uð	Vûô ô OÜ—‘Ð>È�×NðOûô  ô Ü�‰Ð>ÀÐVZˆÔ[Úðûô ô 	JÜ�L‰LÐ9ÀDˆL×Ið	Jús›   ¤I ºH Á	AH ÂI Â&I Â/H0 Â>I ÃI Ã%I ÄI Ä"I Ä;I ÅI Å2J È#H-È)I È,H-È-I È0"IÉI ÉIÉI É#J É?J Ê"J)Ê(J)Úprefer_fastc                ó<   € V ^8„  d   QhR\         R\        R\         /# )r)   r  r,  r*   ©rX   rm   )r,   s   "r-   r.   r.     s"   € ÷ !ñ !¬Sð !Ä$ð !ÔSVñ !r/   c               óü  € Rp\         P                  ! \        4      ;_uu_ 4        ^ RIHp V! V 4      pRRR4       RpV'       d3   \        V 4      pV'       g    Ve    VP                  4       ;'       g    RpV'       g#   Ve   VP                  '       d   VP                  pV'       g   \        P                  V R4      pV'       dP   V P                  4       P                  4       R8X  d-    ^ RIHpHp V! 4       pV'       d   V! V.V4      '       g   R# V# V#   + '       g   i     Lí; i  \         d    \        P                  RT RR7        LÙi ; i  \         d    \        P                  R	RR7        T# i ; i)
a*  Cheap auxiliary model for a provider.

Ladder: (``prefer_fast`` only) live-catalog family match, then ``ProviderProfile.resolve_aux_model``;
then ``default_aux_model`` (curated); then the legacy dict. ``prefer_fast`` is opt-in (titling)
so other callers keep their static behaviour and cache keys.
Nr
  rj   zresolve_aux_model failed for %sTrÜ   r  r  zNous policy check unavailable)r–  r—  rŸ   r  r  r+  Úresolve_aux_modelr­   rÞ   Údefault_aux_modelÚ%_API_KEY_PROVIDER_AUX_MODELS_FALLBACKrž   r¨  r©  r  r  r  )r  r,  Úprofiler  Úpickedr  r  Úalloweds   &$      r-   Ú_get_aux_model_for_providerr6    s?  € ð €GÜ	×	Ò	œY×	'Õ	'Ý2Ù& {Ó3ˆ÷ 
(ð €FßÜ)¨+Ó6ˆß˜'Ò-ð\Ø ×2Ñ2Ó4×:Ð:¸�÷ �gÒ)¨g×.G×.GÐ.GØ×*Ñ*ˆßÜ6×:Ñ:¸;ÈÓKˆ÷ �+×#Ñ#Ó%×+Ñ+Ó-°Ô7ð	IßbÙ-Ó/ˆGßÑ6¸°xÀ×IÒIÙð €Mˆ6€M÷3 
(×	'ûô ô \Ü—‘Ð>ÀÐVZ�Ö[ð\ûô ô 	IÜ�L‰LÐ8À4ˆLÕHØ€Mð	Iús;   ¥DÁD, Á5D, Ã,E ÄE ÄD)	Ä,#EÅEÅ"E;Å:E;ÚgeminiÚzaizglm-4.5-flashúkimi-codingzkimi-k2-turbo-previewÚstepfunzstep-3.5-flashzkimi-coding-cnÚgmiz$google/gemini-3.1-flash-lite-previewÚ	anthropicúclaude-haiku-4-5-20251001z
ai-gatewayzgoogle/gemini-3-flashzopencode-zenzgemini-3-flashzopencode-gozglm-5Úkilocodezgoogle/gemini-3.6-flashzollama-cloudznemotron-3-nano:30bztencent-tokenhubzhy4-previewztencent-tokenplanÚtitle_generationc                óF   € V ^8„  d   QhR\         \        ,          R\        /# ©r)   Útaskr*   r»  )r,   s   "r-   r.   r.   I  s"   € ÷ Rñ R¤8¬C¥=ð R´Tñ Rr/   c                ón   € V \         9   ;'       d&    \        \        V 4      P                  R4      RR7      # )zHReturn whether an eligible task explicitly opts into fast-model routing.Úprefer_fast_modelF©r  )Ú_FAST_MODEL_TASKSrŽ   Ú_get_auxiliary_task_configrž   ©rB  s   &r-   Ú_task_prefers_fast_modelrI  I  s;   € àÔ$Ñ$÷ Rð R¬Ü" 4Ó(×,Ñ,Ð-@ÓAÈ5ô*Rð Rr/   Úxiaomiz	mimo-v2.5zglm-5.3-flashc                óF   € V ^8„  d   QhR\         R\        \         ,          /# rž  ©rX   r   )r,   s   "r-   r.   r.   W  s   € ÷ ñ ¬sð ´xÄµ}ñ r/   c                ó®   € \         P                  V 4      pV'       d   V#  ^ RIHp V! V 4      pVe   VP	                  4       # R#   \
         d     R# i ; i)z¯Provider default vision model id, or None: static ``_PROVIDER_VISION_MODELS`` (vision-only
names absent from any catalog) win, else ``ProviderProfile.default_vision_model()``.r
  N)Ú_PROVIDER_VISION_MODELSrž   r  r  Údefault_vision_modelrŸ   )rŸ  Ústaticr  r3  s   &   r-   Ú _resolve_provider_vision_defaultrQ  W  sY   € ô %×(Ñ(¨Ó2€FßØˆðÝ2Ù& xÓ0ˆØ18Ò1Dˆw×+Ñ+Ó-ÐNÈ$ÐNøÜô Úðús   ¡!A ÁA ÁAÁAzHTTP-Refererz%https://hermes-agent.nousresearch.comzX-TitlezHermes AgentzX-OpenRouter-Categorieszproductivity,cli-agentc                óL   € V ^8„  d   QhR\         R,          R\         R,          /# )r)   ÚheadersNr*   ©r¤   )r,   s   "r-   r.   r.   q  s"   € ÷ ñ ¬°­ð ¼À½ñ r/   c           
     ó  €  ^ RI HpHp V! 4       pV! VRR4      pV! VRR4      p\        V\        4      '       d'   V'       d   / \        V\        4      '       d   TM/ CVCp\        T\        4      '       d	   T'       g   T # \	        T ;'       g    / 4      pTP                  TP                  4        UUu/ uF   w  rxTf   K  \        T4      \        T4      bK"  	  upp4       T;'       g    T #   \
         d    T u # i ; iu uppi )a%  Merge user ``model.default_headers`` onto resolved headers (user wins; ``model.extra_headers``
alias wins over both). Mirrors ``AIAgent._apply_user_default_headers`` so a custom endpoint behind a
WAF rejecting ``User-Agent`` / ``X-Stainless-*`` works for aux calls. SECURITY: never log values.©Úcfg_getÚload_configr³  Údefault_headersÚextra_headers)	r�   rW  rX  r?   r¤   rŸ   r™  r‡  rX   )	rS  rW  rX  Ú_cfgÚuser_headersÚalias_headersrš  r‰  rŠ  s	   &        r-   Ú_apply_user_default_headersr^  q  sã   € ðß:Ù‹}ˆÙ˜t WÐ.?Ó@ˆÙ  g¨Ó?ˆÜ�m¤T×*Ò*¯}Øh¬z¸,Ì×/MÒ/M™|ÐSUÐhÐZgÐhˆLô �l¤D×)Ò)·ØˆÜ�'—-�-˜RÓ €FØ
‡M�M¨l×.@Ñ.@Ô.BÔTÑ.B¡d aÀa”>”3�q“6œ3˜q›6’>Ñ.BÒTÔUØ×Ð�WÐøô ô ØŠðüó
 Us$   ‚A C. ÁC. Â4D
ÃD
Ã.C>Ã=C>c                ó>   € V ^8„  d   QhR\         R,          R\         /# )r)   Ú	or_configNr*   rT  )r,   s   "r-   r.   r.   …  s   € ÷ ñ ¤ t¥ð ´tñ r/   c                ó  € \        \        4      pV f    ^ RIHp V! 4       P	                  R/ 4      p \        P                  P	                  RR4      P                  4       P                  4       pV'       d   VR9   g    V# V P	                  RR4      '       g   V# RVR&   \        P                  P	                  R	R4      P                  4       pV'       dL   VP                  4       '       d4   ^\        V4      u;8:  d   R
8:  d   M V# \        \        V4      4      VR&   V# V P	                  RR4      p\        V\        \        34      '       d+   ^Tu;8:  d   R
8:  d   M V# \        \        V4      4      VR&   V#   \
         d    / p  ELXi ; i)a$  OpenRouter headers, plus response-cache headers when enabled.

Precedence env > config > default: ``HERMES_OPENROUTER_CACHE`` overrides
``openrouter.response_cache``; ``HERMES_OPENROUTER_CACHE_TTL`` (1-86400 s) overrides
``openrouter.response_cache_ttl``. ``or_config=None`` reads from disk.
©r–   Ú
openrouterÚHERMES_OPENROUTER_CACHErj   ÚtrueÚresponse_cacheFzX-OpenRouter-CacheÚHERMES_OPENROUTER_CACHE_TTLi€Q zX-OpenRouter-Cache-TTLÚresponse_cache_ttli,  >   Ú1ÚonÚyesre  )r¤   Ú_OR_HEADERS_BASEr�   r–   rž   rŸ   ÚosÚenvironr¨  r©  ÚisdigitrW  rX   r?   rO  )r`  rS  r–   Ú	env_cacheÚenv_ttlÚttls   &     r-   Úbuild_or_headersrs  …  sY  € ô Ô#Ó$€GØÒð	Ý>Ù,Ó.×2Ñ2°<ÀÓDˆIô —
‘
—‘Ð8¸"Ó=×CÑCÓE×KÑKÓM€Iß7@ˆIÐ3Õ3Øˆð GPÇmÁmÐTdÐfk×FlÒFlØˆØ$*€GÐ Ñ!Ü�j‰j�n‰nÐ:¸BÓ?×EÑEÓG€GßØ�?‰?×Ò ¤c¨'£lÖ!;°eÖ!;ð €Nô 14´C¸³LÓ0AˆGÐ,Ñ-ð
 €Nð �m‰mÐ0°#Ó6ˆÜ�cœC¤˜<×(Ò(¨Q°#Ö->¸Ö->à€Nô 14´C¸³H³ˆGÐ,Ñ-Ø€Nøô ô 	Ø‹Ið	ús   •E: Å:FÆ
FzX-BILLING-INVOKE-ORIGINÚHermesAgentc                ó>   € V ^8„  d   QhR\         R,          R\        /# )r)   rV   Nr*   )rX   r¤   )r,   s   "r-   r.   r.   ¦  s"   € ÷ }ñ }¤s¨T¥zð }´dñ }r/   c                ón   € \        \        T ;'       g    R4      R4      '       d   \        \        4      # / # )zIReturn NVIDIA NIM cloud attribution headers for build.nvidia.com traffic.rj   úintegrate.api.nvidia.com)rŠ   rX   r¤   Ú_NVIDIA_NIM_CLOUD_HEADERS©rV   s   &r-   Úbuild_nvidia_nim_headersrz  ¦  s-   € ä.CÄCÈÏÈÐTVÓDWÐYs×.tÒ.tŒ4Ô)Ó*Ð|Ðz|Ð|r/   )Úget_version_infoú
User-AgentzHermesAgent/)Únous_portal_tagsc                ó$   € V ^8„  d   QhR\         /# r(   rT  )r,   s   "r-   r.   r.   ¹  s   € ÷ )ñ )œ$ñ )r/   c                 ó   € R\        4       /# )zTFresh Nous Portal ``extra_body`` (per call, so a hot-reloaded version is reflected).Útags)Ú_nous_portal_tagsrD   r/   r-   Ú_nous_extra_bodyr‚  ¹  s   € àÔ%Ó'Ð(Ð(r/   z&nvidia/nemotron-3-ultra-550b-a55b:freez)https://inference-api.nousresearch.com/v1zhttps://api.anthropic.comz	auth.jsonc                 óF   € ^ RI Hp  \        \        8w  d   \        # V ! 4       # )a  Active profile's ``auth.json`` at call time (a patched ``_AUTH_JSON_PATH`` still wins). The
import-time constant is the LAUNCH profile's; under multiplexing a secondary's auxiliary calls
would otherwise authenticate to Nous with the default profile's token.©Ú_auth_file_path)r˜  r…  Ú_AUTH_JSON_PATHÚ_AUTH_JSON_PATH_AT_IMPORTr„  s    r-   Ú_auth_json_pathrˆ  Ì  s   € õ 0Ü-Ô1JÔJŒ?ÐaÑP_ÓPaÐar/   c                ó0   € V ^8„  d   QhR\         R\        /# ©r)   rƒ  r*   r.  )r,   s   "r-   r.   r.   Ù  s   € ÷ Zñ Z¬ð Z´ñ Zr/   c                óœ  a€  \        V 4      P                  ;'       g    RP                  4       o\        ;QJ d#    T3R l\
         4       F  '       g   K   RM	  RM! T3R l\
         4       4      ;'       gC    \        ;QJ d#    T3R l\         4       F  '       g   K   R# 	  R# ! T3R l\         4       4      #   \         d     R# i ; i)zGTrue when the URL's host is a known dual-surface (MiniMax-family) host.rj   Fc              3   ón   <"  € T F*  pSV8H  ;'       g    SP                  R V,           4      x € K,  	  R# 5i)rÍ  N)Úendswith)r#  r®  Úhosts   & €r-   r%  Ú2_is_dual_surface_anthropic_host.<locals>.<genexpr>ß  s1   øé € ð ÙDi¸&ˆ�‰×5Ð5˜$Ÿ-™-¨¨f­Ó5Ô5ÓDiùs   ƒ5”!5Tc              3   óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir8   rÎ  )r#  ÚprefixrŽ  s   & €r-   r%  r�  á  s   øé € ÐYÑ3X¨ˆT�_‰_˜V×$Ð$Ó3Xùó   ƒ!)r   Úhostnamer©  Ú
ValueErrorr3  Ú%_DUAL_SURFACE_ANTHROPIC_HOST_SUFFIXESÚ%_DUAL_SURFACE_ANTHROPIC_HOST_PREFIXES)rƒ  rŽ  s   &@r-   Ú_is_dual_surface_anthropic_hostr—  Ù  sª   ø€ ðÜ˜“×&Ñ&×,Ð,¨"×3Ñ3Ó5ˆ÷ ‹3ô ÝDió�3�3Š3ô ÝDióó ÷ Zð Zç	‹ÔYÕ3XÓY�ŒðZâ	ðZà	ÔYÕ3XÓYÓ	YðZøô ô Úðús   ƒB< ŸB< Â<CÃ
Cc                ó0   € V ^8„  d   QhR\         R\         /# r’   rW   )r,   s   "r-   r.   r.   ä  s   € ÷ ñ ¤#ð ¬#ñ r/   c                óº  € \        T ;'       g    R4      P                  4       P                  R4      p\        V4      R8X  d   ^ RIHp V! V4      # VP                  R4      '       dª   \        VR4      '       g   \        VR4      '       d/   VR\        R4      )  R	,           p\        P                  R
W4       V# \        V4      '       d/   VR\        R4      )  R,           p\        P                  RW4       V# \        P                  RV4       V# \        VR4      '       d9   VP                  R4      '       d"   VR,           p\        P                  RW4       V# V# )uA  Normalize dual-surface Anthropic URLs to their OpenAI-compatible sibling.

MiniMax-family: ``/anthropic`` â†’ ``/v1``; ZAI Coding Plan â†’ ``/coding/paas/v4`` (the general
endpoint bills separately); Kimi Code ``/coding`` â†’ ``/coding/v1`` (the OpenAI SDK path 404s
without it). Anthropic-only gateways keep their path.
rj   rµ  zapi.actual.inc©Únormalize_actual_base_urlú
/anthropiczopen.bigmodel.cnzapi.z.aiNz/coding/paas/v4u0   Auxiliary client: rewrote ZAI base URL %s â†’ %sr  u9   Auxiliary client: rewrote dual-surface base URL %s â†’ %szQAuxiliary client: keeping Anthropic-only base URL %s (no dual-surface host match)úapi.kimi.comú/codingu1   Auxiliary client: rewrote Kimi base URL %s â†’ %s)rX   r¨  r   r‹   r˜  r›  r�  rŠ   Úlenr­   rÞ   r—  )rV   rƒ  r›  Ú	rewrittens   &   r-   Ú_to_openai_base_urlr¡  ä  s1  € ô ˆh�nˆn˜"Ó
×
#Ñ
#Ó
%×
,Ñ
,¨SÓ
1€CÜ˜ÓÐ!1Ô1Ý=Ù(¨Ó-Ð-Ø
‡|�|�L×!Ò!Ü  Ð&8×9Ò9Ô=RÐSVÐXb×=cÒ=cØÐ0œs <Ó0Ð0Ð1Ð4EÕEˆIÜ�L‰LÐKÈSÔ\ØÐÜ*¨3×/Ò/ØÐ0œs <Ó0Ð0Ð1°EÕ9ˆIÜ�L‰LÐTÐVYÔeØÐÜ�‰Ø_Ðadô	fàˆ
Ü˜S .×1Ò1°c·l±lÀ9×6MÒ6MØ˜%•Kˆ	Ü�‰ÐHÈ#ÔYØÐØ€Jr/   rj   c                óR   € V ^8„  d   QhR\         R\         R\        \        ,          /# )r)   rŸ  Únoter*   ©rX   r   r   )r,   s   "r-   r.   r.     s%   € ÷ =ñ =¬#ð =´Sð =Ä(Ì3Å-ñ =r/   c                ó¾   €  \        V 4      pT'       d   TP	                  4       '       d   T# R#   \         d#   p\        P                  RYT4        Rp?R# Rp?ii ; i)zJ``load_pool(provider)`` when it has credentials, else None (never raises).z2Auxiliary client: could not load pool for %s%s: %sN)rw   rŸ   r­   rÞ   Úhas_credentials)rŸ  r£  Úpoolrc  s   &&  r-   Ú_load_pool_with_credentialsr¨    sU   € ðÜ˜Ó"ˆ÷ ˜D×0Ñ0×2Ò2ˆ4Ð<¸Ð<øô ô Ü�‰ÐIÈ8Ð[^Ô_Ýûðús   ‚/ ¯AºAÁAc                óh   € V ^8„  d   QhR\         R\        \        \        \        ,          3,          /# rž  )rX   rù  rm   r   r   )r,   s   "r-   r.   r.     s(   € ÷ 	ñ 	¤ð 	¬¬t´X¼cµ]Ð/BÕ)Cñ 	r/   c                óª   € \        V 4      pVf   R#  RVP                  4       3#   \         d#   p\        P	                  RY4       Ru Rp?# Rp?ii ; i)z2Return (pool_exists_for_provider, selected_entry).NTz8Auxiliary client: could not select pool entry for %s: %s©FN©TN)r¨  ÚselectrŸ   r­   rÞ   )rŸ  r§  rc  s   &  r-   Ú_select_pool_entryr®    sS   € ä& xÓ0€DØ‚|ØÐðØ�T—[‘[“]Ð"Ð"øÜô Ü�‰ÐOÐQYÔ_ØÕûðús   “% ¥A°AÁAÁAc                óR   € V ^8„  d   QhR\         R\        R\        \        ,          /# )r)   rŸ  r§  r*   )rX   r   r   )r,   s   "r-   r.   r.     s%   € ÷ ñ œsð ¬#ð ¼Ä#½ñ r/   c                ó8  € Vf   \        V R4      pVf   R#  \        VRR4      p\        V4      '       d   V! 4       MRpVe   V# \        VRR4      p\        V4      '       d   V! 4       #  R#   \         d"   p\        P                  RY4        Rp?R# Rp?ii ; i)zŠBest-effort current/next pool entry without mutating selection order.

``pool`` skips the disk re-read when the caller already loaded it.
Nú (peek)ÚcurrentÚpeekz6Auxiliary client: could not peek pool entry for %s: %s)r¨  rq   rÔ   rŸ   r­   rÞ   )rŸ  r§  Ú
current_fnr²  Úpeek_fnrc  s   &&    r-   Ú_peek_pool_entryr¶    s£   € ð
 ‚|Ü*¨8°YÓ?ˆØ‚|Ùð	^Ü˜T 9¨dÓ3ˆ
Ü"*¨:×"6Ò"6‘*”,¸DˆØÒØˆNÜ˜$ ¨Ó-ˆÜ�G×ÒÙ“9Ðð ñ øô ô ^Ü�‰ÐMÈx×]Ð]Ùûð^ús   ˜,A- Á$A- Á-BÁ8BÂBc                ó0   € V ^8„  d   QhR\         R\        /# ©r)   Úentryr*   r  )r,   s   "r-   r.   r.   .  s   € ÷ "ñ "¤ð "¬ñ "r/   c                 óŒ   € \        V R R4      ;'       g    \        V RR4      p\        T;'       g    R4      P                  4       # )Úruntime_api_keyNr´   rj   )rq   rX   r¨  )r¹  r  s   & r-   Ú_pool_runtime_api_keyr¼  .  s<   € ä
�%Ð*¨DÓ
1×
WÐ
W´W¸UÀNÐTVÓ5W€CÜˆs�yˆy�b‹>×ÑÓ!Ð!r/   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r)   r¹  Úfallbackr*   r  )r,   s   "r-   r.   r.   4  s!   € ÷ .ñ .¤#ð .´ð .¼cñ .r/   c                 ó¦  € V f3   \        T;'       g    R4      P                  4       P                  R4      # \        V RR 4      R8X  d   ^ RIHp V! 4       pV'       d   V# \        V RR 4      ;'       g-    \        V RR 4      ;'       g    \        V RR 4      ;'       g    Tp\        T;'       g    R4      P                  4       P                  R4      # )	Nrj   rµ  rŸ  r  )Ú_nous_inference_env_overrideÚruntime_base_urlÚinference_base_urlrV   )rX   r¨  r   rq   r˜  rÀ  )r¹  r¾  rÀ  Úenv_urlrƒ  s   &&   r-   Ú_pool_runtime_base_urlrÄ  4  sÀ   € Ø‚}Ü�8—>�>˜rÓ"×(Ñ(Ó*×1Ñ1°#Ó6Ð6Üˆu�j $Ó'¨6Ô1å@Ù.Ó0ˆßØˆNä�5Ð,¨dÓ3÷ ;ð ;´w¸uÐFZÐ\`Ó7a÷ ;ð ;Ü�e˜Z¨Ó.÷;ð ;Ø2:ð äˆs�yˆy�b‹>×ÑÓ!×(Ñ(¨Ó-Ð-r/   úapi.anthropic.comc                ó0   € V ^8„  d   QhR\         R\        /# rŠ  r.  )r,   s   "r-   r.   r.   H  s   € ÷ ñ ¤sð ¬tñ r/   c                ó¤  € V '       g   R#  \        V 4      pVP                  ;'       g    RP                  4       P                  4       P	                  R4      \
        9   d   R# VP                  ;'       g    RP	                  R4      P                  4       pVP                  R4      ;'       g    VP                  R4      #   \         d     R# i ; i)a  True for native Anthropic hosts and gateways serving Messages under a ``/anthropic`` path
(same convention as runtime_provider / ``_wrap_if_needed``), so a configured ``model.base_url``
whose gateway holds auth is not discarded. A bare non-Anthropic base_url is False.Frj   rÍ  Trµ  rœ  ú/anthropic/v1)	r   r“  r¨  r©  r   Ú_ANTHROPIC_COMPATIBLE_HOSTSÚpathr�  rŸ   )rƒ  rˆ  rÊ  s   &  r-   Ú_is_anthropic_compatible_hostrË  H  s¤   € ÷ ÙðÜ˜#“ˆØ�O‰O×!Ð!˜r×(Ñ(Ó*×0Ñ0Ó2×9Ñ9¸#Ó>ÔB]Ô]ÙØ—‘×!Ð!˜r×)Ñ)¨#Ó.×4Ñ4Ó6ˆØ�}‰}˜\Ó*×LÐL¨d¯m©m¸OÓ.LÐLøÜô Úðús(   ŒC  ª7C  Á#C  Á67C  Â.C  Ã CÃCc                ó$   € V ^8„  d   QhR\         /# r(   ©rW  )r,   s   "r-   r.   r.   X  s   € ÷ ñ ¤3ñ r/   c            	      óˆ   €  \        ^<\        \        P                  ! RR4      4      4      #   \        \
        3 d     R# i ; i)é<   ÚHERMES_NOUS_MIN_KEY_TTL_SECONDSÚ1800i  )ÚmaxrW  rm  Úgetenvr€  r”  rD   r/   r-   Ú_nous_min_key_ttl_secondsrÔ  X  s<   € ðÜ�2”sœ2Ÿ9š9Ð%FÈÓOÓPÓQÐQøÜ”zÐ"ô Úðús   ‚), ¬AÁ Ac                ó0   € V ^8„  d   QhR\         R\         /# r_   rW   )r,   s   "r-   r.   r.   _  s   € ÷ /ñ /œ#ð /¤#ñ /r/   c                óÞ   € V '       g   R# ^ RI HpHp  V! V 4      ;'       g    RP                  4       #   T d2    \        P
                  ! T 4      ;'       g    RP                  4       u # i ; i)ai  Read a provider API key (or its paired base-URL) env var through the profile secret scope.

In agent turns the scope's verdict is authoritative (a scoped miss must not borrow another
profile's key); only the unscoped default-profile path (``UnscopedSecretError``) reads
``os.environ`` -- any other scope failure propagates instead of borrowing the ambient env.
rj   )ÚUnscopedSecretErrorÚ
get_secret)Úagent.secret_scoper×  rØ  r¨  rm  rÓ  )r`   r×  rØ  s   &  r-   Ú_scoped_key_envrÚ  _  s\   € ÷ ÙßBð/Ù˜4Ó ×&Ð& B×-Ñ-Ó/Ð/øØô /Ü—	’	˜$“×%Ð% 2×,Ñ,Ó.Ò.ð/ús   ”4 £4 ´#A,ÁA,Á+A,c                ó0   € V ^8„  d   QhR\         R\         /# )r)   Ústreamr*   r9  )r,   s   "r-   r.   r.   p  s   € ÷ Wñ W¤3ð W¬3ñ Wr/   c                ó¬   € ^ RI Hp \        \        V RR4      RR4      p\        V\        4      '       d   VP                  R4      MRpVe	   V! V4      # R# )z©The raw socket under an SDK event stream (``stream.response`` is the ``httpx.Response``;
httpcore publishes its connection as the ``network_stream`` extension), or None.)Ú_socket_from_streamÚresponseNÚ
extensionsÚnetwork_stream)Úagent.agent_runtime_helpersrÞ  rq   r?   r¤   rž   )rÜ  rÞ  rà  rá  s   &   r-   Ú_attempt_stream_socketrã  p  sU   € õ @Üœ ¨°TÓ:¸LÈ$ÓO€JÜ9CÀJÔPT×9UÒ9U�Z—^‘^Ð$4Ô5Ð[_€NØ2@Ò2LÑ˜~Ó.ÐVÐRVÐVr/   c                óJ   € V ^8„  d   QhR\         R\        \        ,          RR/# )r)   rl  Úfailure_noter*   N©r   r   rX   )r,   s   "r-   r.   r.   y  s*   € ÷ Qñ Qœ3ð Q¬h´s­mð QÀñ Qr/   c                óÀ   € \        V RR4      p\        V4      '       d    V! 4        R# R#   \         d(    T'       d   \        P	                  RTRR7        R#  R# i ; i)zhCall ``target.close()`` if present; a failure is debug-logged under ``failure_note`` (silent when None).ÚcloseNzCodex auxiliary: %sTrÜ   )rq   rÔ   rŸ   r­   rÞ   )rl  rå  rè  s   && r-   Ú_close_quietlyré  y  sW   € ä�F˜G TÓ*€EÜ�‡‚ð	QÙŽGñ øô ô 	QßÜ—‘Ð2°LÈ4�×Pò ð	Qús    + «A¾AÁAzstream stalledc                   ó6  a € ] tR tRt o RtR#V 3R lR lltV 3R lR ltV 3R lR	 ltV 3R
 lR ltV 3R lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R  lR! ltR"tV tR# )$Ú_CodexStreamGuardiˆ  a  Progress-aware deadline + FD-safe timeout watchdog for one Codex aux stream attempt.

(1) The first substantive payload must arrive within ``no_progress_timeout`` or we fail fast into
the caller's retry/fallback chain (a dead or keepalive-only zombie must not hold the budget);
(2) each substantive event re-arms that window (keepalive/lifecycle frames do NOT, mirroring
commit-fence gating) so a live stream is never killed by an absolute total; (3) a hard ceiling
from ``_aux_stream_total_ceiling`` still terminates a pathological drip.
Nc                óL   <€ V ^8„  d   QhRS[ RS[S[,          RS[S[,          /# )r)   r¯   Útotal_timeoutÚno_progress_timeout©r   r   rO  )r,   rQ   s   "€r-   r.   Ú_CodexStreamGuard.__annotate__’  s-   ø€ ÷ 20ñ 20Ùð20Ù*2±5­/ð20á%¡e�_ñ20r/   c                óü  € Wn         W n        \        P                  ! 4       V n        \        V\        \        34      '       d   V^ 8”  d   \        V4      V n        M\        V n        Ve%   \        V P                  \        V4      4      V n        V P                  \        V4      ,           V n        \        4       p\        V\        \        34      '       d!   W@P                  8  d   \        V4      V n        \        P                  ! 4       V n        V P                  V P                  ,           V n        \        P$                  ! 4       V n        \        P$                  ! 4       V n        \        P$                  ! 4       V n        \        P$                  ! 4       V n        RV n        \1        4       '       d   \3        4       MRV n        \        P                  ! 4       V n        RV n        \        P:                  ! 4       V n        R# ©é    N)Ú_clientrí  r=  r>  Ú_startr?   rW  rO  rî  Ú'_AUX_STREAM_NO_PROGRESS_TIMEOUT_SECONDSÚminÚ_aux_stream_total_ceilingÚhard_deadlinerD  rè   ré   Ú_deadline_lockÚ_progress_deadlinerp  Úsaw_contentrô   Útimeout_release_pendingÚstream_finishedÚ_timerrÈ   rË   Ú_protected_cancel_checkÚ_attempt_stream_lockÚ_attempt_streamÚ	get_identÚ
_owner_tid)r9   r¯   rí  rî  r@  s   &&&& r-   r\   Ú_CodexStreamGuard.__init__’  sh  € ð ŒØ*ÔÜ—n’nÓ&ˆŒô Ð)¬C´¨<×8Ò8Ð=PÐSTÔ=TÜ',Ð-@Ó'AˆDÕ$ä'NˆDÔ$ð Ò$Ü'*¨4×+CÑ+CÄUÈ=ÓEYÓ'ZˆDÔ$Ø!Ÿ[™[Ô+DÀ]Ó+SÕSˆÔô 5Ó6ˆÜ�m¤c¬5 \×2Ò2°}×GYÑGYÔ7YÜ!& }Ó!5ˆDÔÜ'ŸnšnÓ.ˆÔØ"&§+¡+°×0HÑ0HÕ"HˆÔÜ$Ÿ?š?Ó,ˆÔÜ"ŸšÓ*ˆŒô (1§¢Ó'8ˆÔ$Ü(ŸšÓ0ˆÔØˆŒô G_×F`ÒF`Ô'@Ô'BÐfjˆÔ$Ü$-§N¢NÓ$4ˆÔ!Ø$(ˆÔä#×-Ò-Ó/ˆŽr/   c                ó    <€ V ^8„  d   QhRS[ /# r(   rý  )r,   rQ   s   "€r-   r.   rð  Æ  s   ø€ ÷ Dñ D¡Eñ Dr/   c                ó¨   € V P                   ;_uu_ 4        \        V P                  V P                  4      uuR R R 4       #   + '       g   i     R # ; ir8   )rú  r÷  rù  rû  rE   s   &r-   Úeffective_deadlineÚ$_CodexStreamGuard.effective_deadlineÆ  s3   € Ø× × Ó Ü�t×)Ñ)¨4×+BÑ+BÓC÷ !× × Ó ús   • A Á A	c                ó    <€ V ^8„  d   QhRS[ /# r(   rl   )r,   rQ   s   "€r-   r.   rð  Ê  s   ø€ ÷ Iñ I¡$ñ Ir/   c                óV   € V P                   p\        V4      ;'       d    \        V4      # )zITrue when the frozen hard-cancel source says the owner already cancelled.)r   rÔ   rÌ   )r9   rÍ   s   & r-   Úcancel_requestedÚ"_CodexStreamGuard.cancel_requestedÊ  s%   € à×,Ñ,ˆÜ˜‹×HÐHÔ#AÀ%Ó#HÐHr/   c                ó$   <€ V ^8„  d   QhRS[ RR/# ©r)   rÜ  r*   Nr9  )r,   rQ   s   "€r-   r.   rð  Ï  s   ø€ ÷ *ñ *¡3ð *¨4ñ *r/   c                ót   € V P                   ;_uu_ 4        Wn        R R R 4       R #   + '       g   i     R # ; ir8   )r  r  ©r9   rÜ  s   &&r-   Úadopt_streamÚ_CodexStreamGuard.adopt_streamÏ  s#   € Ø×&×&Ó&Ø#)Ô ÷ '×&×&Ò&ús   •&¦7	c                ó$   <€ V ^8„  d   QhRS[ RR/# r  r9  )r,   rQ   s   "€r-   r.   rð  Ó  s   ø€ ÷ (ñ (¡Sð (¨Tñ (r/   c                óŽ   € \        VR4       V P                  ;_uu_ 4        RV n        RRR4       R#   + '       g   i     R# ; i)z<Owner-side: close the attempt stream silently and forget it.N)ré  r  r  r  s   &&r-   Úrelease_streamÚ _CodexStreamGuard.release_streamÓ  s/   € ä�v˜tÔ$Ø×&×&Ó&Ø#'ˆDÔ ÷ '×&×&Ò&ús	   ¡3³A	c                ó$   <€ V ^8„  d   QhRS[ RR/# )r)   rå  r*   NrW   )r,   rQ   s   "€r-   r.   rð  Ù  s   ø€ ÷ -ñ -±ð -¸ñ -r/   c                ó&  € V P                   ;_uu_ 4        V P                  pRRR4       Xf   R# \        P                  ! 4       V P                  8w  d    \        V4      pVe   ^ RIHp V! V4       R# \        W!4       R#   + '       g   i     Lf; i)a  Wake only this attempt's stream, never the shared client. The owner thread closes it;
any other thread only ``shutdown()``s its socket, since ``Stream.close()`` would release the FD
under the owner's ``SSL_read`` (#70773, #130115). Socketless streams are closed as before.N)Ú_shutdown_socket)	r  r  rè   r  r  rã  râ  r  ré  )r9   rå  rÜ  Úsockr  s   &&   r-   Úclose_attempt_streamÚ&_CodexStreamGuard.close_attempt_streamÙ  sl   € ð ×&×&Ó&Ø×)Ñ)ˆF÷ 'àŠ>ÙÜ×ÒÓ  D§O¡OÔ3Ü)¨&Ó1ˆDØÒÝHÙ  Ô&ÙÜ�vÖ,÷ '×&ús   •B Â B	c                ó   <€ V ^8„  d   QhRR/# r½   rD   )r,   rQ   s   "€r-   r.   rð  é  s   ø€ ÷ Rñ R ñ Rr/   c                ó¾   € V P                   ;_uu_ 4        \        P                  ! 4       V P                  ,           V n        RRR4       R#   + '       g   i     R# ; i)zQSubstantive payload re-arms the no-progress window; the hard ceiling never moves.N)rú  r=  r>  rî  rû  rE   s   &r-   Úrecord_progressÚ!_CodexStreamGuard.record_progressé  s7   € à× × Ó Ü&*§n¢nÓ&6¸×9QÑ9QÕ&QˆDÔ#÷ !× × Ò ús   •,AÁA	c                ó    <€ V ^8„  d   QhRS[ /# r(   rW   )r,   rQ   s   "€r-   r.   rð  î  s   ø€ ÷ 
Tñ 
T¡ñ 
Tr/   c                ó   € \         P                  ! 4       V P                  ,
          p\         P                  ! 4       V P                  8¼  d#   R V P                  V P                  ,
          R R2# V P                  P                  4       '       g   R\        V P                  4      R RVR R2# R\         R\        V P                  4      R RVR R2# )	z*Codex auxiliary Responses stream exceeded z.1fzs hard ceilingz;Codex auxiliary Responses stream produced no output within zs (no-progress timeout, z
s elapsed)zCodex auxiliary Responses z: no new output for zs ()	r=  r>  rõ  rù  rü  rÓ   rO  rî  ÚCODEX_STREAM_STALL_MARKER)r9   Úelapseds   & r-   Útimeout_messageÚ!_CodexStreamGuard.timeout_messageî  sÔ   € Ü—.’.Ó" T§[¡[Õ0ˆÜ�>Š>Ó˜t×1Ñ1Ô1Ø?À×@RÑ@RÐUY×U`ÑU`Õ@`ÐadÐ?eÐesÐtÐtØ×Ñ×&Ñ&×(Ò(ðÜ × 8Ñ 8Ó9¸#Ð>Ð>VÐW^Ð_bÐVcÐcmðoðpð )Ô)BÐ(Cð DÜ˜×1Ñ1Ó2°3Ð7°s¸7À3¸-ÀzðSð	Tr/   c                ó   <€ V ^8„  d   QhRR/# r½   rD   )r,   rQ   s   "€r-   r.   rð  ú  s   ø€ ÷ 0]ñ 0]¨$ñ 0]r/   c                ó  € \        V P                  R R4      p\        V4      '       d   \        V! 4       4      pMV P	                  4       '       * pV P
                  P                  4        V'       g   V P                  R4       R# V P                  P                  4        \        P                  ! 4       V P                  8X  d   \        V P                  R4       M@ ^ RIHp V! V P                  4      p\         P#                  RV4       V P                  R	4        \)        V P                  4       R#   \$         d    \         P'                  RRR7        LMi ; i  \$         d    \         P'                  R
RR7        R# i ; i)rõ   Nz4cancelled attempt stream close during timeout failedz"client close during timeout failed)Úforce_close_tcp_socketsz]Codex auxiliary client aborted (timeout, tcp_force_closed=%d, deferred_close=stranger_thread)z3Codex auxiliary: client abort during timeout failedTrÜ   z:attempt stream close during stranger-thread timeout failedz1Codex auxiliary: cache eviction on timeout failed)rq   r   rÔ   rm   r  rô   rb  r  rý  rè   r  r  ré  rô  râ  r*  r­   ÚinforŸ   rÞ   Ú_evict_cached_client_instance)r9   rõ   Útimeout_wonr*  Úshutdown_counts   &    r-   Ú_close_client_on_timeoutÚ*_CodexStreamGuard._close_client_on_timeoutú  s?  € Ü '¨×(DÑ(DÐF]Ð_cÓ dÐÜÐ)×*Ò*ÜÑ4Ó6Ó7‰Kà"×3Ñ3Ó5Ô5ˆKð 	�‰×ÑÔßð ×%Ñ%Ð&\Ô]Ùð 	×$Ñ$×(Ñ(Ô*Ü×ÒÓ  D§O¡OÔ3Ü˜4Ÿ<™<Ð)MÕNðcÝOÙ!8¸¿¹Ó!F�Ü—‘ð6Ø7EôGð ×%Ñ%Ð&bÔcð	]ô *¨$¯,©,Ö7øô ô cÜ—‘ÐRÐ]a�Öbðcûô ô 	]Ü�L‰LÐLÐW[ˆL×\ð	]ús$   Ã.D1 ÄE Ä1"EÅEÅ"E?Å>E?c                ó   <€ V ^8„  d   QhRR/# r½   rD   )r,   rQ   s   "€r-   r.   rð  ,  s   ø€ ÷ ñ  ñ r/   c                óÔ  € V P                   er   \        P                  ! 4       V P                  4       8¼  dJ   V P                  P                  4       '       g   V P                  4        \        V P                  4       4      h ^ RI	H
p \        4       '       d   \        4       hV! 4       '       d   \        4       '       g   \        R4      hR # R #   \         d    h \         d     R # i ; i)N)Úis_interruptedz,Codex auxiliary Responses stream interrupted)rí  r=  r>  r  rô   rÓ   r/  r?  r&  Útools.interruptr3  rÎ   rº   rÈ   ÚInterruptedErrorrŸ   )r9   r3  s   & r-   Úcheck_cancelledÚ!_CodexStreamGuard.check_cancelled,  sº   € Ø×ÑÒ)¬d¯nªnÓ.>À$×BYÑBYÓB[Ô.[Ø—>‘>×(Ñ(×*Ò*Ø×-Ñ-Ô/Ü˜t×3Ñ3Ó5Ó6Ð6ð	Ý6ô /×0Ò0Ü3Ó5Ð5ñ ×ÒÔ(@×(BÒ(BÜ&Ð'UÓVÐVñ )CÑøäô 	ØÜô 	âð	ús   Â,C Â.C ÃC'Ã"C'Ã&C'c                ó   <€ V ^8„  d   QhRR/# r½   rD   )r,   rQ   s   "€r-   r.   rð  A  s   ø€ ÷ (ñ ( ñ (r/   c                ó.  € V P                  4       \        P                  ! 4       ,
          pV^ 8”  dT   V P                  P	                  4       '       g2   V P
                  P	                  4       '       g   V P                  V4       R# V P                  4        R# rò  )r  r=  r>  rô   rÓ   rþ  Ú
_arm_timerr/  )r9   Ú	remainings   & r-   Ú_watchdog_fireÚ _CodexStreamGuard._watchdog_fireA  sg   € ð ×+Ñ+Ó-´·²Ó0@Õ@ˆ	Ø�qŒ=Ø—N‘N×)Ñ)×+Ò+¨t×/CÑ/C×/JÑ/J×/LÒ/LØ—‘ 	Ô*ÙØ×%Ñ%Ö'r/   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r)   Údelayr*   Nrý  )r,   rQ   s   "€r-   r.   rð  K  s   ø€ ÷ ñ ¡ð ¨$ñ r/   c                ó‚   € \         P                  ! WP                  4      ;V n        pR Vn        VP                  4        R# r¬  )rè   ÚTimerr<  rÿ  rm  rs  )r9   r?  Úts   && r-   r:  Ú_CodexStreamGuard._arm_timerK  s-   € Ü#Ÿ/š/¨%×1DÑ1DÓEÐEˆŒ�aØˆŒØ	�‰Ž	r/   c                ó   <€ V ^8„  d   QhRR/# r½   rD   )r,   rQ   s   "€r-   r.   rð  P  s   ø€ ÷ ñ �tñ r/   c                óÐ   € V P                   '       dD   V P                  \        V P                  4       \        P
                  ! 4       ,
          R4      4       V P                  4        R# )zNArm the watchdog (when a total timeout exists) and run the first cancel check.rü  N)rí  r:  rÒ  r  r=  r>  r6  rE   s   &r-   rs  Ú_CodexStreamGuard.startP  sB   € à××ÐØ�O‰OœC × 7Ñ 7Ó 9¼D¿NºNÓ<LÕ LÈcÓRÔSØ×ÑÖr/   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r)   Ú_eventr*   Nr9  )r,   rQ   s   "€r-   r.   rð  V  s   ø€ ÷ ñ ™sð  tñ r/   c                óÆ   € \        V4      '       d6   V P                  4        V P                  P                  4        \	        4        M
\        4        V P                  4        R # r8   )r#   r   rü  rb  r  r  r6  )r9   rH  s   &&r-   Úon_eventÚ_CodexStreamGuard.on_eventV  sE   € ô $ F×+Ò+Ø× Ñ Ô"Ø×Ñ× Ñ Ô"Ü)Õ+ä'Ô)Ø×ÑÖr/   c                ó   <€ V ^8„  d   QhRR/# r½   rD   )r,   rQ   s   "€r-   r.   rð  d  s   ø€ ÷ Tñ T˜ñ Tr/   c                óú   € V P                   P                  4        V P                  e   V P                  P                  4        V P                  P                  4       '       d   \        V P                  R4       R# R# )z^Owner ``finally``: stop the watchdog and release FDs a stranger-thread timeout only shut down.Nz'owner-thread close after timeout failed)rþ  rb  rÿ  Úcancelrý  rÓ   ré  rô  rE   s   &r-   ÚfinishÚ_CodexStreamGuard.finishd  sY   € à×Ñ× Ñ Ô"Ø�;‰;Ò"Ø�K‰K×ÑÔ ð ×'Ñ'×.Ñ.×0Ò0Ü˜4Ÿ<™<Ð)RÖSñ 1r/   )r  r  rô  rú  r  rû  r   rõ  rÿ  rù  rî  rü  rþ  rô   rý  rí  r8   )rH   rI   rJ   rK   rL   r\   r  r  r  r  r  r   r&  r/  r6  r<  r:  rs  rJ  rO  rN   rO   rP   s   @r-   rë  rë  ˆ  s®   ø‡ € ñ÷20ò 20÷hDð D÷Ið I÷
*ð *÷(ð (÷-ð -÷ Rð R÷

Tð 
T÷0]ð 0]÷dð ÷*(ð (÷ð ÷
ð ÷ð ÷Tö Tr/   rë  c                   óZ   a € ] tR tRt o RtV 3R lR ltV 3R lR ltV 3R lR ltR	tV t	R
# )Ú_CodexCompletionsAdapterio  zXDrop-in shim routing chat.completions.create() kwargs through Codex Responses streaming.c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r)   Úreal_clientr³  ©r&   rX   )r,   rQ   s   "€r-   r.   Ú%_CodexCompletionsAdapter.__annotate__r  s   ø€ ÷ ñ ¡Fð ±3ñ r/   c                ó   € Wn         W n        R # r8   ©rô  Ú_model©r9   rU  r³  s   &&&r-   r\   Ú!_CodexCompletionsAdapter.__init__r  s   € Ø"ŒØŽr/   c                ól   <€ V ^8„  d   QhRS[ S[S[3,          RS[S[ S[S[3,          S[S[3,          /# ©r)   r;   r*   )r¤   rX   r   rù  )r,   rQ   s   "€r-   r.   rW  v  s>   ø€ ÷ [+ñ [+©d±3¹°8­nð [+ÁÁtÉCÑQTÈHÅ~ÑWZÑ\_ÐG_ÕA`ñ [+r/   c                ó  € ^ RI HpHpHpHpHpHp ^ RIHp VP                  RV P                  4      p	V! V	4      p
\        \        V P                  RR4      ;'       g    R4      p\        VR4      pV! \        RVR7      4      pVP                   pVP"                  pVP                  R	4      pV'       d>    ^ RIp^ R
IHpHp VP-                  \/        V4      4      pV! V4      w  ppV! V4      w  ppT! V! V4      R\        V P                  RR4      ;'       g    RRV/V4      w  ppVP7                  4        UUu/ uF	  w  ppVVbK  	  pppRp. pVP                  R. 4       EF  pVP                  R4      ;'       g    RpVP                  RR4      R8X  d&   \9        V\        4      '       d   TM
\        V4      pK[  V'       d¦   VP                  R4      '       d�   / VCRVR,           Uu. uFt  p\9        V\:        4      '       dZ   VP                  R4      ;'       g    / P                  R4      V9   d+   / VCR/ VR,          CRVVR,          R,          ,          /C/CMTNKv  	  up/CpVP=                  V4       EK  	  V! R8RV/VP?                  4       B p V! VVV V
RR7      p!RT
RTRT!;'       g    V! RR4      .RR/p"VP                  R4      p#V#e   V#V"R&   \9        VP                  R4      \:        4      '       d%   VR,          '       d   \;        VR,          4      V"R&   VP                  R4      ;'       g    / p$\9        V$\:        4      '       Ed   V$P                  R4      p%\9        V%\        4      '       d2   V%PA                  4       '       d   V'       g   V%PA                  4       V"R&   V$P                  R 4      p&\9        V&\:        4      '       d†   ^ R!I!H"p' ^ R"IH#p( V(! W›VPH                  R#7      p)V)'       dH   V&P                  R$4      RJd3   T'! V&P                  R%4      ;'       g    R&V)4      p*R%V*R'R(/V"R &   R).V"R*&   MR+V)9   d   V'       g   R%R+/V"R &   V'       d   VV"R	&   V'       d   VV"R,&   T V"R-&    ^ R.IH%p+H&p, ^ R/IH'p- V'       ga   V'       gY   R0V"9  dR   T+! \Q        R14      ;'       g    \Q        R24      4      p.V,! V"R,          V"P                  R	4      V.4      p/V/'       d   V/V"R0&   R3V"9  d   V-! W›4      p0V0'       d   V0V"R3&   ^ R7IH*p1 T1! T"Y›4       T"T	T#3#   \0         d"   p\2        P5                  RT4        Rp?ELVRp?ii ; iu uppi u upi   \0         d    \2        PS                  R4R5R67        Lri ; i)9ut   chat.completions kwargs â†’ Responses API kwargs, ``(resp_kwargs, model, timeout)``; mirrors codex.py::build_kwargs.)Ú!_chat_messages_to_responses_inputÚ_classify_responses_issuerÚ_responses_toolsÚ_role_message_itemÚ_wire_model_identityÚclassify_responses_route)Ú_alias_wire_toolsr³  rV   rj   úgithubcopilot.comN©rŸ  rV   Útools)Ústrip_pattern_and_formatÚstrip_slash_enumzRAuxiliary client: failed to sanitize tool schemas for Codex/xAI Responses path: %srŸ  Ú_hermes_aux_effective_providerzYou are a helpful assistant.ÚmessagesÚcontentÚroleÚuserÚsystemÚ
tool_callsÚfunctionr`   F)Úis_github_responsesÚcurrent_issuer_kindÚcurrent_issuer_modelÚnative_compaction_eligibleÚinstructionsÚinputÚstorer  rZ  Ú
extra_bodyÚservice_tierÚ	reasoning)Úclamp_effort)Ú_codex_efforts_for_route)Úis_codex_backendÚenabledÚeffortÚmediumÚsummaryr¢  zreasoning.encrypted_contentÚincludeÚnoneÚ_wire_aliasesÚ_issuer_kind)Ú_cache_scope_from_session_idÚ_content_cache_key)Ú+_default_prompt_cache_retention_for_requestÚprompt_cache_keyÚcache_scopeÚ
session_idÚprompt_cache_retentionz4Codex auxiliary: prompt_cache_key derivation skippedTrÜ   )Ú_sanitize_astra_request_kwargsrD   )+Úagent.codex_responses_adapterr`  ra  rb  rc  rd  re  Úagent.transports.codexrf  rž   rZ  rX   rq   rô  rŠ   r   Úis_xai_responsesrt  ÚcopyÚtools.schema_sanitizerrj  rk  ÚdeepcopyÚlistrŸ   r­   r®   r‡  r?   r¤   ÚappendÚ_asdictr¨  Úagent.reasoning_effortr~  r  r€  r‰  rŠ  r‹  Ú_runtime_main_valuerÞ   r�  )2r9   r;   r`  ra  rb  rc  rd  re  rf  r³  Ú
wire_modelrŽ  Ú
is_copilotÚrouteÚis_xaiÚ	is_githubri  Ú_copyrj  rk  Ú_rc  Ú
wire_toolsÚwire_aliasesÚaliasÚoriginalÚrenamedrx  Úreplay_messagesÚmsgrn  ÚtcÚissuer_kindÚinput_itemsÚresp_kwargsr  r{  r|  Úreasoning_cfgr~  r  Ú	supportedr‚  r‰  rŠ  r‹  ÚscopeÚ	cache_keyÚcache_retentionr�  s2   &&                                                r-   Ú_build_responses_kwargsÚ0_CodexCompletionsAdapter._build_responses_kwargsv  sB  € ÷	
÷ 	
õ 	=Ø—
‘
˜7 D§K¡KÓ0ˆÙ)¨%Ó0ˆ
Ü”7˜4Ÿ<™<¨°RÓ8×>Ð>¸BÓ?ˆÜ*¨4Ð1DÓEˆ
á(¬À$ÐQUÔ)VÓWˆØ×'Ñ'ˆØ×-Ñ-ˆ	Ø—
‘
˜7Ó#ˆßð
Û$ß]ØŸ™¤t¨E£{Ó3�Ù3°EÓ:‘��qÙ+¨EÓ2‘��qñ $5Ù˜UÓ#Øœ §¡Ð/OÐQSÓT×\Ð\ÐX\Ð^hÐjnÐoØó$
Ñ ˆ
�Lð
 ;G×:LÑ:LÔ:NÔOÑ:N¡ u¨h�8˜U’?Ñ:NˆÑOð 6ˆØ02ˆØ—:‘:˜j¨"×-ˆCØ—g‘g˜iÓ(×.Ð.¨BˆGØ�w‰w�v˜vÓ&¨(Ô2Ü*4°W¼c×*BÒ*B™wÌÈGË�Ùç˜3Ÿ7™7 <×0Ò0ð˜ð ˜lð " ,Ö/ó-ñ 0˜ô " "¤d×+Ò+°·±¸
Ó1C×1IÐ1IÀr×0NÑ0NÈvÓ0VÐZaÔ0að d�rÐc˜:Ð'b¨"¨Z­.Ð'b¸&À'È"ÈZÍ.ÐY_ÕJ`ÕBaÑ'bÒcØgiòjá/ñ-ñ �ð
 ×"Ñ" 3×'ñ .ñ( 1ÑR¸$ÐRÀ%Ç-Á-Ã/ÑRˆÙ7Ø°Ø +Ø!+Èô
ˆð �Z °Ø�[×DÐDÑ%7¸ÀÓ%CÐ$DÀgÈuð'
ˆð —*‘*˜YÓ'ˆØÒØ%,ˆK˜	Ñ"ô �f—j‘j Ó1´4×8Ò8¸VÀO×=TÔ=TÜ+/°°Õ0GÓ+HˆK˜Ñ(à—Z‘Z Ó-×3Ð3°ˆ
Ü�j¤$×'Ó'à%Ÿ>™>¨.Ó9ˆLÜ˜,¬×,Ò,°×1CÑ1C×1EÒ1EÏfØ.:×.@Ñ.@Ó.B�˜NÑ+Ø&ŸN™N¨;Ó7ˆMÜ˜-¬×.Ò.õ
 @ÝKÙ4°UÐSX×SiÑSiÔj�	ß ×!2Ñ!2°9Ó!=ÀUÓ!Já)¨-×*;Ñ*;¸HÓ*E×*QÐ*QÈÐS\Ó]�FØ08¸&À)ÈVÐ/T�K Ñ,Ø.KÐ-L�K 	Ò*Ø˜yÔ(·Ø08¸&Ð/A�K Ñ,ßØ#-ˆK˜Ñ ßØ+7ˆK˜Ñ(à&1ˆ�NÑ#ð
	`÷ `ÝZßŸiÐ-?À{Ô-RÙ4Ü'¨Ó6×[Ð[Ô:MÈlÓ:[ó�ñ /¨{¸>Õ/JÈKÏOÉOÐ\cÓLdÐfkÓl�	ßØ6?�KÐ 2Ñ3Ø'¨{Ô:Ù"MÈeÓ"Z�ß"Ø<K�KÐ 8Ñ9õ 	JÙ& {°EÔ@Ø˜E 7Ð*Ð*øôi ô Ü—‘ð3Ø47÷ò ûðüó Pùò-øôf ô 	`Ü�L‰LÐOÐZ^ˆLÖ_ð	`úsU   Â6<T! Ä;UÇ,2U
ÈAU
Ñ;U ÒU ÒU Ò47U Ó,!U Ô!UÔ,UÕUÕ"V Õ?V c                ó    <€ V ^8„  d   QhRS[ /# r(   r9  )r,   rQ   s   "€r-   r.   rW    s   ø€ ÷ BKñ BK¡#ñ BKr/   c           
     óâ  € ^ RI Hp T! \        V P                  RR4      \	        \        V P                  RR4      ;'       g    R4      4      '       d   \        R4      hV P                  V4      w  r4pVP                  RR4      ;'       g    / pVP                  RR4      p\	        VP                  R	4      ;'       g    T4      p\        V\        \        34      '       d
   V^ 8”  d   TMRp	\        V P                  W‘P                  R
4      R7      p
 V
P                  4        ^ RIHp ^ RIHp V! / VCRR/C4      pV P                  P$                  P&                  ! R/ VB pV
P)                  V4       V
P*                  P-                  4       '       d(   V
P/                  4       '       d   V
P1                  R4        \3        VR4      '       d   TpMV! WèV
P4                  R7      pV
P7                  V4       Vf   \9        R4      h^ RIHp V! W÷VR7      w  ppppT;'       g    R FL  pVP>                  P@                  V9   g   K   VVP>                  P@                  ,          VP>                  n         KN  	   T
PM                  4        \O        RRPQ                  T4      PS                  4       ;'       g    RT;'       g    RR7      p\O        ^ TTR7      p\O        T.TTR7      #   T
P7                  T4       i ; i  \B         dW   pT
P*                  P-                  4       '       d   \E        T
PG                  4       4      Th\H        PK                  RT4       h Rp?ii ; i  T
PM                  4        i ; i)ró  ©Úis_actual_routerl  rj   rV   zFActual requests require Chat Completions; refusing to call /responses.r‡  Nrˆ  r³  rî  )rî  )Ú_consume_codex_event_stream)Úbypass_sdk_request_transformrÜ  Tz*late cancelled attempt stream close failedÚoutput)r³  rJ  z@Codex auxiliary Responses stream did not return a final response)Ú_parse_codex_final_response)r«  Úissuer_modelz-Codex auxiliary Responses API call failed: %sÚ	assistant)ro  rn  rr  ©rþ  ÚmessageÚfinish_reason©Úchoicesr³  ÚusagerD   )*Úhermes_cli.providersr¸  rq   rô  rX   r”  r³  Úpoprž   r?   rW  rO  rë  rs  Úagent.codex_runtimer¹  Úagent.sdk_transform_bypassrº  Ú	responsesÚcreater  rô   rÓ   r  r  ÚhasattrrJ  r  rc   Úagent.auxiliary_codex_responser¼  rs  r`   rŸ   r?  r&  r­   rÞ   rO  r   Újoinr¨  )r9   r;   r¸  r­  r³  r  r¤  r«  r½  rí  Úguardr¹  rº  Ústream_kwargsÚevent_streamÚfinalr¼  Ú
text_partsÚtool_calls_rawrÄ  rÁ  rª  rc  rÀ  Úchoices   &,                       r-   rÊ  Ú_CodexCompletionsAdapter.create  sç  € Ý8áÜ�D—L‘LÐ"BÀBÓGÜ”˜Ÿ™ j°"Ó5×;Ð;¸Ó<÷
ò 
ô ØXóð ð '+×&BÑ&BÀ6Ó&JÑ#ˆ˜GØ"—‘ ¸Ó=×CÐCÀˆØ!—o‘o n°dÓ;ˆÜ˜;Ÿ?™?¨7Ó3×<Ð<°uÓ=ˆÜ#-¨g¼¼U°|×#DÒ#DÈÐSTÌ™ÐZ^ˆÜ! $§,¡,°×S]ÑS]Ð^sÓStÔuˆð(	Ø�K‰KŒMÝGÝOá8Ð9X¸KÐ9XÈÐSWÑ9XÓYˆMØŸ<™<×1Ñ1×8Ò8ÑI¸=ÑIˆLØ×Ñ˜|Ô,ð �‰×%Ñ%×'Ò'¨E×,BÑ,B×,DÒ,DØ×*Ñ*Ð+WÔXð
3ô ˜<¨×2Ò2Ø(‘Eá7Ø$À5Ç>Á>ô�Eð ×$Ñ$ \Ô2ØŠ}Ü"Ð#eÓfÐfÝRá?ZØ¸\ô@Ñ<ˆJ˜¨¨}ð %×*Ð*¨Ò*�Ø—;‘;×#Ñ# |Ö3Ø'3°B·K±K×4DÑ4DÕ'E�B—K‘KÖ$ò +ð �L‰LŒNä!Ø b§g¡g¨jÓ&9×&?Ñ&?Ó&A×&IÐ&IÀTØ%×-Ð-¨ô
ˆô ! q°'ÈÔWˆÜ¨ x°uÀEÔJÐJøð3 ×$Ñ$ \Õ2ûô ô 	Ø�‰×%Ñ%×'Ò'Ü" 5×#8Ñ#8Ó#:Ó;ÀÐDÜ�L‰LÐHÈ#ÔNØûð		ûð �L‰L�NúsP   ÄBK8 Æ)K8 Æ;)K" Ç$=K8 È"K8 É0K8 Ë"K5Ë5K8 Ë8MÌAMÍMÍM ÍM.rY  N)
rH   rI   rJ   rK   rL   r\   r³  rÊ  rN   rO   rP   s   @r-   rR  rR  o  s-   ø‡ € Ùb÷ð ÷[+ð [+÷zBKö BKr/   rR  c                   ó6   a € ] tR tRt o RtV 3R lR ltRtV tR# )Ú	_ChatShimiX  zJExposes ``client.chat.completions.create()`` over a sync or async adapter.c                ó    <€ V ^8„  d   QhRS[ /# )r)   Úadapterr9  )r,   rQ   s   "€r-   r.   Ú_ChatShim.__annotate__[  s   ø€ ÷ #ñ #¡ñ #r/   c                ó   € Wn         R # r8   ©Úcompletions)r9   rÙ  s   &&r-   r\   Ú_ChatShim.__init__[  s   € Ø"Ör/   rÜ  N©rH   rI   rJ   rK   rL   r\   rN   rO   rP   s   @r-   r×  r×  X  s   ø‡ € ÙT÷#ö #r/   r×  c                   óH   a € ] tR tRt o RtV 3R lR ltV 3R lR ltRtV tR# )	Ú_AsyncCompletionsAdapteri_  zJAsync adapter: runs the sync adapter's ``create`` via asyncio.to_thread().c                ó    <€ V ^8„  d   QhRS[ /# )r)   Úsync_adapterr9  )r,   rQ   s   "€r-   r.   Ú%_AsyncCompletionsAdapter.__annotate__b  s   ø€ ÷ "ñ "¡Sñ "r/   c                ó   € Wn         R # r8   ©Ú_sync)r9   rã  s   &&r-   r\   Ú!_AsyncCompletionsAdapter.__init__b  s   € Ø!Ž
r/   c                ó    <€ V ^8„  d   QhRS[ /# r(   r9  )r,   rQ   s   "€r-   r.   rä  e  s   ø€ ÷ Dñ D©ñ Dr/   c              ‹  ót   "  € ^ RI pVP                  ! V P                  P                  3/ VB G Rj  x€L
 #  L5irò  )ÚasyncioÚ	to_threadrç  rÊ  )r9   r;   rë  s   &, r-   rÊ  Ú_AsyncCompletionsAdapter.createe  s.   é € ÛØ×&Ò& t§z¡z×'8Ñ'8ÑC¸FÑC×CÐCÑCùs   ‚/8±6²8ræ  N©	rH   rI   rJ   rK   rL   r\   rÊ  rN   rO   rP   s   @r-   rá  rá  _  s   ø‡ € ÙT÷"ð "÷Dö Dr/   rá  c                   ó6   a € ] tR tRt o RtV 3R lR ltRtV tR# )Ú_AsyncAuxiliaryClientBaseij  zíAsync-compatible wrapper matching AsyncOpenAI.chat.completions.create().

Mirrors ``_real_client`` (when the sync wrapper has one) so cache eviction by
leaf OpenAI client drops this async entry too instead of reusing a closed transport.
c                ó    <€ V ^8„  d   QhRS[ /# )r)   Úsync_wrapperr9  )r,   rQ   s   "€r-   r.   Ú&_AsyncAuxiliaryClientBase.__annotate__q  s   ø€ ÷ 
:ñ 
:¡Sñ 
:r/   c                óî   € \        \        VP                  P                  4      4      V n        VP                  V n        VP
                  V n        \        VR 4      '       d   VP                  V n        R# R# )Ú_real_clientN)r×  rá  ÚchatrÝ  rU   rV   rË  rõ  )r9   rò  s   &&r-   r\   Ú"_AsyncAuxiliaryClientBase.__init__q  s\   € ÜÔ6°|×7HÑ7H×7TÑ7TÓUÓVˆŒ	Ø#×+Ñ+ˆŒØ$×-Ñ-ˆŒÜ�< ×0Ò0ð !-× 9Ñ 9ˆDÖñ 1r/   ©rõ  rU   rV   rö  Nrß  rP   s   @r-   rð  rð  j  s   ø‡ € ñ÷
:ö 
:r/   rð  c                   ó<   a € ] tR tRt o RtV 3R lR ltR tRtV tR# )ÚCodexAuxiliaryClienti�  zpOpenAI-client-compatible wrapper routing through the Codex Responses API (.api_key/.base_url for introspection).c                ó&   <€ V ^8„  d   QhRS[ RS[/# rT  rV  )r,   rQ   s   "€r-   r.   Ú!CodexAuxiliaryClient.__annotate__„  s   ø€ ÷ -ñ -¡Fð -±3ñ -r/   c                óˆ   € Wn         \        \        W4      4      V n        VP                  V n        VP
                  V n        R # r8   )rõ  r×  rR  rö  rU   rV   r[  s   &&&r-   r\   ÚCodexAuxiliaryClient.__init__„  s4   € Ø'ÔÜÔ6°{ÓJÓKˆŒ	Ø"×*Ñ*ˆŒØ#×,Ñ,ˆŽr/   c                ó:   € V P                   P                  4        R # r8   )rõ  rè  rE   s   &r-   rè  ÚCodexAuxiliaryClient.closeŠ  s   € Ø×Ñ×ÑÖ!r/   rø  N©	rH   rI   rJ   rK   rL   r\   rè  rN   rO   rP   s   @r-   rú  rú  �  s   ø‡ € Ùz÷-ð -÷"ð "r/   rú  c                   ó   € ] tR tRtRtR# )ÚAsyncCodexAuxiliaryClientiŽ  rD   N©rH   rI   rJ   rK   rN   rD   r/   r-   r  r  Ž  ó   † Ûr/   r  c                óV   € V ^8„  d   QhR\         \        \        3,          R\        RR/# )r)   Úanthropic_kwargsÚresponse_formatr*   N©r¤   rX   r   )r,   s   "r-   r.   r.   ’  s0   € ÷ Hñ H¼4ÄÄSÀ½>ð HÔ\_ð HÐdhñ Hr/   c                ób  € \        V\        4      '       g   R# VP                  R4      pVR8X  d;   VP                  R4      p\        V\        4      '       d   RV9  d   R# VR,          pMVR8X  d   RR/pMR# V P                  R4      p\        V\        4      '       g   / pWPR&   RRRV/VR&   R# )	zAMerge an OpenAI response format into Anthropic ``output_config``.Nr+   Újson_schemaÚschemaÚjson_objectrè  Úoutput_configr,   )r?   r¤   rž   )r  r  Úformat_typer  r  r  s   &&    r-   Ú$_translate_anthropic_response_formatr  ’  s­   € ä�o¤t×,Ò,ÙØ!×%Ñ% fÓ-€KØ�mÔ#Ø%×)Ñ)¨-Ó8ˆÜ˜+¤t×,Ò,°ÀÔ0KÙØ˜XÕ&‰Ø	˜Ô	%à˜(Ð#‰áØ$×(Ñ(¨Ó9€MÜ�m¤T×*Ò*ØˆØ,9˜Ñ)Ø% }°hÀÐG€M�(Ór/   c                   óL   a € ] tR tRt o RtR	V 3R lR lltV 3R lR ltRtV tR# )
Ú_AnthropicCompletionsAdapteri¨  z<OpenAI-client-compatible adapter for Anthropic Messages API.Nc          	      ó@   <€ V ^8„  d   QhRS[ RS[RS[RS[R,          /# )r)   rU  r³  Úis_oauthrV   Nrz  )r,   rQ   s   "€r-   r.   Ú)_AnthropicCompletionsAdapter.__annotate__«  s0   ø€ ÷ 3ñ 3¡Cð 3±ð 3¹tð 3ÑWZÐ]aÕWañ 3r/   c                óŽ  € Wn         W n        W0n        T;'       g    R V n        V P                  '       g|   \	        \        VRR4      ;'       g    R4      ;'       g    R pV'       dH   \        P                  ! \        4      ;_uu_ 4        ^ RI	H
p V! V4      '       d   WPn        R R R 4       R # R # R #   + '       g   i     R # ; i)NrV   rj   )Ú_is_nous_portal_endpoint)rô  rZ  Ú	_is_oauthÚ	_base_urlrX   rq   r–  r—  rŸ   Úagent.anthropic_endpointsr  )r9   rU  r³  r  rV   Ú	candidater  s   &&&&&  r-   r\   Ú%_AnthropicCompletionsAdapter.__init__«  s“   € Ø"ŒØŒØ!Œð "×)Ð) TˆŒØ�~�~ˆ~ÜœG K°¸RÓ@×FÐFÀBÓG×OÐOÈ4ˆIßÜ×(Ò(¬×3Õ3ÝRÙ/°	×:Ò:Ø)2œ÷ 4Ñ3ñ ñ ÷ 4×3Ð3ús   Â
B3Â3C	c                ó    <€ V ^8„  d   QhRS[ /# r(   r9  )r,   rQ   s   "€r-   r.   r  º  s   ø€ ÷ ^Kñ ^K¡#ñ ^Kr/   c                ó	  € ^ RI HpHp ^ RIHp VP                  RV P                  4      pVP                  RR4      '       d   RpM*VP                  R4      ;'       g    VP                  R4      pVP                  R	4      pVP                  R
4      pVfS   VP                  R4      p	\        V	\        4      '       d   V	P                  R4      MRp
\        V
\        4      '       d   T
pVP                  R4      p\        V\        4      '       d_   \        VP                  RR4      4      P                  4       pVR8X  d#   VP                  R/ 4      P                  R4      pM$VR$9   d   TMRpM\        V\        4      '       g   RpV! WQP                  R. 4      VP                  R4      WhVV P                  V P                  R7      pVe   ^ RI Hp V! V4      '       g   W}R	&   \        VP                  R4      \        4      '       d9   VR,          '       d*   / VP                  R4      ;'       g    / CVR,          CVR&   VP                  R4      pVe   \        Wß4       VP                  R4      pV'       dÆ   \        V\        4      '       d°   \        VVP                  R4      4       VP!                  4        UUu/ uF4  w  ppVR%9  g   K  \        V4      P#                  R4      '       d   K1  VVbK6  	  pppV'       d=   VP                  R4      ;'       g    / p\        V\        4      '       g   / p/ VCVCVR&   T! V P$                  T\'        4       '       d   \)        4       MRR7      pV! R4      P+                  VV P                  R7      pRp\-        VR4      '       d‰   VP.                  '       dw   \1        VP.                  R^ 4      ;'       g    ^ p\1        VP.                  R^ 4      ;'       g    ^ p\3        TT\1        VP.                  R^ 4      ;'       g
    VV,           R 7      p\3        ^ \3        VP4                  VP6                  VP8                  R!7      VP:                  R"7      p\3        V.VVR#7      # u uppi )&ró  )Úbuild_anthropic_kwargsÚcreate_anthropic_message)Úget_transportr³  Ú_skip_zai_max_tokensFNÚ
max_tokensÚmax_completion_tokensÚtemperatureÚ_reasoning_configr{  r}  Útool_choicer+   rj   rs  r`   rm  ri  )r³  rm  ri  r#  Úreasoning_configr'  r  rV   ©Ú_forbids_sampling_paramsrZ  r  r¢  )Úon_stream_eventÚanthropic_messages)Ústrip_tool_prefixrÄ  Úinput_tokensÚoutput_tokensÚtotal_tokens)Úprompt_tokensÚcompletion_tokensr0  )rn  rr  r}  r¿  rÂ  >   r¢  r†  Úrequired>   r}  r  )Úagent.anthropic_adapterr  r   Úagent.transportsr!  rž   rZ  rÆ  r?   r¤   rX   r©  r  r  r*  r  r‡  rª  rô  r  rE  Únormalize_responserË  rÄ  rq   r   rn  rr  r}  rÁ  )r9   r;   r  r   r!  r³  r#  r%  r®  Ú_ebÚ_rcr'  Úchoice_typer  r*  Útop_level_response_formatÚcaller_extra_bodyr‰  rŠ  ÚpassthroughÚexistingrß  Ú_nrrÄ  r1  r2  rÔ  s   &,                         r-   rÊ  Ú#_AnthropicCompletionsAdapter.createº  sé  € ß\Ý2Ø—
‘
˜7 D§K¡KÓ0ˆð �:‰:Ð,¨e×4Ò4Ø‰JàŸ™ LÓ1×XÐX°V·Z±ZÐ@WÓ5XˆJØ—j‘j Ó/ˆð Ÿ
™
Ð#6Ó7ˆØÒ Ø—*‘*˜\Ó*ˆCÜ*4°S¼$×*?Ò*?�#—'‘'˜+Ô&ÀTˆCÜ˜#œt×$Ò$Ø #�à—j‘j Ó/ˆÜ�k¤4×(Ò(Ü˜kŸo™o¨f°bÓ9Ó:×@Ñ@ÓBˆKØ˜jÔ(Ø)Ÿo™o¨j¸"Ó=×AÑAÀ&ÓI‘à-8Ð<XÔ-X™kÐ^b‘Ü˜K¬×-Ò-ØˆKÙ1Ø§*¡*¨Z¸Ó"<ÀFÇJÁJÈwÓDWØ!È{Ø—^‘^ð —^‘^ô
Ðð Ò"ÝHÙ+¨E×2Ò2Ø2= Ñ/ô �f—j‘j Ó1´4×8Ò8¸VÀO×=TÔ=Tð1Ø#×'Ñ'¨Ó8×>Ð>¸Bð1à˜Õ)ð1Ð˜_Ñ-ð %+§J¡JÐ/@Ó$AÐ!Ø$Ò0Ü0Ð1AÔ]Ø"ŸJ™J |Ó4Ðß¤Ð,=¼t×!DÒ!DÜ0Ð1AÐCT×CXÑCXÐYjÓCkÔlà!2×!8Ñ!8Ô!:ôÙ!:™˜˜AØÐ<Ñ<ô ÜEHÈÃV×EVÑEVÐWZ×E[ô ��1’Ñ!:ð ñ ÷ Ø+×/Ñ/°Ó=×CÐCÀ�Ü! (¬D×1Ò1Ø!�HØ1L°HÐ1LÀÐ1LÐ  Ñ.Ù+Ø�L‰LØô DX×CYÒCYÔ=Ô?Ð_cô
ˆñ Ð0Ó1×DÑDÀXÐae×aoÑaoÐDÓpˆØˆÜ�8˜W×%Ò%¨(¯.¯.¨.Ü# H§N¡N°NÀAÓF×KÐKÈ!ˆMÜ '¨¯©¸ÈÓ K× PÐ PÈqÐÜ#Ø+Ð?PÜ$ X§^¡^°^ÀQÓG×nÐnÈMÐ\mÕLmôˆEô
 !ØÜ#¨C¯K©KÀCÇNÁNÐ^a×^kÑ^kÔlØ×+Ñ+ô
ˆô
 ¨ x°uÀEÔJÐJùóAs   Ê<Q<ËQ<Ë/Q<)r  rô  r  rZ  r«  rî  rP   s   @r-   r  r  ¨  s    ø‡ € ÙF÷3ò 3÷^Kö ^Kr/   r  c                   ó@   a € ] tR tRt o RtRV 3R lR lltR tRtV tR# )	ÚAnthropicAuxiliaryClienti  z@OpenAI-client-compatible wrapper over a native Anthropic client.c          
      ó8   <€ V ^8„  d   QhRS[ RS[RS[RS[RS[/# )r)   rU  r³  rU   rV   r  rz  )r,   rQ   s   "€r-   r.   Ú%AnthropicAuxiliaryClient.__annotate__  s1   ø€ ÷ !ñ !¡Cð !±ð !¹cð !ÉSð !Ñ\`ñ !r/   c           	     ó`   € Wn         \        \        WWTR 7      4      V n        W0n        W@n        R# ))r  rV   N)rõ  r×  r  rö  rU   rV   )r9   rU  r³  rU   rV   r  s   &&&&&&r-   r\   Ú!AnthropicAuxiliaryClient.__init__  s'   € Ø'ÔÜÔ:¸;ÐX`ÔtÓuˆŒ	ØŒØ Žr/   c                óh   € \        V P                  R R4      p\        V4      '       d
   V! 4        R# R# )rè  N)rq   rõ  rÔ   )r9   Úclose_fns   & r-   rè  ÚAnthropicAuxiliaryClient.close$  s+   € Ü˜4×,Ñ,¨g°tÓ<ˆÜ�H×ÒÙŽJñ r/   rø  N©Fr  rP   s   @r-   rA  rA    s   ø‡ € ÙJ÷!ò !÷ð r/   rA  c                   ó   € ] tR tRtRtR# )ÚAsyncAnthropicAuxiliaryClienti*  rD   Nr  rD   r/   r-   rK  rK  *  r  r/   rK  c                   óH   a € ] tR tRt o RtV 3R lR ltV 3R lR ltRtV tR# )	Ú_BedrockCompletionsAdapteri.  zGTranslates ``chat.completions.create(**kwargs)`` into Bedrock Converse.c                ó&   <€ V ^8„  d   QhRS[ RS[ /# ©r)   Úregionr³  rW   )r,   rQ   s   "€r-   r.   Ú'_BedrockCompletionsAdapter.__annotate__1  s   ø€ ÷ ñ ™sð ©3ñ r/   c                ó   € Wn         W n        R # r8   )Ú_regionrZ  ©r9   rP  r³  s   &&&r-   r\   Ú#_BedrockCompletionsAdapter.__init__1  s   € ØŒØŽr/   c                ó    <€ V ^8„  d   QhRS[ /# r(   r9  )r,   rQ   s   "€r-   r.   rQ  5  s   ø€ ÷ ñ ¡#ñ r/   c                ó¢  € ^ RI Hp VP                  RV P                  4      pVP                  R4      ;'       g    VP                  R4      pVP                  R4      p\	        V\
        4      '       d   V.pVP                  R4      e&   \        P                  RVP                  R4      4       VP                  R	4      '       d   \        P                  R
V4       T! V P                  Y1P                  R. 4      VP                  R4      V'       d   \        V4      MRVP                  R4      VP                  R4      VR7      p\        4        V# )ró  )Úcall_converser³  r#  r$  Ústopr'  NuV   BedrockAuxiliaryClient: tool_choice=%r not supported by the Converse shim â€” ignored.rÜ  u›   BedrockAuxiliaryClient: stream=True requested for %s â€” returning a complete response (Converse shim does not stream); caller downgrades to non-streaming.rm  ri  r%  Útop_p)rP  r³  rm  ri  r#  r%  rZ  Ústop_sequences)Úagent.bedrock_adapterrX  rž   rZ  r?   rX   r­   rÞ   rS  rW  r  )r9   r;   rX  r³  r#  rY  rß  s   &,     r-   rÊ  Ú!_BedrockCompletionsAdapter.create5  s  € Ý7Ø—
‘
˜7 D§K¡KÓ0ˆØ—Z‘Z Ó-×TÐT°·±Ð<SÓ1Tˆ
à�z‰z˜&Ó!ˆÜ�dœC× Ò Ø�6ˆDØ�:‰:�mÓ$Ò0ä�L‰Lð-Ø.4¯j©j¸Ó.Gôð �:‰:�h×Òô �L‰LðWØX]ôñ !Ø—<‘< u·z±zÀ*ÈbÓ7QÐY_×YcÑYcÐdkÓYl÷ +5”s˜:”¸$ÈFÏJÉJÐWdÓLeØ—*‘*˜WÓ%°dô
ˆô 	&Ô'Øˆr/   )rZ  rS  Nrî  rP   s   @r-   rM  rM  .  s   ø‡ € ÙQ÷ð ÷ö r/   rM  c                   ó<   a € ] tR tRt o RtV 3R lR ltR tRtV tR# )ÚBedrockAuxiliaryClientiW  z?OpenAI-client-compatible wrapper over AWS Bedrock Converse API.c                ó&   <€ V ^8„  d   QhRS[ RS[ /# rO  rW   )r,   rQ   s   "€r-   r.   Ú#BedrockAuxiliaryClient.__annotate__Z  s   ø€ ÷ Jñ J™sð J©3ñ Jr/   c                ót   € Wn         W n        \        \        W4      4      V n        R V n        RV R2V n        R# )úaws-sdkúhttps://bedrock-runtime.ú.amazonaws.comN)rS  rZ  r×  rM  rö  rU   rV   rT  s   &&&r-   r\   ÚBedrockAuxiliaryClient.__init__Z  s5   € ØŒØŒÜÔ8¸ÓGÓHˆŒ	Ø ˆŒØ2°6°(¸.ÐIˆŽr/   c                ó   € R # r8   rD   rE   s   &r-   rè  ÚBedrockAuxiliaryClient.closea  s   € Ùr/   )rZ  rS  rU   rV   rö  Nr  rP   s   @r-   r_  r_  W  s   ø‡ € ÙI÷Jð J÷ð r/   r_  c                   ó   € ] tR tRtRtR# )ÚAsyncBedrockAuxiliaryClientie  rD   Nr  rD   r/   r-   rj  rj  e  r  r/   rj  c                ó0   € V ^8„  d   QhR\         R\        /# r’   r.  )r,   s   "r-   r.   r.   i  s   € ÷ kñ k´#ð k¼$ñ kr/   c                ó`  € T ;'       g    RP                  4       P                  4       P                  R4      pV'       g   R# \        V4      P                  P                  R4      P                  R4      '       d   R# \        V4      pVR8H  ;'       g    \        VR8H  ;'       d    RV9   4      # )	a  True if ``base_url`` speaks Anthropic Messages, not OpenAI chat.completions.

Mirrors ``hermes_cli.runtime_provider._detect_api_mode_for_url`` so aux and main agree: any
``/anthropic`` URL (MiniMax, Zhipu, LiteLLM), ``api.kimi.com/coding`` (chat 404s), ``api.anthropic.com``.
rj   rµ  FTrÅ  r�  rž  )rœ  rÈ  )r¨  r©  r   r   rÊ  r�  r‹   rm   )rV   r­  r“  s   &  r-   Ú#_endpoint_speaks_anthropic_messagesrm  i  s”   € ð —.�.˜b×'Ñ'Ó)×/Ñ/Ó1×8Ñ8¸Ó=€JßÙÜ�
Ó× Ñ ×'Ñ'¨Ó,×5Ñ5Ð6U×VÒVÙÜ  Ó,€HØÐ*Ñ*×jÐj¬d°8¸~Ñ3M×3iÐ3iÐR[Ð_iÑRiÓ.jÐjr/   c                óv   € V ^8„  d   QhR\         R\        R\        R\        R\        \        ,          R\         /# )r)   rx  r³  rU   rV   Úapi_moder*   )r   rX   r   )r,   s   "r-   r.   r.   x  sI   € ÷ +[ñ +[Üð+[Üð+[Ü*-ð+[Ü9<ð+[ÜHPÔQTÍð+[äñ+[r/   c                ó.  € \        V \        4      '       g4   \        V \        \        \
        34      '       g   \        V R4      '       d   V # VR8w  d   V'       g   \        V4      '       g   V #  ^ RIH	p  T! Y#4      p\        P                  RY'       d
   TR,          MR	T;'       g    R
4       \        YaY#RR7      #   \         d    \        P                  RT4       T u # i ; i  \         d#   p\        P                  RY74       T u Rp?# Rp?ii ; i)aa  Rewrap a plain OpenAI client in ``AnthropicAuxiliaryClient`` when the endpoint speaks Anthropic Messages.

Single transport-correction chokepoint at the end of every ``resolve_provider_client`` branch; returns
``client_obj`` unchanged for probe stubs/specialized adapters, OpenAI-wire, explicit non-Anthropic
``api_mode``, or missing ``anthropic`` SDK.
ÚHERMES_SKIP_TRANSPORT_WRAPr,  ©Úbuild_anthropic_clientu   Endpoint %s speaks Anthropic Messages but the anthropic SDK is not installed â€” falling back to OpenAI-wire (will likely 404).uT   Failed to build Anthropic client for %s (%s) â€” falling back to OpenAI-wire client.NzeAuxiliary transport: wrapping client in AnthropicAuxiliaryClient (model=%s, base_url=%s, api_mode=%s)ºNrÏ  Nrj   úauto-detectedF©r  )r?   rS   r�  rA  r_  rú  r|  rm  r4  rs  rª   r­   r®   rŸ   rÞ   )rx  r³  rU   rV   ro  rs  rU  rc  s   &&&&&   r-   Ú_maybe_wrap_anthropicrw  x  s  € ô 	�:Ô2×3Ò3Ü˜JÔ)AÔCYÔ[oÐ(p×qÒqÜ˜JÐ(D×EÒEàÐàÐ'Ô'¯XÔ=`Ðai×=jÒ=jØÐðÝBðÙ,¨WÓ?ˆô ‡L�Lð	/à¦ˆx˜Ž}¨b°(×2MÐ2M¸oôô
 $ K¸ÐTYÔZÐZøô) ô Ü�‰ðOàô	
ð
 Òðûô ô Ü�‰ð"Ø#+ô	
ð Õûðús0   Á/B> Á6C' Â>#C$Ã#C$Ã'DÃ2DÄ	DÄDc                ó:   € V ^8„  d   QhR\         \        ,          /# r(   )r   r¤   )r,   s   "r-   r.   r.   ¦  s   € ÷ ñ œ¤$�ñ r/   c                 óÞ  € \        R4      w  rV '       dv   Vf   R# R\        VRR4      R\        VRR4      R\        VRR4      R\        V\        4      R\        VRR4      R	\        VR	R4      R
\        VR
R4      R\        VRR4      RR/	#  \	        4       pVP                  4       '       g   R# \        P                  ! VP                  RR7      4      pVP                  R4      R8w  d   R# VP                  R/ 4      P                  R/ 4      pVP                  R4      '       g   VP                  R4      '       g   R# V#   \         d"   p\        P                  RT4        Rp?R# Rp?ii ; i)zkNous provider state dict from the credential pool or ~/.hermes/auth.json; None when not active with tokens.r  Nr´   rj   Úrefresh_tokenÚ	agent_keyrÂ  Úportal_base_urlÚ	client_idr°  Ú
token_typeÚBearerÚsourcer§  z	utf-8-sig)ÚencodingÚactive_providerr  zCould not read Nous auth: %s)r®  rq   rÄ  Ú_NOUS_DEFAULT_BASE_URLrˆ  Úis_fileÚjsonÚloadsÚ	read_textrž   rŸ   r­   rÞ   )Úpool_presentr¹  Ú	auth_pathÚdatarŸ  rc  s         r-   Ú_read_nous_authr‹  ¦  sN  € ä,¨VÓ4Ñ€LßØŠ=ÙàœG E¨>¸2Ó>ØœW U¨O¸TÓBØœ ¨°TÓ:Ø Ô"8¸Ô@VÓ"WØœw uÐ.?ÀÓFØœ ¨°TÓ:Ø”W˜U G¨TÓ2Øœ' %¨°xÓ@Ø�fð

ð 
	
ðÜ#Ó%ˆ	Ø× Ñ ×"Ò"ÙÜ�zŠz˜)×-Ñ-°{Ð-ÓCÓDˆØ�8‰8Ð%Ó&¨&Ô0ÙØ—8‘8˜K¨Ó,×0Ñ0°¸Ó<ˆà�|‰|˜K×(Ò(°·±¸n×1MÒ1MÙØˆøÜô Ü�‰Ð3°SÔ9Ýûðús0   Â E  Â.<E  Ã,8E  Ä%E  Ä>E  Å E,ÅE'Å'E,c                ó0   € V ^8„  d   QhR\         R\        /# rž  r‘  )r,   s   "r-   r.   r.   È  s   € ÷ 	ñ 	œDð 	¤Sñ 	r/   c                ó
  € ^ RI Hp R Fv  w  r#V P                  V4      p\        V\        4      '       d   VP                  4       '       g   KD  V! W@P                  R4      V P                  V4      R7      '       g   Kt  Vu # 	  R# )z;Extract a usable Nous inference JWT from stored auth state.)Ú_nous_invoke_jwt_is_usabler°  )r°  Ú
expires_atrj   ))r{  Úagent_key_expires_at)r´   r�  )r˜  rŽ  rž   r?   rX   r¨  )rŸ  rŽ  Ú	token_keyÚ
expiry_keyÚtokens   &    r-   Ú_nous_api_keyr”  È  sh   € å:Û!hÑˆ	Ø—‘˜YÓ'ˆÜ˜%¤×%Ò%¨U¯[©[¯]ª]ÙÙ% e·<±<ÀÓ3HÐU]×UaÑUaÐblÓUm×nÕnØŠLñ "iñ r/   Úforce_refreshc                óh   € V ^8„  d   QhR\         R\        \        \        \        3,          ,          /# )r)   r•  r*   )rm   r   rù  rX   )r,   s   "r-   r.   r.   Ô  s*   € ÷ #ñ #´Tð #ÄhÌuÔUXÔZ]ÐU]ÍÕF_ñ #r/   c                ó¤  €  ^ RI Hp \        R4      pT'       d   TP                  4       '       g   R#  TP                  4       pTf   R# R R lpT '       g   T! T! T4      \        4       4      '       g    TP                  4       pTf   R# Tp\        T! T4      4      p\        T\        4      pT'       d	   T'       g   R# Yx3#   \         d"   p\        P                  RT4        Rp?R# Rp?ii ; i  \         d"   p\        P                  RT4        Rp?R# Rp?ii ; i  \         d#   p\        P                  RT4       Rp Rp?LÄRp?ii ; i)	z@Resolve Nous auxiliary credentials from the selected pool entry.)Ú_agent_key_is_usabler  z4Auxiliary Nous pool credential resolution failed: %sNz(Auxiliary Nous pool selection failed: %sc                óR   € V ^8„  d   QhR\         R\        \        \         3,          /# )r)   Úer*   ©r   r¤   rX   )r,   s   "r-   r.   Ú4_resolve_nous_pool_runtime_api.<locals>.__annotate__æ  s&   € ÷ Yñ Yœð Y¤¤S¬# X¥ñ Yr/   c           	      óD   € R Uu/ uF  q\        WR4      bK  	  up# u upi )r{  N)r{  r�  r´   r�  r°  ©rq   )rš  r‰  s   & r-   Ú_entry_stateÚ4_resolve_nous_pool_runtime_api.<locals>._entry_stateæ  s;   € ñ1Xó Yñ 1X¨1”7˜1 Ó&Ò&ñ 1Xñ Yð 	Yùò Ys   …z&Auxiliary Nous pool refresh failed: %s)r˜  r˜  rw   rŸ   r­   rÞ   r¦  r­  rÔ  Útry_refresh_currentr”  rÄ  rƒ  )	r•  r˜  r§  rc  r¹  rŸ  Ú	refreshedrU   rV   s	   $        r-   Ú_resolve_nous_pool_runtime_apir£  Ô  s!  € ðÝ8Ü˜Ó ˆ÷ �t×+Ñ+×-Ò-ÙðØ—‘“ˆð ‚}ÙõY÷ Ñ0±¸eÓ1DÔF_ÓFa×bÒbð	Ø×0Ñ0Ó2ˆIð ÒÙØˆÜ™L¨Ó/Ó0€GÜ% eÔ-CÓD€HßŸ(ÙØÐÐøô= ô Ü�‰ÐKÈSÔQÝûðûô ô Ü�‰Ð?ÀÔEÝûðûô ô 	Ü�L‰LÐAÀ3ÔGØ�Iûð	úsF   ‚C ´C3 Á6D" ÃC0ÃC+Ã+C0Ã3DÃ>DÄDÄ"EÄ-E
Å
EÚstale_access_tokenc          	      óŠ   € V ^8„  d   QhR\         R\        \        ,          R\        \        \        \        3,          ,          /# )r)   r•  r¤  r*   )rm   r   rX   rù  )r,   s   "r-   r.   r.   ú  s5   € ÷ ñ ÜðÜ8@Ä½ðäŒe”Cœ�H�oÕñr/   c                óä   € \        V R7      pVe   V#  ^ RIHp T! \        R^4      T T;'       g    RR7      p\        4        \        T4      #   \         d   p\        T4        Rp?R# Rp?ii ; i)u$  Fresh Nous runtime credentials (pool first, then auth store + JWT refresh) â€” mirrors the main
agent's 401 recovery. ``stale_access_token`` is the bearer that just 401'd; with ``force_refresh``
it lets the auth store adopt a sibling process's rotation instead of re-POSTing the shared grant.©r•  N©Ú resolve_nous_runtime_credentialsÚHERMES_NOUS_TIMEOUT_SECONDS)Útimeout_secondsr•  r¤  )r£  r˜  r©  r�   rŸ   r‡   r„   Ú_creds_pair)r•  r¤  Úpooledr©  r&  rc  s   $$    r-   Ú_resolve_nous_runtime_apir®  ú  sv   € ô ,¸-ÔH€FØÒØˆðÝDÙ0Ü%Ð&CÀRÓHØ'Ø1×9Ð9°Tô
ˆô "Ô#Ü�uÓÐøô ô ô 	' sÔ+Ýûð	ús   ”A ±A ÁA/ÁA*Á*A/c                óŠ   € V ^8„  d   QhR\         \        \        3,          R\        \        \        \        3,          ,          /# ©r)   r&  r*   ©r¤   rX   r   r   rù  )r,   s   "r-   r.   r.     s/   € ÷ ñ ”tœC¤˜H•~ð ¬(´5¼¼c¸µ?Õ*Cñ r/   c                ó  € \        V P                  R4      ;'       g    R4      P                  4       p\        V P                  R4      ;'       g    R4      P                  4       P                  R4      pV'       d	   V'       g   R# W3# )zX``(api_key, base_url)`` from a runtime-credentials dict, or None when either is missing.rU   rj   rV   rµ  N)rX   rž   r¨  r   )r&  rU   rV   s   &  r-   r¬  r¬    sf   € ä�%—)‘)˜IÓ&×,Ð,¨"Ó-×3Ñ3Ó5€GÜ�5—9‘9˜ZÓ(×.Ð.¨BÓ/×5Ñ5Ó7×>Ñ>¸sÓC€HßŸ(ÙØÐÐr/   c                ó\   € V ^8„  d   QhR\         \        \        \        3,          ,          /# r(   )r   rù  rX   )r,   s   "r-   r.   r.     s    € ÷  ñ  ¤H¬U´3¼°8­_Õ$=ñ  r/   c            	     óü  €  ^ RI Hp Hp \        R4      pV'       dì   VP	                  4       '       dÖ   VP                  4       pVeÂ   \        \        VRR4      ;'       g    \        VRR4      ;'       g    R4      P                  4       pR pT! V! \        R4      4      ;'       gH    V! \        R	4      4      ;'       g/    V! \        VR
R4      4      ;'       g    V! \        VRR4      4      V R7      pV'       d   V'       d   WF3#  ^ RI Hp T! 4       p	\        T	4      #   \         d!   p\        P                  RT4        Rp?L?Rp?ii ; i  \         d"   p\        P                  RT4        Rp?R# Rp?ii ; i)z¦Fresh xAI OAuth (api_key, base_url) for aux clients, or None.

Pool first (some xAI OAuth logins exist only as pool entries), then the singleton auth-store resolver.
)ÚDEFAULT_XAI_OAUTH_BASE_URLÚ _xai_validate_inference_base_urlú	xai-oauthNr»  r´   rj   c                 óf   € \        T ;'       g    R 4      P                  4       P                  R4      # )rj   rµ  )rX   r¨  r   )rŠ  s   &r-   Ú<lambda>Ú,_resolve_xai_oauth_for_aux.<locals>.<lambda>*  s"   € ¤ Q§W W¨"£×!3Ñ!3Ó!5×!<Ñ!<¸SÔ!Ar/   ÚHERMES_XAI_BASE_URLÚXAI_BASE_URLrÁ  rV   )r¾  z9Auxiliary xAI OAuth pool credential resolution failed: %s©Ú%resolve_xai_oauth_runtime_credentialsz<Auxiliary xAI OAuth runtime credential resolution failed: %s)r˜  rµ  r¶  rw   r¦  r­  rX   rq   r¨  rÚ  rŸ   r­   rÞ   r¾  r¬  )
rµ  r¶  r§  r¹  rU   Ú_urlrV   rc  r¾  r&  s
             r-   Ú_resolve_xai_oauth_for_auxrÀ    s^  € ð
Wß`Ü˜Ó%ˆß�D×(Ñ(×*Ò*Ø—K‘K“MˆEØÒ ÜÜ˜EÐ#4°dÓ;×gÐg¼wÀuÈnÐ^`Ó?a×gÐgÐegóç‘%“'ð ñ B�Ù;ÙœÐ)>Ó?Ó@÷ >ð >ÙœO¨NÓ;Ó<÷>ð >áœG EÐ+=¸tÓDÓE÷>ð >ñ œG E¨:°tÓ<Ó=Ø7ô�÷ ŸxØ"Ð,Ð,ðÝIÙ5Ó7ˆô �uÓÐøô ô WÜ�‰ÐPÐRU×VÑVûðWûô
 ô Ü�‰ÐSÐUXÔYÝûðús^   ‚0D! ³,D! Á D! Á51D! Â'D! Ã D! Ã!D! Ã=D! ÄD! Ä	E Ä!EÄ,EÅEÅE;ÅE6Å6E;c                ó\   € V ^8„  d   QhR\         \        \        ,          \        3,          /# r(   ©rù  r   rX   )r,   s   "r-   r.   r.   ?  s$   € ÷ Jñ J¬E´(¼3µ-ÄÐ2DÕ,Eñ Jr/   c                 óà   € \        4       p \        R4      w  rV'       d7   \        V4      pV'       d$   V '       d   W03# ^ RIHp W4! \        V4      4      3# \        4       T ;'       g    \        3# )af  ``(token, base_url)`` taken from ONE authority, so a Codex key is only ever sent to the host
it belongs to (#121486): the profile-scoped ``HERMES_CODEX_BASE_URL`` wins; otherwise a pooled
key goes where that pool entry routes (row URL / ``model.base_url``) and the auth.json OAuth
token goes to the ChatGPT default. ``(None, <base>)`` without a usable token.r¦  )Ú_codex_pool_route_base_url)Ú_codex_base_url_overrider®  r¼  Úhermes_cli.auth_codexrÄ  rÄ  Ú_read_codex_singleton_tokenÚ_CODEX_AUX_BASE_URL)Úoverriderˆ  r¹  r“  rÄ  s        r-   Ú"_resolve_codex_credential_and_baserÊ  ?  se   € ô
 (Ó)€HÜ,¨^Ó<Ñ€LßÜ% eÓ,ˆßßØ�Ð&åHØÐ4Ô5KÈEÓ5RÓSÐSÐSä&Ó(¨(×*IÐ*IÔ6IÐIÐIr/   c                ó:   € V ^8„  d   QhR\         \        ,          /# r(   r   )r,   s   "r-   r.   r.   R  s   € ÷ ñ ¤X¬c¥]ñ r/   c                 ó²  €  ^ RI Hp  V ! 4       P                  R/ 4      P                  R4      p\        V\        4      '       d   VP                  4       '       g   R#  ^ RIpVP                  R4      ^,          pVR\        V4      ) ^,          ,          ,          p\        P                  ! VP                  V4      4      P                  R^ 4      pV'       d3   \        P                  ! 4       V8”  d   \        P                  RV4       R# TP                  4       #   \         d     Li ; i  \         d"   p\        P                  R	T4        Rp?R# Rp?ii ; i)
zMThe profile's auth.json Codex access token (expired JWTs skipped), else None.)Ú_read_codex_tokensÚtokensr´   NrÍ  Ú=Úexpz-Codex access token expired (exp=%s), skippingz2Could not read Codex auth for auxiliary client: %s)r˜  rÍ  rž   r?   rX   r¨  Úbase64r«  rŸ  r…  r†  Úurlsafe_b64decoder=  r­   rÞ   rŸ   )rÍ  r´   rÑ  ÚpayloadrÐ  rc  s         r-   rÇ  rÇ  R  s  € ðÝ6Ù)Ó+×/Ñ/°¸"Ó=×AÑAÀ.ÓQˆÜ˜,¬×,Ò,°L×4FÑ4F×4HÒ4HÙð		ÛØ"×(Ñ(¨Ó-¨aÕ0ˆGØ�sœs 7›|˜m¨aÕ/Õ0Õ0ˆGÜ—*’*˜V×5Ñ5°gÓ>Ó?×CÑCÀEÈ1ÓMˆCß”t—y’y“{ SÔ(Ü—‘ÐLÈcÔRÙð ×!Ñ!Ó#Ð#øô ô 	Ùð	ûô ô Ü�‰ÐIÈ3ÔOÝûðús=   ‚AD* ÁB*D Ä	D* ÄD'Ä$D* Ä&D'Ä'D* Ä*EÄ5EÅEc                ór   € V ^8„  d   QhR\         \        \        ,          \        \        ,          3,          /# r(   ©rù  r   r&   rX   )r,   s   "r-   r.   r.   j  s)   € ÷ Iñ I¤5¬´&Õ)9¼8ÄC½=Ð)HÕ#Iñ Ir/   c                 óî  €  ^ RI Hp Hp T P                  4        EF†  w  r#TP                  R8w  d   K  \        T4      '       d   \        P                  RT4       KB  TR8X  dX   \        P                  ! \        4      ;_uu_ 4        ^ RI Hp T! R4      '       g    RRR4       K‹   RRR4       \        4       u # TR8X  dL   \        P                  ! \        4      ;_uu_ 4        ^ RI Hp T! R4      '       g    RRR4       Ké   RRR4       \        T4      ;'       g    RpTf   EK  \        T4      w  rgT'       dC   \        T4      pT'       g   EK9  \!        YsP"                  4      ;'       g    TP"                  p	R	p
MŠT! T4      p\%        TP'                  RR
4      4      P)                  4       pT'       g   EK¡  \%        TP'                  RR
4      4      P)                  4       P+                  R4      ;'       g    TP"                  p	R
p
\-        R4      pTP'                  R4      T8X  do   TP'                  R4      '       dX   TR,          P+                  R4      p	\/        TP'                  R4      \$        4      '       d   TR,          '       d
   TR,          pRp
\        P                  RTP0                  YZ4       \3        T	4      pTR8X  d$   ^ RIHpHp T! T4      '       d   T! Y�R7      T3u # \;        TR4      '       d   RR/pMI\;        TR4      '       d   ^ RIHp T! 4       pM)\;        TR4      '       d   \A        T4      pM\C        T4      pT'       d   RT/M/ p\E        TP'                  R4      4      pT'       d   TTR&   \G        RRTRT/TB p\I        TYXT	4      T3u # 	  R#   \         d    \        P                  R4       Ru # i ; i  + '       g   i     EL2; i  + '       g   i     ELè; i)zVTry each API-key provider in PROVIDER_REGISTRY order; (client, model) or (None, None).)ÚPROVIDER_REGISTRYr  z7Could not import PROVIDER_REGISTRY for API-key fallbackNrU   z2Auxiliary api-key chain: %s is unhealthy, skippingr<  )Ú!is_provider_explicitly_configuredÚcopilotz	 via poolrj   rV   rµ  rŸ  z (session endpoint)z Auxiliary text client: %s (%s)%sr7  ©ÚGeminiNativeClientÚis_native_gemini_base_urlr[   r�  r|  úclaude-code/0.1.0rg  )Úcopilot_default_headersrw  rY  ©NNrD   )%r˜  r×  r  rª   r­   rÞ   r‡  Ú	auth_typeÚ_is_provider_unhealthyr–  r—  rØ  Ú_try_anthropicr6  r®  r¼  rÄ  rÂ  rX   rž   r¨  r   Ú_normalize_main_runtimer?   r`   r¡  rì  rÛ  rÜ  rŠ   Úhermes_cli.modelsrÞ  rz  Ú_profile_default_headersr^  r¸   rw  )r×  r  r  ÚpconfigrØ  r³  rˆ  r¹  rU   Úraw_base_urlÚviar&  ÚruntimerV   rÛ  rÜ  rS  rÞ  Úextrarš  r¯   s                        r-   Ú_resolve_api_key_providerrë  j  sD  € ðß[ð !2× 7Ñ 7× 9ÑˆØ×Ñ 	Ô)ÙÜ! +×.Ò.Ü�L‰LÐMÈ{Ô[ÙØ˜+Ô%ä×$Ò$¤[×1Õ1ÝMÙ8¸×EÒEØ÷ 2Ñ1àE÷ 2ô "Ó#Ò#Ø˜)Ô#ä×$Ò$¤[×1Õ1ÝMÙ8¸×CÒCØ÷ 2Ñ1àC÷ 2ô ,¨KÓ8×@Ð@¸DˆØŠ=ÚÜ0°Ó=ÑˆßÜ+¨EÓ2ˆGßÚÜ1°%×9SÑ9SÓT×rÐrÐX_×XrÑXrˆLØ‰Cá8¸ÓEˆEÜ˜%Ÿ)™) I¨rÓ2Ó3×9Ñ9Ó;ˆGßÚÜ˜uŸy™y¨°RÓ8Ó9×?Ñ?ÓA×HÑHÈÓM×kÐkÐQX×QkÑQkˆLØˆCô *¨$Ó/ˆØ�;‰;�zÓ" kÔ1°g·k±kÀ*×6MÒ6MØ" :Õ.×5Ñ5°cÓ:ˆLÜ˜'Ÿ+™+ iÓ0´#×6Ò6¸7À9×;MÔ;MØ! )Õ,�Ø'ˆCÜ�‰Ð7¸¿¹ÀuÔRä& |Ó4ˆØ˜(Ô"ßaÙ(¨×2Ò2Ù)°'ÔMÈuÐTÒTÜ  ¨>×:Ò:Ø#Ð%8Ð9‰GÜ" 8Ð-@×AÒAÝAÙ-Ó/‰GÜ" 8Ð-G×HÒHÜ.¨xÓ8‰Gä.¨{Ó;ˆGß07Ð" GÑ,¸RˆÜ,¨U¯Y©YÐ7HÓ-IÓJˆßØ'-ˆEÐ#Ñ$Ü&ÑS¨wÐSÀÐSÈUÑSˆÜ$ V¨U¸\ÓJÈEÐQÒQñC !:ðD ÐøôK ô Ü�‰ÐNÔOØÒðú÷ 2×1Ð1ú÷ 2×1Ð1ús)   ‚N' ÂOÃ#O#Î'"OÏOÏO Ï#O4Ú	is_visionÚxaic                ój   € V ^8„  d   QhR\         R\         R\        R\        R\        \        ,          /# )r)   rV   rŸ  rì  rí  r*   )rX   rm   r   r¤   )r,   s   "r-   r.   r.   ¶  s?   € ÷ @ñ @Üð@Ü ð@Ü04ð@ÜCGð@äŒd…^ñ@r/   c               ó   € \        V R4      '       d   RR/pM™\        V R4      '       d   ^ RIHp \        V! RVR7      4      pMm\        V R4      '       d   \        \	        V 4      4      pMFV'       d*   \        V R	4      '       d   ^ R
IHp \        V! 4       4      pM\        V4      ;'       g    / p\        T;'       g    R4      ;'       g    R# )aJ  Provider-specific client headers by endpoint host, merged with user ``model.default_headers``.

Kimi Code needs the claude-code User-Agent; Copilot needs its request headers
(``is_vision`` adds Copilot-Vision-Request); NVIDIA NIM and (optionally) xAI have
their own fingerprints; anything else falls back to the provider profile.
r�  r|  rÝ  rg  )Úcopilot_request_headersT)Úis_agent_turnrì  rw  zx.ai©Úhermes_xai_default_headersN)	rŠ   Úhermes_cli.copilot_authrð  r¤   rz  Útools.xai_httpró  rå  r^  )rV   rŸ  rì  rí  rS  rð  ró  s   &&$$   r-   Ú_endpoint_default_headersrö  ¶  s©   € ô ˜X ~×6Ò6Ø%Ð':Ð;‰Ü	˜xÐ)<×	=Ò	=ÝCÜÑ.¸TÈYÔWÓX‰Ü	˜xÐ)C×	DÒ	DÜÔ/°Ó9Ó:‰ß	Ô& x°×8Ò8Ý=ÜÑ1Ó3Ó4‰ä*¨8Ó4×:Ð:¸ˆÜ& w§ °$Ó7×?Ð?¸4Ð?r/   c                óF   € V ^8„  d   QhR\         R\        \        ,          /# rž  )rX   r   r¤   )r,   s   "r-   r.   r.   Î  s   € ÷ 	ñ 	¤sð 	¬x¼­~ñ 	r/   c                ó&  € V '       g   R# \         P                  ! \        4      ;_uu_ 4        ^ RIHp V! V 4      pV'       d2   VP
                  '       d    \        VP
                  4      uuRRR4       # RRR4       R#   + '       g   i     R# ; i)zZClient-level attribution headers from the provider profile (e.g. GMI User-Agent), or None.Nr
  )r–  r—  rŸ   r  r  rY  r¤   ©rŸ  r  r3  s   &  r-   rå  rå  Î  s`   € çÙÜ	×	Ò	œY×	'Õ	'Ý2Ù& xÓ0ˆß�w×.×.Ð.Ü˜×/Ñ/Ó0÷	 
(×	'Ò	'ñ
 ÷ 
(Ö	'ñ
 ús   ­(A?ÁA?Á?B	c                óF   € V ^8„  d   QhR\         \        ,          R\        /# r²  r»  )r,   s   "r-   r.   r.   ß  s"   € ÷ Mñ Mœ(¤3�-ð M¬Dñ Mr/   c                óœ   € V '       g   R# \        V 4      P                  4       pVP                  R4      ;'       g    VP                  R4      # )uh   True when ``model`` is a free SKU (``:free`` suffix or ``stealth/`` prefix) â€” naming-convention trust.Fú:freezstealth/)rX   r¨  r�  rª  )r³  r­  s   & r-   Ú_is_free_modelrý  ß  s>   € çÙÜ�U“×!Ñ!Ó#€JØ×Ñ˜wÓ'×LÐL¨:×+@Ñ+@ÀÓ+LÐLr/   c                óF   € V ^8„  d   QhR\         \        \        3,          /# r(   )rù  rm   rX   )r,   s   "r-   r.   r.   ç  s   € ÷ 
(ñ 
(¤%¬¬c¨	Õ"2ñ 
(r/   c            	     ó  €  ^ RI Hp Hp V! 4       p\        V ! VRRRR7      4      pV ! VRR4      p\	        V\
        4      '       d'   VP                  4       '       d   VP                  4       M\        pW53#   \         d    R\        3u # i ; i)zVRead (free_only, openrouter_model) from config; (False, _OPENROUTER_MODEL) on failure.)rW  r–   Ú	auxiliaryÚ	free_onlyFrE  Úopenrouter_model)	r�   rW  r–   rm   r?   rX   r¨  Ú_OPENROUTER_MODELrŸ   )rW  r–   Úcfgr  r  r³  s         r-   Ú_aux_openrouter_settingsr  ç  s~   € ð(ßCÙ"Ó$ˆÜ™  k°;ÈÔNÓOˆ	Ù�c˜;Ð(:Ó;ˆÜ)¨#¬s×3Ò3¸¿	¹	¿º�—	‘	”ÔIZˆØÐÐøÜô (ØÔ'Ð'Ò'ð(ús   ‚AA5 ÁA5 Á5BÂ
Bc                ó(   € V ^8„  d   QhR\         RR/# )r)   r³  r*   NrW   )r,   s   "r-   r.   r.   ô  s   € ÷ 	ñ 	¤ð 	¨ñ 	r/   c                óv   € V \         9   d   R# \         P                  V 4       \        P                  RV 4       R# )zDLog a WARNING the first time a non-free OpenRouter model is engaged.Nu  Auxiliary client: PAID lane engaged for auxiliary task â€” OpenRouter fallback model %r is not a :free SKU and may incur real spend. Set auxiliary.free_only: true to restrict auxiliary fallbacks to free models, or auxiliary.openrouter_model to a :free model.)Ú_paid_lane_warnedrå  r­   r®   r¸  s   &r-   Ú_warn_paid_lane_oncer	  ô  s1   € àÔ!Ô!ÙÜ×Ñ˜%Ô Ü
‡N�Nð	TàUZör/   c                ó   € V ^8„  d   QhR\         \        \        . \        3,          ,          ,          R\        R,          R\         \        ,          R\        \         \        ,          \         \        ,          3,          /# )r)   Úexplicit_api_keyr³  NÚexplicit_base_urlr*   )r   rX   r   rù  r&   )r,   s   "r-   r.   r.    	  s^   € ÷ $ñ $¤h¬s´X¸bÄ#¸gÕ5FÕ/FÕ&Gð $ÔWZÐ]aÕWað $Ü'/´¥}ð$Ü@EÄhÌvÕFVÔX`ÔadÕXeÐFeÕ@fñ$r/   c                 óR  € \        4       w  r4T;'       g    TpV'       d*   \        V4      '       g   \        P                  R V4       R
# \        V4      '       g   \	        V4       T;'       g    RP                  4       P                  R4      p\        R4      w  rxV'       d‡   T ;'       g    \        V4      p	V	'       dU   T;'       g    \        V\        4      ;'       g    \        p
\        P                  R4       \        Wš\        4       R7      V3# \        P                  R4       T ;'       g    \        R4      p	V	'       g)   \        R^<\!        V4      \"        P$                  R7       R
# \        P                  R	4       \        Y–;'       g    \        \        4       R7      V3# )u  Auxiliary client: auxiliary.free_only is enabled but the OpenRouter fallback model %r is not a :free SKU â€” skipping the OpenRouter fallback. Set auxiliary.openrouter_model to a :free model (e.g. nvidia/nemotron-3-ultra-550b-a55b:free) or disable auxiliary.free_only.rj   rµ  rc  z%Auxiliary client: OpenRouter via pool©rU   rV   rY  zFAuxiliary client: OpenRouter pool exhausted, trying OPENROUTER_API_KEYÚOPENROUTER_API_KEY©rr  rõ  ÚlevelzAuxiliary client: OpenRouterrß  )r  rý  r­   r®   r	  r¨  r   r®  r¼  rÄ  rˆ   rÞ   r¸   rs  rÚ  Ú_mark_provider_unhealthyÚ _describe_openrouter_unavailableÚloggingÚDEBUG)r  r³  r  r  Ú	cfg_modelÚor_modelÚoverride_urlrˆ  r¹  Úor_keyrV   s   &&&        r-   Ú_try_openrouterr   	  sj  € ä3Ó5Ñ€IØ×!Ð!˜	€Hßœ¨×1Ò1Ü�‰ðhð ô		
ð ÐÜ˜(×#Ò#Ü˜XÔ&ð &×+Ð+¨×2Ñ2Ó4×;Ñ;¸CÓ@€LÜ,¨\Ó:Ñ€LßØ!×AÐAÔ%:¸5Ó%AˆßØ#×pÐpÔ'=¸eÔEXÓ'Y×pÐpÔ]pˆHÜ�L‰LÐ@ÔAÜ(ØÔCSÓCUôàðð ô 	�‰Ð]Ô^Ø×FÐF¤Ð1EÓ!F€FßÜ Ø˜bÔ)IÈ(Ó)SÔ[b×[hÑ[hõ	jàÐÜ
‡L�LÐ/Ô0Ü Ø×!DÐ!DÔ1DÔVfÓVhôàðð r/   c                ó>   € V ^8„  d   QhR\         R,          R\         /# )r)   r³  Nr*   rW   )r,   s   "r-   r.   r.   '	  s   € ÷ 4ñ 4¬C°$­Jð 4Ä#ñ 4r/   c                óø   € \        4       w  rT ;'       g    TpV'       d   \        V4      '       g   RV: R2# \        R4      w  rEV'       d   Vf   R# \        V4      '       g   R# \	        R4      '       g   R# R# )	zBReturn the policy or credential reason OpenRouter was unavailable.z,auxiliary.free_only rejected non-free model z=; the request was skipped before provider availability checksrc  zOOpenRouter credential pool has no usable entries (credentials may be exhausted)z=OpenRouter credential pool entry is missing a runtime API keyr  zOPENROUTER_API_KEY not setz&no usable OpenRouter credentials found)r  rý  r®  r¼  rÚ  )r³  r  r  r  rˆ  r¹  s   &     r-   r  r  '	  sz   € ä3Ó5Ñ€IØ×!Ð!˜	€Hßœ¨×1Ò1à:¸8¹,ð GJð Jð	
ô -¨\Ó:Ñ€LßØŠ=ÙdÜ$ U×+Ò+ÙRÜÐ/×0Ò0Ù+Ù3r/   c                ó~   € V ^8„  d   QhR\         R\        \        \        ,          \        \        ,          3,          /# )r)   Úvisionr*   )rm   rù  r   r&   rX   )r,   s   "r-   r.   r.   ;	  s5   € ÷ DLñ DL”dð DL¤u¬X´fÕ-=¼xÌ½}Ð-LÕ'Mñ DLr/   c           	      ó´  € \        4       p\        R R7      pVf=   V'       g5   \        P                  R4       \	        R^<R\
        P                  R7       R# Vf   V'       d   \        P                  R4       Ve   Vw  r4M¥\        T;'       g    / 4      pV'       g5   \        P                  R4       \	        R^<R	\
        P                  R7       R# \        T;'       g    / P                  R
4      ;'       g    \        R4      ;'       g    \        4      P                  R4      p\        P                  ! \         4      ;_uu_ 4        ^ RIHp ^ RIHp V! RV4      pV! VR7      pVe[   V^ 8”  dT   \        P                  RV4       \	        RV'       d   \+        VR4      MTR\
        P,                  R7       RuuRRR4       # RRR4       V '       d   RMRp	^ RIHp
Hp V! V4      '       d'   Rs\        P                  RWš4       \5        W4R7      V
3# Rs\        P                  R4       \6        p\9        4       '       gI    ^ RIHp V! V R7      pV'       d   Tp\        P                  RWœ4       M\        P                  RWœ4        \5        W4R7      V3#   + '       g   i     LÛ; i  \          d"   p\        P                  RYŸT4        Rp?LHRp?ii ; i) Fr§  NzSAuxiliary Nous client unavailable: no Nous authentication found (run: hermes auth).r  zno Nous authentication foundr  zLAuxiliary Nous: runtime JWT refresh failed; checking stored auth.json token.z]Auxiliary Nous client unavailable: no usable inference JWT found (run: hermes auth add nous).zno usable Nous inference JWTrÂ  ÚNOUS_INFERENCE_BASE_URLrµ  )Únous_rate_limit_remaining)Úis_anonymous_request)Ú	anonymousz?Auxiliary: skipping Nous Portal (rate-limited, resets in %.0fs)rF  zNous Portal rate-limitedr  r-  )ÚGUEST_MODELÚroute_is_welcome_hostTz&Auxiliary/%s: Nous free tier; using %sr[   zAuxiliary client: Nous Portal©Úget_nous_recommended_aux_model©r  z/Auxiliary/%s: using Portal-recommended model %sz:Auxiliary/%s: no Portal recommendation, falling back to %szGAuxiliary/%s: recommended-models lookup failed (%s); falling back to %srß  )r‹  r®  r­   r®   r  r  r  rÞ   r”  rX   rž   rÚ  rƒ  r   r–  r—  rŸ   Úagent.nous_rate_guardr!  Úhermes_cli.anon_authr"  r÷  ÚINFOr$  r%  Úauxiliary_is_nousr¸   Ú_NOUS_MODELrs   rä  r'  )r  r  ré  rU   rV   r!  r"  r#  r;  Úlaner$  r%  r³  r'  Úrecommendedrc  s   &               r-   Ú	_try_nousr0  ;	  sR  € ÜÓ€DÜ'°eÔ<€GØ‚ŸtÜ�‰ÐlÔmÜ  ¨RÐ8VÔ^e×^kÑ^kÕlØÐØ‚Ÿ4Ü�‰ÐcÔdØÒØ#Ñˆ�ä §
 
¨Ó+ˆßÜ�N‰Nð/ôô % V°Ð<ZÔbi×boÑboÕpØÐÜØ�ZˆZ�R×ÑÐ1Ó2×zÐz´oÐF_Ó6`×zÐzÔdzó
ç
‰&�‹+ð 	ô 
×	Ò	œY×	'Õ	'ÝCÝ=Ù(¨°Ó9ˆ	Ù-¸	ÔBˆ	ØÒ  Y°¤]Ü�L‰LÐZÐ\eÔfô %Ø·IœC 	¨4Ô0À9Ø1¼¿¹õGð ÷ 
(×	'Ò	'÷ ‰8 6€D÷
 Há˜X×&Ò&Ø ÐÜ�‰Ð=¸tÔQÜ$¨WÔHÈ+ÐUÐUØÐÜ
‡L�LÐ0Ô1ô €EÜ×Òð	ÝHÙ8ÀÔGˆKßØ#�Ü—‘ÐNÐPTÕ\ä—‘ÐYÐ[_Õgô !¨ÔDÀeÐKÐK÷[ 
(×	'ûôN ô 	Ü�L‰Lð%à˜5÷ñ ûð	ús1   ÅA2JÉJ+ ÉJ+ É3J+ ÊJ(	Ê+KÊ6KËKc                óh   € V ^8„  d   QhR\         R\        \        ,          R\        \        ,          /# )r)   r  Ústale_modelr*   )rm   r   rX   )r,   s   "r-   r.   r.   ‚	  s1   € ÷ Iñ I¬tð IÄ(Ì3Å-ð IÔT\Ô]`ÕTañ Ir/   c                ó–  € T;'       g    RP                  4       P                  4       pRp ^ RIHp V! V RR7      pV'       d&   VP                  4       P                  4       V8w  d   V# \        P                  4       P                  4       V8w  d   \        # R#   \         d&   p\
        P                  RT\        4        Rp?L‡Rp?ii ; i)zÔFresh Portal recommended model after a stale-model 404 (long-lived processes pin dropped models).

Returns the fresh recommendation, else ``_NOUS_MODEL``, whichever differs from ``stale_model``; None if neither.
rj   Nr&  T)r  r•  z<Nous recommended-model refresh failed (%s); using default %s)r¨  r©  rä  r'  rŸ   r­   rÞ   r-  )r  r2  ÚstaleÚfreshr'  rc  s   $$    r-   Ú_refresh_nous_recommended_modelr6  ‚	  s«   € ð
 ×Ð˜B×%Ñ%Ó'×-Ñ-Ó/€EØ€EðgÝDÙ.°fÈDÔQˆ÷ �—‘“×$Ñ$Ó&¨%Ô/ØˆÜ%×+Ñ+Ó-×3Ñ3Ó5¸Ô>Œ;ÐHÀDÐHøô	 ô gÜ�‰ÐSÐUXÔZe×fÑfûðgús   ¬B ÂCÂ#CÃCr©  c                óH   € V ^8„  d   QhR\         R\        R\        R\         /# )r)   ÚfieldÚreadonlyr©  r*   r.  )r,   s   "r-   r.   r.   “	  s(   € ÷ ñ œCð ¬dð ¼4ð ÌCñ r/   c               ó|  € \        V 4      p\        V\        4      '       dA   VP                  4       '       d+   VP                  4       pV'       d   VP	                  4       # T# \
        P                  ! \        4      ;_uu_ 4        ^ RIH	p V'       d   VP                  MVP                  ! 4       pVP                  R/ 4      pV R8X  dG   \        V\        4      '       d1   VP                  4       '       d   VP                  4       uuRRR4       # \        V\        4      '       d|   TP                  V R8X  d   RMT R4      p\        V\        4      '       dK   VP                  4       '       d5   VP                  4       pV'       d   VP	                  4       MTuuRRR4       # RRR4       R#   + '       g   i     R# ; i)a*  Main ``model.<field>``: runtime override (``set_runtime_main``) first, then config.yaml.

The override wins so "active main model" gates see the live CLI/gateway runtime, not the persisted
default. ``readonly`` picks ``load_config_readonly`` (model/provider) vs ``load_config`` (api_key/base_url).
r—   r³  Nr  rj   )r›  r?   rX   r¨  r©  r–  r—  rŸ   Ú
hermes_clir˜   r–   rX  rž   r¤   )r8  r9  r©  rÉ  rQ  Ú_cfg_modr  Ú	model_cfgs   &$$     r-   Ú_read_main_fieldr>  “	  s,  € ô # 5Ó)€HÜ�(œC× Ò  X§^¡^×%5Ò%5Ø—‘Ó ˆß %ˆu�{‰{‹}Ð0¨5Ð0Ü	×	Ò	œY×	'Õ	'Ý1ß08ˆx×,Ò,¸h×>RÑ>RÐRÓUˆØ—G‘G˜G RÓ(ˆ	Ø�GÔ¤
¨9´c× :Ò :¸y¿¹×?PÒ?PØ—?‘?Ó$÷ 
(Ò	'ô �i¤×&Ò&Ø—M‘M¨u¸Ô/?¡)ÀUÈBÓOˆEÜ˜%¤×%Ò%¨%¯+©+¯-ª-ØŸ™›�ß(-�u—{‘{”}°5÷ 
(×	'Ò	'ñ ÷ 
(Ö	'ñ ús&   ÂA0F*Ã5F*ÄAF*Å,F*ÆF*Æ*F;	r³  )r9  rŸ  )r9  r©  rU   rV   c                ó”   € V ^8„  d   QhR\         \        ,          R\        \         \        ,          \         \        ,          3,          /# )r)   Úpreset_namer*   )r   rX   rù  )r,   s   "r-   r.   r.   ³	  s3   € ÷ ñ ¬´#­ð ¼5ÄÌ#ÅÔPXÔY\ÕP]ÐA]Õ;^ñ r/   c                ó$  €  ^ RI Hp ^ RIHp T! V! 4       P	                  R4      ;'       g    / T ;'       g    R4      pVP	                  R4      ;'       g    / p\        VP	                  R4      ;'       g    R4      P                  4       p\        VP	                  R4      ;'       g    R4      P                  4       pV'       d!   V'       d   VP                  4       R8w  d   WV3# R#   \         d    \        P                  R	T R
R7        R# i ; i)uÑ   MoA preset â†’ aggregator (provider, model); (None, None) if unresolvable. None/"" = default preset.

"moa" is virtual â€” aux tasks skip the fan-out and use the aggregator slot; shared so lookup can't drift.
©rX  )Úresolve_moa_presetÚmoaNÚ
aggregatorrŸ  rj   r³  z.MoA aggregator resolution failed for preset %rTrÜ   rß  )r�   rX  Úhermes_cli.moa_configrC  rž   rX   r¨  r©  rŸ   r­   rÞ   )r@  rX  rC  ÚpresetÚaggÚagg_providerÚ	agg_models   &      r-   Ú_resolve_moa_aggregatorrK  ³	  sé   € ð

cÝ1Ý<Ù#¡K£M×$5Ñ$5°eÓ$<×$BÐ$BÀÀK×DWÐDWÐSWÓXˆØ�j‰j˜Ó&×,Ð,¨"ˆÜ˜3Ÿ7™7 :Ó.×4Ð4°"Ó5×;Ñ;Ó=ˆÜ˜Ÿ™ Ó(×.Ð.¨BÓ/×5Ñ5Ó7ˆ	ßŸI¨,×*<Ñ*<Ó*>À%Ô*GØÐ*Ð*ð Ðøô ô cÜ�‰ÐEÀ{Ð]aˆÕbØÐðcús9   ‚*C( ­
C( ¸C( ÁC( Á71C( Â)C( ÃC( ÃC( Ã(#DÄDc                ó$   € V ^8„  d   QhR\         /# r(   rW   )r,   s   "r-   r.   r.   Æ	  s   € ÷ ñ ¤#ñ r/   c                 ó¶   € \        4       p \        4       ;'       g    RP                  4       P                  4       R8X  d   \	        V 4      w  rT;'       g    R# V # )zpMain model with MoA presets unwrapped to the aggregator's model; "" when unresolvable (a preset name would 400).rj   rD  )Ú_read_main_modelr¬  r¨  r©  rK  )r³  r¢  rJ  s      r-   Ú_read_main_model_for_auxrO  Æ	  sL   € äÓ€EÜÓ×#Ð# ×*Ñ*Ó,×2Ñ2Ó4¸Ô=Ü.¨uÓ5‰ˆØ�ˆ˜BÐØ€Lr/   c                ó`   € V ^8„  d   QhR\         R\         \        . \         3,          ,          /# )r)   Úaux_base_urlr*   )rX   r   )r,   s   "r-   r.   r.   Ï	  s(   € ÷  ñ  ´Cð  ¼CÄ(È2ÌsÈ7ÕBSÕ<Sñ  r/   c                ó\  € \        V 4      pV^,          '       g   R# \        R4      pVP                  R4      '       g   VP                  R4      '       d5   V\        VP                  RR4      4      8w  d   R# VP                  RR4      # V\        \        4       4      8w  d   R# \	        4       # )uÚ  Main api_key only when *aux_base_url* has the main base_url's exact origin.

Unconditional inheritance would leak the credential to any misconfigured host; mismatch keeps ``no-key-required`` â†’ 401.
Origin, not hostname: another scheme (``http://``) or port on the same host is a different endpoint.
Anchor and key come from ONE source: the live runtime a turn bound, else config.yaml. The
per-field readers fall back to config field by field, so a keyless or key_cmd live main would
pair its own base_url with config's key and send that key to the live endpoint.
Origins are compared before any key is read: the client cache calls this on every keyless
``custom`` lookup, and a mismatch must not pay for a config.yaml key read.
rj   NrV   rU   )rŒ   rã  rž   Ú_read_main_base_urlÚ_read_main_api_key)rQ  Ú
aux_originÚlives   &  r-   Ú!_read_main_api_key_if_same_originrW  Ï	  sŠ   € ô ! Ó.€JØ�a�=Œ=ÙÜ" 4Ó(€DØ‡x�x�
×Ò˜tŸx™x¨	×2Ò2Øœ¨¯©°*¸bÓ)AÓBÔBÙØ�x‰x˜	 2Ó&Ð&Ø”_Ô%8Ó%:Ó;Ô;ÙÜÓÐr/   Úauxiliary_runtime_mainrE  Úauxiliary_relay_callc                ó0   € V ^8„  d   QhR\         R\        /# )r)   r:   r;   )rù  r¤   )r,   s   "r-   r.   r.   ù	  s   € ÷ -ñ -¤ð -¬tñ -r/   c              #  ó¦  "  € V '       d
   V ^ ,          MVP                  R4      p\        P                  R\        T;'       g    R4      RR\        P
                  ! 4       P                   2R^ RRRRR	R
RR/4      p R
x €  \        P                  T4       R
#   \         d   p\        T4       h R
p?ii ; i  \        P                  T4       i ; i5i)zXBind a fresh relay call context for one auxiliary call; mark it failed on any exception.rB  ÚunknownÚ
request_idzaux-Úattempt_countrŸ  rj   r³  Úresponse_modelNro  Úchat_completions)
rž   Ú_RELAY_AUX_CALL_CONTEXTrb  rX   ÚuuidÚuuid4Úhexra  Ú_fail_relay_auxiliary_callÚreset)r:   r;   rB  r“  rc  s   &&   r-   Ú_relay_aux_call_scoperg  ø	  s¼   é € ÷ ˆ4�Ž7 §
¡
¨6Ó 2€DÜ#×'Ñ'Ø”�D×%Ð%˜IÓ&Ø˜œTŸZšZ›\×-Ñ-Ð.Ð/Ø˜Ø�BØ�Ø˜$ØÐ&ð)ó €Eð-Üô
 	 ×%Ñ% eÖ,øô	 ô Ü" 3Ô'Øûðûô 	 ×%Ñ% eÕ,üs<   ‚A CÁ8CÁ<B ÂCÂB4Â#B/Â/B4Â4B7 Â7CÃCc                óF   a € \         P                  ! S 4      V 3R l4       pV# )zHGive every physical retry in one auxiliary call a shared Relay identity.c                  óx   <€ \        W4      ;_uu_ 4        S! V / VB uuR R R 4       #   + '       g   i     R # ; ir8   ©rg  ©r:   r;   rZ  s   *,€r-   ÚwrappedÚ&_relay_auxiliary_call.<locals>.wrapped
  s*   ø€ ä" 4×0Õ0Ù˜TÐ, VÑ,÷ 1×0×0Ó0ús   •(¨9	©Ú	functoolsÚwraps©rZ  rl  s   f r-   Ú_relay_auxiliary_callrr  
  s%   ø€ ä‡_‚_�XÓô-ó ð-ð €Nr/   c                óF   a € \         P                  ! S 4      V 3R l4       pV# )z3Async counterpart to :func:`_relay_auxiliary_call`.c               Ÿ   ó”   <"  € \        W4      ;_uu_ 4        S! V / VB G R j  x€L
 uuR R R 4       #  L  + '       g   i     R # ; i5ir8   rj  rk  s   *,€r-   rl  Ú,_relay_auxiliary_call_async.<locals>.wrapped
  s7   øé € ä" 4×0Õ0Ù! 4Ð2¨6Ñ2×2÷ 1Ò0Ù2÷ 1×0Ð0üs$   ƒA—4£2¤4§A²4´A	¿	Arn  rq  s   f r-   Ú_relay_auxiliary_call_asyncrv  
  s%   ø€ ä‡_‚_�XÓô3ó ð3ð €Nr/   c                ój   € V ^8„  d   QhR\         R,          R\         R,          R\         R,          RR/# )r)   rŸ  Nr³  ro  r*   rW   )r,   s   "r-   r.   r.    
  s8   € ÷ >ñ >¬¨t­ð >¼CÀ$½Jð >ÔRUÐX\ÕR\ð >Ðaeñ >r/   c                 óÔ   € \         P                  4       pVf   R # \        T ;'       g    R4      VR&   \        T;'       g    R4      VR&   R VR&   \        T;'       g    R4      VR&   R # )Nr   rŸ  r\  r³  r_  r`  ro  )ra  rž   rX   )rŸ  r³  ro  Úcontexts   &&& r-   Ú_set_relay_auxiliary_routerz   
  si   € Ü%×)Ñ)Ó+€GØ‚ÙÜ˜h×5Ð5¨+Ó6€GˆJÑÜ˜5×-Ð- IÓ.€GˆGÑØ $€GÐÑÜ˜h×<Ð<Ð*<Ó=€GˆJÓr/   c                ó¤   € V ^8„  d   QhR\         \        \        \        3,          ,          R\         \        ,          R\         \        ,          RR/# )r)   Ú
route_inforŸ  r³  r*   N©r   r¤   rX   )r,   s   "r-   r.   r.   *
  sB   € ÷ 1ñ 1Üœœc¤3˜h�Õ(ð1Ü4<¼SµMð1ÜJRÔSVÍ-ð1à	ñ1r/   c                óN   € V e!   T;'       g    RV R&   T;'       g    RV R&   R# R# )z:Expose the concrete route selected for one auxiliary call.Nr¢  rŸ  r  r³  rD   )r|  rŸ  r³  s   &&&r-   Ú_record_route_infor  *
  s3   € ð ÒØ!)×!3Ð!3¨Vˆ
�:ÑØ#×0Ð0 yˆ
�7Óñ r/   ro  c                ó´   € V ^8„  d   QhR\         R,          R\         R,          R\        \         \         \        \         \        3,          3,          R,          /# )r)   rŸ  Nro  r*   )rX   rù  r¤   r   )r,   s   "r-   r.   r.   3
  sE   € ÷ ñ Ü�t•ðÜ.1°D­jðä
Œ3””Tœ#œs˜(•^Ð#Õ$ tÕ+ñr/   c                 ó  € \         P                  4       pVf   R # \        VP                  R4      ;'       g    ^ 4      pV^,           VR&   \        T ;'       g    VP                  R4      ;'       g    R4      p\        VP                  R4      ;'       g    R4      pYER\        T;'       g    VP                  R4      ;'       g    R4      R\        VR	,          4      R
RVR,           2RVR\        VR,          4      /3# )Nr^  rŸ  r   r³  r\  ro  r`  Úapi_request_idr]  Ú	call_rolez
auxiliary:rB  Úretry_countÚauxiliary_task)ra  rž   rW  rX   )rŸ  ro  ry  r^  Úprovider_nameÚ
model_names   $$    r-   Ú_relay_auxiliary_metadatarˆ  3
  së   € ô &×)Ñ)Ó+€GØ‚ÙÜ˜Ÿ™ OÓ4×9Ð9¸Ó:€MØ,¨qÕ0€GˆOÑÜ˜×JÐJ G§K¡K°
Ó$;×JÐJ¸{ÓK€MÜ�W—[‘[ Ó)×6Ð6¨YÓ7€JØØ”C˜×QÐQ G§K¡K°
Ó$;×QÐQÐ?QÓRØœ#˜g lÕ3Ó4Ø�z '¨&¥/Ð!2Ð3Ø�}Øœ#˜g f�oÓ.ð'ð ð r/   rÊ  c                óò   € V ^8„  d   QhR\         R\        \        \         3,          R\        R,          R\        R,          R\        \        \        \         3,          .\         3,          R,          R\         /# ©r)   r¯   r;   rŸ  Nro  rÊ  r*   ©r   r¤   rX   r   )r,   s   "r-   r.   r.   F
  sh   € ÷ $ñ $Üð$Üœc¤3˜h�ð$Ü69¸Dµjð$ä�D�jð$ä)1´4¼¼S¸µ>Ð2BÄCÐ2GÕ)HÈ4Õ)Oð$ô 	ñ$r/   c                ó’  a aaaaaaaa€ ^ RI HpHo V! S S4      o\        P	                  4       ;'       g    / pVP	                  R4      oT;'       g    VP	                  R4      VR&   T;'       g    V V3R lo\        W#R7      pVf   \        SS4      # Tw  opo^ RIHo ^ R	I	H
p	 \        SP	                  R
4      ;'       g    T4      o T	! VVVVVVV3R l\        SP	                  R4      ;'       g    R4      SS SSS\        SP	                  R4      ;'       g    R4      R7      #   \         d   p
\        T
4       h Rp
?
ii ; i)ró  ©Úprepare_chat_messagesÚrelay_chat_metadatarB  rŸ  Ústream_providerc                 ó   <€ \        SV S4      # r8   )Ú_create_with_progress)Úrequestr¯   rB  s   &€€r-   r¹  Ú(_relay_sync_completion.<locals>.<lambda>T
  s   ø€ Ô*?ÀÈÐQUÔ*Vr/   ©rŸ  ro  N©Ú	relay_llm©Úrun_with_aux_hooksr³  c            	      óF   <€ SP                  SV 3R  lSSS! S4      RR7      # )c                 ó   <€ \        SV 4      # r8   )rv  )r“  rZ  s   &€r-   r¹  Ú:_relay_sync_completion.<locals>.<lambda>.<locals>.<lambda>a
  s   ø€ Ô(IÈ(ÐT[Ô(\r/   T©r`   r‡  ÚmetadataÚdefer_logical_completion)Úexecute_current©rZ  r;   rž  r‡  r†  r�  r—  s   €€€€€€€r-   r¹  r”  `
  s,   ø€ �I×-Ñ-ØÔ\Ø"¨zÑDWÐX`ÓDaØ)-ð .ô r/   r…  rj   ro  ©Úaux_taskrž  r¯   r;   rŸ  r³  ro  )Úagent.auxiliary_wirerŽ  r�  ra  rž   rˆ  rv  Úagentr—  Úagent.auxiliary_hooksr™  rX   rŸ   Ú_note_relay_auxiliary_error)r¯   r;   rŸ  ro  rÊ  rŽ  Úrelay_contextrž  Úfallback_modelr™  rc  rZ  rž  r‡  r†  r�  r—  rB  s   ff$$$      @@@@@@@r-   Ú_relay_sync_completionrª  F
  s1  ÿø€ ÷ Pá" 6¨6Ó2€Fô
 ,×/Ñ/Ó1×7Ð7°R€MØ×Ñ˜VÓ$€DØ'/×'PÐ'P°=×3DÑ3DÀZÓ3P€MÐ#Ñ$Ø×WÐWÕV€HÜ%¨xÔK€Eð ‚}Ü0°¸6ÓBÐBØ.3Ñ+€M�> 8ÝÝ8Ü�V—Z‘Z Ó(×:Ð:¨NÓ;€JðÙ!÷ò ô
 ˜Ÿ™Ð&6Ó7×=Ð=¸2Ó>ÈÐZ`ÐioØ"¨*¼sÀ8Ç<Á<ÐPZÓC[×CaÐCaÐ_aÓ?bô
ð 	
øô ô Ü# CÔ(Øûðús$   Ã)D* Ã6'D* ÄD* Ä*EÄ5EÅEc                óò   € V ^8„  d   QhR\         R\        \        \         3,          R\        R,          R\        R,          R\        \        \        \         3,          .\         3,          R,          R\         /# rŠ  r‹  )r,   s   "r-   r.   r.   m
  sh   € ÷ ñ ÜðÜœc¤3˜h�ðÜ69¸Dµjðä�D�jðä)1´4¼¼S¸µ>Ð2BÄCÐ2GÕ)HÈ4Õ)Oðô 	ñr/   c             ƒ   ó  a aa
aaaaa"  € ^ RI HpHo V! S S4      oT;'       g    V 3R lo
\        W#R7      pVf   S
! S4      G Rj  x€L
 # Tw  opo^ RIHo ^ RIHp \        SP                  R4      ;'       g    T4      o T! V
VVVVVV3R l\        SP                  R	4      ;'       g    R
4      SS SSS\        SP                  R4      ;'       g    R
4      R7      G Rj  x€L
 #  L¡ L  \         d   p	\        T	4       h Rp	?	ii ; i5i)ró  r�  c                 ó   <€ \        SV 4      # r8   ©Ú_acreate_with_progress©r“  r¯   s   &€r-   r¹  Ú)_relay_async_completion.<locals>.<lambda>u
  s   ø€ Ô*@ÀÈÔ*Qr/   r•  Nr–  )Úarun_with_aux_hooksr³  c            	      ó>   <€ SP                  SS SSS! S4      R R7      # )Tr�  )Úexecute_current_asyncr¡  s   €€€€€€€r-   r¹  r±  
  s)   ø€ �I×3Ñ3Ø˜ }ÀÙ,¨XÓ6ÐQUð 4ô r/   r…  rj   ro  r¢  )r¤  rŽ  r�  rˆ  r¥  r—  r¦  r²  rX   rž   rŸ   r§  )r¯   r;   rŸ  ro  rÊ  rŽ  rž  r©  r²  rc  rZ  rž  r‡  r†  r�  r—  s   ff$$$     @@@@@@r-   Ú_relay_async_completionrµ  m
  sú   ÿé € ÷ Pá" 6¨6Ó2€Fà×RÐRÔQ€HÜ%¨xÔK€EØ‚}Ù˜fÓ%×%Ð%Ø.3Ñ+€M�> 8ÝÝ9Ü�V—Z‘Z Ó(×:Ð:¨NÓ;€JðÙ(÷ò ô ˜Ÿ™Ð&6Ó7×=Ð=¸2Ó>ÈÐZ`ÐioØ"¨*¼sÀ8Ç<Á<ÐPZÓC[×CaÐCaÐ_aÓ?bô
÷ 
ð 	
ñ &ñ
øô ô Ü# CÔ(ØûðüsY   Š=DÁC)Á2DÁ;DÂ)C- Â-'C- ÃC- Ã$C+Ã%C- Ã(DÃ+C- Ã-D	Ã8DÄD	Ä	Dc          
      ó’   € V ^8„  d   QhR\         R\        \        \         3,          R\        R,          R\        R,          R\         /# )r)   r¯   r;   rŸ  Nro  r*   r›  )r,   s   "r-   r.   r.   ‹
  sF   € ÷ ñ ÜðÜœc¤3˜h�ðÜ69¸DµjðÜSVÐY]ÕS]ðäñr/   c                óš  a aaa	a
aaa€ ^ RI HpHo V! S S4      oV 3R lo\        W#R7      pVf	   S! S4      # Tw  opo	^ RIHo ^ RIHp \        SP                  R4      ;'       g    T4      o
T! VVV	V
VVV3R l\        S	P                  R4      ;'       g    R	4      S	S SSS
\        S	P                  R
4      ;'       g    R	4      RR7	      # )ró  r�  c                 ód   <€ SP                   P                  P                  ! R/ \        V S4      B # )NrD   )rö  rÝ  rÊ  r$   r°  s   &€r-   r¹  Ú$_relay_sync_stream.<locals>.<lambda>“
  s'   ø€ ˜VŸ[™[×4Ñ4×;Ò;ÑqÔ>_Ð`gÐioÓ>pÒqr/   r•  r–  r˜  r³  c            
      óJ   <€ SP                  SS SS\        S! S4      R  R7      # )c                 ó   € \        V R 4      # )rÃ  )rË  rS  s   &r-   r¹  Ú6_relay_sync_stream.<locals>.<lambda>.<locals>.<lambda>ž
  s   € Ô_fÐglÐnwÔ_xr/   )r`   r‡  Ú	finalizerrž  Úcompleted_response_predicate)Ústream_currentr¤   )rÊ  r;   rž  r‡  r†  r�  r—  s   €€€€€€€r-   r¹  r¹  œ
  s,   ø€ �	×(Ñ(Ø�F ¸:ÔQUÙ(¨Ó2ÑQxð )ô 
r/   r…  rj   ro  T)r£  rž  r¯   r;   rŸ  r³  ro  Ú	streaming)
r¤  rŽ  r�  rˆ  r¥  r—  r¦  r™  rX   rž   )r¯   r;   rŸ  ro  rŽ  rž  r©  r™  rÊ  rž  r‡  r†  r�  r—  s   ff$$    @@@@@@r-   Ú_relay_sync_streamrÁ  ‹
  s¿   ÿ€ ÷ Pá" 6¨6Ó2€Fô r€FÜ%¨xÔK€EØ‚}Ù�f‹~ÐØ.3Ñ+€M�> 8ÝÝ8Ü�V—Z‘Z Ó(×:Ð:¨NÓ;€JÙ÷	
ò 	
ô �X—\‘\Ð"2Ó3×9Ð9°rÓ:ÀXÐV\ÐekØ j¼3¸x¿|¹|ÈJÓ?W×?]Ð?]Ð[]Ó;^Ðjnôð r/   c                óB   € V ^8„  d   QhR\         \        R3,          RR/# )r)   Úvalues.r*   N)rù  r   )r,   s   "r-   r.   r.   ©
  s"   € ÷ 6ñ 6¬%´°S°­/ð 6¸dñ 6r/   c                ó„   € \         ;_uu_ 4        V w  ssssss\        V 4      sRRR4       R#   + '       g   i     R# ; i)z[Write the legacy globals + compat snapshot (``_MAIN_RUNTIME_FIELDS`` order) under the lock.N)	Ú_RUNTIME_MAIN_COMPAT_LOCKÚ_RUNTIME_MAIN_PROVIDERÚ_RUNTIME_MAIN_MODELÚ_RUNTIME_MAIN_BASE_URLÚ_RUNTIME_MAIN_API_KEYÚ_RUNTIME_MAIN_API_MODEÚ_RUNTIME_MAIN_AUTH_MODErù  Ú_RUNTIME_MAIN_COMPAT_SNAPSHOT©rÃ  s   &r-   Ú_publish_runtime_main_mirrorsrÎ  ©
  s>   € ÷ 
#Ö	"àSYñ	QÐ	Ð!4Ð6LØ	Ð 6Ð8OÜ(-¨f«Ð%÷ 
#×	"×	"Ò	"ús   �.®?	c                ó\   € V ^8„  d   QhR\         \        \        \        3,          ,          /# r(   ©r   r¤   rX   r   )r,   s   "r-   r.   r.   ³
  s    € ÷ 3ñ 3œh¤t¬C´¨H¥~Õ6ñ 3r/   c                 óê   € \         P                  ! 4       \         P                  ! 4       Jd   R# \        \        \
        \        \        \        3p V \        8X  d   R# \        \        \        V 4      4      # )zÌExpose deliberately patched legacy globals as a main context.

Mirrors must never become runtime inputs: a direct patch counts only when it differs from
the mirrored snapshot and only on the main thread.
N)rè   Úcurrent_threadÚmain_threadrÆ  rÇ  rÈ  rÉ  rÊ  rË  rÌ  r¤   ÚzipÚ_MAIN_RUNTIME_FIELDSrÍ  s    r-   Ú_compat_runtime_mainrÖ  ³
  sZ   € ô ×ÒÓ!¬×)>Ò)>Ó)@Ó@ÙÜ$Ô&9Ô;QÜ#Ô%;Ô=TðV€FàÔ.Ô.ÙÜ”Ô(¨&Ó1Ó2Ð2r/   c                ó0   € V ^8„  d   QhR\         R\        /# )r)   r8  r*   ra   )r,   s   "r-   r.   r.   Â
  s   € ÷ Kñ Kœsð K¤sñ Kr/   c                ó¬   € \         P                  4       pVf   \        4       p\        V\        4      '       d   VP                  V 4      ;'       g    R# R# )zERead one runtime field through context-local/controlled legacy state.rj   )Ú_RUNTIME_MAIN_CONTEXTrž   rÖ  r?   r¤   )r8  ré  s   & r-   r›  r›  Â
  sE   € ä#×'Ñ'Ó)€GØ‚Ü&Ó(ˆÜ)3°G¼T×)BÒ)BˆG�K‰K˜Ó×$Ð$ "ÐJÈÐJr/   Úrequested_providerÚ	auth_moderŽ  r�  c                ó¤   € V ^8„  d   QhR\         R\         R\         R\         R\        R\         R\         R\         R	\         R
\        P                  /
# )r)   rŸ  r³  rÚ  rV   rU   ro  rÛ  rŽ  r�  r*   )rX   r   rn  ÚToken)r,   s   "r-   r.   r.   Ê
  sf   € ÷ ñ ÜðÜðÜ69ðÜJMðäðä!$ðä69ðäLOðô ðô ×Ññ	r/   c               óÒ  a
€ RT ;'       g    RP                  4       P                  4       RT;'       g    RP                  4       P                  4       RT;'       g    RP                  4       RT;'       g    RP                  4       R\        V4      RT;'       g    RP                  4       RT;'       g    RP                  4       P                  4       R	T;'       g    RP                  4       R
T;'       g    RP                  4       /	o
\        P	                  S
4      p	\        \        ;QJ d!    . V
3R l\         4       F  NK  	  54       V	# ! V
3R l\         4       4      4       V	# )u7  Record the current context's live main runtime for auxiliary routing.

Context-local so concurrent gateway sessions don't clobber each other; legacy mirrors are
updated for old readers. ``cache_scope`` is the rotation-stable logical cache scope,
preferred over ``session_id`` for prompt_cache_key derivation.

``cache_scope`` is the rotation-stable logical cache scope (compression- lineage root â€”
agent/prompt_cache_scope.py) resolved once per turn by turn_context; auxiliary Responses calls prefer it
over ``session_id`` for prompt_cache_key derivation (#79017).
rŸ  rj   rÚ  r³  rV   rU   ro  rÛ  rŽ  r�  c              3   ó6   <"  € T F  pSV,          x € K  	  R # 5ir8   rD   )r#  r8  ré  s   & €r-   r%  Ú#set_runtime_main.<locals>.<genexpr>æ
  s   øé € Ð'YÑDX¸5¨°¯ªÓDXùs   ƒ)r¨  r©  Ú_normalize_api_keyrÙ  rb  rÎ  rù  rÕ  )rŸ  r³  rÚ  rV   rU   ro  rÛ  rŽ  r�  r“  ré  s   &&$$$$$$$ @r-   Úset_runtime_mainrâ  Ê
  s  ø€ ð  	�X—^�^ ×*Ñ*Ó,×2Ñ2Ó4ØÐ1×7Ð7°R×>Ñ>Ó@×FÑFÓHØ�%—+�+˜2×$Ñ$Ó&Ø�X—^�^ ×*Ñ*Ó,ØÔ% gÓ.Ø�X—^�^ ×*Ñ*Ó,Ø�i—o�o 2×,Ñ,Ó.×4Ñ4Ó6Ø�z×'Ð' R×.Ñ.Ó0Ø˜×)Ð) r×0Ñ0Ó2ð
€Gô "×%Ñ% gÓ.€EÜ!§%¤%Ô'YÕDXÓ'Y§%ÔZØ€Lð #(Ô'YÕDXÓ'YÓ"YÔZØ€Lr/   c                ó<   € V ^8„  d   QhR\         P                  RR/# )r)   r“  r*   N)rn  rÝ  )r,   s   "r-   r.   r.   ê
  s    € ÷ ñ œk×/Ñ/ð °Dñ r/   c                ón   € V f   R#  \         P                  V 4       R#   \        \        3 d     R# i ; i)z:Restore the runtime binding that preceded one scoped turn.N)rÙ  rf  rc   r”  )r“  s   &r-   Úreset_runtime_mainrå  ê
  s4   € à‚}ÙðÜ×#Ñ# EÖ*øÜœ*Ð%ô Úðús   ˆ Ÿ4³4c                ó\   € V ^8„  d   QhR\         \        \        \        3,          ,          /# )r)   Úmain_runtimerÐ  )r,   s   "r-   r.   r.   õ
  s    € ÷ +ñ +¤h¬t´C¼°H­~Õ&>ñ +r/   c              #  óÊ   "  € \        V 4      p\        P                  T;'       g    R4      p Vx € \        P                  V4       R#   \        P                  T4       i ; i5i)zETemporarily bind an explicit runtime without touching legacy mirrors.N)rã  rÙ  rb  rf  )rç  ré  r“  s   &  r-   Úscoped_runtime_mainré  ô
  sN   é € ô & lÓ3€GÜ!×%Ñ% g§o o°Ó6€Eð+ØŠä×#Ñ# EÖ*øÔ×#Ñ# EÕ*üs   ‚+A#®A	 ²A#Á	A Á A#c                ó   € V ^8„  d   QhRR/# r½   rD   )r,   s   "r-   r.   r.   ÿ
  s   € ÷ <ñ <˜Dñ <r/   c                 óF   € \         P                  R4       \        R4       R# )z2Clear the runtime override in the current context.N©rj   rj   rj   rj   rj   rj   )rÙ  rb  rÎ  rD   r/   r-   Úclear_runtime_mainrí  ÿ
  s   € ä×Ñ˜dÔ#Ü!Ð":Ö;r/   c                ó’   € V ^8„  d   QhR\         \        \        ,          \        \        ,          \        \        ,          3,          /# r(   rÂ  )r,   s   "r-   r.   r.     s+   € ÷ $8ñ $8¤¤x´¥}´h¼sµmÄXÌcÅ]Ð'RÕ!Sñ $8r/   c                 ót  €  ^ RI Hp  ^ RIHp V! RR7      p\        T\        4      '       g4   \        R4      P                  R	4      pT'       g   R# R
TR\        R4      /pTP                  R
4      pTP                  R4      pTP                  R4      p\        T\        4      '       d   TP                  4       '       g   R# TP                  4       P                  R	4      p\        TR4      '       d   R# \        T\        4      '       d   TP                  4       '       g   Rp\        T\        4      '       d   TP                  4       '       g   RpYVP                  4       T3#   X  d#   p\        P                  RT4       Ru Rp?# Rp?i\         d$   p\        P                  RT4       Rp Rp?EL›Rp?ii ; i)z`Resolve the active custom/main endpoint like the main CLI (env OPENAI_BASE_URL or config-saved).©Ú	AuthError©Úresolve_runtime_providerr�  )Ú	requestedz3Auxiliary client: no custom endpoint configured: %sNz6Auxiliary client: custom runtime resolution failed: %sÚOPENAI_BASE_URLrµ  rV   rU   ÚOPENAI_API_KEYro  úopenrouter.aiúno-key-required©NNN)r˜  rñ  Úhermes_cli.runtime_providerró  r­   rÞ   rŸ   r?   r¤   rÚ  r   rž   rX   r¨  rŠ   )rñ  ró  ré  rc  Úopenai_baseÚcustom_baseÚ
custom_keyÚcustom_modes           r-   Ú_resolve_custom_runtimerÿ    sl  € ðÝ-ÝHÙ*°XÔ>ˆô �gœt×$Ò$ä%Ð&7Ó8×?Ñ?ÀÓDˆßØ#Ð#Ø˜{¨I´ÐGWÓ7XÐYˆØ—+‘+˜jÓ)€KØ—‘˜YÓ'€JØ—+‘+˜jÓ)€KÜ�k¤3×'Ò'¨{×/@Ñ/@×/BÒ/BØÐØ×#Ñ#Ó%×,Ñ,¨SÓ1€KÜ˜[¨/×:Ò:ØÐô �j¤#×&Ò&¨j×.>Ñ.>×.@Ò.@Ø&ˆ
Ü�k¤3×'Ò'¨{×/@Ñ/@×/BÒ/BØˆØ×(Ñ(Ó*¨KÐ7Ð7øð= ô  ô 	�‰ÐJÈCÔPØÕûÜô Ü�‰ÐMÈsÔSØŽûðús/   ‚E" Å"F7Å)FÆ F7ÆF7ÆF7ÆF2Æ2F7c                ó$   € V ^8„  d   QhR\         /# r(   rW   )r,   s   "r-   r.   r.   ,  s   € ÷ ñ ¤#ñ r/   c                  ó6   € \        4       w  p  pT ;'       g    R # ©rj   )rÿ  )rü  r¢  s     r-   Ú_current_custom_base_urlr  ,  s   € Ü/Ó1Ñ€K��AØ×Ð˜"Ðr/   c                ó   € V ^8„  d   QhRR/# r½   rD   )r,   s   "r-   r.   r.   1  s   € ÷ ñ  $ñ r/   c            	     ól  € ^ RI Hp  \        4        R Fv  p\        \        P
                  P                  V4      ;'       g    R4      P                  4       pV'       g   KM   V ! V4      pVP                  '       d   VP                  pKv  Kx  	  R#   \         d   p\        RT RT: R24      ThRp?ii ; i)z�Fail fast on malformed proxy env URLs (a shell typo like ``:6153export`` otherwise surfaces as a cryptic httpx ``Invalid port``).©r   rj   z%Malformed proxy environment variable rÏ  z1. Fix or unset your proxy settings and try again.N)ÚHTTPS_PROXYÚ
HTTP_PROXYÚ	ALL_PROXYÚhttps_proxyÚ
http_proxyÚ	all_proxy)Úurllib.parser   r�   rX   rm  rn  rž   r¨  ÚschemeÚportr”  rc   )r   r  rQ  rˆ  r¢  rc  s         r-   Ú_validate_proxy_env_urlsr  1  s§   € å%ÜÔÛcˆÜ”B—J‘J—N‘N 3Ó'×-Ð-¨2Ó.×4Ñ4Ó6ˆßÙð	Ù˜e“_ˆFØ�}�}ˆ}Ø—K‘K’ñ ó døô ô 	ÜØ7¸°u¸A¸e¹Yð GBð Bóð ðûð	ús   Á!BÁ;BÂB3ÂB.Â.B3c                ó(   € V ^8„  d   QhR\         RR/# )r)   rV   r*   NrW   )r,   s   "r-   r.   r.   D  s   € ÷ ñ ¤ð ¨ñ r/   c                ó2  € ^ RI Hp \        T ;'       g    R4      P                  4       pV'       d   VP	                  R4      '       d   R#  V! V4      pVP
                  R9   d   VP                  pR# R#   \         d   p\        RT: R24      ThRp?ii ; i)zEReject obviously broken custom endpoint URLs before they reach httpx.r  rj   zacp://NzMalformed custom endpoint URL: zJ. Run `hermes setup` or `hermes model` and enter a valid http(s) base URL.>   ÚhttpÚhttps)	r  r   rX   r¨  rª  r  r  r”  rc   )rV   r   r  rˆ  r¢  rc  s   &     r-   Ú_validate_base_urlr  D  s“   € å%Ü�H—N�N Ó#×)Ñ)Ó+€Iß˜	×,Ñ,¨X×6Ò6ÙðÙ˜)Ó$ˆØ�=‰=Ð-Ô-Ø—‘ŠAñ .øäô ÜØ-¨i©]ð ;Wð Wó
ð ð	ûðús   Á%A5 Á5BÂ BÂBc                ór   € V ^8„  d   QhR\         \        \        ,          \        \        ,          3,          /# r(   )rù  r   r   rX   )r,   s   "r-   r.   r.   U  s(   € ÷ #gñ #gœe¤H¬S¥M´8¼Cµ=Ð$@ÕAñ #gr/   c            
      ó  € \        4       p \        V 4      ^8X  d   . V ORN5MT w  rpV'       d	   V'       g   R# VP                  4       P                  \        P                  ! 4       4      '       d   R# \        4       ;'       g    Rp\        P                  RYC;'       g    R4       \        V4      w  rVV'       d   RV/M/ p\        R4      pV'       d   W‡R&   VR8X  d   \        RRVR	V/VB p	\        W”4      V3# VR
8X  d,    ^ RIHp
 ^ RIHp V
! W!4      p	\%        Y”Y!T! Y4      R7      T3# \        RRVR	V/VB p\'        WÄW!V4      V3#   \          d*    \        P#                  R4       \        RRTR	T/TB T3u # i ; i)r)   Núgpt-4o-miniz3Auxiliary client: custom endpoint (%s, api_mode=%s)r`  Údefault_queryrY  Úcodex_responsesrU   rV   r,  rr  ©Úanthropic_route_is_oauthu|   Custom endpoint declares api_mode=anthropic_messages but the anthropic SDK is not installed â€” falling back to OpenAI-wire.rv  rß  rD   )rÿ  rŸ  r©  rª  rÈ  rO  r­   rÞ   r‹  r^  r¸   rú  r4  rs  Úagent.anthropic_credentialsr  rª   r®   rA  rw  )ré  rü  rý  rþ  r³  Ú_clean_baseÚ_dqÚ_extraÚ_custom_headersrU  rs  r  Ú_fallback_clients                r-   Ú_try_custom_endpointr#  U  s©  € Ü%Ó'€GÜ?BÀ7»|ÈqÔ?PÐ+;¨WÐ+;°dÒ+;ÐV]Ñ(€K˜[ßŸjØÐØ×ÑÓ×%Ñ%Ô&9×&?Ò&?Ó&A×BÒBØÐÜ$Ó&×7Ð7¨-€EÜ
‡L�LÐFÈ×OpÐOpÐ^pÔqÜ0°Ó=Ñ€Kß'*ˆo˜sÑ#°€Fä1°$Ó7€OßØ$3Ð Ñ!ØÐ'Ô'Ü+Ñ_°JÐ_ÈÐ_ÐX^Ñ_ˆÜ# KÓ7¸Ð>Ð>ØÐ*Ô*ð		dÝFÝLÙ0°ÓIˆKô (¨¸JÙ1IÈ+Ó1bôdØejðkð 	kô -Ñ`°ZÐ`È+Ð`ÐY_Ñ`ÐÜ Ð!1¸*ÐS^Ó_ÐafÐfÐføô ô 	dÜ�N‰NðRôô )Ñ\°Ð\ÀkÐ\ÐU[Ñ\Ð^cÐcÒcð	dús   ÄE Å1F Å?F c                ó~   € V ^8„  d   QhR\         R\        \        \        ,          \        \         ,          3,          /# r²  ©rX   rù  r   r   )r,   s   "r-   r.   r.   {  s,   € ÷ ;ñ ;¤sð ;¬u´X¼cµ]ÄHÌSÅMÐ5QÕ/Rñ ;r/   c                óÞ   € V '       g   \         P                  R4       R# \        4       pVf   R# Tw  r#\         P                  RV 4       ^ RIHp \        W#V! 4       R7      p\        WP4      V 3# )u¸   CodexAuxiliaryClient for xAI Grok OAuth (Responses API); (None, None) if not authed.

Caller must pass an explicit model â€” a pinned Grok default would rot as xAI's allowlist drifts.
zuAuxiliary client: xai-oauth requested without a model; pass model explicitly (auxiliary.<task>.model in config.yaml).z2Auxiliary client: xAI OAuth (%s via Responses API)rò  r  rß  )r­   r®   rÀ  rÞ   rõ  ró  r¸   rú  )r³  ÚresolvedrU   rV   ró  rU  s   &     r-   Ú_build_xai_oauth_aux_clientr(  {  st   € ÷
 Ü�‰ðMô	
ð ÐÜ)Ó+€HØÒØÐØ Ñ€GÜ
‡L�LÐEÀuÔMÝ9Ü'ØÑ<VÓ<Xô€Kô   Ó3°UÐ:Ð:r/   c                ó$   € V ^8„  d   QhR\         /# r(   rW   )r,   s   "r-   r.   r.   ’  s   € ÷ @ñ @¤#ñ @r/   c                 ó6   € \        R4      P                  R4      # )z°Profile-scoped ``HERMES_CODEX_BASE_URL`` (same read as the API-key env vars: under a
multiplexer the routed profile's .env decides the endpoint, never a sibling's process env).ÚHERMES_CODEX_BASE_URLrµ  )rÚ  r   rD   r/   r-   rÅ  rÅ  ’  s   € ô Ð2Ó3×:Ñ:¸3Ó?Ð?r/   c                ó~   € V ^8„  d   QhR\         R\        \        \        ,          \        \         ,          3,          /# r²  r%  )r,   s   "r-   r.   r.   ˜  s,   € ÷ ;ñ ;œsð ;¤u¬X´c­]¼HÄS½MÐ-IÕ'Jñ ;r/   c           	     óà   € V '       g   \         P                  R4       R# \        4       w  rV'       g   R# \         P                  RV 4       \	        W\        WR7      R7      p\        W04      V 3# )z¨CodexAuxiliaryClient for an explicit model; (None, None) without a Codex OAuth token.

No auto-selected default: the Codex model allow-list is undocumented and drifts.
zxAuxiliary client: openai-codex requested without a model; pass model explicitly (auxiliary.<task>.model in config.yaml).z4Auxiliary client: Codex OAuth (%s via Responses API)ry  r  rß  )r­   r®   rÊ  rÞ   r¸   Ú_codex_cloudflare_headersrú  )r³  Úcodex_tokenrV   rU  s   &   r-   Ú_build_codex_clientr0  ˜  sk   € ÷
 Ü�‰ðMô	
ð ÐÜ>Ó@Ñ€KßØÐÜ
‡L�LÐGÈÔOÜ'ØÜ1°+ÔQô€Kô   Ó3°UÐ:Ð:r/   r  r  c                óú   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\         \        ,          R\         \        ,          R\        \         \        ,          \         \        ,          3,          /# )r)   r³  r  r  ro  r*   ©r   rX   rù  r   )r,   s   "r-   r.   r.   ®  sX   € ÷ 6ñ 6Ü”s�mð6Ü6>¼sµmð6ä¤•}ð6ä7?Äµ}ð6ô Œ8”C�=œ(¤3�-Ð'Õ(ñ6r/   c                óN  €  ^ RI Hp ^ RIHp ^ RIHp  T! 4       p\        T\        4      '       d   TP                  R4      M/ p\        T\        4      '       g   / p T! RTYT R7      p	T	P                  R
4      p\        T	P                  RR4      ;'       g    R4      pT;'       g    T	P                  R4      ;'       g    Rp\        T4      '       g	   T'       d	   T'       g   R# \        T ;'       g%    \        TP                  R4      ;'       g    R4      R4      pT'       g(   \        P                  RYP                  R4      4       R# \!        T4      w  ppT'       d   RT/M/ p\#        RR
TRT/TB pTR8X  d   \%        TT4      T3# TR8X  d   \'        TYëYÍ4      T3# TT3#   \         d    Ru # i ; i  \         d    / p ELoi ; i  T d#   p
\        P                  RT
4       Ru Rp
?
# Rp
?
i\         d#   p
\        P                  R	T
4       Ru Rp
?
# Rp
?
ii ; i)zÍAzure Foundry aux client via the main agent's ``_resolve_azure_foundry_runtime`` (api_key vs Entra
callable bearer, per-model api_mode, base_url overrides). Returns ``(client, model)`` or ``(None, None)``.)Ú_resolve_azure_foundry_runtimerð  rb  Nr³  úazure-foundry)rÚ  r=  r  r  Útarget_modelzAuxiliary azure-foundry: %sz)Auxiliary azure-foundry runtime error: %srU   rV   rj   ro  r`  r  zAAuxiliary azure-foundry: no model resolved (model=%r, default=%r)r  r  r,  rß  rD   )rú  r4  r˜  rñ  r�   r–   rª   r?   r¤   rž   rŸ   r­   rÞ   rX   rÔ   Ú_normalize_resolved_modelr‹  r¸   rú  rw  )r³  r  r  ro  r4  rñ  r–   r  r=  ré  rc  rU   rV   Úruntime_api_modeÚfinal_modelr  r  rê  r¯   s   $$$$               r-   Ú_try_azure_foundryr:  ®  s  € ðÝNÝ-Ý:ðÙ"Ó$ˆÜ(2°3¼×(=Ò(=�C—G‘G˜GÔ$À2ˆ	Ü˜)¤T×*Ò*ØˆIðÙ0Ø.¸)Ø-Øô
ˆð �k‰k˜)Ó$€GÜ�7—;‘;˜z¨2Ó.×4Ð4°"Ó5€HØ×PÐP 7§;¡;¨zÓ#:×PÐPÐ>PÐä�W×Ò§·ØÐÜ+¨E×,XÐ,X´S¸¿¹ÀyÓ9Q×9WÐ9WÐUWÓ5XÐZiÓj€Kßä�‰ØOØ—=‘= Ó+ô	
ð Ðä0°Ó:Ñ€K�ß69˜_¨cÑ2¸r€EÜ"ÑR¨7ÐR¸[ÐRÈEÑR€FØÐ,Ô,Ü# F¨KÓ8¸+ÐEÐEØÐ/Ô/ä$ V¨[À8Ó^Ð`kÐkÐkØ�;ÐÐøôY ô ØÒðûô ô Ø‹	ðûð ô Ü�‰Ð2°CÔ8ØÕûÜô Ü�‰Ð@À#ÔFØÕûðúsY   ‚F) •AF< ÁG Æ)F9Æ8F9Æ<GÇGÇH$ÇG4Ç.H$Ç4H$ÈH$ÈHÈH$ÈH$c          	      óæ   € V ^8„  d   QhR\         \        \        . \        3,          ,          ,          R\         \        ,          R\        \         \        ,          \         \        ,          3,          /# )r)   r  r  r*   )r   rX   r   rù  r   )r,   s   "r-   r.   r.   ç  sT   € ÷ 7cñ 7c¤X¬c´H¸RÄ¸WÕ4EÕ.EÕ%Fð 7cÜ&.¬s¥mð7cÜ?DÄXÌcÅ]ÔT\Ô]`ÕTaÐEaÕ?bñ7cr/   c                 óò  €  ^ RI Hp ^ RIHp \        R4      w  rET'       d   Te   T ;'       g    \        T4      pMRpT ;'       g    T! 4       pT'       g   R# T'       d   \        T\        4      M\        p\        P                  ! \        4      ;_uu_ 4        ^ RIHp T! 4       p	T	P                  R4      p
\        T
\         4      '       d›   \#        T
P                  R4      ;'       g    R4      P%                  4       P'                  4       pTR8X  dT   T
P                  R	4      ;'       g    RP%                  4       P)                  R
4      pT'       d   \+        T4      '       d   TpRRR4       T;'       g    RP%                  4       P)                  R
4      pT'       d,   \+        T4      '       g   \,        P/                  RT4       R# Tp^ RIHp T! T4      p\3        R4      ;'       g    Rp\5        4       '       d   \7        RTR7      T3# \,        P9                  RTY4        T! Yg4      p\;        TTYgTR7      T3#   \         d    Ru # i ; i  + '       g   i     Lò; i  \         d    Ru # i ; i)ró  rr  )Úresolve_anthropic_tokenNr<  rb  r³  rŸ  rj   rV   rµ  u„   Auxiliary client: refusing anthropic explicit base_url %r â€” not an Anthropic-compatible host; no client built and no request sent.)Ú_is_oauth_tokenr=  r[   z8Auxiliary client: Anthropic native (%s) at %s (oauth=%s)rv  rß  )r4  rs  r  r=  rª   r®  r¼  rÄ  Ú_ANTHROPIC_DEFAULT_BASE_URLr–  r—  rŸ   r�   r–   rž   r?   r¤   rX   r¨  r©  r   rË  r­   r®   r>  r6  rs   rS   rÞ   rA  )r  r  rs  r=  rˆ  r¹  r“  rV   r–   r  r=  Úcfg_providerÚcfg_base_urlr  r>  r  r³  rU  s   &&                r-   râ  râ  ç  s  € ðÝBÝGô -¨[Ó9Ñ€Lß˜Ò)Ø ×@Ð@Ô$9¸%Ó$@‰ð ˆØ ×=Ð=Ñ$;Ó$=ˆßØÐ÷ NZÔ% eÔ-HÔIÔ_z€HÜ	×	Ò	œY×	'Õ	'Ý:Ù"Ó$ˆØ—G‘G˜GÓ$ˆ	Ü�i¤×&Ò&Ü˜yŸ}™}¨ZÓ8×>Ð>¸BÓ?×EÑEÓG×MÑMÓOˆLØ˜{Ô*Ø )§¡¨jÓ 9× ?Ð ?¸R×FÑFÓH×OÑOÐPSÓT�ßÔ$AÀ,×$OÒ$OØ+�H÷ 
(ð &×+Ð+¨×2Ñ2Ó4×;Ñ;¸CÓ@€LßÜ,¨\×:Ò:Ü�N‰NðRàôð
 ÐØˆÝ;Ù˜uÓ%€HÜ'¨Ó4×SÐSÐ8S€EÜ×Òä"¨2¸ÔAÀ5ÐHÐHÜ
‡L�LÐKÈUÐT\ÔgðÙ,¨UÓ=ˆô $ K°¸ÐRZÔ[Ð]bÐbÐbøôe ô ØÒðú÷ 
(×	'ûôD ô ØÒðúsC   ‚I  ÂAIÃ,AIÄ.'IÅIÈ'I& É IÉIÉI#	É&I6É5I6c                óŠ   € V ^8„  d   QhR\         \        \        \        3,          ,          R\        \        \        3,          /# )r)   rç  r*   rÐ  )r,   s   "r-   r.   r.   '  s0   € ÷ ñ ¬(´4¼¼S¸µ>Õ*Bð ÄtÌCÔQTÈHÅ~ñ r/   c                ó6  € V f#   \         P                  4       p V f   \        4       p \        V \        4      '       g   / # / p\
         FŠ  pV P                  V4      pVR8X  d.   \        V4      '       d   \        V\        4      '       g   W1V&   KH  \        V\        4      '       g   K`  VP                  4       '       g   Kx  VP                  4       W&   KŒ  	  R F>  pVP                  V4      p\        V\        4      '       g   K,  VP                  4       W&   K@  	  V# )uÑ   Return a sanitized copy of a live main-runtime override.

``api_key`` may be a zero-arg callable (Entra ID token provider, accepted by the OpenAI SDK)
â€” preserved as-is so aux clients share main-agent auth.
rU   )rŸ  rÚ  )
rÙ  rž   rÖ  r?   r¤   Ú_MAIN_RUNTIME_CONTEXT_FIELDSrÔ   rX   r¨  r©  )rç  r­  r8  rQ  Úidentity_fieldÚidentitys   &     r-   rã  rã  '  sÞ   € ð Òä,×0Ñ0Ó2ˆØÒÜ/Ó1ˆLÜ�l¤D×)Ò)Øˆ	Ø!#€Jß-ˆØ× Ñ  Ó'ˆØ�IÔ¤(¨5§/¢/¼*ÀUÌC×:PÒ:PØ %�uÓÜ˜œs×#Ô#¨¯©¯¬Ø %§¡£ˆJÓñ .ó =ˆØ—>‘> .Ó1ˆÜ�h¤×$Ô$Ø)1¯©Ó)9ˆJÓ&ñ =ð Ðr/   c                ó:   € V ^8„  d   QhR\         \        ,          /# r(   )r—  rù  )r,   s   "r-   r.   r.   B  s   € ÷ ñ œT¤%�[ñ r/   c                 ó>   € R\         3R\        3R\        3R\        3.# )z¸Ordered provider detection chain, built at call time so ``_try_*`` patches are picked up.

``openai-codex`` is deliberately absent (shifting allow-list breaks guessed-model fallback).
rc  r  úlocal/customzapi-key)r  r0  r#  rë  rD   r/   r-   Ú_get_provider_chainrJ  B  s.   € ð 
”Ð'¨&´)Ð)<Ø	Ô-Ð.°Ô<UÐ0Vðð r/   éX  rc  r  rI  r¦  c                ó0   € V ^8„  d   QhR\         R\         /# rž  rW   )r,   s   "r-   r.   r.   Z  s   € ÷ 2ñ 2¤Sð 2¬Sñ 2r/   c                óŽ   € V '       g   R# \        V 4      P                  4       P                  4       p\        P	                  W4      # )u_   resolved_provider â†’ chain label; unknown API-key providers fall back to the lowercased input.rj   )rX   r¨  r©  Ú_AUX_UNHEALTHY_LABEL_ALIASESrž   )rŸ  Úps   & r-   Ú_normalize_chain_labelrP  Z  s4   € çÙÜˆH‹×ÑÓ×#Ñ#Ó%€AÜ'×+Ñ+¨AÓ1Ð1r/   zpayment / credit errorr  c                ó„   € V ^8„  d   QhR\         R\        \        ,          R\        \         ,          R\         R\        RR/# )r)   rŸ  rr  rV   rõ  r  r*   N)rX   r   rO  rW  )r,   s   "r-   r.   r.   e  sF   € ÷ ñ ÜðÜ ¤�ðÜ=EÄc½]ðäðä8;ðð 
ñr/   c               óR  € \        V 4      pV'       g   R# \        WR4      pVf   \        MTp\        P                  ! 4       V,           pV\        V&   V\
        V&   \        P                  VRV\        V4      V\        P                  ! R\        P                  ! V4      4      4       R# )u  Hide one provider endpoint until the TTL expires. ``reason`` is what the log says and what the
skip line echoes: absent credentials are an expected state (DEBUG), a confirmed 402 is a fault
(WARNING) â€” the old fixed payment wording sent local-only users chasing billing (#64144).Nz_Auxiliary: marking %s unhealthy for %ds (%s). Subsequent auxiliary calls will skip it until %s.z%H:%M:%S)rP  r€   Ú_AUX_UNHEALTHY_TTL_SECONDSr=  Ú_aux_unhealthy_untilÚ_aux_unhealthy_reasonr­   ÚlogrW  ÚstrftimeÚ	localtime)rŸ  rr  rV   rõ  r  rù   r  r�  s   &&$$$   r-   r  r  e  s…   € ô # 8Ó,€EßÙÜ
˜uÓ
/€CØ(+ªÕ
$¸€CÜ—’“˜sÕ"€JØ *Ô˜ÑØ!'Ô˜#ÑÜ
‡J�JØð	<àŒs�3‹x˜¤§¢¨z¼4¿>º>È*Ó;UÓ!Vö	r/   c                óR   € V ^8„  d   QhR\         R\        \         ,          R\        /# )r)   rù   rV   r*   ©rX   r   rm   )r,   s   "r-   r.   r.   |  s%   € ÷ ñ ¤#ð ´¼#µð Ì$ñ r/   c                ó"  € V '       g   R# \        W4      p\        P                  V4      pVf   R# \        P                  ! 4       V8¼  dE   \        P	                  VR4       \
        P	                  VR4       \        P	                  VR4       R# R# )zZTrue iff this provider endpoint is unhealthy and unexpired; lazily evicts expired entries.FNT)r€   rT  rž   r=  rÆ  Ú_aux_unhealthy_logged_atrU  )rù   rV   r  r�  s   &&  r-   rá  rá  |  so   € çÙÜ
˜uÓ
/€CÜ%×)Ñ)¨#Ó.€JØÒÙÜ‡y‚yƒ{�jÔ Ü× Ñ   dÔ+Ü ×$Ñ$ S¨$Ô/Ü×!Ñ! # tÔ,ÙÙr/   c                ól   € V ^8„  d   QhR\         R\        \         ,          R\        \         ,          RR/# )r)   rù   rB  rV   r*   NrL  )r,   s   "r-   r.   r.   Œ  s4   € ÷ 
ñ 
Üð
Üœs•mð
Ü9AÄ#½ð
à	ñ
r/   c               ór  € \         P                   ! 4       p\        W4      pV\        P                  VR4      ,
          ^<8¼  du   V\        V&   \        P                  WC4      p\
        P                  RT;'       g    RV \        P                  V\        4      \        ^ \        WS,
          4      4      4       R# R# )zCLog a skipped unhealthy provider at most once per minute per label.rü  z,Auxiliary %s: skipping %s (%s, retry in %ds)ÚcallN)r=  r€   r\  rž   rT  r­   r+  rU  Ú_AUX_UNHEALTHY_PAYMENT_REASONrÒ  rW  )rù   rB  rV   Únowr  r�  s   &&$   r-   Ú_log_skip_unhealthyrb  Œ  s‘   € ô �)Š)‹+€CÜ
˜uÓ
/€CØ
Ô%×)Ñ)¨#¨sÓ3Õ3°rÔ9Ø(+Ô  Ñ%Ü)×-Ñ-¨cÓ7ˆ
Ü�‰Ø:Ø�NˆN�F˜EÔ#8×#<Ñ#<¸SÔB_Ó#`Ü�”3�zÕ'Ó(Ó)ö	
ñ :r/   c                ó   € V ^8„  d   QhRR/# r½   rD   )r,   s   "r-   r.   r.   œ  s   € ÷ "ñ " Dñ "r/   c                 ó~   € \         P                  4        \        P                  4        \        P                  4        R# )z8Clear the unhealthy cache (tests / explicit user reset).N)rT  Úclearr\  rU  rD   r/   r-   Ú_reset_aux_unhealthy_cacherf  œ  s&   € ä×ÑÔ Ü×"Ñ"Ô$Ü×ÑÖ!r/   c                óV   € V ^8„  d   QhR\         R\        \         R3,          R\        /# )r)   r-  Úneedles.r*   )rX   rù  rm   )r,   s   "r-   r.   r.   £  s)   € ÷ -ñ -œð -¤e¬C°¨H¥oð -¼$ñ -r/   c                óx   a € \         ;QJ d    V 3R lV 4       F  '       g   K   R# 	  R# ! V 3R lV 4       4      # )z0True when any needle is a substring of ``text``.c              3   ó,   <"  € T F	  qS9   x € K  	  R # 5ir8   rD   )r#  Úkwr-  s   & €r-   r%  Ú _contains_any.<locals>.<genexpr>¥  s   øé € Ð,¡G˜b�TŽz£Gùr  TF)r3  )r-  rh  s   f&r-   Ú_contains_anyrm  £  s,   ø€ ç‹3Ô,¡GÓ,�3Œ3Ð,Š3Ð,ˆ3Ô,¡GÓ,Ó,Ð,r/   c                ó0   € V ^8„  d   QhR\         R\        /# ©r)   rc  r*   ©rŸ   rm   )r,   s   "r-   r.   r.   ¹  s   € ÷ ñ œ9ð ¬ñ r/   c                óž   € \        V RR4      pVR8H  ;'       g5    VR9   ;'       d(    \        \        V 4      P                  4       \        4      # )z\Payment/credit/quota exhaustion: HTTP 402, or a billing/quota body on 403/404/429/no-status.Ústatus_codeNé’  >   Né“  é”  é­  )rq   rm  rX   r©  Ú_PAYMENT_KEYWORDS©rc  Ústatuss   & r-   Ú_is_payment_errorrz  ¹  sJ   € ä�S˜-¨Ó.€FØ�S‰=÷ ð ØÐ'Ñ'×^Ð^¬M¼#¸c»(¿.¹.Ó:JÔL]Ó,^ðr/   c                ó$   € V ^8„  d   QhR\         /# r(   rl   )r,   s   "r-   r.   r.   Á  s   € ÷ ñ ´Dñ r/   c                 ó˜   €  ^ RI Hp  V ! RR7      P                  RJ #   \         d"   p\        P                  RT4        Rp?R# Rp?ii ; i)zMReturn True only when the fresh Nous account API says paid access is allowed.)Úget_nous_portal_account_infoT)Úforce_freshz8Auxiliary Nous paid-entitlement refresh check failed: %sNF)Úhermes_cli.nous_accountr}  Úpaid_service_accessrŸ   r­   rÞ   )r}  rc  s     r-   Ú*_nous_portal_account_has_fresh_paid_accessr�  Á  sD   € ðÝHÙ+¸Ô=×QÑQÐUYÐYÐYøÜô Ü�‰ÐOÐQTÔUÝûðús   ‚ �A	¨AÁA	ú
rate limitc                ó0   € V ^8„  d   QhR\         R\        /# ro  rp  )r,   s   "r-   r.   r.   Õ  s   € ÷ Añ Aœið A¬Dñ Ar/   c                óP   € \        \        V 4      P                  4       \        4      # )u²   Server busy, credential fine ("at capacity upstream â€¦ not your API key's rate limit"): back off,
never bench the credential (#108349). Same phrase table as the main classifier.)rm  rX   r©  r   ©rc  s   &r-   Ú_is_overloaded_errorr†  Õ  s   € ô œ˜S›Ÿ™Ó)Ô+?Ó@Ð@r/   c                ó0   € V ^8„  d   QhR\         R\        /# ro  rp  )r,   s   "r-   r.   r.   Û  s   € ÷ xñ xœið x¬Dñ xr/   c                óî   € \        V 4      P                  R8X  d   R# \        V RR4      R8w  d   R# \        V 4      P	                  4       p\        V\        4      ;'       g    \        V\        4      '       * # )uË   429 rate limit (not billing/quota, which _is_payment_error owns).

OpenAI's RateLimitError may omit .status_code â€” matched by class name. A generic 429 without
billing keywords counts as a rate limit.
ÚRateLimitErrorTrr  Nrv  F)r+   rH   rq   rX   r©  rm  Ú_RATE_LIMIT_KEYWORDSÚ_RATE_LIMIT_BILLING_KEYWORDS)rc  Ú	err_lowers   & r-   Ú_is_rate_limit_errorr�  Û  s_   € ô ˆCƒy×ÑÐ-Ô-ÙÜˆs�M 4Ó(¨CÔ/ÙÜ�C“—‘Ó €IÜ˜Ô$8Ó9×wÐwÄÈyÔZvÓAwÔ=wÐwr/   c                ó0   € V ^8„  d   QhR\         R\        /# ro  rp  )r,   s   "r-   r.   r.   ê  s   € ÷ 
Nñ 
Nœ9ð 
N¬ñ 
Nr/   c                ó<  € \         P                  ! \        4      ;_uu_ 4        ^ RIHp \        W4      '       d    RRR4       R#  RRR4       R\        V 4      P                  9   ;'       g    R\        V 4      P                  4       9   #   + '       g   i     LL; i)zÙFull-budget request timeout, distinct from a fast connection drop.

A timeout burns the whole ``timeout`` budget, so a same-provider retry on the compression
path doubles wall time; fast drops stay on the retry path.
)ÚAPITimeoutErrorNTÚTimeoutú	timed out)
r–  r—  rª   r2   r�  r?   r+   rH   rX   r©  )rc  r�  s   & r-   Ú_is_timeout_errorr“  ê  sn   € ô 
×	Ò	œ[×	)Õ	)Ý*Ü�c×+Ò+Ø÷ 
*Ñ	)à+÷ 
*ð œ˜S›	×*Ñ*Ñ*×MÐM¨k¼SÀ»X¿^¹^Ó=MÑ.MÐM÷	 
*×	)ús   £BÂB	c                ó0   € V ^8„  d   QhR\         R\        /# ro  rp  )r,   s   "r-   r.   r.   ÷  s   € ÷ ñ œið ¬Dñ r/   c                ó`  € \         P                  ! \        4      ;_uu_ 4        ^ RIHpHp \        WV34      '       d    RRR4       R#  RRR4       \        \        V 4      P                  R4      '       d   R# \        \        V 4      P                  4       R4      #   + '       g   i     LZ; i)zSConnection/network errors (endpoint unreachable), as opposed to 4xx/5xx API errors.)ÚAPIConnectionErrorr�  NT)Ú
Connectionr‘  ÚDNSÚSSL)zconnection refusedzname or service not knownzno route to hostznetwork is unreachabler’  zconnection resetzincomplete chunked readzpeer closed connectionzresponse ended prematurelyzunexpected eofÚremoteprotocolerrorÚlocalprotocolerror)r–  r—  rª   r2   r–  r�  r?   rm  r+   rH   rX   r©  )rc  r–  r�  s   &  r-   Ú_is_connection_errorrœ  ÷  s~   € ä	×	Ò	œ[×	)Õ	)ß>Ü�c°Ð@×AÒAØ÷ 
*Ñ	)àA÷ 
*ô ”T˜#“Y×'Ñ'Ð)P×QÒQÙÜœ˜S›Ÿ™Ó)ð ,ó ð ÷ 
*×	)ús   £BÂB-	c                ó0   € V ^8„  d   QhR\         R\        /# ro  )rŸ   r   )r,   s   "r-   r.   r.     s   € ÷ mñ mœ)ð m¬ñ mr/   c                ó\   € \        V RR4      ;'       g    \        \        V RR4      RR4      # )z[HTTP status on the exception itself or on its ``response`` (None when neither carries one).rr  Nrß  rž  r…  s   &r-   Ú_exc_http_statusrŸ    s.   € ä�3˜ tÓ,×lÐl´¼ÀÀZÐQUÓ8VÐXeÐgkÓ0lÐlr/   c                ó0   € V ^8„  d   QhR\         R\        /# ro  rp  )r,   s   "r-   r.   r.     s   € ÷ Nñ N¤yð N´Tñ Nr/   c                ó´   € \        V 4      '       d   R# \        V 4      p\        V\        4      ;'       d$    VR8H  ;'       g    RTu;8*  ;'       d    R8  # u # )z×One-off transport blip worth retrying on the SAME provider: connection/stream-close errors plus pure 5xx/408.

Deliberately narrow: payment/auth/rate-limit errors switch provider, refresh creds, or rotate the pool.
Ti˜  iô  rK  )rœ  rŸ  r?   rW  rx  s   & r-   Ú_is_transient_transport_errorr¢    sP   € ô
 ˜C× Ò ÙÜ˜cÓ"€FÜ�fœcÓ"×MÐM¨°#©×(LÐ(L¸À×9LÔ9LÈÑ9LÐMÑ9LÐMr/   g      ð?c                ó$   € V ^8„  d   QhR\         /# r(   rÍ  )r,   s   "r-   r.   r.     s   € ÷ *ñ *¤ñ *r/   c                 ó²   €  ^ RI Hp Hp V ! V! 4       RR4      pVf   \        # \	        ^ \        \        V4      ^4      4      #   \         d
    \        u # i ; i)z–Same-provider retries for a transient blip: ``auxiliary.transient_retries``
(default 2), clamped to [0, 6]; config-read failures fall back to default.rV  r   Útransient_retries)r�   rW  rX  Ú_DEFAULT_TRANSIENT_RETRIESrÒ  r÷  rW  rŸ   )rW  rX  r  s      r-   Ú_transient_retry_countr§    sS   € ð*ß:Ù‘k“m [Ð2EÓFˆØ-0ª[Ô)ÐV¼cÀ!ÄSÌÈSËÐSTÓEUÓ>VÐVøÜô *Ü)Ò)ð*ús   ‚ A £A ÁAÁAc                ó0   € V ^8„  d   QhR\         R\        /# ro  rp  )r,   s   "r-   r.   r.   '  s   € ÷ 	`ñ 	`œ	ð 	`¤dñ 	`r/   c                ó   € \        V RR4      pVR8X  d   R# \        V 4      P                  4       pRV9   g)   R\        V 4      P                  P                  4       9   d   R# RV9   ;'       d    VR8H  ;'       g    R	V9   # )
z<Auth failures that should trigger provider-specific refresh.rr  Né‘  Tzerror code: 401Úauthenticationerrorzbad-credentialsrt  Úunauthenticated)rq   rX   r©  r+   rH   ©rc  ry  rŒ  s   &  r-   Ú_is_auth_errorr®  '  sv   € ä�S˜-¨Ó.€FØ�„}ÙÜ�C“—‘Ó €IØ˜IÔ%Ð)>Ä$ÀsÃ)×BTÑBT×BZÑBZÓB\Ô)\Ùà 	Ñ)×_Ð_¨v¸©}×/^Ð/^Ð@QÐU^Ñ@^Ð_r/   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r)   rc  Úparamr*   )rŸ   rX   rm   )r,   s   "r-   r.   r.   3  s&   € ÷ \ñ \¬ð \¼3ð \Ä4ñ \r/   c                ó´   € T;'       g    RP                  4       pV'       g   R# \        V 4      P                  4       pW#9   ;'       d    \        V\        4      # )z¦Provider 400 for an unsupported request parameter: the parameter name plus a generic
unsupported/unknown/unrecognized marker, so call sites can retry without the key.rj   F)r©  rX   rm  r   )rc  r°  Úparam_lowerrŒ  s   &&  r-   Ú_is_unsupported_parameter_errorr³  3  sG   € ð —;�;˜B×%Ñ%Ó'€KßÙÜ�C“—‘Ó €IØÑ#×[Ð[¬°iÔAZÓ([Ð[r/   c                ó0   € V ^8„  d   QhR\         R\        /# ro  rp  )r,   s   "r-   r.   r.   =  s   € ÷ |ñ |¬ð |´tñ |r/   c                óf  € \        V RR4      pVe
   VR
9  d   R# \        V 4      P                  4       p\        VR4      '       d   R# RV9   d   RV9   g   RV9   d   R# RV9   d
   RV9   d   R# RV9   d
   R	V9   d   R# \        VR4      '       d   R# \	        V R4      ;'       g    \	        V R4      # )a2  Provider 400/422 rejecting the structured-output field, on either wire: OpenAI ``response_format``
(incl. vLLM's ``guided_grammar``/xgrammar failures) or Anthropic ``output_config.format`` ("Extra inputs
are not permitted"). Callers tolerate an unconstrained reply, so the reaction is one retry without it.rr  NFTzextra inputs are not permittedr  r  Úunavailabler  ¾   é�  é¦  )Úguided_grammarÚxgrammarÚcompile_grammar_error)zresponse mime typeÚresponse_schemaÚresponse_json_schema)rq   rX   r©  rm  r³  r­  s   &  r-   Ú_is_structured_output_rejectionr¿  =  s¶   € ô �S˜-¨Ó.€FØÒ˜f¨JÔ6ÙÜ�C“—‘Ó €Iä�YÐ W×XÒXÙØ'¨9Ô4Ø˜YÔ&¨/¸YÔ*FáØ˜IÔ%¨-¸9Ô*DÙð
 ˜IÔ%¨-¸9Ô*DÙô
 �YÐ a×bÒbÙÜ*¨3Ð0AÓB×{Ð{ÔFeÐfiÐkzÓF{Ð{r/   c                ó0   € V ^8„  d   QhR\         R\        /# ro  rp  )r,   s   "r-   r.   r.   ]  s   € ÷ 	2ñ 	2¤yð 	2´Tñ 	2r/   c                ó^   € \        V RR4      pVe
   VR9  d   R# \        \        V 4      4      # )aÏ  Provider 400 rejecting a reasoning wire control by name (``reasoning_effort``, ``reasoning``,
``thinking``/``think``). Chat-only models behind OpenAI-compatible relays reject the top-level
``reasoning_effort: none`` a disabled ``reasoning_config`` projects on the custom profile
("Unrecognized request argument supplied: reasoning_effort", #112781); the route default is
the right answer for such a model, so the reaction is one retry without any reasoning field.rr  NFr·  )rq   r   rX   rx  s   & r-   Ú_is_reasoning_field_rejectionrÂ  ]  s1   € ô �S˜-¨Ó.€FØÒ˜f¨JÔ6ÙÜ'¬¨C«Ó1Ð1r/   c                ó0   € V ^8„  d   QhR\         R\        /# ro  rp  )r,   s   "r-   r.   r.   i  s   € ÷ 5ñ 5¬)ð 5¼ñ 5r/   c                ó^   € \        V RR4      pVe
   VR9  d   R# \        \        V 4      4      # )a  Provider 400 refusing to switch reasoning OFF ("Reasoning is mandatory for this endpoint and cannot
be disabled"): the field is understood, only the disable is refused, so the rung steps the effort up to
the floor instead of dropping the field (agent/auxiliary_reasoning_floor.py).rr  NFr·  )rq   r   rX   rx  s   & r-   Ú _is_reasoning_required_rejectionrÅ  i  s1   € ô �S˜-¨Ó.€FØÒ˜f¨JÔ6ÙÜ*¬3¨s«8Ó4Ð4r/   c                óF   € V ^8„  d   QhR\         R\        \         ,          /# r^  ©r¤   r   )r,   s   "r-   r.   r.   s  s   € ÷ -ñ -¤dð -¬x¼­~ñ -r/   c                ó  € \        V 4      pVP                  RR4      RJpVP                  RR4      RJ;'       g    TpVP                  R4      p\        V\         4      '       d�   VP	                  4        UUu/ uF9  w  rE\        V4      P                  4       P                  4       \        9  g   K7  WEbK;  	  ppp\        V4      \        V4      8w  d"   V'       d   WaR&   MVP                  RR4       RpV'       d   V# R# u uppi )zòCopy *kwargs* without reasoning wire controls (top-level ``reasoning_effort``, the adapter's
private ``_reasoning_config`` and every ``extra_body`` reasoning key); None when nothing was
removed, so call sites don't retry an unchanged request.Úreasoning_effortNr&  r{  T)
r¤   rÆ  rž   r?   r‡  rX   r¨  r©  Ú_PROFILE_REASONING_KEYSrŸ  )r;   Úretry_kwargsÚchangedr{  r‰  rŠ  r;  s   &      r-   Ú_without_reasoning_fieldsrÍ  s  så   € ô ˜“<€LØ×ÑÐ1°4Ó8ÀÐD€GØ×ÑÐ2°DÓ9ÀÐE×PÐPÈ€GØ×!Ñ! ,Ó/€JÜ�*œd×#Ò#Ø&0×&6Ñ&6Ô&8ÔrÑ&8™d˜a¼CÀ»F¿L¹L»N×<PÑ<PÓ<RÔZqÑ<q”T�Q’TÑ&8ˆ	ÑrÜˆy‹>œS ›_Ô,ßØ-6˜\Ò*à× Ñ  ¨tÔ4ØˆGß"ˆ<Ð,¨Ð,ùó ss   Á84D Â1D c                ó0   € V ^8„  d   QhR\         R\        /# ro  rp  )r,   s   "r-   r.   r.   †  s   € ÷ ñ ¤9ð ´ñ r/   c                ó    € \        V RR4      p\        V 4      P                  4       p\        VR4      '       d   R# VR9  d   R# \        VR4      # )u·   "Requested model doesn't exist" (404 / invalid model) â€” typically a long-lived process pinned a
since-dropped model. Excludes billing keywords, which :func:`_is_payment_error` owns.rr  NF)	Úcreditsúinsufficient fundsÚbillingúout of fundsÚbalance_depletedúno usable creditsú	free tierú	free-tierúnot available on the free tier>   Nr¸  ru  )	zmodel does not existz#does not exist in our configurationzopenrouter catalogzis not a valid modelzno such modelzmodel not foundzthe model `Úmodel_not_foundzunknown model)rq   rX   r©  rm  r­  s   &  r-   Ú_is_model_not_found_errorrÚ  †  s[   € ô �S˜-¨Ó.€FÜ�C“—‘Ó €IÜ�Yð !÷ ò ñ ØÐ%Ô%ÙÜ˜ð %ó ð r/   c                ó0   € V ^8„  d   QhR\         R\        /# ro  rp  )r,   s   "r-   r.   r.   š  s   € ÷ ñ ¤ið ´Dñ r/   c                óÆ   € \        V RR4      pVR9  d   R# \        V 4      P                  4       p\        V 4      '       d   R# \	        VR4      '       d   R# \	        VR4      # )a  "This route cannot serve this model" 400 (capability mismatch, e.g. a Codex/ChatGPT-account
fallback asked to run a non-OpenAI model). Auth/payment predicates don't fire, so this keeps the
chain going instead of aborting. Excludes billing 400s and not-found 400s.rr  NF>   Nr¸  )rÐ  rÑ  rÒ  rÓ  rÔ  rÕ  úpayment requiredrÖ  r×  rØ  Ú model_not_supported_on_free_tierÚquota)zis not supported when usingzmodel is not supportedznot supported with thisznot supported for this accountÚmodel_not_supportedzdoes not support this modelzunsupported model)rq   rX   r©  rÚ  rm  r­  s   &  r-   Ú_is_model_incompatible_errorrá  š  sh   € ô �S˜-¨Ó.€FØ�[Ô ÙÜ�C“—‘Ó €IÜ  ×%Ò%Ùä�Yð !÷ ò ñ
 Ü˜ð %ó ð r/   c                ó0   € V ^8„  d   QhR\         R\        /# ro  rp  )r,   s   "r-   r.   r.   ²  s   € ÷ jñ j¬	ð j´dñ jr/   c                ó¢   € \        V \        4      '       g   R# \        V 4      P                  4       pRV9   ;'       d    RV9   ;'       d    RV9   # )ud   HTTP-200 empty/malformed ChatCompletions â€” a capability failure routed like model incompatibility.Fz
auxiliary zllm returned invalid responsezchoices[0].message)r?   rc   rX   r©  )rc  r©  s   & r-   Ú_is_invalid_aux_response_errorrä  ²  sJ   € ä�cœ<×(Ò(ÙÜ
ˆc‹(�.‰.Ó
€CØ˜3Ñ×iÐiÐ#BÀcÑ#I×iÐiÐNbÐfiÑNiÐir/   c                ó0   € V ^8„  d   QhR\         R\        /# ro  rp  )r,   s   "r-   r.   r.   º  s   € ÷ Zñ Z´)ð ZÄñ Zr/   c                óž  a€ \        V 4      e   R# \        V RR4      p\        V\        4      '       d   RV9   d   VP	                  R4      MTo\        S\
        4      '       d   \        SP                  4       4      # \        S\        4      ;'       d;    \        ;QJ d    V3R lR 4       F  '       g   K   R# 	  R# ! V3R lR 4       4      # )uþ  Detect a structured provider failure that has no HTTP status.

OpenAI-compatible relays may commit SSE with status 200, then send an
OpenAI-style ``error`` event. The SDK raises a status-less ``APIError`` with
``body=data["error"]`` â€” the INNER error object or a bare string (an
``{"error": ...}`` wrapper is accepted too). Any non-empty structured error in
that status-less shape is a route failure; ordinary HTTP errors keep their
existing status-based classifiers, and message text alone is insufficient.
NFÚbodyrâ  c              3   óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir8   )rž   )r#  r‰  Úerrs   & €r-   r%  Ú;_is_statusless_structured_provider_error.<locals>.<genexpr>Ê  s   øé € Ð(YÑ=X¸¨¯©°¯¨Ó=Xùr’  T)r+   ÚcoderÀ  )	rŸ  rq   r?   r¤   rž   rX   rm   r¨  r3  )rc  rç  ré  s   & @r-   Ú(_is_statusless_structured_provider_errorrì  º  s›   ø€ ô ˜ÓÒ(ÙÜ�3˜ Ó%€DÜ)¨$´×5Ò5¸'ÀT¼/ˆ$�(‰(�7Ô
Èt€CÜ�#”s×ÒÜ�C—I‘I“KÓ Ð Ü�cœ4Ó ×YÐY§S£SÔ(YÑ=XÓ(Y§S¤SÐY¢SÐY SÔ(YÑ=XÓ(YÓ%YÐYr/   c                óR   € V ^8„  d   QhR\         \        ,          R\        R\        /# )r)   rB  rc  r*   ©r   rX   rŸ   rm   )r,   s   "r-   r.   r.   ×  s*   € ÷ pñ p¬8´C­=ð p¼yð pÌTñ pr/   c                óf   € V \         9   ;'       d"    \        V4      ;'       d    R\        V4      9  # )u8  True when a transient error on a critical-path task should go straight to fallback.

Carve-out: a fast first-token fail (dead stream within the no-progress window, zero output â€”
see ``_timeout_message``) is cheap and keeps the same-provider retry; mid-stream stalls and
hard-ceiling timeouts skip to fallback.
zno-progress timeout)Ú_TIMEOUT_NO_RETRY_TASKSr“  rX   )rB  rc  s   &&r-   Ú _should_skip_same_provider_retryrñ  ×  s3   € ð Ô*Ñ*×oÐoÔ/@ÀÓ/E×oÐoÐJ_ÔgjÐknÓgoÑJoÐor/   c                ó(   € V ^8„  d   QhR\         RR/# )r)   rŸ  r*   NrW   )r,   s   "r-   r.   r.   á  s   € ÷ )ñ )¤Cð )¨Dñ )r/   c                óZ  € \        V 4      p\        4       p\        ;_uu_ 4        \         Uu. uF7  pV^ ,          V8X  g   K  \        \	        V^,          4      4      V8X  g   K5  VNK9  	  up F  p\        P                  VR4       K  	  RRR4       R# u upi   + '       g   i     R# ; i)a@  Drop this profile's cached auxiliary clients for a provider so fresh creds are used.

Scoped to the calling profile (``hermes_home_key()`` is the first key slot): a rotation in
one profile must not drop another profile's client for the same provider in a multiplexing
gateway, since that profile's credentials did not change. Entries are popped, not closed:
a concurrent caller may be mid-request on the shared client (closing it raises ReadError /
"client has been closed" for them); the dropped client is retired by GC like the FIFO
overflow path in ``_get_cached_client``.
N)r°  r‰   Ú_client_cache_lockÚ_client_cacherX   rÆ  )rŸ  r­  Úhomer  s   &   r-   Ú_evict_cached_clientsr÷  á  s‘   € ô )¨Ó2€JÜÓ€Dß	Ö	Ý#0ó ^¡=˜CØ˜1•v ‘~ô Ü*AÄ#ÀcÈ!ÅfÃ+Ó*NÐR\Ñ*\÷ �C¡=ô ^ˆCä×Ñ˜c 4Ö(ñ^÷ 
Ñ	ùò^÷ 
×	Ð	ús(   ¤	B­BÁBÁ$BÁ* BÂBÂB*	c                ó0   € V ^8„  d   QhR\         R\        /# )r)   rl  r*   r  )r,   s   "r-   r.   r.   ó  s   € ÷ ñ ¬#ð ´$ñ r/   c                ó$  € V f   R# Rp\         ;_uu_ 4        \        \        P                  4       4       F;  w  r#Ve
   V^ ,          MRpVf   K  W@J g   \	        VRR4      V J g   K2  \        V RpK=  	  RRR4       V#   + '       g   i     T# ; i)a  Drop cache entries whose stored client (or its ``_real_client``) is *target*; True if any evicted.

Used when a cached client is poisoned (closed transport after a timeout). Async wrappers must
expose the same ``_real_client`` as their sync sibling or the async entry survives.
NFrõ  T)rô  r—  rõ  r‡  rq   )rl  Úevictedr  r¹  Úcacheds   &    r-   r,  r,  ó  s‡   € ð ‚~ÙØ€Gß	Ö	Üœ}×2Ñ2Ó4Ö5‰JˆCØ!&Ò!2�U˜1–X¸ˆFØÔ! vÓ'7¼7À6È>Ð[_Ó;`ÐdjÕ;jÜ! #Ð&Ø’ñ	 6÷ 
ð €N÷ 
Ö	ð €Nús   —3A>ÁA>Á'A>Á>B	c                ó<   € V ^8„  d   QhR\         R\         R\        /# )r)   r§  r¹  r*   r  )r,   s   "r-   r.   r.     s!   € ÷ ñ ¤#ð ¬cð ¼Sñ r/   c                ó<  € Ve&   \        V4      3 Uu. uF  q"'       g   K  VNK  	  upM. pV'       gL    \        V RR4      p\        V4      '       d   V! 4       M. p\        R R T;'       g    R
 4        4       4      pV'       g   R# \        P                  ! ^R7      pV F4  pVP                  VP                  R4      4       VP                  R	4       K6  	  VP                  4       # u upi   \         d"   p\        P                  RT4        Rp?R# Rp?ii ; i)a  Secret-safe digest over the runtime key(s) backing the cache hint.

When ``entry`` (the peeked selection) carries a key, only THAT key is digested: rotating a
sibling account must not churn this entry's cached client. Otherwise every pool entry
contributes, taken WITHOUT availability filters (``pool.entries()``, not ``peek()``): an entry
benched by a per-model cooldown still counts, so a token rotated while the cooldown is active
changes the digest too (#113022 point 5). Only the blake2b of the keys enters the cache key.
NÚentriesz<Auxiliary client: could not list pool entries for digest: %srj   c              3   ó8   "  € T F  q'       g   K  Vx € K  	  R # 5ir8   rD   )r#  r‰  s   & r-   r%  Ú*_pool_credential_digest.<locals>.<genexpr>  s   é € ÐXÑ!R˜AÓVW—a’aÓ!Rùs   ‚	�
c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir8   )r¼  )r#  rš  s   & r-   r%  r     s   é € Ð!RÁM¸qÔ"7¸×":Ð":ÃMùr  ©Údigest_sizeúutf-8ó    rD   )r¼  rq   rÔ   rŸ   r­   rÞ   r"  ÚhashlibÚblake2br™  ÚencodeÚ	hexdigest)	r§  r¹  r‰  ÚkeysÚ
entries_fnrþ  rc  Údigestr  s	   &&       r-   Ú_pool_credential_digestr    sô   € ð AFÒ@QÔ-¨eÓ4Ñ6Ó<Ñ6�!»!�AˆAÑ6Ò<ÐWY€Dßð	Ü   y°$Ó7ˆJÜ&.¨z×&:Ò&:‘j”lÀˆGô ÑXÑ!RÀGÇMÀMÈrÀMÔ!RÓXÓXˆßÙÜ�_Š_¨Ô,€FÛˆØ�‰�c—j‘j Ó)Ô*Ø�‰�eÖñ ð ×ÑÓÐùò =øô
 ô 	Ü�L‰LÐWÐY\Ô]Ýûð	ús!   “	C*¡C*µ'C/ Ã/DÃ:DÄDrç  c                ót   € V ^8„  d   QhR\         R\        \        \         \        3,          ,          R\         /# )r)   rŸ  rç  r*   )rX   r   r¤   r   )r,   s   "r-   r.   r.      s/   € ÷ /ñ /œsð /´X¼dÄ3ÌÀ8½nÕ5Mð /ÔY\ñ /r/   c               ó–  € \        V 4      pVR8X  d8   \        V4      p\        VP                  R4      ;'       g    \        4       4      pVR9   d   R# \	        VR4      pVf   R# \        W$4      p\        WE4      pVe/   \        \        VRR4      ;'       g    R4      P                  4       MRpV'       g   V'       g   R# V RV RV 2# )aÛ  Return a cache discriminator that follows the pooled credential, not just its entry id.

``<provider>:<entry id>:<digest of that entry's key>`` when ``peek()`` names an entry,
``<provider>::<digest of every entry's key>`` when every entry is filtered out (cooldown)
but keyed entries exist. A token rotated or
refreshed by another process yields a new client instead of a 401 round trip on the cached
one; the stale entry ages out through the non-closing FIFO cap (#113022).
r¢  rŸ  rj   z (cache hint)r2  r¤  >   rj   r¢  r�  )
r°  rã  rž   r¬  r¨  r¶  r  rX   rq   r¨  )rŸ  rç  r­  ré  r§  r¹  r  Úentry_ids   &$      r-   Ú_pool_cache_hintr     s¾   € ô )¨Ó2€JØ�VÔÜ)¨,Ó7ˆÜ,¨W¯[©[¸Ó-D×-]Ð-]ÔH[ÓH]Ó^ˆ
ØÐ+Ô+ÙÜ& z°?ÓC€DØ‚|ÙÜ˜ZÓ.€EÜ$ TÓ1€FØ>CÒ>OŒs”7˜5 $¨Ó+×1Ð1¨rÓ2×8Ñ8Ô:ÐUW€HßŸFÙØˆ\˜˜8˜* A f XÐ.Ð.r/   rÙ  r·  c                óŽ   € V ^8„  d   QhR\         R\        \        \         \         3,          R3,          R\        \         ,          /# )r)   rV   Útable.r*   )rX   rù  r   )r,   s   "r-   r.   r.   I  s8   € ÷ ñ ¤ð ¬U´5¼¼c¸µ?ÀCÐ3GÕ-Hð ÌXÔVYÍ]ñ r/   c                óF   € V F  w  r#\        W4      '       g   K  Vu # 	  R# )zGFirst provider in ``table`` whose host matches ``base_url``, else None.N)rŠ   )rV   r  rŽ  rŸ  s   &&  r-   Ú_provider_for_hostr  I  s#   € ã‰ˆÜ  ×0Ô0ØŠOñ  ñ r/   c          	      ó–   € V ^8„  d   QhR\         R\        R\        \        \         \        3,          ,          R\        \         ,          /# )r)   Úresolved_providerr¯   rç  r*   ©rX   r   r   r¤   )r,   s   "r-   r.   r.   Q  s=   € ÷ ,ñ ,Üð,Ü$'ð,Ü7?ÄÄSÌ#ÀXÅÕ7Oð,äŒc…]ñ,r/   c           	     ó   € \        V 4      p\        \        VRR4      ;'       g    R4      p\        V4      p\        VP	                  R4      ;'       g    R4      pVP	                  R4      p\        VRR4      pV'       d‡   V'       d   W5P	                  R4      8X  dj   \        V\        4      '       dT   V'       dL   W‡8X  dF   \        V4      \        V4      8w  d-   \        P                  RV\        V4      \        V4      4       R# VR9  dM   \        T ;'       g    R4      P                  4       P                  4       ;p	P                  R4      '       d   V	# T# \        V\        4      p
V
e   V
# V'       Ed   \        V4      pVP	                  RR4      pV'       dÝ   VR9  dÖ   \        P                   ! \"        4      ;_uu_ 4        ^ RIHp VP	                  V4      pV'       dŠ   \        VR	R4      R8X  dx   \        VP	                  R4      ;'       g    \        VR
R4      ;'       g    R4      P)                  R4      pV'       d(   \+        V\        V4      4      '       d   VuuRRR4       # RRR4       R# R#   + '       g   i     R# ; i)u4  Infer which provider pool can recover the current auxiliary client.
None when the client targets a different host than the session's configured endpoint for that
provider: a rejection there says nothing about the key, so rotating/quarantining it would kill a
working credential (Miho report â€” proxy users).rV   rj   rU   NrŸ  u’   Auxiliary: %s rejected the session key at %s, but the session's endpoint is %s â€” endpoint mismatch, not a dead key; skipping credential rotationr£  )r×  rà  rÂ  rµ  >   rj   r¢  r�  )r°  rX   rq   rã  rž   r?   rŒ   r­   r+  r‹   r¨  r©  rª  r  Ú_POOL_PROVIDER_BY_HOSTr–  r—  rŸ   r˜  r×  r   rŠ   )r  r¯   rç  r­  Úbaseré  Úrt_baseÚrt_keyÚ
client_keyÚpinnedÚknownÚrt_providerr×  ræ  s   &&&           r-   Ú_recoverable_pool_providerr"  Q  s  € ô )Ð):Ó;€JÜŒw�v˜z¨2Ó.×4Ð4°"Ó5€DÜ% lÓ3€GÜ�'—+‘+˜jÓ)×/Ð/¨RÓ0€GØ�[‰[˜Ó#€FÜ˜ ¨DÓ1€J÷ 	—˜Z¯;©;°zÓ+BÔBÜ˜6¤3×'Ò'¯F°zÔ7KÜ Ó%¬¸Ó)AÔAÜ�‰ð VàÔ 1°$Ó 7Ô9JÈ7Ó9Sô	Uñ ØÐ/Ô/Ü$'Ð(9×(?Ð(?¸RÓ$@×$FÑ$FÓ$H×$NÑ$NÓ$PÐP˜&×\Ñ\Ð]f×gÒgˆvÐwÐmwÐwÜ˜tÔ%;Ó<€EØÒØˆ÷ €|Ü)¨,Ó7ˆØ—k‘k *¨bÓ1ˆß˜;Ð.DÔDÜ×$Ò$¤Y×/Õ/Ý=Ø+×/Ñ/°Ó<�ßœw w°¸TÓBÀiÔOô " '§+¡+¨jÓ"9×"mÐ"m¼WÀWÐNbÐdfÓ=g×"mÐ"mÐkmÓn×uÑuÐvyÓz�GßÔ#8¸Ô?PÐQXÓ?Y×#ZÒ#ZØ*÷ 0×/Ò/ó ÷ 0Ö/ñ ús   ÇAI<ÈI<È+I<É	I<É<J	Úfailed_api_keyc                óH   € V ^8„  d   QhR\         R\        R\         R\        /# )r)   rŸ  rc  r#  r*   )rX   rŸ   rm   )r,   s   "r-   r.   r.   €  s)   € ÷ &ñ &¤Sð &¬yð &ÌSð &ÔZ^ñ &r/   c               ó  aaaaa€ \        V 4      o \        V S\        4      oS'       d   SP                  4       '       g   R# \        SRR4      oR TTTTT3R llp\        S4      '       d(   SP                  4       e   \        S4       R# T! R4      # \        S4      '       d	   T! R	4      # \        S4      '       d   \        S4      '       g	   T! R
4      # R#   \         d#   p\        P                  RST4        Rp?R# Rp?ii ; i)zÔTry same-provider credential-pool recovery for auxiliary calls.

``failed_api_key`` lets mark_exhausted_and_rotate identify the right pool entry even if
another process already rotated (current() would be None).
z9Auxiliary client: could not load pool for %s recovery: %sNFrr  c                ó0   € V ^8„  d   QhR\         R\        /# )r)   Úfallback_statusr*   )rW  rm   )r,   s   "r-   r.   Ú,_recover_provider_pool.<locals>.__annotate__�  s   € ÷ ñ ¤ð ¬ñ r/   c                 óž   <€ R \        S4      /pSe   SVR&   SP                  Se   SMT TS;'       g    RR7      pVf   R# \        S4       R# )rÀ  Nrr  )rr  Úerror_contextÚapi_key_hintFT)rX   Úmark_exhausted_and_rotater÷  )r'  r*  Ú
next_entryrc  r#  r­  r§  rr  s   &  €€€€€r-   Ú_rotateÚ'_recover_provider_pool.<locals>._rotate�  sc   ø€ Ø)2´C¸³HÐ(=ˆØÒ"Ø+6ˆM˜-Ñ(Ø×3Ñ3Ø'2Ò'>™ÀOØ'°n×6LÐ6LÈð 4ó 
ˆ
ð ÒÙÜ˜jÔ)Ùr/   Trª  rs  rv  )r°  ry   rw   rŸ   r­   rÞ   r¦  rq   r®  r¡  r÷  rz  r�  r†  )rŸ  rc  r#  Úload_excr.  r­  r§  rr  s   &fd  @@@r-   Ú_recover_provider_poolr1  €  sá   ü€ ô )¨Ó2€JðÜ$ X¨z¼9ÓEˆ÷ �t×+Ñ+×-Ò-ÙÜ˜#˜}¨dÓ3€K÷ô ô �c×ÒØ×#Ñ#Ó%Ò1Ü! *Ô-ÙÙ�s‹|ÐÜ˜×ÒÙ�s‹|ÐÜ˜C× Ò Ô)=¸c×)BÒ)BÙ�s‹|ÐÙøô; ô Ü�‰ÐPÐR\Ð^fÔgÝûðús   ’C ÃDÃ%DÄDrZ  c          (      ó€  € V ^8„  d   QhR\         \        ,          R\        R\         \        ,          R\         \        ,          R\         \        ,          R\         \        ,          R\         \        \        \        3,          ,          R\         \        ,          R	\        R
\         \
        ,          R\         \        ,          R\         \        ,          R\
        R\        R\         \        ,          R\        R\         \        \        \        3,          ,          R\        \        \        \        \        3,          3,          /# )r)   rB  r  Úresolved_modelÚresolved_base_urlÚresolved_api_keyÚresolved_api_moderç  r9  rm  r%  r#  ri  Úeffective_timeoutÚeffective_extra_bodyr(  r¢   rZ  r*   )	r   rX   r¤   r   r—  rO  rW  rm   rù  )r,   s   "r-   r.   r.   ©  s  € ÷ )&ñ )&Ü”c�]ð)&Ü/2ð)&ÜDLÌSÅMð)&ä¤•}ð)&ä8@Ä½ð)&ô  ¤•}ð)&ô 5=¼TÄ#ÄsÀ(½^Õ4Lð)&ô œ#•ð	)&ô +/ð	)&ô >FÄe½_ð	)&ô
 œ•ð)&ô
 '/¬t¥nð)&ô
 JOð)&ô ð)&ô 3;¼4µ.ð)&ô OSð)&ô œD¤¤c �NÕ+ð)&ô Œ3””Sœ#�X•ÐÕñ)&r/   c                óÖ  € V R8X  d   \        WVWOR7      w  pppM\        WWóWEVR7      w  pp\        VV4      pVf   \        RT ;'       g    R RV R24      h\	        \        VRR	4      ;'       g    R	4      p\        T;'       g    TT;'       g    TTYšY¼YÞT;'       g    TV R
7      pV'       d   \        V4      VR&   \        VV4      '       d   \        VR,          4      VR&   VV3# )zURebuild (client, request kwargs) for a same-provider retry after credential recovery.r  )rŸ  r³  rV   rU   r¢   )r¢   rV   rU   ro  rç  ú
Auxiliary r_  z: provider z$ could not be rebuilt after recoveryrV   rj   ©r%  r#  ri  r  r{  r(  rV   rB  rZ  rm  )
Úresolve_vision_provider_clientÚ_get_cached_clientÚ_effective_provider_for_clientrc   rX   rq   Ú_build_call_kwargsr¤   Ú_is_anthropic_compat_endpointÚ#_convert_openai_images_to_anthropic)rB  r  r3  r4  r5  r6  rç  r9  rm  r%  r#  ri  r7  r8  r(  r¢   rZ  Úeffective_providerÚretry_clientÚretry_modelÚ
retry_baserË  s   $$$$$$$$$$$$$$$$$     r-   Ú_prepare_same_provider_retryrF  ©  s  € ð ˆxÔÜ8VØ&ÐDUØ$ô9
Ñ5Ð˜L©+ô
 %7Ø¸*Ø$È|ô%
Ñ!ˆ�kô <¸LÐJ[Ó\ÐØÒÜØ˜Ÿ˜ Ð(¨Ð4EÐ3FÐFjÐkó
ð 	
ô ”W˜\¨:°rÓ:×@Ð@¸bÓA€JÜ%Ø×/Ð/Ð/°×1KÐ1KÀÈXØ¸eØ'Ø×0Ð0Ð0°tô	€L÷ ô
 )-¨]Ó(;ˆ�_Ñ%Ü$Ð%6¸
×CÒCÜ#FÀ|ÐT^ÕG_Ó#`ˆ�ZÑ Ø˜Ð%Ð%r/   c                ót   € V ^8„  d   QhR\         R\        \         ,          R\        \         ,          R\        /# ©r)   r  r6  rB  r*   r¤  )r,   s   "r-   r.   r.   Õ  s5   € ÷ ñ ´Cð ÌHÔUXÍMð ÔaiÔjmÕanð Ô{~ñ r/   c                 óZ   € \        RR VRV RVRR/VB w  rE\        \        WEWR7      V4      # )rB  r  r6  r¢   Fr•  rD   )rF  Ú_validate_llm_responserª  )r  r6  rB  ÚpreprC  rË  s   $$$,  r-   Ú_retry_same_provider_syncrL  Õ  sT   € Ü!=ñ "Øð"Ø%6ð"ØJ[ð"Øhmð"Øquñ"Ñ€Lô "Ü˜|ÐDUÔrÐtxóð r/   c                ót   € V ^8„  d   QhR\         R\        \         ,          R\        \         ,          R\        /# rH  r¤  )r,   s   "r-   r.   r.   Þ  s;   € ÷ 	ñ 	¼3ð 	ÔS[Ô\_ÕS`ð 	ÔhpÔqtÕhuð 	ô  CFñ 	r/   c              ‹   ó¨   "  € ^ RI p\        RRVRV RVRR/VB w  rVTP                  \        \	        WVWR7      G Rj  x€L
 V4      G Rj  x€L
 #  L L5i)	ró  NrB  r  r6  r¢   Tr•  rD   )rë  rF  rì  rJ  rµ  )r  r6  rB  rK  rë  rC  rË  s   $$$,   r-   Ú_retry_same_provider_asyncrO  Þ  ss   é € ÛÜ!=ñ "Øð"Ø%6ð"ØJ[ð"Øhlð"Øptñ"Ñ€Lð ×"Ñ"ÜÜ% lÐK\Ôy×yØó÷ ð áyñùs!   ‚:A¼A
½AÁ	AÁ
AÁAc                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# r°  ©r¤   rX   r   rm   )r,   s   "r-   r.   r.   ê  s"   € ÷ =ñ =œt¤C¬ H�~ð =´$ñ =r/   c                 óz   € \        \        V P                  R R4      ;'       g    R4      P                  4       4      # )rU   rj   )rm   rX   rž   r¨  )r&  s   &r-   Ú_creds_have_api_keyrS  ê  s.   € Ü”�E—I‘I˜i¨Ó,×2Ð2°Ó3×9Ñ9Ó;Ó<Ð<r/   c                ó$   € V ^8„  d   QhR\         /# r(   rl   )r,   s   "r-   r.   r.   î  s   € ÷ ñ ¤dñ r/   c                  óÆ   € ^ RI Hp HpHpHp V! 4       w  rE\        T;'       g    R4      P                  4       '       g   R# V P                  V! V4      R4       V! V4       R# )ró  )Ú
_jwt_cacheÚ_token_fingerprintÚexchange_copilot_tokenÚresolve_copilot_tokenrj   FNT)rô  rV  rW  rX  rY  rX   r¨  rÆ  )rV  rW  rX  rY  Ú	raw_tokenÚ_sources         r-   Ú_refresh_copilot_credentialsr\  î  sO   € ßuÓuÙ.Ó0Ñ€IÜˆy�ˆ˜BÓ×%Ñ%×'Ò'ÙØ‡N�NÑ% iÓ0°$Ô7Ù˜9Ô%Ùr/   c                ó$   € V ^8„  d   QhR\         /# r(   rl   )r,   s   "r-   r.   r.   ø  s   € ÷ Vñ V¤Dñ Vr/   c                  ó2   € ^ RI Hp  \        V ! RR7      4      # )ró  ©Ú!resolve_codex_runtime_credentialsTr§  )r˜  r`  rS  r_  s    r-   Ú_refresh_codex_credentialsra  ø  s   € ÝAÜÑ@ÈtÔTÓUÐUr/   c                ó$   € V ^8„  d   QhR\         /# r(   rl   )r,   s   "r-   r.   r.   ý  s   € ÷ ñ ¤4ñ r/   c                  óH   € ^ RI Hp  \        V ! \        R^4      RR7      4      # )ró  r¨  rª  T)r«  r•  )r˜  r©  rS  r�   r¨  s    r-   Ú_refresh_nous_credentialsrd  ý  s(   € Ý@ÜÑ?Ü!Ð"?ÀÓDÐTXô ó ð r/   c                ó0   € V ^8„  d   QhR\         R\        /# )r)   r#  r*   r.  )r,   s   "r-   r.   r.     s   € ÷ ñ ´3ð Äñ r/   c                 óP  € ^ RI HpHp T pV'       g   R# \        R4      pVP	                  V4      '       d   VP                  VR7      RJ# V! 4       p\        V\        4      '       d?   VP                  R4      V8X  d)   VP                  R4      '       d   \        V! V4      4      # R# )ró  )Úread_claude_code_credentialsÚ_refresh_oauth_tokenFr<  )r+  NÚaccessTokenÚrefreshToken)
r  rg  rh  rw   Úentry_id_for_api_keyÚtry_refresh_matchingr?   r¤   rž   rm   )r#  rg  rh  r“  r§  r&  s   &     r-   Ú_refresh_anthropic_credentialsrm    sŒ   € ß^Ø€EßÙÜ�[Ó!€DØ× Ñ  ×'Ò'Ø×(Ñ(°eÐ(Ó<ÀDÐHÐHÙ(Ó*€Eä�%œ×Ò 5§9¡9¨]Ó#;¸uÔ#DÈÏÉÐSa×IbÒIbÜÑ(¨Ó/Ó0Ð0Ùr/   c                ó$   € V ^8„  d   QhR\         /# r(   rl   )r,   s   "r-   r.   r.     s   € ÷ 	Zñ 	Z¬ñ 	Zr/   c                 ó8  € \        R4      p V '       dq   V P                  4       '       d[   V P                  4        V P                  4       pVe7   \	        \        VRR4      ;'       g    R4      P                  4       '       d   R# ^ RIHp \        V! RR7      4      # )zAPool-level refresh first, then the singleton auth-store resolver.r·  r»  rj   Tr½  r§  )
rw   r¦  r­  r¡  rX   rq   r¨  r˜  r¾  rS  )r§  r¢  r¾  s      r-   Ú_refresh_xai_oauth_credentialsrp    sx   € ä�[Ó!€Dß�×$Ñ$×&Ò&Ø�‰ŒØ×,Ñ,Ó.ˆ	ØÒ ¤S¬°Ð<MÈrÓ)R×)XÐ)XÐVXÓ%Y×%_Ñ%_×%aÒ%aÙÝEÜÑDÐSWÔXÓYÐYr/   c                ó$   € V ^8„  d   QhR\         /# r(   rl   )r,   s   "r-   r.   r.     s   € ÷ mñ m¤Tñ mr/   c                 óâ   € ^ RI Hp  V ! 4       w  r\        \        V\        4      ;'       dA    VP                  4       ;'       d)    \        V\        4      ;'       d    VP                  4       4      # )z¢Mirrors run_agent's Vertex refresh; the cache key ignores the rotating bearer, so
without the eviction that follows, a ~1h-expired aux Vertex client 401s forever.)Úget_vertex_config)Úagent.vertex_adapterrs  rm   r?   rX   r¨  )rs  r“  rV   s      r-   Ú_refresh_vertex_credentialsru    sS   € õ 7Ù'Ó)�O€EÜ”
˜5¤#Ó&×kÐk¨5¯;©;«=×kÐk¼ZÈÔRUÓ=V×kÐkÐ[c×[iÑ[iÓ[kÓlÐlr/   Úvertexc                ó<   € V ^8„  d   QhR\         R\         R\        /# )r)   rŸ  r#  r*   r.  )r,   s   "r-   r.   r.   /  s"   € ÷ ñ ¬Cð ÄCð ÔQUñ r/   c               ó  € \        V 4      p\        P                  V4      pVf   R#  VR8X  d   V! V4      '       g    R# V! 4       '       g   R# \        V4       R#   \         d"   p\
        P                  RY$4        Rp?R# Rp?ii ; i)zERefresh short-lived credentials for OAuth-backed auxiliary providers.NFr<  Tz7Auxiliary provider credential refresh failed for %s: %s)r°  Ú_CREDENTIAL_REFRESHERSrž   r÷  rŸ   r­   rÞ   )rŸ  r#  r­  Ú	refresherrc  s   &$   r-   Ú_refresh_provider_credentialsr{  /  s{   € ä(¨Ó2€JÜ&×*Ñ*¨:Ó6€IØÒÙðØ-7¸;Ô-F‘	˜.×)Ó)Ùñ MVÏKÊKÙÜ˜jÔ)ÙøÜô Ü�‰ÐNÐPZÔ`Ýûðús(   ¨A ½A Á A ÁA ÁBÁ'BÂBc                ó^   € V ^8„  d   QhR\         \        ,          R\        R\        R\        /# )r)   r  Úclient_base_urlrB  r*   r   )r,   s   "r-   r.   r.   ?  s0   € ÷ 'ñ 'Ü¤•}ð'Ü7:ð'ÜPSð'äñ'r/   c                ó¬   € \        V 4      pV'       d
   VR8w  d   V# \        V\        4      pV'       d   V\        V4       R28X  d   V# T;'       g    T# )z¤Provider whose short-lived credentials should be refreshed; auto-routed calls keep
``resolved_provider == "auto"``, so infer the backend from the client's base URL.r¢  z-oauth)r°  r  Ú_AUTH_REFRESH_PROVIDER_BY_HOST)r  r}  rB  r­  Úhost_providers   &&&  r-   Ú _auth_refresh_provider_for_router�  ?  s\   € ô
 )Ð):Ó;€Jß�j FÔ*ØÐÜ& Ô8VÓW€M÷ ˜Ô-DÐEWÓ-XÐ,YÐY_Ð*`Ô`ØÐØ×&Ð&˜JÐ&r/   c          	      óŠ   € V ^8„  d   QhR\         \        ,          R\        R\         \        \        \        3,          ,          /# ©r)   rB  Úfb_labelr*   )r   rX   r¤   r   )r,   s   "r-   r.   r.   O  s3   € ÷ 6ñ 6¤¬¥ð 6¼ð 6ÄÌ$ÌsÔTWÈxÍ.ÕAYñ 6r/   c                óh  € V '       d	   V'       g   R# \         P                  ! RV4      pV'       g   R#  \        V 4      P                  R4      p\	        V\
        4      '       d"   V\        VP                  ^4      4      ,          MRp\	        T\        4      '       d   T# R#   \         d     R# i ; i)z·Resolve the ``fallback_chain`` entry a ``fallback_chain[<i>](<provider>)`` label points at,
or None when the label is not a configured-chain candidate or the index no longer resolves.Nzfallback_chain\[(\d+)\]Úfallback_chain)
r  ÚmatchrG  rž   r?   r—  rW  ÚgrouprŸ   r¤   )rB  r„  r  Úchainr¹  s   &&   r-   Ú_fallback_chain_entryrŠ  O  s�   € ÷ —xÙÜ
�ŠÐ+¨XÓ6€AßÙðÜ*¨4Ó0×4Ñ4Ð5EÓFˆÜ*4°U¼D×*AÒ*A�”c˜!Ÿ'™' !›*“oÖ&Àtˆô ˜u¤d×+Ò+ˆ5Ð5°Ð5øô ô Úðús   µAB" Â"B1Â0B1c                óF   € V ^8„  d   QhR\         R\        \        ,          /# ©r)   Úrawr*   rï  )r,   s   "r-   r.   r.   _  s   € ÷ ñ ¤#ð ¬(´5­/ñ r/   c                óŽ   € \        V \        \        34      '       d)   \        V \        4      '       g   V ^ 8”  d   \        V 4      # R# )zYCoerce a config ``timeout`` to a positive float, or None (rejects bools, which are ints).N)r?   rW  rO  rm   ©r�  s   &r-   Ú_coerce_positive_timeoutr�  _  s2   € ä�#œœU�|×$Ò$¬Z¸¼T×-BÒ-BÀsÈQÄwÜ�S‹zÐÙr/   c                óh   € V ^8„  d   QhR\         \        ,          R\        R\         \        ,          /# rƒ  )r   rX   rO  )r,   s   "r-   r.   r.   f  s.   € ÷ 
Mñ 
M¤(¬3¥-ð 
M¼3ð 
MÄ8ÌEÅ?ñ 
Mr/   c                óh   € \        W4      p\        V'       d   VP                  R4      4      # R4      # )uB  Per-entry ``timeout`` for a configured fallback candidate, or None (keep the task-level
timeout). Inheriting the primary's deadline used to kill healthy-but-slower fallbacks.

A fallback candidate previously inherited the exact timeout the primary provider was called with. When
that deadline was tuned for the primary (or the primary simply consumed its whole budget before failing
over), the fallback aborted on the same clock even when independently healthy â€” a 163k-token compression
that needs ~90s on the fallback died at the primary's 30s deadline every turn (#62452).
r  N)rŠ  r�  rž   )rB  r„  r¹  s   && r-   Ú_fallback_entry_timeoutr“  f  s,   € ô " $Ó1€EÜ#¿E E§I¡I¨iÓ$8ÓLÐLÀtÓLÐLr/   c                ó0   € V ^8„  d   QhR\         R\         /# )r)   rù   r*   rW   )r,   s   "r-   r.   r.   s  s   € ÷ Iñ I¬ð I´ñ Ir/   c                óØ   € \         P                  ! RT ;'       g    R4      pV'       d    VP                  ^4      P                  4       # \	        T ;'       g    R4      P                  4       # )z>Recover the provider identifier from a fallback display label.zJ(?:fallback_chain\[\d+\]|fallback_providers\[\d+\]|main-agent)\(([^)]+)\)$rj   )r  r‡  rˆ  r¨  rX   )rù   r‡  s   & r-   Ú_fallback_provider_from_labelr–  s  sO   € ä�HŠHÐbÐdi×doÐdoÐmoÓp€Eß%*ˆ5�;‰;�q‹>×ÑÓ!ÐH´°E·K°K¸RÓ0@×0FÑ0FÓ0HÐHr/   c                   ó,   a € ] tR tRt o V 3R ltRtV tR# )Ú_FallbackDestinationiy  c                ój   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[S[ ,          ;R&   S[S[ ,          ;R&   # )r)   rŸ  rV   ro  r³  rL  )r,   rQ   s   "€r-   r.   Ú!_FallbackDestination.__annotate__y  s;   ø‡ ‚ Ù�Mñ á�Mñ ñ ‘s�mÑñ ñ ‘C�=Ñò	 r/   rD   N©rH   rI   rJ   rK   Ú__annotate_func__rN   rO   rP   s   @r-   r˜  r˜  y  ó   ø‡ ‡ „ r/   r˜  c          
      ó€   € V ^8„  d   QhR\         R\         R\        \         ,          R\        \         ,          R\        /# )r)   rŸ  rV   ro  r³  r*   )rX   r   r˜  )r,   s   "r-   r.   r.   €  sC   € ÷ Eñ EÜðEÜ ðEÜ,4´S­MðEÜBJÌ3Å-ðEäñEr/   c                 óŽ  € V'       g    \        V4      '       d   R pM‹\        P                  ! \        4      ;_uu_ 4        ^ RIHp T! Y;'       g    RT;'       g    RR7      p\        VP                  R4      ;'       g    R4      P                  4       ;'       g    RpRRR4       \        WW#4      #   + '       g   i     L; i)r,  rò  Nrj   )rô  r  r6  ro  )
rm  r–  r—  rŸ   rú  ró  rX   rž   r¨  r˜  )rŸ  rV   ro  r³  ró  ré  s   &&&&  r-   Ú_complete_fallback_destinationr   €  s—   € ÷ Ü.¨x×8Ò8Ø+‰Hä×$Ò$¤Y×/Õ/ÝPÙ2Ø&×:JÐ:JÀdÐY^×YdÐYdÐbdô�ô ˜wŸ{™{¨:Ó6×<Ð<¸"Ó=×CÑCÓE×MÐMÈ�÷ 0ô   °HÓDÐD÷ 0×/ús   ¿B4Á$B4ÂB4ÂB4Â4C	c                ó€   € V ^8„  d   QhR\         \        \        3,          R\        R\        \        ,          R\        /# )r)   r¹  Ú	fb_clientÚfb_modelr*   )r¤   rX   r   r   r˜  )r,   s   "r-   r.   r.   �  s>   € ÷ Oñ OÜ””S��>ðOÜ&)ðOÜ5=¼cµ]ðOäñOr/   c                 óB  € \        V P                  R 4      ;'       g    R4      P                  4       p\        V P                  R4      ;'       g    \        VRR4      ;'       g    R4      P                  4       p\        V P                  R4      ;'       g    V P                  R4      ;'       g    R4      P                  4       ;'       g    RpT;'       g=    \        V P                  R4      ;'       g    R4      P                  4       ;'       g    Rp\	        W4WV4      # )rŸ  rj   rV   ro  Ú	transportNr³  )rX   rž   r¨  rq   r   )r¹  r¢  r£  rŸ  rV   ro  r³  s   &&&    r-   Ú _fallback_destination_from_entryr¦  �  sÝ   € ô �5—9‘9˜ZÓ(×.Ð.¨BÓ/×5Ñ5Ó7€HÜ�5—9‘9˜ZÓ(×TÐT¬G°I¸zÈ2Ó,N×TÐTÐRTÓU×[Ñ[Ó]€HÜ�5—9‘9˜ZÓ(×HÐH¨E¯I©I°kÓ,B×HÐHÀbÓI×OÑOÓQ×YÐYÐUY€HØ×EÐEœ˜EŸI™I gÓ.×4Ð4°"Ó5×;Ñ;Ó=×EÐEÀ€EÜ)¨(¸hÓNÐNr/   c          
      ó€   € V ^8„  d   QhR\         \        ,          R\        R\         \        ,          R\        R\        /# )r)   rB  r¢  r£  r„  r*   )r   rX   r   r˜  )r,   s   "r-   r.   r.   š  s<   € ÷ ñ Ü
”3�-ðÜ$'ðÜ3;¼Cµ=ðÜLOðäñr/   c           
     óì   € \        VRR4      p\        V\        4      '       d   V# \        W4      pVe   \	        WQV4      # \        \        V4      \        \        VRR4      ;'       g    R4      RV4      # )z^Route identity of a fallback request: attached destination, else configured entry, else label.Ú_hermes_fallback_destinationNrV   rj   )rq   r?   r˜  rŠ  r¦  r   r–  rX   )rB  r¢  r£  r„  Úattachedr¹  s   &&&&  r-   Ú_fallback_destinationr«  š  sx   € ô �yÐ"@À$ÓG€HÜ�(Ô0×1Ò1ØˆÜ! $Ó1€EØÒÜ/°À(ÓKÐKÜ)Ü% hÓ/´´W¸YÈ
ÐTVÓ5W×5]Ð5]Ð[]Ó1^Ð`dÐfnóð r/   c          
      ó€   € V ^8„  d   QhR\         R\        \         ,          R\        R\        \         \         3,          /# )r)   rm  ri  Údestinationr*   )r—  r   r˜  rù  )r,   s   "r-   r.   r.   ©  s9   € ÷ 
ñ 
Üð
Ü#¤D�>ð
Ü;Oð
ä
Œ4”ˆ:Õñ
r/   c               óè   € ^ RI HpHp ^ RIHp T! YVP
                  VP                  VP                  ;'       g    RVP                  ;'       g    RV! 4       V! W4      '       d   RR7      # RR7      # )z^Plan one destination at the configured TTL (1h must not regress to 5m); one-shots never cache.)Úconfigured_cache_ttlÚ#plan_cache_sections_for_destination)Úis_one_shot_requestrj   TN)rŸ  rV   ro  r³  Ú	cache_ttlÚcache_disabled)	râ  r¯  r°  Úagent.prompt_cachingr±  rŸ  rV   ro  r³  )rm  ri  r­  r¯  r°  r±  s   &&$   r-   Ú"_replan_synchronous_cache_sectionsrµ  ©  sp   € ÷ fÝ8Ù.Ø +×"6Ñ"6À×AUÑAUØ×%Ñ%×+Ð+¨°;×3DÑ3D×3JÐ3JÈÑVjÓVlÙ2°8×CÒC�tôð ð JNôð r/   c                óD  € V ^8„  d   QhR\         R\        \        ,          R\        R\        \        ,          R\        \        ,          R\        \
        ,          R\        R\        R	\        \        ,          R
\        R\        R\        R\        \        \        3,          /# )r)   r­  rB  rm  ri  r%  r#  r7  r8  r(  Úfallback_entryÚtask_configÚapply_fast_laner*   )	r˜  r   rX   r—  rO  rW  r¤   rm   r   )r,   s   "r-   r.   r.   ¶  s¢   € ÷ ñ Ü%ðÜ08¼µðÜIMðä”D�>ðä(0´­ðäEMÌcÅ]ðô ðô 59ðô MUÔUYÍNðô ð	ô (,ð	ô ?Cð	ô
 
Œ#Œsˆ(…^ñr/   c               ó&  € YWrÜV'       dG   \        WP                  V P                  V	P                  R4      V	P                  R4      V	W¥VR7	      w  rÍ\	        W#V R7      w  rï\        V P                  V P                  VWLWöWØV P                  VR7      pV# )zYBuild request kwargs for one fallback destination (cache-section replan + fast-lane cap).rŸ  r³  ©Úactual_providerÚactual_modelrÚ  Úrequested_modelÚroute_configÚleak_guard_configr#  r{  )r­  r;  )Ú_compression_fast_lane_controlsrŸ  r³  rž   rµ  r?  rV   )r­  rB  rm  ri  r%  r#  r7  r8  r(  r·  r¸  r¹  Úfallback_max_tokensÚfallback_extra_bodyÚfallback_messagesÚfallback_toolsÚ	fb_kwargss   &$$$$$$$$$$$     r-   Ú_fallback_request_kwargsrÇ  ¶  sŸ   € ð 0:Ð,ßÜ3RØ×"6Ñ"6À[×EVÑEVØ-×1Ñ1°*Ó=Ø*×.Ñ.¨wÓ7ÀnØ)ÐMaô	4
Ñ0Ðô )KÈ8ÐhsÔ(tÑ%ÐÜ"Ø×Ñ˜k×/Ñ/Ð1BØÀ~Ø&ÐT_×ThÑThÐosôu€Ið Ðr/   c                óV  € V ^8„  d   QhR\         R\        \        ,          R\        R\        \        ,          R\        R\        R\
        \        \        \        \         3,          \        \        \         \        \        ,          .\        \        \         3,          3,          3,          /# )r)   r¢  r£  r„  rB  r7  r¹  r*   )	r   r   rX   rO  rm   rù  r˜  r¤   r   )r,   s   "r-   r.   r.   Í  sŽ   € ÷ !Rñ !RÜð!RÜ&¤s�mð!RÜ7:ð!RÜEMÌcÅ]ð!Räð!Rä/3ð!Rô Ô¤¤c¬3 h¥´¼3ÄÄXÌcÅ]Ð:SÔUYÔZ]Ô_bÐZbÕUcÐ:cÕ1dÐdÕeñ!Rr/   c               ó>  aa€ \        W24      pVe+   Wt8w  d%   \        P                  RT;'       g    RW'V4       Tp\        W0W4      oVR8X  d   \	        V4      M/ p\        W24      ;'       g    / p	\        RRVRVRV	RVRV/VB oR	 VV3R
 llp
S\        S3/ SB V
3# )a,  Resolve the destination + first-attempt kwargs for a fallback candidate.

Returns ``(destination, kwargs, rebuild)`` where ``rebuild(provider, client, model)`` produces
kwargs for the credential-refreshed retry destination. A configured-chain entry's own
``timeout`` overrides ``effective_timeout``.
zJAuxiliary %s: %s using its configured timeout %.0fs (task-level was %.0fs)r_  ÚcompressionrB  r7  r·  r¸  r¹  c                ó¢   € V ^8„  d   QhR\         R\        R\        \         ,          R\        \        \
        \         \        3,          3,          /# )r)   rŸ  r¯   r³  r*   )rX   r   r   rù  r˜  r¤   )r,   s   "r-   r.   Ú._plan_fallback_candidate.<locals>.__annotate__ç  sJ   € ÷ Xñ Xœ3ð X¬ð X´H¼SµMð XÄeÔL`ÔbfÔgjÔloÐgoÕbpÐLpÕFqñ Xr/   c           
      óÜ   <€ \        T SP                  ;'       g!    \        \        VR R4      ;'       g    R4      SP                  T;'       g    SP
                  4      pV\        V3/ SB 3# )rV   rj   )r˜  rV   rX   rq   ro  r³  rÇ  )rŸ  r¯   r³  Úretry_destinationÚcommonr­  s   &&& €€r-   Ú_rebuildÚ*_plan_fallback_candidate.<locals>._rebuildç  sk   ø€ Ü0Ø�k×*Ñ*×XÐX¬c´'¸&À*ÈbÓ2Q×2WÐ2WÐUWÓ.XØ× Ñ  %×"<Ð"<¨;×+<Ñ+<ó
Ðð !Ô":Ð;LÑ"WÐPVÑ"WÐWÐWr/   rD   )r“  r­   r+  r«  rG  rŠ  r¤   rÇ  )r¢  r£  r„  rB  r7  r¹  r“  Ú
fb_timeoutr¸  r·  rÐ  rÏ  r­  s   &&&$$$,    @@r-   Ú_plan_fallback_candidaterÓ  Í  sÔ   ù€ ô )¨Ó8€JØÒ *Ô"AÜ�‰ð%à�NˆN�F˜HÐ2Cô	
ð
 'ÐÜ'¨¸ÓL€KØ6:¸mÔ6KÔ,¨TÔ2ÐQS€KÜ*¨4Ó:×@Ð@¸b€NÜñ ØðØ%6ðØGUðàðà1@ðàDKñ€F÷
Xñ Xð Ô0°ÑGÀÑGÈÐQÐQr/   Útagc                óœ   € V ^8„  d   QhR\         \        ,          R\        R\        R\        R\        R\        R\         \        ,          RR	/# )
r)   rB  r„  Úfb_providerÚfb_errrV   rÔ  rõ  r*   N)r   rX   rŸ   )r,   s   "r-   r.   r.   ñ  sV   € ÷ ?ñ ?Ü
”3�-ð?Ü#&ð?Ü58ð?ÜBKð?äð?ä ð?ä/7¼­}ð?ð 
ñ?r/   c               óÀ   € \        T;'       g    T\        V4      YF;'       g    RR7       V'       d   RV R2MRp\        P                  RT ;'       g    RWQWs4       R# )	a  The candidate cannot serve this walk (``reason`` = its ``_FALLBACK_REASONS`` capacity label,
None = dead token): mark it unhealthy so the ordered re-walk skips it and the caller moves on to
the next entry. Transient classes get a short hold, payment/quota and dead tokens the long one.zstale fallback credential)rr  rV   rõ  zis out of capacity (Ú)z$has a stale/unrefreshable credentialuK   Auxiliary %s%s: fallback candidate %s %s (%s) â€” skipping to next fallbackr_  N)r  r�   r­   r®   )rB  r„  rÖ  r×  rV   rÔ  rõ  Úwhys   &&&&$$$ r-   Ú_quarantine_fallback_candidaterÛ  ñ  s^   € ô Ø×Ð�xÔ%FÀvÓ%NØ×"GÐ"GÐ,GõI÷ /5Ð   ¨Ñ
*Ð:`€CÜ
‡N�NÐ`Ø—>�>˜6 3°#ö?r/   c                ól  € V ^8„  d   QhR\         R\        \        \        \        \        ,          .\
        \         \        \        \        3,          3,          3,          R\        R\        R\
        \        \        \
        \        \        \        \        3,          \         3,          ,          3,          /# )r)   r­  Úrebuildr¢   r#  r*   )r˜  r   rX   r   r   rù  r¤   rm   )r,   s   "r-   r.   r.      s‰   € ÷ ñ Ü%ðä”sœC¤¬#¥Ð/´Ô7KÌTÔRUÔWZÐRZÍ^Ð7[Õ1\Ð\Õ]ðô ðô ð	ô
 Œ3”œœs¤D¬¬c¨¥NÔ4HÐHÕIÕJÐJÕKñr/   c               óN  € \        V P                  V P                  4      pVR8X  d   RV/M/ pVR9  do   \        V3/ VB '       d]   \	        W@P
                  3/ V'       d   RR/M/ BRV P                  ;'       g    RRV P                  /B w  rgVe   V! WFV4      w  r‰WFW˜33# VR3# )	z·After an auth error on a fallback candidate: refresh credentials and rebuild the request.
Returns ``(refresh_provider, retry)``; ``retry`` = ``(client, kwargs, destination)`` or None.r<  r#  Nr¢   TrV   ro  >   Nrj   r¢  )r�  rŸ  rV   r{  r=  r³  ro  )
r­  rÝ  r¢   r#  rÖ  Úrefresh_kwargsrC  rD  rÎ  rË  s
   &&$$      r-   Ú_plan_fallback_auth_retryrà     sÉ   € ô 3°;×3GÑ3GÈ×I]ÑI]Ó^€KØ;FÈ+Ô;UÐ&¨Ñ7Ð[]€NØÐ,Ô,Ô1NÈ{Ñ1mÐ^l×1mÐ1mÜ$6Ø×*Ñ*ñ%
ßGQ°¸dÑ/CÐWYñ%
à ×)Ñ)×1Ð1¨Tð%
à<G×<PÑ<Pò%
Ñ!ˆð Ò#Ù.5°kÐQ\Ó.]Ñ+ÐØ¨|Ð OÐOÐOØ˜ÐÐr/   c                óB  € V ^8„  d   QhR\         R\        \        ,          R\        R\        \        ,          R\        R\        \        ,          R\        \
        ,          R\        \        ,          R	\        R
\        R\        \        ,          R\        \         ,          /# ©r)   r¢  r£  r„  rB  rm  r%  r#  ri  r7  r8  r(  r*   ©r   r   rX   r—  rO  rW  r¤   )r,   s   "r-   r.   r.     s“   € ÷ >ñ >Üð>Ü&¤s�mð>Ü7:ð>ÜEMÌcÅ]ð>Ü^bð>äœ%•ð>ä.6´s­mð>äDLÌTÅNð>ô ð>ô 59ð>ô MUÔUYÍNð>ô Œc…]ñ	>r/   c               óT  aaa€ \        WVSVRWGVWiV
R7      w  r¼pR V3R llo^ RIHo R VVV3R llp V! WV4      #   \         dÞ   p\	        T4      '       g:   \        T4      pTf   h \        SY+P                  YûP                  TR	7        Rp?R# \        Y½R
\        T RR4      R7      w  ppTpTeM   T^,          p T! T!  u Rp?#   \         d*   p\	        T4      '       g   \        T4      f   h  Rp?MRp?ii ; i\        STTTTP                  R7        Rp?R# Rp?ii ; i)až  Call one fallback candidate with stale-credential recovery: on an auth error refresh its
credentials and retry once with a rebuilt client; if that also auth-fails, quarantine the
provider and return None so the caller moves on. A capacity error (quota/rate-limit 429, 402,
connection, route-incompatible model, malformed response) also quarantines and returns None so
the ordered chain advances to the next configured entry (#106367); other errors raise.

``effective_timeout`` is the task-level deadline; a configured-chain candidate with its own ``timeout``
entry gets that instead, so a fallback tuned differently from the primary is allowed its own budget
(#62452).
T©	rB  r7  r¹  rm  ri  r%  r#  r8  r(  c                ój   € V ^8„  d   QhR\         R\        \        \         3,          R\        R\         /# ©r)   r¯   Úrequest_kwargsÚdestr*   ©r   r¤   rX   r˜  )r,   s   "r-   r.   Ú3_call_fallback_candidate_sync.<locals>.__annotate__+  s2   € ÷ 

ñ 

”cð 

¬4´´S°­>ð 

ÔAUð 

ÔZ]ñ 

r/   c                 óp   <a a€ \        \        S VSP                  SP                  V VV3R  lR7      S4      # )c           	      ó^   <€ \        SV S\        SP                  SP                  4      R 7      # ©©Úforce_stream)r’  Ú_provider_requires_streamrŸ  rV   )r“  r¯   ré  rB  s   &€€€r-   r¹  Ú>_call_fallback_candidate_sync.<locals>._send.<locals>.<lambda>/  s$   ø€ Ô'<Ø˜G TÜ!:¸4¿=¹=È$Ï-É-Ó!Xõ(r/   ©rŸ  ro  rÊ  )rJ  rª  rŸ  ro  )r¯   rè  ré  rB  s   f&f€r-   Ú_sendÚ,_call_fallback_candidate_sync.<locals>._send+  s3   ú€ Ü%Ü"Ø˜°·±ÈÏÉöôð ó	
ð 		
r/   )Úsend_with_parameter_rungsc                ój   € V ^8„  d   QhR\         R\        \        \         3,          R\        R\         /# rç  rê  )r,   s   "r-   r.   rë  8  s8   € ÷ Qñ Q¤ð Q´d¼3Ä¸8µnð QÔL`ð QÔehñ Qr/   c                 ó&   <a€ S! VV3R  lWSR7      # )c                 ó   <€ S! WS4      # r8   rD   ©Úcrk  rô  ré  s   &&€€r-   r¹  ÚI_call_fallback_candidate_sync.<locals>._send_recovering.<locals>.<lambda>:  ó   ø€ ™%  tÔ,r/   rH  rD   )r¯   rè  ré  rô  rö  rB  s   &&f€€€r-   Ú_send_recoveringÚ7_call_fallback_candidate_sync.<locals>._send_recovering8  s   ù€ Ù(Ý,¨fÈ4ôQð 	Qr/   N)rV   rõ  FrU   rj   ©r¢   r#  ry  )rÓ  Ú!agent.auxiliary_fallback_recoveryrö  rŸ   r®  r‚   rÛ  rŸ  rV   rà  rq   )r¢  r£  r„  rB  rm  r%  r#  ri  r7  r8  r(  r­  rÆ  rÝ  rþ  r×  ÚcapacityrÖ  ÚretryÚfailed_destinationÚ	retry_errrô  rö  s   &&&d$$$$$$$          @@r-   Ú_call_fallback_candidate_syncr    s>  ú€ ô '?Ø˜X¨DÐDUØ xÈ+ØØ)ô	'Ñ#€K˜G÷

ð 

õ L÷Qò QðÙ 	°kÓBÐBøÜô Ü˜f×%Ò%Ü<¸VÓDˆHØÒØÜ*Ø�h× 4Ñ 4°f×G[ÑG[Øõ!õ Ü6Ø¨UÄ7È9ÐV_ÐacÓCdôfÑˆ�Uà(ÐØÒØ!& q¥ÐðÙ'¨Ñ/Õ/øÜô Ü% i×0Ò0Ô5ZÐ[dÓ5eÒ5mØÿøðúô 	'Ø�(˜K¨Ð:L×:UÑ:Uõ	
õ ûð-úsF   ¶? ¿D'Á
AD"Â+D"Ã CÃD'ÃC?ÃC:Ã5D"Ã:C?Ã?D"Ä"D'c                óB  € V ^8„  d   QhR\         R\        \        ,          R\        R\        \        ,          R\        R\        \        ,          R\        \
        ,          R\        \        ,          R	\        R
\        R\        \        ,          R\        \         ,          /# râ  rã  )r,   s   "r-   r.   r.   V  s“   € ÷ 2ñ 2Üð2Ü&¤s�mð2Ü7:ð2ÜEMÌcÅ]ð2Ü^bð2äœ%•ð2ä.6´s­mð2äDLÌTÅNð2ô ð2ô 59ð2ô MUÔUYÍNð2ô Œc…]ñ	2r/   c             ƒ  ó†  aaa"  € \        WVSVRWGVWiV
R7      w  r¼pR V3R llo^ RIHo R VVV3R llp V! WV4      G Rj  x€L
 #  L  \         dé   p\	        T4      '       g;   \        T4      pTf   h \        SY+P                  YûP                  R	TR
7        Rp?R# \        Y½R\        T RR4      R7      w  ppTpTeV   T^,          p T! T!  G Rj  x€L 
 u Rp?#   \         d*   p\	        T4      '       g   \        T4      f   h  Rp?MRp?ii ; i\        STTTTP                  R	R7        Rp?R# Rp?ii ; i5i)zVAsync mirror of :func:`_call_fallback_candidate_sync` (no fast-lane cap on this wire).Frå  c                ój   € V ^8„  d   QhR\         R\        \        \         3,          R\        R\         /# rç  rê  )r,   s   "r-   r.   Ú4_call_fallback_candidate_async.<locals>.__annotate__c  s2   € ÷ 
ñ 
œCð 
´´c¼3°hµð 
ÔG[ð 
Ô`cñ 
r/   c           
   “   óª   <"  € ^ RI pTP                  \        \        WVP                  VP
                  R7      G Rj  x€L
 S4      G Rj  x€L
 #  L L5i)ró  Nr•  )rë  rì  rJ  rµ  rŸ  ro  )r¯   rè  ré  rë  rB  s   &&& €r-   rô  Ú-_call_fallback_candidate_async.<locals>._sendc  sI   øé € ÛØ×&Ñ&Ü"Ü)¨&È4Ï=É=Ðcg×cpÑcpÔq×qØó
÷ 
ð 	
áqñ
ùs!   ƒ:A½A
¾AÁ
AÁAÁA)Úsend_with_parameter_rungs_asyncc                ój   € V ^8„  d   QhR\         R\        \        \         3,          R\        R\         /# rç  rê  )r,   s   "r-   r.   r
  l  s8   € ÷ Qñ Q¤sð Q¼DÄÄcÀ½Nð QÔRfð QÔknñ Qr/   c              “   óB   <a"  € S! VV3R  lWSR7      G Rj  x€L
 #  L5i)c                 ó   <€ S! WS4      # r8   rD   rú  s   &&€€r-   r¹  ÚJ_call_fallback_candidate_async.<locals>._send_recovering.<locals>.<lambda>n  rý  r/   rH  NrD   )r¯   rè  ré  rô  r  rB  s   &&f€€€r-   rþ  Ú8_call_fallback_candidate_async.<locals>._send_recoveringl  s(   ùé € Ù4Ý,¨fÈ4ôQ÷ Qð 	Qñ Qùs   „˜™Nú (async))rV   rÔ  rõ  TrU   rj   r   )rV   rÔ  )rÓ  r  r  rŸ   r®  r‚   rÛ  rŸ  rV   rà  rq   )r¢  r£  r„  rB  rm  r%  r#  ri  r7  r8  r(  r­  rÆ  rÝ  rþ  r×  r  rÖ  r  r  r  rô  r  s   &&&d$$$$$$$          @@r-   Ú_call_fallback_candidate_asyncr  V  sP  úé € ô '?Ø˜X¨DÐDUØ¨È;ØØ)ô	'Ñ#€K˜G÷
ð 
õ R÷Qò QðÙ% i¸KÓH×HÐHÑHøÜô Ü˜f×%Ò%Ü<¸VÓDˆHØÒØÜ*Ø�h× 4Ñ 4°f×G[ÑG[Ø xõ1õ Ü6Ø¨TÄ'È)ÐU^Ð`bÓBcôeÑˆ�Uà(ÐØÒØ!& q¥ÐðÙ-¨uÑ5×5Ð5Õ5øÜô Ü% i×0Ò0Ô5ZÐ[dÓ5eÒ5mØÿøðúô 	'Ø�(˜K¨Ø'×0Ñ0°jõ	
õ ûð/üs‰   …2E¸A ÁA	ÁA ÁEÁ	A ÁD>ÁAD9ÂEÂ!+D9Ã	C!ÃCÃC!ÃD>ÃEÃ!DÃ,DÄD9ÄDÄD9Ä3EÄ9D>Ä>Eúpayment errorÚfailed_base_urlÚfailure_scopec                ó
  € V ^8„  d   QhR\         R\         R,          R\         R\         R\        R\        \        \         \        3,          ,          R\        \        \        ,          \        \         ,          \         3,          /# )	r)   Úfailed_providerrB  Nrõ  r  r  rç  r*   )rX   r   r   r¤   rù  )r,   s   "r-   r.   r.   ‹  sp   € ÷ $ñ $Üð$Ü # d¥
ð$Ü;>ð$äð$ä.1ð$äHPÔQUÔVYÔ[^ÐV^ÕQ_ÕH`ð$ô Œ8”C�=œ(¤3�-¬Ð,Õ-ñ$r/   c          
     óˆ  € V P                  4       P                  4       p\        V4      P                  R4      ;'       g    \	        4       p\        Wq4      '       g   R# V0pV'       d5   VP                  4       V9   d    VP                  VP                  4       4       V U	u0 uF  p	\        V	4      kK  	  p
p	\        V RW4R7      p. p\        4        F·  w  rÞ\        V4      pV'       g   WÚ9   g   V! VRV4      '       d   K0  \        Wß4      '       d$   \        WÑVR7       VP                  V R24       Kd  V! 4       w  ppVe5   \        P                  RT;'       g    RY TT;'       g    R4       VVV3u # VP                  V4       K¹  	  \        P!                  R	T;'       g    RW R
P#                  V4      4       R# u up	i )zØTry the auto-detection chain after a payment/credit or connection error, skipping the failed
provider (and the main-provider path when it maps to the same backend). Returns (client, model, label) or (None, None, "").rŸ  N©r  r  ry  ú (unhealthy)u2   Auxiliary %s: %s on %s â€” falling back to %s (%s)r_  r  z<Auxiliary %s: %s on %s and no fallback available (tried: %s)ú, ©NNrj   )r©  r¨  rã  rž   r¬  Ú_discovery_chain_allowedrå  rP  Ú_failed_backend_skiprJ  r   rá  rb  r˜  r­   r+  r®   rÍ  )r  rB  rõ  r  r  rç  ÚskipÚmain_providerÚskip_labelsÚsÚskip_chain_labelsÚskip_backendÚtriedrù   Útry_fnÚcandidate_base_urlr¯   r³  s   &&&$$$            r-   Ú_try_payment_fallbackr*  ‹  s�  € ð × Ñ Ó"×(Ñ(Ó*€Dô ,¨LÓ9×=Ñ=¸jÓI×bÐbÔM`ÓMb€MÜ# M×8Ò8ØÐØ�&€Kß˜×,Ñ,Ó.°$Ô6Ø�‰˜×+Ñ+Ó-Ô.Ù<GÓH¹K°qÔ/°Ö2¹KÐÐHÜ'Ø˜¨ô]€Là€EÜ,Ö.‰ˆÜ4°UÓ;Ðß EÔ$>Á<Ø�tÐ/÷D1ò D1áÜ! %×<Ò<Ü Ð6HÕIØ�L‰L˜E˜7 ,Ð/Ô0ÙÙ›‰ˆ�ØÒÜ�K‰KÐLØŸ˜ ¨ÀÈ×HZÐHZÐQZô\à˜5 %Ð'Ò'Ø�‰�UÖñ /ô ‡N�NÐQØ—>�>˜6 6¸D¿I¹IÀeÓ<LôNàÐùò+ Is   Â!F?c                ó„   € V ^8„  d   QhR\         R\        \         ,          R\         R\        R\        R\        3,          /# )r)   r  Úfailed_modelr  r  r*   .)rX   r   r   r   rm   )r,   s   "r-   r.   r.   ²  sC   € ÷ ñ ÜðÜ(0´­ðÜKNðäðô ˆc”4ˆiÕñr/   c               ó  aaaa	€ ^ RI HoHpHo	 T;'       g    RP	                  4       P                  4       ;'       g    RpSP                  WVR7      oS;'       g!    V'       d   VP                  MVP                  oRR VVVV	3R lllpV# )u	  Predicate ``skip(provider, model, base_url="")`` â†’ True when a candidate must be skipped for the failed
route. Scope: ``failed_model`` â†’ model-scoped (only that deployment; timeout/connection/rate-limit);
None â†’ credential-wide (whole provider; auth/payment).)ÚBackendIdentityÚFailureScopeÚshould_skip_candidaterj   N©rŸ  r³  rV   c                ó^   € V ^8„  d   QhR\         R\        \         ,          R\         R\        /# )r)   rŸ  r³  rV   r*   rZ  )r,   s   "r-   r.   Ú*_failed_backend_skip.<locals>.__annotate__¿  s,   € ÷ 
ñ 
œð 
¤H¬S¥Mð 
¼Sð 
Ì$ñ 
r/   c                 ó:   <€ S! SP                  WVR 7      SS4      # )r1  )Úbuild)rŸ  r³  rV   r.  Úfailed_identr  r0  s   &&&€€€€r-   Ú_skipÚ#_failed_backend_skip.<locals>._skip¿  s)   ø€ Ù$Ø×!Ñ!¨8È8Ð!ÓTÐVbÐdqó
ð 	
r/   r  )	Úagent.backend_identityr.  r/  r0  r¨  r©  r5  ÚMODELÚ
CREDENTIAL)
r  r,  r  r  r/  Ú
skip_modelr7  r.  r6  r0  s
   &&$d   @@@r-   r   r   ²  s|   û€ ÷ \Ñ[Ø×$Ð$ "×+Ñ+Ó-×3Ñ3Ó5×=Ð=¸€JØ"×(Ñ(Ø ¸_ð )ó N€Là!×dÐd¿J l×&8Ò&8ÈL×LcÑLc€M÷
õ 
ð €Lr/   c                óè   € V ^8„  d   QhR\         R\         R,          R\         R\        \         ,          R\         R\        R\        \        \        ,          \        \         ,          \         3,          /# )	r)   r  rB  Nrõ  r,  r  r  r*   ©rX   r   r   rù  )r,   s   "r-   r.   r.   Æ  sb   € ÷ )7ñ )7Üð)7Ü # d¥
ð)7Ü;>ð)7äœ3•-ð)7ä9<ð)7äRUð)7ô Œ8”C�=œ(¤3�-¬Ð,Õ-ñ)7r/   c           	     ó  € \        4       ;'       g    RP                  4       p\        4       ;'       g    RP                  4       pVP                  4       R8X  d"   \	        V4      w  r‰V'       d	   V	'       g   R# Y‰rvV'       d   V'       d   VP                  4       R9   d   R# VR8X  d6   V\
        9   g   \        Wg4      '       g   \        P                  RW V4       R# \        V4      p
\        WVVR7      ! WgV
4      '       d   R# \        Wj4      '       d   \        WaV
R7       R#  \        WgR7      w  r¼Vf   R# R	V R
2p\        P                  RT;'       g    RY YÜ;'       g    T4       Y¼;'       g    TV3#   \         d    RRrË LVi ; i)a8  Last-resort fallback to the main agent provider + model after the configured chain is exhausted.
``failed_model`` scoping per ``_failed_backend_skip``; same-URL custom endpoints serve many models,
so a hung aux model says nothing about the main model's health. Returns (client, model, label) or (None, None, "").rj   rD  Nr  u^   Auxiliary vision: %s on %s â€” main agent provider %s accepts no image input, not falling backr  ry  ©rŸ  r³  zmain-agent(rÙ  uC   Auxiliary %s: %s on %s â€” falling back to main agent model %s (%s)r_  r  >   rj   r¢  )r¬  r¨  rN  r©  rK  Ú_PROVIDERS_WITHOUT_VISIONÚ_main_model_supports_visionr­   r+  r   r   rá  rb  Úresolve_provider_clientrŸ   )r  rB  rõ  r,  r  r  r"  Ú
main_modelÚ_agg_providerÚ
_agg_modelÚmain_base_urlr¯   r3  rù   s   &&&&&&        r-   Ú_try_main_agent_model_fallbackrH  Æ  s„  € ô )Ó*×0Ð0¨b×7Ñ7Ó9€MÜ"Ó$×*Ð*¨×1Ñ1Ó3€JØ×ÑÓ Ô%ä$;¸JÓ$GÑ!ˆß§JØ!Ð!Ø$1�zß§
¨m×.AÑ.AÓ.CÀ|Ô.SØÐØˆxÔØÔ6Ô6Ô>YÐZg×>tÒ>tô 	�‰ÐtØ¨]ô	<àÐÜ+¨MÓ:€MÜØ¸?Ø'õ)à)6ÀM÷Sò Sð ÐÜ˜m×;Ò;Ü˜M¸-ÕHØÐð,Ü!8À-Ô!bÑˆð ‚~ØÐØ˜-˜¨Ð*€EÜ
‡K�KÐUØ—�˜ ¸×@\Ð@\ÐR\ô^à×/Ð/ Z°Ð6Ð6øô ô ,Ø!% t’ð,ús   Ä'E; Å;FÆFc                ó\   € V ^8„  d   QhR\         \        ,          R\         \        ,          /# rA  ©r   rX   rW  )r,   s   "r-   r.   r.     s&   € ÷ Eñ E¤x´¥}ð E¼Ä#½ñ Er/   c                ó    € V R8X  d   \         # R# )z]Minimum context length for an auxiliary task; None = no floor (only ``compression`` has one).rÊ  N)r{   rH  s   &r-   Ú_task_minimum_context_lengthrL    s   € à%)¨]Ô%:Ô!ÐDÀÐDr/   c                ój   € V ^8„  d   QhR\         R\         R\         R\         R\        \        ,          /# )r)   rŸ  r³  rV   rU   r*   )rX   r   rW  )r,   s   "r-   r.   r.     s7   € ÷ 	=ñ 	=¬ð 	=´Cð 	=Ä3ð 	=ÔVYð 	=ÔckÔloÕcpñ 	=r/   c                óÔ   € V'       g   R#  \        WW0R7      p\	        T\
        4      '       d
   T^ 8”  d   T# R#   \         d#   p\        P                  RYT4        Rp?R# Rp?ii ; i)zpBest-effort context window for a fallback candidate; ``None`` = unknown (never raises; callers pass it through).N)rV   rU   rŸ  zBAuxiliary fallback: could not resolve context window for %s/%s: %s)r|   rŸ   r­   rÞ   r?   rW  )rŸ  r³  rV   rU   Úctxrc  s   &&&&  r-   Ú_candidate_context_windowrP    s`   € çÙðÜ& uÈÔdˆô ˜S¤#×&Ò&¨3°¬7ˆ3Ð<¸Ð<øô ô Ü�‰ÐYÐ[cÐloÔpÝûðús   Œ: ºA'ÁA"Á"A'Ú
name_modelc                óÜ   € V ^8„  d   QhR\         \        \        3,          R\        R\        R\        \        ,          R\        \        ,          R\        R\
        R\        \        ,          /# )	r)   r¹  rŸ  r³  Úmin_ctxrB  rù   rQ  r*   )r¤   rX   r   r   rW  rm   )r,   s   "r-   r.   r.     sb   € ÷ >ñ >Ü””S��>ð>Ü%(ð>Ü14ð>Ü?GÌ½}ð>ä
”3�-ð>ä #ð>ä15ð>ô Œc…]ñ>r/   c          	     óH  € Vf   R# \        Y\        V P                  R4      ;'       g    R4      \        V 4      ;'       g    RR7      pVe   Ws8¼  d   R# V'       d   \        P                  RWEW'V4       M"\        P                  RT;'       g    RWWV4       V RV R	V R
2# )zaScreen one fallback candidate by context window; returns the ``tried`` note when it is too small.NrV   rj   )rV   rU   zDAuxiliary %s: skipping %s (%s context=%d < min=%d), continuing chainzAAuxiliary %s: skipping %s (context=%d < min=%d), continuing chainr_  z (context too small: Ú<rÙ  )rP  rX   rž   Ú_fallback_entry_api_keyr­   r+  )r¹  rŸ  r³  rS  rB  rù   rQ  Úfb_ctxs   &&&&$$$ r-   Ú_context_too_smallrX    s¢   € ð
 ‚ÙÜ&Ø¤# e§i¡i°
Ó&;×&AÐ&A¸rÓ"BÔLcÐdiÓLj×LpÐLpÐnpôr€Fà‚~˜Ô*ÙßÜ�‰ÐZØ °õ	9ô 	�‰ÐWØ—N�N˜F E°7ô	<àˆWÐ)¨&¨°°7°)¸1Ð=Ð=r/   c                óÚ   € V ^8„  d   QhR\         R\         R\         R\        \         ,          R\         R\        R\        \        \        ,          \        \         ,          \         3,          /# ©r)   rB  r  rõ  r,  r  r  r*   r>  )r,   s   "r-   r.   r.   &  s_   € ÷ 1ñ 1Ü
ð1Ü #ð1Ü-0ð1ÜJRÔSVÍ-ð1äð1ä.1ð1ô Œ8”C�=œ(¤3�-¬Ð,Õ-ñ1r/   c               ó|  € V '       g   R# \        V 4      P                  R4      pV'       d   \        V\        4      '       g   R# \	        WWER7      p. p\        V 4      p	\        V4       EFŠ  w  r«\        V\        4      '       g   K  \        VP                  RR4      4      P                  4       pV'       g   KQ  \        VP                  RR4      4      P                  4       p\        WËP                  R4      4      pV! WÍV4      '       d   K¥  \        WÎ4      '       d(   \        WÀVR7       VP                  R	V
 R
V R24       KÝ  T;'       g    RpR	V
 R
V R2p \        V4      w  ppVeu   V'       d   \!        W¼VW�VRR7      MRpV'       d   VP                  V4       EK;  \"        P%                  RYTTT;'       g    T;'       g    R4       TT;'       g    TV3u # VP                  V4       EK�  	  V'       d'   \"        P'                  RV RP)                  V4      4       R#   \         d    RRpp LÏi ; i)a1  Try auxiliary.<task>.fallback_chain entries in order (each needs ``provider``; model/base_url/api_key optional).
``failed_model`` scoping per ``_failed_backend_skip`` (sibling models on the same provider still
run after a model-scoped failure). Returns (client, model, provider_label) or (None, None, "").Nrj   r†  r  rŸ  r³  rV   ry  zfallback_chain[ú](z) (unhealthy)rÙ  T)rB  rù   rQ  u9   Auxiliary %s: %s on %s â€” configured fallback to %s (%s)r  z=Auxiliary %s: configured fallback_chain exhausted (tried: %s)r  r  )rG  rž   r?   r—  r   rL  r  r¤   rX   r¨  r   rá  rb  r˜  Ú_resolve_fallback_entryrŸ   rX  r­   r+  rÞ   rÍ  )rB  r  rõ  r,  r  r  r‰  r!  r'  rS  Úir¹  rÖ  Úfb_model_rawÚfb_base_urlr£  rù   r¢  r3  Ú	too_smalls   &&&&$$              r-   Ú_try_configured_fallback_chainrb  &  s  € ÷ ØÐÜ& tÓ,×0Ñ0Ð1AÓB€Eßœ
 5¬$×/Ò/ØÐÜØ°ôe€Dà€EÜ*¨4Ó0€GÜ˜e×$‰ˆÜ˜%¤×&Ò&ÙÜ˜%Ÿ)™) J°Ó3Ó4×:Ñ:Ó<ˆßÙÜ˜5Ÿ9™9 W¨bÓ1Ó2×8Ñ8Ó:ˆÜ-¨k¿9¹9ÀZÓ;PÓQˆÙ�¨;×7Ò7ÙÜ! +×;Ò;Ü ¸KÕHØ�L‰L˜?¨1¨#¨R°¨}¸MÐJÔKÙØ×'Ð' 4ˆØ! !  B { m°1Ð5ˆð	3Ü(?ÀÓ(FÑ%ˆI�~ð Ò ÷  ô +Ø N°GÈeÐ`dõà%)ð ÷ Ø—‘˜YÔ'ÚÜ�K‰KÐSØ o°u¸n×>eÐ>eÐPX×>eÐ>eÐ\eôgà˜n×8Ð8°¸%Ð?Ò?Ø�‰�U×ñ= %÷> Ü�‰ÐTÐVZÐ\`×\eÑ\eÐfkÓ\lÔmØÐøô ô 	3Ø(,¨d�~ˆI‘~ð	3ús   ÅH)È)H;È:H;c          	      óª   € V ^8„  d   QhR\         \        ,          R\        R\        \         \        ,          \         \        ,          \        3,          /# )r)   rB  r  r*   r2  )r,   s   "r-   r.   r.   Z  sA   € ÷ Yñ YÜ
”3�-ðYÜ*-ðYä
Œ8”C�=œ(¤3�-¬Ð,Õ-ñYr/   c                óž   € T;'       g    RP                  4       P                  4       pV '       d   V'       d   VR9   d   R# \        WRR7      # )u¶   Task fallback_chain when an explicit aux provider cannot build a client (no key/OAuth/pool creds);
stops at the per-task chain â€” the main-agent model stays the runtime last resort.rj   zprovider unavailable©rõ  >   r¢  r  )r¨  r©  rb  )rB  r  Úexplicits   && r-   Ú/_try_configured_fallback_for_unavailable_clientrg  Z  sC   € ð
  ×%Ð% 2×,Ñ,Ó.×4Ñ4Ó6€Hß—x 8¨xÔ#7ØÐÜ)¨$ÐAWÔXÐXr/   c                óh   € V ^8„  d   QhR\         \        \        3,          R\        \        ,          /# r¸  )r¤   rX   r   r   )r,   s   "r-   r.   r.   e  s&   € ÷ (ñ (¤4¬¬S¨¥>ð (´h¼sµmñ (r/   c                ó   € ^ RI Hp V! V 4      # )zoResolve inline or env-backed API key via the secret-scope-aware resolver (no raw os.getenv under multiplexing).)Úresolve_entry_api_key)Úhermes_cli.fallback_configrj  )r¹  rj  s   & r-   rV  rV  e  s   € å@Ù  Ó'Ð'r/   c                ó    € V ^8„  d   QhR\         \        \        3,          R\        \        \        ,          \        \        ,          3,          /# r¸  )r¤   rX   r   rù  r   )r,   s   "r-   r.   r.   k  s5   € ÷ "ñ "¤4¬¬S¨¥>ð "´e¼HÄS½MÌ8ÔTWÍ=Ð<XÕ6Yñ "r/   c                ó  € \        V P                  R4      ;'       g    R4      P                  4       p\        V P                  R4      ;'       g    R4      P                  4       ;'       g    RpV'       d	   V'       g   R	# \        Y\        V P                  R4      ;'       g    R4      P                  4       ;'       g    R\	        V 4      \        V P                  R4      ;'       g    V P                  R4      ;'       g    R4      P                  4       ;'       g    RR7      w  r4Ve@   \
        P                  ! \        4      ;_uu_ 4        \        WV4      Vn	        RRR4       W43# W43#   + '       g   i     Y43# ; i)
z?Resolve one fallback entry through the central provider router.rŸ  rj   r³  NrV   ro  r¥  )r³  r  r  ro  rß  )
rX   rž   r¨  rC  rV  r–  r—  rŸ   r¦  r©  )r¹  rŸ  r³  r¯   r3  s   &    r-   r]  r]  k  s-  € ä�5—9‘9˜ZÓ(×.Ð.¨BÓ/×5Ñ5Ó7€HÜ�—	‘	˜'Ó"×(Ð( bÓ)×/Ñ/Ó1×9Ð9°T€EßŸ5ØÐÜ4Ø´°U·Y±Y¸zÓ5J×5PÐ5PÈbÓ1Q×1WÑ1WÓ1Y×1aÐ1aÐ]aÜ0°Ó7Ü�U—Y‘Y˜zÓ*×JÐJ¨e¯i©i¸Ó.D×JÐJÈÓK×QÑQÓS×[Ð[ÐW[ôÑ€Fð
 ÒÜ× Ò ¤×+Õ+Ü2RÐSXÐbpÓ2qˆFÔ/÷ ,àÐ!Ð!ˆ6Ð!Ð!÷ ,Ö+àÐ!Ð!ús   ÅE.Å.F 	r,  c                óð   € V ^8„  d   QhR\         \        ,          R\        R\        R\         \        ,          R\        R\        R\        \         \        ,          \         \        ,          \        3,          /# rZ  )r   rX   r   rù  )r,   s   "r-   r.   r.   |  sb   € ÷ 7ñ 7Ü
”3�-ð7Ü*-ð7Ü<?ð7äœ3•-ð7ä9<ð7äRUð7ô Œ8”C�=œ(¤3�-¬Ð,Õ-ñ7r/   c          
     óž  €  ^ RI Hp ^ RIHp V! V! 4       4      pT'       g   R# \        YYER7      p
. p\        T 4      p\        T4       EFÌ  w  rÞ\        T\        4      '       g   K  \        TP                  R4      ;'       g    R4      P                  4       p\        TP                  R	4      ;'       g    R4      P                  4       pT'       d	   T'       g   K”  TP                  4       pR
T RT R2p\!        YþP                  R4      4      pTR8X  g   T
! TTT4      '       d   TP#                  T R24       Kô  \%        TT4      '       d&   \'        TT TR7       TP#                  T R24       EK+   \)        T4      w  ppTe~   \+        YïT;'       g    TYÀTR7      pT'       d   TP#                  T4       EKs  \
        P-                  RT ;'       g    RY!;'       g    RTT;'       g    T4       TT;'       g    TT3u # TP#                  T4       EKÏ  	  T'       d1   \
        P                  RT ;'       g    RRP/                  T4      4       R#   \         d.   p	\
        P                  RT ;'       g    RT	4       Ru Rp	?	# Rp	?	ii ; i  \         d2   p	\
        P                  RT ;'       g    RTT	4       RRpp Rp	?	ELCRp	?	ii ; i)a  Top-level main-agent fallback chain for a ``provider: auto`` auxiliary call: auto tasks honour the
user's main fallback policy before the built-in discovery chain; read via ``get_fallback_chain`` so
``fallback_providers`` and legacy ``fallback_model`` keep the main agent's order.rb  )Úget_fallback_chainz4Auxiliary %s: could not load main fallback chain: %sr_  Nrj   r  rŸ  r³  zfallback_providers[r\  rÙ  rV   r¢  z
 (skipped)ry  r  z4Auxiliary %s: main fallback %s failed to resolve: %s)rB  rù   u9   Auxiliary %s: %s on %s â€” main fallback chain to %s (%s)z7Auxiliary %s: main fallback chain exhausted (tried: %s)r  r  )r�   r–   rk  rp  rŸ   r­   rÞ   r   rL  r  r?   r¤   rX   rž   r¨  r©  r   r˜  rá  rb  r]  rX  r+  rÍ  )rB  r  rõ  r,  r  r  r–   rp  r‰  rc  r!  r'  rS  r^  r¹  rÖ  r£  Úfb_normrù   r`  r¢  r3  ra  s   &&&$$$                 r-   Ú_try_main_fallback_chainrr  |  s†  € ðÝ:ÝAÙ"Ñ#7Ó#9Ó:ˆ÷ ØÐÜØ°ôe€Dà€EÜ*¨4Ó0€GÜ˜e×$‰ˆÜ˜%¤×&Ò&ÙÜ˜%Ÿ)™) JÓ/×5Ð5°2Ó6×<Ñ<Ó>ˆÜ�u—y‘y Ó)×/Ð/¨RÓ0×6Ñ6Ó8ˆß§(ÙØ×#Ñ#Ó%ˆØ% a S¨¨;¨-°qÐ9ˆÜ-¨k¿9¹9ÀZÓ;PÓQˆØ�fÔ¡ [°(¸K× HÒ HØ�L‰L˜E˜7 *Ð-Ô.ÙÜ! '¨;×7Ò7Ü ¨¸ÕDØ�L‰L˜E˜7 ,Ð/Ô0Úð	3Ü(?ÀÓ(FÑ%ˆI�~ð Ò Ü*Ø N×$>Ð$>°hÀÐZ_ôˆI÷ Ø—‘˜YÔ'ÚÜ�K‰KÐSØŸ˜ ¨×0IÐ0IÀ6È5ÐR`×RlÐRlÐdlônà˜n×8Ð8°¸+ÐEÒEØ�‰�U×ñA %÷B Ü�‰ÐNÐPT×P^ÐP^ÐX^Ð`d×`iÑ`iÐjoÓ`pÔqØÐøôY ô Ü�‰ÐKÈTÏ^È^ÐU[Ð]`ÔaØÕûðûô8 ô 	3Ü�L‰LÐOÐQU×Q_ÐQ_ÐY_ÐafÐhkÔlØ(,¨d�~ˆI•~ûð	3ús5   ‚I Å6JÉJÉ "JÊJÊJÊKÊ&KËKc                ó(   € V ^8„  d   QhR\         RR/# )r)   Úruntime_providerr*   NrW   )r,   s   "r-   r.   r.   ¶  s   € ÷ &ñ &´#ð &¸$ñ &r/   c                ó0  € \         '       d   R# \        P                  ! RR4      P                  4       pT ;'       g    \	        4       pV'       dG   V'       d=   VR8w  d4   VP                  R4      '       g   \        P                  RW4       Rs R# R# R# R# R# )z–Warn once when OPENAI_BASE_URL is set but config.yaml names a non-custom provider (a stale
~/.hermes/.env value after `hermes model` poisons routing).Nrõ  rj   r�  r£  zºOPENAI_BASE_URL is set (%s) but model.provider is '%s'. Auxiliary clients may route to the wrong endpoint. Run: hermes model to reconfigure, or remove OPENAI_BASE_URL from ~/.hermes/.envT)Ú_stale_base_url_warnedrm  rÓ  r¨  r¬  rª  r­   r®   )rt  Ú	_env_baseÚ_cfg_providers   &  r-   Ú_warn_stale_openai_base_urlry  ¶  s�   € ÷ ÓÙÜ—	’	Ð+¨RÓ0×6Ñ6Ó8€IØ$×=Ð=Ô(;Ó(=€Mß—m¨¸Ô(AÈ-×JbÑJbÐcl×JmÒJmÜ�‰ð2ð ô	
ð "&Òñ KnÑ(A‘m‰	r/   c                ó´   € V ^8„  d   QhR\         \        \        3,          R\        \        ,          R\        \        \        \        \        \        3,          /# )r)   ré  rB  r*   r±  )r,   s   "r-   r.   r.   É  sF   € ÷ Zñ Z¤¤S¬# X¥ð Z´h¼sµmð ZÌÌcÔSVÔX[Ô]`ÔbeÐNeÕHfñ Zr/   c                ó˜  € \        V P                  RR4      ;'       g    \        4       ;'       g    R4      p\        V P                  R4      ;'       g    \        4       ;'       g    R4      p\        V P                  R4      ;'       g    R4      pV P                  RR4      p\        V P                  R4      ;'       g    R4      p\	        V4      '       dD   V'       d<   VR9  d5   \        VRR7      pV'       d    Ws8w  d   \        P                  R	WV4       TpVR
8X  d%   \        V4      w  r‰V'       d   V	'       d   Y‰r2R;p;rVW#WEV3# )z“Step-1 target: (provider, model, base_url, api_key, api_mode) of the main runtime, after the
fast-model opt-in and the MoA aggregator substitution.rŸ  rj   r³  rV   rU   ro  T)r,  z>Auxiliary task %s: preferring fast model %s over main model %srD  >   rj   r¢  )	rX   rž   r¬  rN  rI  r6  r­   rÞ   rK  )
ré  rB  r"  rD  rÁ  r»  r8  Ú
fast_modelrE  rF  s
   &&        r-   Ú_main_route_targetr}  É  s  € ô ˜Ÿ™ J°Ó3×RÐRÔ7JÓ7L×RÐRÐPRÓS€MÜ�W—[‘[ Ó)×EÐEÔ-=Ó-?×EÐEÀ2ÓF€JÜ˜7Ÿ;™; zÓ2×8Ð8°bÓ9ÐØ—k‘k )¨RÓ0€OÜ˜7Ÿ;™; zÓ2×8Ð8°bÓ9Ðô   ×%Ò%¯-¸MÐQ]Ô<]Ü0°ÈDÔQˆ
ß˜*Ô2Ü�L‰LÐYØ¨:ô7à#ˆJð ˜ÔÜ$;¸JÓ$GÑ!ˆßŸZØ(5˜:ØDFÐFÐÐF˜ØÐ&6ÐIYÐYÐYr/   c                ó¢   € V ^8„  d   QhR\         R\         R\         R\        R\         R\        \        \        \         \         3,          ,          /# )r)   r"  rD  rÁ  r»  r8  r*   )rX   r   r   rù  )r,   s   "r-   r.   r.   ã  sL   € ÷ -=ñ -=Üð-=Ü$'ð-=Ü;>ð-=ÜQTð-=Ühkð-=äŒe”Cœœc�MÕ"Õ#ñ-=r/   c                óÞ  € V '       d   V'       d   V R	9  g   R# T pT;'       g    Rp\        W4      pRpV'       d   V R8X  d   T;'       g    RpM‹V P                  R4      '       dk   Rp	\        P                  ! \        4      ;_uu_ 4        ^ RIHp
 V
! V 4      RJp	RRR4       V	'       d   RpM,V'       d   RpT;'       g    RpMV'       d   TpM
V'       d   Tp\        V4      pV'       d    \        W·4      '       d   \        W·R7       R# \        YQTY„;'       g    RR7      w  rÍVf   R# \        P                  RY;'       g    T4       YÍ;'       g    TV3#   + '       g   i     LÇ; i)
zHStep 1: route aux onto the main provider + main model; None if unusable.Nr�  r£  F©Ú_get_named_custom_providerry  )r  r  ro  z2Auxiliary auto-detect: using main provider %s (%s)>   rj   r¢  )r   rª  r–  r—  rª   rú  r�  rP  rá  rb  rC  r­   r+  )r"  rD  rÁ  r»  r8  r  r  Úhealth_base_urlr  Ú_has_named_entryr�  Úmain_chain_labelr¯   r'  s   &&&&&         r-   Ú_try_main_provider_router…  ã  sM  € ÷ Ÿj¨]À,Ô-NÙØ%ÐØ(×0Ð0¨DÐÜ-¨mÓO€OØÐß˜M¨XÔ5à*×2Ð2¨dÑØ	×	!Ñ	! )×	,Ò	,à ÐÜ× Ò ¤×-Õ-ÝNÙ9¸-ÓHÐPTÐTÐ÷ .÷ ð !%Ñßð !)ÐØ.×6Ð6°$ÑßØ.Ðøß	à*Ðä-Ð.?Ó@ÐßÔ2Ð3C×UÒUÜÐ,ÕGÙÜ.ØÐ9JØ)×4LÐ4LÈôÑ€Fð ‚~ÙÜ
‡K�KÐDÀm×UkÐUkÐakÔlØ×)Ð)˜zÐ+<Ð<Ð<÷; .×-ús   ÂEÅE,	c                óR   € V ^8„  d   QhR\         R\        \         ,          R\        /# )r)   r"  rB  r*   rZ  )r,   s   "r-   r.   r.     s&   € ÷ ñ ¬Cð ´xÄµ}ð ÔPTñ r/   c                ó¦   € T ;'       g    RP                  4       P                  4       R9   d   R# \        P                  RT;'       g    RV 4       R# )u¤  The built-in discovery chain is a convenience for installs with NO selected main provider.
Once the user picked one, every auxiliary route must be a provider they configured (main,
``auxiliary.<task>``, ``fallback_providers``); guessing "whatever else is logged in" bills an
account they never pointed this session at (xAI OAuth session with a dead token â†’ every
compression silently charged to a Nous Portal balance).rj   TuÐ   Auxiliary %s: main provider %s is unavailable and no fallback_chain / fallback_providers is configured â€” refusing to guess another logged-in provider. Re-authenticate (`hermes model`) or declare a fallback.r_  F>   rj   r¢  )r¨  r©  r­   r®   )r"  rB  s   &&r-   r  r    sK   € ð 	×Ð˜×"Ñ"Ó$×*Ñ*Ó,°Ô<ÙÜ
‡N�Nð	!à"&§. .¨&°-ôAñ r/   c                ó|   € V ^8„  d   QhR\         \        \        ,          \        \        ,          \        3,          /# r(   rÕ  )r,   s   "r-   r.   r.   "  s(   € ÷ ñ œe¤H¬VÕ$4´h¼sµmÄSÐ$HÕIñ r/   c            	     óð  € . p \        4        FÀ  w  r\        V4      p\        W4      '       d#   \        WR7       V P	                  V R24       KC  V! 4       w  rEVe`   V '       d2   \
        P                  RY;'       g    RRP                  V 4      4       M \
        P                  RY;'       g    R4       WEV3u # V P	                  V4       KÂ  	  \
        P                  RRP                  V 4      4       R# )	zJStep 3: hardcoded aggregator/fallback chain, skipping unhealthy providers.ry  r  u4   Auxiliary auto-detect: using %s (%s) â€” skipped: %sr  r  z$Auxiliary auto-detect: using %s (%s)z·Auxiliary auto-detect: no provider available (tried: %s). Compression, summarization, and memory flush will not work. Set OPENROUTER_API_KEY or configure a local model in config.yaml.r  )	rJ  r   rá  rb  r˜  r­   r+  rÍ  r®   )r'  rù   r(  r)  r¯   r³  s         r-   Ú_try_discovery_chainrŠ  "  sß   € à€EÜ,Ö.‰ˆÜ4°UÓ;ÐÜ! %×<Ò<Ü ÕCØ�L‰L˜E˜7 ,Ð/Ô0ÙÙ›‰ˆØÒßÜ—‘ÐRØ!×#5Ð#5¨I°t·y±yÀÓ7GõIô —‘ÐBÀE×K]ÐK]ÐT]Ô^Ø %Ð'Ò'Ø�‰�UÖñ /ô ‡N�Nð WàX\×XaÑXaÐbgÓXhôjð Ðr/   c          	      óâ   € V ^8„  d   QhR\         \        \        \        3,          ,          R\         \        ,          R\        \         \
        ,          \         \        ,          \        3,          /# )r)   rç  rB  r*   )r   r¤   rX   r   rù  r&   )r,   s   "r-   r.   r.   :  sJ   € ÷ "ñ "Üœ4¤¤S �>Õ*ð"Ü9AÄ#½ð"ä
Œ8”FÕœX¤c�]¬CÐ/Õ0ñ"r/   c                óz  € Rs \        V 4      p\        VP                  RR4      4       \	        W!4      w  r4rVp\        W4WVV4      pVe   V# V'       d,   \        Y;'       g    RRR7      w  ršpV	e   Wš\        V4      3# \        Y;'       g    RRR7      w  ršpV	e   WšV3# \        W14      '       g   R# \        4       # )u®  Full auto-detection chain, including the selected provider identity. Priority: (1) main provider +
main model, regardless of provider type ("auto" means "my main model for side tasks too"; explicit
per-task overrides still win); (2) configured fallback policy â€” task chain, then the main agent's
top-level chain; (3) OpenRouter â†’ Nous â†’ custom â†’ Codex â†’ API-key providers, only with no policy
and no working main client.FrŸ  rj   r¢  zmain provider unavailablere  r  )r,  rã  ry  rž   r}  r…  rb  r–  rr  r  rŠ  )rç  rB  ré  r"  rD  rV   rU   ro  Úroutedr¢  r£  r„  s   &&          r-   Ú_resolve_auto_routerŽ  :  sÔ   € ð ÐÜ% lÓ3€GÜ §¡¨J¸Ó ;Ô<Ü=OÐPWÓ=^Ñ:€M˜x°(Ü% mÀÐT\Ó]€FØÒØˆßÜ(FØ×)Ð) 6Ð2Mô)OÑ%ˆ	˜XàÒ ØÔ(EÀhÓ(OÐOÐOÜ$<Ø×%Ð%˜vÐ.Iô%KÑ!€I˜àÒØ HÐ,Ð,Ü# M×8Ò8ØÐÜÓ!Ð!r/   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r)   r¯   r¾  r*   r  )r,   s   "r-   r.   r.   X  s!   € ÷ ñ ¬3ð ¼#ð Ä#ñ r/   c                ó†   € \        V RR4      p\        V\        4      '       d   V'       d   V# \        T;'       g    R4      # )z@Return the concrete provider selected for an auto-routed client.rl  rj   )rq   r?   rX   )r¯   r¾  rB  s   && r-   r>  r>  X  s:   € ä  Ð)IÈ2ÓNÐÜÐ$¤c×*Ò*×/AØ!Ð!Üˆx�~ˆ~˜2ÓÐr/   c                ó0   € V ^8„  d   QhR\         R\        /# )r)   r³  rì  r.  )r,   s   "r-   r.   r.   d  s   € ÷ -.ñ -.¬ð -.¼ñ -.r/   c                óX  € ^ RI Hp \        V \        4      '       d   W3# \        V \        4      '       d   \        V 4      V3# \        V \        4      '       d   \        V 4      V3# \        V \        4      '       d   \        V 4      V3# \        P                  ! \        4      ;_uu_ 4        ^ RIHpHp \        W4      '       d   V! V 4      V3uuRRR4       #  RRR4       \!        V R4      '       d   W3# \#        V P$                  4      p^ RIHpHp RV! V 4      RV/p	\-        VR4      '       d   \/        \1        4       4      p
MY\3        V4      '       d"   \/        \5        V P6                  VR	7      4      p
M' ^ R
IHp V! V4      ;'       g    Rp\?        WlVRR7      p
/ T
;'       g    / CV! V 4      Cp
V
'       d   W©R&   \A        W�P6                  VR7       / \C        VRR7      CV	Cp	V	PE                  R^ 4       V! R/ V	B V3#   + '       g   i     EL4; i  \<         d    Rp L—i ; i)uk   Sync client â†’ async counterpart, preserving Codex routing (``is_vision`` adds the Copilot vision header).)ÚAsyncOpenAI)rÛ  ÚAsyncGeminiNativeClientNÚHERMES_SKIP_ASYNC_WRAP)Úasync_api_keyÚconfigured_default_headersrU   rV   r÷  ry  )Ú_infer_provider_from_urlrj   T©rì  rí  rY  r³   )r¢   rµ   rD   )#r2   r“  r?   rS   rú  r  rA  rK  r_  rj  r–  r—  rª   rì  rÛ  r”  r|  rX   rV   Úagent.auxiliary_async_rebuildr–  r—  rŠ   r^  rs  Ú_is_official_codex_base_urlr.  rU   rÒ  r˜  rŸ   rö  r¶   r°   r·   )Úsync_clientr³  rì  r“  rÛ  r”  Úsync_base_urlr–  r—  Úasync_kwargsrS  r˜  Úinferreds   &&&          r-   Ú_to_async_clientr   d  sõ  € å"Ü�+Ô2×3Ò3ØÐ!Ð!Ü�+Ô3×4Ò4Ü(¨Ó5°uÐ<Ð<Ü�+Ô7×8Ò8Ü,¨[Ó9¸5Ð@Ð@Ü�+Ô5×6Ò6Ü*¨;Ó7¸Ð>Ð>Ü	×	Ò	œ[×	)Õ	)ß[Ü�k×6Ò6Ù*¨;Ó7¸Ð>÷ 
*Ò	)à6÷ 
*ô
 ˜Ð%=×>Ò>ØÐ!Ð!Ü˜×,Ñ,Ó-€M÷
 XØ™}¨[Ó9¸:À}ÐU€LÜ˜]¨O×<Ò<Ü-Ô.>Ó.@ÓA‰Ü	$ ]×	3Ò	3Ü-Ô.GÈ×H[ÑH[ÐfsÔ.tÓu‰ð	ÝEÙ/°Ó>×DÐDÀ"ˆHô ,¨MÈyÐ^bÔcˆØL�'—-�-˜RÐLÑ$>¸{Ó$KÐL€GßØ*1Ð&Ñ'Ü! ,×=PÑ=PÐ[hÕiØaÔ0°È4ÔPÐaÐT`Ða€Lð ×Ñ˜M¨1Ô-ÙÑ&˜Ñ&¨Ð-Ð-÷E 
*×	)Ð	)ûô. ô 	ØŠHð	ús$   Â+#HÅ9H ÆH ÈH	ÈH)È(H)c                óh   € V ^8„  d   QhR\         \        ,          R\        R\         \        ,          /# )r)   r‡  rŸ  r*   r   )r,   s   "r-   r.   r.   ”  s*   € ÷ ñ ¬(´3­-ð Ä3ð Ì8ÔTWÍ=ñ r/   c                óZ   € V '       g   V #  ^ RI Hp V! W4      #   \         d    T u # i ; i)zANormalize a resolved model for the provider that will receive it.)Únormalize_model_for_provider)Úhermes_cli.model_normalizer£  rŸ   )r‡  rŸ  r£  s   && r-   r7  r7  ”  s3   € çØÐðÝKÙ+¨JÓAÐAøÜô ØÒðús   Œ š*©*c                ój   € V ^8„  d   QhR\         \        \        3,          R\        R\        R\        /# )r)   Úcustom_entryrŸ  rü  r*   r	  )r,   s   "r-   r.   r.   Ÿ  s2   € ÷ +ñ +¬¬S´#¨X­ð +Ä#ð +ÔTWð +Ô\_ñ +r/   c                ó¢  € V P                  R4      ;'       g    RP                  4       pV P                  R4      ;'       g    V P                  R4      ;'       g    RP                  4       pV'       g   V'       d   \        V4      p\        V P                  RR4      ;'       g    R4      P                  4       pV'       d2   ^ RIHp T! YPP                  R4      ;'       g    T4      ;'       g    TpV'       Eg%   \        P                  ! \        4      ;_uu_ 4        ^ RI	H
p V P                  R	4      ;'       g    V P                  R4      ;'       g    TpV! W(4       F³  p	 \        V	4      p
\        Y©T 4      ;p
e   T
P                  4       '       g   K7  T
P                  4       ;pf   KM  \        TRR
4      ;'       g    \        TRR4      ;'       g    Rp\        T4      P                  4       '       g   Kš  \        T4      P                  4       p M	  R
R
R
4       T;'       g    R#   \         d     KÙ  i ; i  + '       g   i     L.; i)u  Credential for a named custom provider: inline api_key â†’ key_env â†’ key_cmd â†’ credential pool â†’ placeholder.
Aux resolves named custom providers here, not via _resolve_named_custom_runtime, so key_cmd must be
honoured at the same precedence or every aux call 401s.rU   rj   Úkey_envÚapi_key_envÚkey_cmd)Úbuild_command_token_providerr`   )Ú#custom_provider_pool_key_candidatesÚprovider_keyNr»  r´   rø  )rž   r¨  rÚ  rX   Úagent.command_token_sourcer«  r–  r—  rŸ   Úagent.credential_poolr¬  rw   rx   r¦  r­  rq   )r¦  rŸ  rü  rý  Úcustom_key_envÚcustom_key_cmdr«  r¬  Ú	pool_nameÚpool_keyr§  Ú
pool_entryÚpool_api_keys   &&&          r-   Ú_named_custom_api_keyr¶  Ÿ  sæ  € ð $×'Ñ'¨	Ó2×8Ð8°b×?Ñ?ÓA€JØ"×&Ñ& yÓ1×ZÐZ°\×5EÑ5EÀmÓ5T×ZÐZÐXZ×aÑaÓc€NßŸ.Ü$ ^Ó4ˆ
Ü˜×)Ñ)¨)°RÓ8×>Ð>¸BÓ?×EÑEÓG€NßÝKÙ1°.×BRÑBRÐSYÓBZ×BfÐBfÐ^fÓg×uÐuÐkuˆ
ßˆ:Ü× Ò ¤×+Õ+ÝQØ$×(Ñ(¨Ó8×`Ð`¸L×<LÑ<LÈVÓ<T×`Ð`ÐX`ˆIÙ?ÀÖW�ðÜ$ XÓ.�Dô .¨d¸lÓKÐK�DÒTÐ\`×\pÑ\p×\rÒ\rÙØ"&§+¡+£-Ð/�JÒ8ÙÜ& zÐ3DÀdÓK×|Ð|ÌwÐWaÐcqÐsuÓOv×|Ð|Ðz|�Ü�|Ó$×*Ñ*×,Ô,Ü!$ \Ó!2×!8Ñ!8Ó!:�JÙñ X÷ ,ð  ×*Ð*Ð*Ð*øô !ô Úðú÷ ,×+úsN   Ä7H>ÅH>Å%H,Å0%H>Æ+H>ÇH>ÇH>Ç;H>È,H;	È7H>È:H;	È;H>È>I	c                ó¬   € V ^8„  d   QhR\         R\        \         ,          R\        R\        \        \        ,          \        \         ,          3,          /# )r)   rŸ  r³  Ú	raw_codexr*   )rX   r   rm   rù  r   )r,   s   "r-   r.   r.   ¿  sE   € ÷ ,ñ ,¤Cð ,´¼µð ,ÌTð ,ÔV[Ô\dÔehÕ\iÔksÔtwÕkxÐ\xÕVyñ ,r/   c               ó$  €  ^ RI HpHpHpHpHpHpHp	 ^ RIH	p
 T! 4       '       g   \        P                  R4       R# T! 4       pRp\        T;'       g    TT 4      ;'       g    TpT! T4      '       d]   RT! 4       ;'       g    RR	T! T4      /pT	! T4       \        R/ TB p\        P                  R
YÛ4       T'       d   Yý3# \!        Yý4      T3# RT R2pT! T4      '       d2    T
! T4      p\#        TTRTR7      p\        P                  RYÛ4       Yý3# \%        Y½4      p\        P                  RYÛ4       Yý3#   \         d    \        P                  R4       Ru # i ; i  \         d#   p\        P                  RT4       Ru Rp?# Rp?ii ; i)uÇ   AWS Bedrock: Claude â†’ Anthropic Bedrock SDK (prompt caching, thinking); bare in-Region OpenAI IDs
â†’ Mantle Responses; everything else, incl. OpenAI ``us.``/``global.`` profiles, â†’ Converse API.)Úhas_aws_credentialsÚis_anthropic_bedrock_modelÚresolve_bedrock_runtime_regionÚbedrock_openai_uses_mantleÚbedrock_openai_base_urlÚresolve_bedrock_bearer_tokenÚ&configure_bedrock_openai_client_kwargs)Úbuild_anthropic_bedrock_clientzbresolve_provider_client: bedrock requested but boto3, httpx/openai, or anthropic SDK not installedNzGresolve_provider_client: bedrock requested but no AWS credentials foundz(anthropic.claude-haiku-4-5-20251001-v1:0rU   rc  rV   z0resolve_provider_client: bedrock-openai (%s, %s)rd  re  z9resolve_provider_client: cannot create Bedrock client: %sr[   z3resolve_provider_client: bedrock anthropic (%s, %s)z2resolve_provider_client: bedrock converse (%s, %s)rß  rD   )r\  rº  r»  r¼  r½  r¾  r¿  rÀ  r4  rÁ  rª   r­   r®   rÞ   r7  r&   rú  rA  r_  )rŸ  r³  r¸  rº  r»  r¼  r½  r¾  r¿  rÀ  rÁ  rP  Údefault_modelr9  Úclient_kwargsr¯   rV   rU  rc  s   &&$                r-   Ú_build_bedrock_clientrÄ  ¿  s�  € ð	÷	
÷ 	
ñ 	
õ
 	Kñ × Ò Ü�‰Ð^Ô_ØÐñ ,Ó-€FØ>€MÜ+¨E×,BÐ,B°]ÀHÓM×^Ð^ÐQ^€KÙ! +×.Ò.ð Ñ3Ó5×BÐB¸ØÑ/°Ó7ð)
ˆñ 	/¨}Ô=ÜÑ(˜-Ñ(ˆÜ�‰ÐGÈÔ]ß#�Ð`Ð`Ô)=¸fÓ)RÐU`Ð`Ð`Ø)¨&¨°Ð@€HÙ! +×.Ò.ð	Ù8¸Ó@ˆKô *¨+°{ÈIÐ`hÔiˆÜ�‰ÐJÈKÔ`ð ÐÐô (¨Ó<ˆÜ�‰ÐIÈ;Ô_ØÐÐøôE ô Ü�‰Ð{Ô|ØÒðûô4 ô 	Ü�N‰NÐVÐX[Ô\ØÕûð	ús/   ‚D: Ã&E" Ä:"EÅEÅ"FÅ-F
ÆFÆ
Fc          	      ó    € V ^8„  d   QhR\         R\        \         ,          R\        \        \        ,          \        \         ,          3,          /# ©r)   rŸ  r³  r*   ©rX   r   rù  r   )r,   s   "r-   r.   r.   î  s;   € ÷ ñ ¤3ð ¬x¼­}ð ÄÄxÔPSÅ}ÔV^Ô_bÕVcÐGcÕAdñ r/   c                óê  €  ^ RI HpHp T! 4       '       g   \        P                  R4       R# T! 4       w  rET'       d	   T'       g   \        P                  R4       R# \        T;'       g    RT 4      p ^ RIH	p T! YER7      p\        P                  R
T4       Y†3#   \         d    \        P                  R4       Ru # i ; i  \         d#   p	\        P                  R	T	4       Ru Rp	?	# Rp	?	ii ; i)zkGoogle Vertex AI: Gemini via the OpenAI-compatible endpoint with an OAuth2 bearer (standard OpenAI client).)rs  Úhas_vertex_credentialszGresolve_provider_client: vertex requested but google-auth not installedNzFresolve_provider_client: vertex requested but no GCP credentials foundzTresolve_provider_client: vertex requested but could not mint token / resolve projectzgoogle/gemini-3-flash-previewr%   r[   z8resolve_provider_client: cannot create Vertex client: %sz$resolve_provider_client: vertex (%s)rß  )rt  rs  rÉ  rª   r­   r®   rÞ   r7  r2   r&   rŸ   )
rŸ  r³  rs  rÉ  r“  rV   r9  Ú_VertexOpenAIr¯   rc  s
   &&        r-   Ú_build_vertex_clientrË  î  s×   € ðßRñ "×#Ò#Ü�‰Ð]Ô^ØÐÙ'Ó)�O€EßŸÜ�‰ÐmÔnØÐÜ+¨E×,TÐ,TÐ5TÐV^Ó_€Kðå2Ù uÔ@ˆô ‡L�LÐ7¸ÔEØÐÐøô' ô Ü�‰Ð`ÔaØÒðûô ô Ü�‰ÐQÐSVÔWØÕûðús/   ‚B Á5C Â"CÃCÃC2ÃC-Ã'C2Ã-C2c                   ó0   a € ] tR tRt o RtV 3R ltRtV tR# )Ú_ResolveRequesti  zYNormalized resolve_provider_client() arguments shared by the per-provider branch helpers.c                ó8  <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[S[ ,          ;R&   S[;R&   S[;R&   S[S[ ,          ;R&   S[S[ S[. S[ 3,          ,          ,          ;R&   S[S[ ,          ;R&   S[S[S[ S[3,          ,          ;R	&   S[;R
&   S[S[ ,          ;R&   # )r)   rŸ  Úoriginal_providerr³  r¢   r¸  r  r  ro  rç  rì  rB  )rX   r   rm   r   r¤   r   )r,   rQ   s   "€r-   r.   Ú_ResolveRequest.__annotate__  s¿   ø‡ ‚ á�Mñ ñ Ññ ñ ‘C�=Ññ	 ñ
 Ññ ñ �Oñ ñ  ¡•}Ñ$ñ ñ ™s¡X¨b±#¨gÕ%6Õ6Õ7Ñ7ñ ñ ‘s�mÑñ ñ ™4¡¡S �>Õ*Ñ*ñ ñ �Oñ ñ ‘3�-Ñò r/   rD   N©rH   rI   rJ   rK   rL   rœ  rN   rO   rP   s   @r-   rÍ  rÍ    s   ø‡ € Ùc÷ ƒ r/   rÍ  c                ó`   € V ^8„  d   QhR\         R\        \        . \        3,          ,          /# rŒ  )r   rX   r   )r,   s   "r-   r.   r.     s(   € ÷ 7ñ 7œCð 7¤C¬(°2´s°7Õ*;Õ$;ñ 7r/   c                ó¤   € \        V 4      '       d   \        V \        4      '       g   V # \        V \        4      '       d   V P                  4       # R# )z\A key_cmd/Entra callable passes through uncalled; strings are stripped; anything else is ''.rj   )rÔ   r?   rX   r¨  r�  s   &r-   rá  rá    s9   € ä�‡}‚}œZ¨¬S×1Ò1Øˆ
Ü$ S¬#×.Ò.ˆ3�9‰9‹;Ð6°BÐ6r/   c          
      óL   € V ^8„  d   QhR\         R\        R\        R\        RR/# )r)   Úseenr  r©  r:   r*   N)rb  r   rX   )r,   s   "r-   r.   r.   !  s/   € ÷ !ñ !œ#ð !¤Cð !¬cð !¼#ð !À$ñ !r/   c                óh   € W9  d,   V P                  V4       \        P                  ! V.VO5!   R# R# )zQDebug-log ``msg`` the first time ``key`` is seen so per-call retries stay silent.N)rå  r­   rÞ   )rÕ  r  r©  r:   s   &&&*r-   Ú_log_once_debugr×  !  s(   € à
„Ø�‰�ŒÜ�Š�SÐ ˜4Ö ñ r/   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r)   ÚreqrV   r*   )rÍ  rX   rm   )r,   s   "r-   r.   r.   (  s!   € ÷ ñ ¤Oð ¼sð Ätñ r/   c                 óh  € ^ RI Hp ^ RIHp ^ RIHp V! V P                  V4      '       d   R# \        V P                  4      p\        T;'       d_    V! VP                  RR4      VP                  RR4      4      ;'       d.    V! V! V4      4      V! V! VP                  RR4      4      4      8H  4      # )ró  rš  r·  )Únormalize_route_base_urlTrŸ  rj   rV   )r˜  r›  rÅ  r¸  Úhermes_cli.route_identityrÛ  rŸ  rã  rç  rm   rž   )rÙ  rV   r›  r¸  rÛ  ré  s   &&    r-   Ú_is_actual_auxiliary_routerÝ  (  s¢   € Ý9Ý4ÝBá�s—|‘| X×.Ò.ÙÜ% c×&6Ñ&6Ó7€GÜØ÷ 	
ð 	
Ù˜GŸK™K¨
°BÓ7¸¿¹ÀZÐQSÓ9TÓU÷	
ð 	
á$Ñ%>¸xÓ%HÓIÙ#Ù% g§k¡k°*¸bÓ&AÓBó
ñ
óð r/   c          
      óT   € V ^8„  d   QhR\         R\        R\        R\        R\        /# )r)   rÙ  rx  Úfinal_model_strÚbase_url_strÚapi_key_str)rÍ  r   rX   )r,   s   "r-   r.   r.   :  s8   € ÷ &cñ &cœð &c´cð &cÌCð &cÜ"%ð&cÜ9<ñ&cr/   c                ó  € \        W4      '       d.   \        V\        4      '       d   VP                  MTpRVn        V# ^ RIHp V! V P                  W#4      w  rxV'       d   V P                  VR7      Tr0\        V\        4      ;'       g    V P                  '       * ;'       dd    V P                  R8H  ;'       gM    V P                  '       * ;'       d4    \        V4      R8H  ;'       d    RT;'       g    RP                  4       9   p	V	'       dH   \        P                  RV P                  ;'       g    R	Y#'       d
   VR
,          MR4       \        W4      # V P                  ;'       g    \        V P                  4      p
\!        WWCV
4      # )ue  Wrap a plain OpenAI client in the right transport adapter; specialized wrappers pass through.
Codex (Responses API): explicit ``api_mode=codex_responses``, else â€” with no
explicit api_mode â€” api.openai.com + codex model. Anthropic (Messages): ``api_mode=anthropic_messages``,
any ``/anthropic`` suffix, ``api.kimi.com/coding``, or ``api.anthropic.com``.Úactual©Úopencode_transport)ro  r  úapi.openai.comr¥  rj   zeresolve_provider_client: wrapping client in CodexAuxiliaryClient (api_mode=%s, model=%s, base_url=%s)ru  rt  )rÝ  r?   rú  rõ  rl  Úagent.opencode_affinityrå  rŸ  r†  r¸  ro  r‹   r©  r­   rÞ   Ú_profile_declared_messages_wirerw  )rÙ  rx  rß  rà  rá  r¯   rå  Ú_oc_modeÚ_oc_baseÚneeds_codexro  s   &&&&&      r-   Ú_wrap_transportrì  :  sg  € ô " #×4Ò4ô ˜*Ô&:×;Ò;ð ×#Ò#àð 	ð
 19ˆÔ-Øˆõ ;Ù+¨C¯L©L¸/ÓXÑ€HßØŸL™L°(˜LÓ;¸Xˆ\ä�:Ô3Ó4×EÐE¸¿¹ô÷ 	ð 	ð 	�‰Ð)Ñ)÷ 	
ð 	
à—‘Ô÷ ;ð ;Ü! ,Ó/Ð3CÑC÷;ð ;à˜O×1Ð1¨r×8Ñ8Ó:Ñ:ð ÷ Ü�‰ð <à—\‘\×4Ð4 _°oÖ\hÀ|ÐTWÖGXÐnpô	rô $ JÓ@Ð@ð �|‰|×LÐLÔ>¸s¿|¹|ÓL€HÜ  ¸kÐYaÓbÐbr/   c                óF   € V ^8„  d   QhR\         R\        \         ,          /# rž  rL  )r,   s   "r-   r.   r.   c  s"   € ÷ nñ n¬cð n´h¼sµmñ nr/   c                ó®   € ^ RI Hp T! \        T ;'       g    R4      P                  4       P	                  4       4      pVe   VP
                  R8X  d   R# R# )zW``"anthropic_messages"`` when the registered profile declares that api_mode, else None.r
  rj   Nr,  )r  r  rX   r¨  r©  ro  rù  s   &  r-   rè  rè  c  sL   € å.Ù"¤3 x§~ ~°2Ó#6×#<Ñ#<Ó#>×#DÑ#DÓ#FÓG€GØ#*Ò#6¸7×;KÑ;KÐOcÔ;cÐÐmÐimÐmr/   c                ó^   € V ^8„  d   QhR\         R\        R\        \        ,          R\        /# )r)   rÙ  rx  rß  r*   ©rÍ  r   r   rX   Ú_ResolveResult)r,   s   "r-   r.   r.   j  s.   € ÷ 'ñ '”ð '´Cð 'Ì(ÔSVÍ-ð 'Ô\jñ 'r/   c                óZ   € V P                   '       d   \        WV P                  R7      # W3# )zPReturn (client, model), converting to the async wrapper when ``req.async_mode``.©rì  )r¢   r   rì  )rÙ  rx  rß  s   &&&r-   Ú_route_clientrô  j  s%   € à
‡~‡~€~Ü 
ÀsÇ}Á}ÔUÐUØÐ&Ð&r/   c                óv   € V ^8„  d   QhR\         R\        R\        \        ,          R\        R\        R\        /# )r)   rÙ  r¯   r  Úunavailable_msgr:   r*   rð  )r,   s   "r-   r.   r.   q  sI   € ÷ eñ eœð e´ð e¼xÌ½}ð eÔ_bð eÔknð eô  tBñ er/   c                ó¦   € Vf   \         P                  ! V.VO5!   R# \        Y\        V P                  ;'       g    TV P
                  4      4      # )zpRoute ``client`` on ``req.model or default``; warn and return (None, None) when the provider produced no client.rß  )r­   r®   rô  r7  r³  rŸ  )rÙ  r¯   r  rö  r:   s   &&&&*r-   Ú_route_or_warnrø  q  sF   € à‚~Ü�Š�Ð.¨Ô.ØÐÜ˜Ô&?ÀÇ	Á	×@TÐ@TÈWÐVY×VbÑVbÓ&cÓdÐdr/   c                ó0   € V ^8„  d   QhR\         R\        /# ©r)   rÙ  r*   ©rÍ  rñ  )r,   s   "r-   r.   r.   y  s   € ÷ 'ñ 'œoð '´.ñ 'r/   c                óÂ  € \        V P                  V P                  R7      w  rpVf   R# V P                  pV'       d/   RV9   d(   V'       d    RV9  d   \        P                  RWB4       Rp\        YT;'       g    T4      w  rVVe   V'       d    W5n        WV3# WV3#   \        \        3 d0    \        P                  R\        T4      P                  T4        YV3# i ; i)zmAuto: try all providers in priority order; tag the client with the effective provider (survives cache reuse).)rç  rB  Nrµ  z\Dropping OpenRouter-format model %r for non-OpenRouter auxiliary provider (using %r instead)z7Auxiliary client %s cannot retain effective provider %srß  )rŽ  rç  rB  r³  r­   rÞ   rô  rl  r«   r€  r+   rH   )rÙ  r¯   r'  rB  r³  Úrouted_clientÚrouted_models   &      r-   Ú_resolve_auto_branchrÿ  y  sä   € ä+>ÈC×L\ÑL\Ðcf×ckÑckÔ+lÑ(€FÐ(Ø‚~ØÐØ�I‰I€E÷ �˜”§(¨s¸(Ô/BÜ�‰ð =Ø>Cô	OàˆÜ"/°¸U×=NÐ=NÀhÓ"OÑ€MØÒ ×%7ð	KØ;MÔ8ð Ð&Ð&ˆ=Ð&Ð&øô ¤	Ð*ô 	KÜ�L‰LÐRÜ˜mÓ,×5Ñ5Ð7IõKàÐ&Ð&ð	Kús   ÂB Â;CÃCc                ó0   € V ^8„  d   QhR\         R\        /# rú  rû  )r,   s   "r-   r.   r.   �  s   € ÷ eñ e¤Oð e¼ñ er/   c                ó&  € \        V P                  V P                  V P                  R7      w  rVf-   \        P                  R\        V P                  R7      4       R# \        Y\        V P                  ;'       g    TV P                  4      4      # )zOpenRouter.)r  r³  r  z4resolve_provider_client: openrouter requested but %sr¸  rß  )
r  r  r³  r  r­   r®   r  rô  r7  rŸ  ©rÙ  r¯   r  s   &  r-   Ú_resolve_openrouter_branchr	  �  sx   € ä%°s×7KÑ7KÐSV×S\ÑS\Ø8;×8MÑ8MôO�O€Fà‚~Ü�‰ÐMÜ7¸c¿i¹iÔHô	JàÐÜ˜Ô&?ÀÇ	Á	×@TÐ@TÈWÐVY×VbÑVbÓ&cÓdÐdr/   c                ó0   € V ^8„  d   QhR\         R\        /# rú  rû  )r,   s   "r-   r.   r.   š  s   € ÷ 3ñ 3œoð 3´.ñ 3r/   c                ó(  € V P                   p\        V P                  ;'       gK    V\        P	                  4       9   ;'       g,    T;'       g    RP                  4       P                  4       R8H  R7      w  r#Vf   \        P                  R4       R# \        T;'       g    TT P                  4      p^ RIHp \        Y$\        \        VRR4      ;'       g    R4      \        \        VRR4      ;'       g    R4      V! V4      4      p\!        WV4      # )	zNous Portal (OAuth).rj   zmimo-v2-omnir(  zYresolve_provider_client: nous requested but Nous Portal not configured (run: hermes auth)©Únous_api_moderU   rV   rß  )r³  r0  rì  rN  rÃ  r¨  r©  r­   r®   r7  rŸ  rÅ  r	  rw  rX   rq   rô  )rÙ  r³  r¯   r  r9  r	  s   &     r-   Ú_resolve_nous_branchr	  š  sð   € à�I‰I€Eä¨¯©÷ )[ð )[¸ÔBY×B`ÑB`ÓBbÑ9b÷ )[ð )[Ø,1¯K¨K°R×+>Ñ+>Ó+@×+FÑ+FÓ+HÈNÑ+Zô]�O€Fà‚~Ü�‰ÐrÔsØÐÜ+¨E×,<Ð,<°W¸c¿l¹lÓK€Kõ 3Ü"ØœS¤¨°¸BÓ!?×!EÐ!EÀ2ÓFÜŒG�F˜J¨Ó+×1Ð1¨rÓ2±MÀ+Ó4Nó€Fô ˜ kÓ2Ð2r/   c                ó0   € V ^8„  d   QhR\         R\        /# rú  rû  )r,   s   "r-   r.   r.   ®  s   € ÷ >ñ >¤oð >¼.ñ >r/   c           	     ód  € V P                   pV'       g   \        P                  R4       R# RpV P                  '       dZ   \	        4       w  r4V'       g   \        P                  V4       R# \        W4\        W4R7      R7      pV\        WP                  4      3# \        V4      w  rg\        WWr4      # )u'   OpenAI Codex (OAuth â†’ Responses API).z¬resolve_provider_client: openai-codex requested without a model; pass model explicitly (e.g. model.model in config.yaml or auxiliary.<task>.model for per-task aux routing).zbresolve_provider_client: openai-codex requested but no Codex OAuth token found (run: hermes model)ry  r  rß  )r³  r­   r®   r¸  rÊ  r¸   r.  r7  rŸ  r0  rø  )rÙ  r³  Úno_token_msgr/  rV   Ú
raw_clientr¯   r  s   &       r-   Ú_resolve_openai_codex_branchr	  ®  s›   € à�I‰I€EßÜ�‰ð Nô 	Oð ÐØw€LØ
‡}‡}€}ä BÓ DÑˆßÜ�N‰N˜<Ô(ØÐÜ*°;Ü;TÐU`Ô;tôvˆ
àÔ4°U¿L¹LÓIÐIÐIÜ)¨%Ó0�O€FÜ˜# wÓ=Ð=r/   c                ó0   € V ^8„  d   QhR\         R\        /# rú  rû  )r,   s   "r-   r.   r.   Ä  s   € ÷ nñ n¤?ð n´~ñ nr/   c                óJ   € \        V P                  4      w  r\        WVR4      # )uÊ   xAI Grok OAuth (device code â†’ Responses API). Without this branch xai-oauth falls to the generic
oauth_external arm, returns (None, None), and silently re-routes every aux task to the Step-2 fallback.uˆ   resolve_provider_client: xai-oauth requested but no xAI OAuth token found (run: hermes model -> xAI Grok OAuth â€” SuperGrok / Premium+))r(  r³  rø  r	  s   &  r-   Ú_resolve_xai_oauth_branchr	  Ä  s-   € ô 2°#·)±)Ó<�O€FÜ˜# wðmónð nr/   c                ó0   € V ^8„  d   QhR\         R\        /# rú  rû  )r,   s   "r-   r.   r.   Í  s   € ÷ Eñ E¤ð E´Nñ Er/   c                ó¤  € V P                   V P                  V P                  r2pR;p;rVV P                  '       EdY   \	        V P                  4      P                  4       pV P                  \        9   dC   \        V4      P                  P                  R4      '       g   VP                  R4      R,           pV P                  R8X  d4   V P                  ;'       g    RP                  4       P                  R4      pV P                  \        9   d!   \        V P                  4      ;'       g    RpME\        V P                  4      ;'       g)    \        R4      ;'       g    \        V4      ;'       g    RpV'       g   \         P#                  R4       R# MuV'       dn   \%        VP'                  R	4      ;'       g    R4      P                  4       P                  R4      p\        VP'                  R
4      4      pV'       d   V'       d   YxrTV'       dí   V'       då   \)        W4      '       d   ^ RIHp	 V	! V4      p\/        T;'       g&    V'       d   VP'                  R4      MR;'       g    RV4      p
\1        V4      w  r¼V'       d   RV/M/ p^ RIHp / \7        WAV P8                  R7      ;'       g    / CV! V4      CpV'       d   WýR&   \;        RR
VR	V/VB p\=        T TY¦;'       g    TV4      p\?        V VV
4      # \@        \B        3 F®  pV! 4       w  ppVf   K  \/        T;'       g    TV4      p
\E        VR
R4      p\G        V4      '       d   \I        V\$        4      '       g   RM\%        T;'       g    R4      p\=        T TT
\%        \E        VR	R4      ;'       g    R4      V4      p\?        V VV
4      u # 	  \         P#                  R4       R# )z3Custom endpoint (OPENAI_BASE_URL + OPENAI_API_KEY).rj   rµ  r  r,  rø  rö  zQresolve_provider_client: explicit custom endpoint requested but base_url is emptyNrV   rU   rš  r³  r  r  )Ú!get_custom_provider_extra_headersró  rY  zPresolve_provider_client: custom/main requested but no endpoint credentials foundrß  rD   )%rŸ  r³  rç  r  r¡  r¨  rÏ  r•  r   rÊ  r   ro  rá  r  rÚ  rW  r­   r®   rX   rž   rÝ  r˜  r›  r7  r‹  r�   r	  rö  rì  r¸   rì  rô  r#  rë  rq   rÔ   r?   )rÙ  rŸ  r³  rç  rü  rý  Ú	wrap_baseÚ
_main_baseÚ	_main_keyr›  r9  r  r  rê  r	  r!  r¯   r(  r  Ú	_raw_ckeyÚ_ckeys   &                    r-   Ú_resolve_custom_branchr	  Í  s_  € à$'§L¡L°#·)±)¸S×=MÑ=M�\€Hð ,.Ð-€KÐ-�*Ø
××ÑÜ)¨#×*?Ñ*?Ó@×FÑFÓHˆð × Ñ Ô$9Ô9Ä(È;ÓBW×B\ÑB\×BbÑBbÐcf×BgÒBgØ%×,Ñ,¨SÓ1°EÕ9ˆKØ�<‰<Ð/Ô/Ø×.Ñ.×4Ð4°"×;Ñ;Ó=×DÑDÀSÓIˆIØ× Ñ Ô$9Ô9ô ,¨C×,@Ñ,@ÓA×VÐVÐEV‰Jô # 3×#7Ñ#7Ó8÷ %ð %Ü"Ð#3Ó4÷%ð %ä4°[ÓA÷%ð %ð %ð	 ÷ Ü�N‰NÐnÔoØÐð ÷ 
ô
 ˜×)Ñ)¨*Ó5×;Ð;¸Ó<×BÑBÓD×KÑKÈCÓPˆ
Ü& |×'7Ñ'7¸	Ó'BÓCˆ	ßŸ)Ø&0˜ß—zÜ% c×7Ò7ÝAÙ3°KÓ@ˆKÜ/Ø×[Ð[·<�l×&Ñ& wÔ/ÀT×[Ð[ÈmÐ]eó
ˆô 5°[ÓAÑˆß*-� #Ñ&°2ˆÝGðMÔ7¸ÐY\×YfÑYfÔg×mÐmÐkmð MÙ>¸{ÓKðMˆçØ'6Ð#Ñ$Ü&ÑY¨zÐYÀKÐYÐSXÑYˆÜ   f¨k×;SÐ;SÈÐU_Ó`ˆÜ˜S &¨+Ó6Ð6ô (Ô)BÓCˆÙ ›(‰ˆ�ØÔÜ3°E×4DÐ4D¸WÀhÓOˆKô   ¨	°2Ó6ˆIÜ# I×.Ò.´zÀ)ÌS×7QÒ7Q‘BÔX[Ð\e×\kÐ\kÐikÓXlˆEÜ$ S¨&°+¼sÄ7È6ÐS]Ð_aÓCb×ChÐChÐfhÓ?iÐkpÓqˆFÜ   f¨kÓ:Ò:ñ Dô ‡N�NÐeÔfØÐr/   c          	      ót   € V ^8„  d   QhR\         R\        R\        \        \         \         3,          ,          /# )r)   rü  rý  rZ  r  )r,   s   "r-   r.   r.     s9   € ÷ Uñ U´#ð UÄ3ð UÔW_Ô`dÔehÔjmÐemÕ`nÕWoñ Ur/   c                óÆ   € \        \        V 4      4      w  r4V'       d   RV/M/ p\        R4      pV'       d   / T;'       g    / CVCpV'       d   WeR&   \        RRVRV/VB # )a  Plain OpenAI client on the /v1 equivalent of a named custom entry's base URL.

``extra_headers`` is the entry's own header block (gateway routing tags, proxy auth): the main
runtime lifts it onto every request, so aux must too (#109595). SECURITY: never log the values.r  NrY  rU   rV   rD   )r‹  r¡  r^  r¸   )rü  rý  rZ  r  r  r   Ú_headerss   &&&    r-   Ú _named_custom_openai_wire_clientr	    sk   € ô
 1Ô1DÀ[Ó1QÓRÑ€Kß'*ˆo˜sÑ#°€FÜ*¨4Ó0€HßØ8�x—~�~ 2Ð8¨-Ð8ˆßØ$,Ð Ñ!Ü ÑT¨ÐT¸kÐTÈVÑTÐTr/   c                óF   € V ^8„  d   QhR\         R\        \        ,          /# rú  )rÍ  r   rñ  )r,   s   "r-   r.   r.   $  s#   € ÷ K3ñ K3¤oð K3¼(Ä>Õ:Rñ K3r/   c                óH  € ^ RI Hp V P                  pRpV P                  '       d$   V P                  V8w  d   V! V P                  4      pVf	   V! V4      pV'       g   R# V P                  ;'       g    VP                  R4      ;'       g    RP                  4       p\        V P                  4      ;'       g    \        W2V4      pVR8X  d0   \        P                  RVP                  R4      ;'       g    T4       V P                  ;'       g    VP                  R4      ;'       g    RP                  4       p\        W4      '       d   ^ R	IHp V! V4      pR
pV'       g   \        P                  RV4       R# ^ RIHp V! VP                  R4      4      p	\%        V P&                  ;'       ge    VP                  R4      ;'       gL    V P(                  '       d   V P(                  P                  R4      MR;'       g    \+        4       ;'       g    RT4      p
^ RIHp V! W*V4      w  rÍV'       d   YÍrF\        P1                  RY*T;'       g    R
4       VR8X  dP    ^ RIHp ^ RIHp V! WT4      pV	'       d   VP;                  V	R7      p\?        T \C        TY¥TT! YE4      R7      T
4      # \A        WEV	4      pVR8X  d   \E        VV
4      pM\G        V VW¤V4      p\?        V VV
4      #   \<         d1    \        P                  RT4       \?        T \A        YET	4      T
4      u # i ; i)zeNamed custom provider (config.yaml providers dict / custom_providers list); None if no entry matches.r€  NrV   rj   rø  u­   resolve_provider_client: named custom provider %r has no resolvable api_key â€” request will be sent with placeholder no-key-required and will 401 on auth-required endpointsr`   ro  rš  r`  zAresolve_provider_client: named custom provider %r has no base_url)Únormalize_extra_headersrZ  r³  r  rä  zCresolve_provider_client: named custom provider %r (%s, api_mode=%s)r,  rr  r  )rY  u…   Named custom provider %r declares api_mode=anthropic_messages but the anthropic SDK is not installed â€” falling back to OpenAI-wire.rv  r  rß  )$rú  r�  rŸ  rÏ  r  rž   r¨  rá  r  r¶  r­   r®   ro  rÝ  r˜  r›  r�   r 	  r7  r³  rç  rO  rç  rå  rÞ   r4  rs  r  r  Úwith_optionsrª   rô  r	  rA  rú  rì  )rÙ  r�  rŸ  r¦  rü  rý  Úentry_api_moder›  r 	  Úentry_headersr9  rå  ré  rê  rs  r  rU  r¯   s   &                 r-   Ú_resolve_named_custom_branchr$	  $  sö  € åFØ�|‰|€Hð €LØ
××Ð ×!6Ñ!6¸(Ô!BÙ1°#×2GÑ2GÓHˆØÒÙ1°(Ó;ˆßÙð ×(Ñ(×NÐN¨L×,<Ñ,<¸ZÓ,H×NÐNÈB×UÑUÓW€KÜ# C×$8Ñ$8Ó9×wÐwÔ=RÐS_ÐkvÓ=w€JØÐ&Ô&Ü�‰ð AàBN×BRÑBRÐSYÓBZ×BfÐBfÐ^fô	hð —l‘l×HÐH l×&6Ñ&6°zÓ&B×HÐHÀb×OÑOÓQ€NÜ! #×3Ò3Ý=Ù/°Ó<ˆØ+ˆßÜ�‰ÐZÐ\dÔeØÐÝ9Ù+¨L×,<Ñ,<¸_Ó,MÓN€MÜ+Ø�	‰	÷ 	ð 	Ø×Ñ˜GÓ$÷	ð 	à-0×-=×-=Ð-=ˆC×Ñ× Ñ  Ô)À4÷	ð 	ô $Ó%÷	ð 	ð Øó€Kõ ;Ù+¨HÀ;ÓOÑ€HßØ&.˜Ü
‡L�LÐVØ¨×(LÐ(LÐ:LôNð
 Ð-Ô-ð	}ÝFÝLÙ0°ÓIˆKßð *×6Ñ6À}Ð6ÓU�ô
 ØÔ)¨+°{ÐP[Ù3KÈKÓ3dôfØgrótð 	tô .¨kÀ}ÓU€FàÐ*Ô*Ü% f¨kÓ:‰ä   f¨kÈ
ÓSˆÜ˜˜f kÓ2Ð2øô ô 	}Ü�N‰Nð OØPXôZä  Ô&FÀ{Ð`mÓ&nÐp{Ó|Ò|ð	}ús   É.K& Ë&8L!Ì L!c                ó0   € V ^8„  d   QhR\         R\        /# rú  rû  )r,   s   "r-   r.   r.   r  s   € ÷ \ñ \¤ð \¼>ñ \r/   c                óŽ   € \        V P                  V P                  V P                  V P                  R7      w  r\        WVR4      # )zÐAzure Foundry via the runtime resolver: the generic PROVIDER_REGISTRY path only knows the static
AZURE_FOUNDRY_API_KEY env var, missing ``auth_mode: entra_id`` (callable bearer) and config base_url overrides.)r³  r  r  ro  zsresolve_provider_client: azure-foundry requested but runtime resolution failed (run: hermes doctor for diagnostics))r:  r³  r  r  ro  rø  )rÙ  r¯   rÂ  s   &  r-   Ú_resolve_azure_foundry_branchr'	  r  sL   € ô /°S·Y±YÐQT×QeÑQeØAD×AVÑAVÐad×amÑamôoÑ€Fä˜# }ð[ó\ð \r/   c                óJ   € V ^8„  d   QhR\         R\        R\        R,          /# )r)   rŸ  rÃ  r*   Nra   )r,   s   "r-   r.   r.   |  s&   € ÷ ñ ¬sð ÄSð ÌSÐSWÍZñ r/   c                óÊ   €  ^ RI Hp V! V 4      pTf   R#  TP                  ! R/ TB #   \         d     R# i ; i  \         d    \        P                  RT RR7        R# i ; i)uà  Registered profile's own client for an ``api_key`` aux route, or ``None``.

Same registration seam as ``agent_runtime_helpers._provider_supplied_client`` (main agent)
and the ``external_process`` branch below: a profile whose wire protocol is not
OpenAI-over-HTTP overrides ``ProviderProfile.create_client()`` to supply its transport.
A profile that raises is logged and skipped â€” a third-party plugin can only fail to
provide a client, never take the auxiliary resolution down.r
  Nz{resolve_provider_client: provider profile %r failed to create an auxiliary client; falling back to the standard client pathTrÜ   rD   )r  r  rŸ   Úcreate_clientr­   r®   )rŸ  rÃ  r  r3  s   &,  r-   Ú _api_key_profile_supplied_clientr+	  |  s|   € ðÝ2Ù& xÓ0ˆð ‚ÙðØ×$Ò$Ñ5 }Ñ5Ð5øô ô Úðûô ô Ü�‰ð Tà¨$ð 	ô 	0ò ð	ús   ‚) —; ©8·8»#A"Á!A"c                óH   € V ^8„  d   QhR\         R\        R\        R\        /# )r)   rÙ  ræ  Úresolve_credsr*   )rÍ  r   r   rñ  )r,   s   "r-   r.   r.   ”  s)   € ÷ <3ñ <3¤ð <3¼3ð <3Ìxð <3Ô\jñ <3r/   c                ó¢  € V P                   pVR8X  d1   \        V P                  V P                  R7      w  rE\	        WVR4      # V! V4      p\        VP                  RR4      4      P                  4       p\        V P                  4      ;'       g    Tp\        VP                  RR4      4      P                  4       P                  R4      ;'       g    VP                  pV P                  '       d*   V P                  P                  4       P                  R4      pVR8X  dV   \        P                  ! \        4      ;_uu_ 4        ^ R	IHp	Hp
Hp V! V4      pV'       g   V
! V4      '       d   T	pR
R
R
4       V'       gO   \%        VP&                  4      VR8X  d   R.M. ,           p\(        P+                  RVRP-                  V4      4       R# \/        V4      pV P                  '       d:   VR8w  d3   \/        V P                  P                  4       P                  R4      4      p\1        V P2                  ;'       g    \5        V4      V4      p\7        W7VR7      pVe#   \(        P+                  RW>4       \9        WV4      # VR8X  dB   ^ RIHpHp V! V4      '       d,   V! W}R7      p\(        P+                  RW>4       \9        WV4      # \A        WÓV PB                  RR7      p\E        RRVRV/V'       d   RV/M/ B pVR8X  d{   V'       ds   V PF                  '       ga   \        P                  ! \H        4      ;_uu_ 4        ^ RI%H&p V! V4      '       d"   \(        P+                  RV4       \O        WN4      pR
R
R
4       \Q        WWèV4      p\(        P+                  RW>4       \9        WV4      #   + '       g   i     ELD; i  + '       g   i     LS; i)zgPROVIDER_REGISTRY ``api_key`` providers (Anthropic via its own resolver), honouring explicit overrides.r<  )r  r  zOresolve_provider_client: anthropic requested but no Anthropic credentials foundrU   rj   rV   rµ  rã  )ÚACTUAL_LOCAL_NOAUTH_PLACEHOLDERÚis_actual_local_base_urlr›  NrÙ  zgh auth tokenzJresolve_provider_client: provider %s has no API key configured (tried: %s)r  r[   zDresolve_provider_client: %s native client from provider profile (%s)r7  rÚ  ú resolve_provider_client: %s (%s)Tr™  rY  )Ú!_should_use_copilot_responses_apiud   resolve_provider_client: copilot model %s needs Responses API â€” wrapping with CodexAuxiliaryClientrß  rD   ))rŸ  râ  r  r  rø  rX   rž   r¨  rá  r   rÂ  r–  r—  rŸ   r˜  r/	  r0	  r›  r—  Úapi_key_env_varsr­   rÞ   rÍ  r¡  r7  r³  r6  r+	  rô  rì  rÛ  rÜ  rö  rì  r¸   r¸  rª   rä  r2	  rú  rì  )rÙ  ræ  r-	  rŸ  r¯   rÂ  r&  rU   rç  r/	  r0	  r›  Útried_sourcesrV   r9  Úprofile_clientrÛ  rÜ  rS  r2	  s   &&&                 r-   Ú_resolve_api_key_branchr6	  ”  s  € à�|‰|€HØ�;ÔÜ .À×@TÑ@TØAD×AVÑAVô!XÑˆä˜c¨=Øoóqð 	qá˜(Ó#€EÜ�%—)‘)˜I rÓ*Ó+×1Ñ1Ó3€Gô ! ×!5Ñ!5Ó6×AÐA¸'€GÜ�u—y‘y ¨RÓ0Ó1×7Ñ7Ó9×@Ñ@ÀÓE×cÐcÈ×IcÑIc€LØ
××ÐØ×,Ñ,×2Ñ2Ó4×;Ñ;¸CÓ@ˆØ�8ÔÜ× Ò ¤×+Õ+÷ñ ñ 5°\ÓBˆLßÑ7¸×EÒEØ9�÷ ,÷ Ü˜W×5Ñ5Ó6ÈxÐ[dÔOd¸?Ñ:KÐjlÕmˆÜ�‰ÐaØ˜tŸy™y¨Ó7ô	9àÐÜ" <Ó0€Hà
××Ð ¨XÔ!5Ü& s×'<Ñ'<×'BÑ'BÓ'D×'KÑ'KÈCÓ'PÓQˆÜ+¨C¯I©I×,^Ð,^Ô9TÐU]Ó9^Ð`hÓi€Kä5°hÐZbÔc€NØÒ!Ü�‰Ð[Ð]eÔsÜ˜S°+Ó>Ð>Ø�8Ôß]Ù$ X×.Ò.Ù'°ÔKˆFÜ�L‰LÐ;¸XÔSÜ  ¨kÓ:Ð:Ü'¨ÀcÇmÁmÐY]Ô^€GÜ"Ñ{¨7Ð{¸XÐ{×jqÐK\Ð^eÑJfÐwyÑ{€Fð �9Ô§°S·]·]°]Ü× Ò ¤×-Õ-ÝKÙ0°×=Ò=Ü—‘ð TØU`ôbä-¨fÓB�÷ .ô ˜S¨+ÀWÓM€FÜ
‡L�LÐ3°XÔKÜ˜ kÓ2Ð2÷W ,×+Ð+ú÷B .×-ús   Å(N*Å-N*Ì=6N>Î*N;	Î>O	c                ó^   € V ^8„  d   QhR\         R\        \        \        3,          R\        /# )r)   rÙ  r&  r*   )rÍ  r¤   rX   r   rñ  )r,   s   "r-   r.   r.   Ó  s*   € ÷ %ñ %¬/ð %Ä$ÄsÌCÀxÅ.ð %ÔUcñ %r/   c           
     óö  € V P                   p\        V P                  ;'       gB    V P                  '       d   V P                  P	                  R4      MR;'       g    \        4       T4      p ^ RIHp V! V4      pVEe)   \        VP	                  RR4      4      P                  4       p\        VP	                  RR4      4      P                  4       pV'       g   \        P                  RV4       R# V'       d	   V'       g   \        P                  RV4       R#  TP                  Yg\        VP	                  R	R4      4      P                  4       ;'       g    R\        VP	                  R
4      ;'       g    . 4      R7      pVe#   \        P                  RW#4       \!        WV4      # \#        \$        VRV4       R#   \         d    Rp ELQi ; i  \         d    \        P                  RTRR7       Rp Lui ; i)zVPROVIDER_REGISTRY ``external_process`` providers, served via their registered profile.r³  Nr
  rU   rj   rV   zMresolve_provider_client: %s requested but no model was provided or configuredzUresolve_provider_client: %s requested but external process credentials are incompleteÚcommandr:   )rU   rV   r9	  r:   zOresolve_provider_client: profile %r failed to create an external-process clientTrÜ   r1	  zLresolve_provider_client: external-process provider %s not directly supportedrß  )rŸ  r7  r³  rç  rž   rO  r  r  rŸ   rX   r¨  r­   r®   r*	  r—  rÞ   rô  r×  Ú _LOGGED_UNSUPPORTED_EXTPROC_KEYS)	rÙ  r&  rŸ  r9  Ú_get_provider_profileÚ_extproc_profilerU   rV   r¯   s	   &&       r-   Ú _resolve_external_process_branchr=	  Ó  sÁ  € à�|‰|€HÜ+Ø�	‰	×pÐp°s×7G×7GÐ7G�c×&Ñ&×*Ñ*¨7Ô3ÈT×pÐpÔVnÓVpØó€Kð ÝKÙ0°Ó:Ðð Ó#Ü�e—i‘i 	¨2Ó.Ó/×5Ñ5Ó7ˆÜ�u—y‘y ¨RÓ0Ó1×7Ñ7Ó9ˆßÜ�N‰NÐjÐltÔuØÐßŸhÜ�N‰NÐrÐt|Ô}ØÐð	Ø%×3Ñ3ØÜ˜EŸI™I i°Ó4Ó5×;Ñ;Ó=×EÐEÀÌDÐQV×QZÑQZÐ[aÓQb×QhÐQhÐfhÓLið 4ó kˆFð ÒÜ�L‰LÐ;¸XÔSÜ  ¨kÓ:Ð:ÜÔ4°hð)Ø*2ô4ð Ðøô3 ô  ØÓð ûô ô 	Ü�N‰NÐlØ#¨dð ô 4àŠFð	ús0   Á-F< Ä;G ÅG Å6G Æ<GÇGÇ%G8Ç7G8c                ó0   € V ^8„  d   QhR\         R\        /# rú  rû  )r,   s   "r-   r.   r.   û  s   € ÷ ñ ¤/ð ´nñ r/   c                ó²  € V P                   p ^ RIHpHpHp TP                  T4      pTf   \        \        TRT4       R# TP                  pTR8X  d   \        YT4      # TR8X  d   \        Y! T4      4      # ^ RIHp TP                  T4      pTe	   T! T 4      # \        \         Ya3RYa4       R#   \
         d    \        P                  RT4       Ru # i ; i)	zUPROVIDER_REGISTRY providers, dispatched on ``auth_type``; unknown providers log once.)r×  r  Ú-resolve_external_process_provider_credentialsz-hermes_cli.auth not available for provider %sz,resolve_provider_client: unknown provider %rrU   Úexternal_process)ÚREGISTRY_AUTHTYPE_ARMSz6resolve_provider_client: unhandled auth_type %s for %srß  )rŸ  r˜  r×  r  r@	  rª   r­   rÞ   rž   r×  Ú_LOGGED_UNKNOWN_PROVIDER_KEYSrà  r6	  r=	  Úagent.auxiliary_client_registryrB	  Ú_LOGGED_UNHANDLED_AUTHTYPE_KEYS)	rÙ  rŸ  r×  r  r@	  ræ  rà  rB	  Úarms	   &        r-   Ú_resolve_registry_branchrG	  û  sí   € à�|‰|€Hð÷	
ñ 	
ð  ×#Ñ# HÓ-€GØ‚ÜÔ5°xØFÈô	RàÐØ×!Ñ!€IØ�IÔÜ& sÐ5YÓZÐZØÐ&Ô&Ü/°Ð5bÐckÓ5lÓmÐmÝFØ
 ×
$Ñ
$ YÓ
/€CØ
‚Ù�3‹xˆäÔ3°iÐ5JØLØô)ð Ðøô+ ô Ü�‰ÐDÀhÔOØÒðús   Ž
B0 Â0#CÃCr¢  c                ó¨  € V ^8„  d   QhR\         R\         R,          R\        R\        R\         R,          R\        \         \        . \         3,          ,          ,          R\         R,          R	\        \        \         \
        3,          ,          R
\        R\        \         ,          R\        \        \
        ,          \        \         ,          3,          /# )r)   rŸ  r³  Nr¢   r¸  r  r  ro  rç  rì  rB  r*   )rX   rm   r   r   r¤   r   rù  )r,   s   "r-   r.   r.   '  sÂ   € ÷ V)ñ V)ÜðV)Ü �*ðV)Ü9=ðV)ÜRVðV)ä˜T•zðV)ä<DÄSÌ8ÐTVÔX[ÐT[ÕK\ÕE\Õ<]ðV)ô �D�jðV)ô 08¼¼SÄ#¸X½Õ/GðV)ô \`ðV)ô ”3�-ð	V)ô
 Œ8”C�=œ(¤3�-Ð'Õ(ñV)r/   c
                ó&  € \        4        T ;'       g    RP                  4       P                  4       p
\        V 4      p \	        \        T;'       g    R4      4      P                  4       ;'       g    RpV R8X  dƒ   \        V4      w  r¼V'       dn   V'       df   VP                  4       P                  4       p
\        V4      p TpV'       d3   \        V4      P                  4       P                  R4      '       d   RpRp^ RIH	p V! W¤V4      pVe,   V^ ,          '       g   \        P                  RV
4       R# Vw  rEV'       g>   V R8w  d7   V R8X  d	   V'       g(   \        V 4      ;'       g    \        4       ;'       g    Tp\        W
WVWEWgW‰4      p\        P!                  V 4      pV
P#                  R	4      pVe   V\$        9   d    \'        V4      pVe   V# Ve	   V! V4      # V R
8X  d   \+        V4      # \-        V4      #   \(         d    Rp L>i ; i)ub  Central router: return a configured client (auth, base URL, API format) for a provider + optional model.
The client always exposes ``.chat.completions.create()``; Codex/Responses providers get an adapter.
``provider``: built-in name, ``custom:<name>``, "custom" (OPENAI_BASE_URL + OPENAI_API_KEY) or "auto"
(full auto-detection chain). ``model=None`` â†’ provider's default aux model. ``raw_codex`` â†’ bare OpenAI
client for ``responses.stream()`` callers. ``api_mode`` forces "codex_responses"/"chat_completions"/
"anthropic_messages" instead of auto-detect. Returns (client, resolved_model) or (None, None).rj   NrD  zmoa://©Úbare_llamacpp_endpointzNresolve_provider_client: %s requested but no local llama.cpp server is runningr¢  r  r£  r5  rß  )r  r¨  r©  r°  r~   rX   rK  rª  Úagent.auxiliary_local_runtimerK	  r­   r®   r6  rO  rÍ  Ú_EXPLICIT_PROVIDER_BRANCHESrž   Úremoveprefixr•  r$	  rª   r'	  rG	  )rŸ  r³  r¢   r¸  r  r  ro  rç  rì  rB  rÏ  rE  rF  rK	  rø   rÙ  ÚbranchÚalias_identityr_  s   &&&&&&&&&&         r-   rC  rC  '  sé  € ô Ôð "Ÿ˜ R×.Ñ.Ó0×6Ñ6Ó8ÐÜ& xÓ0€HÜ"¤3 x§~ ~°2Ó#6Ó7×=Ñ=Ó?×GÐGÀ4€Hð �5ÔÜ$;¸EÓ$BÑ!ˆßŸZØ -× 3Ñ 3Ó 5× ;Ñ ;Ó =ÐÜ.¨}Ó=ˆHØˆEç ¤SÐ):Ó%;×%AÑ%AÓ%C×%NÑ%NÈx×%XÒ%XØ$(Ð!Ø#'Ð ÝDÙ"Ð#4ÐIYÓZ€EØÒØ�Q�xŒxÜ�N‰NÐkÐm~ÔØÐØ.3Ñ+Ð÷
 �X Ô'°¸VÔ1CÏ	ô0 ,¨HÓ5×\Ð\Ô9QÓ9S×\Ð\ÐW\ˆÜ
Ø U¸	Ø¨XÀYó€Cô )×,Ñ,¨XÓ6€FØ&×3Ñ3°IÓ>€Nð ‚~˜Ô+@Ô@ð	Ü1°#Ó6ˆFð ÒØˆMØÒÙ�c‹{ÐØ�?Ô"Ü,¨SÓ1Ð1Ü# CÓ(Ð(øô ô 	ØŠFð	ús   ÇH  È HÈHc          	      óÂ   € V ^8„  d   QhR\         R\        \        \         \        3,          ,          R\        \        \
        ,          \        \         ,          3,          /# )r)   rB  rç  r*   )rX   r   r¤   r   rù  r&   )r,   s   "r-   r.   r.   ‚  s\   € ÷ ñ ¤Cð ¼xÌÌSÔRUÈXÍÕ?Wð ÔchÔiqÔrxÕiyô  |Dô  EHõ  |Ið  jIõ  dJñ r/   c          	     óP   € \        T ;'       g    R4      w  r#rEp\        W#WEWaR7      # )ziReturn (client, default_model_slug) for text-only aux tasks; ``task`` selects auxiliary.<task> overrides.N)r³  r  r  ro  rç  )Ú_resolve_task_provider_modelrC  )rB  rç  rŸ  r³  rV   rU   ro  s   &$     r-   Úget_text_auxiliary_clientrT	  ‚  s2   € ä3OÐPT×P\ÐP\ÐX\Ó3]Ñ0€H�X¨Ü"Ø°Øôð r/   Ú	deepinfrac                óR   € V ^8„  d   QhR\         R\        \         ,          R\        /# rÆ  rZ  )r,   s   "r-   r.   r.   Ž  s%   € ÷ 8ñ 8¬#ð 8´h¼sµmð 8Ìñ 8r/   c                ó¤   €  ^ RI Hp ^ RIHp  T! YT! 4       4      pTf   R# \        T4      #   \         d     R# i ; i  \
         d     R# i ; i)up   True when ``provider``/``model`` is known to accept image input; unknown capability â†’ True (attempt the call).)Ú_lookup_supports_visionrb  T)Úagent.image_routingrX	  r�   r–   rª   rŸ   rm   )rŸ  r³  rX	  r–   Úsupportss   &&   r-   rB  rB  Ž  s_   € ðÝ?Ý:ðÙ*¨8Ñ<PÓ<RÓSˆð Ò#ˆ4Ð7¬¨h«Ð7øô ô Úðûô ô Úðús   ‚. �A  ®=¼=Á AÁAc                óF   € V ^8„  d   QhR\         \        ,          R\        /# rž  r   )r,   s   "r-   r.   r.   œ  s   € ÷ -ñ -¬´#­ð -¼3ñ -r/   c                 ó   € \        V 4      # r8   )r°  )rŸ  s   &r-   Ú_normalize_vision_providerr]	  œ  s   € Ü" 8Ó,Ð,r/   c                ó”   € V ^8„  d   QhR\         \        ,          R\        \         \        ,          \         \        ,          3,          /# r²  r2  )r,   s   "r-   r.   r.      s7   € ÷ Nñ N¬H´S­Mð N¼eÄHÌSÅMÔS[Ô\_ÕS`ÐD`Õ>añ Nr/   c                ó†   € T ;'       g    \        R4      pV'       g   \        P                  R4       R# \        RVRR7      # )ziDeepInfra vision: default model is discovered live via default_vision_model() so no hardcoded id can rot.rU	  ub   Vision auto-detect: deepinfra catalog unreachable or returned no vision-tagged models â€” skippingTró  rß  )rQ  r­   rÞ   rC  )r³  Úvision_models   & r-   Ú _deepinfra_strict_vision_backendra	     s:   € à×IÐIÔ<¸[ÓI€LßÜ�‰ÐyÔzØÐÜ" ;°ÈÔMÐMr/   c                 ó   € \        R V RR7      # )rÙ  Tró  ©rC  r¸  s   &r-   r¹  r¹  ­  s   € Ô4°YÀÐQUÕVr/   c                 ó   € \        V R 7      # )r¸  )r  r¸  s   &r-   r¹  r¹  ®  s	   € ¤°eÕ <r/   c                 ó   € \        R V RR7      # )r  Tró  rc	  r¸  s   &r-   r¹  r¹  ¯  s   € Ô1°&¸%È4ÕPr/   c                 ó   € \        R V RR7      # )r¦  Tró  rc	  r¸  s   &r-   r¹  r¹  °  s   € Ô"9¸.È%Ð[_Õ"`r/   c                 ó   € \        4       # r8   )râ  r¸  s   &r-   r¹  r¹  ±  s   € œ~Ô/r/   c                 ó   € \        4       # r8   )r#  r¸  s   &r-   r¹  r¹  ³  s   € Ô0Ô2r/   c          	      ó    € V ^8„  d   QhR\         R\        \         ,          R\        \        \        ,          \        \         ,          3,          /# rÆ  rÇ  )r,   s   "r-   r.   r.   ·  sC   € ÷ Cñ C¬Sð C¼Ä#½ð CÔRWÔX`ÔadÕXeÔgoÔpsÕgtÐXtÕRuñ Cr/   c                 óZ   € \         P                  \        V 4      4      pVe	   V! V4      # R# )Nrß  )Ú_STRICT_VISION_BACKENDSrž   r]	  )rŸ  r³  Úbackends   && r-   Ú_resolve_strict_vision_backendrm	  ·  s,   € Ü%×)Ñ)Ô*DÀXÓ*NÓO€GØ$Ò0‰7�5‹>ÐB°lÐBr/   c                ó:   € V ^8„  d   QhR\         \        ,          /# r(   ©r—  rX   )r,   s   "r-   r.   r.   ¼  s   € ÷ ñ ¤t¬C¥yñ r/   c                 ó`  € . p \        4       pV'       d^   VR9  dW   V\        9   d   \        V4      ^ ,          RJpM\        V\	        4       4      ^ ,          RJpV'       d   V P                  V4       \         F2  pW09  g   K  \        V4      ^ ,          f   K!  V P                  V4       K4  	  V # )uµ   Available vision backends in auto-selection order (active provider â†’ OpenRouter â†’ Nous â†’ DeepInfra).

Single source of truth for setup, tool gating, and runtime auto-routing.
N>   rj   r¢  )r¬  Ú_VISION_AUTO_PROVIDER_ORDERrm	  rC  rN  r˜  )Ú	availabler"  Úmain_okrO  s       r-   Úget_available_vision_backendsrt	  ¼  s›   € ð
 €IÜ'Ó)€Mß˜¨lÔ:ØÔ7Ô7Ü4°]ÓCÀAÕFÈdÐR‰Gä-¨mÔ=MÓ=OÓPÐQRÕSÐ[_Ð_ˆGßØ×Ñ˜]Ô+ß(ˆØÖÔ"@ÀÓ"CÀAÕ"FÔ"RØ×Ñ˜QÖñ )ð Ðr/   c                óú   € V ^8„  d   QhR\         R\        R\        \         ,          R\        \         ,          R\        R\        \        \         ,          \        \        ,          \        \         ,          3,          /# )r)   r  rœ  rÂ  r3  r¢   r*   )rX   r   r   rm   rù  )r,   s   "r-   r.   r.   Ð  s^   € ÷ 7ñ 7Üð7Ü),ð7Ü=EÄc½]ð7äœS•Mð7ä/3ð7ô Œ8”C�=œ(¤3�-¬´#­Ð6Õ7ñ7r/   c                ój   € Vf   V RR3# T;'       g    TpV'       d   \        WRR7      w  rgWV3# WV3# )zSApply the explicit model override (and async wrapping) to a resolved vision client.NTró  )r   )r  rœ  rÂ  r3  r¢   r9  Úasync_clientÚasync_models   &&&&&   r-   Ú_finalize_vision_clientry	  Ð  sM   € ð
 ÒØ  $¨Ð,Ð,Ø ×1Ð1 M€KßÜ$4°[ÐY]Ô$^Ñ!ˆØ °Ð;Ð;Ø¨;Ð6Ð6r/   c                óü   € V ^8„  d   QhR\         R\         R\        \         \        3,          R\        \         ,          R\        \         ,          R\        \        \        ,          \        \         ,          3,          /# )r)   r"  rD  ré  r3  r6  r*   )rX   r¤   r   r   rù  )r,   s   "r-   r.   r.   Þ  sb   € ÷ -1ñ -1Üð-1Ü$'ð-1Ü26´s¼C°xµ.ð-1ÜRZÔ[^ÕR_ð-1ä¤•}ð-1ô Œ8”C�=œ(¤3�-Ð'Õ(ñ-1r/   c           
     ó@  € \        V 4      pT;'       g    TpV R8X  dK   \        Y;'       g    T4      w  rxVf   R# \        P                  RY;'       g    T;'       g    T4       Wx3# V \        9   d   \        P                  RV 4       R# \        W4      '       g   \        P                  RV 4       R# R;ršTpV R8X  g   V P                  R4      '       d‚   VP                  R4      '       d>   VP                  R4      VP                  R	4      ;'       g    RVP                  R
4      rípM\        4       w  rÍpV'       d   YÍr©T;'       g    T;'       g    Rp\        WW¹W¢RR7      w  ppVf   R# \        P                  RT T;'       g    T4       TT;'       g    T3# )z^Auto-detect step 1: try the main provider; (None, None) falls through to the aggregator chain.r  Nz/Vision auto-detect: using main provider %s (%s)ui   Vision auto-detect: skipping main provider %s (no vision support) â€” falling through to aggregator chainut   Vision auto-detect: skipping main provider %s (reports no vision capability) â€” falling through to aggregator chainr�  r£  rV   rU   ro  T)ro  r  r  rç  rì  rß  )rQ  rm	  r­   r+  rA  rÞ   rB  rª  rž   rÿ  rC  )r"  rD  ré  r3  r6  Úprovider_vision_defaultr`	  rœ  rÂ  Úrpc_base_urlÚrpc_api_keyÚrpc_api_moderü  rý  rþ  Ú
rpc_clientÚ	rpc_models   &&&&&            r-   Ú_vision_main_provider_clientr‚	  Þ  sÏ  € ô ?¸}ÓMÐØ*×8Ð8¨j€LØ˜Ôô &DÀM×S|ÐS|Ðe|Ó%}Ñ"ˆØÒØÐÜ�‰ÐEÀ}÷  WDð  WDÐgu÷  WDð  WDð  zDô  	EØÐ)Ð)ØÔ1Ô1Ü�‰ð  Að  CPô  	QØÐÜ& }×CÒCä�‰ð CØô	
ð Ðð "&Ð%€LØ$€LØ˜Ô  M×$<Ñ$<¸Y×$GÒ$GØ�;‰;�z×"Ò"Ø3:·;±;¸zÓ3JÈGÏKÉKÐXaÓLb×LjÐLjÐfjÐls×lwÑlwð  yCó  mD [ˆK [ä3JÓ3LÑ0ˆK [ßØ(3˜+Ø,×CÐC°×CÐC¸tˆLÜ3Ø¨lØ$ÀdôLÑ€J�	ð ÒØÐÜ
‡K�KÐAÀ=ÐR[×RkÐRkÐ_kÔlØ�y×0Ð0 LÐ0Ð0r/   c                ó  € V ^8„  d   QhR\         \        \        3,          R\        \        ,          R\        \        ,          R\        R\
        \        \        ,          \        \        ,          \        \        ,          3,          /# )r)   ré  r3  r6  r¢   r*   )r¤   rX   r   r   rm   rù  )r,   s   "r-   r.   r.     s_   € ÷ ñ Ü”#”s�(�^ðÜ-5´c­]ðÜOWÔX[Í}ðäðô Œ8”C�=œ(¤3�-¬´#­Ð6Õ7ñr/   c                óJ  € \        V P                  R4      ;'       g    \        4       4      p\        V P                  R4      ;'       g    \        4       4      pVP	                  4       P                  4       R8X  d/   \        V4      w  rgV'       d   V'       d   YgrT\        V RRRR7      p V'       d(   VR9  d!   \        WEWV4      w  r‰Ve   \        WHW‘V4      # \         F+  p
W¤8X  d   K  \        V
4      w  r¹Vf   K  \        W«W‘V4      u # 	  \        P                  R4       R# )	zbAuto-detect order: 1. main provider + model, 2. OpenRouter, 3. Nous Portal, 4. DeepInfra, 5. stop.rŸ  r³  rD  rj   )rV   rU   ro  z'Auxiliary vision client: none available>   rj   rD  r¢  rù  )rX   rž   r¬  rN  r¨  r©  rK  r¤   r‚	  ry	  rq	  rm	  r­   rÞ   )ré  r3  r6  r¢   r"  rD  rE  rF  r¯   rÂ  r  rœ  s   &&&&        r-   Ú_vision_auto_router…	    s  € ô
 ˜Ÿ™ JÓ/×HÐHÔ3FÓ3HÓI€MÜ�W—[‘[ Ó)×?Ð?Ô-=Ó-?Ó@€JØ×ÑÓ×"Ñ"Ó$¨Ô-ô %<¸JÓ$GÑ!ˆßŸZØ(5˜:Ü˜7¨R¸ÀbÔIˆGß˜Ð.AÔAÜ <¸]ÐX_ð  rCó  !DÑˆØÒÜ*¨=À-ÐakÓlÐlç0ˆ	ØÔ%ÙÜ%CÀIÓ%NÑ"ˆØÔ"Ü*¨9À=ÐblÓmÒmñ 1ô ‡L�LÐ:Ô;ØÐr/   c                ój  € V ^8„  d   QhR\         \        ,          R\         \        ,          R\         \        ,          R\         \        ,          R\        R\         \        \        \        3,          ,          R\
        \         \        ,          \         \        ,          \         \        ,          3,          /# )r)   rŸ  r³  rV   rU   r¢   rç  r*   )r   rX   rm   r¤   r   rù  )r,   s   "r-   r.   r.   0  s‡   € ÷ *Lñ *LÜ”s�mð*LÜ+3´C­=ð*LÜNVÔWZÍmð*Lä”c�]ð*Lä/3ð*Lô œ4¤¤S �>Õ*ð*Lô Œ8”C�=œ(¤3�-¬´#­Ð6Õ7ñ	*Lr/   c               óö  € \        V4      p\        RWW#4      w  rxršpT\        V4      r|V	'       d0   V'       d
   VR9  d   TMRp\        WØVWšW¶R7      w  rïYÞVe   V3# R3# VR8X  d   \	        WhW´4      # V\
        9   d   \        Wx4      w  pp\        VVVW„4      # VR8X  d?   \         F4  p\        YxTTT
;'       g    RRVRR	7      w  rïVf   K'  \        W~WøV4      u # 	  \        WÈWKVRR
7      w  rïY~Ve   V3# R3# )zÈResolve the client actually used for vision tasks.

Direct endpoint overrides beat provider selection; explicit providers may force
experimental backends; auto mode only tries backends known to work.
r  r¢  r�  )r³  r¢   r  r  ro  rç  Nr8  r`  T)rV   rU   ro  rç  rì  )ro  rç  rì  >   rj   r¢  )
rã  rS	  r]	  rC  r…	  rq	  rm	  ry	  Ú_ZAI_OPENAI_VISION_URLSr=  )rŸ  r³  rV   rU   r¢   rç  ré  rô  r3  r4  r5  r6  Úraw_requestedÚprovider_for_base_overrider¯   r9  rœ  rÂ  Ú_zai_urls   &&$$$$             r-   r<  r<  0  sF  € ô & lÓ3€GÜXtØ�( 8óYÑU€IÐ0ÐDUð  )Ô*DÀYÓ*O�9ßß2;À	ÐQ]Ô@]¡YÐckÐ"Ü5Ø&ÈØ/Ø&ô
Ñˆð
 *À6ÒCU°KÐ`Ð`Ð[_Ð`Ð`Ø�FÔÜ! 'Ð;LÓYÐYØÔ/Ô/Ü%CÀIÓ%^Ñ"ˆ�]Ü& y°+¸}ÈnÓiÐiØ�EÔß/ˆHÜ"4Ø¨:ÀØ(×0Ð0¨DÐ;MÐ\cØô#ÑˆFð
 Ô!Ü.¨yÀ+Ð_iÓjÒjñ 0ô -Ø zÐ\cÐosôÑ€Fð ¨fÒ.@˜{ÐKÐKÀdÐKÐKr/   c                ó$   € V ^8„  d   QhR\         /# r(   rT  )r,   s   "r-   r.   r.   ]  s   € ÷ ;ñ ;¤$ñ ;r/   c                 ó2   € \         '       d   \        4       # / # )zNReturn extra_body kwargs (Nous Portal product tags when Nous-backed, else {}).)r,  r‚  rD   r/   r-   Úget_auxiliary_extra_bodyrŽ	  ]  s   € ç!2Ó!2ÔÓÐ:¸Ð:r/   c                óR   € V ^8„  d   QhR\         R\        \        ,          R\        /# )r)   rQ  r³  r*   )rW  r   rX   r¤   )r,   s   "r-   r.   r.   b  s%   € ÷ 
!ñ 
!¤cð 
!´X¼cµ]ð 
!Ìdñ 
!r/   c               ó  € \        \        4       4      ;'       g    Rp\        R4      '       * ;'       d3    \        4       RJ ;'       d    VR9   ;'       g    VP	                  R4      pV'       g   \        V4      '       d   RV /# RV /# )zÂMax-tokens kwarg for the auxiliary provider: direct OpenAI/Copilot and newer OpenAI-family
models (by ``model`` name, so custom endpoints fronting gpt-5.x are caught) need max_completion_tokens.rj   r  Nz.githubcopilot.comr$  r#  )ræ  úapi.githubcopilot.com)r‹   r  rÚ  r‹  r�  r�   )rQ  r³  Ú_custom_hostÚdirect_openai_familys   &$  r-   Úauxiliary_max_tokens_paramr”	  b  s�   € ô %Ô%=Ó%?Ó@×FÐFÀB€LäÐ0Ó1Ô1÷ 	yð 	y´oÓ6GÈ4Ð6O÷ 	yð 	yØÐHÑH×wÐwÈL×LaÑLaÐbvÓLwð ÷ ÔAÀ%×HÒHØ'¨Ð/Ð/Ø˜%Ð Ð r/   c                   óp   a € ] tR tRt o RtRtV 3R lR ltV 3R lR ltV 3R lR ltV 3R	 lR
 lt	Rt
V tR# )Ú_CallableCacheDiscriminatori|  zBHash a credential callback by identity without exposing its state.c                ó$   <€ V ^8„  d   QhRS[ RR/# )r)   rZ  r*   Nr9  )r,   rQ   s   "€r-   r.   Ú(_CallableCacheDiscriminator.__annotate__�  s   ø€ ÷ "ñ "¡ð "¨ñ "r/   c                ó   € Wn         R # r8   ©Ú	_callback)r9   rZ  s   &&r-   r\   Ú$_CallableCacheDiscriminator.__init__�  s   € Ø!Žr/   c                ó    <€ V ^8„  d   QhRS[ /# r(   rÍ  )r,   rQ   s   "€r-   r.   r˜	  „  s   ø€ ÷ "ñ "™#ñ "r/   c                ó,   € \        V P                  4      # r8   )r2  r›	  rE   s   &r-   Ú__hash__Ú$_CallableCacheDiscriminator.__hash__„  s   € Ü�$—.‘.Ó!Ð!r/   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r)   Úotherr*   )rè  rm   )r,   rQ   s   "€r-   r.   r˜	  ‡  s   ø€ ÷ dñ d™Fð d¡tñ dr/   c                ób   € \        V\        4      ;'       d    V P                  VP                  J # r8   )r?   r–	  r›	  )r9   r¢	  s   &&r-   Ú__eq__Ú"_CallableCacheDiscriminator.__eq__‡  s(   € Ü˜%Ô!<Ó=×cÐcÀ$Ç.Á.ÐTY×TcÑTcÐBcÐcr/   c                ó    <€ V ^8„  d   QhRS[ /# r(   rW   )r,   rQ   s   "€r-   r.   r˜	  Š  s   ø€ ÷ $ñ $™#ñ $r/   c                ó   € R # )z<callable-api-key>rD   rE   s   &r-   rF   Ú$_CallableCacheDiscriminator.__repr__Š  s   € Ù#r/   rš	  N)rH   rI   rJ   rK   rL   rM   r\   rŸ	  r¤	  rF   rN   rO   rP   s   @r-   r–	  r–	  |  s7   ø‡ € ÙLà€I÷"ð "÷"ð "÷dð d÷$ö $r/   r–	  c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r)   r8  rQ  r*   ra   )r,   s   "r-   r.   r.   Ž  s!   € ÷ ñ ¬ð ´Cð ¼Cñ r/   c                ó  € V R8X  d   \        V4      '       d   \        V4      # V R8X  dV   \        V\        4      '       d@   V'       d8   R\        P
                  ! VP                  R4      ^R7      P                  4       3# V# )z;Return a hashable, secret-safe runtime cache-key component.rU   zapi-key-digestr  r  )rÔ   r–	  r?   rX   r  r  r  r  )r8  rQ  s   &&r-   Ú_runtime_cache_discriminatorr«	  Ž  sa   € à�	Ôœh uŸošoÜ*¨5Ó1Ð1Ø�	Ôœj¨´×4Ò4¿Ø ¤'§/¢/°%·,±,¸wÓ2GÐUWÔ"X×"_Ñ"_Ó"aÐbÐbØ€Lr/   rB  c                ó6  € V ^8„  d   QhR\         R\        R\        \         ,          R\        \         ,          R\        \         ,          R\        \        \         \        3,          ,          R\        R\        \         ,          R	\        \         ,          R
\
        /
# )r)   rŸ  r¢   rV   rU   ro  rç  rì  rB  r³  r*   ©rX   rm   r   r¤   r   rù  )r,   s   "r-   r.   r.   —  s”   € ÷ Qñ QÜðQÜ"&ðQÜ2:¼3µ-ðQä”c�]ðQä-5´c­]ðQô œ4¤¤S �>Õ*ðQô ?CðQô ”3�-ð	Qô (0´¥}ð	Qô
 ñQr/   c                ó¾  a€ \        V4      oV R 8X  d;   \        ;QJ d    . V3R l\         4       F  NK  	  5M! V3R l\         4       4      MRp	V R 8X  d   T;'       g    R\        V4      3MRp
\	        WR7      pT;'       g    SP                  RR4      p\        RT;'       g    R4      p\        4       YT;'       g    RYÔ;'       g    RW–W«V\        WVS4      3# )r¢  c              3   ó\   <"  € T F!  p\        VSP                  VR 4      4      x € K#  	  R# 5i)rj   N)r«	  rž   )r#  r$  ré  s   & €r-   r%  Ú$_client_cache_key.<locals>.<genexpr>Ÿ  s*   øé € ÐjÑUiÐPQÔ4°Q¸¿¹ÀAÀrÓ8J×KÐKÓUiùs   ƒ),rj   ©rç  r³  rU   rD   )	rã  rù  rÕ  rI  r  rž   r«	  r‰   Ú_borrowed_main_credential_key)rŸ  r¢   rV   rU   ro  rç  rì  rB  r³  Úruntime_keyÚtask_keyÚ	pool_hintÚ	model_keyÚapi_key_keyré  s   &$$$$$$$$     @r-   Ú_client_cache_keyr¸	  —  sâ   ø€ ô & lÓ3€Gànvð  {Aô  oA—%”%ÔjÕUiÓj—%‘%ÔjÕUiÓjÔjð  GI€KØ?GÈ6Ô?Q�—
�
˜Ô4°TÓ:Ñ;ÐWY€HÜ  ÔE€Ið ×1Ð1˜Ÿ™ W¨bÓ1€IÜ.¨y¸'¿-¸-ÀRÓH€Kô Ó˜x°X·^°^ÀÀ[×R`ÐR`Ð^`Ðbmð  {Cð  PYÜ)¨(¸gÀwÓOðQð Qr/   c          
      óŒ   € V ^8„  d   QhR\         R\        \         ,          R\        R\        \         \        3,          R\        /# )r)   rŸ  rV   rU   ré  r*   )rX   r   r   r¤   rù  )r,   s   "r-   r.   r.   ¬  sI   € ÷ @ñ @¬Cð @¼8ÄC½=ð @ÔSVð @ÔaeÔfiÔknÐfnÕaoð @Ôtyñ @r/   c                ó  € \        V 4      R8w  d   R# V'       g/   VP                  RR4      \        RVP                  RR4      4      3# \        V4      '       d   R# \	        \        V4      P                  4       4      p\        RV4      3# )a	  What a keyless ``custom`` route borrows from the main runtime when its client is built.

The client keeps that credential for its lifetime, so it joins the cache key: otherwise a
later runtime (another session, a ``/model`` switch) is served the earlier one's key.
r�  rV   rj   rU   rD   )r°  rž   r«	  rá  rW  r¡  r¨  )rŸ  rV   rU   ré  Úborroweds   &&&& r-   r²	  r²	  ¬  s€   € ô ˜xÓ(¨HÔ4Øˆ	ßà—‘˜J¨Ó+Ô-IÈ)ÐU\×U`ÑU`ÐajÐlnÓUoÓ-pÐqÐqä˜'×"Ò"Øˆ	Ü0Ô1DÀXÓ1N×1TÑ1TÓ1VÓW€HÜ(¨°HÓ=Ð?Ð?r/   c                ó$   € V ^8„  d   QhR\         /# r(   r9  )r,   s   "r-   r.   r.   ¾  s   € ÷ ñ œSñ r/   c                 óP   €  ^ RI p V P                  4       #   \         d     R# i ; i)z\``asyncio.get_event_loop()`` or None when no loop can be obtained (async cache-key binding).N)rë  Úget_event_looprc   )Ú_aios    r-   Ú_current_event_looprÀ	  ¾  s+   € ðÛØ×"Ñ"Ó$Ð$øÜô Úðús   ‚ –%¤%Ú
bound_loopc          
      ób   € V ^8„  d   QhR\         R\        R\        \        ,          R\        RR/# )r)   r±  r¯   rÂ  rÁ	  r*   N)rù  r   r   rX   )r,   s   "r-   r.   r.   Ç  s=   € ÷ Gñ G¤Eð G´3ð GÄxÔPSÅ}ð GÔehð GÐtxñ Gr/   c                ó  € \        V\        4      '       d   R # \        ;_uu_ 4        \        P	                  V 4      pVe    V^ ,          VJd   \        V^ ,          4       WV3\        V &   R R R 4       R #   + '       g   i     R # ; ir8   )r?   rS   rô  rõ  rž   Ú_close_cached_client)r±  r¯   rÂ  rÁ	  Ú	old_entrys   &&&$ r-   Ú_store_cached_clientrÆ	  Ç  sd   € Ü�&Ô-×.Ò.Ùß	Ö	Ü!×%Ñ% iÓ0ˆ	ØÒ  Y¨q¥\¸Ó%?Ü  ¨1¥Ô.Ø$*¸:Ð#FŒ�iÑ ÷	 
×	×	Ò	ús   §AA5Á5B	Úlookup_modelÚlookup_taskc                ó¦  € V ^8„  d   QhR\         R\        \         ,          R\        R\        \         ,          R\        \         ,          R\        \         ,          R\        \        \         \        3,          ,          R\        R	\        \         ,          R
\        \         ,          R\
        \        \        ,          \        \         ,          3,          /# )r)   Úcache_providerr³  r¢   rV   rU   ro  rç  rì  rÇ	  rÈ	  r*   )rX   r   rm   r¤   r   rù  )r,   s   "r-   r.   r.   Ñ  s§   € ÷ $ñ $Üð$Ü#+¬C¥=ð$Ü>Bð$ÜNVÔWZÍmð$ä”c�]ð$ä-5´c­]ð$ô œ4¤¤S �>Õ*ð$ô ?Cð$ô œ3•-ð	$ô 6>¼cµ]ð	$ô
 Œ8”C�=œ(¤3�-Ð'Õ(ñ$r/   c        
        ó  € \        RVR7      p
V
f   RV3# V
w  r¼\        W¼R7      pV'       d   \        4       MRpV'       d   \        YÑ;'       g    RVR7      w  ppMYÑpp\	        WW4WVWyVR7	      p\        VVVVR7       VV3# )	um  Refresh Nous runtime creds, rebuild the client, and replace the cache entry.

``model`` is the resolved wire model stored as the entry's usable model and returned. The
cache KEY MUST be built from ``lookup_model``/``lookup_task`` â€” the model and task as passed
to ``_get_cached_client`` when the stale client was acquired â€” so the fresh client overwrites
the exact entry the stale one is served from. Keying on the resolved model or an empty task
would leave the expired client immortal and every auxiliary call 401ing forever.

See #56889.
For ``provider == "auto"`` the task participates in the cache key (task-specific fallback policy), so it
MUST be carried into the key here for the same reason as ``lookup_model``; otherwise an auto-provider
client refreshed on a 401 lands under the ``task=""`` key while the stale entry survives under the
task-scoped key (#58894).
T)r•  r¤  Nr[   rj   ró  ©r¢   rV   rU   ro  rç  rì  rB  r³  )rÁ	  )r®  r¸   rÀ	  r   r¸	  rÆ	  )rÊ	  r³  r¢   rV   rU   ro  rç  rì  rÇ	  rÈ	  ré  Ú	fresh_keyÚfresh_base_urlrœ  Úcurrent_loopr¯   r9  r±  s   $$$$$$$$$$        r-   Ú_refresh_nous_auxiliary_clientrÐ	  Ñ  s’   € ô( (°dÈwÔW€GØ‚Ø�Uˆ{ÐØ 'Ñ€IÜ'°	ÔS€Kß,6Ô&Ô(¸D€LßÜ.¨{¿K¸KÀRÐS\Ô]Ñˆ‘à)�ˆÜ!Ø¸ØÀ	Øô€Iô
 ˜ F¨KÀLÕQØ�;ÐÐr/   c                ó   € V ^8„  d   QhRR/# r½   rD   )r,   s   "r-   r.   r.   ø  s   € ÷ ñ  ñ r/   c                 óT   €  ^ RI Hp  R V n        R#   \        \        3 d     R# i ; i)a«  Monkey-patch ``AsyncHttpxClientWrapper.__del__`` to be a no-op.

The SDK's ``__del__`` schedules ``aclose()`` on the *running* loop, but the transport is
bound to the loop the client was created on; when that loop is dead this raises "Event loop
is closed" into prompt_toolkit's loop. Safe because cached clients are closed explicitly and
the OS reaps the rest. Call once at CLI startup, before any ``AsyncOpenAI`` is created.
©ÚAsyncHttpxClientWrapperc                 ó   € R # r8   rD   rE   s   &r-   r¹  Ú(neuter_async_httpx_del.<locals>.<lambda>  s   € ±tr/   N)Úopenai._base_clientrÔ	  Ú__del__rª   r«   rÓ	  s    r-   Úneuter_async_httpx_delrÙ	  ø  s*   € ðÝ?Ù*;ÐÖ'øÜœÐ(ô Úðús   ‚ ’'¦'c                ó(   € V ^8„  d   QhR\         RR/# )r)   r¯   r*   Nr9  )r,   s   "r-   r.   r.     s   € ÷ .ñ .¤Sð .¨Tñ .r/   c                óú   € \         P                  ! \        4      ;_uu_ 4        ^ RIHp \        V RR4      pVe%   \        VRR4      '       g   VP                  Vn        RRR4       R#   + '       g   i     R# ; i)uµ   Mark the httpx AsyncClient inside an AsyncOpenAI client as closed so ``__del__`` won't
schedule ``aclose()`` on a dead loop. Skips the full async close â€” the OS drops connections.)ÚClientStaterô  NÚ	is_closedT)r–  r—  rŸ   Úhttpx._clientrÜ	  rq   ÚCLOSEDÚ_state)r¯   rÜ	  Úinners   &  r-   Ú_force_close_async_httpxrâ	    sV   € ô 
×	Ò	œY×	'Õ	'Ý-Ü˜ 	¨4Ó0ˆØÒ¤W¨U°KÀ×%FÒ%FØ&×-Ñ-ˆEŒL÷	 
(×	'×	'Ò	'ús   £<A)Á)A:	c                ó4   € V ^8„  d   QhR\         R\         RR/# )r)   Úclose_resultr¯   r*   Nr9  )r,   s   "r-   r.   r.     s!   € ÷ )ñ )¬ð )´Sð )¸Tñ )r/   c                óÒ  a a€ R VV 3R llpV! 4       p ^ RI p VP                  4       pVP                  V4      pR R lpVP                  V4       RpR#   \         d    TP                  T4        R# i ; i  \         dc    TeP   \        P                  ! \        4      ;_uu_ 4        TP                  4        RRR4       M  + '       g   i     M; i\        S4        R# i ; i)z=Finish an async close without leaking an unawaited coroutine.c                ó   € V ^8„  d   QhRR/# r½   rD   )r,   s   "r-   r.   Ú+_schedule_async_close.<locals>.__annotate__  s   € ÷ -ñ - ñ -r/   c               “   ó‚   <"  €  SG R j  x€L
  \        S 4       R #  L  \          d     Li ; i  \        S 4       i ; i5ir8   )rŸ   râ	  )r¯   rä	  s   €€r-   Ú_await_closeÚ+_schedule_async_close.<locals>._await_close  s?   øé € ð	-Ø×Ðô % VÖ,ñ	 øÜô 	Ùð	ûô % VÕ,üs0   ƒ?… Š‹ �?œ ž,©/ «,¬/ ¯<¼?Nc                ó   € V ^8„  d   QhRR/# r½   rD   )r,   s   "r-   r.   rç	  $  s   € ÷ /ñ /¨Dñ /r/   c                 ó¤   € \         P                  ! \        4      ;_uu_ 4        V P                  4        R R R 4       R #   + '       g   i     R # ; ir8   )r–  r—  ra  r`  )Úcompleted_tasks   &r-   Ú_consumeÚ'_schedule_async_close.<locals>._consume$  s.   € Ü×(Ò(¬×7Õ7Ø"×,Ñ,Ô.÷ 8×7×7Ò7ús	   £>¾A	)rë  Úget_running_loopÚcreate_taskÚadd_done_callbackrc   rr  rŸ   r–  r—  rè  râ	  )rä	  r¯   ré	  Úrunnerr¿	  ÚlooprB  rî	  s   ff      r-   Ú_schedule_async_closerõ	    sÁ   ù€ ÷-ñ -ñ ‹^€Fð)Ûð	Ø×(Ñ(Ó*ˆDð ×#Ñ# FÓ+ˆDõ/ð ×"Ñ" 8Ô,ØŠFøô ô 	Ø�H‰H�V×ð	ûô ô )ØÒÜ×$Ò$¤Y×/Õ/Ø—‘”÷ 0×/×/Ð/úä  ×(ð	)úsK   •A9 šA ª*A9 ÁA6Á2A9 Á5A6Á6A9 Á91C&Â*CÂ;	C&ÃCÃC&Ã%C&Úclose_asyncc                ó4   € V ^8„  d   QhR\         R\        RR/# )r)   r¯   rö	  r*   Nr  )r,   s   "r-   r.   r.   0  s!   € ÷ %ñ %¤ð %´dð %Àtñ %r/   c               óà  € V f   R# \        V RR4      p\        V4      '       g   \        V 4       R#  V! 4       p\        P
                  ! T4      '       d^   T'       d   \        Y04       R# \        P                  ! \        4      ;_uu_ 4        TP                  4        RRR4       \        T 4       R# \        T 4       R#   \         d    \        T 4        R# i ; i  + '       g   i     LG; i)zBClose one cached client, awaiting async transports only when safe.Nrè  )
rq   rÔ   râ	  rŸ   ÚinspectÚisawaitablerõ	  r–  r—  rè  )r¯   rö	  rG  rä	  s   &$  r-   rÄ	  rÄ	  0  s¹   € à‚~ÙÜ�v˜w¨Ó-€HÜ�H×ÒÜ  Ô(ÙðÙ“zˆô ×Ò˜<×(Ò(ßÜ! ,Ô7ñ 	ô ×$Ò$¤Y×/Õ/Ø×"Ñ"Ô$÷ 0ä$ VÔ,ÙÜ˜VÖ$øô ô Ü  Ô(Úðú÷ 0×/ús   ³C  ÂCÃ CÃCÃC-	c                ó   € V ^8„  d   QhRR/# r½   rD   )r,   s   "r-   r.   r.   J  s   € ÷ >ñ > ñ >r/   c                 óÖ  € \         ;_uu_ 4        \        P                  4        U u. uF!  q ^ ,          f   K  V ^ ,          V ^,          3NK#  	  pp \        P                  4        RRR4        ^ RIpVP                  4       pX F8  w  rEVRJ;'       d    VP                  4       ;'       g    WSJ p\        WFR7       K:  	  R# u up i   + '       g   i     Lj; i  \         d    Rp Lgi ; i)zàClose all cached clients; call at CLI shutdown *before* the loop closes.

Snapshot+clear under the lock, close outside it: async teardown can block while an owner
loop drains, and holding the lock would convoy every caller.
N©rö	  )	rô  rõ  rÃ  re  rë  rð	  rc   rÝ	  rÄ	  )r¹  Úclientsr¿	  Úrunning_loopr¯   Ú
owner_looprö	  s          r-   Úshutdown_cached_clientsr
  J  sÈ   € ÷ 
Ö	Ü5B×5IÑ5IÔ5KÓdÑ5K¨EÐUVÍxÔ'�E˜!•H˜e A�hÓ'Ñ5KˆÐdÜ×ÑÔ÷ 
ðÛØ×,Ñ,Ó.ˆó &Ñˆð !¨Ð,×gÐg°*×2FÑ2FÓ2H×2fÐ2fÈJÐLfˆÜ˜V×=ó	 &ùò e÷ 
×	ûô ô ØŠðús3   �C¦C ·C ÁCÁ,C Ã CÃC	ÃC(Ã'C(c                ó   € V ^8„  d   QhRR/# r½   rD   )r,   s   "r-   r.   r.   _  s   € ÷ 7ñ 7 Tñ 7r/   c            	     óp  € \         ;_uu_ 4        \        P                  4        U Uu. uF;  w  rV^,          f   K  V^,          P                  4       '       g   K1  W^ ,          3NK=  	  pp pV F  w  r\        V  K  	  RRR4       X F  w  rE\	        VRR7       K  	  R# u upp i   + '       g   i     L0; i)z‡Force-close cached async clients whose loop is closed; call after each agent turn
(defense-in-depth behind ``neuter_async_httpx_del``).NTrý	  )rô  rõ  r‡  rÝ	  rÄ	  )r  r¹  r4  rô  Ú_keyr¯   s         r-   Úcleanup_stale_async_clientsr
  _  sŽ   € ÷ 
Ö	Ü3@×3FÑ3FÔ3HÔzÑ3H¡Z SÈEÐRSÍH”ÐejÐklÕem×ewÑew×ey”�#˜Q•x“Ñ3HˆÑzÛ!‰LˆCÜ˜cÒ"ñ "÷ 
ó ‰ˆÜ˜V°×6ó ùó {÷ 
×	ús'   �B%§B
»B
ÁB
Á(B%ÂB%Â%B5	c          	      óŠ   € V ^8„  d   QhR\         R\        \        ,          R\        \        ,          R\        \        ,          /# )r)   r¯   r³  Úcached_defaultr*   ræ  )r,   s   "r-   r.   r.   j  s7   € ÷ 
#ñ 
#œ#ð 
#¤h¬s¥mð 
#ÄXÌcÅ]ð 
#ÔW_Ô`cÕWdñ 
#r/   c           
     óX  € V'       d˜   RV9   d‘   \         ;QJ d5    R V \        V RR4      \        V RR4      3 4       F  '       g   K   RM*	  RM&! R V \        V RR4      \        V RR4      3 4       4      ;'       g    \        T;'       d    RV9   4      pV'       g   V# T;'       g    T# )z¾Keep slash-bearing model IDs only for cached clients that accept ``vendor/model`` (OpenRouter
or a slash-bearing default). Mirrors the resolve_provider_client() guard, which cache hits skip.rµ  c           
   3   óŠ   "  € T F9  pT;'       d+    \        \        \        VR R4      ;'       g    R4      R4      x € K;  	  R# 5i)rV   rj   r÷  N)rŠ   rX   rq   )r#  r@   s   & r-   r%  Ú _compat_model.<locals>.<genexpr>n  sA   é € ð 
áb�ð ×cÐcÔ)¬#¬g°c¸:ÀrÓ.J×.PÐ.PÈbÓ*QÐSbÓcÔcÛbùs
   ‚A�3Arô  Nr¯   TF)r3  rq   rm   )r¯   r³  r
  Úaccepts_slashs   &&& r-   Ú_compat_modelr
  j  s¬   € ÷ �˜”ß›ñ 
à¤¨°	¸4Ó @Ä'È&ÐRZÐ\`ÓBaÑbó
ŸŸšñ 
à¤¨°	¸4Ó @Ä'È&ÐRZÐ\`ÓBaÑbó
ó 
÷ <ð <ô �.×:Ð: S¨NÑ%:Ó;ð 	÷ Ø!Ð!Ø×"Ð"�NÐ"r/   c                ód  € V ^8„  d   QhR\         R\         R,          R\        R\         R,          R\         R,          R\         R,          R\        \        \         \        3,          ,          R	\        R
\        \         ,          R\
        \        \        ,          \        \         ,          3,          /
# )r)   rŸ  r³  Nr¢   rV   rU   ro  rç  rì  rB  r*   r­	  )r,   s   "r-   r.   r.   w  s¨   € ÷ H?ñ H?ÜðH?Ü �*ðH?Ü9=ðH?ÜQTÐW[ÕQ[ðH?ä�4�ZðH?ä*-°­*ðH?äKSÔTXÔY\Ô^aÐYaÕTbÕKcðH?ô ðH?ô $,¬C¥=ðH?ô Œ8”C�=œ(¤3�-Ð'Õ(ñ	H?r/   c	                ó¦  € ^ RI Hp	 V	! WV4      p
V
e   V
^ ,          '       g   R# V
w  r4V'       d   \        4       MRp\        V4      p\	        WW4VWgW�R7	      p\
        ;_uu_ 4        V\        9   d›   \        V,          w  rïpV'       * ;'       g.    VRJ;'       d"    VVJ ;'       d    VP                  4       '       * pV'       d   V\        WáV4      3uuRRR4       # \        TVRJ;'       d    VP                  4       R7       \        V RRR4       TpV'       gA   \        V \        V 4      R 4      pVe&   \        V V4      ;pe   \        V4      ;'       g    Tp\        WW#VW\WxR7	      w  ppVe   \        4       '       d   TT;'       g    T3# Ve‡   \
        ;_uu_ 4        V\        9  dE   \!        \        4      \"        8¼  d    \        \%        \'        \        4      4       K7  VVV3\        V&   M Tp\        V,          w  ppp\        VVR7       RRR4       V\        VVV4      3#   + '       g   i     EL); i  + '       g   i     L3; i)aÑ  Get or create a cached client for the given provider.

Async clients bind to the loop they were created on, so every async hit validates the cached
loop is the current, open loop; stale entries are replaced in place (bounded, no cross-loop reuse).

This keeps cache size bounded to one entry per unique provider config, preventing the fd-exhaustion that
previously occurred in long-running gateways where recycled worker threads created unbounded entries
(#10200).
rJ	  NrÌ	  rý	  c                 ó   € \        V R 4      # )r±  )r¨  )r‰  s   &r-   r¹  Ú$_get_cached_client.<locals>.<lambda>¤  s   € Ô]xÐyzð  }Fô  ^Gr/   )r  r  ro  rç  rì  rB  rß  )rL	  rK	  rÀ	  rã  r¸	  rô  rõ  rÝ	  r
  rÄ	  ry   r°  r¶  r¼  rC  rs   rŸ  Ú_CLIENT_CACHE_MAX_SIZEÚnextÚiter)rŸ  r³  r¢   rV   rU   ro  rç  rì  rB  rK	  rø   rÏ	  ré  r±  Úcached_clientr
  Úcached_loopÚloop_okÚeffective_api_keyÚ_poolÚ_per¯   rÂ  Úbuilt_clientr¢  s   &&&&&&&&&                r-   r=  r=  w  s5  € õ  EÙ" 8°wÓ?€EØÒØ�Q�xŒxØÐØ!Ñˆß,6Ô&Ô(¸D€LÜ% lÓ3€GÜ!Ø°(ÐV^Ø!¸Tô€I÷ 
Ö	ØœÔ%Ü9FÀyÕ9QÑ6ˆM¨;Ø$”n÷ ð Ø 4Ð'×gÐg¨K¸<Ð,G×gÐgÐP[×PeÑPeÓPgÔLgð ÷ Ø$¤m°MÈ.Ó&YÐY÷ 
Ò	ô ! ¸KÈtÐ<S×<oÐ<oÐXc×XmÑXmÓXoÕpÜ˜iÐ(÷ 
ð  ÐßÜ% hÔ0GÈÓ0Qñ  TGó  HˆØÒÔ)9¸(ÀEÓ)JÐ"J #Ò!WÜ 5°cÓ :× EÐ E¸gÐÜ3Ø˜ÐRcØ¸9ôÑ€FˆMð ÒÔ/×1Ò1ð �u×-Ð- Ð-Ð-ØÒßÖØ¤Ô-ô œ-Ó(Ô,BÔBÜ%¤d¬4´Ó+>Ó&?Ò@Ø,2°MÀ<Ð+P”˜iÒ(à%�Ü+8¸Õ+CÑ(�˜ qä$ \¸zÕJ÷  ð ”= ¨°Ó>Ð>Ð>÷Y 
×	Ð	ú÷@  ×ús=   Á&)H,ÂH,ÂH,Â(H,ÃH,ÃH,Ã/H,Æ%A0I È,H=	É I	c          	      óŠ   € V ^8„  d   QhR\         R\        \         ,          R\        \         \        \         ,          3,          /# )r)   ÚprovÚmdlr*   ©rX   r   rù  )r,   s   "r-   r.   r.   Ê  s3   € ÷ ñ œsð ¬´#­ð ¼5ÄÄhÌsÅmÐASÕ;Tñ r/   c                ó”   € V P                  4       P                  4       R8w  d   W3# \        V4      w  r#V'       d   V'       d   W#3# W3# )z´Resolve an *explicit* ``provider: moa`` to its preset's aggregator slot (_resolve_auto_route()
only unwraps the implicit case; "moa" isn't in PROVIDER_REGISTRY and would dead-end).rD  )r¨  r©  rK  )r
  r
  rI  rJ  s   &&  r-   Ú_unwrap_moa_providerr 
  Ê  sF   € ð ‡z�zƒ|×ÑÓ˜uÔ$ØˆyÐÜ5°cÓ:Ñ€LßŸ	ØÐ&Ð&Øˆ9Ðr/   c                óF   € V ^8„  d   QhR\         \        ,          R\        /# )r)   r
  r*   r»  )r,   s   "r-   r.   r.   Õ  s   € ÷ ñ ¬8´C­=ð ¼Tñ r/   c                ó  € \        T ;'       g    R4      P                  4       P                  4       pVR9   g   VP                  R4      '       d   R# V\        9   d   R# \        V4      '       d   R# \        V4      '       d   R# R# )zSTrue when a first-class provider keeps its identity alongside an explicit base_url.rj   r£  FT>   rj   r¢  r�  )rX   r¨  r©  rª  r•  Ú_builtin_provider_presentÚ_named_custom_provider_present)r
  r­  s   & r-   Ú _preserve_provider_with_base_urlr%
  Õ  sl   € ä�T—Z�Z˜R“×&Ñ&Ó(×.Ñ.Ó0€JØÐ+Ô+¨z×/DÑ/DÀY×/OÒ/OÙØÔ*Ô*Ùô ! ×,Ò,ÙÜ% j×1Ò1ÙÙr/   c                ó0   € V ^8„  d   QhR\         R\        /# r_   r.  )r,   s   "r-   r.   r.   è  s   € ÷ 
ñ 
¤Cð 
¬Dñ 
r/   c                óP   €  ^ RI Hp V! V 4      RJ#   \         d	    T R9   u # i ; i)a  Look up *name* in the built-in provider registry, returning False
(not raising) when the catalog fails to load.

Used by ``_preserve_provider_with_base_url`` so a built-in lookup
exception cannot suppress the parallel user-defined provider lookup
(#76602).
)Úget_providerN>   r  rÙ  r<  r·  ú
qwen-oauthúcopilot-acpr¦  úminimax-oauth)rÅ  r(
  rŸ   )r`   r(
  s   & r-   r#
  r#
  è  s=   € ð
Ý5á˜DÓ!¨Ð-Ð-øÜô 
ð ð 	
ñ 	
ò 		
ð
ús   ‚ ’%¤%c                ó0   € V ^8„  d   QhR\         R\        /# r_   r.  )r,   s   "r-   r.   r.     s   € ÷ ñ ¬ð ´ñ r/   c                óH   €  ^ RI Hp V! V 4      RJ#   \         d     R# i ; i)uJ  Look up *name* in the user-defined ``providers:`` section of
config.yaml, returning False when the config is unavailable or
fails to load.

Used by ``_preserve_provider_with_base_url`` so a user-defined
provider remains preserved even when the built-in registry raises
(parallel lookup; each side fails independently â€” #76602).
r€  NF)rú  r�  rŸ   )r`   r�  s   & r-   r$
  r$
    s.   € ðÝJá)¨$Ó/°tÐ;Ð;øÜô ò ðús   ‚ ’! !c                óN  € V ^8„  d   QhR\         R,          R\         R,          R\         R,          R\        \         ,          R\        \         ,          R\        \         \        \         ,          \        \         ,          \        \         ,          \        \         ,          3,          /# )r)   rB  NrŸ  r³  rV   rU   r*   r
  )r,   s   "r-   r.   r.     s„   € ÷ JAñ JAÜ
��*ðJAÜ'*¨T¥zðJAÜADÀtÅðJAÜ^fÔgjÕ^kðJAä”c�]ðJAô Œ3”œ•œx¬�}¬h´s­m¼XÄc½]ÐJÕKñJAr/   c                ó�  € R;p;p;p;r‰V '       Ed�   \        V 4      p
\        V
P                  RR4      4      P                  4       ;'       g    Rp\        V
P                  RR4      4      P                  4       ;'       g    Rp\        V
P                  RR4      4      P                  4       ;'       g    Rp\        V
P                  RR4      4      P                  4       ;'       g    RpV'       gi   \        V
P                  R4      ;'       g    V
P                  R4      ;'       g    R4      P                  4       pV'       d   \	        V4      ;'       g    Rp\        \        V
P                  R	4      ;'       g    R4      4      P                  4       ;'       g    Rp	V'       d   VP                  4       R
8X  d   RpV'       d   VP                  4       R
8X  d   RpT;'       g    TpV'       d\   \        V4      P                  4       P                  4       R8X  d0   \        W4      w  rV'       d   VP                  4       R8w  d   RpRpMdV'       d]   \        V4      P                  4       P                  4       R8X  d1   \        W\4      w  rVV'       d   VP                  4       R8w  d   TpRpRp^ RIH	p V'       d   V! W4      w  rV'       d   V! WW4      w  rWV'       d-   VR
8w  d&   V'       g   V'       d   VRV39   d   TpV'       g   TpV'       d   \        V4      '       d   TMRpWìW4V	3# V'       d   WW4V	3# V'       dL   V'       dD   \        T;'       g    R4      P                  4       P                  4       \        9   d   TMRpWìWxV	3# V'       d   V'       d   VR
8w  d   W\VRV	3# V'       d   VR
8w  d   W\WxV	3# R
VRRV	3# )aT  Determine (provider, model, base_url, api_key, api_mode) for a call.

Priority: explicit args > config auxiliary.{task}.* > "auto". A bare base_url means custom,
but a first-class provider + base_url keeps the provider identity so its auth/transport
shaping still applies. api_mode is "chat_completions", "codex_responses", or None (auto).
NrŸ  rj   r³  rV   rU   r¨  r©  ro  r¢  rD  )Úexpand_direct_api_aliasr�  )rG  rX   rž   r¨  rÚ  r~   r©  r 
  Ú"hermes_cli.runtime_provider_customr0
  r%
  r•  )rB  rŸ  r³  rV   rU   r@  r  rA  Úcfg_api_keyr6  r¸  Úcfg_key_envr3  r0
  Úkepts   &&&&&          r-   rS	  rS	    s+  € ð QUÐT€LÐT�9ÐT˜|ÐT¨kß€tÜ0°Ó6ˆÜ˜;Ÿ?™?¨:°rÓ:Ó;×AÑAÓC×KÐKÀtˆÜ˜Ÿ™¨°Ó4Ó5×;Ñ;Ó=×EÐEÀˆ	Ü˜;Ÿ?™?¨:°rÓ:Ó;×AÑAÓC×KÐKÀtˆÜ˜+Ÿ/™/¨)°RÓ8Ó9×?Ñ?ÓA×IÐIÀTˆßÜ˜kŸo™o¨iÓ8×`Ð`¸K¿O¹OÈMÓ<Z×`Ð`Ð^`Óa×gÑgÓiˆKßÜ-¨kÓ:×BÐB¸d�ô 0´°K·O±OÀJÓ4O×4UÐ4UÐSUÓ0VÓW×]Ñ]Ó_×gÐgÐcgÐ÷ �—‘“ &Ô(Øˆß�Y—_‘_Ó&¨&Ô0Øˆ	Ø×'Ð'˜i€N÷ ”C˜“M×'Ñ'Ó)×/Ñ/Ó1°UÔ:Ü#7¸Ó#QÑ ˆß˜Ÿ™Ó(¨EÔ1ØˆHØˆGøß	œ#˜lÓ+×1Ñ1Ó3×9Ñ9Ó;¸uÔDÜ"6°|Ó"TÑˆß˜L×.Ñ.Ó0°EÔ9Ø&ˆNØˆLØˆKõ KßÙ4°XÓHÑˆßÙ%<¸\Ó%XÑ"ˆ÷
 �H Ô&¯x¿LÈ\Ð^bÐdlÐ]mÔMmØˆßØ!ˆGßÜ;¸H×EÒE‰xÈ8ˆØ XÐ8IÐIÐIßØ¨Ð<MÐMÐMßŸÜ" <×#5Ð#5°2Ó6×<Ñ<Ó>×DÑDÓFÔJ_Ô_‰|ÐemˆØ \Ð@QÐQÐQßŸ¨¸Ô)?ð ¨\¸4ÐARÐRÐRß˜¨Ô.Ø¨\ÐHYÐYÐYØ�> 4¨Ð/@Ð@Ð@r/   ç      >@g     Àr@)rG  c                   ó0   a € ] tR tRt o RtV 3R ltRtV tR# )ÚCompressionFastLaneiu  z*Explicit, non-reasoning compression route.c                óX   <€ V ^8„  d   Qh/ S[ ;R&   S[S[S[S[3,          ,          ;R&   # )r)   Úcertified_non_reasoningr(  )rm   r   r¤   rX   r   )r,   rQ   s   "€r-   r.   Ú CompressionFastLane.__annotate__u  s,   ø‡ ‚ ñ "Ñ!ñ ñ ™t¡C© H�~Õ.Ñ.ò	 r/   rD   NrÑ  rP   s   @r-   r7
  r7
  u  s   ø‡ € Ù4÷ ƒ r/   r7
  c                ó~   € V ^8„  d   QhR\         \        \        3,          R\        \        \        \        3,          /# ©r)   r˜   r*   )r¤   rX   r   rù  rm   )r,   s   "r-   r.   r.   |  s-   € ÷ *ñ *¤T¬#¬s¨(¥^ð *¼¼cÄ3Ì¸nÕ8Mñ *r/   c                óf  € ^ RI Hp \        V P                  R4      ;'       g    R4      P	                  4       P                  4       p\        V P                  R4      ;'       g    R4      P	                  4       pV! V P                  R4      4      pVRJ;'       d    VP                  R4      RJ pW#V3# )	zDOnly explicit reasoning disablement certifies a non-reasoning route.©Úparse_reasoning_effortrŸ  rj   r³  rÉ  Nr�  F)Úhermes_constantsr?
  rX   rž   r¨  r©  )r˜   r?
  rŸ  r³  Úparsed_effortÚnon_reasonings   &     r-   Ú_fast_lane_config_fieldsrC
  |  s˜   € å7Ü�6—:‘:˜jÓ)×/Ð/¨RÓ0×6Ñ6Ó8×>Ñ>Ó@€HÜ�—
‘
˜7Ó#×)Ð) rÓ*×0Ñ0Ó2€EÙ*¨6¯:©:Ð6HÓ+IÓJ€MØ!¨Ð-×WÐW°-×2CÑ2CÀIÓ2NÐRWÐ2W€MØ˜MÐ)Ð)r/   r¾  r¿  c                óÚ   € V ^8„  d   QhR\         R\        \         ,          R\        \         ,          R\        \         ,          R\        \        \         \        3,          ,          R\        /# )r)   r¼  r½  rÚ  r¾  r¿  r*   )rX   r   r¤   r   r7
  )r,   s   "r-   r.   r.   †  sX   € ÷ ,ñ ,Üð,Ü(0´­ð,ÜNVÔWZÍmð,äœc•]ð,ä9AÄ$ÄsÌCÀxÅ.Õ9Qð,ô ñ,r/   c               ó¶  € Ve   TM
\        R4      p\        V4      w  rgp\        T;'       g    R4      P                  4       P	                  4       ;'       g    Tp	\        T;'       g    R4      P                  4       ;'       g    Tp
V	R	9  ;'       d    V
P	                  4       R	9  p\        \        \        T ;'       g    R4      4      4      pV\        V	4      8H  p\        T;'       g    R4      P                  4       P	                  4       V
P	                  4       8H  pV'       d)   V'       d!   V'       d   V'       d   \        RRRRR/4      # \        RR4      # )
zICertify explicit non-reasoning settings only on the matching destination.NrÊ  rj   Tr�  Fr‚  r†  >   rj   r¢  )rG  rC
  rX   r¨  r©  r°  r–  r7
  )r¼  r½  rÚ  r¾  r¿  r˜   r@  r  rB
  rŸ  r³  Úexplicit_routeÚactual_normÚprovider_matchesÚmodel_matchess   &&$$$          r-   Úresolve_compression_fast_lanerJ
  †  s  € ð
 *Ò5‰\Ô;UÐVcÓ;d€FÜ-EÀfÓ-MÑ*€L˜]ÜÐ%×+Ð+¨Ó,×2Ñ2Ó4×:Ñ:Ó<×LÐLÀ€HÜ�×%Ð% 2Ó&×,Ñ,Ó.×;Ð;°)€EØ \Ñ1×WÐW°e·k±k³mÈ<Ñ6W€NÜ)Ô*GÌÈO×LaÐLaÐ_aÓHbÓ*cÓd€KØ"Ô&=¸hÓ&GÑGÐÜ˜×*Ð*¨Ó+×1Ñ1Ó3×9Ñ9Ó;¸u¿{¹{»}ÑL€Mß×*¯}ÇÜ" 4¨)°U¸HÀfÐ)MÓNÐNÜ˜u dÓ+Ð+r/   c                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# r<
  rQ  )r,   s   "r-   r.   r.   ˜  s&   € ÷ `ñ `´´c¼3°hµð `ÄDñ `r/   c                ór   € \        V 4      w  rpVR9  ;'       d    VP                  4       R9  ;'       d    T# )zAWhether task config declares fast-only controls that cannot leak.>   rj   r¢  )rC
  r©  )r˜   rŸ  r³  rB
  s   &   r-   Ú$_compression_config_claims_fast_lanerM
  ˜  s8   € ä%=¸fÓ%EÑ"€H�]Ø˜<Ñ'×_Ð_¨E¯K©K«MÀÑ,M×_Ð_ÐR_Ð_r/   c                óŽ  € V ^8„  d   QhR\         R,          R\         R\         R,          R\         R,          R\         R,          R\        \         \        3,          R\        \         \        3,          R	\        R,          R
\        \         \        3,          R\        \        R,          \        \         \        3,          3,          /
# )r)   rB  Nr¼  r½  rÚ  r¾  r¿  rÀ  r#  r{  r*   )rX   r¤   r   rW  rù  )r,   s   "r-   r.   r.   ž  s®   € ÷ ñ Ü
��*ðÜ*-ðÜ=@À4½Zðä˜d�
ðä58¸4µZðäOSÔTWÔY\ÐT\Í~ðô œC¤˜H•~ðô 47¸µ:ðô LPÔPSÔUXÐPXÍ>ðô Œ3��:”tœC¤˜H•~Ð%Õ&ñ	r/   c               óê   € V R8w  g   Ve   Wx3# \        V4      p	\        WW4VR7      p
V
P                  e   RV	9  d   V
P                  V	R&   Wy3# \        V4      '       d   V	P	                  RR4       Wy3# )z?Apply the certified compression controls to one resolved route.rÊ  N)rÚ  r¾  r¿  r}  )r¤   rJ
  r(  rM
  rÆ  )rB  r¼  r½  rÚ  r¾  r¿  rÀ  r#  r{  rç  r.  s   &$$$$$$$$  r-   rÁ  rÁ  ž  s‘   € ð ˆ}Ô 
Ò 6ØÐ%Ð%Ü�
Ó€DÜ(ØÐ:Lð  }Iô€Dð ×ÑÒ(Ø˜dÔ"Ø $× 5Ñ 5ˆD�Ñð ÐÐô 
.Ð.?×	@Ò	@Ø�‰�˜dÔ#ØÐÐr/   c                óF   € V ^8„  d   QhR\         R\        \        ,          /# rA  ©rX   r   rO  )r,   s   "r-   r.   r.   ²  s   € ÷ ñ ¬ð ´¼µñ r/   c                ó  € V '       g   R# \        V 4      P                  R4      pVf   R#  \        V4      p\        V\        4      '       g   V^ 8:  d   \        P                  RW\        4       R# V#   \        \        3 d    Rp LQi ; i)u7  ``auxiliary.<task>.no_progress_timeout`` from config, or None when unset/invalid
(the Codex and chat-stream watchdogs then keep the built-in ``_AUX_STREAM_NO_PROGRESS_TIMEOUT_SECONDS``
default). Lets an operator widen the substantive-progress window independently of the
overall request timeout â€” see #108104.Nrî  rü  ziauxiliary.%s.no_progress_timeout=%r is not a positive number of seconds; using the built-in %.0fs default)
rG  rž   rO  r”  r€  r?   rm   r­   r®   rö  )rB  r�  rQ  s   &  r-   Ú_get_task_no_progress_timeoutrS
  ²  sŠ   € ÷
 ÙÜ
$ TÓ
*×
.Ñ
.Ð/DÓ
E€CØ
‚{ÙðÜ�c“
ˆô �#”t×Ò ¨¤
ô 	�‰ð/Ø04Ô;bô	dñ Ø€Løô œ	Ð"ô ØŠðús   ¬A3 Á3B	ÂB	c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r)   rB  r  r*   )rX   rO  )r,   s   "r-   r.   r.   Ê  s!   € ÷ ñ œCð ¬%ð Ì5ñ r/   c                óø   € V '       g   V# \        V 4      P                  R4      pVe>   \        P                  ! \        \
        4      ;_uu_ 4        \        V4      uuRRR4       # V#   + '       g   i     T# ; i)z9``auxiliary.<task>.timeout`` from config, else *default*.r  N)rG  rž   r–  r—  r”  r€  rO  )rB  r  r�  s   && r-   Ú_get_task_timeoutrV
  Ê  sY   € çØˆÜ
$ TÓ
*×
.Ñ
.¨yÓ
9€CØ
‚Ü× Ò ¤¬Y×7Õ7Ü˜“:÷ 8Ò7à€N÷ 8Ö7à€Nús   ÁA(Á(A9	c                óR   € V ^8„  d   QhR\         R\        \        ,          R\        /# )r)   rB  r  r*   rQ
  )r,   s   "r-   r.   r.   Õ  s*   € ÷ fñ f¤ð f¬x¼­ð fÄ5ñ fr/   c                óV   € Ve   V# \        V 4      pV R8X  d   \        V\        4      # T# )z€Explicit ``timeout`` wins, else config; compression gets a floor so a reasoning model
summarising a large context isn't cut off.rÊ  )rV
  rÒ  Ú"_COMPRESSION_TIMEOUT_FLOOR_SECONDS)rB  r  Ú	effectives   && r-   Ú_effective_aux_timeoutr[
  Õ  s4   € ð ÒØˆÜ! $Ó'€IØAEÈÔAVŒ3ˆyÔ<Ó=ÐeÐ\eÐer/   c                ó¬   € V ^8„  d   QhR\         \        ,          R\        R\         \        ,          R\         \        ,          R\         \        ,          /# )r)   r{  rŸ  r³  rV   r*   r}  )r,   s   "r-   r.   r.   Þ  sE   € ÷ /ñ /Üœ•ð/Ü*-ð/Ü6>¼sµmð/ÜOWÔX[Í}ð/äŒd…^ñ/r/   c           	     ó$  € V'       g   V #  ^ RI Hp ^ RIHpHp T! T;'       g    RT;'       g    R\        V4      V! V! 4       4      R7      pT'       g   T # / TCT ;'       g    / C#   \         d    \        P                  RRR7       T u # i ; i)aŽ  Layer the destination custom provider's ``extra_body`` UNDER the task/caller body.

The main agent merges a ``custom_providers`` / ``providers:`` entry's ``extra_body`` into every
request to that endpoint (``agent_init._merge_custom_provider_extra_body``); an aux request routed
to the same entry must carry it too, or a proxy that 400s without e.g. a ``user`` field breaks
smart approval, titles and compression (#103738). Resolved per destination with the agent's own
matcher, so a fallback to another provider never inherits it; ``auxiliary.<task>.extra_body`` and
caller keys win on conflict, as request_overrides win over the entry on the main path.)Ú%_custom_provider_extra_body_for_agent)Úget_compatible_custom_providersr–   rj   )rŸ  r³  rV   Úcustom_providersz8custom provider extra_body lookup failed for aux requestTrÜ   )	Úagent.agent_initr^
  r�   r_
  r–   rX   rŸ   r­   rÞ   )r{  rŸ  r³  rV   r^
  r_
  r–   Ú	inheriteds   &&&&    r-   Ú _with_custom_endpoint_extra_bodyrc
  Þ  s‘   € ÷ ØÐð	ÝJß[Ù9Ø—^�^ ¨5¯;¨;°BÄÀXÃÙ<Ñ=QÓ=SÓTô
ˆ	÷ ØÐØ.ˆiÐ.˜J×,Ð,¨"Ð.Ð.øô ô Ü�‰ÐOÐZ^ˆÔ_ØÒðús   ŒA( ¥
A( °A( Á($BÂBc                óR   € V ^8„  d   QhR\         R\        \         \        3,          /# rA  )rX   r¤   r   )r,   s   "r-   r.   r.   ú  s"   € ÷ ñ œsð ¤t¬C´¨H¥~ñ r/   c                ól  € \        V 4      pVP                  R4      p\        V\        4      '       d   \        V4      M/ pRV9   d   V# VP                  R4      pVe   VR8X  d   V# V R9   d   \        P                  RV 4       V# ^ RIHp V! V4      pVe   WcR&   V# \        P                  RW4       V# )	zÛShallow copy of ``auxiliary.<task>.extra_body`` with ``reasoning_effort`` folded into
``reasoning`` unless one is configured (more specific wins). MoA tasks are excluded: their
reasoning depth is per-slot in the preset.r{  r}  rÉ  rj   uÉ   auxiliary.%s.reasoning_effort is not supported â€” MoA reasoning depth is per-slot: set reasoning_effort on the preset's reference_models entries / aggregator instead (moa.presets.<name>...). Ignoring.r>
  ux   auxiliary.%s.reasoning_effort %r is not a valid level (none, minimal, low, medium, high, xhigh, max, ultra) â€” ignoring)Úmoa_referenceÚmoa_aggregator)rG  rž   r?   r¤   r­   r®   r@
  r?
  )rB  r¸  r�  r_  r‚  r?
  rˆ  s   &      r-   Ú_get_task_extra_bodyrh
  ú  sÄ   € ô -¨TÓ2€KØ
�/‰/˜,Ó
'€CÜ$ S¬$×/Ò/ŒT�#ŒY°R€FØ�fÔØˆØ�_‰_Ð/Ó0€FØ‚~˜ 2œØˆØÐ2Ô2Ü�‰ðoàô	
ð
 ˆÝ7Ù# FÓ+€FØÒØ$ˆ{Ñð €Mô	 	�‰ð GØô	
ð €Mr/   c                ó\   € V ^8„  d   QhR\         \        ,          R\         \        ,          /# rA  rJ  )r,   s   "r-   r.   r.   %  s"   € ÷ 	(ñ 	(¤H¬S¥Mð 	(´h¼sµmñ 	(r/   c                ó²   € V '       d   V R8X  d   R#  \        \        V 4      P                  R4      4      pT^ 8”  d   T# R#   \        \        3 d     R# i ; i)z”``auxiliary.<task>.max_concurrency`` as a positive int, or None. Vision uses this key for
its encode/resize CPU pool; its LLM calls stay concurrent.r  NÚmax_concurrency)rW  rG  rž   r€  r”  )rB  rQ  s   & r-   Ú_get_task_max_concurrencyrl
  %  s^   € ÷ �4˜8Ô#ÙðÜÔ.¨tÓ4×8Ñ8Ð9JÓKÓLˆð ˜A”Iˆ5Ð' 4Ð'øô ”zÐ"ô Úðús   “#A ÁAÁAc          
      óx   € V ^8„  d   QhR\         R\        R\        R\        \        .\        3,          R\        /# )r)   rz  r  ÚlimitÚfactoryr*   )r¤   r   rW  r   )r,   s   "r-   r.   r.   1  s<   € ÷ ñ œTð ¬ð ´Cð Ä(ÌCÈ5ÔRUÈ:ÕBVð Ô[^ñ r/   c                óÎ   € \         ;_uu_ 4        V P                  V4      pVe   V^ ,          V8w  d   W#! V4      3;W&   pV^,          uuRRR4       #   + '       g   i     R# ; i)zNReturn the cached semaphore for ``key``, rebuilding it when the limit changed.N)Ú_aux_sem_lockrž   )rz  r  rn
  ro
  r¹  s   &&&& r-   Ú_cached_semaphorerr
  1  sL   € ç	ŽØ—	‘	˜#“ˆØŠ=˜E !�H¨Ô-Ø"'¨°«Ð!8Ð8ˆE‰J˜Ø�Q�x÷	 
��‹ús   �9AÁA$	c                óp   € V ^8„  d   QhR\         \        ,          R\         \        P                  ,          /# rA  )r   rX   rè   ÚBoundedSemaphore)r,   s   "r-   r.   r.   :  s-   € ÷ qñ q¤h¬s¥mð q¼Ä×A[ÑA[Õ8\ñ qr/   c                ó~   € \        V 4      pVf   R# ^ RIHp \        \        V! 4       V 3V\
        P                  4      # )zCGet a per-task sync semaphore, rebuilding it after a config change.N©r‰   )rl
  r@
  r‰   rr
  Ú_aux_sync_semaphoresrè   rt
  )rB  rn
  r‰   s   &  r-   Ú_acquire_sync_aux_semaphorerx
  :  s8   € ä% dÓ+€EØ‚}ÙÝ0ÜÔ1±OÓ4EÀtÐ3LÈeÔU^×UoÑUoÓpÐpr/   c                ó:   € V ^8„  d   QhR\         \        ,          /# )r)   rB  r   )r,   s   "r-   r.   r.   C  s   € ÷ sñ s¤x´¥}ñ sr/   c                óÖ   € \        V 4      pVf   R# ^ RIp VP                  4       p^ RIHp \        \        T! 4       T \        T4      3YP                  4      #   \         d     R# i ; i)zCGet a per-task, per-event-loop async semaphore after config lookup.Nrv
  )
rl
  rë  rð	  rc   r@
  r‰   rr
  Ú_aux_async_semaphoresr2  Ú	Semaphore)rB  rn
  rë  rô	  r‰   s   &    r-   Ú_acquire_async_aux_semaphorer}
  C  si   € ä% dÓ+€EØ‚}ÙÛðØ×'Ñ'Ó)ˆõ 1ÜÔ2±_Ó5FÈÌbÐQUËhÐ4WÐY^×`qÑ`qÓrÐrøô ô Úðús   —A ÁA(Á'A(c                ó   € V ^8„  d   QhRR/# r½   rD   )r,   s   "r-   r.   r.   Q  s   € ÷ &ñ &˜tñ &r/   c                 ó¬   € \         ;_uu_ 4        \        P                  4        \        P                  4        RRR4       R#   + '       g   i     R# ; i)z%Drop cached semaphores (test helper).N)rq
  rw
  re  r{
  rD   r/   r-   Ú_reset_aux_semaphoresr€
  Q  s+   € ç	ŽÜ×"Ñ"Ô$Ü×#Ñ#Ô%÷ 
��Šús   �)AÁA	c                ó<   € V ^8„  d   QhR\         R\         R\        /# ©r)   rŸ  rV   r*   r.  )r,   s   "r-   r.   r.   ]  s&   € ÷ _ñ _¬Cð _¼3ð _Ä4ñ _r/   c                ó^   € V \         9   ;'       g    RT;'       g    RP                  4       9   # )zMTrue for known Anthropic-compatible providers or any ``/anthropic`` URL path.rœ  rj   )Ú_ANTHROPIC_COMPAT_PROVIDERSr©  rh  s   &&r-   r@  r@  ]  s+   € àÔ2Ñ2×^Ð^°lÀxÇ~À~ÐSU×F\ÑF\ÓF^Ñ6^Ð^r/   Ú	image_urlÚ	video_urlc                ó0   € V ^8„  d   QhR\         R\         /# )r)   rm  r*   )r—  )r,   s   "r-   r.   r.   h  s   € ÷ ñ ´$ð ¼4ñ r/   c                óà  € . pV  EFd  pVP                  R4      p\        V\        4      '       g   VP                  V4       K>  . pRpV Fû  pVP                  R4      pV\        9  d   VP                  V4       K2  VP                  V4      ;'       g    / P                  RR4      p\        V,          w  ršVP                  R4      '       d\   VP                  R4      w  r¼pRV9   d8   R	V9   d1   VP                  R^4      ^,          P                  R	^4      ^ ,          p
RR
RV
RV/pMRRRV/pVP                  RV	RV/4       RpKý  	  TP                  V'       d	   / VCRV/CMT4       EKg  	  V# )z‡Convert OpenAI ``image_url``/``video_url`` blocks to Anthropic ``image``/``video``;
only list-content messages with such blocks change.rn  Fr+   rƒ  rj   zdata:Ú,r¤  Ú;rÑ  Ú
media_typerŠ  r€  T)rž   r?   r—  r˜  Ú_ANTHROPIC_MEDIA_BLOCKSrª  Ú	partitionr«  )rm  Ú	convertedr©  rn  Únew_contentrÌ  r,  Ú
block_typerƒ  Ú	anth_typer‹
  Úheaderr¢  Úb64datar€  s   &              r-   rA  rA  h  sf  € ð €IÜˆØ—'‘'˜)Ó$ˆÜ˜'¤4×(Ò(Ø×Ñ˜SÔ!ÙØˆØˆÛˆEØŸ™ 6Ó*ˆJØÔ!8Ô8Ø×"Ñ" 5Ô)ÙØ—9‘9˜ZÓ(×.Ð.¨B×3Ñ3°E¸2Ó>ˆCÜ$;¸JÕ$GÑ!ˆIØ�~‰~˜g×&Ò&Ø%(§]¡]°3Ó%7Ñ"�˜7Ø˜&”= S¨F¤]Ø!'§¡¨c°1Ó!5°aÕ!8×!>Ñ!>¸sÀAÓ!FÀqÕ!I�JØ  (¨L¸*ÀfÈgÐV‘à  %¨°Ð4�Ø×Ñ ¨	°8¸VÐDÔEØŠGñ ð  	×Ñ¿GÐ8˜CÐ8 ¨KÒ8È×Mñ/ ð0 Ðr/   c                ó0   € V ^8„  d   QhR\         R\        /# )r)   rQ  r*   r  )r,   s   "r-   r.   r.   �  s   € ÷ ñ ¬cð ´dñ r/   c                óÒ   € \        V \        4      '       g   R# \        ;QJ d*    R V P                  4        4       F  '       g   K   R# 	  R# ! R V P                  4        4       4      # )zOReturn whether a profile payload contains a reasoning wire control (recursive).Fc              3   ó¨   "  € T FH  w  r\        V4      P                  4       P                  4       \        9   ;'       g    \	        V4      x € KJ  	  R # 5ir8   )rX   r¨  r©  rÊ  Ú"_contains_profile_reasoning_fields)r#  r  Únesteds   &  r-   r%  Ú5_contains_profile_reasoning_fields.<locals>.<genexpr>‘  sE   é € ð á(‰KˆCô 	ˆC‹�‰Ó×ÑÓ Ô$;Ñ;×iÐiÔ?aÐbhÓ?iÔiÛ(ùs
   ‚;A¾AT)r?   r¤   r3  r‡  rS  s   &r-   r—
  r—
  �  sY   € ä�eœT×"Ò"Ùß‹3ñ à Ÿ;™;œ=ó�3Œ3ð Š3ð ˆ3ñ à Ÿ;™;œ=óó ð r/   c                ó<   € V ^8„  d   QhR\         R\         R\        /# )r)   Úprovider_normr³  r*   r.  )r,   s   "r-   r.   r.   š  s!   € ÷ 8ñ 8¬#ð 8´cð 8¼dñ 8r/   c                ó>   € V \         9  d   R# ^ RIHp V! V4      R8H  # )zUTrue when a Nous Portal route serves ``model`` over /v1/messages (dual-wire catalog).Fr	  r,  )Ú_NOUS_PROVIDER_NAMESrÅ  r	  )r›
  r³  r	  s   && r-   Ú_nous_on_messages_wirerž
  š  s"   € àÔ0Ô0ÙÝ2Ù˜ÓÐ#7Ñ7Ð7r/   c                ó<   € V ^8„  d   QhR\         R\         R\        /# )r)   r›
  Úeffective_baser*   r.  )r,   s   "r-   r.   r.   ¦  s!   € ÷ 
ñ 
¬3ð 
Äð 
Ìñ 
r/   c                ór   € V \         9   d   R# V'       g   R#  ^ RIHp V! V4      #   \         d     R# i ; i)zEGemini native by provider name, else (best-effort) by base URL shape.TF)rÜ  )Ú_GEMINI_NATIVE_PROVIDER_NAMESrì  rÜ  rŸ   )r›
  r 
  rÜ  s   && r-   Ú_is_gemini_native_router£
  ¦  s9   € àÔ5Ô5ÙßÙðÝIÙ(¨Ó8Ð8øÜô Úðús   ™' §6µ6c                óv   € V ^8„  d   QhR\         R\         R\         R\         R\        \         ,          R\        /# )r)   rŸ  r›
  r³  r 
  rB  r*   rZ  )r,   s   "r-   r.   r.   ³  s?   € ÷ ñ ¤3ð ´sð Ä3ð ÔX[ð ÔckÔloÕcpð Ôuyñ r/   c                óB  € \        W4      ;'       gŽ    \        W4      ;'       g{    V\        9   ;'       gj    \        VR4      ;'       gV    \	        V4      R8H  ;'       g@    \        W4      ;'       g-    VR8H  ;'       g     \        VR4      ;'       g    \        V4      # )u  Whether an explicit max_tokens is forwarded on this route.

No default cap elsewhere (omitted = provider default; avoids max_completion_tokens / ZAI-vision
quirks). Forward only where mandatory or honored: Anthropic Messages wire (400 without it);
NVIDIA NIM (empty choices[] when omitted); MoA reference slots; Gemini native (fixed 65,535
ceiling otherwise); OpenRouter (budgets the FULL window when omitted â†’ 402 on low credit);
managed local llama-server (uncapped decode with no EOS burns the GPU to the context window).
rw  rf
  rc  r÷  )r@  rž
  Ú_NVIDIA_PROVIDER_NAMESrŠ   rX   r£
  r   )rŸ  r›
  r³  r 
  rB  s   &&&&&r-   Ú_forwards_max_tokensr§
  ³  s·   € ô 	& hÓ?÷ 	6ð 	6Ü! -Ó7÷	6ð 	6àÔ2Ñ2÷	6ð 	6ô ! Ð1KÓL÷	6ð 	6ô ˆt‹9˜Ñ'÷		6ð 	6ô
 # =ÓA÷	6ð 	6ð ˜LÑ(÷	6ð 	6ô ! °ÓA÷	6ð 	6ô & nÓ5ð
r/   c                óH   € V ^8„  d   QhR\         R\        R\        R\         /# )r)   ri  rŸ  r³  r*   ro	  )r,   s   "r-   r.   r.   É  s(   € ÷ ñ œdð ¬cð ¼#ð Ä$ñ r/   c                ó(  € \        4       p. pV  F  pVP                  R4      ;'       g    / P                  RR4      pV'       d    Wc9   d   \        P                  RWaV4       KU  V'       d   VP	                  V4       VP                  V4       K�  	  V# )zLDrop duplicate tool names (Vertex/Azure/Bedrock 400 on them) with a warning.rs  r`   rj   zK_build_call_kwargs: duplicate tool name '%s' removed (provider=%s model=%s))rb  rž   r­   r®   rå  r˜  )ri  rŸ  r³  rÕ  ÚdedupedÚtoolr`   s   &&&    r-   Ú_dedupe_tool_namesr¬
  É  s|   € ä“€DØ€GÛˆØ—‘˜Ó$×*Ð*¨×/Ñ/°¸Ó;ˆß�D”LÜ�N‰NÐhÐjnÐzô  AÙßØ�H‰H�TŒNØ�‰�tÖñ ð €Nr/   c                   ó0   a € ] tR tRt o RtV 3R ltRtV tR# )Ú_ProfileProjectioniØ  Fc                ó˜   <€ V ^8„  d   Qh/ S[ S[S[3,          ;R&   S[ S[S[3,          ;R&   S[ S[S[3,          ;R&   S[;R&   S[;R&   # )r)   rç  Úreasoning_extraÚ	top_levelÚhandles_reasoningÚmessages_wirerQ  )r,   rQ   s   "€r-   r.   Ú_ProfileProjection.__annotate__Ø  sZ   ø‡ ‚ Ù
‰s‘Cˆx�.Ññ á™#™s˜(•^Ñ#ñ ñ ‘C™�H�~Ññ ñ Ññ	 ñ
 Ñò r/   rD   N)rH   rI   rJ   rK   r³
  rœ  rN   rO   rP   s   @r-   r®
  r®
  Ø  s   ø‡ € ð
  €M÷ ƒ r/   r®
  c                ó0   € V ^8„  d   QhR\         R\        /# )r)   r›
  r*   r.  )r,   s   "r-   r.   r.   à  s   € ÷ 8ñ 8¬cð 8´dñ 8r/   c                óJ   € \        V 4      pVR8X  d   R# ^ RIHp V! V4      RJ# )a‰  True when a profile-less provider name is really a configured OpenAI-compatible custom endpoint.

Keyed ``providers:`` / ``custom_providers`` entries (by bare key, or ``main``/``auto`` resolving to
one). An unconfigured name with only an explicit base_url keeps the generic nested fallback: the
operator declared nothing about that endpoint's wire, and the fireworks control contract pins it.
r�  Tr€  N)r°  rú  r�  )r›
  r`   r�  s   &  r-   Ú_routes_to_custom_endpointr·
  à  s,   € ô # =Ó1€DØˆxÔÙÝFÙ% dÓ+°4Ð7Ð7r/   c                ó˜   € V ^8„  d   QhR\         R\         R\         R\         R\        \        ,          R\        \         ,          R\        /# )r)   rŸ  r›
  r³  r 
  r(  Údata_user*   )rX   r   r¤   Ú	frozensetr®
  )r,   s   "r-   r.   r.   î  sa   € ÷ %bñ %bÜð%bÜ"%ð%bÜ.1ð%bÜCFð%bÜZbÔcgÕZhð%bÜt}ô  Bõ  uCð%bäñ%br/   c                ób  € / p/ p/ pRp	Rp
 ^ RI Hp ^ RIHp V! V4      pVf   \	        V4      '       d	   V! R4      pVe¶   VP
                  R8H  p
VP                  W#WER7      ;'       g    / pVP                  WDRJW#R7      w  rxT;'       g    / pT;'       g    / p\        V4      P                  VP                  J;'       g2    \        V4      ;'       g    \        V4      ;'       g    \        V4      p	\        YgY‰T
4      #   \         d!   p\        P                  R	Y4        Rp?L3Rp?ii ; i)
zFProvider profile's extra_body / kwargs projection; partial on failure.Fr
  )ÚProviderProfileNr�  r,  )r³  rV   r(  r¹
  )r(  Úsupports_reasoningr³  rV   zA_build_call_kwargs: provider profile projection failed for %s: %s)r  r  Úproviders.baser¼
  r·
  ro  Úbuild_extra_bodyÚbuild_api_kwargs_extrasr+   r—
  rŸ   r­   rÞ   r®
  )rŸ  r›
  r³  r 
  r(  r¹
  rç  r°
  r±
  r²
  r³
  r  r¼
  r3  rc  s   &&&&&&         r-   Ú_project_provider_profilerÁ
  î  sf  € ð €DØ&(€OØ "€IØÐØ€MðiÝ2Ý2Ù& }Ó5ˆØŠ?Ô9¸-×HÒHñ +¨8Ó4ˆGØÒØ#×,Ñ,Ð0DÑDˆMØ×+Ñ+°%ÐcsÐ+ó  H÷  Nð  Nð  LNˆDØ)0×)HÑ)HØ!1Ð^bÐFbØð *Ió *Ñ&ˆOð .×3Ð3°ˆOØ!Ÿ˜ RˆIä�W“×5Ñ5¸_×=dÑ=dÐd÷ Að AÜ5°dÓ;÷Að Aä5°oÓF÷Að Aô 6°iÓ@ð	 ô ˜d°YÐS`ÓaÐaøô ô iÜ�‰ÐXÐZb×hÑhûðiús6   ŒAD Á*.D Â*D ÃD ÃD Ã*D ÄD.ÄD)Ä)D.c                ó¢   € V ^8„  d   QhR\         \        ,          R\        R\         \        ,          R\        R\        \        \        3,          /# )r)   r{  Ú
projectionr(  r›
  r*   )r   r¤   r®
  rX   r   )r,   s   "r-   r.   r.     sF   € ÷ /ñ /Üœ•ð/Ü,>ð/ÜRZÔ[_ÕR`ð/Üqtð/ä	Œ#Œsˆ(…^ñ/r/   c                óØ  € \        T ;'       g    / 4      pVP                  4        UUu/ uFg  w  rV\        V4      P                  4       P	                  4       \
        9   g   K7  \        V4      P                  4       P	                  4       R8w  g   Ke  WVbKi  	  ppp\        V\         4      ;'       d    VP                  R4      RJ pV'       d   VP                  RR4       VP                  VP                  4       VP                  VP                  4       VP                  V4       VP                  '       g   ^ RIHp	 VP                  V	! V4      4       \        VP                  R4      \         4      '       d   ^ RIHp
 V
! VR,          4      VR&   V\         9   d6   RV9  d   \#        4       VR&   RV9  d    ^ R	IHp V! 4       pV'       d   WÄR&   V# u uppi   \(         d    Rp L#i ; i)
zTCaller extra_body + profile body/reasoning + generic reasoning fallback + Nous tags.r}  r�  FN)Úgeneric_nested_reasoning©Úclamp_reasoning_configr€  rŽ  )Úget_conversation_context)r¤   r‡  rX   r¨  r©  rÊ  r?   rž   rÆ  r™  rç  r°
  r²
  rš  rÅ
  rÇ
  r�
  r�  Úagent.portal_tagsrÈ
  rŸ   )r{  rÃ
  r(  r›
  Úmerged_extrar  rQ  Úcaller_reasoning_fieldsÚcaller_disabledrÅ
  rÇ
  rÈ
  Ú
sticky_keys   &&&&         r-   Ú_merge_aux_extra_bodyrÎ
    s·  € ô ˜
×(Ð( bÓ)€Là%1×%7Ñ%7Ô%9ôÙ%9‘z�sÜˆs‹8�>‰>Ó×!Ñ!Ó#Ô'>Ñ>ô 	ÜCFÀsÃ8Ç>Á>ÓCS×CYÑCYÓC[Ð_jÑCjô 	ˆŠ
Ñ%9ð ñ ô !Ð!1´4Ó8×eÐeÐ=M×=QÑ=QÐR[Ó=\Ð`eÐ=e€Oßð 	×Ñ˜ dÔ+Ø×Ñ˜
Ÿ™Ô(Ø×Ñ˜
×2Ñ2Ô3ð ×ÑÐ/Ô0Ø×'×'Ð'åCØ×ÑÑ4Ð5EÓFÔGô �,×"Ñ" ;Ó/´×6Ò6ÝAÙ$:¸<ÈÕ;TÓ$Uˆ�[Ñ!ð Ô,Ô,Ø˜Ô%Ü#4Ó#6ˆL˜Ñ Ø˜|Ô+ð"ÝFÙ5Ó7�
÷ Ø-7˜\Ñ*ØÐùóUøôL ô "Ø!’
ð"ús#   ©4GÁ")GÂGÆ8G ÇG)Ç(G)c                ód  € V ^8„  d   QhR\         R\         R\        R\        \        ,          R\        \        ,          R\        \        ,          R\        R\        \
        ,          R	\        \
        ,          R
\        \         ,          R\        \         ,          R\        \        ,          R\
        /# )r)   rŸ  r³  rm  r%  r#  ri  r  r{  r(  rV   rB  rî  r*   )rX   r—  r   rO  rW  r¤   )r,   s   "r-   r.   r.   H  s¿   € ÷ Gqñ GqÜðGqÜðGqÜ)-ðGqÜ<DÄU½OðGqäœ•ðGqä-5´d­^ðGqäMRðGqô œ•ðGqô :BÄ$½ðGqô ”s�mð	Gqô +3´3­-ð	Gqô
 "¤%�ðGqô 
ñGqr/   c           
     ó  € RVRVRV/pVe   W¼R&   T	;'       g    V R8X  d   \        4       MRp\        WpW4      p\        WV 4      pV\        J d   RpMVe   TpVe   ^ RIHp V! V4      '       g   W<R	&   \        T ;'       g    R4      P                  4       P                  4       pVe0   \        V VWV
4      '       d   VP                  \        WAR
7      4       V'       d   \        WPV4      VR&   ^ RIHp ^ RIHp \#        V\$        4      '       dQ   VP'                  R4      p\#        V\$        4      '       d*   RV9   d#   \%        V4      pVP)                  R4       Vf   TpV! V! VVWÑV
4      4      p\+        V VWV\-        V4      4      pVP                  VP.                  4       \1        VVVV4      pRV9   d   ^ RIHp V! VVWÑV
4      pV'       d   VVR&   V'       d   \#        V\$        4      '       di   T	;'       g    RpVR8X  gH   VP6                  '       g6   \9        VV4      '       g$   \;        V4      '       g   \=        VV4      '       d   \%        V4      VR&   ^ RIH p T! YÀT	\C        R4      ;'       g    R4      # )uG  Build kwargs for .chat.completions.create() with model/provider adjustments.
``no_progress_timeout`` is a Codex-Responses-only extra (consumed by
``_CodexCompletionsAdapter.create``'s ``**kwargs`` catch-all); callers must only pass it
when the resolved client is a ``CodexAuxiliaryClient`` â€” real SDK clients don't accept it.r³  rm  r  Nrî  r�  rj   r)  r%  r¸  ri  rÆ
  )Úknown_reasoning_floorr}  r�  r  )Ú#without_unsupported_response_formatr{  r<  r&  )Úmerge_session_affinity_headersrŽ  )"r  rc
  rí  rë  r4  r*  rX   r¨  r©  r§
  r™  r”	  r¬
  rš  rÇ
  Úagent.auxiliary_reasoning_floorrÑ
  r?   r¤   rž   rÆ  rÁ
  rz   r±
  rÎ
  Ú!agent.auxiliary_structured_outputrÒ
  r³
  rž
  rm  r@  rç  rÓ
  r›  )rŸ  r³  rm  r%  r#  ri  r  r{  r(  rV   rB  rî  r;   r 
  Úfixed_temperaturer*  r›
  rÇ
  rÑ
  Útask_reasoningrÃ
  rÊ
  rÒ
  Úraw_baserÓ
  s   &&&&&&&&&&&&             r-   r?  r?  H  st  € ð & u¨j¸(ÀIÈwÐW€FØÒ&Ø(;Ð$Ñ%Ø×]Ð]ÀÈHÔ@TÔ":Ô"<ÐZ\€NÜ1°*ÈÓ^€Jô 5°UÈHÓUÐØÔ,Ó,Ø‰Ø	Ò	&Ø'ˆØÒÝDÙ'¨×.Ò.Ø$/�=Ñ!Ü˜Ÿ˜ BÓ'×-Ñ-Ó/×5Ñ5Ó7€MØÒÔ"6°xÀÐPUÐgk×"lÒ"lØ�‰Ô0°ÔIÔJßÜ,¨U¸eÓDˆˆw‰õ >ÝEÜ�*œd×#Ò#Ø#Ÿ™¨Ó4ˆÜ�n¤d×+Ò+°	¸^Ô0KÜ˜jÓ)ˆJØ�N‰N˜;Ô'ØÒ'Ø#1Ð Ù-Ñ.CÐDTÐVcÐesð  }Aó  /Bó  CÐÜ*¨8°]ÀEÐ[kô  nBð  CKó  nLó  M€JØ
‡M�M�*×&Ñ&Ô'Ü(¨°ZÐAQÐS`Óa€LØ˜LÔ(ÝYÙ:¸<ÈÐXfÐosÓtˆßØ+ˆˆ|Ñ÷ œJÐ'7¼×>Ò>Ø—>�>˜rˆà˜[Ô(¨J×,D×,DÐ,DÔH^Ð_lÐns×HtÒHtÜ2°8×<Ò<Ô@]Ð^kÐmu×@vÒ@vä*.Ð/?Ó*@ˆFÐ&Ñ'õ GÙ)¨&¸HÔFYÐZfÓFg×FoÐFoÐkoÓpÐpr/   c          
      ó–   € V ^8„  d   QhR\         R\        \        ,          R\        \        ,          R\        \        ,          R\         /# )r)   rß  rB  rŸ  rV   r*   ræ  )r,   s   "r-   r.   r.   ’  sB   € ÷ 8ñ 8Üð8Ü!¤#�ð8Ü9AÄ#½ð8ÜYaÔbeÕYfð8äñ8r/   c                óz  € V f   \        RT;'       g    R R24      h\        W4      p ^ RIHp V! WW#R7        V P                  pV'       d   \        V^ ,          R4      '       g   \        R4      h ^ RIHp
 V
! V 4      '       d'   \        RT;'       g    R R24      p\%        V4       Vh\*        P-                  4       pVe=   \/        V R4      p\1        V\        4      '       d   VP3                  4       '       d   WÜR&   \5        4        V #   \        \        \        3 d˜   p\        T 4      pTf|   \        RT;'       g    R R	\        T 4      P                   R
\        T 4      R,          : R24      p^ RIHp	 \        Y‰P                   T	P#                  T 4      4       \%        T4       Y†hTp  Rp?ELBRp?ii ; i)uI  Validate the .choices[0].message shape (fail fast, not a downstream AttributeError).

Also the single aux-usage accounting chokepoint: every successful non-streaming response
passes here exactly once; *provider*/*base_url* are optional hints. Async callers
await this off-loop because accounting may commit through synchronous worker RPC.

See #7264.
Recording is best-effort and never affects validation. *provider*/*base_url* are optional accounting
hints â€” fallback-path calls omit them and the row keeps the model (read from the response itself) with
an empty route. See #23270.
Nr:  r_  z: LLM returned None response)Úrecord_aux_usagerh  rÀ  zmissing choices[0].messagez&: LLM returned invalid response (type=z): :Néx   Nug   . Expected object with .choices[0].message â€” check provider adapter or custom endpoint compatibility.©Úauxiliary_call_outcome)Úis_router_timeout_shimz:: provider returned a timeout shim instead of a completionr³  r_  )rc   Ú_unwrap_data_envelopeÚagent.aux_accountingrÛ
  rÃ  rË  r«   r€  Ú
IndexErrorÚ_recover_aux_response_messager+   rH   rX   r¥  rÞ
  ÚsetattrÚPROVIDER_ERROR_ATTRÚembedded_provider_errorr§  Ú!agent.transports.chat_completionsrß
  ra  rž   r  r?   r¨  Ú_complete_relay_auxiliary_call)rß  rB  rŸ  rV   rÛ
  rÃ  rc  Ú	recoveredÚinvalidrÞ
  rß
  Úshimry  r³  s   &&&&          r-   rJ  rJ  ’  s§  € ð ÒÜØ˜Ÿ˜ Ð(Ð(DÐEó
ð 	
ô % XÓ4€HÝ5Ù�X¨hÕJðØ×"Ñ"ˆßœg g¨a¥j°)×<Ò<Ü Ð!=Ó>Ð>ð =õ$ IÙ˜h×'Ò'ô ˜j¨¯¨°Ð(8Ð8rÐsÓtˆÜ# DÔ)Øˆ
ä%×)Ñ)Ó+€GØÒÜ�x Ó)ˆÜ�eœS×!Ò! e§k¡k§m¢mØ(-Ð$Ñ%Ü"Ô$Ø€Oøô= œI¤zÐ2ô Ü1°(Ó;ˆ	ØÒÜ"Ø˜TŸ^˜^ VÐ,Ð,RÔSWÐX`ÓSa×SjÑSjÐRkÐknÜ�x“= Õ&Ñ)ð *<ð=óˆGõ 5Ü�G×GÑGØ*×BÑBÀ8ÓLôNä'¨Ô0ØÐ"ØŽûðús   º8D ÄF:Ä#F5ÅA.F5Æ5F:rf  ÚsuccessÚerror_classc                óJ   € V ^8„  d   QhR\         R\        \         ,          RR/# )r)   rf  rí
  r*   NrL  )r,   s   "r-   r.   r.   Í  s'   € ÷ ñ ¬sð ÌXÔVYÍ]ð Ðfjñ r/   c           
     ó¤  € \         P                  4       pVf   R# ^ RIHp TP	                  \        VP                  R4      ;'       g    R4      T \        VP                  R4      ;'       g    R4      \        VP                  R4      ;'       g    R4      VP                  R	4      T;'       g    VP                  R
4      ;'       g    RR7       R# )z©Close one auxiliary logical call after acceptance or terminal failure. A success
reports the last attempt error it recovered from (``none`` when the first attempt held).Nr–  r]  rj   r³  r\  rŸ  r   r_  rí
  r†  )rf  r‡  r†  Úresponse_model_namerí
  )ra  rž   r¥  r—  Úcomplete_logical_callrX   )rf  rí
  ry  r—  s   $$  r-   rè
  rè
  Í  s¦   € ô &×)Ñ)Ó+€GØ‚ÙÝØ×#Ñ#ÜˆG�K‰K˜Ó%×+Ð+¨Ó,°gÜ�w—{‘{ 7Ó+×8Ð8¨yÓ9Ü˜'Ÿ+™+ jÓ1×@Ð@°[ÓAØ#ŸK™KÐ(8Ó9Ø×GÐG 7§;¡;¨}Ó#=×GÐGÀð $ö r/   c                ó(   € V ^8„  d   QhR\         RR/# ©r)   rc  r*   N©ra  )r,   s   "r-   r.   r.   Ý  s   € ÷ eñ e¤]ð e°tñ er/   c           	     ó,  € \         P                  4       pVe|   \        V \        4      '       dd   ^ RIHp TP                  T \        VP                  R4      ;'       g    R4      \        VP                  R4      ;'       g    R4      R7      VR&   R# R# R# )zDRemember one failed attempt's classified reason on the logical call.NrÝ
  rŸ  rj   r³  r@  rí
  )ra  rž   r?   rŸ   r¥  rÞ
  rí
  rX   )rc  ry  rÞ
  s   &  r-   r§  r§  Ý  s~   € ä%×)Ñ)Ó+€GØÒœz¨#¬y×9Ò9Ý0Ø!7×!CÑ!CØœ#˜gŸk™k¨*Ó5×;Ð;¸Ó<ÄCÈÏÉÐT[ÓH\×HbÐHbÐ`bÓDcð "Dó "eˆ�Óñ  :Ñr/   c                ó(   € V ^8„  d   QhR\         RR/# ró
  rô
  )r,   s   "r-   r.   r.   æ  s   € ÷ Uñ U¤Mð U°dñ Ur/   c                óà   €  ^ RI Hp VP                  V 4      '       d   \        RRR7       R# \	        V 4       \        RR7       R#   \
         d    \        P                  RR	R
7        R# i ; i)z¬Close a call that ended in ``exc`` without replacing it: a Hermes abort is ``cancelled``,
anything else ``failed`` with the classifier's reason for the error that ended it.rÝ
  rï   r†  )rf  rí
  NÚfailed)rf  z+Relay auxiliary failure finalization failedTrÜ   )r¥  rÞ
  Úis_cancellationrè
  r§  rŸ   r­   r®   )rc  rÞ
  s   & r-   re  re  æ  s[   € ðUÝ0Ø!×1Ñ1°#×6Ò6Ü*°;ÈFÕSÙÜ# CÔ(Ü&¨x×8øÜô UÜ�‰ÐDÈtˆ×TðUús   ‚A ŸA ®A Á"A-Á,A-c                óJ   € V ^8„  d   QhR\         R\        R,          R\         /# )r)   rß  rB  Nr*   r  )r,   s   "r-   r.   r.   ô  s%   € ÷ .ñ .¤Cð .¬s°T­zð .ÄSñ .r/   c           
     óØ  € \        V R4      '       d   V # \        V R4      p\        V\        4      '       g   V # \        V R4      RJ dj   VP                  R4      ;'       g    Tp\        V\        4      '       d   VP                  R4      MRp\	        RT;'       g    R	 R
T;'       g    T 24      hVP                  R4      '       g   V #  \        V 4      P                  V4      #   \        \        \        3 d     Mi ; i. pTR,           F‚  p\        T\        4      '       d   TP                  R4      MRp\        T\        4      '       g   KD  TP                  \        \        R/ TB TP                  R4      ;'       g    RR7      4       K„  	  T'       g   T # \        TP                  RR4      TP                  RR4      TP                  RR4      TTP                  R4      R7      # )aù  Unwrap gateway envelopes like {"data": {<chat completion>}, "success": true}.

Some OpenAI-compatible gateways (e.g. api.cline.bot) wrap non-streaming
JSON bodies in a data/success envelope.  The SDK leniently parses this
into a ChatCompletion with choices=None and keeps the envelope keys as
extra fields, so the real completion is reachable at ``response.data``.
Error envelopes ({"success": false, "data": {"error": ...}}) raise the
provider's actual error instead of a generic invalid-response error.
rÃ  rŠ  rì
  Frâ  rÀ  Nr:  r_  z$: provider returned error envelope: rÁ  rY  ©rÀ  rÁ  r2  rj   r³  rè  úchat.completionrÄ  ©r2  r³  rè  rÃ  rÄ  rD   )r  r?   r¤   rž   rc   r+   Úmodel_validater«   r€  r”  r˜  r   )rß  rB  rŠ  ré  r©  rÃ  Úchs   &&     r-   rà
  rà
  ô  s±  € ô ˆh˜	×"Ò"ØˆÜ�(˜FÓ#€DÜ�dœD×!Ò!ØˆÜˆh˜	Ó" eÓ+Ø�h‰h�wÓ×'Ð' 4ˆÜ$.¨s´D×$9Ò$9ˆc�g‰g�iÔ ¸tˆÜØ˜Ÿ˜ Ð(Ð(LØ�zˆz�cˆlðó
ð 	
ð �8‰8�I×ÒØˆðÜ�H‹~×,Ñ,¨TÓ2Ð2øÜœI¤zÐ2ô ñ 	ðúð €GØ�9�oˆoˆÜ#-¨b´$×#7Ò#7ˆb�f‰f�YÔ¸TˆÜ�cœ4× Ô Ø�N‰Nœ?Ü'Ñ.¨#Ñ.Ø Ÿf™f _Ó5×?Ð?¸ôö ñ ÷ ØˆÜØ�8‰8�D˜"ÓØ�h‰h�w Ó#Ø�x‰x˜Ð"3Ó4ØØ�h‰h�wÓôð s   ÃC& Ã&C?Ã>C?c                óF   € V ^8„  d   QhR\         R\        \         ,          /# ©r)   rß  r*   )r   r   )r,   s   "r-   r.   r.   %  s   € ÷ 
ñ 
¬Cð 
´H¼SµMñ 
r/   c                ó6  € \        V 4      pV'       g   R# \        \        VR7      \        V RR4      ;'       g    RR7      p V.V n        V #   \         dA    \        \        T RR4      \        T RR4      \        T R	R
4      T.\        T RR4      R7      u # i ; i)zšSynthesize chat-completions shape from Responses-style text (``output_text``,
``output`` items) that some compatible endpoints return outside ``choices``.N)rn  rÁ  rY  rü
  r2  rj   r³  rè  rý
  rÄ  rþ
  )Ú_extract_aux_response_textr   rq   rÃ  rŸ   )rß  r-  rÔ  s   &  r-   rã
  rã
  %  s®   € ô & hÓ/€DßÙÜ¤_¸TÔ%BÔRYÐZbÐdsÐuyÓRz÷  SEð  SEð  Eô  F€Fð
Ø"˜8ˆÔØˆøÜô 
ÜÜ�x  rÓ*´'¸(ÀGÈRÓ2PÜ˜8 XÐ/@ÓAÈFÈ8Ü˜( G¨TÓ2ô
ò 	
ð
ús   Á	A ÁABÂBc                ó0   € V ^8„  d   QhR\         R\        /# r  r  )r,   s   "r-   r.   r.   7  s   € ÷ $ñ $¬ð $´ñ $r/   c                ó~  € \        V R4      p\        V\        4      '       d'   VP                  4       '       d   VP                  4       # \        V R4      p\        V\        4      '       g   R# . pV F«  p\        VR4      pV'       d
   VR8w  d   K   \        VR4      ;'       g    .  Fq  p\        VR4      R	9   g   K  \        VR4      p\        V\        4      '       g   K:  VP                  4       '       g   KR  VP                  VP                  4       4       Ks  	  K­  	  RP                  V4      P                  4       # )
zIText from Responses-style ``output_text`` or ``output[].content[].text``.Úoutput_textr»  rj   r+   rÀ  rn  r-  Ú
>   Nr-  r  )r  r?   rX   r¨  r—  r˜  rÍ  )rß  r  r»  ÚpartsÚitemÚ	item_typerÿ  r-  s   &       r-   r  r  7  s÷   € ä˜ =Ó1€KÜ�+œs×#Ò#¨×(9Ñ(9×(;Ò(;Ø× Ñ Ó"Ð"Ü�H˜hÓ'€FÜ�fœd×#Ò#ÙØ€EÛˆÜ˜4 Ó(ˆ	ß˜ iÔ/ÙÜ˜D )Ó,×2Ð2°Ò2ˆDÜ�d˜FÓ#Ð'DÖDÜ˜d FÓ+�Ü˜d¤C×(Ô(¨T¯Z©Z¯\¬\Ø—L‘L §¡£Ö.ó	 3ñ	 ð �9‰9�UÓ×!Ñ!Ó#Ð#r/   g     À‚@g      @c                óF   € V ^8„  d   QhR\         \        ,          R\        /# )r)   r7  r*   rN  )r,   s   "r-   r.   r.   S  s"   € ÷ \ñ \´¼%µð \ÄUñ \r/   c                óŽ   €  V e   \        V 4      MRp\        \        \
        V,          4      #   \        \        3 d    Rp L0i ; i)u£   Absolute wall-clock bound for a streamed aux call; generous by design (the idle
timeout is the real guard â€” this only stops a one-token-per-idle-window trickle).rü  )rO  r€  r”  rÒ  Ú!_AUX_STREAM_CEILING_FLOOR_SECONDSÚ_AUX_STREAM_CEILING_MULTIPLIER)r7  r  s   & r-   rø  rø  S  sL   € ðØ.?Ò.K”%Ð)Ô*ÐQTˆô Ô0Ô2PÐSZÕ2ZÓ[Ð[øô ”zÐ"ô ØŠðús   ‚. ®AÁAc                ó0   € V ^8„  d   QhR\         R\        /# ©r)   r¯   r*   r  )r,   s   "r-   r.   r.   ]  s   € ÷ hñ h¤sð h¬tñ hr/   c                ó8   € \        V \        \        \        34      # )z’Adapters that stream inside .create() tick the hook themselves (Codex, Anthropic) or
cannot stream (Bedrock); none accept ``stream=True`` from us.)r?   rú  rA  r_  ©r¯   s   &r-   Ú_client_streams_internallyr  ]  s   € ô �fÔ3Ô5MÔOeÐfÓgÐgr/   c                óR   € V ^8„  d   QhR\         R\        \         ,          R\        /# r‚
  rZ  )r,   s   "r-   r.   r.   c  s%   € ÷ ñ ¬ð ´xÄµ}ð Ìñ r/   c                ó   a€ \        T;'       g    R4      P                  4       oS'       g   R# \        SR4      '       g   \        S4      '       d   R#  ^ RIHp V! 4       ;'       g    / P                  R/ 4      P                  R4      ;'       g    . p\        V\        \        34      '       d;   \        ;QJ d    V3R lV 4       F  '       g   K   R# 	  R# ! V3R lV 4       4      #  R#   \         d     R# i ; i)	uî   Providers that only accept streaming (non-stream = 400): Tencent Copilot, any
``auxiliary.stream_only_base_urls`` substring, and the managed local llama-server
(streamed for cancellation â€” it only notices a dead client on socket write).rj   Fzcopilot.tencent.comTrB  r   Ústream_only_base_urlsc              3   óÆ   <"  € T FV  p\        V\        4      ;'       d:    VP                  4       ;'       d"    VP                  4       P                  4       S9   x € KX  	  R # 5ir8   )r?   rX   r¨  r©  )r#  Úmarkerr¿  s   & €r-   r%  Ú,_provider_requires_stream.<locals>.<genexpr>p  sM   øé € ð 'á%�Fô ˜6¤3Ó'×]Ð]¨F¯L©L«N×]Ð]¸v¿|¹|»~×?SÑ?SÓ?UÐY]Ñ?]Ô]Û%ùs   ƒA!ŸA!·*A!)rX   r©  rŠ   r   r�   rX  rž   r?   r—  rù  r3  rŸ   )rŸ  rV   rX  Úmarkersr¿  s   &&  @r-   rñ  rñ  c  sç   ø€ ô ˆx�~ˆ~˜2Ó×$Ñ$Ó&€DßÙÜ˜TÐ#8×9Ò9Ô=WÐX\×=]Ò=]ÙðÝ1Ù“=×&Ð& B×+Ñ+¨K¸Ó<×@Ñ@ÐAXÓY×_Ð_Ð]_ˆÜ�g¤¤e˜}×-Ò-ß“3ô 'á%ó'—3”3ð '’3ð '�3ô 'á%ó'ó 'ð 'ð .ñ øô ô ØÙðús6   ÁC. Á)(C. Â)C. Â<C. ÃC. ÃC. ÃC. Ã.C=Ã<C=z can only afford\s+([0-9][0-9,]*)i   c                óF   € V ^8„  d   QhR\         R\        \        ,          /# ro  )rŸ   r   rW  )r,   s   "r-   r.   r.   €  s"   € ÷ Hñ H¬9ð H¼Ä#½ñ Hr/   c                ó6  € \        V 4      '       g   R# \        P                  \        V 4      4      pV'       g   R#  \	        VP                  ^4      P                  RR4      4      pT\        ,
          pT\        8¼  d   T# R#   \        \        3 d     R# i ; i)zßAffordable output budget (minus margin) from an OpenRouter credit-limited 402
("...but can only afford 7117": credit exists, the cap was too large); ``None``
when no count is present or the budget is too small to be useful.Nr‰
  rj   )rz  Ú_AFFORDABLE_TOKENS_REÚsearchrX   rW  rˆ  Úreplacer€  r”  Ú_AFFORDABLE_RETRY_MARGIN_TOKENSÚ_AFFORDABLE_RETRY_FLOOR_TOKENS)rc  r‡  Ú
affordableÚcappeds   &   r-   Ú!_affordable_max_tokens_from_errorr%  €  s‰   € ô ˜S×!Ò!ÙÜ!×(Ñ(¬¨S«Ó2€EßÙðÜ˜Ÿ™ Q›×/Ñ/°°RÓ8Ó9ˆ
ð Ô9Õ9€FØÔ=Ô=ˆ6ÐGÀ4ÐGøô ”zÐ"ô Úðús   ½*B ÂBÂBrð  c          
      óŒ   € V ^8„  d   QhR\         R\        \        \         3,          R\        \        ,          R\        R\         /# ©r)   r¯   r;   rB  rð  r*   ©r   r¤   rX   r   rm   )r,   s   "r-   r.   r.   ‘  sG   € ÷ añ aÜðaÜœc¤3˜h�ðaÜ/7¼­}ðaÜVZðaäñar/   c               ój  €  \        WW#R7      #   \         Ed   p\        T4      pTf   h TP                  R4      ;'       g    TP                  R4      p\	        T\
        \        34      '       d   ^ Tu;8  d	   T8:  d    h  \        T4      pTP                  RR4       TP                  RR4       TP                  \        T\        TP                  R4      ;'       g    R4      ;'       g    RR7      4       \        P                  RT;'       g    R	YT4       \        YY#R7      u Rp?# Rp?ii ; i)
zœCredit-aware :func:`_create_with_progress_once`: a 402 naming an affordable
budget retries ONCE with that cap (only ever lowering); anything else re-raises.rï  Nr#  r$  r³  rj   r¸  zwAuxiliary %s: credit-limited 402 (affordable=%d tokens); retrying once with a clamped output cap instead of failing: %sr_  )Ú_create_with_progress_oncerŸ   r%  rž   r?   rW  rO  r¤   rÆ  r™  r”	  rX   r­   r+  )r¯   r;   rB  rð  rc  r#  Úexisting_caprË  s   &&&$    r-   r’  r’  ‘  s  € ð
aÜ)¨&¸$ÔZÐZøÜõ aÜ6°sÓ;ˆ
ØÒØØ—z‘z ,Ó/×VÐV°6·:±:Ð>UÓ3VˆÜ�l¤S¬% L×1Ò1°a¸,Ö6TÈ*Õ6TØð 7Uä˜F“|ˆØ×Ñ˜ tÔ,Ø×ÑÐ0°$Ô7Ø×ÑÜ& z¼¸V¿Z¹ZÈÓ=P×=VÐ=VÐTVÓ9W×9_Ð9_Ð[_Ô`ô	bä�‰ð Uà—N�N˜F Jô	5ô *¨&ÀÔ`Õ`ûðaús-   ‚ �D2›'D-ÁB*D-Ã.$D-ÄD-Ä'D2Ä-D2c          	      ó¬   € V ^8„  d   QhR\         \        \        3,          R\        R\        \         \        \        3,          \        \        3,          /# )r)   r;   r¯   r*   )r¤   rX   r   rù  rO  )r,   s   "r-   r.   r.   ª  sB   € ÷ 
>ñ 
>¤¤c¬3 h¥ð 
>¼ð 
>ÌÌdÔSVÔX[ÐS[ÍnÔ^aÔchÐNhÕHiñ 
>r/   c           	     ó"  € \        V 4      pRVR&   RR/VR&   \        \        \        VRR4      ;'       g    R4      4      '       d   \	        V4      pT\        V P                  R4      ;'       g    R4      \        V P                  R4      4      3# )	zÊ(stream kwargs, model name, total ceiling) for a streamed re-aggregation. Requests to the
managed llama-server also ask for prompt-reading progress, which keeps the watchdogs fed
through a long prefill.TrÜ  Úinclude_usageÚstream_optionsrV   rj   r³  r  )r¤   r   rX   rq   r   rž   rø  )r;   r¯   rÏ  s   && r-   Ú_stream_request_planr0  ª  sˆ   € ô ˜“L€MØ"€M�(ÑØ'6¸Ð&=€MÐ"Ñ#Ü!¤#¤g¨f°jÀ"Ó&E×&KÐ&KÈÓ"L×MÒMÜ,¨]Ó;ˆØœ3˜vŸz™z¨'Ó2×8Ð8°bÓ9Ü% f§j¡j°Ó&;Ó<ð>ð >r/   c          
      óŒ   € V ^8„  d   QhR\         R\        \        \         3,          R\        \        ,          R\        R\         /# r'  r(  )r,   s   "r-   r.   r.   ·  sG   € ÷ 5qñ 5qÜð5qÜœc¤3˜h�ð5qÜ/7¼­}ð5qÜVZð5qäñ5qr/   c          
     ób  € \        W4      p\        4        \        4       '       g	   V'       d   \        V 4      '       dD   V P                  P
                  P                  ! R/ VB p\        V 4      '       g   \        4        V# \        W4      w  rVp V P                  P
                  P                  ! R/ VB p\!        TR4      '       d   \        4        T# ^ RIHp
 \'        Y†Yz! YT4      R7      #   \         dµ   p	T'       gE   \        T	4      '       g4   \        T	4      '       g#   \        T	4      '       g   \        T	4      '       d   h \        P                  RT;'       g    RT	4       \        4        T P                  P
                  P                  ! R/ TB p\        4        Tu Rp	?	# Rp	?	ii ; i)u’  create() that streams (and re-aggregates, ticking the hook per substantive chunk) when a
progress hook is active or the provider is stream-only; plain ``create(**kwargs)`` otherwise
or when the adapter streams internally. Streaming rejections fall back to a plain call â€”
except under ``force_stream``.

Behavior is byte-for-byte identical to a plain ``create(**kwargs)`` when neither trigger applies (every
existing caller/task) or when the client's wire adapter streams internally. With a hook + a
chunk-capable client, the request is sent with ``stream=True`` and aggregated, ticking the hook only for
substantive chunks. The configured ``timeout`` acts per stream read (idle) rather than as a total
budget, and outer liveness watchdogs see tokens moving. ``force_stream=True`` (stream-only providers
such as Tencent Copilot â€” credit @kudi88, PR #60686) takes the same streamed path even without a hook.
Providers that reject the streamed request fall back to the plain non-streaming call â€” except under
``force_stream``, where a stream-only provider rejects the plain call by definition, so the original
error is surfaced to the normal recovery chains instead.
zBAuxiliary %s: streamed request failed (%s); retrying non-streamingr_  NrÃ  )Úchat_stream_windows)r³  Útotal_ceilingÚno_progressrD   )r$   r  r  r  rö  rÝ  rÊ  r  r0  rŸ   r¢  r®  rz  r�  r­   rÞ   rË  Úagent.auxiliary_stream_watchdogr3  Ú_aggregate_chat_stream)r¯   r;   rB  rð  rß  rÏ  r³  r4  Úchunksrc  r3  s   &&&$       r-   r*  r*  ·  s^  € ô$ /¨vÓ>€FÜÔô
 !×"Ò"¯<Ô<VÐW]×<^Ò<^Ø—;‘;×*Ñ*×1Ò1Ñ;°FÑ;ˆÜ)¨&×1Ò1Ü)Ô+ØˆÜ*>¸vÓ*NÑ'€M˜-ðØ—‘×(Ñ(×/Ò/Ñ@°-Ñ@ˆô" ˆv�y×!Ò!Ü%Ô'ØˆÝCÜ!Ø¨=ÐFYÐZ`ÐjnÓFoôqð qøô) ô ÷ Ô9¸#×>Ò>Ä.ÐQT×BUÒBUÜ$ S×)Ò)Ô-AÀ#×-FÒ-FØô 	�‰ÐYØ—^�^˜V Sô	*äÔØ—;‘;×*Ñ*×1Ò1Ñ;°FÑ;ˆÜ%Ô'Ø�ûðús&   Â&C/ Ã/F.Ã:A%F)Å AF)Æ#F.Æ)F.r4  r5  c                ó¸   € V ^8„  d   QhR\         R\        R\        \        ,          R\        \        \        \        \        ,          3,          ,          R\         /# )r)   r8  r³  r4  r5  r*   )r   rX   r   rO  rù  )r,   s   "r-   r.   r.   ï  sM   € ÷ ñ ÜðÜðÜ4<¼UµOðäœ%¤¤x´¥Ð 6Õ7Õ8ðô 	ñr/   c               ó’   € ^ RI HpHp \        W\        R7      p V! WV4       V! V 4       VP                  4       #   T! T 4       i ; i)z±Consume a chunk stream into a complete response; TimeoutError (phrased "timed out" so
``_is_timeout_error`` matches) past *total_ceiling* or the *no_progress* windows (#100501).)Ú_close_chunk_streamÚconsume_chat_stream©r³  r4  r@  )r6  r;  r<  Ú_ChatStreamAccumulatorrD  rO  )r8  r³  r4  r5  r;  r<  Úaccs   &$$$   r-   r7  r7  ï  sH   € ÷ YÜ
 ØÔ@\ô^€Cð$Ù˜F¨Ô5á˜FÔ#Ø�:‰:‹<Ðøñ 	˜FÕ#ús	   ›	< ¼
Ac                   ó”   a € ] tR tRt o RtRV 3R lR lltV 3R lR ltV 3R lR	 ltV 3R
 lR ltV 3R lR lt	V 3R lR lt
RtV tR# )r>  i  zIShared per-chunk accumulation so sync and async aggregation cannot drift.Nc          
      ó|   <€ V ^8„  d   QhRS[ RS[S[,          RS[S[. S[R,          3,          ,          R,          /# )r)   r³  r4  r@  N)rX   r   rO  r   )r,   rQ   s   "€r-   r.   Ú#_ChatStreamAccumulator.__annotate__  s?   ø€ ÷ &ñ &™cð &±xÁµð &Ù %©°±U¸Tµ\Ð1AÕ(BÕ BÀTÕ Iñ&r/   c                ó
  € \         P                  ! 4       V n        \        V P                  4      V n        W n        W0n        . V n        . V n        . V n	        / V n
        R ;V n        V n        RV n        T;'       g    RV n        R # )Nrj   )r=  r>  Ú_startedr   Ú_prompt_readingÚ_total_ceilingÚ_host_deadlineÚcontent_partsÚreasoning_partsÚreasoning_detailsÚtool_calls_accrÁ  rÄ  Úresp_idÚ
resp_model)r9   r³  r4  r@  s   &&&&r-   r\   Ú_ChatStreamAccumulator.__init__  sr   € äŸšÓ(ˆŒä1°$·-±-Ó@ˆÔØ+Ôð ,ÔØ(*ˆÔØ*,ˆÔØ,.ˆÔØ9;ˆÔØ*.Ð.ˆÔ˜TœZØˆŒØŸ+˜+ 2ˆŽr/   c                ó   <€ V ^8„  d   QhRR/# r½   rD   )r,   rQ   s   "€r-   r.   rB    s   ø€ ÷ 9ñ 9 $ñ 9r/   c                óæ  € \         P                  ! 4       pV P                  eW   WP                  ,
          V P                  P
                  ,
          V P                  8¼  d   \        RV P                  R R24      h\        V P                  4      '       d   V P                  4       MV P                  pVe=   W8¼  d5   \        R\         P                  ! 4       V P                  ,
          R R24      hR# R# )z?Raise TimeoutError past the total ceiling or the host deadline.Nz(Auxiliary streamed call timed out after r<  z3s total ceiling (stream still open but over budget)zIAuxiliary streamed call timed out at the host compression deadline after zUs (the caller already stopped waiting; streaming on would only pin its session lease))	r=  r>  rF  rD  rE  Úsecondsr?  rÔ   rG  )r9   ra  r@  s   &  r-   Ú_check_deadlinesÚ'_ChatStreamAccumulator._check_deadlines  sÝ   € ä�nŠnÓˆØ×ÑÒ*°·m±mÕ0CÀd×FZÑFZ×FbÑFbÕ0bÐgk×gzÑgzÔ/zÜÐ!IÈ$×J]ÑJ]Ð^aÐIbð cSð  Só Tð Tä19¸$×:MÑ:M×1NÒ1N˜×+Ñ+Ô-ÐTX×TgÑTgˆØÒ$¨Ô)=Üð  1Ü15·²Ó1AÀDÇMÁMÕ1QÐRUÐ0Vð W8ð 8ó 9ð 9ñ *>Ñ$r/   c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r)   r   r*   r  )r,   rQ   s   "€r-   r.   rB  '  s   ø€ ÷ ñ ©Sð ±Tñ r/   c                óÖ  a€ \        VRR4      pVf5   \        VRR4      p\        V\        4      '       d   VP                  R4      p\        V\        4      '       g   R# RpV F‚  oV P
                  P                  S4       \        S\        4      '       g   K6  \        ;QJ d#    V3R l\         4       F  '       g   K   RM	  RM! V3R l\         4       4      '       g   K€  RpK„  	  V# )z™Collect ``reasoning_details`` (OpenRouter-style thinking); True only when a detail
carries text, so structural/signed envelopes can't keep a stall alive.rJ  NÚmodel_extraFc              3   ó„   <"  € T F5  p\        SP                  V4      \        4      ;'       d
    SV,          x € K7  	  R # 5ir8   )r?   rž   rX   )r#  r$  Údetails   & €r-   r%  ÚA_ChatStreamAccumulator._feed_reasoning_details.<locals>.<genexpr>4  s4   øé € ð 0eÙFcÀ”
˜6Ÿ:™: a›=¬#Ó.×<Ð<°6¸!µ9Ô<ÓFcùs
   ƒ*A ®A T)	rq   r?   r¤   rž   r—  rJ  r˜  r3  Ú_REASONING_DETAIL_TEXT_FIELDS)r9   r   rJ  rW  Úmade_progressrY  s   &&   @r-   Ú_feed_reasoning_detailsÚ._ChatStreamAccumulator._feed_reasoning_details'  sÈ   ø€ ô $ EÐ+>ÀÓEÐØÒ$Ü! %¨¸Ó=ˆKÜ˜+¤t×,Ò,Ø$/§O¡OÐ4GÓ$HÐ!ÜÐ+¬T×2Ò2ÙØˆÛ'ˆFØ×"Ñ"×)Ñ)¨&Ô1Ü˜&¤$×'Ô'¯C«Cô 0eÝFcó0e¯C¯CªCô 0eÝFcó0e÷ -eô -eà $’ñ	 (ð
 Ðr/   c                ó&   <€ V ^8„  d   QhRS[ RS[/# rU  r  )r,   rQ   s   "€r-   r.   rB  9  s   ø€ ÷ ñ ¡cð ©dñ r/   c           
     óà  € Rp\        VRR4      ;'       g    .  FÐ  p\        VR^ 4      ;'       g    ^ pV P                  P                  VRRRRR. /4      p\        VRR4      '       d   VP                  VR&   R	p\        VR
R4      pVf   Ks  \        VRR4      '       d   VP                  VR&   R	p\        VRR4      '       g   K¬  VR,          P                  VP                  4       R	pKÒ  	  V# )zHMerge tool-call fragments by index; True when any fragment carried data.Frr  Nrþ  r2  rj   r`   Ú	argumentsTrs  )rq   rK  r·   r2  r`   r˜  ra  )r9   r   r\  rª  Úidxr?  Úfns   &&     r-   Ú_feed_tool_callsÚ'_ChatStreamAccumulator._feed_tool_calls9  sé   € àˆÜ˜5 ,°Ó5×;Ð;¸Ò;ˆBÜ˜"˜g qÓ)×.Ð.¨QˆCØ×%Ñ%×0Ñ0°°t¸RÀÈÈ[ÐZ\Ð6]Ó^ˆCÜ�r˜4 ×&Ò&ØŸE™E��D‘	Ø $�Ü˜˜Z¨Ó.ˆBØŒ~Ü˜2˜v t×,Ò,Ø"$§'¡'�C˜‘KØ$(�MÜ˜2˜{¨D×1Ô1Ø˜Õ$×+Ñ+¨B¯L©LÔ9Ø$(’Mñ <ð Ðr/   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r)   Úchunkr*   r  )r,   rQ   s   "€r-   r.   rB  L  s   ø€ ÷ /ñ /™#ð /¡$ñ /r/   c                óÎ  € \        4        \        V4      pVR J;'       d    V P                  P                  V4      pV P	                  4        \        VRR 4      ;'       g    V P                  V n        \        VRR 4      ;'       g    V P                  V n        \        VRR 4      pV'       d   W@n        Ve   V'       d   \        4        R# \        VRR 4      ;'       g    . pV'       g   R# V^ ,          p\        VRR 4      ;'       g    V P                  V n
        \        VRR 4      pVf   R# Rp^ RIHp	 V	! \        VR	R 4      R
R7      p
V
'       d   V P                  P                  V
4       Rp\        VRR 4      ;'       g    \        VRR 4      pVf`   \        \        VRR 4      \         4      '       d?   VP"                  P%                  R4      ;'       g    VP"                  P%                  R4      pV	! VR
R7      pV'       d   V P&                  P                  V4       RpW€P)                  V4      ,          pW€P+                  V4      ,          pV'       d   \        4        V# )Nr2  r³  rÄ  FrÃ  rÁ  r   )Úflatten_message_textrn  rj   )ÚsepTr}  Úreasoning_contentrW  )r  r   rE  ÚtickrR  rq   rL  rM  rÄ  r  rÁ  Úagent.message_contentri  rH  r˜  r?   r¤   rW  rž   rI  r]  rd  )r9   rg  r   Ú	read_moreÚchunk_usagerÃ  rÔ  r   r\  ri  ÚpieceÚreasoning_pieces   &&          r-   ÚfeedÚ_ChatStreamAccumulator.feedL  s  € ô 	$Ô%Ü" 5Ó)ˆà DÐ(×PÐP¨T×-AÑ-A×-FÑ-FÀxÓ-Pˆ	Ø×ÑÔÜ˜u d¨DÓ1×AÐA°T·\±\ˆŒÜ! %¨°$Ó7×JÐJ¸4¿?¹?ˆŒÜ˜e W¨dÓ3ˆßØ$ŒJØÒ÷ Ü$Ô&ÙÜ˜% ¨DÓ1×7Ð7°RˆßÙØ˜•ˆÜ$ V¨_¸dÓC×YÐYÀt×GYÑGYˆÔÜ˜ ¨Ó.ˆØŠ=ÙØˆÝ>á$¤W¨U°I¸tÓ%DÈ"ÔMˆßØ×Ñ×%Ñ% eÔ,Ø ˆMÜ! %¨°dÓ;×hÐh¼wÀuÐNaÐcgÓ?hˆØÒ"¤z´'¸%ÀÐPTÓ2UÔW[×'\Ò'\Ø#×/Ñ/×3Ñ3°KÓ@×nÐnÀE×DUÑDU×DYÑDYÐZmÓDnˆOÙ.¨ÀBÔGˆßØ× Ñ ×'Ñ'¨Ô8Ø ˆMà×5Ñ5°eÓ<Õ<ˆØ×.Ñ.¨uÓ5Õ5ˆßÜ Ô"ØÐr/   c                ó    <€ V ^8„  d   QhRS[ /# r(   r9  )r,   rQ   s   "€r-   r.   rB  }  s   ø€ ÷ Cñ C™ñ Cr/   c                óx  € R pV P                   '       dr   \        V P                   P                  4       4       UUu. uFB  w  r#\        VR,          R\        VR,          RP	                  VR,          4      R7      R7      NKD  	  ppp\        RRP	                  V P
                  4      TRP	                  V P                  4      ;'       g    R V P                  ;'       g    R R	7      p\        ^ Y@P                  ;'       g    R
R7      p\        V P                  V P                  RV.V P                  R7      # u uppi )Nr2  rs  r`   rj   ra  )r`   ra  )r2  r+   rs  r¾  )ro  rn  rr  r}  rJ  rY  r¿  rý
  rþ
  )rK  r"  r‡  r   rÍ  rH  rI  rJ  rÁ  rL  rM  rÄ  )r9   rr  Ú_idxr?  rÀ  rÔ  s   &     r-   rO  Ú_ChatStreamAccumulator.finish}  s  € Øˆ
Ø××Ðô "(¨×(;Ñ(;×(AÑ(AÓ(CÔ!DôFñ "E‘I�Dô   3 t¥9°:ÌØ˜V�°·±¸¸KÕ8HÓ0IôIK÷ Lá!Dð ñ Fô "Ø b§g¡g¨d×.@Ñ.@Ó&AÈjØ—g‘g˜d×2Ñ2Ó3×;Ð;°tØ"×4Ñ4×<Ð<¸ô
ˆô
 ! q°'×I[ÑI[×IeÐIeÐ_eÔfˆÜ $§,¡,°d·o±oÐN_Ø(. x°t·z±zôCð 	CùóFs   »AD6)rG  rE  rD  rF  rH  rÁ  rJ  rI  rL  rM  rK  rÄ  )rj   NN)rH   rI   rJ   rK   rL   r\   rR  r]  rd  rr  rO  rN   rO   rP   s   @r-   r>  r>    sG   ø‡ € ÙS÷&ò &÷(9ð 9÷ð ÷$ð ÷&/ð /÷bCö Cr/   r>  c                ó^   € V ^8„  d   QhR\         R\        R\        \        ,          R\         /# )r)   r8  r³  r4  r*   )r   rX   r   rO  )r,   s   "r-   r.   r.   Ž  s0   € ÷ ñ ÜðÜðÜ4<¼UµOðäñr/   c          	   ƒ  óT  "  € \        W\        R7      p V   Rj  x€L
  pVP                  V4       K   LD ^ RIHp T! T RR7      pTei   \
        P                  ! \        4      ;_uu_ 4        TG Rj  x€L 
  RRR4       TP                  4       #   + '       g   i     TP                  4       # ; i TP                  4       #   ^ RIHp T! T RR7      pTeK   \
        P                  ! \        4      ;_uu_ 4        TG Rj  x€L 
  RRR4       i   + '       g   i     i ; ii ; i5i)zXAsync mirror of :func:`_aggregate_chat_stream` (AsyncOpenAI streams need ``async for``).r=  N)r;  T)Úallow_aclose)	r>  rD  rr  r6  r;  r–  r—  rŸ   rO  )r8  r³  r4  r?  rg  r;  Úpendings   &$$    r-   Ú_aggregate_chat_stream_asyncr|  Ž  sì   é € ô !ØÔ@\ô^€CðÙ!÷ 	ð 	�%Ø�H‰H�UŽOñ	™6õ 	HÙ% f¸4Ô@ˆØÒÜ×$Ò$¤Y×/Õ/Ø—‘÷ 0à�:‰:‹<Ð÷ 0Ö/à�:‰:‹<Ðúð ð �:‰:‹<Ðøõ 	HÙ% f¸4Ô@ˆØÒÜ×$Ò$¤Y×/Õ/Ø—‘÷ 0×/×/Ð/úð üs}   ‚D(•C —6›4œ6ŸC ´6¶C ¸6D(Á.BÁ4A7Á5BÁ:D(ÂB1	Â(D(Ã7D%Ã<D	ÄDÄD	Ä	D%ÄD!Ä	D%Ä%D(c                ó€   € V ^8„  d   QhR\         R\        \        \         3,          R\        \        ,          R\         /# )r)   r¯   r;   rB  r*   )r   r¤   rX   r   )r,   s   "r-   r.   r.      s<   € ÷ `ñ `¤sð `´D¼¼c¸µNð `Ì(ÔSVÍ-ð `Ôcfñ `r/   c              ƒ  óÜ   "  € \        W4      w  r4pV P                  P                  P                  ! R/ VB G Rj  x€L
 p\	        VR4      '       d   V# \        WdVR7      G Rj  x€L
 #  L- L5i)zWAsync create() for stream-only providers: ``stream=True`` + aggregate the async chunks.NrÃ  ©r³  r4  rD   )r0  rö  rÝ  rÊ  rË  r|  )r¯   r;   rB  rÏ  r³  r4  r8  s   &&&    r-   Ú_acreate_with_streamr€     sc   é € ä*>¸vÓ*NÑ'€M˜-Ø—;‘;×*Ñ*×1Ò1ÑB°MÑB×B€FÜˆv�y×!Ò!ØˆÜ-¨fÐQ^Ô_×_Ð_ñ Cñ `ùs!   ‚8A,ºA(»(A,Á#A*Á$A,Á*A,c                ó0   € V ^8„  d   QhR\         R\        /# r  r  )r,   s   "r-   r.   r.   ©  s   € ÷ wñ w¬Sð w´Tñ wr/   c                ó8   € \        V \        \        \        34      # )z[Async twin of :func:`_client_streams_internally` (the async adapters are separate classes).)r?   r  rK  rj  r  s   &r-   Ú _async_client_streams_internallyrƒ  ©  s   € ä�fÔ8Ô:WÔYtÐuÓvÐvr/   c          
      óŒ   € V ^8„  d   QhR\         R\        \        \         3,          R\        \        ,          R\        R\         /# r'  r(  )r,   s   "r-   r.   r.   ®  sG   € ÷  `ñ  `Üð `Üœc¤3˜h�ð `Ü/7¼­}ð `ÜVZð `äñ `r/   c             ƒ  óž  "  € \        W4      p\        4        \        4       '       g	   V'       d   \        V 4      '       dL   V P                  P
                  P                  ! R/ VB G Rj  x€L
 p\        V 4      '       g   \        4        V# \        W4      w  rVp V P                  P
                  P                  ! R/ VB G Rj  x€L
 p\!        TR4      '       d   \        4        T# \#        Y†TR7      G Rj  x€L
 #  L‘ L9  \         d¾   p	T'       gE   \        T	4      '       g4   \        T	4      '       g#   \        T	4      '       g   \        T	4      '       d   h \        P                  RT;'       g    RT	4       \        4        T P                  P
                  P                  ! R/ TB G Rj  x€L 
 p\        4        Tu Rp	?	# Rp	?	ii ; i LÓ5i)zºAsync :func:`_create_with_progress`: stream + re-aggregate (ticking the hook per substantive
chunk) when a progress hook is active or the provider is stream-only; plain create otherwise.NzHAuxiliary %s: streamed async request failed (%s); retrying non-streamingr_  rÃ  r  rD   )r$   r  r  rƒ  rö  rÝ  rÊ  r  r0  rŸ   r¢  r®  rz  r�  r­   rÞ   rË  r|  )
r¯   r;   rB  rð  rß  rÏ  r³  r4  r8  rc  s
   &&&$      r-   r¯  r¯  ®  sg  é € ô
 /¨vÓ>€FÜÔä ×"Ò"¯<Ô<\Ð]c×<dÒ<dØŸ™×0Ñ0×7Ò7ÑA¸&ÑA×AˆÜ/°×7Ò7Ü)Ô+ØˆÜ*>¸vÓ*NÑ'€M˜-ðØ—{‘{×.Ñ.×5Ò5ÑF¸ÑF×Fˆô ˆv�y×!Ò!Ü%Ô'ØˆÜ-¨fÐQ^Ô_×_Ð_ñ/ Bñ GøÜô ÷ Ô9¸#×>Ò>Ä.ÐQT×BUÒBUÜ$ S×)Ò)Ô-AÀ#×-FÒ-FØÜ�‰Ð_Ø—^�^˜V Sô	*äÔØŸ™×0Ñ0×7Ò7ÑA¸&ÑA×AÐAˆÜ%Ô'Ø�ûðúñ  `ùsw   ‚-G°:GÁ*C<Á+/GÂ)D  ÃC>ÃD  Ã	.GÃ7GÃ8GÃ>D  Ä GÄA%GÅ1;GÆ,F/Æ-GÆ=GÆ>GÇGÇGc                   ó,   a € ] tR tRt o V 3R ltRtV tR# )Ú_ResolvedAuxRouteiÕ  c                óZ   <€ V ^8„  d   Qh/ S[ ;R&   S[S[,          ;R&   S[;R&   S[;R&   # )r)   r¯   r9  r  rB  ræ  )r,   rQ   s   "€r-   r.   Ú_ResolvedAuxRoute.__annotate__Õ  s8   ø‡ ‚ Ù�Kñ á™#•Ññ ñ Ññ ñ Ñò	 r/   rD   Nr›  rP   s   @r-   r‡  r‡  Õ  r�  r/   r‡  c                ó²  € V ^8„  d   QhR\         \        ,          R\         \        ,          R\         \        ,          R\         \        ,          R\         \        ,          R\        R\         \        ,          R\         \        ,          R	\         \        ,          R
\         \        ,          R\         \        \        \        3,          ,          R\        R\
        /# )r)   rB  rŸ  r³  rV   rU   r  r3  r4  r5  r6  rç  r¢   r*   )r   rX   r¤   r   rm   r‡  )r,   s   "r-   r.   r.   Ü  sÅ   € ÷ 9Yñ 9YÜ
”3�-ð9YÜ&.¬s¥mð9YÜ<DÄS½Mð9YÜU]Ô^aÕUbð9Yä”c�]ð9Yä/2ð9YäDLÌSÅMð9Yô  ¤•}ð9Yô 9AÄ½ð9Yô  ¤•}ð	9Yô 5=¼TÄ#ÄsÀ(½^Õ4Lð	9Yô [_ð	9Yô
 ñ9Yr/   c               óš  € TpV R8X  d‡   \        VR8w  d   TMTT;'       g    TT;'       g    TT;'       g    TWºR7      w  rÍpVf7   VR8w  d0   V'       g(   \        P                  RV4       \        RWkV
R7      w  rÍpVe   T;'       g    TpEM\        WVW·W‰V
V R7      w  rÞ\	        WÕ4      pVfû   T;'       g    RP                  4       P                  4       pV'       d‚   VR9  d{   \        W4      w  pppVf2   VR	8X  d   \        4       MRp\        T;'       g    \        V4      4      hTTríV'       d   \        TT;'       g    RV R8H  R
7      w  rÞT;'       g    TpTpVfF   V'       g>   \        P                  RT ;'       g    RV4       \        RWºV R7      w  rÞ\	        VR4      pVf   \        RV  RV R24      h\        WÞW\4      # )z°Resolve the client for one aux call: vision chain, or cached text client with the
explicit-provider fallback_chain / auto-chain rescue; RuntimeError when nothing is configured.r  r¢  )rŸ  r³  rV   rU   r¢   rç  NzDVision provider %s unavailable, falling back to auto vision backends)rŸ  r³  r¢   rç  )r¢   rV   rU   ro  rç  rB  rj   r  ró  zBAuxiliary %s: provider %s unavailable, trying auto-detection chainr_  )r¢   rç  rB  z$No LLM provider configured for task=z
 provider=z. Run: hermes setup>   r¢  r�  rc  )r<  r­   r®   r=  r>  r¨  r©  rg  r†   rƒ   r…   r   r+  r‡  )rB  rŸ  r³  rV   rU   r  r3  r4  r5  r6  rç  r¢   rB  r¯   r9  Ú	_explicitr¢  r£  r„  Únous_details   &$$$$$$$$$$$        r-   Ú_resolve_call_clientrŽ  Ü  s  € ð +ÐØˆxÔÜ2PØ*;¸vÔ*EÑ&È8Ø ×)Ð) EÐ4E×4QÐ4QÈØ$×/Ð/¨¸Jô3
Ñ/Ð Kð
 Š>Ð/°6Ô9×BSÜ�N‰NÐaØ,ô.ä6TØ ~Ø)ô7+Ñ3Ð¨ð ÒØ 2× GÐ GÐ6GÐùä0Ø¸*Ø$È|ØôÑˆô <¸FÓVÐØŠ>ð +×0Ð0¨b×7Ñ7Ó9×?Ñ?ÓAˆIß˜YÐ.NÔNÜ0_Øó1%Ñ-�	˜8 XàÒ$ØFOÐSYÔFYÔ"@Ô"BÐ_c�KÜ4Ø#×VÐVÔ'KÈIÓ'VóXð Xà&/°˜ßÜ*:Ø! 8§> >¨r¸dÀhÑ>Nô+QÑ'�Fà$,×$AÐ$AÐ0AÐ!Ø%6Ð"ð Š~×&7Ü—‘Ð`Ø ŸN˜N FÐ,=ô?ä&8Ø zÐSWô'YÑ#�ä%CÀFÈFÓ%SÐ"Ø‚~Ü(Ð+OÐPTÈvð V5Ø5FÐ4GÐGZð*\ó ]ð 	]ä˜VÐ2CÓXÐXr/   c                   ó,   a € ] tR tRt o V 3R ltRtV tR# )Ú_PreparedAuxRequesti  c                ó&  <€ V ^8„  d   Qh/ S[ ;R&   S[S[,          ;R&   S[S[S[ 3,          ;R&   S[;R&   S[;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R	&   S[;R
&   S[S[S[ 3,          ;R&   S[;R&   # )r)   r¯   r9  r;   r  Úrequest_providerr3  r4  r5  r6  r7  r8  Ú	base_info)r   r   rX   r¤   rO  )r,   rQ   s   "€r-   r.   Ú _PreparedAuxRequest.__annotate__  s¿   ø‡ ‚ Ù�Kñ á™#•Ññ ñ ‘‘c��NÑñ ñ Ññ	 ñ
 Ññ ñ ™S•MÑ!ñ ñ  ¡•}Ñ$ñ ñ ™s•mÑ#ñ ñ  ¡•}Ñ$ñ ñ Ññ ñ ™s¡C˜x�.Ñ(ñ ñ �Nò r/   rD   Nr›  rP   s   @r-   r�  r�    r�  r/   r�  c          $      óŠ  € V ^8„  d   QhR\         \        ,          R\         \        ,          R\         \        ,          R\         \        ,          R\         \        ,          R\        \        \        3,          R\        R\         \
        ,          R	\         \        ,          R
\         \        ,          R\         \
        ,          R\         \        ,          R\         \        ,          R\         \        \        \        3,          ,          R\         \        ,          R\         \        \        \        3,          ,          R\        R\        /# )r)   rB  rŸ  r³  rV   rU   rç  rm  r%  r#  ri  r  r{  r(  rZ  ro  r|  r¢   r*   )	r   rX   r¤   r   r—  rO  rW  rm   r�  )r,   s   "r-   r.   r.   '  s   € ÷ A)ñ A)Ü
”3�-ðA)Ü&.¬s¥mðA)Ü<DÄS½MðA)ÜU]Ô^aÕUbðA)ä”c�]ðA)ä*.¬s´C¨x­.ðA)äDHðA)ô œ%•ðA)ô /7´s­mðA)ô EMÌTÅNðA)ô ”e�_ð	A)ô +3´4­.ð	A)ô MUÔUYÍNð	A)ô
 œD¤¤c �NÕ+ðA)ô
 8@Äµ}ðA)ô œœc¤3˜h�Õ(ðA)ô 7;ðA)ô ñA)r/   c               ó0  € \        WW#V4      w  pppppV'       d   Tp\        V 4      pTP                  T;'       g    / 4       \        WW#VVVVVVVVR7      w  pppp\	        W
4      p\        V\        \        34      '       d   \        V 4      MRpT;'       g    TpV'       g+   V R8X  d   \        V 4      M/ p\        V VVWVVVVR7	      w  pp\        VVV4       \        V\        V4      V4       V'       d"   \        \        VRR4      ;'       g    R4      pMi\        \        VRV4      ;'       g    R4      pV '       dB   \         P#                  RT T;'       g    RT;'       g    R	V'       d   R
V9  d   RV 2MR4       \%        TTYgTT	TTTT;'       g    TV VR7      p V'       d   \'        V4      V R&   \        \        VRR4      ;'       g    R4      p!\)        VV!4      '       d   \+        V R,          4      V R&   \-        VVV VVVVVVVVV4      # )zøShared head of call_llm/async_call_llm: resolve route + client, publish it, build request kwargs.
Sync-only: compression fast lane, per-request ``extra_headers``, and ``base_info`` falling
back to the resolved base_url when the client exposes none.)rŸ  r³  rV   rU   r  r3  r4  r5  r6  rç  r¢   NrÊ  r»  rV   rj   zAuxiliary %s: using %s (%s)%sr¢  r  rc  z at )	r%  r#  ri  r  r{  r(  rV   rB  rî  rZ  rm  )rS	  rh
  r™  rŽ  r[
  r?   rú  r  rS
  rG  rÁ  rz  r  r–  rX   rq   r­   r+  r?  r¤   r@  rA  r�  )"rB  rŸ  r³  rV   rU   rç  rm  r%  r#  ri  r  r{  r(  rZ  ro  r|  r¢   r  r3  r4  r5  r6  r8  r¯   r9  rB  r7  rî  r’  Úcompression_configr¢  r“  r;   Úclient_bases"   &$$$$$$$$$$$$$$$$                 r-   Ú_prepare_aux_requestr™  '  sW  € ô a}Ø˜¨óa2Ñ]Ð�~Ð'8Ð:JÐL]çØ$ÐÜ/°Ó5ÐØ×Ñ 
× 0Ð 0¨bÔ1ÜAUØ uÈØ+¸NØ+Ð>NØ+¸,ÐS]ô	BÑ>€FˆKÐ*Ð,>ô /¨tÓ=Ðô
 �fÔ3Ô5NÐO×PÒPô 	& dÔ+ØVZð ð *×>Ð>Ð->ÐßØAEÈÔAVÔ7¸Ô=Ð\^ÐÜ"AØÐ"2ÀØ'ÐM_Ø0¸ZØ+ô	#
ÑˆÐô Ð/°Ð>OÔPÜ�zÔ#@ÐAQÓ#RÐT_Ô`ßÜœ ¨
°BÓ7×=Ð=¸2Ó>‰	äœ ¨
Ð4EÓF×LÐLÈ"ÓMˆ	ßÜ�K‰KÐ7ØÐ/×9Ð9°6¸;×;SÐ;SÈ)ß/8¸\ÐQZÔ=Z˜4 	˜{Ñ+Ð`bôdô
  Ø˜+ xÐU_ØÐ.Ð;OØ)°I×4RÐ4RÐARÐY]Ø/ô	1€F÷
 Ü"& }Ó"5ˆˆÑä”g˜f j°"Ó5×;Ð;¸Ó<€KÜ$Ð%5°{×CÒCÜ@ÀÈ
ÕASÓTˆˆzÑÜØ�˜VÐ%6Ð8HÈ.ØÐ+Ð->Ð@QØ˜ió)ð )r/   c                   ó0   a € ] tR tRt o RtV 3R ltRtV tR# )Ú_LadderStepik  z¯A provider request the ladder asks its driver to perform. kind: "call" (client, kwargs) |
"retry_same_provider" (provider, model) | "fallback" (fb_client, fb_model, fb_label).c                ó2   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   # )r)   Úkindr:   rø  )r,   rQ   s   "€r-   r.   Ú_LadderStep.__annotate__k  s   ø‡ ‚ ñ �Iñ ñ �Kò	 r/   rD   NrÑ  rP   s   @r-   r›  r›  k  s   ø‡ € ñ]÷ ƒ r/   r›  ú
auth errorzmodel incompatible with routezinvalid provider responsezstructured provider errorúrequest timed outzconnection errorc                óT   € V ^8„  d   QhR\         R\        \        .\        3,          /# )r)   ÚstepÚaccept)r›  r   rŸ   rm   )r,   s   "r-   r.   r.   €  s&   € ÷ 	ñ 	”ð 	¤X¬y¨k¼4Ð.?Õ%@ñ 	r/   c              #  ór   "  €  V x €pVR3#   \          d   pT! T4      '       g   h RT3u Rp?# Rp?ii ; i5i)z�One ladder rung: perform ``step``; yields ``(response, None)`` on success,
``(None, exc)`` when ``accept(exc)`` lets the next rung handle it, else re-raises.N)rŸ   )r¢  r£  r_  rc  s   &&  r-   Ú_rungr¥  €  sD   é € ðØ‘ˆð
 �4ˆ<Ðøô	 ô Ù�c�{Š{ØØ�SˆyÕûðüs$   ‚7„ ˆ7Œ4—/©4ª7¯4´7c                ó0   € V ^8„  d   QhR\         R\        /# ro  rp  )r,   s   "r-   r.   r.   Œ  s   € ÷ 2ñ 2œYð 2¬4ñ 2r/   c                óÈ  € \        V 4      ;'       gÑ    \        V 4      ;'       g¾    \        V 4      ;'       g«    \        V 4      ;'       g˜    \	        V 4      ;'       g…    R\        V 4      9   ;'       go    R\        V 4      9   ;'       gY    \        V R4      ;'       gE    \        V 4      ;'       g2    \        V 4      ;'       g    \        V 4      ;'       g    \        V 4      # )a*  After a parameter-strip retry: fall through to the max_tokens/payment/auth
chains with the stripped kwargs; re-raise anything those chains won't handle.
A 429 on the retry is the credential/provider-fallback rungs' job, so it falls
through too (the pre-ladder max_tokens rung accepted rate limits).r#  Úunsupported_parameterr%  )rz  rœ  r®  r�  rì  rX   r³  rÂ  rÅ  r¿  rá  r…  s   &r-   Ú_param_rung_acceptsr©  Œ  sî   € ô
 ˜cÓ"÷ 	1ð 	1Ô&:¸3Ó&?÷ 	1ð 	1Ä>ÐRUÓCV÷ 	1ð 	1Ü# CÓ(÷	1ð 	1Ü,TÐUXÓ,Y÷	1ð 	1àœs 3›xÑ'÷	1ð 	1à+BÄcÈ#ÃhÑ+N÷	1ð 	1ô /¨s°MÓB÷	1ð 	1ô -¨SÓ1÷	1ð 	1ô 6VÐVYÓ5Z÷	1ð 	1ô /¨sÓ3÷	1ð 	1ô ,¨CÓ0ð	2r/   c                ó0   € V ^8„  d   QhR\         R\        /# ro  rp  )r,   s   "r-   r.   r.   �  s   € ÷ Vñ V¤)ð V´ñ Vr/   c                 ód   € \        V 4      ;'       g    \        V 4      ;'       g    \        V 4      # r8   )r®  rz  r�  r…  s   &r-   Ú_credential_rung_acceptsr¬  �  s*   € Ü˜#Ó×UÐUÔ"3°CÓ"8×UÐUÔ<PÐQTÓ<UÐUr/   c                   ó,   a € ] tR tRt o V 3R ltRtV tR# )Ú_LadderRoutei¢  c                ó~  <€ V ^8„  d   Qh/ S[ ;R&   S[S[,          ;R&   S[;R&   S[;R&   S[;R&   S[;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R	&   S[S[,          ;R
&   S[S[,          ;R&   S[S[S[S[ 3,          ,          ;R&   S[S[S[S[3,          ,          ;R&   S[S[,          ;R&   # )r)   r¯   rB  rÔ  r¢   r“  r  r3  r4  r5  r6  r9  rç  r|  r  )r   r   rX   rm   r¤   rO  )r,   rQ   s   "€r-   r.   Ú_LadderRoute.__annotate__¢  sê   ø‡ ‚ Ù�Kñ á
‘3�-Ññ ñ 
�Hñ ñ Ññ	 ñ
 �Nñ ñ Ññ ñ ™S•MÑ!ñ ñ  ¡•}Ñ$ñ ñ ™s•mÑ#ñ ñ  ¡•}Ñ$ñ ñ ™#•Ññ ñ ™4¡¡S �>Õ*Ñ*ñ ñ ™™c¡3˜h�Õ(Ñ(ñ ñ ‘e�_Ñò r/   rD   Nr›  rP   s   @r-   r®  r®  ¢  r�  r/   r®  c                óF   € V ^8„  d   QhR\         R\        \         ,          /# r^  rÇ  )r,   s   "r-   r.   r.   ³  s"   € ÷ hñ h¤ð h¬(´4­.ñ hr/   c                óz   € RV 9   d.   V P                  4        UUu/ uF  w  rVR8w  g   K  WbK  	  upp# R# u uppi )zACopy *kwargs* without ``temperature``; None when it was not sent.r%  N©r‡  ©r;   r‰  rŠ  s   &  r-   Ú_without_temperaturerµ  ³  s;   € àFSÐW]ÔF]˜VŸ\™\œ^ÔB™^‘T�Q¨q°MÑ/AŒDˆAŠD™^ÒBÐgÐcgÐgùÓBs   ›7«7c                ó0   € V ^8„  d   QhR\         R\         /# r^  rT  )r,   s   "r-   r.   r.   ¸  s   € ÷ añ a¤ð a¬ñ ar/   c                óh   € V P                  4        UUu/ uF  w  rVR9  g   K  WbK  	  upp# u uppi )ua  Copy *kwargs* without either output cap. Unlike the other strips this never returns None: a
route can translate the caller's cap into a field the wire kwargs no longer show (Codex
Responses), and the provider's own gateway may inject one â€” the 400 still names ``max_tokens``
and the identical request completes on retry (registry class #89897/#90257).)r#  r$  r³  r´  s   &  r-   Ú_without_max_tokensr¸  ¸  s0   € ð
 $Ÿ\™\œ^Ô`™^‘T�Q¨qÐ8_Ñ/_ŒDˆAŠD™^Ò`Ð`ùÓ`s   ”.¤.c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r)   rc  r¯   r*   )rŸ   r   rm   )r,   s   "r-   r.   r.   À  s&   € ÷ Yñ Y¤)ð Y´Sð Y¼Tñ Yr/   c                 óÄ   € \        V 4      pR V9   ;'       d    R\        \        VRR4      4      9   pRV9   ;'       g$    RV9   ;'       g    \        V R4      ;'       g    T# )Ú1210ÚbigmodelrV   rj   r#  r¨  )rX   rq   r³  )rc  r¯   Úerr_strÚis_zai_param_errors   &&  r-   Ú_is_max_tokens_rejectionr¿  À  s|   € Ü�#‹h€Gð   7Ñ*×aÐa¨z¼SÄÈÐQ[Ð]_ÓA`Ó=aÑ/aÐØ˜GÑ#÷ Xð XÐ'>À'Ñ'I÷ Xð XÜ.¨s°LÓA÷Xð XØEWðYr/   c                óR   € V ^8„  d   QhR\         R\        \        ,          R\        /# )r)   r¯   r#  r*   )r   r   rW  rù  )r,   s   "r-   r.   r.   É  s%   € ÷ ñ œSð ¬h´s­mð Äñ r/   c                ó    a a€ R \         R\        3\        \        R\        3\
        \        R\        3\        \        RR3V V3R l\        RR33# )	a  Ordered ``(matches, strip, log message, remember)`` parameter rungs; ``strip`` returns None
when the field was not on the wire, so an unchanged request is never re-sent; ``remember``
(optional) records the rejection per route so the next call omits the field up front.c                 ó   € \        V R 4      # )r%  )r³  r…  s   &r-   r¹  Ú"_parameter_rungs.<locals>.<lambda>Î  s   € Ô4°S¸-ÔHr/   z2provider rejected temperature; retrying without itz|provider rejected the structured-output format field; retrying without it (schema enforcement degrades to prompt compliance)z9provider requires reasoning; retrying at the floor effortzRprovider rejected the reasoning field; retrying without it (route default applies)Nc                 ó4   <€ SR J;'       d    \        V S4      # r8   )r¿  )rc  r¯   r#  s   &€€r-   r¹  rÃ  ß  s   ø€ �Z tÐ+×UÐUÔ0HÈÈfÓ0UÐUr/   z5provider rejected the output cap; retrying without it)rµ  ræ  r¿  r   r   rÅ  r   r   rÂ  rÍ  r¸  )r¯   r#  s   ffr-   Ú_parameter_rungsrÅ  É  sm   ù€ ñ
 
IÔJ^Ø	=Ô?]ð	_ä	(Ô*Kð
>Ü?cð	eô 
*Ô+?Ø	DÔF^ð	`ä	&Ô(AØ	]Ð_cð	eå	UÔWjØ	@À$ð	Hð%ð r/   c          	      ó€   € V ^8„  d   QhR\         R\        R\        \        \        3,          R\
        \        ,          /# )r)   Ú	first_errrž  r;   r#  )rŸ   r®  r¤   rX   r   r   rW  )r,   s   "r-   r.   r.   ä  s:   € ÷ #ñ #Üð#Ü!-ð#Ü7;¼CÄ¸Hµ~ð#ÜS[Ô\_ÕS`ñ#r/   c              #  ó*  a a"  € VP                   VP                  VP                  rep\        \	        WC4      4      pV'       dÉ   \        V V3R lV 4       R4      pVf   M¬VP                  V4       Vw  ršr¼V
! S4      p\        P                  RT;'       g    RWkS 4       S p\        \        RWM34      \        4       Rj  x€L
 w  po S f=   Ve4   T! VP                  VP                  ;'       g    VP                  SV4       VRV3# VoKÐ  RS S3#  LP5i)a¾  Parameter rungs: retry without temperature / structured-output format / reasoning field /
max_tokens. Rungs chain in whichever order the provider raises them (reasoning models reject
temperature AND max_tokens; a reasoning-strip retry can then trip temperature, #78273), each
field stripped at most once, so a request with N rejected fields recovers in N retries.
Returns ``(response, None, kwargs)`` or ``(None, narrowed_err, stripped_kwargs)``.c              3   ó|   <"  € T F1  pV^ ,          ! S4      '       g   K  V^,          ! S4      f   K-  Vx € K3  	  R# 5irò  rD   )r#  ÚrungrÇ  r;   s   & €€r-   r%  Ú*_ladder_parameter_rungs.<locals>.<genexpr>ï  s5   øé € ð K¡U˜TØ˜A–w˜y×)ô Ø.2°1®g°f«o÷ ’D£Uùs   ƒ<Ÿ<²
<NzAuxiliary %s%s: %s: %sr_  )r¯   rB  rÔ  r—  rÅ  r
  Úremover­   r+  r¥  r›  r©  r  r“  r4  )rÇ  rž  r;   r#  r¯   rB  rÔ  ÚrungsÚhitÚ_matchesr¨  rÀ  ÚrememberrË  Ú	rejectionÚresps   f&f&            r-   Ú_ladder_parameter_rungsrÓ  ä  s  ùé € ð Ÿ™ e§j¡j°%·)±)�#€FÜÔ! &Ó5Ó6€Eß
Üõ K¡Uó KØLPóRˆàŠ;ØØ�‰�SÔØ-0Ñ*ˆ˜Ù˜V“}ˆÜ�‰Ð,¨d¯n¨n°f¸cÈIÔVØˆ	Ü%*Ü˜ Ð 6Ó7Ô9Ló&N÷ N‰ˆˆiàÒØÒ#ñ ˜×0Ñ0°%·/±/×2\Ð2\ÀU×E\ÑE\Ø ô,à˜˜|Ð+Ð+ØŠØ�˜FÐ"Ð"ñNùs$   „?DÁADÂ)DÃ DÃ.DÃ0"Dc          	      ó€   € V ^8„  d   QhR\         R\        \        \        3,          R\        R\        \
        ,          /# )r)   rž  r;   rÀ  r*   )r®  r¤   rX   r   r   r›  )r,   s   "r-   r.   r.     s7   € ÷ ;ñ ;¤ð ;´d¼3Ä¸8µnð ;Ìsð ;ÔW_Ô`kÕWlñ ;r/   c                óâ  € \        V P                  ;'       g    RV P                  V P                  V P                  V P
                  V P                  V P                  V P                  V P                  V P                  R8H  R7
      w  r4Vf   R# \        P                  Y P                  ;'       g    RV P                  4       V'       d   WAP                  R4      8w  d   WAR&   \        RW134      # )zNRebuild the Nous client after a credential event; None when nothing refreshed.r  r  )
rÊ	  r³  rÇ	  rÈ	  r¢   rV   rU   ro  rç  rì  Nr_  r³  )rÐ	  r  r9  r3  rB  r¢   r4  r5  r6  rç  r­   r+  rÔ  rž   r›  )rž  r;   rÀ  Úrefreshed_clientÚrefreshed_models   &&&  r-   Ú_refreshed_nous_steprØ    sÀ   € ä(FØ×.Ñ.×8Ð8°&À×@QÑ@QØ×)Ñ)°u·z±zÈe×N^ÑN^Ø×(Ñ(°%×2HÑ2HØ×(Ñ(°u×7IÑ7IØ—:‘: Ñ)ô)Ñ%Ðð ÒÙÜ
‡K�K�Ÿ™×-Ð- v¨u¯y©yÔ9ß˜?¯j©j¸Ó.AÔAØ)ˆw‰Ü�vÐ 0Ð9Ó:Ð:r/   c                ój   € V ^8„  d   QhR\         R\        R\        \        \        3,          R\
        /# ©r)   rÇ  rž  r;   Úclient_is_nous©rŸ   r®  r¤   rX   r   rm   )r,   s   "r-   r.   r.     s4   € ÷ %ñ %Üð%Ü!-ð%Ü7;¼CÄ¸Hµ~ð%ÜW[ñ%r/   c              #  ó  "  € VP                   VP                  VP                  rep\        V 4      '       d¤   V'       dœ   \	        VR8H  VP                  R4      R7      pV'       du   WrP                  R4      8w  d`   \        P                  RT;'       g    RWbP                  R4      V4       WrR&   \        \        RWB34      R 4       Rj  x€L
 w  r€V f   VR3# \        V 4      '       dH   V'       d@   \        4       '       d0   \        WR4      p	V	e    \        V	R	 4       Rj  x€L
 w  r€V f   VR3# \        V 4      '       d8   V'       d0   \        WR
4      p	V	e    \        V	R 4       Rj  x€L
 w  r€V f   VR3# RV 3#  L² L\ L5i)z‘Nous-only rungs: stale-model self-heal, paid-account refresh, 401 refresh.
Returns ``(response, None)`` or ``(None, first_err)`` to fall through.r  r³  )r  r2  z]Auxiliary %s%s: model %r no longer in Nous catalog; retrying with refreshed recommendation %rr_  c                 ó   € R # )TrD   r…  s   &r-   r¹  Ú$_ladder_nous_rungs.<locals>.<lambda>&  s   € Ñbfr/   NzUAuxiliary %s%s: refreshed Nous runtime credentials after paid account check, retryingc                 ó>   € \        V 4      ;'       g    \        V 4      # r8   ©r¬  rœ  r…  s   &r-   r¹  rß  0  ó   € Ô":¸3Ó"?×"\Ð"\ÔCWÐX[ÓC\Ð"\r/   zFAuxiliary %s%s: refreshed Nous runtime credentials after 401, retryingc                 ó>   € \        V 4      ;'       g    \        V 4      # r8   rá  r…  s   &r-   r¹  rß  8  râ  r/   )r¯   rB  rÔ  rÚ  r6  rž   r­   r®   r¥  r›  rz  r�  rØ  r®  )
rÇ  rž  r;   rÛ  r¯   rB  rÔ  Úhealed_modelrÒ  r¢  s
   &&&&      r-   Ú_ladder_nous_rungsrå    s{  é € ð
 Ÿ™ e§j¡j°%·)±)�#€Fô ! ×+Ò+·Ü6Ø˜HÑ$°6·:±:¸gÓ3FôHˆç˜L¯J©J°wÓ,?Ô?Ü�N‰Nð GàŸ>˜> 6¨3·
±
¸7Ó0CÀ\ôSð +�7‰OÜ).¬{¸6ÀFÐCSÓ/TÑVfÓ)g×g‰OˆDØÒ Ø˜T�zÐ!ä˜×#Ò#¯Ô;e×;gÒ;gÜ#ØØcóeˆð ÒÜ).ØÑ\ó*^÷ ^‰OˆDàÒ Ø˜T�zÐ!Ü�i× Ò §^Ü#ØÐcóeˆàÒÜ).ØÑ\ó*^÷ ^‰OˆDàÒ Ø˜T�zÐ!Ø�ˆ?Ðñ+ hñ^ñ^ùsM   ‚<F¿AFÂ7FÃE>Ã&FÃ30FÄ#F Ä$&FÅ FÅ+FÅ,FÆ FÆFc                ój   € V ^8„  d   QhR\         R\        R\        \        \        3,          R\
        /# rÚ  rÜ  )r,   s   "r-   r.   r.   >  s4   € ÷ =ñ =Üð=Ü!-ð=Ü7;¼CÄ¸Hµ~ð=ÜW[ñ=r/   c           	   #  ó   "  € VP                   VP                  VP                  VP                  3w  rErg\	        WqP
                  \        VR4      4      p\        V 4      '       dÀ   VR9  d¹   V'       g±   VR8X  d   R\        VRR4      /M/ p	\        V3/ V	B '       d‡   V\        V4      8w  d   \        V4       \        P                  RT;'       g    RWh4       \        RY�P                  ;'       g    VP                   34      p
\#        V
R	 4       Rj  x€L
 w  r°V f   VR3# \%        WtVP&                  R
7      p\)        \        VRR4      ;'       g    R4      pV'       dÇ   \+        V 4      '       d¶   T p\-        V 4      '       d?   \/        V 4      '       g.   \#        \        RWB34      \*        4       Rj  x€L
 w  r¾Vf   VR3# \1        WÎVR7      '       dR   \        P                  RT;'       g    RWl\3        V4      P4                  4        \        RWqP                  34      x €R3# RV 3#  EL Ly  \6         dO   p\/        T4      '       g#   \        T4      '       g   \-        T4      '       d   \1        YÏ4       Tp  Rp?RT 3# h Rp?ii ; i5i)z•OAuth credential refresh + same-provider retry, then credential-pool rotation.
Returns ``(response, None)`` or ``(None, first_err)`` to fall through.rj   Nr<  r#  rU   zCAuxiliary %s%s: refreshed %s credentials after auth error, retryingr_  Úretry_same_providerc                 ó>   € \        V 4      ;'       g    \        V 4      # r8   rá  r…  s   &r-   r¹  Ú*_ladder_credential_rungs.<locals>.<lambda>U  râ  r/   r±	  )r#  zBAuxiliary %s%s: recovered %s via credential-pool rotation after %s>   Nrj   r¢  )r¯   rB  rÔ  r  r�  r“  r>  r®  rq   r{  r°  r÷  r­   r+  r›  r3  r9  r¥  r"  rç  rX   r¬  r�  rz  r1  r+   rH   rŸ   )rÇ  rž  r;   rÛ  r¯   rB  rÔ  r  Úauth_refresh_providerrß  r¢  rÒ  Úpool_providerÚ_client_api_keyÚrecovery_errÚ
retry2_errs   &&&&            r-   Ú_ladder_credential_rungsrð  >  sƒ  é € ð
 ,1¯<©<¸¿¹ÀUÇYÁYÐPU×PgÑPgÐ+gÑ(€F�#Ü<ØŸ?™?Ô,JÈ6ÐSUÓ,VóXÐä�y×!Ò!Ð&;ÐCUÔ&Uß"à2°kÔAð ,¬W°V¸YÈÓ-KÑLØGIð 	ä(Ð)>ÑQÀ.×QÐQØ$Ô(?Ð@QÓ(RÔRô &Ð&7Ô8Ü�K‰KÐ]ØŸ˜ ¨ôDäØ%Ø&×(<Ñ(<×(QÐ(QÀ×@QÑ@QÐRóTˆDô */ØÑ\ó*^÷ ^‰OˆDàÒ Ø˜T�zÐ!ô
 /Ð/@ÐW\×WiÑWiÔj€Mô œ' &¨)°RÓ8×>Ð>¸BÓ?€O÷ Ô1°)×<Ò<Ø ˆô   	×*Ò*Ô3DÀY×3OÒ3OÜ,1Ü˜F VÐ$4Ó5Ô7Oó-Q÷ "QÑˆDàÒ#Ø˜T�zÐ!Ü! -Èo×^Ó^Ü�K‰KÐ\ØŸ˜ ¨¼DÀÓ<N×<WÑ<WôYðÜ)Ø)Ð,=×?SÑ?SÐ+TóVñ VØX\ð]ð ]ð �ˆ?ÐòO^ñ("Qøô ô ô & j×1Ò1´^ÀJ×5OÒ5OÜ/°
×;Ò;Ü*¨=ÔEØ *”Ið �ˆ?Ðð ûðüsq   ‚A1JÁ4AJÃAJÄH-ÄAJÅ#AJÆ6H0Æ79JÇ1JÈH2 È(JÈ0JÈ2JÈ=A JÉ=JÊJÊJÊJÚtask_chain_onlyc                óü   € V ^8„  d   QhR\         \        ,          R\        R\        R\        R\         \        ,          R\        R\        R\
        \         \        ,          \         \        ,          \        3,          /# )	r)   rB  r  Úis_autorž  r,  r  rñ  r*   )r   rX   rm   r®  r   rù  )r,   s   "r-   r.   r.   ~  sj   € ÷ ñ Ü
”3�-ðÜ,/ðÜ:>ðÜGSðäœ3•-ðä03ðäIMðô Œ8”C�=œ(¤3�-¬Ð,Õ-ñr/   c          	     ó*  € Rp\        Y;'       g    RWtVP                  VR7      pV'       d   V# V^ ,          f,   V'       d$   \        Y;'       g    RWtVP                  VR7      pV^ ,          f#   \        WWsP                  WSP                  R7      pV# )uW  Next candidate after a fallback entry was quarantined mid-request (dead credential or a
capacity error): remaining configured entries (task chain, then main chain on auto) before the
discovery chain. ``task_chain_only`` (explicit-provider auth error) stops at the task chain â€”
the user never opted that task into discovery or the main model.zfallback candidate unavailabler¢  ©rõ  r,  r  r  ©rõ  r  r  rç  )rb  r“  rr  r*  rç  )	rB  r  ró  rž  r,  r  rñ  rõ  Úfbs	   &&&&&&$  r-   Ú_next_fallback_after_quarantinerø  ~  s�   € ð .€FÜ	'Ø×)Ð) 6°&ØŸ™°}ô
F€B÷ Øˆ	Ø	ˆ!…u‚}ŸÜ%Ø×-Ð- v°fØ!ŸO™O¸=ôJˆð 
ˆ!…u‚}Ü"Ø¨FÇOÁOØ'×6HÑ6HôJˆð €Ir/   c                ó0   € V ^8„  d   QhR\         R\        /# )r)   rÇ  rž  )rŸ   r®  )r,   s   "r-   r.   r.   —  s   € ÷ \ñ \¬ð \¼<ñ \r/   c           
   #  óî  a "  € VP                   VP                  VP                  rCpVR9   p\        V 3R l\         4       R4      p\
        ;QJ d#    V 3R l\         4       F  '       g   K   RM	  RM! V 3R l\         4       4      pV'       d   \        V4      P                  R4      MRp\        V\        4      ;'       d    \        V4      p	VR	8H  ;'       d    V'       * ;'       d    T	p
Ve   V'       g   V'       g   V
'       g   R# VR
8X  dA   \        \        WAP                  VP                  R7      ;'       g    TVP                  R7       VR8X  du   R\!        S 4      9   p\"        P%                  RT;'       g    RY1P                  ;'       g    TV'       d   S MRVP&                   R2T;'       g    RV'       d   RMRV4       M#\"        P)                  RT;'       g    RW6VS 4       VR9   d   RMVP*                  p^ RIHp VR
8X  d(   \1        WAP                  4      '       d   VP2                  MRp\5        Y$;'       g    RWlVP                  VR7      w  pppVf[   V'       dS   \7        Y$;'       g    RWlVP                  VR7      w  pppVf'   \9        WBWaP                  WáP                  R7      w  pppM)Vf&   V
'       g   \;        WBWlVP                  VR7      w  ppp\=        4       pVP>                  e   \A        VP>                  4      MRpVe‰   TT\!        \C        VRR4      ;'       g    R4      3pVV9   d   M]VPE                  V4       \G        VP>                  \I        V4      V4       \K        RVVV34      x €pVe   V# \M        W$WQWÎV
R7      w  pppKŒ  \"        P%                  RT;'       g    RW6V4       Ve*   VP>                  e   VP>                  PO                  V4       R# 5i)uó  Last rung: other providers (per-task chain; then auto: main fallback chain + discovery
chain, explicit: main-agent-model net). Returns the response or None.
Capacity errors (payment/quota, connection, exhausted 429, model incompatible, malformed
response) bypass the explicit-provider gate â€” the provider cannot serve this request
regardless of user intent. Auth errors from an explicit provider may only use the task's
own configured fallback_chain; they never imply an unconfigured provider hop.r¢  rj   Nc              3   óL   <"  € T F  w  rV! S4      '       g   K  Vx € K  	  R # 5ir8   rD   ©r#  Ú	predicaterù   rÇ  s   &  €r-   r%  Ú,_ladder_provider_fallback.<locals>.<genexpr>¦  s    øé € Ð[Ñ1BÑ-˜YÁiÐPY×FZ—5’5Ó1Bùs   ƒ$š
$c              3   óJ   <"  € T F  w  rVR 8w  g   K  V! S4      x € K  	  R# 5i)rŸ  NrD   rü  s   &  €r-   r%  rþ  §  s,   øé € ð aÙ5FÑ!1 È%ÐS_ÑJ_Ô‰	�)×ÐÓ5Fùs   ƒ#“#TFr†  rŸ  r  r±	  ry  r   zAuxiliary chat streamzlAuxiliary %s%s: request to %s %s (raise auxiliary.%s.%s for slow or reasoning models) on %s, trying fallbackr_  ztimed out after r$  rî  r  z.Auxiliary %s%s: %s on %s (%s), trying fallback)r/  rõ  rö  rV   r¾  )rñ  ztAuxiliary %s%s: %s on %s and all fallbacks exhausted (fallback_chain + main agent model). Raising the primary error.>   Nrj   r¢  )rŸ  r  )(rB  rÔ  r  r
  Ú_FALLBACK_REASONSr3  rG  rž   r?   r—  rm   r  r"  r¯   rç  r“  rX   r­   r®   r  r+  r9  r9  r/  r   ÚENDPOINTrb  rr  r*  rH  rb  r|  r¤   rq   rå  r  r–  r›  rø  r™  )rÇ  rž  rB  rÔ  r  ró  rõ  Úis_capacity_errorÚ
task_chainÚhas_task_fallback_chainÚexplicit_auth_with_task_chainÚstalledÚ_chain_failed_modelr/  Ú_chain_failure_scoper¢  r£  r„  Útried_lanesÚprimary_router.  Úfb_resps   f&                    r-   Ú_ladder_provider_fallbackr  —  s¸  øé € ð $)§:¡:¨u¯y©y¸%×:QÑ:QÐ €Dð  Ð#5Ñ5€GÜÔ[Õ1BÓ[Ð]aÓb€Fß›ô aÝ5FóaŸŸšô aÝ5Fóaó aÐçKOÔ+¨DÓ1×5Ñ5Ð6FÔGÐUY€JÜ(¨´TÓ:×OÐO¼tÀJÓ?OÐà�,Ñ×JÐJ w¤;×JÐJÐ3Jð "ð ‚~Ÿg×):×>[ÙØ�Ô ô 	!Ü&Ð'8¿,¹,ÐUZ×UgÑUgÔh÷ !ð !Ø ¨5¯?©?õ	<ð Ð$Ô$ð *¬S°«^Ñ;ˆÜ�‰ð 8Ø9=¿¸ÀÈÏoÉo×NrÐNrÐarß$+‘yÐ3CÀEÇMÁMÀ?ÐRSÐ1TÐVZ×VdÐVdÐ^dß07Ñ,¸YÐHYõ	[ô
 	�‰ÐDØ—N�N˜F CÐ1BÀIô	Oð
 #)Ð,KÔ"K™$ÐQV×QbÑQbÐÝ3ð �_Ô$Ô)@ÐAR×TcÑTc×)dÒ)dð 	×Òàð ô
 %CØ×)Ð) 6°&ØŸ™Ð7Kô%MÑ!€Iˆx˜ð ÒŸWÜ(@Ø×-Ð- v°fØ!ŸO™OÐ;Oô)QÑ%ˆ	�8˜Xð ÒÜ,AØ!°ÏÉØ2×ASÑASô-UÑ)ˆI�x øð 
Ò	×#@Ü(FØ¨FØ!ŸO™OÐ;Oô)QÑ%ˆ	�8˜Xô “u€KØ.3×.>Ñ.>Ò.J”D˜×)Ñ)Ô*ÐPT€MØ
Ò
Ø˜(¤C¬°	¸:ÀrÓ(J×(PÐ(PÈbÓ$QÐRˆØ�;ÔØØ�‰˜ÔÜ˜5×+Ñ+Ô-JÈ8Ó-TÐV^Ô_Ü# J°¸HÀhÐ0OÓPÑPˆØÒØˆNÜ(GØ WÐ5HØ9ô);Ñ%ˆ	�8šXô ‡N�Nð Uà—>�>˜6 3Ð0AôCð Ò  U×%5Ñ%5Ò%AØ×Ñ×Ñ Ô.Ùùsƒ   ƒA&O5Á,#O5Â2O5ÃO5ÃO5Ã*O5Ã9O5ÄO5Ä	A6O5Æ O5Æ	O5ÆO5Æ9	O5Ç"O5Ç&A"O5É	$O5É.O5É<AO5ËA*O5Ì7BO5Î=8O5c          !      óø  € V ^8„  d   QhR\         R\        R\        \        \        3,          R\        \        ,          R\
        R\        R\        R\        \        ,          R	\        \        ,          R
\        \        ,          R\        \        ,          R\        \        ,          R\        \        ,          R\        \        \        \        3,          ,          R\        \        \        \        3,          ,          /# )r)   rÇ  r¯   r;   rB  r¢   r“  r  r3  r4  r5  r6  r9  r#  rç  r|  )rŸ   r   r¤   rX   r   rm   rW  )r,   s   "r-   r.   r.   ö  s×   € ÷ -ñ -Üð-Ü%(ð-Ü26´s¼C°xµ.ð-ÜHPÔQTÍð-äð-ä!$ð-ä9<ð-äNVÔWZÍmð-ô  ¤•}ð-ô 9AÄ½ð-ô  ¤•}ð	-ô 4<¼Cµ=ð	-ô OWÔWZÍmð	-ô
 œ4¤¤S �>Õ*ð-ô
 9AÄÄcÌ3ÀhÅÕ8Pñ-r/   c             #  ó(  "  € V'       d   RMRp\        WWôWVVW‰W«WÞVP                  R4      4      p\        V VW,4       Rj  x€L
 w  prV f   V# VR8H  ;'       g    \        VR4      p\	        V VVV4       Rj  x€L
 w  pp V f   V# \        V VVV4       Rj  x€L
 w  pp V f   V# \        V V4       Rj  x€L
 pVe   V# \        V 4      '       d    \        V4       V hV h LŸ Li LL L1  \         d    \        P                  RTRR	7        T hi ; i5i)
u\  Ordered recovery rungs after the primary request failed (generator): parameter
strips â†’ Nous heal/refresh â†’ credential refresh/pool rotation â†’ provider fallback.
Each rung returns a response, narrows ``first_err`` and falls through, or re-raises.
Raises the narrowed ``first_err`` when exhausted (after evicting a connection-poisoned client).r  rj   r  Nr  úinference-api.nousresearch.comz9Auxiliary%s: cache eviction after connection error failedTrÜ   )r®  rž   rÓ  rŠ   rå  rð  r  rœ  r,  rŸ   r­   rÞ   )rÇ  r¯   r;   rB  r¢   r“  r  r3  r4  r5  r6  r9  r#  rç  r|  rÔ  rž  rÒ  rÛ  s   &$$$$$$$$$$$$$$    r-   Ú_aux_recovery_ladderr  ö  sL  é € ÷ #‰*¨€CÜØ�c yÀ^ØÐ->È\Ø�
‰
�9Óó€Eô *AÀÈEÐSYÓ)f×fÑ€Dˆ)ØÒØˆØ'¨6Ñ1÷ \ð \Ü.¨yÐ:ZÓ[ð ä!3°I¸uÀfÈnÓ!]×]�O€Dˆ)ØÒØˆÜ!9¸)ÀUÈFÐTbÓ!c×c�O€Dˆ)ØÒØˆÜ/°	¸5ÓA×A€DØÒØˆô ˜I×&Ò&ð	-Ü)¨&Ô1ð €Oˆ)€Oñ; gñ
 ^ñ dñ Bøô ô 	-Ü�L‰LÐTØ tð õ -ð €Oð	-üsq   ‚>DÁ C ÁDÁDÁ8C"Á9DÂC$ÂDÂ4C&Â5DÃC( ÃDÃ"DÃ$DÃ&DÃ(#DÄDÄDÄDc                óT   € V ^8„  d   QhR\         \        .\        3,          R\        /# ©r)   Úperformr*   ©r   r›  r   )r,   s   "r-   r.   r.   &  s&   € ÷ ñ ¤8¬[¨M¼3Ð,>Õ#?ð ÄCñ r/   c                óð   €  \        V 4      p  V! V4      pV P                  V4      pK    \         d   pT P                  T4      p Rp?K?  Rp?ii ; i  \         d   pTP
                  u Rp?# Rp?ii ; i)zJRun a ladder generator, feeding each step's result (or exception) back in.N©r
  ÚsendrŸ   ÚthrowÚStopIterationrQ  ©Úladderr  r¢  r_  rc  rY  s   &&    r-   Ú_drive_ladderr  &  sl   € ð
Ü�F‹|ˆØð+Ù  ›�ð —{‘{ 6Ó*’øô ô )Ø—|‘| CÓ(–ûð)ûô ô Ø�z‰zÕûðúsB   ‚A �* —A ªAµAÁA ÁAÁA ÁA5ÁA0Á*A5Á0A5c                óT   € V ^8„  d   QhR\         \        .\        3,          R\        /# r  r  )r,   s   "r-   r.   r.   5  s'   € ÷ ñ ¬x¼¸ÄsÐ8JÕ/Kð ÔPSñ r/   c              ƒ  ó  "  €  \        V 4      p  V! V4      G Rj  x€L
 pV P                  V4      pK%   L  \         d   pT P                  T4      p Rp?KI  Rp?ii ; i  \         d   pTP
                  u Rp?# Rp?ii ; i5i)z=Async twin of :func:`_drive_ladder` (``perform`` is awaited).Nr  r  s   &&    r-   Ú_drive_ladder_asyncr  5  st   é € ð
Ü�F‹|ˆØð+Ù& t›}×,�ð —{‘{ 6Ó*’ñ	 -øÜô )Ø—|‘| CÓ(–ûð)ûô ô Ø�z‰zÕûðüs`   ‚B„A  ‘6 œ4�6 ¡A  ´6 ¶AÁAÁA  ÁAÁA  Á BÁ+A<Á6BÁ7BÁ<BÂBc                óR   € V ^8„  d   QhR\         R\        \         ,          R\        /# )r)   Ú
started_atra  r*   )rO  r   rW  )r,   s   "r-   r.   r.   D  s*   € ÷ Yñ YœEð Y¬´­ð YÄ3ñ Yr/   c                óz   € \        ^ \        Vf   \        P                  ! 4       MTV ,
          R,          4      4      # )z7Whole milliseconds since ``started_at`` (clamped at 0).iè  )rÒ  rW  r=  r>  )r!  ra  s   &&r-   Ú_elapsed_msr#  D  s,   € äˆq”#¨CªKœŸšÔ(¸SÀJÕNÐRVÕVÓWÓXÐXr/   c                óx   € V ^8„  d   QhR\         \        \        \        3,          ,          R\        R\        RR/# )r)   Úlatency_infor  r!  r*   N)r   r¤   rX   rW  rO  )r,   s   "r-   r.   r.   I  s7   € ÷ 4ñ 4¤h¬t´C¼°H­~Õ&>ð 4ÄSð 4ÔV[ð 4Ð`dñ 4r/   c                ó<   € V e   W9  d   \        V4      W&   R# R# R# )z;Record ``key`` in ``latency_info`` the first time it fires.N)r#  )r%  r  r!  s   &&&r-   Ú_stamp_latency_oncer'  I  s"   € àÒ CÔ$;Ü'¨
Ó3ˆÓñ %<Ñr/   r%  r#  ri  r  r{  r(  rÜ  r/  r|  r%  c          )      ó®  € V ^8„  d   QhR\         R,          R\         R,          R\         R,          R\         R,          R\         R,          R\        \        \         \        3,          ,          R\        R	\        \
        ,          R
\        R,          R\        R,          R\
        R,          R\        R,          R\        \        ,          R\        \        \         \         3,          ,          R\         R,          R\        R\        R,          R\        \        \         \         3,          ,          R\        \        \         \        3,          ,          R\        /# )r)   rB  NrŸ  r³  rV   rU   rç  rm  r%  r#  ri  r  r{  r(  rZ  ro  rÜ  r/  r|  r%  r*   ©rX   r   r¤   r   r—  rO  rW  rm   )r,   s   "r-   r.   r.   P  s:  € ÷ / ñ / Ü
��*ð/ Ü*-°­*ð/ ÜDGÈ$ÅJð/ ÜadÐgkÕakð/ ä�4�Zð/ ä.6´t¼CÄ¸Hµ~Õ.Fð/ äY]ð/ ô œ%•ð/ ô 69¸4µZð/ ô PTÐVZÍ{ð/ ô �T�\ð	/ ô /3°T­kð	/ ô U]Ô]aÕTbð	/ ô
 œD¤¤c �NÕ+ð/ ô
 ?BÀD½jð/ ô
 Z^ð/ ô ˜4•Kð/ ô 5=¼TÄ#ÄsÀ(½^Õ4Lð/ ô œ4¤¤S �>Õ*ð/ ô 	ñ/ r/   c               ó¸  € \         P                  ! 4       p\        V 4      pVe   VP                  4        \         P                  ! 4       pVe   \	        VV4      VR&   \        \        RR4      p \        V4      ;_uu_ 4        \        \        V4      '       d   TMVe   R MR4      ;_uu_ 4        \        \        \        P                  ! \        VRV4      4      ;_uu_ 4        \        \        \        P                  ! \        VRV4      4      ;_uu_ 4        \!        R/ RV bRVbR	VbR
VbRVbRVbRVbRVbRVbRV	bRV
bRVbRVbRVbRVbRVbRVbRVb pRRR4       RRR4       RRR4       RRR4       V'       d<   Ve8   TpRp\#        XV4      Ve   \	        V4      VR&   Ve   VP%                  4        # # XVe   \	        V4      VR&   Ve   VP%                  4        # #   + '       g   i     L”; i  + '       g   i     LŸ; i  + '       g   i     Lª; i  + '       g   i     Lµ; i  Te   \	        T4      TR&   Te   TP%                  4        i i ; i)zARun an auxiliary LLM request, applying the configured task limit.NÚqueue_wait_msrû   c                  ó   € R # r8   rD   rD   r/   r-   r¹  Úcall_llm.<locals>.<lambda>h  s   € ™tr/   Úprovider_dispatch_msÚtime_to_first_progress_msrB  rŸ  r³  rV   rU   rç  rm  r%  r#  ri  r  r{  r(  rZ  ro  rÜ  r/  r|  Úsummary_generation_msrD   )r=  r>  rx
  Úacquirer#  rq   r  ré  rL  rÔ   rJ  r  ro  Úpartialr'  r  Ú_call_llm_implÚ$_release_sync_semaphore_after_streamÚrelease)rB  rŸ  r³  rV   rU   rç  rm  r%  r#  ri  r  r{  r(  rZ  ro  rÜ  r/  r|  r%  Úqueue_started_atÚ	semaphoreÚrequest_started_atÚprior_progress_hookrß  Ústream_semaphores   &$$$$$$$$$$$$$$$$$$      r-   Úcall_llmr;  O  s¢  € ô —~’~Ó'ÐÜ+¨DÓ1€IØÒØ×ÑÔÜŸšÓ)ÐØÒÜ(3Ð4DÐFXÓ(Yˆ�_Ñ%Ü!¤-°¸Ó>Ðð ä ×-Õ-ÜäÐ/×0Ò0ñ $à(4Ò(@’|Àd÷õ ô
 #¤=´)×2CÒ2CÜ# \Ð3IÐK]ó3_÷ `õ `ä"Ô#9¼9×;LÒ;LÜ# \Ð3NÐPbó<d÷ eõ eô &ò ÙðÙ$,ðÙ49ðÙDLðÙV]ðá)ðá4<ðáJUðñ &ðñ .3ðñ =Dðñ Q[ðñ "2ð	ñ BOð	ñ Zbð	ñ
 ðñ
 /=ðñ
 JTðˆH÷e÷`÷÷ .÷$ �iÒ+Ø(ÐØˆIÜ7¸ÐBRÓSð Ò#Ü4?Ð@RÓ4SˆLÐ0Ñ1ØÒ Ø×ÑÕð !ð	 àÒ#Ü4?Ð@RÓ4SˆLÐ0Ñ1ØÒ Ø×ÑÕð !÷%e÷ eú÷`÷ `ú÷÷ ú÷ .×-ûð0 Ò#Ü4?Ð@RÓ4SˆLÐ0Ñ1ØÒ Ø×ÑÕð !úsy   Á/H0 Â.HÂ04H
	Ã$4G7ÄA G$ÅG7Å H
	Å(HÅ0H0 Æ H0 Æ;H0 Ç$G4Ç/G7Ç7HÈH
	È
HÈHÈH-	È(H0 È0)Ic                óD   € V ^8„  d   QhR\         R\        P                  /# )r)   rÜ  r7  )r   rè   rt
  )r,   s   "r-   r.   r.   ‚  s    € ÷ 
 ñ 
 ´ð 
 Ä×A[ÑA[ñ 
 r/   c              #  ó^  "  €  T  Rj  x€L
   \        V RR4      p\        V4      '       d   V! 4        VP                  4        R#  L<  TP                  4        i ; i   \        T RR4      p\        T4      '       d   T! 4        TP                  4        i   TP                  4        i ; i; i5i)zGRelease a permit only after a streaming response is consumed or closed.Nrè  )rq   rÔ   r5  )rÜ  r7  rè  s   && r-   r4  r4  ‚  sŽ   é € ð Ø×Ðð	 Ü˜F G¨TÓ2ˆEÜ˜�ŠÙ”à×ÑÖñ 	øð ×ÑÕûð	 Ü˜F G¨TÓ2ˆEÜ˜�ŠÙ”à×ÑÕøˆI×ÑÕÿsT   ‚B-„A ‰AŠA �%A ´B-ÁA ÁAÁB-ÁB*Á%BÂB*ÂB'Â'B*Â*B-c          )      ó  € V ^8„  d   QhR\         \        ,          R\        R\         \        ,          R\         \        ,          R\         \        ,          R\         \        ,          R\         \        \        \        3,          ,          R\
        R	\         \        ,          R
\         \        ,          R\         \
        ,          R\         \        ,          R\         \        ,          R\         \        ,          R\         \        \        \        3,          ,          R\         \        ,          R\         \        \        \        3,          ,          R\        \        \        \        \        3,          \        \        \        3,          3,          /# )r)   rB  r¢   rŸ  r³  rV   rU   rç  rm  r%  r#  ri  r  r{  r(  rZ  ro  r|  r*   )
r   rX   rm   r¤   r   r—  rO  rW  rù  r�  )r,   s   "r-   r.   r.   �  s3  € ÷ /ñ /Ü
”3�-ð/Ü(,ð/Ü8@Ä½ð/ÜNVÔWZÍmð/ä”s�mð/ä&.¬s¥mð/äCKÌDÔQTÔVYÐQYÍNÕC[ð/ô ð/ô "*¬%¥ð/ô ?GÄs½mð/ô U]Ô]aÕTbð/ô ”e�_ð	/ô +3´4­.ð	/ô MUÔUYÍNð	/ô
 œD¤¤c �NÕ+ð/ô
 8@Äµ}ð/ô œœc¤3˜h�Õ(ð/ô Ô¤¤S¬# X¥´´S¼#°XµÐ>Õ?ñ/r/   c               óT  € \        V4      p\        V 3/ RVbRVbRVbRVbRVbRVbRVbRV	bR	V
bR
VbRVbRVbRVbRVbRVbRVb p\        WW‰V
VP                  VP                  VR7      p\        VVP
                  VP                  VP                  VVP                  VR7      pVVV3# )a;  Shared head of both call impls: prepare the request and bundle the kwargs the recovery
drivers pass to ``_retry_same_provider_*`` / ``_call_fallback_candidate_*``. One immutable
runtime snapshot for keying/resolution/retries/fallbacks, so a concurrent /model switch
can't mix key and client from different runtimes.rŸ  r³  rV   rU   rç  rm  r%  r#  ri  r  r{  r(  rZ  ro  r|  r¢   )rB  rm  r%  r#  ri  r7  r8  r(  )r4  r5  r6  rç  r9  rZ  )	rã  r™  r¤   r7  r8  r4  r5  r6  r9  )rB  r¢   rŸ  r³  rV   rU   rç  rm  r%  r#  ri  r  r{  r(  rZ  ro  r|  rÙ  Úcandidate_kwargsrË  s   &$$$$$$$$$$$$$$$$   r-   Ú_plan_aux_callrA  �  s  € ô +¨<Ó8€LÜ
ØòÙðÙ',ðÙ7?ðÙIPðá!ðá,4ðáBMðñ ðñ &+ðñ 5<ðñ ISðñ *ð	ñ :Gð	ñ
 ðñ
 '1ðñ
 >Hð€Cô Ø°+Ø s×'<Ñ'<Ø ×5Ñ5ÐHXôÐô
 Ø¨C×,AÑ,AØ×-Ñ-À×AVÑAVØ!¨s¯©Èmô€Lð
 �Ð.Ð.Ð.r/   c                ó^   € V ^8„  d   QhR\         \        ,          R\        R\        R\        /# )r)   rB  rc  rÔ  r*   rî  )r,   s   "r-   r.   r.   °  s-   € ÷ 
ñ 
¤h¬s¥mð 
¼)ð 
Ì#ð 
ÔRVñ 
r/   c                ó€   € \        V4      '       g   R# \        W4      '       d   \        P                  RWV4       R# R# )zÅTrue when ``exc`` is a transient transport blip worth a same-provider retry; critical-path
tasks skip it on a full-budget timeout (``_should_skip_same_provider_retry``) and go straight
to fallback.Fz_Auxiliary %s%s: timeout on the critical path; skipping same-provider retry and falling back: %sT)r¢  rñ  r­   r+  )rB  rc  rÔ  s   &&&r-   Ú_should_retry_same_providerrD  °  s<   € ô )¨×-Ò-ÙÜ'¨×2Ò2Ü�‰ð HØIMÐTWô	YáÙr/   c                óæ   € V ^8„  d   QhR\         R\        R\        \        \        3,          R\        \        \        3,          R\
        \        \
        \        \        \        3,          3,          /# )r)   r¢  rÙ  rË  r@  r*   )r›  r�  r¤   rX   r   rù  )r,   s   "r-   r.   r.   ½  s\   € ÷ 	3ñ 	3Ü
ð	3Ü/ð	3Ü?CÄCÌÀH½~ð	3ÜaeÔfiÔknÐfnÕaoð	3ä
Œ3””tœC¤˜H•~Ð%Õ&ñ	3r/   c                óü   € V P                   R8X  d/   RV P                  \        VP                  VP                  R7      3# V P                   R8X  d   V P                  w  rERR\        W$VR7      3# RV P                  V3# )zQResolve a ladder step into ``(kind, args, kwargs)`` for the sync/async performer.r_  r•  rè  r  )r  r3  r¾  rD   )r�  r:   r¤   r  r6  )r¢  rÙ  rË  r@  Úretry_providerrD  s   &&&&  r-   Ú_ladder_step_callrH  ½  su   € ð ‡y�y�FÔØ�t—y‘y¤$°×0EÑ0EÐPS×PeÑPeÔ"fÐfÐfØ‡y�yÐ)Ô)Ø&*§i¡iÑ#ˆØ˜œD Ð`kÔlÐlÐlØ�t—y‘yÐ"2Ð2Ð2r/   c                óÐ   € V ^8„  d   QhR\         R\        R\        \        \        3,          R\
        \        ,          R\        R\
        \        \        \        3,          ,          /# )r)   rÇ  rÙ  rË  rB  r¢   r|  )rŸ   r�  r¤   rX   r   r   rm   )r,   s   "r-   r.   r.   É  s]   € ÷ Jñ JÜðJÜ2ðJÜBFÄsÌCÀxÅ.ðJä
”3�-ðJä%)ðJä7?ÄÄSÌ#ÀXÅÕ7OñJr/   c               ó  € \        WP                  VP                  W4VP                  VP                  VP
                  VP                  VP                  VP                  VP                  VR,          VR,          VR7      # )zABuild the recovery-ladder generator for a failed primary request.r#  rç  )r¯   r;   rB  r¢   r“  r  r3  r4  r5  r6  r9  r#  rç  r|  )
r  r¯   r;   r“  r  r3  r4  r5  r6  r9  )rÇ  rÙ  rË  rB  r¢   r|  s   &&&$$$r-   Ú_start_recovery_ladderrK  É  sk   € ô
  ØŸ*™*¨S¯Z©Z¸dØ—-‘-°3×3HÑ3HØ×)Ñ)¸S×=RÑ=RØ×-Ñ-À×AVÑAVØ—O‘O°¸\Õ0JØ! .Õ1¸jôJð Jr/   c          '      ój  € V ^8„  d   QhR\         R,          R\         R,          R\         R,          R\         R,          R\         R,          R\        \        \         \        3,          ,          R\        R	\        \
        ,          R
\        R,          R\        R,          R\
        R,          R\        R,          R\        \        ,          R\        \        \         \         3,          ,          R\         R,          R\        R\        R,          R\        \        \         \         3,          ,          R\        /# )r)   rB  NrŸ  r³  rV   rU   rç  rm  r%  r#  ri  r  r{  r(  rZ  ro  rÜ  r/  r|  r*   r)  )r,   s   "r-   r.   r.   ×  s8  € ÷ Zñ ZÜ
��*ðZÜ*-°­*ðZÜDGÈ$ÅJðZÜadÐgkÕakðZä�4�ZðZä.6´t¼CÄ¸Hµ~Õ.FðZäY]ðZô œ%•ðZô 69¸4µZðZô PTÐVZÍ{ðZô �T�\ð	Zô /3°T­kð	Zô U]Ô]aÕTbð	Zô
 œD¤¤c �NÕ+ðZô
 ?BÀD½jðZô
 Z^ðZô ˜4•KðZô 5=¼TÄ#ÄsÀ(½^Õ4LðZô 	ñZr/   c               óV  a aaaaaa € \        S 3/ RRbRVbRVbRVbRVbRVbRVbR	VbR
VbRV	bRV
bRVbRVbRVbRVbRVb w  oo oSP                  SP                  SP                  uoooV'       do   RSR&   V'       d   VSR&   S R8X  d=   \	        S\
        4      '       d'   SP                  P                  P                  ! R#/ SB # \        SSSSP                  R7      # R VVVVV 3R llp  V! SSP                  R7      #   \         dÛ   p\        S TR4      '       g   h \        4       pTp\        ^T^,           4       Fœ  p\!        \"        RT^,
          ,          ,          R4      p\$        P'                  RS ;'       g    RTTTT4       \(        P*                  ! T4        T! 4       u u Rp?#   \         d    p\-        T4      '       g   h Tp Rp?K–  Rp?ii ; i	  ThRp?ii ; i  \         d2   pR  TTT T 3R! llp\/        \1        TSS S RTR"7      T4      u Rp?# Rp?ii ; i)$a¨  Centralized synchronous LLM call: resolve provider/model, auth, kwargs, fallbacks.
task: aux task whose provider:model comes from config (ignored if provider set); api_mode
overrides task config; timeout=None reads auxiliary.{task}.timeout; extra_headers override
client defaults. stream=True returns the raw SDK stream (caller consumes/falls back)
instead of a validated response. RuntimeError if no provider is configured.r¢   FrŸ  r³  rV   rU   rç  rm  r%  r#  ri  r  r{  r(  rZ  ro  r|  TrÜ  r/  rg
  r•  c                ó0   € V ^8„  d   QhR\         R\         /# ©r)   Úvalidate_kwr*   r9  )r,   s   "r-   r.   Ú$_call_llm_impl.<locals>.__annotate__ø  s   € ÷ 
ñ 
¤ð 
¬ñ 
r/   c                  ó\   <€ \        \        SSSSP                  VVVV3R  lR7      S3/ V B # )c           
      ór   <€ \        ST S\        SSP                  ;'       g    SP                  4      R 7      # rî  )r’  rñ  r“  r4  )r“  r¯   rÙ  r’  rB  s   &€€€€r-   r¹  Ú2_call_llm_impl.<locals>._primary.<locals>.<lambda>   s2   ø€ Ô'<Ø˜G TÜ!:Ø(¨#¯-©-×*PÐ*P¸3×;PÑ;Pó"Rõ(r/   ró  )rJ  rª  r6  )rP  r¯   r;   rÙ  r’  rB  s   ,€€€€€r-   Ú_primaryÚ _call_llm_impl.<locals>._primaryø  s>   ø€ ô &Ü"Ø˜Ð)9ÀC×DYÑDY÷ôð ñ

ð  ñ

ð 
	
r/   rh  rj   g       @g       @zoAuxiliary %s: transient transport error (attempt %d/%d); retrying same provider after %.1fs before fallback: %sr_  Nc                ó0   € V ^8„  d   QhR\         R\        /# ©r)   r¢  r*   ©r›  r   )r,   s   "r-   r.   rQ  (   s   € ÷ 	>ñ 	>œ;ð 	>¬3ñ 	>r/   c                 ó˜   <€ \        V SSS4      w  rpVR 8X  d   \        \        V/ VB S4      # VR8X  d   \        R/ VB # \	        V/ VB # )r_  r  rD   )rH  rJ  rª  rL  r  )r¢  r�  r:   rk  r@  rÙ  rË  rB  s   &   €€€€r-   Ú_performÚ _call_llm_impl.<locals>._perform(   s]   ø€ Ü.¨t°S¸,ÐHXÓY‰NˆD˜Ø�vŒ~Ü-Ô.DÀdÐ.QÈbÑ.QÐSWÓXÐXØ�wŒÜ0Ñ6°2Ñ6Ð6Ü0°$Ð=¸"Ñ=Ð=r/   ©rB  r¢   r|  rD   )rA  r¯   r;   r’  r?   rú  rö  rÝ  rÊ  rÁ  r6  r“  rŸ   rD  r§  Úranger÷  Ú_TRANSIENT_RETRY_BACKOFF_BASEr­   r+  r=  Úsleepr¢  r  rK  )!rB  rŸ  r³  rV   rU   rç  rm  r%  r#  ri  r  r{  r(  rZ  ro  rÜ  r/  r|  rU  Útransient_errÚ_max_transient_retriesÚ_last_transientÚ_attemptÚ_backoffÚretry_transientrÇ  r[  r@  r¯   r;   rÙ  r’  rË  s!   f$$$$$$$$$$$$$$$$$         @@@@@@r-   r3  r3  ×  sw  þ€ ô +9Øò+Ùð+Ù)1ð+Ù9>ð+ÙIQð+áð+á&2ð+á=Eð+ñ  ð+ñ -7ð+ñ ?Dð+ñ NUð+ñ ð	+ñ 1Að	+ñ
 $ð+ñ
 /7ð+ñ
 DNð+Ñ'€CˆÐ'ð (+§z¡z°3·:±:¸s×?SÑ?SÐ$€FˆFÐ$÷ ØˆˆxÑßØ'5ˆFÐ#Ñ$ØÐ#Ô#¬
°6Ô;O×(PÒ(Pð —;‘;×*Ñ*×1Ò1Ñ;°FÑ;Ð;Ü! &¨&Ð;KÐVY×VkÑVkÔlÐl÷
ô 
ð."ð	"ÙÐ%5ÀÇÁÔNÐNøÜô 	"Ü.¨t°]ÀB×GÒGØÜ%;Ó%=Ð"Ø+ˆOÜ! !Ð%;¸aÕ%?Ö@�ÜÔ<ÀÈÐSTÍÕ@UÕVÐX[Ó\�Ü—‘ð Uà ŸN˜N F¨HÐ6LÈhÐXgôiô —
’
˜8Ô$ð6Ù#›:×%øÜ ô 6Ü8¸×IÒIØØ&5–Oûð6úñ Að "Ð!ûð#	"ûô$ ô 
÷	>ó 	>ô Ü" 9¨c°<ÀdÐW\ÐisÔtØóõ 	ûð
úss   Ã0D ÄG)ÄA3G$Æ!G$Æ%F3Æ+G$Æ-G)Æ.G, Æ3GÆ>GÇG$ÇGÇG$Ç$G)Ç)G, Ç,H(Ç7&H#ÈH(È#H(c                ó  € V e   \        V \        4      '       d   V # \        V \        4      '       d&   RV 9  d   V # V P                  R4      ;'       g    . pM\	        V RR4      pV'       g   V # V'       d   \        V^ ,          R4      # R# )zÞPull a message (dict, object, or str) out of a response-or-message value: dict-shaped
responses/bare messages (compression, proxies) and ChatCompletion objects; MagicMock
``reasoning_*`` attrs are deliberately not strings.NrÃ  rÀ  )r?   rX   r¤   rž   rq   Ú_message_field)rß  rÃ  s   & r-   Ú_coerce_llm_messageri  4   sy   € ð Òœ: h´×4Ò4ØˆÜ�(œD×!Ò!Ø˜HÔ$ØˆOØ—,‘,˜yÓ)×/Ð/¨R‰ä˜( I¨tÓ4ˆßØˆOß4;Œ>˜' !�* iÓ0ÐEÀÐEr/   c                 óh   € \        V \        4      '       d   V P                  V4      # \        WR 4      # r8   r  )r©  r`   s   &&r-   rh  rh  E   s(   € Ü& s¬D×1Ò1ˆ3�7‰7�4‹=ÐO´w¸sÈ$Ó7OÐOr/   Úmax_reasoning_charsc                ó>   € V ^8„  d   QhR\         R,          R\        /# )r)   rk  Nr*   )rW  rX   )r,   s   "r-   r.   r.   I   s   € ÷ ,ñ ,Ä3ÈÅ:ð ,ÔY\ñ ,r/   c               óâ  € \        V 4      pVf   R# \        V\        4      '       d   VP                  4       # \	        VR4      p\        V\        4      '       g   V'       d   \        V4      MRpVP                  4       pV'       d>   ^ RIHp TpV F  pVP                  RV4      pK  	  VP                  4       pV'       d   V# . pR
 Fo  p	\	        W)4      p
V
'       g   K  \        V
\        4      '       g   K0  V
P                  4       '       g   KH  W¨9  g   KP  VP                  V
P                  4       4       Kq  	  \	        VR4      pV'       dÍ   \        V\        4      '       d·   V F°  p\        V\        4      '       g   K  VP                  R4      ;'       g+    VP                  R4      ;'       g    VP                  R4      pV'       g   Kh  WØ9  g   Kp  TP                  \        V\        4      '       d   VP                  4       M
\        V4      4       K²  	  V'       g   R# RP                  V4      pVe6   \        V4      V8”  d&   \        P                  R	\        V4      V4       VRV # V# )u‹  Extract content from an LLM response, falling back to reasoning fields.
Order: ``content`` (inline think blocks stripped) â†’ ``reasoning``/``reasoning_content`` â†’
``reasoning_details`` (OpenRouter array). Accepts a response or bare message;
``max_reasoning_chars`` bounds a reasoning fallback so unbounded chain-of-thought can't
become the compaction summary. Returns ``""`` if nothing found.Nrj   rn  )Ú_REASONING_BLOCK_PATTERNSrJ  r„  r-  z

z:fell back to reasoning fields (%d chars); truncating to %d)r}  rk  )ri  r?   rX   r¨  rh  râ  rn  Úsubr˜  r—  r¤   rž   rÍ  rŸ  r­   r®   )rß  rk  r©  r�  rn  rn  ÚcleanedÚpatternrI  r8  r  ÚdetailsrY  r„  r-  s   &$             r-   Úextract_content_or_reasoningrs  I   sÔ  € ô ˜hÓ
'€CØ
‚{ÙÜ�#”s×ÒØ�y‰y‹{ÐÜ
˜˜iÓ
(€CÜ�cœ3×ÒßŒc�#Œh 2ˆØ�i‰i‹k€GßåIØˆÛ0ˆGØ—k‘k " gÓ.ŠGñ 1à—-‘-“/ˆßØˆNà!#€OÛ3ˆÜ˜SÓ(ˆß‰3”:˜c¤3×'Ô'¨C¯I©I¯K¬K¸CÖ<VØ×"Ñ" 3§9¡9£;Ö/ñ 4ô ˜SÐ"5Ó6€Gß”:˜g¤t×,Ò,ÛˆFÜ˜&¤$×'Ô'Ø Ÿ*™* YÓ/×^Ð^°6·:±:¸iÓ3H×^Ð^ÈFÏJÉJÐW]ÓL^�ß‘7˜wÖ=Ø#×*Ñ*¼jÈÔRU×>VÒ>V¨7¯=©=¬?Ô\_Ð`gÓ\hÖiñ	 ÷
 ÙØ�;‰;�Ó'€DØÒ&¬3¨t«9Ð7JÔ+JÜ�‰ÐSÜ˜4“yÐ"5ô	7àÐ(Ð(Ð)Ð)Ø€Kr/   c                óæ  € V ^8„  d   QhR\         R,          R\         R,          R\         R,          R\         R,          R\         R,          R\        \        \         \        3,          ,          R\        R	\        \
        ,          R
\        R,          R\        R,          R\
        R,          R\        R,          R\        \        ,          R\        \        \         \         3,          ,          R\        /# ©r)   rB  NrŸ  r³  rV   rU   rç  rm  r%  r#  ri  r  r{  r(  r|  r*   ©rX   r   r¤   r   r—  rO  rW  )r,   s   "r-   r.   r.   y   sã   € ÷  ñ  Ü
��*ð Ü*-°­*ð ÜDGÈ$ÅJð ÜadÐgkÕakð ä�4�Zð ä.6´t¼CÄ¸Hµ~Õ.Fð äY]ð ô œ%•ð ô 69¸4µZð ô PTÐVZÍ{ð ô �T�\ð	 ô /3°T­kð	 ô U]Ô]aÕTbð	 ô
 œœc¤3˜h�Õ(ð ô 	ñ r/   c             ƒ  óŠ  "  € \        V 4      pVe   VP                  4       G Rj  x€L
   \        V4      ;_uu_ 4        \        WW#VWVVW‰W«WÍR7      G Rj  x€L
 uuRRR4       Ve   VP	                  4        # #  LS L%  + '       g   i     M; i Te   TP	                  4        R# R#   Te   TP	                  4        i i ; i5i)zERun an asynchronous auxiliary LLM request under the configured limit.N)rB  rŸ  r³  rV   rU   rç  rm  r%  r#  ri  r  r{  r(  r|  )r}
  r1  ré  Ú_async_call_llm_implr5  )rB  rŸ  r³  rV   rU   rç  rm  r%  r#  ri  r  r{  r(  r|  r7  s   &$$$$$$$$$$$$$ r-   Úasync_call_llmry  x   sÂ   é € ô -¨TÓ2€IØÒØ×ÑÓ!×!Ð!ð
 Ü  ×.Õ.Ü-Ø°EÐV]Ø)È+Ø%¸GØ!1ô	÷ ÷ /Ñ.ð Ò Ø×ÑÕð !ñ 	"ñ÷ /×.úÐ.ð Ò Ø×ÑÖñ !øˆ9Ò Ø×ÑÕð !üsU   ‚#C¥A9¦C«B) ¾A=ÁA;ÁA=Á
B) Á#CÁ;A=Á=B	ÂB) ÂCÂ)C Ã Cc                óæ  € V ^8„  d   QhR\         R,          R\         R,          R\         R,          R\         R,          R\         R,          R\        \        \         \        3,          ,          R\        R	\        \
        ,          R
\        R,          R\        R,          R\
        R,          R\        R,          R\        \        ,          R\        \        \         \         3,          ,          R\        /# ru  rv  )r,   s   "r-   r.   r.   ‘   sã   € ÷ 7ñ 7Ü
��*ð7Ü*-°­*ð7ÜDGÈ$ÅJð7ÜadÐgkÕakð7ä�4�Zð7ä.6´t¼CÄ¸Hµ~Õ.Fð7äY]ð7ô œ%•ð7ô 69¸4µZð7ô PTÐVZÍ{ð7ô �T�\ð	7ô /3°T­kð	7ô U]Ô]aÕTbð	7ô
 œœc¤3˜h�Õ(ð7ô 	ñ7r/   c             ƒ  óò  a aaaaaaaa"  € \        S 3/ RRbRVbRVbRVbRVbRVbRVbR	VbR
VbRV	bRV
bRVbRVbRRbRRbRVb w  oooSP                  SP                  SP                  uooo \	        SSP
                  ;'       g    SP                  4      oR VVV 3R lloR VVVVVV 3R llp V! SSP
                  R7      G Rj  x€L
 #  L  \         dP   p\        S TR4      '       g   h \        P                  RS ;'       g    RT4       T! 4       G Rj  x€L 
 u Rp?# Rp?ii ; i  \         d;   pR TTTT 3R llp\        \        TSSS RTR7      T4      G Rj  x€L 
 u Rp?# Rp?ii ; i5i)z�Centralized asynchronous LLM call; see call_llm() for full documentation.
No per-request header / api_mode override on the async entry point.r¢   TrŸ  r³  rV   rU   rç  rm  r%  r#  ri  r  r{  r(  rZ  Nro  r|  c                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# )r)   Ú_kwargsr*   r	  )r,   s   "r-   r.   Ú*_async_call_llm_impl.<locals>.__annotate__§   s&   € ÷ 	iñ 	i¤D¬¬c¨¥Nð 	i´sñ 	ir/   c              “   ó>   <"  € \        SV SSR 7      G Rj  x€L
 #  L5i)rï  Nr®  )r}  Ú_force_stream_asyncr¯   rB  s   &€€€r-   Ú_acreateÚ&_async_call_llm_impl.<locals>._acreate§   s   øé € Ü/°¸ÀÐTgÔh×hÐhÑhùs   ƒ–—c                ó0   € V ^8„  d   QhR\         R\         /# rO  r9  )r,   s   "r-   r.   r~  ª   s   € ÷ 	%ñ 	%¬#ð 	%´#ñ 	%r/   c               ›   óž   <"  € ^ RI pVP                  ! \        \        SSSSP                  SR7      G Rj  x€L
 S3/ V B G Rj  x€L
 #  L L5i)ró  Nró  )rë  rì  rJ  rµ  r6  )rP  rë  r�  r¯   r;   rÙ  r’  rB  s   , €€€€€€r-   rU  Ú&_async_call_llm_impl.<locals>._primaryª   s]   øé € ÛØ ×*Ò*Ü&Ü-Ø˜FÐ-=È×H]ÑH]Ø#ô%÷ %ð ñ%ð
 $ñ%÷ %ð %ñ%ñ%ùs!   ƒ3A¶A	
·AÁAÁAÁArh  r  zgAuxiliary %s (async): transient transport error; retrying once on the same provider before fallback: %sr_  c                ó0   € V ^8„  d   QhR\         R\        /# rX  rY  )r,   s   "r-   r.   r~  ¼   s   € ÷ 		]ñ 		]¤ð 		]´ñ 		]r/   c              “   óT  <"  € \        V S
SS	4      w  rpVR 8X  d5   ^ RIpTP                  \        \	        V/ VB G Rj  x€L
 S4      G Rj  x€L
 # VR8X  d   \        R/ VB G Rj  x€L
 # Vw  rVp\        YV;'       g    RSR8H  R7      w  rX\        WVV3/ VB G Rj  x€L
 #  La LV L> L
5i)r_  Nr  rj   r  ró  rD   )rH  rë  rì  rJ  rµ  rO  r   r  )r¢  r�  r:   rk  rë  r¢  r£  r„  r¢  r@  rÙ  rË  rB  s   &        €€€€r-   r[  Ú&_async_call_llm_impl.<locals>._perform¼   sµ   øé € Ü.¨t°S¸,ÐHXÓY‰NˆD˜Ø�vŒ~ÛØ$×.Ñ.Ô/EÔMdÐfjÐMqÐnpÑMq×GqÐswÓx×xÐxØ�wŒÜ7Ñ=¸"Ñ=×=Ð=Ø,0Ñ)ˆI Ü+¨I·~°~À2ÐRVÐZbÑRbÔd‰LˆIÜ7¸	ÈXÑ\ÐY[Ñ\×\Ð\ñ HrÑxá=ñ ]ùsE   ƒ;B(¾B 
¿B(ÁB"ÁB(Á%B$Á&5B(ÂB&ÂB(Â"B(Â$B(Â&B(r]  )rA  r¯   r;   r’  rñ  r“  r4  rŸ   rD  r­   r+  r  rK  )rB  rŸ  r³  rV   rU   rç  rm  r%  r#  ri  r  r{  r(  r|  rU  ra  rÇ  r[  r�  r€  r@  r¯   r;   rÙ  r’  rË  s   f$$$$$$$$$$$$$    @@@@@@@@r-   rx  rx  ‘   sÍ  ÿøé € ô +9Øò+Ùð+Ù(0ð+Ù8=ð+ÙHPð+áð+á&2ð+á=Eð+ñ  ð+ñ -7ð+ñ ?Dð+ñ NUð+ñ ð	+ñ 1Að	+ñ
 ð+ñ
 &*ð+ñ
 7Að+Ñ'€CˆÐ'ð (+§z¡z°3·:±:¸s×?SÑ?SÐ$€FˆFÐ$ð&ô 8Ð8HÈ#Ï-É-×JpÐJpÐ[^×[pÑ[pÓqÐ÷	iò 	i÷	%õ 	%ð	$Ù!Ð+;ÀcÇmÁmÔT×TÐTÑTøÜô 	$ä.¨t°]ÀJ×OÒOØÜ�K‰Kð HØIMÏÈÐQWÐYfôhá!›×#Ð#Õ#ûð	$ûô ô ÷		]ó 		]ô )Ü" 9¨c°<ÀdÐW[ÐhrÔsØó÷ ð õ 	ûðüs—   ‹A$E7Á0AD/ Â4C ÃCÃC ÃE7ÃC ÃD,Ã,D'Ä
D'ÄDÄD'Ä!D,Ä"D/ Ä&E7Ä'D,Ä,D/ Ä/E4Ä:*E/Å$E'Å%E/Å)E4Å*E7Å/E4Å4E7c          	      óH
  € V ^8„  d   Qh/ ^ \         9   d   \        \        ,          ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d&   \        \        \
        \
        3,          ,          ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R	&   ^	\         9   d
   \        ;R
&   ^
\         9   d   \        \
        \
        3,          ;R&   ^\         9   d   \        \
        \
        3,          ;R&   ^\         9   d
   \        ;R&   ^\         9   d   \        \
        \
        3,          ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \
        ;R&   ^\         9   d
   \
        ;R&   ^\         9   d
   \
        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \
        ;R&   ^\         9   d
   \
        ;R&   ^\         9   d;   \        P                  \        \        \
        \        3,          ,          ,          ;R&   ^\         9   d;   \        P                  \        \        \
        \        3,          ,          ,          ;R&   ^\         9   d   \        \        R3,          ;R&   ^\         9   d   \        \        \        3,          ;R&   ^\         9   d   \        \        \        3,          ;R&   ^\         9   d   \        \        \
        3,          ;R&   ^\         9   d(   \        \
        \        R\        3,          3,          ;R&   ^\         9   d-   \        \
        \        \        .\         3,          3,          ;R &   ^\         9   d_   \        \
        \        \        \
        ,          .\        \        \        ,          \        \
        ,          3,          3,          3,          ;R!&   ^ \         9   d   \        \        \        3,          ;R"&   ^!\         9   dG   \        \        \
        \
        3,          \        \"        \$        P&                  3,          3,          ;R#&   ^"\         9   dB   \        \        \
        \
        \"        3,          \        \"        \        3,          3,          ;R$&   ^#\         9   d:   \        \        \        \(        .\        3,          \
        3,          R3,          ;R%&   # )&r)   r1   rC	  rE	  r:	  Ú_LOGGED_UNSUPPORTED_OAUTH_KEYSr”  rë  rä  r#  r$  r2  Ú_API_KEY_PROVIDER_AUX_MODELSrF  rN  rA  r,  r  rÆ  rÇ  rÈ  rÉ  rÊ  rË  rÙ  ra  .rÌ  rT  r\  rU  ry  rM	  rk	  rõ  rw
  r{
  r   )Ú__conditional_annotations__r   r+   rb  r¤   rX   rè  rù  rº
  rm   r   rn  Ú
ContextVarrO  r   rÍ  rñ  rW  rè   rt
  rŸ   )r,   s   "r-   r.   r.      sj  € ÷ ñ ÷j )Ò (”8œD•>Ñ (ñk÷\ +Ò *œsÑ *ñ]÷^ -Ò ,¤Ñ ,ñ_÷` .Ò -¤#Ñ -ña÷b ,Ò +¤Ñ +ñc÷B .Ò -Œh”tœC¤˜H•~Õ&Ñ -ñC÷R $Ò #”&Ñ #ñS÷X *Ò )œcÑ )ñY÷vò ”eñ ñw÷Fò ”Uñ ñG÷nò ¤t¬C´¨H¥~ñ ño÷D UÒ Tœd¤3¬ 8�nÑ TñE÷J ?Ò >”9Ñ >ñK÷f ZÒ Yœœc¤3˜h�Ñ Yñg÷L TÒ Sœ9Ñ SñM÷|  Ò ”4Ñ ñ}÷vF Ò ”3Ñ ñwF÷PO !Ò  œÑ  ñQO÷RO Ò ”SÑ ñSO÷TO !Ò  œÑ  ñUO÷VO  Ò ”sÑ ñWO÷XO !Ò  œÑ  ñYO÷ZO "Ò !œÑ !ñ[O÷\Oò ”{×-Ñ-¬h´t¼CÄ¸Hµ~Õ.FÕGñ ñ]O÷dOò œ×/Ñ/´¼¼cÄ3¸h½Õ0HÕIñ ñeO÷HU JÒ Iœu¤S¨# X�Ñ IñIU÷^b ,Ò +”dœ3¤˜:Õ&Ñ +ñ_b÷`b 0Ò /œ$œs¤E˜zÕ*Ñ /ñab÷bb +Ò *”tœC¤˜H•~Ñ *ñcb÷Nyò œœS¤(¨3´¨9Õ"5Ð5Õ6ñ ñOy÷xhò œT¤#¤x´Ð0AÄ>Ð0QÕ'RÐ"RÕSñ ñyh÷Vmò œœc¤8¬X´c­]¨O¼UÄ8ÌCÅ=ÔRZÔ[^ÕR_ÐC_Õ=`Ð,`Õ#aÐaÕbñ ñWm÷ls 'Ò &Œt”Eœ5�LÕ!Ñ &ñms÷~H YÒ X”dœ5¤¤c �?¬E´#´y×7QÑ7QÐ2QÕ,RÐRÕSÑ XñH÷@I HÒ G”tœE¤#¤s¬C -Õ0´%¼¼S¸µ/ÐAÕBÑ GñAI÷fk	ò 	”5œœx¬¨´TÐ(9Õ:¼CÐ?Õ@À#ÐEÕFñ 	ògkr/   )TNNr8   rß  )zgpt-mini-latestzgpt-nano-latestzclaude-haiku-latestzgemini-flash-latestzgpt-5.4-nanozgpt-5.4-miniz
gpt-5-miniz	haiku-4.5rô  z
flash-litez-nanoz-miniz-flashÚhaiku)r.  rõ  z-r1Úminilmz:batchrü  zo1-zo3-zo4-r¥  Úaudioz-vlÚembedz-ttsz-transcribez	-realtimez-imagez-search-preview)z
minimax.iozminimax.chatzminimaxi.com)zapi.minimax.r  rù  rI  rì  )rŸ  r³  rV   rU   ro  rÛ  )rÚ  rŽ  r�  )rÐ  rÑ  úcan only affordrÒ  ú isn't available on the free tierzkey limit exceededzbudget limitzrequires a subscriptionzupgrade for accesszupgrade for higher limitsz reached your session usage limitzquota exceededÚquota_exceededztoo many tokens per dayzdaily limitztokens per dayzdaily quotazresource exhaustedÚresource_exhaustedzresource-exhaustedÚresourceexhaustedzweekly usage limitzweekly limit)r‚  Ú
rate_limitztoo many requestsz	try againzretry afterz	resets in)rÐ  rÑ  rÒ  rÝ  r’  rÓ  zrun out of fundsrÔ  rÕ  rÞ  rØ  r“  >   r  rÊ  r?  )©zchatgpt.comr¦  )r÷  rc  ©r  r  ©rÅ  r<  )rg  rÙ  )r�  r9  ©zapi.x.air·  ))r‘	  rÙ  r˜  rš  r™  r›  )Nr  )Nrâ  Nrj   Nri   )râ  N)rj   râ  )	NFFNNNNFN)rc  r  rU	  )z$https://open.bigmodel.cn/api/paas/v4zhttps://api.z.ai/api/paas/v4)NFNNNNFN)NNNNN>   Úminimaxú
minimax-cnr+
  )Úimagez	image/png)Úvideoz	video/mp4>
   Úthinkr.  r}  Ú	verbosityÚthinkingbudgetÚthinkingconfigÚenable_thinkingÚthinking_budgetÚthinking_configrÉ  >   r  Únousresearchúnous-portal>   ÚnimÚnvidiaÚnemotronú
nvidia-nimúbuild-nvidia>   r7  Úgoogleúgoogle-geminiúgoogle-ai-studio)	NNNr5
  NNNNN)r„  r.  rn  r-  (D  rŒ  rL   r–  rn  ro  r  rù	  r…  r  rm  r  rè   r=  rb  Útypesr   Útypingr   r   r   r   r   r   r	   r
   r   r  r   r   r   Úagent.local_prompt_progressr   r   r   r   r   Úagent.error_classifierr   r   r   r   r   Úagent.auxiliary_managed_localr   rÔ
  r   r   rÕ
  r   r   r   Úagent.codex_headersr   rÈ  r    r¶   r!   r.  r"   r›  rÇ  r#   rÈ  r$   r2   r&   r1   r4   r6   rø   rr   rS   rs   Úcontextmanagerrv   r¯  rw   Úagent.custom_entry_poolrx   ry   Úagent.message_metadatarz   rÒ  r{   r|   r�   r}   Úhermes_cli.config_providersr~   Úagent.auxiliary_healthr   r€   r�   r‚   Úagent.auxiliary_unavailablerƒ   r„   r…   r†   r‡   r@
  rˆ   r‰   ÚutilsrŠ   r‹   rŒ   r�   rŽ   r�   r�   Ú	getLoggerrH   r­   rb  rC	  rE	  r:	  rŠ  r¡   r¬   r°   r¸   rÇ   ra  rº   rÈ   rÎ   r×   rË   rÌ   rá   r  r  r  rR  rü   r  r  r  r  r  r  r5  rE  rö  rJ  rL  rD  rX  rv  r|  r�  r‹  rv  r•  r”  rœ  r°  rè  rë  r¹  rÁ  rÄ  rñ  rò  rÓ  rÑ  rÙ  rß  rä  ræ  rí  ró  r#  r$  r  r+  r6  r2  r‹  rº
  rF  rI  rN  rQ  rA  rl  r^  rs  rx  rz  Úhermes_cli.version_infor{  Úbase_versionÚ_AI_GATEWAY_HEADERSrÉ
  r}  r�  r‚  r,  r  r-  rƒ  r?  r†  r‡  rˆ  r•  r–  r—  r¡  r¨  r®  r¶  r¼  rÄ  rÉ  rË  rÔ  rÚ  rã  ré  r$  rë  rR  r×  rá  rð  Ú!_AsyncAnthropicCompletionsAdapterrú  r  r  r  rA  rK  rM  r_  rj  rm  rw  r‹  r”  r£  r®  r¬  rÀ  rÊ  rÇ  rë  rö  rå  r  rý  r  r	  r  r  r0  r6  r>  r2  rN  r¬  rT  rS  rK  rO  rW  rÆ  rÇ  rÈ  rÉ  rÊ  rË  r�  rÙ  ra  rg  rr  rv  rz  r  rˆ  rª  rµ  rÁ  rÌ  ré   rÅ  rÎ  rÖ  r›  râ  rå  ré  rí  rÿ  r  r  r  r#  r(  rÅ  r0  r:  râ  rÕ  rD  rã  rJ  rS  rT  r\  rU  rN  rP  r`  ÚWARNINGr  rá  rb  rf  rm  rw  rz  r�  rŠ  r‹  r†  r�  r“  rœ  rŸ  r¢  r¦  r_  r§  r®  r³  r¿  rÂ  rÅ  rÍ  rÚ  rá  rä  rì  rð  rñ  r÷  r,  r  r  r  r  r  r"  r1  rF  rL  rO  rS  r\  ra  rd  rm  rp  ru  ry  r{  r�  rŠ  r�  r“  r–  r˜  r   r¦  r«  rµ  rÇ  rÓ  rÛ  rà  r  r  r*  r   rH  rL  rP  rX  rb  rg  rV  r]  rr  ry  r}  r…  r  rŠ  rŽ  r>  r   r7  r¶  rÄ  rË  rÍ  rù  rX   rñ  rá  r×  rÝ  rì  rè  rô  rø  rÿ  r	  r	  r	  r	  r	  r	  r$	  r'	  r+	  r6	  r=	  rG	  rM	  rC  rT	  rq	  rB  r]	  ra	  rk	  rm	  rt	  ry	  r‚	  r…	  rˆ	  r<  rŽ	  r”	  rõ  rô  r
  r–	  r«	  r¸	  r²	  rÀ	  rÆ	  rÐ	  rÙ	  râ	  rõ	  rÄ	  r
  r
  r
  r=  r 
  r%
  r#
  r$
  rS	  Ú_DEFAULT_AUX_TIMEOUTrY
  Úagent.auxiliary_task_configrG  r7
  rC
  rJ
  rM
  rÁ  rS
  rV
  r[
  rc
  rh
  rw
  r{
  rq
  rl
  rr
  rx
  r}
  r€
  r„
  r@  rŒ
  rA  rÊ  r—
  r�
  rž
  r¦
  r¢
  r£
  r§
  r¬
  r®
  r·
  rÁ
  rÎ
  r?  rJ  rè
  r§  re  rà
  rã
  r  r  r  rø  r  rñ  ÚcompileÚ
IGNORECASEr  r"  r!  r%  r’  r0  r*  r7  r[  r>  r|  r€  rƒ  r¯  r‡  rŽ  r�  r™  r›  r   r¥  r©  r¬  r®  rµ  r¸  r¿  rÅ  rÓ  rØ  rå  rð  rø  r  r  r  r  r#  r'  r;  r4  rA  rD  rH  rK  r3  ri  rh  rs  ry  rx  r.   )rŒ  s   @r-   Ú<module>rÈ     s„  øð÷ð ó Û Û Û Û Û Û Û 	Û 	Û Û Û Ý !ß _× _Õ _ß 7Ñ 7÷qõ q÷õ õ Eß Z÷ Bñ  B÷ó õ 9Ý H÷
 Ýà$(Ð Ó (õ÷,ñ ,ñ 
‹€ð —?’?Ó$Ð ÷6ñ 6õ$<ð ×Ññ'ó ð'õ ,ß LÝ 7ß QÝ -Ý ;÷ó ÷Dõ D÷ B÷ f÷  fñ  fà	×	Ò	˜8Ó	$€ñ
 &)£UÐ Ó *Ù'*£uÐ Ó ,Ù(+«Ð  Ó -Ù&)£eÐ Ó +õ
ð !&Ð ðAÈe÷ Aõ*@ð8 &ŸOšOÓ-Ð ôK Mô KõEõQð ×Ñ÷Có ðCõ&.õ÷0ñ 0ð6 —’Ó!€Ø—’Ó!€Ø"ŸšÓ*Ð ð !—’Ó(Ð õAõ*õ
*õ
<õõ<÷+ð +õ	õð0 +/Ð 'ð ×Ñôó ðð ×Ññó ðõ1ð ×Ñô.ó ð.õ*<%õ~õõð Ð ð ˆh˜ ¨*°hØ�˜;¨ðÐ ð
 *.€Ó -õõ"?ñ( "›8Ð Ó #õ<õ
6õ:ð +/Ð 'à$(Ð !÷`ð `õ*^÷
Mð Mõ
^ñ %(£EÐ Ó )õr÷>ð >ò$à(,÷ð ñ(Ð ó ñÐ ó õ^õ:ð|!È÷ !ðN Ð  %¨¸-ÐI`ØÐÐ!1Ð3JØ	Ð1°;Ð@[ØÐ)¨>Ð;KÈ]Ð\cØÐ)¨>Ð;PØ˜Ð':¸Mð9Ð %ó ð 0UÐ Ó Tñ  )Ð*<Ð)=Ó>Ð Ó >õRð ,4°[À%ÈÐ*YÐ Ó Yõñ  (1°-ÐAQÐ1RÓ'SÐ Ó Sð Ð;Øˆ~ØÐ7ðÐ õ÷(ð ð< 7¸ÐFÐ õ}õ 5ð Ð;Øˆ~Ø�LÑ!1Ó!3×!@Ò!@Ð AÐBðÐ õ Dõ)ð  Ð Ó ð
 =Ð Ø'€ØDÐ Ø9Ð Ù!Ó# kÕ1€Ø+Ð òbñ )WÐ %Ù(9Ð %õZõ÷<=ð =õ	÷ð õ,"÷.ð .ñ" (Ð)<Ð(=Ó>Ð õõ õ/õ"WõQð -Ð ÷dTñ dT÷NfKñ fK÷R#ñ #÷Dñ D÷:ñ :ð( %=Ð !÷
"ñ 
"ô	Ð 9ô 	õH÷,pKñ pK÷fñ ô	Ð$=ô 	÷&ñ &÷Rñ ô	Ð";ô 	õk÷+[ð +[õ\õD	ð#¸E÷ #ð #ðLØ"ñØHL÷ñ ÷2÷ ÷FJ÷&÷0IñX@Ø7<ñ@ØJO÷@ñ @÷0	ñ ›Ð Ó ÷M÷
(÷	÷$ó $÷N4ó 4÷(DLó DL÷NIð Iñ"À%÷ ò ð4 ×$Ó$Ñ%5±wÈÕNÑ Ø×'Ó'Ñ(8¹*ÈtÐ[_Õ`Ñ Ø×&Ó&Ñ'7¹ÈUÕSÑ Ø×'Ó'Ñ(8¹*ÈuÕUÑ ÷ð ÷&ð ÷ ð  ð4 !Ñ Ó  ØÑ Ó Ø Ñ Ó  ØÑ Ó Ø Ñ Ó  Ø!Ñ Ó !à×ÓÑ3¸TÕBñ ó ð
 ×ÓÑ1¸4Õ@ñ ó ð
 ×Ñö-ó ñ-ô*ô÷>ð >÷1ð 1ñØ"ñØ;?÷ò ñ&$ØCGñ$àñ$àRV÷$ò $ñNØCGñàñàRV÷ò ñ<ØCGñØ`d÷ò ñ4 2JÑ Ó IØ%ŸN›NÓ,Ñ ÷6ð 6÷3ð 3÷Kð KñØ<>ñØPRñàñà')ñà<>ñàRTñð ÷ò ÷@ð ð ×Ñö+ó ñ+÷<ð <÷$8ð $8÷Nð ÷
ð ÷&ð ÷"#gð #g÷L;ð ;÷.@ð @÷;ð ;ñ,6Ø"ñ6ØFJñ6à'+ñ6àGK÷6ò 6÷r7có 7cñt ]Ñ Ù3ñ 7õ  Ñ ÷
ð ÷6ð ñ !Ñ Ø)+Ñ Ó +Ø-/Ñ Ó /Ø(*Ñ Ó *ñ ‘,¡©°¹.Ù‘N¡N±NÀGÉ^ð Ñ ÷2ð 2ñ !9Ñ óØMQðá/ñà>E¿oºo÷ó ÷.ó ó 
ØIM÷
ó 
÷ "ð "÷-ð -ð &ñ )õ Ñ ÷ð ÷ð ñÑ ñ Ñ ÷Að A÷xð x÷
Nð 
N÷ð ÷"mð m÷
Nð Nð Ñ Ù #Ñ ÷*ð *÷	`ð 	`÷\ð \÷|ð |÷@	2ð 	2÷5ð 5÷-ð -÷&ð ÷(ð ÷0jð j÷Zð Zñ4 $Ó$QÓRÑ ÷pð p÷)ð )÷$ð ÷$ó ñ6/ÐPT÷ /ò /ñ6Ñ ñ
"Ñ ÷ð ÷,ó ,ñ^&ÐSU÷ &ò &ñR)&ð /3÷)&ò )&÷Xð ÷	ð 	÷=ð =÷ð ÷Vð V÷
ð ÷ó ÷	Zð 	Z÷mð mñ Ñ+©^Ñ=WÙ
Ñ% {Ñ4RÙÑ/±Ñ;Vð:Ñ ó ñÈ"÷ ò ÷ 'ó '÷ 6ð 6÷ ð ÷
Mð 
M÷Ið Iö˜:õ ÷Eð E÷ Oð O÷ð ÷
ð 
÷ð ÷.!Rð !RñH?àñ?à#%ð?à?C÷?ò ?ñð ÷	ò ÷*>ð >÷B2ð 2ój$àñ$à48ñ$àcg÷$ó $ñNØQSñà÷ò ÷()7ó )7÷vEð E÷
	=ó 	=ñ>à8=÷>ò >ó(1àñ1à48÷1ó 1÷hYð Y÷(ð (÷"ð "ó"7à"&ñ7à?Añ7àX\÷7ó 7÷t&ð &÷&Zð Z÷4-=ð -=÷`ó ÷ð ÷0"ó "÷<ð ÷-.ó -.÷`ð ÷+ð +÷@,ð ,÷^ð ö4�jõ ñ �x •} h©s¥mÐ3Õ4�÷7ð 7÷!ð !÷ð ÷$&có &c÷Rnð n÷'ð '÷eð e÷'ð '÷,eð e÷3ð 3÷(>ð >÷,nð n÷Eð E÷PUó U÷K3ð K3÷\\ð \÷ð ÷0<3ð <3÷~%ð %÷Pð ñF Ñ ÙÑ,Ù
Ñ ÙÑ0ÙÑ*ØÑ$ðWÑ ó ÷V)ó V)óvÐZ^÷ ó ñ BÑ ÷8ð 8÷-ð -÷Nð Nñ ÒVÙÒ<Ù
ÒPÙÒ`ØÒ/ÙÑ1ØÒ2ðfÑ ó ÷Có C÷
ð ÷(7ð 7÷-1ð -1÷`ð ñ> cÑ ó*LØ^bñ*Là!ð*Là6;ñ*Lð .2÷*Ló *L÷Z;ð ;ñ

!ÀT÷ 
!ò 
!ð* %'�Ó &Ø—^“^Ó%Ñ ØÑ ÷$ô $÷$ð ñQØBFñQà!ñQà=AñQð .2ñQð FKñQð ñ	Qð 8<÷	Qò Q÷*@ð @÷$ð ñGÐko÷ Gò Gñ$Ø^bñ$à!ñ$à=Añ$ð .2ñ$ð FKñ$ð #'ñ	$ð FJ÷	$ò $÷Nð ÷.ð .÷)ð )ñ>%¸U÷ %ò %÷4>ð >÷*7ð 7÷
#ð 
#÷H?ó H?÷fð ÷ð ÷&
ð 
÷6ð ÷&JAó JAñZ Ñ ñ &+Ñ "÷
 CÑ Bö/˜*õ /÷*ð *ñ,Ø^bñ,à%)ñ,àTX÷,ò ,÷$`ð `÷ð ÷(ð ñ0 3G÷ ò ÷fð f÷/ð /÷8ð ðL WYÑ Ó XØEGÑ Ó GØ—“Ó �÷	(ð 	(÷ð ÷qð q÷sð s÷&ð &ñ (Ó(RÓSÑ ÷_ð _ñ 'Ñ(>ÁÑMcÐdÑ ÷ð ó>Ñ ÷ð ñ !Ó!HÓIÑ ÷8ð 8ó UÑ Û YÑ ÷
ð 
÷ð ÷,ð ö ˜õ  ÷8ð 8÷%bð %b÷P/ð /÷dGqó Gq÷T8ó 8ñv±Yñ Ð]a÷ ò ÷ eð e÷Uð U÷.ó .÷b
ð 
÷$$ð $ñ0 %*Ñ !Ù!$Ñ ÷\ð \÷hð h÷ð ð* Ÿ
›
Ñ#FÈÏÊÓVÑ ñ "%Ñ à"$Ñ ÷Hð Hó"aØ]b÷aó a÷2
>ó 
>ó5qØ]b÷5qó 5qñpØ!#ñØFJñà;?÷ò ñ" !KÑ ÷HCô HCñVØ!#ñØFJ÷ò ÷$`ó `÷wð wó
 `Ø]b÷ `ó  `öN˜
õ ÷9Yð 9Yöx˜*õ ÷A)ð A)öH�*õ ñ ‘\Ð"Ñ%6¹Ð$HÙ™<Ð(Ñ+GÑIhÐ*iÙ#Ñ%@ÐAá-Ñ/JÐKñ Ñ+Ð,Ñ/CÑEWÐ.Xð	JÑ ó 	÷	ð 	÷2ð 2÷"Vð Vö
�:õ ÷"hð h÷
að a÷Yð Y÷ð ÷6#ð #÷B;ð ;÷"%ð %÷P=ð =ñ@àPU÷ò ÷2\ð \÷~-ð -÷`ð ÷ð ÷Yó Y÷
4ð 4ñ ó/ Ø7;ñ/ ØQUñ/ Ønrñ/ àñ/ àIMñ/ ð $(ñ/ ð CGñ/ ð ^bñ/ ð !ñ	/ ð =Añ	/ ð fjñ	/ ð
 /3ñ/ ð
 LPñ/ ð
 afñ/ ð #'ñ/ ð PTñ/ ð .2÷/ ñ / ó ñ/ ÷d
 ð 
 ÷/ð /÷B
ð 
÷	3ð 	3÷Jð JóZØ7;ñZØQUñZØnrñZàñZàIMñZð $(ñZð CGñZð ^bñZð !ñ	Zð =Añ	Zð fjñ	Zð
 /3ñZð
 LPñZð
 afñZð #'ñZð PT÷Zó ZôzFô"Pñ,ÐPT÷ ,ò ,ñ^ ó Ø7;ñ ØQUñ Ønrñ àñ àIMñ ð $(ñ ð CGñ ð ^bñ ð !ñ	 ð =Añ	 ð fjñ	 ð
 ,0÷ ñ  ó ñ ó07Ø7;ñ7ØQUñ7Ønrñ7àñ7àIMñ7ð $(ñ7ð CGñ7ð ^bñ7ð !ñ	7ð =Añ	7ð fjñ	7ð
 ,0÷7õ 7r/   