+
    „WÝjîG  ã                  ó  € R t ^ RIHt ^ RIt^ RIt^ RIHtHtHt ^ RI	H
t
 ]P                  ! R4      tRtRtRtR	R
RR
RR
RR/R R llt]! R4      tRtRRRR/t ! R R4      tR R ltR R ltR"R R llt^ sR R ltR  R! lt]tR# )#zñInteractive model picker used after OAuth login.

Re-exported from ``hermes_cli/auth.py`` (patch targets unchanged); origin helpers are imported
lazily per function so ``hermes_cli.auth.<helper>`` patches still intercept and no cycle forms.
)ÚannotationsN)ÚDictÚListÚOptional)ÚDEFAULT_NOUS_PORTAL_URLzhermes_cli.authzEnter custom model namezSkip (keep current)u     â†� currently in useÚproviderÚ Úbase_urlÚapi_keyÚinclude_kindsc               ó0   € V ^8„  d   QhRRRRRRRRRRRR	/# )
é   Úmodel_idÚstrr   r	   r
   r   úOptional[list[str]]ÚreturnÚbool© )Úformats   "ÚPC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\auth_model_picker.pyÚ__annotate__r      s>   € ÷ $ñ $Øð$Ø #ð$Ø47ð$ØGJð$à&ð$ð 
ñ$ó    c               ód  €  ^ RI HpHp V! WW#VR7      pV'       g   R# \	        4        \	        R4       \	        X! V4      4       \	        R4        \        R4      P                  4       P                  4       pTR9   #   \         d    . p Lwi ; i  \        \        3 d    \	        4         R# i ; i)zªPrompt before saving a model that trips any selection guard (cost, data-policy, ...).

Shows one [y/N] confirm listing every warning that fired. Returns True to proceed.
)Úcombined_messageÚselection_warnings©r   r	   r
   r   TzSwitch anyway? [y/N]: FzH========================================================================>   ÚyÚyes)
Ú!hermes_cli.model_selection_guardsr   r   Ú	ExceptionÚprintÚinputÚstripÚlowerÚKeyboardInterruptÚEOFError)	r   r   r	   r
   r   r   r   ÚwarningsÚresponses	   &$$$$    r   Ú_confirm_selection_guardsr(      s§   € ðßZÙ%Ø°(Ð[hô
ˆ÷
 Ùä	„GÜ	ˆ(„OÜ	Ñ
˜8Ó
$Ô%Ü	ˆ(„OðÜÐ1Ó2×8Ñ8Ó:×@Ñ@ÓBˆð �|Ñ#Ð#øô ô ØŠðûô œxÐ(ô ÜŒÚðús#   ‚A= Á'B Á=BÂBÂB/Â.B/ÚLargeú  ÚfreeÚgreenÚtop_tierÚyellowc                  ó~   € ] tR t^:tRtRRRR/R R lltR R ltR	 R
 ltR R ltR R lt	RR R llt
R R ltRtR# )Ú_ModelPickerRowsuA  Column-aligned picker rows.

Usage-window plan: ``Large`` / ``Free`` on the rows the gateway marks, exactly as
the gateway sent it on this caller's catalog. Every other account keeps ``$/Mtok``.

Chrome is emitted as styled segments, not ANSI baked into one string â€” curses addnstr would
render escape bytes literally.
ÚusageNÚnotesc               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )r   Ú
all_modelsú	list[str]Úpricingú#Optional[dict[str, dict[str, str]]]Úcurrent_modelr   Úsale_chromer   r2   úOptional[dict[str, str]]r   ÚNoner   )r   s   "r   r   Ú_ModelPickerRows.__annotate__D   sH   € ÷ C4ñ C4Ø#ðC4Ø.QðC4àðC4à)-ðC4ð (ðC4ð 
ñ	C4r   c               	óÄ  aa€ ^ RI HoHp W0n        T;'       g    / V n        VRJV n        V P
                  '       d   VP                  S4      pWPn        V P
                  '       dƒ   ^ RIH	p V! VS4      V n
        RV n        RV n        RV n        ^ ;V n        V n        / V n        RV P                  P#                  4       9   V n        \'        R V 4       ^ R7      ^,           V n        R# / V n
        RV n        \+        S;'       d;    \,        ;QJ d    V3R lV 4       F  '       g   K   R	M	  RM! V3R lV 4       4      4      V n        V'       d   ^M^p	V P                  '       d   \'        R
 V 4       ^ R7      V	,           M^ V n        / V n        ^V n        ^ V n        RV n        RV n        V P                  '       g   R# R V3R llp
V EFb  pSP/                  V4      pRpR;rïRRRpppV'       dÕ   S! VP/                  RR4      4      pS! VP/                  RR4      4      pVP/                  RR4      pV'       d	   S! V4      MRpV'       d   R	V n        V'       d:   V! VP/                  RR4      VP/                  RR4      VP/                  R4      4      MRpVe+   R	V n        Vw  pppVR8w  g   VR8w  d   V
! V4      V
! V4      rþVVVWÞV3V P                   V&   \'        V P                  \1        V4      \1        V4      4      V n        \'        V P                  \1        V4      4      V n        EKe  	  V P                  '       d   \'        V P                  ^4      V n        R# R# )é    )Ú_format_price_per_mtokÚcompute_sale_discountN)Úusage_levelsFr-   c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5i©N©Úlen©Ú.0Úms   & r   Ú	<genexpr>Ú,_ModelPickerRows.__init__.<locals>.<genexpr>[   s   é € Ð <±¨A¤ Q§ ³ùó   ‚)Údefaultc              3  óF   <"  € T F  pSP                  V4      x € K  	  R # 5irC   )Úget)rG   rH   r6   s   & €r   rI   rJ   _   s   øé € Ð/SÉ
À1°·±¸A·°Ë
ùs   ƒ!Tc              3  ó8   "  € T F  p\        V4      x € K  	  R # 5irC   rD   rF   s   & r   rI   rJ   b   s   é € Ð8©Z¨œS ŸV˜V«ZùrK   c               ó    € V ^8„  d   QhRRRR/# )r   Úrawr   r   r   )r   s   "r   r   Ú/_ModelPickerRows.__init__.<locals>.__annotate__l   s   € ÷ 	Eñ 	E�cð 	E˜cñ 	Er   c                ó&   <€ V R 8w  d	   S! V 4      # R# )r   Ú?r   )rQ   r?   s   &€r   Ú_wasÚ'_ModelPickerRows.__init__.<locals>._wasl   s   ø€ Ø25¸´)Ñ)¨#Ó.ÐDÀÐDr   r   ÚpromptÚ
completionÚinput_cache_readÚoriginal)Úhermes_cli.models_pricingr?   r@   r8   r2   Úwindow_modeÚwith_pricingr1   Úhermes_cli.model_picker_usagerA   ÚlevelsÚhas_pricingÚ	has_cacheÚany_on_saleÚ	price_colÚ	cache_colÚ_price_cacheÚvaluesÚhas_top_tierÚmaxÚname_colr   ÚanyrN   rE   )Úselfr4   r6   r8   r9   r1   r2   r@   rA   Úname_padrU   ÚmidÚpÚpctÚwas_inpÚwas_outÚinpÚoutÚcacheÚ
cache_readÚsaleÚwas_prompt_rawÚwas_out_rawr?   s   &&f$$$$                @r   Ú__init__Ú_ModelPickerRows.__init__D   së  ù€ ÷
 	\Ø*Ôà—[�[˜bˆŒ
Ø ¨Ð,ˆÔØ××Ðà×&Ñ& wÓ/ˆEØŒ
Ø××ÐÝBÙ& z°7Ó;ˆDŒKØ$ˆDÔØ"ˆDŒNØ$ˆDÔØ./Ð/ˆDŒN˜Tœ^Ø "ˆDÔØ *¨d¯k©k×.@Ñ.@Ó.BÑ BˆDÔÜÑ <±Ó <ÀaÔHÈ1ÕLˆDŒMÙØˆŒØ!ˆÔÜ × SÐ S¯C«CÔ/SÉ
Ó/S¯C¯CªCÔ/SÉ
Ó/SÓ,SÓTˆÔç#‘1¨ˆØSW×Sc×ScÐScœÑ8©ZÓ8À!ÔDÀxÖOÐijˆŒàSUˆÔØˆŒØˆŒØˆŒØ ˆÔØ××ÐÙ÷	Eð 	Eô ˆCØ—‘˜CÓ ˆAØ"ˆCØ "Ð"ˆGØ  " b�e�ˆCßÙ,¨Q¯U©U°8¸RÓ-@ÓA�Ù,¨Q¯U©U°<ÀÓ-DÓE�ØŸU™UÐ#5°rÓ:�
ß>HÑ.¨zÔ:Èb�ßØ%)�D”Nßq|Ñ,¨Q¯U©U°8¸RÓ-@À!Ç%Á%ÈÐVXÓBYÐ[\×[`Ñ[`ÐakÓ[lÔmð  CG�ØÒ#Ø'+�DÔ$Ø7;Ñ4�C˜¨ð &¨Ô+¨{¸bÔ/@Ù+/°Ó+?ÁÀkÓAR Ø&)¨3°°sÀWÐ%MˆD×Ñ˜cÑ"Ü  §¡´°S³¼3¸s»8ÓDˆDŒNÜ  §¡´°U³Ó<ˆD�Nñ- ð. �>�>ˆ>Ü  §¡°Ó3ˆDŽNñ r   c               ó    € V ^8„  d   QhRRRR/# ©r   rm   r   r   zlist[tuple[str, str | None]]r   )r   s   "r   r   r<   ‰   s   € ÷ ñ  #ð Ð*Fñ r   c                óJ  € VRV P                    2 V P                  P                  V4      '       d   RMR3.p^ RIHp V P
                  P                  V4      pV! VR4      pTP                  \        R3VR\         2 \        P                  T;'       g    R4      334       V# )zLWindow row: padded name (dim when a full allowance stops it) + Large / Free.Ú<ÚdimN)Úusage_level_labelÚenr   )ri   r1   Úblocksr^   r€   r_   rN   ÚextendÚ
_GAUGE_GAPÚ	_COST_COLÚ_LEVEL_STYLE)rk   rm   Úsegsr€   ÚlevelÚwords   &&    r   Ú_cost_segmentsÚ_ModelPickerRows._cost_segments‰   s›   € à25°a¸¿¹°Ð5FÐ1GÐSW×S]ÑS]×SdÑSdÐeh×SiÒSiÉ%ÐosÐ.tÐ-uˆÝCØ—‘—‘ Ó$ˆÙ  ¨Ó-ˆØ�‰”j $Ð'¨T°!´I°;°Ð,?Ä,×BRÑBRÐSX×S^ÐS^Ð\^ÓB_Ð)`ÐaÔbØˆr   c               ó    € V ^8„  d   QhRRRR/# r|   r   )r   s   "r   r   r<   ’   s   € ÷ %ñ %˜Cð %Ð$@ñ %r   c                óh  € WP                   8X  d
   \        R3.M. pV P                  P                  V4      '       d   RV P                  V,           2R3.M. pV P                  '       d   V P                  V4      V,           # V P                  '       g
   VR3.VOVO# V P                  P                  VR4      w  rErgr‰VRJp
V
'       d   RVRV P                  ^,
           2 R3.pMVRV P                   2 R3.pRVRV P                   2 RVRV P                   2 2pV P                  '       d   VRVRV P                   2 2,          pVP                  VR34       V
'       dA   VP                  R	V R
2R34       V'       g	   V	'       d   VP                  RV RV	 2R34       W³,           V,           # )uc   Build a rich radiolist row: yellow â˜…/% , dim was, plain prices â€” or usage gauges on the window.Nu     Â· r   r.   r~   Ú Ú>r*   z  -Ú%z  was Ú/)r   r   r   Nr   r   )u   â˜… r.   )r8   Ú_CURRENT_SUFFIXr2   rN   r\   rŠ   r`   re   ri   rc   ra   rd   Úappend)rk   rm   ÚcurrentÚnoterr   rs   rt   ro   rp   rq   Úon_saler‡   Ú
price_parts   &&           r   ÚsegmentsÚ_ModelPickerRows.segments’   s¼  € à/2×6HÑ6HÔ/H”O TÐ*Ñ+ÈbˆØ7;·z±z·~±~Àc×7JÒ7J�5˜Ÿ™ C�Ð)Ð*¨EÐ2Ñ3ÐPRˆØ××ÐØ×&Ñ& sÓ+¨gÕ5Ð5Ø××ÐØ˜$�KÐ1 $Ð1¨Ð1Ð1à15×1BÑ1B×1FÑ1FÀsÐLfÓ1gÑ.ˆ�%˜gØ˜T�/ˆçØ2DÈ#ÈaÐPT×P]ÑP]Ð`aÕPaÐObÐMbÐIcÐfjÐFkÐ1l‰Dà˜A˜dŸm™m˜_Ð,Ð-°Ð5Ð6ˆDà˜˜Q˜tŸ~™~Ð.Ð.Ð/¨r°#°a¸¿¹Ð7GÐ5GÐ1HÐIˆ
Ø�>�>ˆ>Ø˜B˜u Q t§~¡~Ð&6Ð$6Ð7Ð8Õ8ˆJØ�‰�Z Ð&Ô'ßØ�K‰K˜3˜s˜e 1˜ xÐ0Ô1ßŸ'Ø—‘˜v g Y¨a°¨yÐ9¸5ÐAÔBØ�{˜WÕ$Ð$r   c               ó    € V ^8„  d   QhRRRR/# )r   rm   r   r   r   )r   s   "r   r   r<   ­   s   € ÷ Dñ D˜ð D ñ Dr   c                	óP   € R P                  R V P                  V4       4       4      # )r   c              3  ó*   "  € T F	  w  rVx € K  	  R # 5irC   r   )rG   ÚtextÚ_styles   &  r   rI   Ú)_ModelPickerRows.label.<locals>.<genexpr>®   s   é € ÐCÑ0B¡ •tÓ0Bùs   ‚)Újoinr˜   )rk   rm   s   &&r   ÚlabelÚ_ModelPickerRows.label­   s    € Ø�w‰wÑC°·±¸cÔ0BÓCÓCÐCr   c               ó   € V ^8„  d   QhRR/# )r   r   r5   r   )r   s   "r   r   r<   °   s   € ÷ ñ  9ñ r   c                ó¢  € Rp. pV P                   '       d�   ^ RIHp \        V! V P                  4      4       F>  w  rEV^ 8X  d   RV P                  P
                   2MRpVP                  V V V 24       K@  	  VP                  V RRV P                   2 \         R24       V# V P                  '       d˜   V RRV P                   2 RRRV P                   2 RR	RV P                   2 2pV P                  '       d   VRR
RV P                   2 2,          pVR,          pV P                  '       d
   VR,          pVP                  V4       V# )zÏLines between the title and the list: plan gauges (window plan), column headers, legend.
Each choice is "  {label}" (2 spaces) plus a 3-char cursor region ("-> " or "   "), so column
content starts at col 5.rŽ   )Úplan_gauge_linesu    â€” r   r�   ÚUsageÚInr*   ÚOutÚCachez  $/Mtoku     â˜… = on saleú     )r\   r^   r¥   Ú	enumerater1   Úincluded_summaryr“   ri   r„   r`   rc   ra   rd   rb   )rk   ÚpadÚlinesr¥   ÚiÚlineÚsuffixÚheaders   &       r   Údescription_linesÚ"_ModelPickerRows.description_lines°   sR  € ð ˆØˆØ××ÐÝFÜ$Ñ%5°d·j±jÓ%AÖB‘�ØBCÀqÄ&˜5 §¡×!<Ñ!<Ð =Ñ>Èb�Ø—‘ ˜u T F¨6¨(Ð3Ö4ñ Cð �L‰L˜C˜5  A d§m¡m _Ð#4Ð 5´j°\ÀÐGÔHØˆLØ××ÐØ�u˜R  $§-¡- Ð0Ð1°°4¸¸$¿.¹.Ð9IÐ7IÐ2JÈ"ÈUÐSTÐUY×UcÑUcÐTdÐRdÐLeÐfˆFØ�~�~ˆ~Ø˜B˜w q¨¯©Ð(8Ð&8Ð9Ð:Õ:�Ø�jÕ ˆFØ××ÐØÐ+Õ+�Ø�L‰L˜Ô Øˆr   c               ó    € V ^8„  d   QhRRRR/# )r   Útitler   r   r   )r   s   "r   r   r<   Ç   s   € ÷ Bñ B ð BÀ#ñ Br   c                ó~   € V P                  4       pY'       d   RRP                  V4      ,           ,           # R,           # )zF*title* plus the description lines (headers / gauges), newline-joined.Ú
r   )r³   r    )rk   r¶   r®   s   && r   Ú
menu_titleÚ_ModelPickerRows.menu_titleÇ   s3   € à×&Ñ&Ó(ˆØ¶5˜˜tŸy™y¨Ó/Õ/ÕAÐA¸bÕAÐAr   c               ó   € V ^8„  d   QhRR/# )r   r   r   r   )r   s   "r   r   r<   Ì   s   € ÷ !ñ !˜#ñ !r   c                ó:   € V P                   '       g   R# ^ RIHp V# )zMWindow plan with a Large row listed: the one line that says what Large means.r   )ÚTOP_TIER_FOOTNOTE)rg   r^   r½   )rk   r½   s   & r   ÚfootnoteÚ_ModelPickerRows.footnoteÌ   s   € à× × Ð ÙÝCØ Ð r   )re   rb   rd   r8   ra   r`   rg   r_   ri   r2   rc   r1   r\   )úSelect default model:)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ry   rŠ   r˜   r¡   r³   r¹   r¾   Ú__static_attributes__r   r   r   r0   r0   :   sG   † ñðC4à59ðC4ð +/÷C4õJõ%õ6Dõ÷.B÷
!ñ !r   r0   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú	model_idsr5   r8   r   r   z%tuple[list[str], dict[int, str], int]r   )r   s   "r   r   r   Ô   s'   € ÷ `ñ `˜Yð `°sð `ÐMrñ `r   c                óŽ  € / pVef   ^ RI HpHpHp V! \	        \
        P                  V 4      4      VP                  4      w  rxWx,           p	V'       d   WS^ &   V'       d   WC\        V4      &   M?\	        \
        P                  V'       d
   W9   d   V.M. \	        V 4      ,           4      4      p	Y“W9   d   V	P                  V4      3# ^ 3# )a  ``(ordered ids, {row index: section heading}, cursor start)`` for the picker.

Window plan: "Recommended" (the plan's featured picks) then "Other models", with the current
model left in its own section (the cursor starts on it). Everyone else: current first.
)ÚSECTION_OTHERÚSECTION_RECOMMENDEDÚsplit_recommended)
r^   rÊ   rË   rÌ   ÚlistÚdictÚfromkeysÚfeatured_model_idsrE   Úindex)
rÈ   r8   Úwindow_usageÚsectionsrÊ   rË   rÌ   ÚheadÚrestÚordereds
   &&&       r   Ú_picker_orderr×   Ô   s®   € ð  "€HØÒßgÑgÙ&¤t¬D¯M©M¸)Ó,DÓ'EÀ|×GfÑGfÓg‰
ˆØ•+ˆßØ-�Q‰KßØ&3œ˜T›Ñ#øô ”t—}‘}ß -°-Ô2Lˆm‰_ÐRTÔX\Ð]fÓXgÕgó
ó ˆð ¸}Ô?W˜wŸ}™}¨]Ó;Ð_Ð_Ð]^Ð_Ð_r   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   Úrowsr0   r¹   r   rÖ   r5   rÓ   zdict[int, str]r   Úintr   )r   s   "r   r   r   ë   s2   € ÷ ñ Ð/ð ¸Sð È9ð Ð`nð Ðsvñ r   c                óò  € ^ RI HpHp ^ RIHpHp \        V4      RRr©pVP                  4        FS  pV P                  '       d	   V! V4      p\        RV9   d%   VP                  RV! RVP                  4      ^4      MT4       KU  	  \        \        V^,           4      4      p\        V^4       F\  w  rÞV^,
          V9   d    \        RV	 W=^,
          ,           V
 24       \        RVRV 2 RV! V P                  V4      4       24       K^  	  \        RV^,           RV 2 R\         24       \        RV^,           RV 2 R\          24       V P#                  4       ;p'       d   \        RV	 V V
 24       V# )	zgThe no-curses fallback's title, numbered rows (+ custom / skip) and footnote; returns the number width.)Úcolorize_gauge_bars_ansiÚformat_radio_item_ansi)ÚColorsÚcolorú[2mú[0mu   â˜…r*   r�   z. )Úhermes_cli.curses_uirÜ   rÝ   Úhermes_cli.colorsrÞ   rß   rE   Ú
splitlinesr\   r    ÚreplaceÚYELLOWr   r«   r˜   Ú_CUSTOM_LABELÚ_SKIP_LABELr¾   )rÙ   r¹   rÖ   rÓ   rÜ   rÝ   rÞ   rß   ÚnÚ_DIMÚ_RESETr°   Ú	num_widthr¯   rm   r¾   s   &&&&            r   Ú_print_numbered_rowsrí   ë   s[  € çUß/Ü˜'“l I¨yˆV€AØ×%Ñ%Ö'ˆØ××ÐÙ+¨DÓ1ˆDÜÀUÈdÄ]ˆd�l‰l˜5¡%¨¨v¯}©}Ó"=¸qÔAÐX\Ö]ñ (ô ”C˜˜A�“J“€IÜ˜G QÖ'‰ˆØ��E�hÔÜ�B�t�f˜X¨!¥e�_Ð-¨f¨XÐ6Ô7Ü��1�Q�y�k�MÐ" "Ñ%;¸D¿M¹MÈ#Ó<NÓ%OÐ$PÐQÖRñ (ô 
ˆBˆq�1�u�Q�y�k�MÐ" "¤] OÐ
4Ô5Ü	ˆBˆq�1�u�Q�y�k�MÐ" "¤[ MÐ
2Ô3Ø—=‘=“?Ð"€xÖ"Ü��4�&˜˜
 6 (Ð+Ô,ØÐr   c               óH   € V ^8„  d   Qh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È   r5   r8   r   r6   r7   Úunavailable_modelsr   Ú
portal_urlÚunavailable_messageÚconfirm_providerÚconfirm_base_urlÚconfirm_api_keyr2   r:   r¶   r   úOptional[str]r   )r   s   "r   r   r      s�   € ÷ @ñ @Øð@Ø),ð@à0ð@ð ,ð@ð ADð@ð ð	@ð 69ð	@ð RUð	@ð
 ð@ð $ð@ð 47ð@ð ñ@r   c                óô  aaaa%a&a'€ ^ RI Ho& T;'       g    . pS;'       g    RP                  4       P                  4       R8H  pR VVV3R llo%R V%V&3R llpV'       d   T	MRp\	        WV4      w  ppp\        V\        V4      ,           W!VWúR	7      o'R
pRpS'P                  V4      pT;'       g    \        P                  R4      p\        V4      p ^ RIHp V Uu. uF  pS'P                  V4      NK  	  up\        \        .,           pVP                  4       pV'       g   V'       d   RV R2pS'P!                  4       pV'       d1   VP#                  V'3R lV 4       4       VP%                  RV R24       S'P'                  4       ;p'       d   VP%                  RV 24       ^ RIHp . pV F;  pS'P-                  V4      V! V4      p!p TP%                  V!V8X  d   T MV  RV! 24       K=  	  V\        \        .,          pT! TTTR"V'       d   RP/                  V4      MRRTT;'       g    RR7      p"V"^ 8  d   R# \1        4        V"V8  d   S%! VV",          4      # V"V8X  d   V! 4       # R# u upi   \2        \4        \6        \8        P:                  3 d     Mi ; i\=        S'TTT4      p#T'       dn   TP                  4       ;'       g    RT R2p\1        4        \1        RT RT RT 24       T F+  p\1        RRRT# 2 RT S'P-                  T4       T 24       K-  	  \1        4          \?        RT^,            R24      P                  4       p$T$'       g   R# \A        T$4      p"^T"u;8:  d   T8:  d   M MS%! TT"^,
          ,          4      # T"T^,           8X  d   T! 4       # T"T^,           8X  d   R# \1        R T^,            24       KŸ    \B         d    \1        R!4        K¸  \D        \F        3 d     R# i ; i)#a  Interactive model picker; current_model listed first. Returns the chosen model ID or None. *title* heads
the menu (a plugin picking a model for something other than the default says so).

With *pricing* (``{model_id: {prompt, completion}}``) a compact price column is shown; models in
*unavailable_models* render grayed out and unselectable with an upgrade link to *portal_url*.
*usage* (``model_picker_usage.PickerUsage``, Nous only) swaps ``$/Mtok`` for plan gauges and the
gateway's per-model usage word on a usage-window plan.
)Ú
line_inputr   Únousc               ó    € V ^8„  d   QhRRRR/# )r   rm   r   r   rõ   r   )r   s   "r   r   Ú-_prompt_model_selection.<locals>.__annotate__  s   € ÷ #ñ # #ð #¨-ñ #r   c                óf   <€ V '       g   R # \        T SSSS'       d   R MR.R7      pV'       d   V # R # )NÚdata_policyr   )r(   )rm   Úokrô   ró   rò   s   & €€€r   Ú_confirmed_selectionÚ5_prompt_model_selection.<locals>._confirmed_selection  s6   ø€ ßÙä&ØÐ*Ð5EÈß"2™$¸¸ô
ˆ÷ ˆsÐ"˜dÐ"r   c               ó   € V ^8„  d   QhRR/# )r   r   rõ   r   )r   s   "r   r   rú     s   € ÷ @ñ @˜}ñ @r   c                 ó†   <€  S! R 4      P                  4       p T '       d	   S! T 4      # R#   \        \        3 d     R# i ; i)zEnter model name: N)r"   r%   r$   )Úcustomrþ   r÷   s    €€r   Ú_custom_selectionÚ2_prompt_model_selection.<locals>._custom_selection  sK   ø€ ð	ÙÐ 4Ó5×;Ñ;Ó=ˆF÷ 06Ñ# FÓ+Ð?¸4Ð?øô Ô+Ð,ô 	Úð	ús   ƒ+ «A ¿A N)r8   r9   r1   r2   rà   rá   r‘   )Úcurses_radiolistzUpgrade at z for paid modelsc              3  óL   <"  € T F  pR SP                  V4       2x € K  	  R# 5i)z   N)r¡   )rG   rm   rÙ   s   & €r   rI   Ú*_prompt_model_selection.<locals>.<genexpr>@  s!   øé € ÐNÁ¸#  D§J¡J¨s£OÐ#4Õ5Ãùs   ƒ!$u	     â”€â”€ u    â”€â”€rª   )Úmodel_search_textrŽ   r¸   T)ÚselectedÚcancel_returnsÚdescriptionÚ
searchableÚsearch_labelsÚheadingsu6   Unavailable models (requires paid tier â€” upgrade at Ú)r*   u   â”€â”€ r�   z
Choice [1-z] (default: skip): zPlease enter 1-zPlease enter a numberéÿÿÿÿ)$Úhermes_cli.cli_outputr÷   r"   r#   r×   r0   rÍ   r¹   r   ÚrstriprE   râ   r  r˜   rç   rè   r³   rƒ   r“   r¾   Úhermes_cli.model_searchr  r¡   r    r    ÚImportErrorÚNotImplementedErrorÚOSErrorÚ
subprocessÚSubprocessErrorrí   r!   rÚ   Ú
ValueErrorr$   r%   )(rÈ   r8   r6   rï   rð   rñ   rò   ró   rô   r1   r2   r¶   Ú_unavailabler9   r  rÒ   rÖ   rÓ   Ústartrê   rë   r¹   Ú_upgrade_urlré   r  rm   ÚchoicesÚunavailable_footerÚ
desc_linesr¾   r  Úmodel_search_labelsr¡   ÚhaystackÚidxrì   Úchoicerþ   r÷   rÙ   s(   &&&&&&fff&&&                         @@@r   Ú_prompt_model_selectionr$     sÐ  ý€ õ  1Ø%×+Ð+¨€Là#×)Ð) r×0Ñ0Ó2×8Ñ8Ó:¸fÑD€K÷#ò #÷@ñ @÷ (‘5¨T€LÜ,¨YÀ|ÓTÑ€GˆX�uäØ”$�|Ó$Õ$ gÐXcØô)€Dð €DØ€Fà—‘ Ó'€JØ×9Ð9Ô"9×AÑAÀ#ÓF€LÜˆG‹€Að,Ý9Ù18Ó9±¨#�4—=‘= Ö%±Ñ9¼]ÌKÐ<XÕXˆà0×6Ñ6Ó8Ðß!§lØ#.¨|¨nÐ<LÐ!MÐð !%× 6Ñ 6Ó 8ˆ
ßØ×ÑÔNÁÓNÔNØ×Ñ 	Ð*<Ð)=¸WÐEÔFØ—}‘}“Ð&ˆ8Ö&Ø×Ñ  h ZÐ0Ô1õ 	>Ø ÐÛˆCØ"Ÿj™j¨›oÑ/@ÀÓ/E�8ˆEØ×&Ñ&°¸C´¡uÈÀwÈaÐPXÈzÐEZÖ[ñ ð 	¤¬{Ð;Õ;ÐáØØØØß1;˜Ÿ	™	 *Ô-ÀØØ-Ø×%Ð% ô	
ˆð �Œ7ÙÜŒØ�Œ7Ù'¨°­Ó5Ð5Ø�!Œ8Ù$Ó&Ð&ÙùòQ :øôR Ô,¬g´z×7QÑ7QÐRô Ùðúô % T¨:°wÀÓI€IçØ0×6Ñ6Ó8÷ 
ð 
ØDÀ\ÀNÐRSÐTð 	ô 	ŒÜ��4�&˜Ð 2Ð3°7¸6¸(ÐCÔDÛˆCÜ�B�r˜!˜I˜;˜Ð' r¨$¨°·
±
¸3³Ð/@ÀÀÐIÖJñ  ä	„Gà
ð	Ü˜Z¨¨A­ wÐ.AÐBÓC×IÑIÓKˆFßÙÜ�f“+ˆCØ�CŽ}˜1�}Ù+¨G°C¸!µGÕ,<Ó=Ð=Ø�a˜!•eŒ|Ù(Ó*Ð*Ø�a˜!•eŒ|ÙÜ�O A¨¥E 7Ð+Ö,øÜô 	+ÜÐ)×*Ü!¤8Ð,ô 	Úð	ús†   Ã
I3 ÃI.Ã8+I3 Ä$I3 Ä,I3 Å
AI3 ÆBI3 È-I3 È>I3 ÉI3 É.I3 É3%JÊJÌ-,O
 Í2O
 ÎO
 Î#O
 Î3O
 Ï
O7Ï#O7Ï2O7Ï6O7c               ó   € V ^8„  d   QhRR/# )r   r   rÚ   r   )r   s   "r   r   r   †  s   € ÷ ñ  ñ r   c                 ó   € \         # rC   )Ú_model_choice_savesr   r   r   Úmodel_choice_save_countr(  †  s   € ÜÐr   c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r   r;   r   )r   s   "r   r   r   Š  s   € ÷  ñ   ð  ¨ñ  r   c                óØ   € ^ RI HpHp \        ^,          sV! 4       p\	        VP                  R4      \        4      '       d   WR,          R&   MRV /VR&   T! V4       ^ RIHp V! 4        R# )ub   Save the selected model to config.yaml only â€” NOT .env, which would stomp in multi-agent setups.)Úsave_configÚload_configÚmodelrL   )Únote_provider_setup_savedN)	Úhermes_cli.configr+  r,  r'  Ú
isinstancerN   rÎ   Ú-hermes_cli.observability.shared_metrics_setupr.  )r   r+  r,  Úconfigr.  s   &    r   Ú_save_model_choicer3  Š  sZ   € ÷ ;Ü˜1ÕÐÙ‹]€Fä�&—*‘*˜WÓ%¤t×,Ò,Ø%-ˆw�˜	Ò"à$ hÐ/ˆˆw‰Ù�ÔÝWáÖr   )r   NNr   r   r   r   r   NNrÀ   )rÅ   Ú
__future__r   Úloggingr  Útypingr   r   r   Úhermes_cli.auth_constantsr   Ú	getLoggerÚloggerrç   rè   r’   r(   rE   r…   r„   r†   r0   r×   rí   r$  r'  r(  r3  Úprompt_model_selectionr   r   r   Ú<module>r;     sº   ðñõ #ã Û ß 'Ñ 'Ý =à	×	Ò	Ð,Ó	-€à)€Ø#€Ø*€ð$Ø&(ð$Ø:<ð$ØMOð$à)-÷$ñ> �‹L€	Ø€
à˜ ¨XÐ6€÷W!ñ W!õt`õ.÷*@ðF Ð õõ ð$ 1Ò r   