+
    iHàjÁ  ã                  ó  a € 0 t $ R t^ RIHt ^ RIt^ RIHt ]! RR04      t^<t	Rt
]! RR04      tRR/tR	]R
&   ]! 0 Rm4      tRRRRRRRRRRRRRR/tR	]R&   RR/tR	]R&   R R ltR R ltR R ltR R ltR R ltR R ltR R ltR# )a¥  Bounded fast-mode windows (``/fast auto`` and ``/fast cold``).

``agent.service_tier``: ``None`` (normal), ``"priority"`` / ``"ultrafast"`` (static tiers,
pinned into ``agent.request_overrides`` at build time), ``"auto"`` (every user turn opens a
window of ``agent.fast_auto_seconds``) or ``"cold"`` (only a session's first turn,
no prior history, opens it). The provider's fast override is layered onto request
kwargs only while the window is open; only per-request params (``service_tier`` /
``speed``) vary, so the request body stays byte-identical. Anthropic keeps a separate
prompt cache per speed, so each Anthropic window boundary re-writes the prefix at the
new speed.
)ÚannotationsN)ÚAnyÚautoÚcoldÚpriorityÚ	ultrafastÚfastzdict[str, str]ÚCODEX_TIER_WORDSÚonÚultraÚSERVICE_TIER_WORDSÚFAST_ARG_ALIASESc               ó    € V ^8„  d   QhRRRR/# )é   Úrawr   Úreturnz
str | None© )Úformats   "Ú4/home/ubuntu/.hermes/hermes-agent/agent/fast_mode.pyÚ__annotate__r   '   s   € ÷ Qñ Q˜Cð Q Jñ Qó    c                ó¨   € \        T ;'       g    R4      P                  4       P                  4       pV\        9   d   R# \        P                  V4      # )zU``agent.service_tier`` for a user/config word; None for normal and for unknown words.Ú N)ÚstrÚstripÚlowerÚNORMAL_TIER_WORDSr   Úget©r   Úvalues   & r   Úparse_service_tierr    '   sB   € ä�—	�	�r‹N× Ñ Ó"×(Ñ(Ó*€EØÔ-Ô-ˆ4ÐPÔ3E×3IÑ3IÈ%Ó3PÐPr   c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r   r   r   )r   s   "r   r   r   -   s   € ÷ +ñ + #ð +¨#ñ +r   c                óÖ   € \        T ;'       g    R4      P                  4       P                  4       pV\        9  d   V\        9  d   \        RV 24      h\        V4      ;'       g    R# )zŸStrict :func:`parse_service_tier` for an explicit client pick: ``""`` pins normal, an unknown
word raises ``ValueError`` instead of silently reading as normal.r   zunknown service tier: )r   r   r   r   r   Ú
ValueErrorr    r   s   & r   Úparse_exact_service_tierr$   -   s\   € ô �—	�	�r‹N× Ñ Ó"×(Ñ(Ó*€EØÔ%Ô%¨%Ô7IÔ*IÜÐ1°%°Ð9Ó:Ð:Ü˜eÓ$×*Ð*¨Ð*r   c               ó    € V ^8„  d   QhRRRR/# )r   Útierr   r   r   r   )r   s   "r   r   r   6   s   € ÷ Nñ N˜Cð N Cñ Nr   c                ó0   € RRRRRR/P                  W 4      # )zYThe user-facing word for a stored tier (``priority`` -> ``fast``, None/"" -> ``normal``).r   r   NÚnormalr   )r   )r&   s   &r   Úservice_tier_wordr)   6   s    € à˜  h°°HÐ=×AÑAÀ$ÓMÐMr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úagentr   Úconversation_historyr   ÚNoner   )r   s   "r   r   r   ;   s!   € ÷ <ñ <�cð <°ð <¸ñ <r   c                ó¼  € \        V RR4      pRV n        V\        9  d   R# VR8X  dQ   \        ;QJ d&    R T;'       g    R	 4       F  '       g   K   RM	  RM! R T;'       g    R	 4       4      '       d   R#  \	        \        V R\
        4      4      p\        P                  ! 4       \        VR4      ,           V n        R#   \        \        3 d
    \
        p LFi ; i)
z9Open (or refuse) the fast window at a user-turn boundary.Úservice_tierNç        r   c              3  óz   "  € T F1  p\        V\        4      ;'       d    VP                  R 4      R9   x € K3  	  R# 5i)ÚroleN)ÚuserÚ	assistantÚtool)Ú
isinstanceÚdictr   )Ú.0Úms   & r   Ú	<genexpr>Úbegin_turn.<locals>.<genexpr>A   s7   é € ð á,ˆAô 	�1”dÓ×NÐN §¡ f£Ð1NÑ NÔNÛ,ùs   ‚;ž;TFÚfast_auto_secondsr   )ÚgetattrÚ_fast_untilÚBOUNDED_MODESÚanyÚfloatÚDEFAULT_WINDOW_SECONDSÚ	TypeErrorr#   ÚtimeÚ	monotonicÚmax)r+   r,   ÚmodeÚwindows   &&  r   Ú
begin_turnrI   ;   sÅ   € ä�5˜.¨$Ó/€DØ€EÔØ”=Ô ÙØˆv„~Ÿ#›#ñ à&×,Ð,¨"Ð,óŸ#Ÿ#š#ñ à&×,Ð,¨"Ð,ó÷ ò ñ 	ð(Ü”w˜uÐ&9Ô;QÓRÓSˆô ŸšÓ(¬3¨v°sÓ+;Õ;€EÖøô ”zÐ"ô (Ü'Šð(ús   Á:C ÃCÃCc               ó    € V ^8„  d   QhRRRR/# )r   r+   r   r   zdict[str, Any]r   )r   s   "r   r   r   M   s   € ÷ ñ  sð ¨~ñ r   c           
     óD  € \        \        V RR4      ;'       g    / 4      p\        V RR4      \        9   dœ   \        P                  ! 4       \        V RR4      8  dw   ^ RIHp \        V RR4      p\        V RR4      R	8X  d   \        V R
R4      ;'       g    TpTP                  V! \        V RR4      \        V RR4      VR7      ;'       g    / 4       RV9   d:   \        V RR4      \        V RR4      ;'       g    R9   d   VP                  RR4       ^ RI	H
p V! W4       V# )z“``agent.request_overrides`` plus the fast override while the window is open, minus
``speed`` for a model this session learned has no fast capacity.Úrequest_overridesNr/   r>   r0   )Úresolve_fast_mode_overridesÚbase_urlÚapi_modeÚanthropic_messagesÚ_anthropic_base_urlÚmodelÚprovider)rS   rN   ÚspeedÚ_fast_mode_unavailable_models)Únegotiate_request_tierr   )r7   r=   r?   rD   rE   Úhermes_cli.modelsrM   ÚupdateÚpopÚagent.codex_service_tiersrV   )r+   Ú	overridesrM   rN   rV   s   &    r   Úeffective_request_overridesr\   M   s  € ô ”W˜UÐ$7¸Ó>×DÐDÀ"ÓE€IÜˆu�n dÓ+¬}Ô<ÄÇÂÓAQÔT[Ð\aÐcpÐruÓTvÔAvÝAÜ˜5 *¨dÓ3ˆÜ�5˜* dÓ+Ð/CÔCÜ˜uÐ&;¸TÓB×NÐNÀhˆHØ×ÑÙ'¬°°wÀÓ(EÔPWÐX]Ð_iÐkoÓPpð  |Dô  E÷  Kð  Kð  IKô	
ð �)Ô¤¨¨w¸Ó =Ä'È%ÐQpÐrvÓBw×B}ÐB}Ð{}Ô ~Ø�‰�g˜tÔ$Ý@Ù˜5Ô,ØÐr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú	api_errorr   Ú
api_kwargsr   Úboolr   )r   s   "r   r   r   `   s&   € ÷ 
Zñ 
Z sð 
Z¸ð 
ZÀñ 
Zr   c                óz  a€ \        V RR4      R8w  g   \        V\        4      '       g   R# VP                  R4      ;'       g    / P                  R4      R8w  d   R# \        \        V RR4      R	R4      oSf   R# \        ;QJ d#    V3R
 l\
         4       F  '       g   K   R# 	  R# ! V3R
 l\
         4       4      # )z®True for a 429 on a ``speed: "fast"`` request whose fast-mode limit header is 0. The
organization has no fast capacity for the model, so waiting or rotating keys cannot help.Ústatus_codeNi­  FÚ
extra_bodyrT   r   ÚresponseÚheadersc              3  ó|   <"  € T F1  p\        SP                  VR 4      4      P                  4       R8H  x € K3  	  R# 5i)r   Ú0N)r   r   r   )r8   Únamere   s   & €r   r:   Ú*fast_mode_unprovisioned.<locals>.<genexpr>j   s1   øé € ÐYÑEX¸TŒs�7—;‘;˜t RÓ(Ó)×/Ñ/Ó1°SÖ8ÓEXùs   ƒ9<T)r=   r6   r7   r   r@   Ú_FAST_LIMIT_HEADERS)r^   r_   re   s   &&@r   Úfast_mode_unprovisionedrk   `   s—   ø€ ô ˆy˜-¨Ó.°#Ô5¼ZÈ
ÔTX×=YÒ=YÙØ�‰�|Ó$×*Ð*¨×/Ñ/°Ó8¸FÔBÙÜ”g˜i¨°TÓ:¸IÀtÓL€GØ‚Ùß‹3ÔYÕEXÓY�3Œ3ÐYŠ3ÐYˆ3ÔYÕEXÓYÓYÐYr   c               ó    € V ^8„  d   QhRRRR/# )r   r+   r   r   r`   r   )r   s   "r   r   r   m   s   € ÷ 
ñ 
 cð 
¨dñ 
r   c                óÈ   € \        V RR4      p\        V RR4      p\        V\        4      '       g   \        4       ;q n        V'       d   W9   d   R# VP	                  V4       R# )z Stop sending ``speed`` for the current model for the rest of the session. False when the
model was already marked, so the caller retries at most once per model.rR   NrU   FT)r=   r6   ÚsetrU   Úadd)r+   rR   Úunavailables   &  r   Úmark_fast_mode_unavailablerq   m   sU   € ô �E˜7 DÓ)€EÜ˜%Ð!@À$ÓG€KÜ�k¤3×'Ò'Ü<?»EÐAˆÔ9ß�EÔ(ÙØ‡O�O�EÔÙr   )z!anthropic-fast-input-tokens-limitz"anthropic-fast-output-tokens-limit>   r   ÚoffÚnoner(   ÚdefaultÚstandard)Ú__conditional_annotations__Ú__doc__Ú
__future__r   rD   Útypingr   Ú	frozensetr?   rB   rj   ÚSTATIC_TIERSr	   Ú__annotations__r   r   r   r    r$   r)   rI   r\   rk   rq   )rv   s   @r   Ú<module>r}      sÈ   øðô
õ #ã Ý á˜6 6Ð*Ó+€ØÐ ð bÐ ñ ˜* kÐ2Ó3€à$.°Ð#7Ð �.Ó 7ÙÒRÓSÐ ð ˆJ˜
 J°°jØ�˜g {°F¸FÀFÈFð&Ð �Nó ð
 %,¨[Ð#9Ð �.Ó 9õQõ+õNõ
<õ$õ&
Z÷
r   