+
    kHàj%/  ã                   ó>  a € R5 t10 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	H
t
 ^ RIHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHtHt ]P.                  ! ]4      tRtRt] ^ k ]P8                  ! 4       tR	tR	t ! R
 R4      t / t!] ^k 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 R lt)R R lt*RRR RR!R"/R# R$ llt+R% R& lt,R' R( lt- ! R) R*]4      t.].! R+R6R,R-R.R/R7]#! 4       RR0R1]! 4       P^                   2/R2R3R8R47      t0]! ]04       R# )9a‘  Ramp Router (router.com) provider profile: Responses-only LLM gateway (verified live).

``api_mode="codex_responses"`` + the ``api.router.com`` host mandate in ``hermes_cli/providers.py``
keep every path on the native wire. The catalog is account-scoped, so no ``fallback_models``
(picker uses ``fetch_models()``). Router 400s on ``reasoning.effort`` levels outside a model's
published vocabulary and on any reasoning field for non-reasoning models, so the efforts map
from ``GET /v1/models`` is cached (memory + disk mirror, background warmer; never HTTP on the
request hot path) and fed to the codex transport's clamp via ``supported_reasoning_efforts``.
N)ÚPath)ÚAnyÚOptional)ÚEFFORT_LADDER)Úget_version_info)Úregister_provider)ÚProviderProfileÚ_profile_user_agentzhttps://api.router.com/v1Fc                   ó:   a € ] tR t^&t o RtRtV 3R lR ltRtV tR# )Ú_CacheStatezUEfforts cache + once-only flags for one Hermes home (same names as the module slots).c                ó   <€ V ^8„  d   QhRR/# ©é   ÚreturnN© )ÚformatÚ__classdict__s   "€ÚL/home/ubuntu/.hermes/hermes-agent/plugins/model-providers/router/__init__.pyÚ__annotate__Ú_CacheState.__annotate__+   s   ø€ ÷ #ñ #˜$ñ #ó    c                ó0   € R V n         RV n        RV n        R # )NF)Ú_efforts_cacheÚ_warm_startedÚ_disk_checked)Úselfs   &r   Ú__init__Ú_CacheState.__init__+   s   € Ø>BˆÔØ"ˆÔØ"ˆÖr   )r   r   r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú	__slots__r   Ú__static_attributes__Ú__classdictcell__©r   s   @r   r   r   &   s   ø‡ € Ù_àD€I÷#ö #r   r   c                ó$   € V ^8„  d   QhR\         /# ©r   r   )r   )r   s   "r   r   r   7   s   € ÷ Kñ K”ñ Kr   c                 óú   € ^ RI Hp Hp V ! 4       f   \        P                  \
        ,          # \        ;_uu_ 4        \        P                  V! 4       \        4       4      uuRRR4       #   + '       g   i     R# ; i)z¤Holder of ``_efforts_cache``/``_warm_started``/``_disk_checked``: this module when unscoped
(tests monkeypatch those slots), else the active home's ``_CacheState``.©Úget_hermes_home_overrideÚhermes_home_keyN)
Úhermes_constantsr+   r,   ÚsysÚmodulesr   Ú_efforts_lockÚ_state_by_homeÚ
setdefaultr   r*   s     r   Ú_stater3   7   sF   € ÷ KáÓ!Ò)Ü�{‰{œ8Õ$Ð$ß	ŽÜ×(Ñ(©Ó):¼K»MÓJ÷ 
��‹ús   »#A)Á)A:	c                ó$   € V ^8„  d   QhR\         /# r(   ©Ústr)r   s   "r   r   r   B   s   € ÷ #ñ #”3ñ #r   c                 óL  €  ^ RI Hp  \        RV \        P
                  P                  34       FH  p \        V! R4      ;'       g    R4      P                  4       P                  R4      pV'       g   KF  Vu # 	  \        #   \         d    Rp  L‡i ; i  \         d    Rp L8i ; i)zXRouter base URL: profile ``.env`` first (scope-aware), plain os.environ as the fallback.©Úget_env_value_prefer_dotenvNÚRAMP_ROUTER_BASE_URLÚ Ú/)Úhermes_cli.configr9   Ú	ExceptionÚfilterÚosÚenvironÚgetr6   ÚstripÚrstripÚROUTER_DEFAULT_BASE_URL)Úprefer_dotenvÚresolveÚvalues      r   Ú	_base_urlrI   B   s›   € ðÝRô ˜$ ´·
±
·±Ð ?Ö@ˆð	Ü™Ð 6Ó7×=Ð=¸2Ó>×DÑDÓF×MÑMÈcÓRˆE÷ ‰5ØŠLñ Aô #Ð"øô ô ØŠðûô
 ô 	ØŠEð	ús(   ‚B  ²BÁ$BÂ BÂBÂB#Â"B#c                ó$   € V ^8„  d   QhR\         /# r(   r5   )r   s   "r   r   r   R   s   € ÷ ñ œ#ñ r   c                 ó<  €  ^ RI Hp  \        RV \        P
                  P                  34       FD  pR F;  p \        V! V4      ;'       g    R4      P                  4       pV'       g   K7  Vu u # 	  KF  	  R#   \         d    Rp  Li ; i  \         d    Rp L:i ; i)z�Router key (documented var, then alias), preferring dotenv; plain os.environ
is the fallback when the dotenv resolver is unavailable or raises.r8   Nr;   )ÚRAMP_ROUTER_API_KEYÚROUTER_API_KEY)	r=   r9   r>   r?   r@   rA   rB   r6   rC   )rF   rG   ÚvarrH   s       r   Ú_resolve_api_keyrO   R   s•   € ðÝRô ˜$ ´·
±
·±Ð ?Ö@ˆÛ<ˆCðÜ™G C›L×.Ð.¨BÓ/×5Ñ5Ó7�÷ ‰uØ”ó =ñ Añ øô ô ØŠðûô ô Ø’ðús(   ‚A8 ·BÁBÁ8BÂBÂBÂBc                ó<   € V ^8„  d   QhR\         R\        R\         /# )r   ÚobjÚkeysr   )r   r6   )r   s   "r   r   r   d   s!   € ÷ ñ Œcð œ#ð ¤#ñ r   c                ój   € V F,  p\        V \        4      '       d   V P                  V4      MRp K.  	  V # )zENested dict lookup; None as soon as a level is missing or not a dict.N)Ú
isinstanceÚdictrB   )rQ   rR   Úkeys   &* r   Ú_digrW   d   s,   € ãˆÜ(¨¬d×3Ò3ˆc�g‰g�cŒl¸Šñ à€Jr   c                ó~   € V ^8„  d   QhR\         R\        \        \        \        \        ,          3,          ,          /# ©r   Úitemsr   ©r   r   rU   r6   Úlist)r   s   "r   r   r   k   s,   € ÷ !ñ !œ#ð !¤(¬4´´T¼#µY°Õ+?Õ"@ñ !r   c           	     ó˜  € \        V \        4      '       g   R# / pV  EFŠ  p\        V\        4      '       d3   \        VP	                  R4      ;'       g    R4      P                  4       MRp\        VRRR4      pV'       d   \        V\        4      '       g   K|  VP	                  R4      RJ d   . W&   K—  VP	                  R	4      ;'       g    .  Uu. uFM  p\        V\        4      '       g   K  \        VP	                  R
4      ;'       g    R4      P                  4       NKO  	  ppV Uu. uF  qw'       g   K  VNK  	  ppV U	u. uF  q™\        9  g   K  V	NK  	  p
p	V
'       d4   \        P                  RW:4       V U	u. uF  q™\        9   g   K  V	NK  	  pp	V'       g   EK†  W�V&   EK�  	  T;'       g    R# u upi u upi u up	i u up	i )aK  Parse a ``/v1/models`` ``data`` array into the efforts map (None if unusable).

Ladder-unknown levels are dropped: clamp_effort ignores them, so an all-unknown
vocabulary would pass the effort through unclamped to a Router 400. ``supported=True``
with no recognized level leaves the model out (unknown -> transport default clamp).
NÚidr;   ÚrouterÚcapabilitiesÚ	reasoningÚ	supportedFÚeffortsrH   z›router: model %s publishes unrecognized reasoning effort level(s) %s; ignoring them (update agent/reasoning_effort EFFORT_LADDER to adopt new vendor tiers))
rT   r\   rU   r6   rB   rC   rW   r   ÚloggerÚinfo)rZ   Úefforts_by_idÚitemÚmidra   ÚeÚvaluesÚvÚlevelsÚlevelÚunknowns   &          r   Ú_parse_effortsro   k   s�  € ô �eœT×"Ò"ÙØ*,€MÜˆÜ3=¸dÄD×3IÒ3IŒc�$—(‘(˜4“.×&Ð& BÓ'×-Ñ-Ô/ÈrˆÜ˜˜x¨¸ÓEˆ	ßœ* Y´×5Ò5ÙØ�=‰=˜Ó%¨Ó.Ø!#ˆMÑÙØ=F¿]¹]È9Ó=U×=[Ð=[ÐY[Ð=[ÓsÑ=[¸Ô_iÐjkÔmq×_rÔ3”#�a—e‘e˜G“n×*Ð*¨Ó+×1Ñ1Ö3Ñ=[ˆÐsÙ#Ó)™V˜£q—!�!™VˆÐ)Ù&,ÓK¡f˜U¼]Ñ0J—5�5¡fˆÐKßÜ�K‰KðZØ[^ôñ *0ÓJ© ¼MÑ3I—e�e©ˆFÐJßŠ6Ø!'˜#Ôñ% ð& × Ð ˜DÐ ùò tùÚ)ùÚKùò Ks6   ÃF8Ã.F8ÄF8Ä*	F=Ä8F=ÅGÅGÅ?GÆGc                ó:   € V ^8„  d   QhR\         \        ,          /# r(   )r   r   )r   s   "r   r   r   ‹   s   € ÷ ñ ”HœT•Nñ r   c                  ó^   €  ^ RI Hp  V ! 4       R,          R,          #   \         d     R# i ; i)é    ©Úget_hermes_homeÚcachezrouter_catalog.jsonN)r-   rt   r>   rs   s    r   Ú
_disk_pathrv   ‹   s0   € ðÝ4ÙÓ  7Õ*Ð-BÕBÐBøÜô Úðús   ‚ �,«,c                ó`   € V ^8„  d   QhR\         \        \        \        ,          3,          RR/# )r   rf   r   N)rU   r6   r\   )r   s   "r   r   r   “   s+   € ÷ 
Gñ 
Gœd¤3¬¬S­	 >Õ2ð 
G°tñ 
Gr   c                 ó€  € \        4       pVf   R #  VP                  P                  RRR7       VP                  R4      pVP	                  \
        P                  ! R\        P                  ! 4       RV /4      RR7       VP                  V4       R #   \         d"   p\        P                  RT4        R p?R # R p?ii ; i)	NT)ÚparentsÚexist_okz.tmpÚtsrc   zutf-8©Úencodingz)router: caps disk mirror write failed: %s)rv   ÚparentÚmkdirÚwith_suffixÚ
write_textÚjsonÚdumpsÚtimeÚreplacer>   rd   Údebug)rf   ÚpathÚtmpÚexcs   &   r   Ú
_save_diskrŠ   “   s—   € Ü‹<€DØ‚|ÙðGØ�‰×Ñ $°ÐÔ6Ø×Ñ˜vÓ&ˆØ�‰”t—z’z 4¬¯ª«°iÀÐ"OÓPÐ[bˆÔcØ�‰�DÖøÜô GÜ�‰Ð@À#×FÒFûðGús   ’A=B ÂB=ÂB8Â8B=c                ó”   € V ^8„  d   QhR\         \        \        \        \        \        ,          3,          ,          \
        3,          /# r(   )Útupler   rU   r6   r\   Úfloat)r   s   "r   r   r       s/   € ÷ ñ ”Eœ(¤4¬¬T´#­Y¨Õ#7Õ8¼%Ð?Õ@ñ r   c                 óÊ  € \        4       p V f   R#  \        P                  ! V P                  RR7      4      pVP	                  R4      p\        V\        4      '       d	   V'       g   R# VP                  4        UUUu/ uFB  w  r4\        V\        4      '       g   K  \        V4      V Uu. uF  p\        V4      NK  	  upbKD  	  pppp \        R\        P                  ! 4       \        VP	                  R4      ;'       g    ^ 4      ,
          4      pT;'       g    RV3# u upi u upppi   \        \        3 d    \        \        4      p L<i ; i  \          d    Ru # i ; i)zUDisk mirror -> (efforts map or None, age in seconds; TTL when ``ts`` is unparseable).Nç        z	utf-8-sigr|   rc   r{   )Nr�   )rv   r‚   ÚloadsÚ	read_textrB   rT   rU   rZ   r\   r6   Úmaxr„   r�   Ú	TypeErrorÚ
ValueErrorÚ_DISK_TTL_SECONDSr>   )r‡   Údatarc   rh   rl   ÚlvÚparsedÚages           r   Ú
_load_diskrš       s  € ä‹<€DØ‚|ØÐðÜ�zŠz˜$Ÿ.™.°+˜.Ó>Ó?ˆØ—(‘(˜9Ó%ˆÜ˜'¤4×(Ò(·ØÐØJQÏ-É-Ì/ÕvÉ/¹;¸3Ô]gÐhnÔpt×]uÔ6”#�c“(©vÓ6©v¨œS žW©vÑ6Ò6É/ˆÒvð	+Ü�cœ4Ÿ9š9›;¬¨t¯x©x¸«~×/BÐ/BÀÓ)CÕCÓDˆCð —�˜$ Ð$Ð$ùò 7ùÔvøô œ:Ð&ô 	+ÜÔ)Ó*ŠCð	+ûô ô ØÒðúss   ’AE Á'E Á)E Á=D%ÂD%Â*D Â>D%ÃE Ã
AD, ÄE ÄE Ä D%Ä%E Ä, EÅE ÅEÅE ÅE"Å!E"c                ó~   € V ^8„  d   QhR\         R\        \        \        \        \        ,          3,          ,          /# rY   r[   )r   s   "r   r   r   ´   s,   € ÷ ñ œð ¤¬$¬s´D¼µI¨~Õ*>Õ!?ñ r   c                ó®   € \        V 4      pVe3   \        4       p\        ;_uu_ 4        Wn        RRR4       \	        V4       V#   + '       g   i     L; i)z8Seed memory + disk caches from a ``/v1/models`` payload.N)ro   r3   r0   r   rŠ   )rZ   r˜   Ústates   &  r   Ú_seed_effortsrž   ´   s>   € ä˜EÓ"€FØÒÜ“ˆßŽ]Ø#)Ô ÷ ä�6ÔØ€M÷ �]ús   ¨AÁA	Úapi_keyr;   Úbase_urlÚtimeoutç       @c          	      ó^   € V ^8„  d   QhR\         R\         R\        R\        \        ,          /# ©r   rŸ   r    r¡   r   )r6   r�   r   r\   )r   s   "r   r   r   ¿   s/   € ÷ 6ñ 6¤Sð 6¼ð 6ÌEð 6Ô\dÔeiÕ\jñ 6r   c                óü  € ^ RI p^ RIHp VP                  P	                  T;'       g    \        4       P                  R4      R,           4      pT ;'       g    \        4       pV'       d   VP                  RRV 24       VP                  RR4       VP                  R	\        4       4        V! WRR
7      ;_uu_ 4       p\        P                  ! VP                  4       P                  4       4      pRRR4       \#        X\$        4      '       d   TMTP'                  R. 4      p
\#        T
\$        4      '       d   T
# R#   + '       g   i     LT; i  \         d"   p	\        P!                  RT	4        Rp	?	R# Rp	?	ii ; i)zAFetch the raw ``/v1/models`` ``data`` array. None on any failure.N)Úopen_credentialed_urlr<   z/modelsÚAuthorizationzBearer ÚAcceptzapplication/jsonú
User-Agent)r¡   z router: catalog fetch failed: %sr–   )Úurllib.requestÚhermes_cli.urllib_securityr¦   ÚrequestÚRequestrI   rD   rO   Ú
add_headerr	   r‚   r�   ÚreadÚdecoder>   rd   r†   rT   r\   rB   )rŸ   r    r¡   Úurllibr¦   ÚreqrV   Úrespr–   r‰   rZ   s   $$$        r   Ú_fetch_catalog_itemsr´   ¿   s  € ãå@à
�.‰.×
 Ñ
  (×"9Ð"9¬i«k×!AÑ!AÀ#Ó!FÈÕ!RÓ
S€CØ
×
'Ð
'Ô%Ó'€Cß
Ø�‰�¨'°#°¨Ô8Ø‡N�N�8Ð/Ô0Ø‡N�N�<Ô!4Ó!6Ô7ðÙ" 3×8Õ8¸DÜ—:’:˜dŸi™i›k×0Ñ0Ó2Ó3ˆD÷ 9ô
 ˜t¤T×*Ò*‰D°·±¸ÀÓ0D€EÜ˜u¤d×+Ò+ˆ5Ð5°Ð5÷ 9×8ûäô Ü�‰Ð7¸Ô=Ýûðús6   Â,E Â=3D<Ã0E Ä<E	ÅE ÅE ÅE;ÅE6Å6E;c                ór   € V ^8„  d   QhR\         \        \        \        \        ,          3,          ,          /# r(   )r   rU   r6   r\   )r   s   "r   r   r   Õ   s%   € ÷ ñ œX¤d¬3´´Sµ	¨>Õ&:Õ;ñ r   c                 ó¦  € \        4       p \        ;_uu_ 4        V P                  pRRR4       Xf   V P                  '       d   V# RV n        \	        4       w  r#Vf   R# \        ;_uu_ 4        V P                  f   W n        V P                  pRRR4       V\
        8¼  d   \        4        V#   + '       g   i     L�; i  + '       g   i     L:; i)zQMemory, else the disk mirror (checked once per home). Never HTTP (hot-path safe).NT)r3   r0   r   r   rš   r•   Ú_warm_efforts_async)r�   Úcachedr˜   r™   s       r   Ú_efforts_cache_onlyr¹   Õ   sš   € ä‹H€Eß	ŽØ×%Ñ%ˆ÷ 
àÒ˜U×0×0Ð0ØˆØ€EÔÜ“,�K€FØ‚~Ùß	ŽØ×ÑÒ'Ø#)Ô Ø×%Ñ%ˆ÷ 
ð ÔÔÜÔØ€M÷ 
�ú÷ 
�ús   ™B-Á-!C Â-B=	Ã C	c                ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r   é   s   € ÷ Eñ E˜Tñ Er   c                 ó   € \         P                  P                  R4      '       d   R# \        4       p \        ;_uu_ 4        V P
                  '       d    RRR4       R# RV n        RRR4       \        4       '       g   R# R R lp \        P                  ! \        P                  ! 4       P                  V3RRR7      P                  4        R#   + '       g   i     Lq; i  \         d"   p\        P                  RT4        Rp?R# Rp?ii ; i)	záRefresh the efforts cache in the background, at most once per home.

Skipped under pytest (a mid-suite fetch makes cache state timing-dependent)
and without a key (it would 401; the first authenticated fetch_models() seeds).
ÚPYTEST_CURRENT_TESTNTc                ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   Ú)_warm_efforts_async.<locals>.__annotate__ù   s   € ÷ !ñ !�dñ !r   c                  ó<   € \        4       p V e   \        V 4       R # R # )N)r´   rž   )rZ   s    r   Ú_refreshÚ%_warm_efforts_async.<locals>._refreshù   s   € Ü$Ó&ˆØÒÜ˜%Ö ñ r   zrouter-caps-warm)ÚtargetÚargsÚnameÚdaemonz'router: caps warmer failed to start: %s)r@   rA   rB   r3   r0   r   rO   Ú	threadingÚThreadÚcontextvarsÚcopy_contextÚrunÚstartr>   rd   r†   )r�   rÀ   r‰   s      r   r·   r·   é   sÅ   € ô 
‡z�z‡~�~Ð+×,Ò,ÙÜ‹H€Eß	ŽØ××ÐØ÷ 
‰ð #ˆÔ÷ 
ô ×ÒÙõ!ðEô 	×ÒÜ×+Ò+Ó-×1Ñ1¸¸ÐJ\Ðeiô	
ç
‰%Ž'÷! 
�ûô" ô EÜ�‰Ð>À×DÒDûðEús+   Á CÁCÂAC! ÃC	Ã!DÃ,DÄDc                   óX   a € ] tR tRt o RtRRRRRR/V 3R lR	 lltV 3R
 lR ltRtV tR# )ÚRouterProfilei  uE   Ramp Router â€” Responses-only gateway with catalog-declared efforts.rŸ   Nr    r¡   r¢   c          
      ór   <€ V ^8„  d   QhRS[ S[,          RS[ S[,          RS[RS[ S[S[,          ,          /# r¤   )r   r6   r�   r\   )r   r   s   "€r   r   ÚRouterProfile.__annotate__
  sD   ø€ ÷ 	oñ 	oÙ"¡3�-ð	oÙ:BÁ3½-ð	oÙY^ð	oá	‘$‘s•)Õ	ñ	or   c               óÆ   € \        T;'       g    RT;'       g    RVR7      pVf   R# \        V4       \        \        P	                  R V 4       4      4      ;'       g    R# )z‹Live, key-scoped catalog; the same payload seeds the caps cache.
Deduped but not sorted: Router's listing order is deliberate presentation.r;   )rŸ   r    r¡   Nc              3   ó¨   "  € T FH  p\        V\        4      '       g   K  VP                  R 4      '       g   K4  \        VR ,          4      x € KJ  	  R# 5i)r^   N)rT   rU   rB   r6   )Ú.0Úis   & r   Ú	<genexpr>Ú-RouterProfile.fetch_models.<locals>.<genexpr>  s6   é € Ð!e¹°1ÄÈAÌt×AT¤,ÐYZ×Y^ÑY^Ð_c×Yd¤,¤# a¨¥g§, ,»ùs   ‚AŸA¸A)r´   rž   r\   rU   Úfromkeys)r   rŸ   r    r¡   rZ   s   &$$$ r   Úfetch_modelsÚRouterProfile.fetch_models
  sS   € ô
 %¨W¯]¨]¸ÀXÇ^À^ÐQSÐ]dÔeˆØŠ=ÙÜ�eÔÜ”D—M‘MÑ!e¹Ó!eÓeÓf×nÐnÐjnÐnr   c                óZ   <€ V ^8„  d   QhRS[ S[,          RS[ S[S[R3,          ,          /# )r   Úmodelr   .)r   r6   rŒ   )r   r   s   "€r   r   rÏ     s3   ø€ ÷ 	Kñ 	K±¹#µð 	KÁ8ÉEÑRUÐWZÐRZÍOÕC\ñ 	Kr   c                óÂ   € \        T;'       g    R4      P                  4       pV'       g   R# \        4       pVf   \        4        R# W#9   d   \	        W2,          4      # R# )zKCatalog-declared effort vocabulary (cache-only; cold cache -> None + warm).r;   N)r6   rC   r¹   r·   rŒ   )r   rÚ   rh   rf   s   &&  r   Úsupported_reasoning_effortsÚ)RouterProfile.supported_reasoning_efforts  sP   € ä�%—+�+˜2Ó×$Ñ$Ó&ˆßÙÜ+Ó-ˆØÒ ÜÔ!ÙØ,/Ô,@Œu�]Õ'Ó(ÐJÀdÐJr   r   )	r   r   r    r!   r"   r×   rÜ   r$   r%   r&   s   @r   rÍ   rÍ     s;   ø‡ € ÙOð	oØ*.ð	oØJNð	oØad÷	oò 	o÷	Kö 	Kr   rÍ   r_   Úcodex_responseszRamp Routeruc   Ramp Router (router.com) â€” routes each request to the cheapest model that clears your quality barzhttps://app.router.com/keysr©   zHermes-Agent/Tzgpt-5.4-mini)rÄ   ÚaliasesÚapi_modeÚdisplay_nameÚdescriptionÚ
signup_urlÚenv_varsr    Ú	auth_typeÚdefault_headersÚsupports_visionÚdefault_aux_modelÚfallback_modelsc                óØ   € V ^8„  d   Qh/ ^ \         9   d1   \        \        \        \        \        ,          3,          ,          ;R&   ^\         9   d   \        \        \
        3,          ;R&   # )r   r   r1   )Ú__conditional_annotations__r   rU   r6   r\   r   )r   s   "r   r   r      sN   € ÷ ñ ÷> 6Ò 5”œœc¤4¬¥9˜nÕ-Õ.Ñ 5ñ?÷f ,Ò +””Sœ+Ð%Õ&Ñ +ògr   )zramp-routerÚrampz
router.com)rL   rM   r:   r   )2rë   r"   rÈ   r‚   Úloggingr@   r.   rÆ   r„   Úpathlibr   Útypingr   r   Úagent.reasoning_effortr   Úhermes_cli.version_infor   Ú	providersr   Úproviders.baser   r	   Ú	getLoggerr   rd   rE   r   ÚLockr0   r   r   r   r1   r3   rI   rO   rW   ro   rv   rŠ   rš   rž   r´   r¹   r·   rÍ   Úbase_versionr_   r   )rë   s   @r   Ú<module>r÷      s8  øðöó Û Û Û 	Û 
Û Û Ý ß  å 0Ý 4Ý 'ß ?à	×	Ò	˜8Ó	$€à5Ð ð 26€Ó 5Ø—’Ó €Ø€Ø€÷#ñ #ð *,€Ó +õKõ#õ õ$õ!õ@õ
Gõõ(ð6¨2ð 6¸rð 6ÐTW÷ 6õ,õ(Eô<K�Oô Kñ4 
Ø	Ð@ÐK\ØØuØ,ØNÑYbÓYdØà! ]Ñ3CÓ3E×3RÑ3RÐ2SÐ#TÐUØ¨NØô
€ñ �&Ö r   