+
    iHàj”  ã                  óä   a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIHt ]P                  ! ]	4      t
/ tR]R&   Rt^€tR R ltR	 R
 ltR R ltRRRR/R R lltRRRRRR/R R lltR R ltR R ltR# )zíAccount-scoped speed metadata from the existing authenticated Codex catalogue.

Unknown discovery preserves the requested tier. Only an explicit advertised tier
list permits a downgrade; response echoes never drive selection or retries.
)ÚannotationsN)ÚAnyz2dict[str, tuple[dict[str, frozenset[str]], float]]Ú	_catalogsi  c               ó    € V ^8„  d   QhRRRR/# )é   Úentryúdict[str, Any]Úreturnúfrozenset[str] | None© )Úformats   "Ú>/home/ubuntu/.hermes/hermes-agent/agent/codex_service_tiers.pyÚ__annotate__r      s   € ÷ 
0ñ 
0˜^ð 
0Ð0Eñ 
0ó    c                ó  € V P                  R 4      p\        V\        4      '       dW   \        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       d   R# V'       d   \	        R V 4       4      # V P                  R4      p\        V\        4      '       dM   \
        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       d   \	        R V 4       4      # V. 8X  d   \	        4       # R# )	Úservice_tiersc              3  ó¤   "  € T FF  p\        V\        4      '       * ;'       g%    \        VP                  R 4      \        4      '       * x € KH  	  R# 5i©ÚidN)Ú
isinstanceÚdictÚgetÚstr©Ú.0Úitems   & r   Ú	<genexpr>Ú$_advertised_tiers.<locals>.<genexpr>   s:   é € ÐcÑ]bÐUY”:˜d¤DÓ)Ô)×PÐP´¸D¿H¹HÀT»NÌCÓ1PÔ-PÔPÓ]bùs
   ‚ A£-ATFNc              3  ó2   "  € T F  qR ,          x € K  	  R# 5ir   r   r   s   & r   r   r      s   é € Ð:±E¨D $ŸZšZ³Eùs   ‚Úadditional_speed_tiersc              3  óB   "  € T F  p\        V\        4      x € K  	  R # 5i©N)r   r   r   s   & r   r   r      s   é € Ð'QÉ&À$¬
°4¼×(=Ð(=Ë&ùs   ‚c              3  óH   "  € T F  pR R/P                  W4      x € K  	  R# 5i)ÚfastÚpriorityN)r   r   s   & r   r   r      s#   é € ÐQÉ&À$˜& *Ð-×1Ñ1°$×=Ð=Ë&ùs   ‚ ")r   r   ÚlistÚanyÚ	frozensetÚall)r   ÚtiersÚspeedss   &  r   Ú_advertised_tiersr+      s·   € Ø�I‰I�oÓ&€EÜ�%œ×Òß‹3ÑcÑ]bÓc�3�3Š3ÑcÑ]bÓc×cÒcÙßÜÑ:±EÓ:Ó:Ð:Ø�Y‰YÐ/Ó0€FÜ�&œ$×Ò§C£CÑ'QÉ&Ó'Q§C§C¢CÑ'QÉ&Ó'Q×$QÒ$QÜÑQÉ&ÓQÓQÐQØ 2œ+Œ9‹;Ð/¨4Ð/r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú	cache_keyr   Úentriesz	list[Any]r	   ÚNoner   )r   s   "r   r   r   !   s!   € ÷ 1ñ 1 ð 1¨ið 1¸Dñ 1r   c                óš  € / pV Fj  p\        V\        4      '       d&   \        VP                  R4      \        4      '       g   K@  \	        V4      pVf   KQ  WBVR,          P                  4       &   Kl  	  V \        9  d0   \        \        4      \        8¼  d   \        \        \        R R7       V\        P                  ! 4       3\        V &   R# )zGRetain only speed metadata, even when a model omits its context window.ÚslugNc                ó*   € \         V ,          ^,          # )é   )r   ©Úkeys   &r   Ú<lambda>Ú"remember_catalog.<locals>.<lambda>+   s   € ´Y¸sµ^ÀAÖ5Fr   r4   )r   r   r   r   r+   Ústripr   ÚlenÚ_MAX_CATALOGSÚminÚtime)r-   r.   Úmodelsr   r)   s   &&   r   Úremember_catalogr>   !   s•   € à€FÛˆÜ˜%¤×&Ò&¬j¸¿¹À6Ó9JÌC×.PÒ.PÙÜ! %Ó(ˆØÔØ,1�5˜•=×&Ñ&Ó(Ó)ñ ð œ	Ô!¤c¬)£n¼Ô&EÜ”cœ)Ñ)FÔGÐHØ"¤D§I¢I£KÐ0„IˆiÓr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úaccess_tokenr   Úbase_urlÚmodelr	   r
   r   )r   s   "r   r   r   /   s)   € ÷ %ñ % 3ð %°#ð %¸cð %ÐF[ñ %r   c                ó¼  € ^ RI Hp VP                  W4      p\        P	                  V4      pVe-   \
        P
                  ! 4       V^,          ,
          \        8¼  d'   VP                  W4       \        P	                  V4      pVe-   \
        P
                  ! 4       V^,          ,
          \        8¼  d   R# VP                  V4      pV^ ,          P	                  V4      # )é    )Úmodel_metadataN)	ÚagentrE   Ú_codex_oauth_token_fingerprintr   r   r<   Ú_TTLÚ._fetch_codex_oauth_context_lengths_with_sourceÚ"strip_codex_context_variant_suffix)r@   rA   rB   Úmetadatar5   ÚcachedÚ
wire_models   &&&    r   Ú_tiers_for_modelrN   /   s�   € Ý0Ø
×
1Ñ
1°,Ó
I€CÜ�]‰]˜3Ó€FØ‚~œŸš› v¨a¥yÕ0´DÔ8ð 	×?Ñ?ÀÔWÜ—‘˜sÓ#ˆØ‚~œŸš› v¨a¥yÕ0´DÔ8ÙØ×<Ñ<¸UÓC€JØ�!�9�=‰=˜Ó$Ð$r   rA   r@   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   rB   r   Útierr   rA   r@   r	   zbool | Noner   )r   s   "r   r   r   >   s4   € ÷ <ñ <Øð<Øð<Ø(+ð<ØBEð<àñ<r   c          
     ó   € ^ RI HpHp \        T;'       g    R4      P	                  4       ;'       g    TpV! V4      '       g   R# ^ RIHpHp \        V\        4      '       d   V! V4      '       d   TMRp	V	'       g     ^ RI	H
p
 V
! RR7      P                  R4      p	\        V	\        4      '       d	   V	'       g   R# ^ R	IHp \        Y–T! \        T ;'       g    R4      4      4      pVf   R# W9   #   T d     R# i ; i)
a  Whether the signed-in ChatGPT account's Codex catalog lists ``tier`` for ``model``.

``None`` when unknown (no usable token, catalog unreachable, model absent) so callers never refuse
on a failed lookup. ``access_token`` defaults to the profile's stored Codex OAuth token.)ÚCODEX_AUX_BASE_URLÚis_official_codex_base_urlÚ N)Ú	AuthErrorÚ_decode_jwt_claims)Ú!resolve_codex_runtime_credentialsT)Ú	read_onlyÚapi_key)Ú_bare_codex_slug)Úagent.codex_headersrR   rS   r   r8   Úhermes_cli.auth_constantsrU   rV   r   Úhermes_cli.auth_codexrW   r   Úagent.model_metadatarZ   rN   )rB   rP   rA   r@   rR   rS   ÚbaserU   rV   ÚtokenrW   rZ   Ú	supporteds   &&$$         r   Úcodex_account_offers_tierrb   >   sØ   € ÷ SÜˆx�~ˆ~˜2Ó×$Ñ$Ó&×<Ð<Ð*<€DÙ% d×+Ò+ÙßGô ' |´S×9Ò9Ñ>PÐQ]×>^Ò>^‰LÐdh€Eßð	ÝOÙ5ÀÔE×IÑIÈ)ÓTˆEô �eœS×!Ò!¯ÙÝ5Ü  Ñ.>¼sÀ5Ç;À;ÈBÓ?OÓ.PÓQ€IØÒ$ˆ4Ð;¨$Ñ*;Ð;øð ô 	Úð	ús   Á?C2 Ã2C=Ã<C=Úproviderc          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )r   rB   r   rc   rA   r@   r	   Úboolr   )r   s   "r   r   r   Z   s8   € ÷ Wñ W˜Sð W¨sð WÀSð WÐ_bð WÐnrñ Wr   c               ó4  € ^ RI Hp ^ RIHpHp V! WVRR7      f   R# T;'       d    V! V4      R8H  ;'       gA    T! \        T;'       g    R4      4      P                  ;'       g    RP                  4       R8H  pV'       * ;'       g    \        V RW#R	7      RJ# )
aÀ  Whether ``/fast ultrafast`` (and the Ultrafast picker row) is offered on this route: the route
gate plus, on the ChatGPT/Codex subscription, the account's own Codex catalog. That backend accepts
``service_tier: "ultrafast"`` from a plan without the entitlement and silently serves the default
tier, so the catalog the official client reads is the authority. An unreadable catalog never
blocks (request-time negotiation still clamps per credential).)Úurlparse)Únormalize_providerÚresolve_fast_mode_overridesÚ	ultrafast)rc   rA   rP   Fúopenai-codexrT   zchatgpt.com)rA   r@   )	Úurllib.parserg   Úhermes_cli.modelsrh   ri   r   ÚhostnameÚlowerrb   )rB   rc   rA   r@   rg   rh   ri   Úon_codex_subs   &$$$    r   Úultrafast_offeredrq   Z   s¤   € õ &çQÙ" 5ÀhÐU`ÔaÒiÙØ×OÐOÑ!3°HÓ!=ÀÑ!O÷ Qð QÙ	”#�h—n�n "Ó%Ó	&×	/Ñ	/×	5Ð	5°2×<Ñ<Ó>À-ÑOð àÔ÷ Wð WÔ8Øˆ{ Xô JØQVð Wð Wr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úclir   rB   r	   re   r   )r   s   "r   r   r   k   s&   € ÷ Iñ I˜sð I¨3ð I°4ñ Ir   c           
     ób   € \        V\        V RR4      \        V RR4      \        V RR4      R7      # )z[:func:`ultrafast_offered` on a CLI shell's resolved route (attributes absent before setup).rc   NrA   rY   )rc   rA   r@   )rq   Úgetattr)rs   rB   s   &&r   Úultrafast_offered_forrv   k   s9   € ä˜U¬W°S¸*ÀdÓ-KÔV]Ð^aÐcmÐosÓVtÜ*1°#°yÀ$Ó*GôIð Ir   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rF   r   Ú	overridesr   r	   r/   r   )r   s   "r   r   r   q   s&   € ÷ rñ r #ð r°.ð rÀTñ rr   c                ó^  a	€ ^ RI Hp VP                  R4      p\        \	        V RR4      ;'       g    R4      pVR9  g3   \	        V RR4      R8w  g!   \	        V R	R4      R
8w  g   V! V4      '       g   R# \	        V RR4      p\        V\        4      '       d	   V'       g   R# VP                  R\	        V RR4      4      p\        WTV4      o	S	f   R# VR8X  d   RMRp\        V	3R lV 4       R4      pVR8X  d   VP                  RR4       MW�R&   Wƒ8w  d   \        P                  RW84       R# R# )zNResolve the current credential on each build without mutating user preference.)rS   Úservice_tierrA   rT   rj   Úapi_modeNÚcodex_responsesrc   rk   rY   rB   c              3  ó8   <"  € T F  qS9   g   K  Vx € K  	  R # 5ir!   r   )r   rP   ra   s   & €r   r   Ú)negotiate_request_tier.<locals>.<genexpr>ƒ   s   øé € ÐG¡z˜t¸YÑ5F—d’d£zùs   ƒ�
ÚdefaultzCCodex service tier %s -> %s: not advertised for selected credential>   r$   rj   )rj   r$   )r$   )r[   rS   r   r   ru   r   rN   ÚnextÚpopÚloggerÚdebug)
rF   rx   rS   Ú	requestedrA   r`   rB   Ú
candidatesÚ	effectivera   s
   &&       @r   Únegotiate_request_tierr‡   q   s  ø€ å>Ø—‘˜nÓ-€IÜ”7˜5 *¨bÓ1×7Ð7°RÓ8€HØÐ2Ô2Ü�u˜j¨$Ó/Ð3DÔDÜ�u˜j¨$Ó/°>ÔAÙ-¨h×7Ò7ÙÜ�E˜9 dÓ+€EÜ�eœS×!Ò!¯ÙØ�M‰M˜'¤7¨5°'¸2Ó#>Ó?€EÜ  °%Ó8€IØÒÙØ.7¸;Ô.FÑ*ÈM€JÜÔG¡zÓGÈÓS€IØ�IÔØ�‰�n dÕ+à$-�.Ñ!ØÔÜ�‰ÐZÐ\eÖqñ r   )Ú__conditional_annotations__Ú__doc__Ú
__future__r   Úloggingr<   Útypingr   Ú	getLoggerÚ__name__r‚   r   Ú__annotations__rH   r:   r+   r>   rN   rb   rq   rv   r‡   )rˆ   s   @r   Ú<module>r�      s‘   øðôõ
 #ã Û Ý à	×	Ò	˜8Ó	$€ð AC€	Ð=Ó BØ€Ø€õ
0õ1õ%ð<Ø.2ð<ØHL÷<ð8W°Tð WÈ4ð WÐei÷ Wõ"I÷rr   