§
    øžyjGÔ ã                  ó2  — d Z ddlmZ ddlZddlZddlZddlZddlm	Z	 ddl
mZ dZd4d
„Zd5d„Zd6d„Zddœd7d„Zd8d„Zd9d„Zd:d„Zd9d„Zd9d„Zd;d „Zd9d!„Zd9dd"œd#„Zd9d$„Zd;d%„Zd&„ Zd9d'„Zd(„ Zd9d)„Zd9d*„Zd9d+„Z d9d,„Z!d9d-„Z"d9d.„Z#d9d/„Z$d<d1„Z%d9d2„Z&d9d3„Z'dS )=uw  Per-provider model-selection wizard flows for ``hermes setup`` / ``hermes model``.

Extracted from ``hermes_cli/main.py`` as part of the god-file decomposition
campaign (``~/.hermes/plans/god-file-decomposition.md``, Phase 2 â€” splitting
main.py handler/flow bodies out of the module). These 18 ``_model_flow_*``
functions are the interactive provider-setup branches dispatched by
``select_provider_and_model`` (which stays in main.py).

Behavior-neutral: each function is lifted verbatim. ``select_provider_and_model``
in main.py re-imports them (``from hermes_cli.model_setup_flows import *``-style
explicit import) so existing call sites â€” and test monkeypatches that target
``hermes_cli.main._model_flow_*`` â€” keep resolving against main.py's namespace.

main.py-internal helpers the flows call (``_prompt_api_key``, ``_save_custom_provider``,
the reasoning-effort/stepfun/qwen helpers, ``_run_anthropic_oauth_flow``, â€¦) are
imported lazily inside the flows (``from hermes_cli.main import ...`` resolves at
call time, when main.py is fully loaded) so this module never imports
``hermes_cli.main`` at import time -> no import cycle.
é    )ÚannotationsN)Ú clear_model_endpoint_credentials)Úcustom_provider_slug)	úus.úeu.úap.úapac.újp.úca.úsa.úme.úaf.Úregion_nameÚstrÚreturnc                ót   — | pd                      ¦   «         }dD ]\  }}|                     |¦  «        r|c S ŒdS )zJMap an AWS region name to its inference-profile geo prefix ('' = unknown).Ú ))r   )zus-Úus_gov)r   )zeu-)r   )zap-)r   )zca-)r   )zsa-)r   )zme-)r   )zaf-)ÚlowerÚ
startswith)r   ÚrÚgeoÚregion_prefixess       úB/home/ragecks/.hermes/hermes-agent/hermes_cli/model_setup_flows.pyÚbedrock_region_geo_prefixr   +   sW   € à	Ð	˜×!Ò!Ñ#Ô#€Að!ð 
ð 
Ñˆˆ_ð �<Š<˜Ñ(Ô(ð 	ØˆJˆJˆJð	àˆ2ó    Úmodel_idÚboolc                óê   ‡— | pd                      ¦   «         Št          ˆfd„t          D ¦   «         d¦  «        }|�‰                     d¦  «        rdS t	          |¦  «        }|sdS |dk    r|dv S ||k    S )a-  True when *model_id* can be invoked from *region_name*'s endpoint.

    Bare foundation-model ids and ``global.*`` profiles route from anywhere.
    Geo-prefixed inference profiles (``us.*``, ``eu.*``, ...) only route from
    endpoints in their own geography. Unknown region shapes hide nothing.
    r   c              3  óF   •K  — | ]}‰                      |¦  «        ¯|V — Œd S ©N©r   ©Ú.0ÚpÚmids     €r   ú	<genexpr>z5bedrock_model_routable_from_region.<locals>.<genexpr>D   s4   øè è € ÐMÐM˜a¸3¿>º>È!Ñ;LÔ;LÐM˜ÐMÐMÐMÐMÐMÐMr   Núglobal.Tr   )r   r	   r
   )r   ÚnextÚBEDROCK_GEO_PREFIXESr   r   )r   r   Úmatched_geor   r&   s       @r   Ú"bedrock_model_routable_from_regionr,   <   s•   ø€ ð ˆ>�r×
 Ò
 Ñ
"Ô
"€CÝÐMÐMÐMÐMÕ#7ÐMÑMÔMÈtÑTÔT€KØÐ˜cŸnšn¨YÑ7Ô7ÐØˆtÝ
# KÑ
0Ô
0€CØð ØˆtØ
ˆe‚|€|àÐ5Ð5Ð5Ø˜#ÒÐr   Úprovider_idútuple[str, str]c                ó&   — ddl m}  || |¦  «        S )zCResolve an existing wizard credential without changing its storage.r   )Ú _resolve_api_key_provider_secret)Úhermes_cli.authr0   )r-   Úpconfigr0   s      r   Ú _existing_api_key_for_model_flowr3   P   s'   € à@Ð@Ð@Ð@Ð@Ð@à+Ð+¨K¸ÑAÔAÐAr   r   ©Úprovider_nameÚbase_urlr5   ÚNonec               ó¨  — 	 ddl m}m} ddlm}m}  || |pd¬¦  «        }|sdS  |d¦  «        }t          |t          ¦  «        sdS |                     ¦   «         D ]å\  }}	t          |t          ¦  «        r0| 
                    |¦  «        r||k    st          |	t          ¦  «        sŒKg }
g }d}|	D ]�}t          |t          ¦  «        rU|                     d¦  «        dk    r<d	}|                     d
¦  «        }|r"|                     t          |¦  «        ¦  «         Œl|
                     |¦  «         Œ‚|r |||
|¬¦  «         ŒædS # t          $ r Y dS w xY w)ab  Drop stale ``model_config`` credentials from inactive custom pools.

    ``model_config`` means "the credential currently stored under
    ``model.api_key``". After an explicit custom-endpoint switch, any old
    custom pool still carrying that source points at the previous endpoint and
    can be selected before the freshly saved config is tried.
    r   )ÚCUSTOM_POOL_PREFIXÚget_custom_provider_pool_key)Úread_credential_poolÚwrite_credential_poolNr4   FÚsourceÚmodel_configTÚid)Úremoved_ids)Úagent.credential_poolr9   r:   r1   r;   r<   Ú
isinstanceÚdictÚitemsr   r   ÚlistÚgetÚappendÚ	Exception)r6   r5   r9   r:   r;   r<   Úactive_pool_keyÚpoolsÚpool_keyÚentriesÚretainedr@   ÚchangedÚentryÚentry_ids                  r   Ú/_prune_replaced_custom_model_config_credentialsrQ   W   só  € ð&ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	PÐOÐOÐOÐOÐOÐOÐOà6Ð6ØØ'Ð/¨4ð
ñ 
ô 
ˆð ð 	ØˆFØ$Ð$ TÑ*Ô*ˆÝ˜%¥Ñ&Ô&ð 	ØˆFØ!&§¢¡¤ð 	Sð 	SÑˆH�gå˜x­Ñ-Ô-ðà×*Ò*Ð+=Ñ>Ô>ðð ˜Ò.Ð.Ý! '­4Ñ0Ô0ð /ð ØˆHØˆKØˆGØ ð 'ð '�Ý˜e¥TÑ*Ô*ð ¨u¯yªy¸Ñ/BÔ/BÀnÒ/TÐ/TØ"�GØ$Ÿyšy¨™œ�HØð :Ø#×*Ò*­3¨x©=¬=Ñ9Ô9Ð9ØØ—’ Ñ&Ô&Ð&Ð&Øð SØ%Ð% h°ÀkÐRÑRÔRÐRøð)	Sð 	Søõ* ð ð ð Øˆˆðøøøs   ‚!E ¥ E ÁC:E Å
EÅEÚtitlec           	     óÒ  — g d¢}	 ddl m}  || |d¦  «        }|dk    rt          ¦   «          d|         S n# t          $ r Y nw xY wt          | ¦  «         t	          |d¦  «        D ]'\  }}|dk    rdnd}t          d|› d|› d	|› �¦  «         Œ(t          ¦   «          	 t          d
¦  «                             ¦   «         }n# t          t          f$ r d}Y nw xY w|dk    rdS |dk    rdS dS )zÝPrompt for reuse / reauthenticate / cancel with the standard radio UI.

    Returns one of ``"use"``, ``"reauth"``, ``"cancel"``. Falls back to a
    numbered prompt when curses is unavailable (piped stdin, non-TTY).
    )zUse existing credentialsz Reauthenticate (new OAuth login)ÚCancelr   ©Ú_curses_prompt_choice)ÚuseÚreauthÚcancelé   õ   â†’ú ú  ú. ú  Choice [1/2/3]: Ú1Ú2rX   Ú3rY   rW   )	Úhermes_cli.setuprV   ÚprintrH   Ú	enumerateÚinputÚstripÚKeyboardInterruptÚEOFError)rR   ÚchoicesrV   ÚidxÚiÚlabelÚmarkerÚchoices           r   Ú_prompt_auth_credentials_choicerp   Œ   s]  € ðð ð €Gð
Ø:Ð:Ð:Ð:Ð:Ð:à#Ð# E¨7°AÑ6Ô6ˆØ�!Š8ˆ8Ý‰GŒGˆGØ.¨sÔ3Ð3ð øõ ð ð ð Øˆðøøøõ 
ˆ%�L„L€LÝ˜g qÑ)Ô)ð *ð *‰ˆˆ5Ø˜qš&˜&�� cˆÝÐ(�6Ð(Ð(˜AÐ(Ð( Ð(Ð(Ñ)Ô)Ð)Ð)Ý	�G„G€GðÝÐ+Ñ,Ô,×2Ò2Ñ4Ô4ˆˆøÝ�xÐ(ð ð ð Øˆˆˆðøøøð �‚}€}ØˆxØ�‚}€}ØˆxØˆ5s!   †.6 ¶
AÁAÂ!B> Â>CÃCc                óª  — ddl m} ddlm} ddlm}m}m}m}  |dddd¬	¦  «        }t          d|¦  «        \  }	}
|	st          d
¦  «         t          ¦   «           |||	d|
¬¦  «        \  }}|rdS ddlm}m}  |d¬¦  «        } |dd¬¦  «        } ||||d||p|	¬¦  «        }|rž ||¦  «         ddlm}m}  |¦   «         }|                     d¦  «        }t%          |t&          ¦  «        s|rd|ini }||d<   d|d<   ||d<   d|d<   t)          |d¬¦  «          ||¦  «          |¦   «          t          d|› d�¦  «         dS t          d¦  «         dS )z5OpenRouter provider: ensure API key, then pick model.r   ©Ú_prompt_api_key)ÚOPENROUTER_BASE_URL)ÚProviderConfigÚ_prompt_model_selectionÚ_save_model_choiceÚdeactivate_providerÚ
openrouterÚ
OpenRouterÚapi_key)ÚOPENROUTER_API_KEY©r?   ÚnameÚ	auth_typeÚapi_key_env_varsz&Get one at: https://openrouter.ai/keys©r-   Úexisting_sourceN)Ú	model_idsÚget_pricing_for_providerT©Úforce_refresh©Úcurrent_modelÚpricingÚconfirm_providerÚconfirm_base_urlÚconfirm_api_key©Úload_configÚsave_configÚmodelÚdefaultÚproviderr6   Úchat_completionsÚapi_modeF©Úclear_api_modeúDefault model set to: z (via OpenRouter)ú
No change.)Úhermes_cli.mainrs   Úhermes_constantsrt   r1   ru   rv   rw   rx   r3   rd   Úhermes_cli.modelsrƒ   r„   Úhermes_cli.configrŽ   r�   rF   rB   rC   r   )Úconfigrˆ   rs   rt   ru   rv   rw   rx   r2   Úexisting_keyr‚   Ú	_resolvedÚabortrƒ   r„   Úopenrouter_modelsr‰   ÚselectedrŽ   r�   Úcfgr�   s                         r   Ú_model_flow_openrouterr¤   ²   sh  € à/Ð/Ð/Ð/Ð/Ð/Ø4Ð4Ð4Ð4Ð4Ð4ðð ð ð ð ð ð ð ð ð ð ð ð ˆnØØØØ0ð	ñ ô €Gõ %EÀ\ÐSZÑ$[Ô$[Ñ!€L�/Øð ÝÐ6Ñ7Ô7Ð7Ý‰ŒˆØ&�ØØØ Ø'ð	ñ ô Ñ€Iˆuð ð ØˆàEÐEÐEÐEÐEÐEÐEÐEà!˜	°Ð5Ñ5Ô5Ðð 'Ð& |À4ÐHÑHÔH€Gà&Ð&ØØ#ØØ%Ø,Ø!Ð1 \ðñ ô €Hð ð ØÐ˜8Ñ$Ô$Ð$ð 	?Ð>Ð>Ð>Ð>Ð>Ð>Ð>àˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ(ˆˆjÑØ/ˆˆjÑØ.ˆˆjÑÝ(¨¸uÐEÑEÔEÐEØˆ�CÑÔÐØÐÑÔÐÝÐB xÐBÐBÐBÑCÔCÐCÐCÐCåˆlÑÔÐÐÐr   r~   ÚpresetrC   c                óÀ  — t          d| › �¦  «         t          d¦  «         t          |                     d¦  «        pg d¬¦  «        D ]C\  }}t          d|› d|                     d¦  «        › d	|                     d
¦  «        › �¦  «         ŒD|                     d¦  «        pi }t          d|                     d¦  «        › d	|                     d
¦  «        › �¦  «         dS )zDPrint the full reference-models + aggregator breakdown for a preset.z
  Preset: z  Reference models:Úreference_modelsrZ   ©Ústartú    r^   r’   ú:r�   Ú
aggregatorz  Aggregator:  N)rd   re   rF   )r~   r¥   rk   ÚslotÚaggs        r   Ú_print_moa_presetr¯   ù   sñ   € å	Ð
�tÐ
Ð
ÑÔÐÝ	Ð
Ñ Ô Ð Ý˜vŸzšzÐ*<Ñ=Ô=ÐCÀÈ1ÐMÑMÔMð Hð H‰	ˆˆTÝÐF�SÐFÐF˜DŸHšH ZÑ0Ô0ÐFÐF°4·8²8¸GÑ3DÔ3DÐFÐFÑGÔGÐGÐGØ
�*Š*�\Ñ
"Ô
"Ð
( b€CÝ	Ð
D˜CŸGšG JÑ/Ô/Ð
DÐ
D°#·'²'¸'Ñ2BÔ2BÐ
DÐ
DÑEÔEÐEÐEÐEr   c                óŒ  — ddl m} ddlm} ddlm}m}m}m} ddl	m
} |d         }	 |d¦  «        pd}
|
s,t          d	¦  «         t          d
¦  «         t          ¦   «           ||	|
d¬¦  «        \  }}|rdS ddlm}m}  |d¬¦  «        } |dd¬¦  «        } ||||¬¦  «        }|r� ||¦  «         ddl	m}m}  |¦   «         }|                     d¦  «        }t%          |t&          ¦  «        s|rd|ini }||d<   d|d<   ||d<   d|d<    ||¦  «          |¦   «          t          d|› d�¦  «         dS t          d¦  «         dS )zIVercel AI Gateway provider: ensure API key, then pick model with pricing.r   )ÚAI_GATEWAY_BASE_URLrr   ©ÚPROVIDER_REGISTRYrv   rw   rx   )Úget_env_valuez
ai-gatewayÚAI_GATEWAY_API_KEYr   z^Create API key here: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai-gateway&title=AI+Gatewayz/Add a payment method to get $5 in free credits.)r-   N)Úai_gateway_model_idsr„   Tr…   )rˆ   r‰   r�   r�   r‘   r’   r6   r“   r”   r—   z (via Vercel AI Gateway)r˜   )rš   r±   r™   rs   r1   r³   rv   rw   rx   rœ   r´   rd   r›   r¶   r„   rŽ   r�   rF   rB   rC   )r�   rˆ   r±   rs   r³   rv   rw   rx   r´   r2   rž   rŸ   r    r¶   r„   Úmodels_listr‰   r¢   rŽ   r�   r£   r�   s                         r   Ú_model_flow_ai_gatewayr¸     sC  € à4Ð4Ð4Ð4Ð4Ð4Ø/Ð/Ð/Ð/Ð/Ð/ðð ð ð ð ð ð ð ð ð ð ð ð 0Ð/Ð/Ð/Ð/Ð/ð   Ô-€GØ �=Ð!5Ñ6Ô6Ð<¸"€LØð ÝØlñ	
ô 	
ð 	
õ 	Ð?Ñ@Ô@Ð@Ý‰ŒˆØ&� w°È,ÐWÑWÔWÑ€IˆuØð ØˆàPÐPÐPÐPÐPÐPÐPÐPà&Ð&°TÐ:Ñ:Ô:€KØ&Ð& |À4ÐHÑHÔH€Gà&Ð&Ø =¸'ðñ ô €Hð ð ØÐ˜8Ñ$Ô$Ð$à>Ð>Ð>Ð>Ð>Ð>Ð>Ð>àˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ(ˆˆjÑØ/ˆˆjÑØ.ˆˆjÑØˆ�CÑÔÐØÐÑÔÐÝÐI xÐIÐIÐIÑJÔJÐJÐJÐJåˆlÑÔÐÐÐr   c           
     ó2  — ddl m}m} ddlm}m} ddlm}  |t          | t          ¦  «        r|  
                    d¦  «        ni ¦  «        }| 
                    d¦  «        pi }|st          d¦  «         dS t          |                     ¦   «         ¦  «        }	| 
                    d	¦  «        p|	d         }
g }|	D ]¤}||          
                    d
¦  «        pi }|r-| 
                    d¦  «        › d| 
                    d¦  «        › �nd}t          ||          
                    d¦  «        pg ¦  «        }||
k    rdnd}|                     |› d|› d|› d|› �¦  «         Œ¥|
|	v r|	                     |
¦  «        nd}	 ddlm}  |d||¦  «        }�n# t&          $ �r t          d¦  «         t)          |d¦  «        D ]*\  }}|dz
  |k    rdnd}t          d|› d|› d|› �¦  «         Œ+	 t+          dt          |¦  «        › d�¦  «                             ¦   «         }n(# t.          t0          f$ r t          d¦  «         Y Y dS w xY w|s|}na	 t3          dt5          t          |¦  «        dz
  t7          |¦  «        dz
  ¦  «        ¦  «        }n!# t8          $ r t          d¦  «         Y Y dS w xY wY nw xY w|�|dk     rt          d¦  «         dS |	|         }||         } |¦   «         }| 
                    d¦  «        }t          |t          ¦  «        s|rd|ini }||d<   ||d<   d|d<   t;          |d¬ ¦  «         |                     d!d¦  «          ||¦  «          ||¦  «          |¦   «          t          ¦   «          t          d"|› d#�¦  «         t?          ||¦  «         dS )$uƒ  Mixture of Agents virtual provider: pick a preset, then persist it.

    Unlike the other provider flows there is no credential step â€” MoA is a
    virtual provider whose presets reference already-configured providers. We
    always show the preset list (even when there is only one) so the user sees
    what they are selecting, then print the full preset breakdown on selection.
    r   ©rw   rx   r�   )Únormalize_moa_configÚmoaÚpresetszCNo MoA presets configured. Run `hermes moa configure <name>` first.NÚdefault_presetr¬   r’   r«   r�   r   r§   u     â†� defaultz  (agg ú, z refs)rU   z"Select a Mixture of Agents preset:rZ   r[   r\   r]   r^   z  Choice [1-ú]: r˜   r‘   Tr•   r6   r—   z (via Mixture of Agents)) r1   rw   rx   rœ   rŽ   r�   Úhermes_cli.moa_configr»   rB   rC   rF   rd   rE   ÚkeysÚlenrG   Úindexrc   rV   rH   re   rf   rg   rh   ri   ÚmaxÚminÚintÚ
ValueErrorr   Úpopr¯   )r�   rˆ   rw   rx   rŽ   r�   r»   r¼   r½   ÚnamesÚdefault_nameÚrowsÚnr®   Ú	agg_labelÚ	ref_countÚsuffixÚdefault_idxrV   rk   rl   Úrowrn   ÚrawÚselected_namer¥   r£   r�   s                               r   Ú_model_flow_moarÕ   9  s‰  € ð HÐGÐGÐGÐGÐGÐGÐGØ:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ø:Ð:Ð:Ð:Ð:Ð:à
Ð
µJ¸vÅtÑ4LÔ4LÐT˜vŸzšz¨%Ñ0Ô0Ð0ÐRTÑ
UÔ
U€CØ�gŠg�iÑ Ô Ð& B€GØð ÝÐSÑTÔTÐTØˆå�—’‘”Ñ Ô €EØ—7’7Ð+Ñ,Ô,Ð8°°a´€Lð €DØð Ið IˆØ�qŒz�~Š~˜lÑ+Ô+Ð1¨rˆØCFÐN�s—w’w˜zÑ*Ô*Ð?Ð?¨S¯WªW°WÑ-=Ô-=Ð?Ð?Ð?ÈBˆ	Ý˜ œ
ŸšÐ'9Ñ:Ô:Ð@¸bÑAÔAˆ	Ø$%¨Ò$5Ð$5��¸2ˆØ�Š�qÐGÐG ÐGÐG¨iÐGÐG¸vÐGÐGÑHÔHÐHÐHà/;¸uÐ/DÐ/D�%—+’+˜lÑ+Ô+Ð+È!€KðØ:Ð:Ð:Ð:Ð:Ð:à#Ð#Ð$HÈ$ÐP[Ñ\Ô\ˆ‰øÝð ñ ð ÝÐ2Ñ3Ô3Ð3Ý  aÑ(Ô(ð 	,ð 	,‰FˆAˆsØ  1™u¨Ò4Ð4�U�U¸#ˆFÝÐ*�vÐ*Ð* Ð*Ð* SÐ*Ð*Ñ+Ô+Ð+Ð+ð	ÝÐ5¥s¨4¡y¤yÐ5Ð5Ð5Ñ6Ô6×<Ò<Ñ>Ô>ˆCˆCøÝ!¥8Ð,ð 	ð 	ð 	Ý�,ÑÔÐØˆFˆFˆFð	øøøð ð 	ØˆCˆCðÝ˜!�S¥ T¡¤¨Q¡µ°C±´¸1±Ñ=Ô=Ñ>Ô>��øÝð ð ð Ý�lÑ#Ô#Ð#Ø���ðøøøøøðøøøð& €{�c˜A’g�gÝˆlÑÔÐØˆà˜#”J€MØ�]Ô#€Fà
ˆ+‰-Œ-€CØ�GŠG�GÑÔ€EÝ�e�TÑ"Ô"ð Ø&+Ð3�˜EÐ"Ð"°ˆØˆˆG‰Ø$€Eˆ)ÑØ€Eˆ*Ñõ
 % U¸4Ð@Ñ@Ô@Ð@Ø	‡I‚Iˆj˜$ÑÔÐØ€K�ÑÔÐØÐ�}Ñ%Ô%Ð%ØÐÑÔÐå	�G„G€GÝ	Ð
J =Ð
JÐ
JÐ
JÑKÔKÐKÝ�m VÑ,Ô,Ð,Ð,Ð,s[   Å9F ÆAJ(Ç$2HÈJ(È H<È7J(È;H<È<J(É>JÊJ(ÊJ"ÊJ(Ê!J"Ê"J(Ê'J(c                ó¬  — ddl m}m}m}m}m}m}m}	m}
m	} ddl
m}m}m}m} ddlm}  |d¦  «        }|r|                     d¦  «        �sQt%          d¦  «         t%          ¦   «          	 t'          j        t+          |dd	¦  «        t+          |d
d	¦  «        t+          |dd	¦  «        t+          |dd	¦  «        t-          t+          |dd¦  «        ¦  «        t+          |dd	¦  «        pdt+          |dd	¦  «        t-          t+          |dd¦  «        ¦  «        ¬¦  «        } |
||d         ¦  «         	  |¦   «         pi } ||¦  «         n# t.          $ r Y nw xY wnE# t0          $ r t%          d¦  «         Y d	S t.          $ r}t%          d|› �¦  «         Y d	}~d	S d	}~ww xY wd	S ddlm}m}m}m}m}m}  |¦   «         }|st%          d¦  «         d	S 	  |¦   «         }ní# t.          $ rà}tA          ||¦  «        o|j!        }tA          ||¦  «        r |	|¦  «        ntE          |¦  «        }|r€t%          d|› �¦  «         t%          d¦  «         	 t'          j        d	d	d	d	ddd	d¬¦  «        } |
||d         ¦  «         n)# t.          $ r}t%          d|› �¦  «         Y d	}~nd	}~ww xY wY d	}~d	S t%          d|› �¦  «         Y d	}~d	S d	}~ww xY w |d¦  «        }  |d¬¦  «        }!|!s"	  |d¬¦  «        }"|"r|"}n# t.          $ r Y nw xY wd}#	  |d¦  «        }$|$r|$                     d d¦  «        }#n# t.          $ r Y nw xY wg }%d}&|!rY	 dd!l#m$}'m%}(  |(d¬¦  «        }) |'|)d"¬#¦  «        pd}&n# t.          $ r d}&Y nw xY w ||| |#¦  «        \  }}  ||| d¬$¦  «        \  }}%n ||| |#¦  «        \  }} |s|%st%          d%¦  «         d	S |!rG|sEt%          d&¦  «         |%r2dd'l m&}* |#p|* '                    d(¦  «        }+t%          |&pd)|+› d*�¦  «         d	S t%          d+tQ          |¦  «        › d,�¦  «          |||| |%|#|&d|                     d-d¦  «        |                     d.d¦  «        ¬/¦	  «	        },|,�rd ||,¦  «         |                     d-d¦  «        }- |d|-¦  «          |¦   «         } |                      d0¦  «        }.tA          |.tR          ¦  «        rtS          |.¦  «        }/nBtA          |.tD          ¦  «        r+|. *                    ¦   «         rd1|. *                    ¦   «         i}/ni }/d|/d2<   |,|/d1<   |-r-|- *                    ¦   «         r|- '                    d(¦  «        |/d-<   n|/ +                    d-d	¦  «         tY          |/¦  «         |/| d0<    |d3¦  «        r |d3d¦  «          |d4d¦  «          || ¦  «         t%          d5|,› d6�¦  «          || ¦  «         d	S t%          d7¦  «         d	S )8z8Nous Portal provider: ensure logged in, then pick model.r   )	Úget_provider_auth_staterv   rw   Ú_update_config_for_providerÚ resolve_nous_runtime_credentialsÚ	AuthErrorÚformat_auth_errorÚ_login_nousr³   )r´   rŽ   r�   Úsave_env_value)Úprompt_enable_tool_gatewayÚnousÚaccess_tokenz.Not logged into Nous Portal. Starting login...Ú
portal_urlNÚinference_urlÚ	client_idÚscopeÚ
no_browserFÚtimeoutç      .@Ú	ca_bundleÚinsecure)rá   râ   rã   rä   rå   ræ   rè   ré   úLogin cancelled or failed.úLogin failed: )Úget_curated_nous_model_idsr„   Úcheck_nous_free_tierÚpartition_nous_models_by_tierÚ&union_with_portal_free_recommendationsÚ&union_with_portal_paid_recommendationsz,No curated models available for Nous Portal.zSession expired: z&Re-authenticating with Nous Portal...
zRe-login failed: zCould not verify credentials: T)Úforce_freshr…   r   Úportal_base_url)Ú&format_nous_portal_entitlement_messageÚget_nous_portal_account_infozpaid Nous models)Ú
capability)Ú	free_tierz4No models available for Nous Portal after filtering.z#No free models currently available.)ÚDEFAULT_NOUS_PORTAL_URLú/zUpgrade at z to access paid models.zShowing õ=    curated models â€” use "Enter custom model name" for others.r6   r{   )rˆ   r‰   Úunavailable_modelsrá   Úunavailable_messagerŠ   r‹   rŒ   r�   r‘   r’   ÚOPENAI_BASE_URLÚOPENAI_API_KEYr—   z (via Nous Portal)r˜   )-r1   r×   rv   rw   rØ   rÙ   rÚ   rÛ   rÜ   r³   rœ   r´   rŽ   r�   rÝ   Úhermes_cli.nous_subscriptionrÞ   rF   rd   ÚargparseÚ	NamespaceÚgetattrr   rH   Ú
SystemExitr›   rì   r„   rí   rî   rï   rð   rB   Úrelogin_requiredr   Úhermes_cli.nous_accountró   rô   r÷   ÚrstriprÃ   rC   rg   rÉ   r   )0r�   rˆ   Úargsr×   rv   rw   rØ   rÙ   rÚ   rÛ   rÜ   r³   r´   rŽ   r�   rÝ   rÞ   ÚstateÚ	mock_argsÚ
_refreshedÚexcrì   r„   rí   rî   rï   rð   rƒ   ÚcredsÚreloginÚmsgÚ	login_excr‰   rö   Úrefreshed_credsÚ_nous_portal_urlÚ_nous_staterú   rû   ró   rô   Ú_account_infor÷   Ú_urlr¢   râ   Úcurrent_model_cfgÚ	model_cfgs0                                                   r   Ú_model_flow_nousr  Ž  s=	  € ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ðð ð ð ð ð ð ð ð ð ð ð ð HÐGÐGÐGÐGÐGà#Ð# FÑ+Ô+€EØð ˜Ÿ	š	 .Ñ1Ô1ñ ÝÐ>Ñ?Ô?Ð?Ý‰Œˆð	Ý Ô*Ý" 4¨°tÑ<Ô<Ý% d¨O¸TÑBÔBÝ! $¨°TÑ:Ô:Ý˜d G¨TÑ2Ô2Ý¥¨¨l¸EÑ BÔ BÑCÔCÝ  i°Ñ6Ô6Ð>¸$Ý! $¨°TÑ:Ô:Ý�g d¨J¸Ñ>Ô>Ñ?Ô?ð	ñ 	ô 	ˆIð ˆK˜	Ð#4°VÔ#<Ñ=Ô=Ð=ðØ(˜[™]œ]Ð0¨b�
Ø*Ð*¨:Ñ6Ô6Ð6Ð6øÝð ð ð Ø�ðøøøøøåð 	ð 	ð 	ÝÐ.Ñ/Ô/Ð/ØˆFˆFÝð 	ð 	ð 	ÝÐ( 3Ð(Ð(Ñ)Ô)Ð)ØˆFˆFˆFˆFˆFøøøøð	øøøð 	ˆð
ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð +Ð*Ñ,Ô,€IØð ÝÐ<Ñ=Ô=Ð=ØˆðØ0Ð0Ñ2Ô2ˆˆøÝð ð ð Ý˜S )Ñ,Ô,ÐE°Ô1EˆÝ(2°3¸	Ñ(BÔ(BÐPÐÐ Ñ$Ô$Ð$ÍÈCÉÌˆØð 	ÝÐ+ cÐ+Ð+Ñ,Ô,Ð,ÝÐ;Ñ<Ô<Ð<ð7Ý$Ô.Ø#Ø"&Ø"ØØ$Ø Ø"Ø"ð	ñ 	ô 	�	ð �˜IÐ'8¸Ô'@ÑAÔAÐAÐAøÝð 7ð 7ð 7ÝÐ5¨)Ð5Ð5Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6øøøøð7øøøàˆFˆFˆFˆFˆFÝÐ4¨sÐ4Ð4Ñ5Ô5Ð5Øˆˆˆˆˆøøøøð-øøøð2 'Ð& vÑ.Ô.€Gð %Ð$°Ð6Ñ6Ô6€IØð 
ð		Ø>Ð>Ø"ðñ ô ˆOð ð (Ø'�øøÝð 	ð 	ð 	ð ˆDð	øøøð ÐðØ-Ð-¨fÑ5Ô5ˆØð 	FØ*ŸšÐ/@À"ÑEÔEÐøøÝð ð ð Øˆðøøøð %'ÐØÐØð 
ð	%ðð ð ð ð ð ð ð ð
 9Ð8ÀTÐJÑJÔJˆMà6Ð6Ø!Ø1ðñ ô ð ð ð  Ðøõ ð 	%ð 	%ð 	%Ø"$ÐÐÐð	%øøøàCÐCØ�wÐ 0ñ
ô 
Ñˆ	�7ð )FÐ(EØ�w¨$ð)
ñ )
ô )
Ñ%ˆ	Ð%Ð%ð DÐCØ�wÐ 0ñ
ô 
Ñˆ	�7ð ð Ð/ð ÝÐDÑEÔEÐEØˆàð ˜ð ÝÐ3Ñ4Ô4Ð4Øð 	VØ?Ð?Ð?Ð?Ð?Ð?à$Ð?Ð(?×GÒGÈÑLÔLˆDÝÐ%ÐTÐ)T°tÐ)TÐ)TÐ)TÑUÔUÐUØˆå	Ø`•3�y‘>”>Ð`Ð`Ð`ñô ð ð 'Ð&ØØ#ØØ-Ø#Ø/ØØŸš :¨rÑ2Ô2ØŸ	š	 )¨RÑ0Ô0ð
ñ 
ô 
€Hð ñ  ØÐ˜8Ñ$Ô$Ð$àŸ	š	 *¨bÑ1Ô1ˆØ#Ð# F¨MÑ:Ô:Ð:ð �‘”ˆØ"ŸJšJ wÑ/Ô/ÐÝÐ'­Ñ.Ô.ð 	ÝÐ.Ñ/Ô/ˆIˆIÝÐ)­3Ñ/Ô/ð 	Ð4E×4KÒ4KÑ4MÔ4Mð 	Ø"Ð$5×$;Ò$;Ñ$=Ô$=Ð>ˆIˆIàˆIØ &ˆ	�*ÑØ'ˆ	�)ÑØð 	,˜]×0Ò0Ñ2Ô2ð 	,Ø$1×$8Ò$8¸Ñ$=Ô$=ˆI�jÑ!Ð!à�MŠM˜* dÑ+Ô+Ð+Ý(¨Ñ3Ô3Ð3Ø#ˆˆw‰àˆ=Ð*Ñ+Ô+ð 	1ØˆNÐ,¨bÑ1Ô1Ð1ØˆNÐ+¨RÑ0Ô0Ð0Øˆ�FÑÔÐÝÐC xÐCÐCÐCÑDÔDÐDà"Ð" 6Ñ*Ô*Ð*Ð*Ð*åˆlÑÔÐÐÐsÂ   Á*CE Ä-E ÅE Å
EÅE ÅEÅE ÅFÅ2	FÅ;FÆFÇ
G Ç
K Ç A$J;É.I4É3J;É4
JÉ>JÊJ;ÊJÊJ;Ê#J;Ê;K ËK. Ë.
K;Ë:K;Ì#L% Ì%
L2Ì1L2Ì<#M  Í M/Í.M/c                ó,  — ddl m}m}m}m}m}m}m} ddlm	}	  |¦   «         }
|
 
                    d¦  «        r÷t          d¦  «         t          ¦   «          t          d¦  «        }|dk    r¼t          d¦  «         t          ¦   «          	 t          j        ¦   «         } |||d	         d
¬¦  «         nE# t          $ r t          d¦  «         Y dS t           $ r}t          d|› �¦  «         Y d}~dS d}~ww xY w |¦   «         }
|
 
                    d¦  «        st          d¦  «         dS n’|dk    rdS n‰t          d¦  «         t          ¦   «          	 t          j        ¦   «         } |||d	         ¦  «         nE# t          $ r t          d¦  «         Y dS t           $ r}t          d|› �¦  «         Y d}~dS d}~ww xY wd}	  |¦   «         }| 
                    d¦  «        r| 
                    d¦  «        }n# t           $ r Y nw xY w|s7	 ddl m}  |¦   «         }| 
                    d¦  «        }n# t           $ r Y nw xY w |	|¬¦  «        } |||d	||pd¬¦  «        }|r, ||¦  «          |d	|¦  «         t          d|› d�¦  «         dS t          d¦  «         dS )z9OpenAI Codex provider: ensure logged in, then pick model.r   )Úget_codex_auth_statusrv   rw   rØ   Ú_login_openai_codexr³   ÚDEFAULT_CODEX_BASE_URL)Úget_codex_model_idsÚ	logged_inu     OpenAI Codex credentials: âœ“zOpenAI Codex credentials:rX   z&Starting a fresh OpenAI Codex login...zopenai-codexT©Úforce_new_loginrê   Nrë   zLogin failed.rY   z/Not logged into OpenAI Codex. Starting login...r{   )Ú!resolve_codex_runtime_credentials)rà   r   ©rˆ   rŠ   r‹   rŒ   r—   z (via OpenAI Codex)r˜   )r1   r  rv   rw   rØ   r  r³   r  Úhermes_cli.codex_modelsr  rF   rd   rp   rÿ   r   r  rH   r  )r�   rˆ   r  rv   rw   rØ   r  r³   r  r  Ústatusro   r  r
  Ú_codex_tokenÚ_codex_statusr  Ú_codex_credsÚcodex_modelsr¢   s                       r   Ú_model_flow_openai_codexr'  o  sø  € ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð <Ð;Ð;Ð;Ð;Ð;à"Ð"Ñ$Ô$€FØ‡z‚z�+ÑÔð &ÝÐ/Ñ0Ô0Ð0Ý‰ŒˆÝ0Ð1LÑMÔMˆà�XÒÐÝÐ:Ñ;Ô;Ð;Ý‰GŒGˆGðÝ$Ô.Ñ0Ô0�	Ø#Ð#ØØ% nÔ5Ø$(ðñ ô ð ð øõ
 ð ð ð ÝÐ2Ñ3Ô3Ð3Ø��Ýð ð ð ÝÐ, sÐ,Ð,Ñ-Ô-Ð-Ø�����øøøøðøøøð +Ð*Ñ,Ô,ˆFØ—:’:˜kÑ*Ô*ð Ý�oÑ&Ô&Ð&Ø�ðð �xÒÐØˆFð  õ 	Ð?Ñ@Ô@Ð@Ý‰Œˆð	Ý Ô*Ñ,Ô,ˆIØÐ 	Ð+<¸^Ô+LÑMÔMÐMÐMøÝð 	ð 	ð 	ÝÐ.Ñ/Ô/Ð/ØˆFˆFÝð 	ð 	ð 	ÝÐ( 3Ð(Ð(Ñ)Ô)Ð)ØˆFˆFˆFˆFˆFøøøøð	øøøð €LðØ-Ð-Ñ/Ô/ˆØ×Ò˜[Ñ)Ô)ð 	8Ø(×,Ò,¨YÑ7Ô7ˆLøøÝð ð ð Øˆðøøøàð ð	ØIÐIÐIÐIÐIÐIà<Ð<Ñ>Ô>ˆLØ'×+Ò+¨IÑ6Ô6ˆLˆLøÝð 	ð 	ð 	ØˆDð	øøøð 'Ð&°LÐAÑAÔA€Là&Ð&ØØ#Ø'Ø/Ø$Ð*¨ðñ ô €Hð ð ØÐ˜8Ñ$Ô$Ð$Ø#Ð# NÐ4JÑKÔKÐKÝÐD xÐDÐDÐDÑEÔEÐEÐEÐEåˆlÑÔÐÐÐs`   Â'B0 Â0C2Ã	C2ÃC-Ã-C2Å%E3 Å3F5Æ	F5ÆF0Æ0F5Æ;4G0 Ç0
G=Ç<G=È%H) È)
H6È5H6)r  c          	     ó¦  — ddl m}m}m}m}m}m}m}	m}
 ddl	m
}  |¦   «         }|                     d¦  «        rõt          d¦  «         t          ¦   «          t          d¦  «        }|dk    rºt          d¦  «         t          ¦   «          	 t          j        t!          t#          |d	d
¦  «        ¦  «        t#          |dd¦  «        ¬¦  «        } |||
d         d¬¦  «         �n# t$          $ r t          d¦  «         Y dS t&          $ r}t          d|› �¦  «         Y d}~dS d}~ww xY w|dk    rdS n·t          d¦  «         t          ¦   «          	 t          j        t!          t#          |d	d
¦  «        ¦  «        t#          |dd¦  «        ¬¦  «        } |||
d         ¦  «         nE# t$          $ r t          d¦  «         Y dS t&          $ r}t          d|› �¦  «         Y d}~dS d}~ww xY w|	}	  |¦   «         }|                     d¦  «        pd                     ¦   «                              d¦  «        p|}n# t&          $ r Y nw xY wt-          |                     d¦  «        p|                     d¦  «        pg ¦  «        } |||p|r|d         nd¬¦  «        }|r, ||¦  «          |d|¦  «         t          d|› d�¦  «         dS t          d¦  «         dS )zRxAI Grok OAuth (SuperGrok / Premium+) provider: ensure logged in, then pick model.r   )Úget_xai_oauth_auth_statusrv   rw   rØ   Ú%resolve_xai_oauth_runtime_credentialsÚ_login_xai_oauthÚDEFAULT_XAI_OAUTH_BASE_URLr³   ©Ú_PROVIDER_MODELSr  u8     xAI Grok OAuth (SuperGrok / Premium+) credentials: âœ“z2xAI Grok OAuth (SuperGrok / Premium+) credentials:rX   z#Starting a fresh xAI OAuth login...rå   Fræ   N)rå   ræ   z	xai-oauthTr  rê   rë   rY   zHNot logged into xAI Grok OAuth (SuperGrok / Premium+). Starting login...r6   r   rø   Úxaizgrok-build-0.1)rˆ   r—   u.    (via xAI Grok OAuth â€” SuperGrok / Premium+)r˜   )r1   r)  rv   rw   rØ   r*  r+  r,  r³   r›   r.  rF   rd   rp   rÿ   r   r   r  r  rH   rg   r  rE   )Ú_configrˆ   r  r)  rv   rw   rØ   r*  r+  r,  r³   r.  r"  ro   r  r
  r6   r  Úmodelsr¢   s                       r   Ú_model_flow_xai_oauthr2  Ç  sø  € ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 3Ð2Ð2Ð2Ð2Ð2à&Ð&Ñ(Ô(€FØ‡z‚z�+ÑÔð *ÝÐHÑIÔIÐIÝ‰ŒˆÝ0Ø@ñ
ô 
ˆð �XÒÐÝÐ7Ñ8Ô8Ð8Ý‰GŒGˆGðÝ$Ô.Ý#¥G¨D°,ÀÑ$FÔ$FÑGÔGÝ# D¨)°TÑ:Ô:ðñ ô �	ð !Ð ØØ% kÔ2Ø$(ðñ ô ð ñ øõ
 ð ð ð ÝÐ2Ñ3Ô3Ð3Ø��Ýð ð ð ÝÐ, sÐ,Ð,Ñ-Ô-Ð-Ø�����øøøøðøøøð �xÒÐØˆFð  õ 	ÐXÑYÔYÐYÝ‰Œˆð	Ý Ô*Ý¥¨¨l¸EÑ BÔ BÑCÔCÝ  i°Ñ6Ô6ðñ ô ˆIð Ð˜YÐ(9¸+Ô(FÑGÔGÐGÐGøÝð 	ð 	ð 	ÝÐ.Ñ/Ô/Ð/ØˆFˆFÝð 	ð 	ð 	ÝÐ( 3Ð(Ð(Ñ)Ô)Ð)ØˆFˆFˆFˆFˆFøøøøð	øøøð *€HðØ5Ð5Ñ7Ô7ˆØ—I’I˜jÑ)Ô)Ð/¨R×6Ò6Ñ8Ô8×?Ò?ÀÑDÔDÐPÈˆˆøÝð ð ð Øˆðøøøõ Ð"×&Ò& {Ñ3Ô3ÐXÐ7G×7KÒ7KÈEÑ7RÔ7RÐXÐVXÑYÔY€FØ&Ð& v¸]Ð=yÐ\bÐOxÈvÐVWÌyÈyÐhxÐzÑzÔz€HØð ØÐ˜8Ñ$Ô$Ð$Ø#Ð# K°Ñ:Ô:Ð:ÝÐ_ xÐ_Ð_Ð_Ñ`Ô`Ð`Ð`Ð`åˆlÑÔÐÐÐsQ   Â
AC! Ã!D#Ã=	D#ÄDÄD#ÅAF! Æ!G#Æ=	G#ÇGÇG#Ç)AH2 È2
H?È>H?c                óÈ  — ddl m} ddlm}m}m}m}m}m} ddl	m
}	  |¦   «         }
|
                     d¦  «        sƒt          d¦  «         t          d¦  «         |
                     d¦  «        }|rt          d	|› �¦  «         |
                     d
¦  «        r%t          d|
                     d
¦  «        › �¦  «         dS d}	  |d¬¦  «        } |	|d         |d         ¦  «        }n# t          $ r Y nw xY w|st          |¦  «        }|p|r|d         nd} |||d|¬¦  «        }|r, ||¦  «          |d|¦  «         t          d|› d�¦  «         dS t          d¦  «         dS )zAQwen OAuth provider: reuse local Qwen CLI login, then pick model.r   )Ú_DEFAULT_QWEN_PORTAL_MODELS)Úget_qwen_auth_statusÚ resolve_qwen_runtime_credentialsrv   rw   rØ   ÚDEFAULT_QWEN_BASE_URL©Úfetch_api_modelsr  zNot logged into Qwen CLI OAuth.zRun: qwen auth qwen-oauthÚ	auth_filezExpected credentials file: ÚerrorzError: NT)Úrefresh_if_expiringr{   r6   zqwen3-coder-plusz
qwen-oauth©rˆ   rŠ   r‹   r—   z (via Qwen OAuth)r˜   )r™   r4  r1   r5  r6  rv   rw   rØ   r7  r›   r9  rF   rd   rH   rE   )r0  rˆ   r4  r5  r6  rv   rw   rØ   r7  r9  r"  r:  r1  r  r‘   r¢   s                   r   Ú_model_flow_qwen_oauthr>    s5  € à;Ð;Ð;Ð;Ð;Ð;ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 3Ð2Ð2Ð2Ð2Ð2à!Ð!Ñ#Ô#€FØ�:Š:�kÑ"Ô"ð ÝÐ/Ñ0Ô0Ð0ÝÐ)Ñ*Ô*Ð*Ø—J’J˜{Ñ+Ô+ˆ	Øð 	=ÝÐ;°	Ð;Ð;Ñ<Ô<Ð<Ø�:Š:�gÑÔð 	3ÝÐ1˜FŸJšJ wÑ/Ô/Ð1Ð1Ñ2Ô2Ð2Øˆð €FðØ0Ð0ÀTÐJÑJÔJˆØ!Ð! %¨	Ô"2°E¸*Ô4EÑFÔFˆˆøÝð ð ð Øˆðøøøàð 3ÝÐ1Ñ2Ô2ˆàÐL¨VÐ K  q¤	 	Ð9K€GØ&Ð&ØØØ%Ø.ð	ñ ô €Hð ð ØÐ˜8Ñ$Ô$Ð$Ø#Ð# LÐ2GÑHÔHÐHÝÐB xÐBÐBÐBÑCÔCÐCÐCÐCåˆlÑÔÐÐÐs   Ã$C' Ã'
C4Ã3C4c           
     óB  — ddl m}m}m}m}m}m}m}	m}
m	}  |d¦  «        }|r| 
                    d¦  «        sËt          d¦  «         t          ¦   «          	 t          j        t          |dd¦  «        pdt          t          |d	d
¦  «        ¦  «        t          |dd¦  «        pd¬¦  «        } |
||d         ¦  «         nE# t           $ r t          d¦  «         Y dS t"          $ r}t          d|› �¦  «         Y d}~dS d}~ww xY w	  |¦   «         }n+# |$ r#}t           |	|¦  «        ¦  «         Y d}~dS d}~ww xY wddlm} | 
                    dg ¦  «        } |||d|d         ¬¦  «        }|sdS  ||¦  «          |d|d         ¦  «         t          d|› �¦  «         dS )z:MiniMax OAuth provider: ensure logged in, then pick model.r   )	r×   rv   rw   rØ   Ú)resolve_minimax_oauth_runtime_credentialsrÚ   rÛ   Ú_login_minimax_oauthr³   zminimax-oauthrà   z0Not logged into MiniMax. Starting OAuth login...ÚregionNÚglobalrå   Fræ   rç   )rB  rå   ræ   rê   rë   r-  r6   )rŠ   r‹   u   âœ“ Using MiniMax model: )r1   r×   rv   rw   rØ   r@  rÚ   rÛ   rA  r³   rF   rd   rÿ   r   r  r   r  rH   r›   r.  )r�   rˆ   r  r×   rv   rw   rØ   r@  rÚ   rÛ   rA  r³   r  r  r
  r  r.  rƒ   r¢   s                      r   Ú_model_flow_minimax_oauthrD  H  sš  € ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð $Ð# OÑ4Ô4€EØð ˜Ÿ	š	 .Ñ1Ô1ð ÝÐ@ÑAÔAÐAÝ‰Œˆð	Ý Ô*Ý˜t X¨tÑ4Ô4Ð@¸Ý¥¨¨l¸EÑ BÔ BÑCÔCÝ  i°Ñ6Ô6Ð>¸$ðñ ô ˆIð
 !Ð  Ð,=¸oÔ,NÑOÔOÐOÐOøÝð 	ð 	ð 	ÝÐ.Ñ/Ô/Ð/ØˆFˆFÝð 	ð 	ð 	ÝÐ( 3Ð(Ð(Ñ)Ô)Ð)ØˆFˆFˆFˆFˆFøøøøð	øøøðØ9Ð9Ñ;Ô;ˆˆøØð ð ð ÝÐÐ Ñ$Ô$Ñ%Ô%Ð%Øˆˆˆˆˆøøøøðøøøð 3Ð2Ð2Ð2Ð2Ð2à ×$Ò$ _°bÑ9Ô9€IØ&Ð&ØØØ(Ø˜zÔ*ð	ñ ô €Hð ð ØˆØÐ�xÑ Ô Ð ØÐ °°zÔ1BÑCÔCÐCÝ	Ð
3¨Ð
3Ð
3Ñ4Ô4Ð4Ð4Ð4s7   ÁA'B? Â?DÃ	DÃ$C<Ã<DÄ
D ÄD8ÄD3Ä3D8c           
     óª  ‡*— ddl m}m}m} ddlm}m} ddlm}m	}m
}m}	m}
 ddlm}  |d¦  «        pd} |d¦  «        pd}t          d	¦  «         |rt          d
|› �¦  «         |rt          d|dd…         › d�¦  «         t          ¦   «          	 t!          d|pd› d�¦  «                             ¦   «         } |d|r|dd…         dz   nd› d�¦  «                             ¦   «         }n'# t$          t&          f$ r t          d¦  «         Y dS w xY w|s|st          d¦  «         dS |p|}|                     d¦  «        st          d|› d�¦  «         dS |p|}|                     d¦  «                             ¦   «         Š*t/          ˆ*fd„dD ¦   «         ¦  «        }|rõ‰*                     d¦  «        sàt          ¦   «          t          d¦  «         t          d¦  «         t          d|                     d¦  «        › d�¦  «         	 t!          d ¦  «                             ¦   «                              ¦   «         }n# t$          t&          f$ r d!}Y nw xY w|d"v r.|                     d¦  «        dz   }|r|}t          d#|› �¦  «         t          ¦   «          dd$lm}  |||¦  «        }|                     d%¦  «        r;|                     d&¦  «        r&t          d'|d&         › d(�¦  «         |d&         }|r|}nÞ|                     d)¦  «        �Lt          d*|                     d+¦  «        › d,t9          |                     d)¦  «        pg ¦  «        › d-�¦  «         n}t          d.|                     d+¦  «        › d/�¦  «         |                     d0¦  «        rB|d0         }|                     d¦  «        rt          d1|› �¦  «         nt          d2|› �¦  «         |                      d3¦  «        }d}t;          |t<          ¦  «        r6t?          |                     d4¦  «        pd¦  «                             ¦   «         } |||¬5¦  «        }|rt          d6|› �¦  «         nt          d7¦  «         d}|                     d)¦  «        pg }	 t9          |¦  «        d8k    r{t          d9|d         › �¦  «         t!          d:¦  «                             ¦   «                              ¦   «         }|d"v r
|d         }�nt!          d;¦  «                             ¦   «         }nüt9          |¦  «        d8k    rÈt          d<¦  «         tA          |d8¦  «        D ]\  }}t          d=|› d>|› �¦  «         Œt!          d?t9          |¦  «        › d@�¦  «                             ¦   «         }| !                    ¦   «         rCd8tE          |¦  «        cxk    rt9          |¦  «        k    rn n|tE          |¦  «        d8z
           }n&|r|}n!t!          d;¦  «                             ¦   «         }t!          dA¦  «                             ¦   «         }  ||¦  «        }!t!          dB|!› d�¦  «                             ¦   «         p|!}"n'# t$          t&          f$ r t          d¦  «         Y dS w xY wd}#| rz	 tE          |  #                    dCd¦  «         #                    dDdE¦  «         #                    dFdE¦  «        ¦  «        }#|#dk    rd}#n%# tH          $ r t          dG| › dH�¦  «         d}#Y nw xY wd}$|rdtJ          j&         '                    |¦  «        }%|%j(        pd}&|%j)        r|&› dI|%j)        › �}& ||&¦  «        }$ |
|$|¦  «         t          dJ|$› �¦  «         |r½ ||¦  «          |¦   «         }'|'                     d3¦  «        }(t;          |(t<          ¦  «        s|(rdK|(ini }(|(|'d3<   dL|(dM<   ||(dN<   |$r	dO|$› dP�|(dQ<   |r||(d4<   n|( *                    d4d¦  «          |	|'¦  «          |¦   «          t=          |(¦  «        | d3<   t          dR|› dS|› dT�¦  «         n‡|s|r
 |¦   «          |                      d3¦  «        })t;          |)t<          ¦  «        s|)rdK|)ini })dL|)dM<   ||)dN<   |$r	dO|$› dP�|)dQ<   |r||)d4<   n|) *                    d4d¦  «         |)| d3<   t          dU¦  «          ||||pd|#|"||$¬V¦  «         tW          ||"¬W¦  «         dS )XzÃCustom endpoint: collect URL, API key, and model name.

    Automatically saves the endpoint to ``custom_providers`` in config.yaml
    so it appears in the provider menu on subsequent runs.
    r   )Ú_auto_provider_nameÚ!_prompt_custom_api_mode_selectionÚ_save_custom_providerrº   )Úcustom_endpoint_key_envr´   rŽ   r�   rÝ   ©Úmasked_secret_promptrü   r   rý   z0Custom OpenAI-compatible endpoint configuration:z  Current URL: z  Current key: Né   ú...zAPI base URL [ze.g. https://api.example.com/v1rÀ   ú	API key [Úoptionalú
Cancelled.zNo URL provided. Cancelled.©zhttp://úhttps://úInvalid URL: ú& (must start with http:// or https://)rø   c              3  ó    •K  — | ]}|‰v V — Œ	d S r!   © )r$   ÚhÚ
_url_lowers     €r   r'   z%_model_flow_custom.<locals>.<genexpr>´  s;   øè è € ð ð àð 	
ˆZˆðð ð ð ð ð r   )Ú	localhostz	127.0.0.1z0.0.0.0z:11434z:8080z:5000z/v1z+  Hint: Did you mean to add /v1 at the end?z@  Most local model servers (Ollama, vLLM, llama.cpp) require it.z  e.g. z  Add /v1? [Y/n]: rÍ   >   r   ÚyÚyesz  Updated URL: )Úprobe_api_modelsÚused_fallbackÚresolved_base_urlz)Warning: endpoint verification worked at zL/models, not the exact URL you entered. Saving the working base URL instead.r1  zVerified endpoint via Ú
probed_urlú (z model(s) visible)z,Warning: could not verify this endpoint via z. Hermes will still save it.Úsuggested_base_urlz8  If this server expects /v1 in the path, try base URL: z-  If /v1 should not be in the base URL, try: r�   r”   )Úcurrent_api_modez  API mode: z  API mode: auto-detectrZ   z  Detected model: z  Use this model? [Y/n]: z&Model name (e.g. gpt-4, llama-3-70b): z  Available models:rª   r^   z  Select model [1-z] or type name: z8Context length in tokens [leave blank for auto-detect]: zDisplay name [ú,ÚkÚ000ÚKzInvalid context length: u    â€” will auto-detect.Ú_z  API key saved to .env as r‘   Úcustomr’   r6   z${Ú}r{   r—   ú (via ú)zFEndpoint saved. Use `/model` in chat or `hermes model` to set a model.)Úcontext_lengthr~   r”   Úkey_envr4   ),r™   rF  rG  rH  r1   rw   rx   rœ   rI  r´   rŽ   r�   rÝ   Úhermes_cli.secret_promptrK  rd   rf   rg   rh   ri   r   r  r   ÚanyÚendswithr›   r\  rF   rÃ   rB   rC   r   re   ÚisdigitrÇ   ÚreplacerÈ   ÚurllibÚparseÚurlparseÚhostnameÚportrÉ   rQ   )+r�   rF  rG  rH  rw   rx   rI  r´   rŽ   r�   rÝ   rK  Úcurrent_urlÚcurrent_keyr6   r{   Úeffective_urlÚeffective_keyÚ_looks_localÚ_add_v1r\  ÚprobeÚ	suggestedr  rb  r”   Ú
model_nameÚdetected_modelsÚconfirmrl   ÚmÚpickÚcontext_length_strrË   Údisplay_namerl  Úcustom_key_envÚ_parsedÚ	_identityr£   r�   Ú_caller_modelrX  s+                                             @r   Ú_model_flow_customr‹  ~  sÑ  ø€ ð nÐmÐmÐmÐmÐmÐmÐmÐmÐmØGÐGÐGÐGÐGÐGÐGÐGðð ð ð ð ð ð ð ð ð ð ð ð ð ð >Ð=Ð=Ð=Ð=Ð=à�-Ð 1Ñ2Ô2Ð8°b€KØ�-Ð 0Ñ1Ô1Ð7°R€Kå	Ð
<Ñ=Ô=Ð=Øð /ÝÐ- Ð-Ð-Ñ.Ô.Ð.Øð 6ÝÐ4 ¨B¨Q¨B¤Ð4Ð4Ð4Ñ5Ô5Ð5Ý	�G„G€Gð	ÝØR˜[ÐMÐ,MÐRÐRÐRñ
ô 
ç
Š%‰'Œ'ð 	ð 'Ð&ØS°;ÐN˜ B Q Bœ¨%Ñ/Ð/ÀJÐSÐSÐSñ
ô 
ç
Š%‰'Œ'ð 	ˆøõ �xÐ(ð ð ð ÝˆnÑÔÐØˆˆðøøøð ð ˜Kð ÝÐ+Ñ,Ô,Ð,Øˆð Ð+ €MØ×#Ò#Ð$;Ñ<Ô<ð ÝÐS˜mÐSÐSÐSÑTÔTÐTØˆàÐ*˜{€Mð
 ×%Ò% cÑ*Ô*×0Ò0Ñ2Ô2€JÝð ð ð ð àRðñ ô ñ ô €Lð ð ˜J×/Ò/°Ñ6Ô6ð Ý‰ŒˆÝÐ;Ñ<Ô<Ð<ÝÐPÑQÔQÐQÝÐ6˜×,Ò,¨SÑ1Ô1Ð6Ð6Ð6Ñ7Ô7Ð7ð	ÝÐ0Ñ1Ô1×7Ò7Ñ9Ô9×?Ò?ÑAÔAˆGˆGøÝ!¥8Ð,ð 	ð 	ð 	ØˆGˆGˆGð	øøøàÐ&Ð&Ð&Ø)×0Ò0°Ñ5Ô5¸Ñ=ˆMØð )Ø(�ÝÐ3 MÐ3Ð3Ñ4Ô4Ð4Ý‰Œˆà2Ð2Ð2Ð2Ð2Ð2àÐ˜]¨MÑ:Ô:€EØ‡y‚y�Ñ!Ô!ð S e§i¢iÐ0CÑ&DÔ&Dð SÝðS¸Ð>QÔ8Rð Sð Sð Sñ	
ô 	
ð 	
ð Ð1Ô2ˆØð 	%Ø$ˆHøØ	�Š�8Ñ	Ô	Ð	(ÝðC U§Y¢Y¨|Ñ%<Ô%<ð Cð CÝ�E—I’I˜hÑ'Ô'Ð-¨2Ñ.Ô.ðCð Cð Cñ	
ô 	
ð 	
ð 	
õ
 	ð*¸5¿9º9À\Ñ;RÔ;Rð *ð *ð *ñ	
ô 	
ð 	
ð �9Š9Ð)Ñ*Ô*ð 	SØÐ2Ô3ˆIØ×!Ò! %Ñ(Ô(ð SÝØZÈyÐZÐZñô ð ð õ ÐQÀiÐQÐQÑRÔRÐRð Ÿ
š
 7Ñ+Ô+ÐØÐÝÐ#¥TÑ*Ô*ð PÝÐ0×4Ò4°ZÑ@Ô@ÐFÀBÑGÔG×MÒMÑOÔOÐØ0Ð0ØØ)ðñ ô €Hð ð )ÝÐ'˜XÐ'Ð'Ñ(Ô(Ð(Ð(åÐ'Ñ(Ô(Ð(ð €JØ—i’i Ñ)Ô)Ð/¨R€OðÝˆÑÔ 1Ò$Ð$ÝÐ; °qÔ'9Ð;Ð;Ñ<Ô<Ð<ÝÐ7Ñ8Ô8×>Ò>Ñ@Ô@×FÒFÑHÔHˆGØÐ*Ð*Ð*Ø,¨QÔ/�
‘
å"Ð#KÑLÔL×RÒRÑTÔT�
�
Ý�Ñ!Ô! AÒ%Ð%ÝÐ'Ñ(Ô(Ð(Ý! /°1Ñ5Ô5ð 'ð '‘��1Ý�o˜Q�o�o !�o�oÑ&Ô&Ð&Ð&ÝØK¥S¨Ñ%9Ô%9ÐKÐKÐKñô çŠe‰gŒgð ð �|Š|‰~Œ~ð " !¥s¨4¡y¤yÐ"HÐ"HÒ"HÐ"HµC¸Ñ4HÔ4HÒ"HÐ"HÐ"HÐ"HÐ"HØ,­S°©Y¬Y¸©]Ô;�
�
Øð "Ø!�
øåÐGÑHÔH×NÒNÑPÔPˆJå"ØFñ
ô 
ç
Š%‰'Œ'ð 	ð
 +Ð*¨=Ñ9Ô9ˆÝÐ?¨lÐ?Ð?Ð?Ñ@Ô@×FÒFÑHÔHÐXÈLˆˆøÝ�xÐ(ð ð ð ÝˆnÑÔÐØˆˆðøøøð €NØð "ð
	"Ý Ø"×*Ò*¨3°Ñ3Ô3ß’˜˜eÑ$Ô$ß’˜˜eÑ$Ô$ñô ˆNð
  Ò"Ð"Ø!%�øøÝð 	"ð 	"ð 	"ÝÐWÐ-?ÐWÐWÐWÑXÔXÐXØ!ˆNˆNˆNð	"øøøð €NØð >Ý”,×'Ò'¨Ñ6Ô6ˆØÔ$Ð*¨ˆ	ØŒ<ð 	6Ø$Ð5Ð5 w¤|Ð5Ð5ˆIØ0Ð0°Ñ;Ô;ˆØˆ�~ }Ñ5Ô5Ð5ÝÐ<¨NÐ<Ð<Ñ=Ô=Ð=àð ,XØÐ˜:Ñ&Ô&Ð&ð ˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ$ˆˆjÑØ)ˆˆjÑØð 	8Ø7 ^Ð7Ð7Ð7ˆE�)ÑØð 	(Ø (ˆE�*ÑÐà�IŠI�j $Ñ'Ô'Ð'Øˆ�CÑÔÐØÐÑÔÐõ ˜u™+œ+ˆˆw‰åÐI zÐIÐI¸ÐIÐIÐIÑJÔJÐJÐJàð 	"�wð 	"ØÐÑ!Ô!Ð!ð Ÿ
š
 7Ñ+Ô+ˆÝ˜-­Ñ.Ô.ð 	PØ:GÐO˜Y¨Ð6Ð6ÈRˆMØ$,ˆ�jÑ!Ø$1ˆ�jÑ!Øð 	@Ø'?¨^Ð'?Ð'?Ð'?ˆM˜)Ñ$Øð 	0Ø(0ˆM˜*Ñ%Ð%à×Ò˜j¨$Ñ/Ô/Ð/Ø'ˆˆw‰ÝÐVÑWÔWÐWð ÐØØØÐ�bØ%ØØØðñ ô ð õ 4ØØ"ðñ ô ð ð ð sK   ÂAC) Ã) DÄDÈ3H7 È7IÉIÑ=GY Ù Y?Ù>Y?ÚA[ Û[=Û<[=c                ób  — ddl m}m} ddlm}m}m}m} ddlm	} |  
                    di ¦  «        }	t          |	t          ¦  «        rÞ|	 
                    d¦  «        dk    rÅt          |	 
                    dd	¦  «        pd	¦  «        }
t          |	 
                    d
d	¦  «        pd	¦  «        }t          |	 
                    d¦  «        pd¦  «                             ¦   «                              ¦   «         pd}|	 
                    d¦  «        pi }t          |t          ¦  «        r|ni }nd	}
d	}d}i } |d¦  «        pd	}t!          ¦   «          t!          d¦  «         t!          d¦  «         t!          ¦   «          t!          d¦  «         t!          d¦  «         t!          d¦  «         t!          d¦  «         t!          ¦   «          |
rt!          d|
› �¦  «         |r|dk    rdnd}t!          d|› �¦  «         |dk    rt!          d¦  «         n|rt!          d|dd…         › d�¦  «         t!          ¦   «          	 |
pd }t#          d!|› d"�¦  «                             ¦   «         }n'# t$          t&          f$ r t!          d#¦  «         Y dS w xY w|p|
                     d$¦  «        }|st!          d%¦  «         dS |                     d&¦  «        st!          d'|› d(�¦  «         dS t!          ¦   «          t!          d)¦  «         t!          d*¦  «         t!          d+¦  «         t!          d,¦  «         t!          d-¦  «         	 |dk    rd.nd/}t#          d0|› d1�¦  «                             ¦   «         p|}n'# t$          t&          f$ r t!          d#¦  «         Y dS w xY w|d.k    }|rdnd}d	}i }d}d	}|rZ	 dd2lm}m}m}m}m}  nJ# t8          $ r=}!t!          ¦   «          t!          d3|!› �¦  «         t!          d4¦  «         d5}d}Y d}!~!nd}!~!ww xY w|�r	t!          ¦   «           | ¦   «         st!          d6¦  «         t!          d7¦  «         t          | 
                    d8¦  «        pd	¦  «                             ¦   «         }"|"p|}i }|"r|"|d8<   t!          ¦   «          t!          d9¦  «          ||¬:¦  «        }# ||#d;¬<¦  «        }$|$ 
                    d=¦  «        rG|$ 
                    d>¦  «        pg }%|%rd?                     |%¦  «        nd@}&t!          dA|&› dB|› dC�¦  «         nÅ|$ 
                    dD¦  «        pdE}'|$ 
                    dF¦  «        pdG}(t!          dH|'› �¦  «         t!          dI|(› �¦  «         	 t#          dJ¦  «                             ¦   «                              ¦   «         })n'# t$          t&          f$ r t!          d#¦  «         Y dS w xY w|)r|)dKvrt!          dL¦  «         dS 	  ||#¬M¦  «        }n¯# t<          $ r}!t!          dN|!› �¦  «         d}Y d}!~!nŒd}!~!ww xY wt!          ¦   «          ddOlm }* 	  |*dP|r|dd…         dQz   ndR› d"�¦  «                             ¦   «         }+n'# t$          t&          f$ r t!          d#¦  «         Y dS w xY w|+p|}|st!          dS¦  «         dS t!          ¦   «          t!          dT¦  «         | !                    |||¬U¦  «        },tE          |,j#        ¦  «        }-|,j$        pd	}.|.r^|.dk    rdnd}/t!          dV|/› �¦  «         |,j%        rt!          dW|,j%        › dC�¦  «         |-r t!          dXtM          |-¦  «        › dY�¦  «         nÔt!          dZ|,j%        › �¦  «         t!          ¦   «          t!          d[¦  «         t!          d\¦  «         t!          d]¦  «         t!          d^¦  «         t!          d_¦  «         	 |d`k    rd.nd/}0t#          da|0› d1�¦  «                             ¦   «         p|0}1n'# t$          t&          f$ r t!          d#¦  «         Y dS w xY w|1d.k    rd`nd}.t!          ¦   «          d	}2|-�rSt!          db¦  «         tO          |-ddc…         dd¬e¦  «        D ]\  }3}4t!          df|3dg›dh|4› �¦  «         ŒtM          |-¦  «        dck    r#t!          ditM          |-¦  «        dcz
  › dj�¦  «         t!          ¦   «          	 t#          dk|p|-d         › d"�¦  «                             ¦   «         }5n'# t$          t&          f$ r t!          d#¦  «         Y dS w xY w|5s|p|-d         }2n¼|5 (                    ¦   «         rQddtS          |5¦  «        cxk    r!tU          tM          |-¦  «        dc¦  «        k    rn n|-tS          |5¦  «        ddz
           }2nW|5}2nT	 t#          dl|pdm› d"�¦  «                             ¦   «         }6n'# t$          t&          f$ r t!          d#¦  «         Y dS w xY w|6p|}2|2st!          dn¦  «         dS | +                    |2|||¬U¦  «        }7|s |d|¦  «          |¦   «         }8|8 
                    d¦  «        }9t          |9t          ¦  «        s|9rdo|9ini }9|9|8d<   d|9d<   ||9d<   |.|9d
<   |2|9do<   ||9d<   tY          |9d5¬p¦  «         |r3i }:d:D ]};| 
                    |;¦  «        }<|<r|<|:|;<   Œ|:r|:|9d<   nd|9v r|9d= nd|9v r|9d= |7r|7|9dq<    ||8¦  «          |¦   «          t          |9¦  «        | d<    |dr¦  «        r |drd	¦  «          |ds¦  «        r |dsd	¦  «         |.dk    rdnd}/|rdtndu}=t!          ¦   «          t!          dv¦  «         t!          dw|› �¦  «         t!          dx|/› �¦  «         t!          dy|=› �¦  «         t!          dz|2› �¦  «         |7rt!          d{|7d|›d}�¦  «         nt!          d~¦  «         t!          ¦   «          dS )uk  Azure Foundry provider: configure endpoint, auth mode, API mode, and model.

    Azure Foundry supports both OpenAI-style (``/v1/chat/completions``) and
    Anthropic-style (``/v1/messages``) endpoints, and two authentication
    modes:

    * **API key** (default) â€” uses ``AZURE_FOUNDRY_API_KEY`` from .env.
    * **Microsoft Entra ID** â€” keyless, RBAC-based auth via the
      ``azure-identity`` SDK (Managed Identity / Workload Identity / az
      login / VS Code / azd / service principal env vars). Works on both
      OpenAI-style and Anthropic-style endpoints â€” Microsoft RBAC is
      per-resource and the same ``Azure AI User`` role grants
      both. For OpenAI-style the OpenAI SDK's native callable
      ``api_key=`` contract is used; for Anthropic-style an
      ``httpx.Client`` with a request event hook (built by
      :func:`agent.azure_identity_adapter.build_bearer_http_client`)
      mints a fresh JWT per request because the Anthropic SDK does not
      accept a callable ``auth_token`` natively.

    The wizard auto-detects the transport and available models when
    possible:

    * URLs ending in ``/anthropic`` â†’ Anthropic Messages API.
    * Successful ``GET <base>/models`` probe â†’ OpenAI-style + populates
      a picker with the returned deployment / model IDs.
    * Anthropic Messages probe fallback when ``/models`` fails.
    * Manual entry when every probe fails (private endpoints, etc.).

    Context lengths for the chosen model are resolved via the standard
    :func:`agent.model_metadata.get_model_context_length` chain
    (models.dev, provider metadata, hardcoded family fallbacks).
    r   rº   ©r´   rÝ   rŽ   r�   )Úazure_detectr�   r’   zazure-foundryr6   r   r”   Ú	auth_moder{   ÚentraÚAZURE_FOUNDRY_API_KEYzAzure Foundry Configurationz2==================================================z9Azure Foundry can host models with either OpenAI-style orz6Anthropic-style API endpoints.  Hermes will probe yourz6endpoint to auto-detect the transport and the deployedzmodels when possible.z  Current endpoint:  r“   zOpenAI-stylezAnthropic-stylez  Current API mode:  Úentra_idz1  Current auth mode: Microsoft Entra ID (keyless)z  Current auth mode: API key (NrL  z...)zhe.g. https://<resource>.openai.azure.com/openai/v1 or https://<resource>.services.ai.azure.com/anthropiczAPI endpoint URL [rÀ   rP  rø   z$No endpoint URL provided. Cancelled.rQ  rS  rT  zAuthentication:z=  1. API key                  (AZURE_FOUNDRY_API_KEY in .env)zO  2. Microsoft Entra ID       (managed identity / workload identity / az login)zY     Recommended by Microsoft. Works for both OpenAI-style and Anthropic-style endpoints.z?     Requires the 'Azure AI User' role on the Foundry resource.ra   r`   zAuthentication mode [1/2] (z): )ÚEntraIdentityConfigÚSCOPE_AI_AZURE_DEFAULTÚbuild_token_providerÚdescribe_active_credentialÚhas_azure_identity_installedu-   âš  Could not import azure-identity adapter: z  Falling back to API key auth.Fu6   â—� The 'azure-identity' package is not installed yet.z…  Hermes will install it now (the preflight below triggers the lazy-install). To skip lazy installs, run:  pip install azure-identityrä   u>   â—� Probing Microsoft Entra ID credential chain (up to 10s)...)rä   g      $@)r�   Útimeout_secondsÚokÚenv_sourcesr¿   zdefault chainu   âœ“ Entra ID token acquired (z, scope=rk  r;  zcredential chain exhaustedÚhintzqRun `az login`, attach a managed identity to this VM, or set AZURE_TENANT_ID/AZURE_CLIENT_ID/AZURE_CLIENT_SECRET.u   âš  z  Hint: z4Save Entra config anyway and validate later? [Y/n]: )rZ  r[  ú
Cancelled.)r�   u0   âš  Could not build token provider for probing: rJ  rN  rM  ÚrequiredzNo API key provided. Cancelled.u;   â—� Probing endpoint to auto-detect transport and models...)r{   Útoken_provideru   âœ“ Detected API transport: z    (u
   âœ“ Found z# deployed model(s) on this endpointu   âš  Auto-detection incomplete: z7Select the API format your Azure Foundry endpoint uses:z.  1. OpenAI-style  (POST /v1/chat/completions)z:     For: GPT models, Llama, Mistral, and most open modelsz)  2. Anthropic-style  (POST /v1/messages)z9     For: Claude models deployed via Anthropic API formatÚanthropic_messageszAPI format [1/2] (z"Available models on this endpoint:é   rZ   r¨   r]   z>2r^   z
  ... and z' more (type name manually if not shown)z+Pick by number, or type a deployment name [zModel / deployment name [ze.g. gpt-5.4, claude-sonnet-4-6z"No model name provided. Cancelled.r‘   r•   rl  rü   rý   zMicrosoft Entra ID (keyless)zAPI keyu   âœ“ Azure Foundry configured:z    Endpoint:       z    API mode:       z    Auth:           z    Model:          z    Context length: rc  z tokenszA    Context length: not auto-detected (will fall back at runtime))-r1   rw   rx   rœ   r´   rÝ   rŽ   r�   Ú
hermes_clirŽ  rF   rB   rC   r   rg   r   rd   rf   rh   ri   r  r   Úagent.azure_identity_adapterr“  r”  r•  r–  r—  ÚImportErrorÚjoinrH   rn  rK  ÚdetectrE   r1  r”   ÚreasonrÃ   re   rq  rÇ   rÆ   Úlookup_context_lengthr   )>r�   rˆ   rw   rx   r´   rÝ   rŽ   r�   rŽ  r  Úcurrent_base_urlrb  Úcurrent_auth_modeÚ
_cur_entraÚcurrent_entraÚcurrent_api_keyÚ_lblÚ_placeholderr6   rz  Ú_auth_defaultÚauth_choiceÚ	use_entraÚauth_mode_labelr{  Úentra_overridesrž  Úentra_scoper“  r”  r•  r–  r—  r
  Ú_persisted_scope_overrider0  Úinforš  ÚtagÚerrr›  ÚansrK  r{   Ú	detectionÚdiscovered_modelsr”   Ú
mode_labelÚdefault_choiceÚmode_choiceÚeffective_modelrl   r&   r„  r€  Úctx_lenr£   r�   Úclean_entraÚkeyÚvalÚ
auth_labels>                                                                 r   Ú_model_flow_azure_foundryrÅ  q  sÂ  € ðB HÐGÐGÐGÐGÐGÐGÐGðð ð ð ð ð ð ð ð ð ð ð ð (Ð'Ð'Ð'Ð'Ð'ð —
’
˜7 BÑ'Ô'€IÝ�)�TÑ"Ô"ð 
 y§}¢}°ZÑ'@Ô'@ÀOÒ'SÐ'SÝ˜yŸ}š}¨Z¸Ñ<Ô<ÐBÀÑCÔCÐÝ˜yŸ}š}¨Z¸Ñ<Ô<ÐBÀÑCÔCÐÝ 	§¢¨kÑ :Ô :Ð G¸iÑHÔH×NÒNÑPÔP×VÒVÑXÔXÐeÐ\eÐØ—]’] 7Ñ+Ô+Ð1¨rˆ
Ý&0°½TÑ&BÔ&BÐJ˜
˜
ÈˆˆàÐØÐØ%ÐØˆà#�mÐ$;Ñ<Ô<ÐBÀ€Oå	�G„G€GÝ	Ð
'Ñ(Ô(Ð(Ý	ˆ(�O„O€OÝ	�G„G€GÝ	Ð
EÑFÔFÐFÝ	Ð
BÑCÔCÐCÝ	Ð
BÑCÔCÐCÝ	Ð
!Ñ"Ô"Ð"Ý	�G„G€Gàð :ÝÐ8Ð&6Ð8Ð8Ñ9Ô9Ð9Øð .ð  Ð#5Ò5Ð5ð ˆNà"ð 	õ
 	Ð, dÐ,Ð,Ñ-Ô-Ð-Ø˜JÒ&Ð&ÝÐAÑBÔBÐBÐBØ	ð JÝÐH¨¸rÀ¸rÔ/BÐHÐHÐHÑIÔIÐIÝ	�G„G€Gðàð FðFð 	õ
 Ø2 Ð2Ð2Ð2ñ
ô 
ç
Š%‰'Œ'ð 	ˆøõ �xÐ(ð ð ð ÝˆnÑÔÐØˆˆðøøøð Ð1Ð!1×9Ò9¸#Ñ>Ô>€MØð ÝÐ4Ñ5Ô5Ð5ØˆØ×#Ò#Ð$;Ñ<Ô<ð ÝÐS˜mÐSÐSÐSÑTÔTÐTØˆõ 
�G„G€GÝ	Ð
ÑÔÐÝ	Ð
IÑJÔJÐJÝ	Ð
[Ñ\Ô\Ð\Ý	Ð
eÑfÔfÐfÝ	Ð
KÑLÔLÐLðØ0°JÒ>Ð>˜˜ÀCˆåÐB°ÐBÐBÐBÑCÔC×IÒIÑKÔKð Øð 	ˆøõ �xÐ(ð ð ð ÝˆnÑÔÐØˆˆðøøøð ˜sÒ"€IØ$-Ð<�j�j°9€Oð €MØ€OØ€NØ€Kàð (ð	(ðð ð ð ð ð ð ð ð ð ð ð ð ð ð øõ ð 	(ð 	(ð 	(Ý‰GŒGˆGÝÐGÀ#ÐGÐGÑHÔHÐHÝÐ3Ñ4Ô4Ð4ØˆIØ'ˆOˆOˆOˆOˆOˆOøøøøð	(øøøð ñ FÝ‰ŒˆØ+Ð+Ñ-Ô-ð 	ÝÐJÑKÔKÐKÝð3ñô ð õ %(¨×(9Ò(9¸'Ñ(BÔ(BÐ(HÀbÑ$IÔ$I×$OÒ$OÑ$QÔ$QÐ!Ø/ÐIÐ3IˆàˆØ$ð 	AØ'@ˆO˜GÑ$å‰ŒˆÝÐNÑOÔOÐOØ%Ð%Øð
ñ 
ô 
ˆð *Ð)°È$ÐOÑOÔOˆØ�8Š8�D‰>Œ>ð 	ØŸ(š( =Ñ1Ô1Ð7°RˆKØ,7ÐL�$—)’)˜KÑ(Ô(Ð(¸_ˆCÝÐM°#ÐMÐM¸{ÐMÐMÐMÑNÔNÐNÐNà—(’(˜7Ñ#Ô#ÐCÐ'CˆCØ—8’8˜FÑ#Ô#ð ðKð õ �,˜�,�,ÑÔÐÝÐ#˜TÐ#Ð#Ñ$Ô$Ð$ðÝÐRÑSÔS×YÒYÑ[Ô[×aÒaÑcÔc��øÝ%¥xÐ0ð ð ð Ý�nÑ%Ô%Ð%Ø��ðøøøð ð �s ,Ð.Ð.Ý�lÑ#Ô#Ð#Ø�ð
	"Ø1Ð1¸ÐAÑAÔAˆNˆNøÝð 	"ð 	"ð 	"ÝÐJÀSÐJÐJÑKÔKÐKØ!ˆNˆNˆNˆNˆNˆNøøøøð	"øøøõ 	‰ŒˆØAÐAÐAÐAÐAÐAð	Ø*Ð*Ø_¸?ÐZ˜O¨B¨Q¨BÔ/°%Ñ7Ð7ÐPZÐ_Ð_Ð_ñô çŠe‰gŒgð ˆGøõ "¥8Ð,ð 	ð 	ð 	Ý�.Ñ!Ô!Ð!ØˆFˆFð	øøøð  Ð2 ?ˆØð 	ÝÐ3Ñ4Ô4Ð4ØˆFõ 
�G„G€GÝ	Ð
GÑHÔHÐHØ×#Ò#ØØØ%ð $ñ ô €Iõ $(¨	Ô(8Ñ#9Ô#9ÐØÔ&Ð,¨"€Hàð Và&Ð*<Ò<Ð<ˆNˆNÐBSð 	õ 	Ð9¨ZÐ9Ð9Ñ:Ô:Ð:ØÔð 	/ÝÐ-˜)Ô*Ð-Ð-Ð-Ñ.Ô.Ð.Øð 	ÝØX�SÐ!2Ñ3Ô3ÐXÐXÐXñô ð øõ 	ÐB°	Ô0@ÐBÐBÑCÔCÐCÝ‰ŒˆÝÐGÑHÔHÐHÝÐ>Ñ?Ô?Ð?ÝÐJÑKÔKÐKÝÐ9Ñ:Ô:Ð:ÝÐIÑJÔJÐJð	Ø$4Ð8LÒ$LÐ$L˜S˜SÐRUˆNåÐ>¨>Ð>Ð>Ð>Ñ?Ô?×EÒEÑGÔGð "Ø!ð ˆKøõ "¥8Ð,ð 	ð 	ð 	Ý�.Ñ!Ô!Ð!ØˆFˆFð	øøøð ,7¸#Ò+=Ð+=Ð'Ð'ÐCUˆõ 
�G„G€GØ€OØñ 6ÝÐ2Ñ3Ô3Ð3ÝÐ 1°#°2°#Ô 6¸aÐ@Ñ@Ô@ð 	&ð 	&‰FˆAˆsÝÐ$�qÐ$Ð$Ð$˜sÐ$Ð$Ñ%Ô%Ð%Ð%ÝÐ Ñ!Ô! BÒ&Ð&ÝØa�SÐ!2Ñ3Ô3°bÑ8ÐaÐaÐañô ð õ 	‰Œˆð	ÝØh¸mÐ>cÐO`ÐabÔOcÐhÐhÐhñô çŠe‰gŒgð ˆDøõ "¥8Ð,ð 	ð 	ð 	Ý�.Ñ!Ô!Ð!ØˆFˆFð	øøøð ð 	#Ø+ÐCÐ/@ÀÔ/CˆOˆOØ�\Š\‰^Œ^ð 	# ¥S¨¡Y¤YÐ QÐ QÒ QÐ Qµ#µcÐ:KÑ6LÔ6LÈbÑ2QÔ2QÒ QÐ QÐ QÐ QÐ QØ/µ°D±	´	¸A±Ô>ˆOˆOà"ˆOˆOð	ÝØc¨MÐ,^Ð=^ÐcÐcÐcñô çŠe‰gŒgð ˆJøõ "¥8Ð,ð 	ð 	ð 	Ý�.Ñ!Ô!Ð!ØˆFˆFð	øøøð %Ð5¨ˆàð ÝÐ2Ñ3Ô3Ð3Øˆð ×0Ò0ØØØØ%ð	 1ñ ô €Gð ð ?ØˆÐ.°Ñ>Ô>Ð>à
ˆ+‰-Œ-€CØ�GŠG�GÑÔ€EÝ�e�TÑ"Ô"ð Ø&+Ð3�˜EÐ"Ð"°ˆØˆˆG‰à'€Eˆ*ÑØ%€Eˆ*ÑØ €Eˆ*ÑØ&€Eˆ)ÑØ(€Eˆ+ÑÝ$ U¸5ÐAÑAÔAÐAØð ð ˆØð 	'ð 	'ˆCØ!×%Ò% cÑ*Ô*ˆCØð 'Ø#&�˜CÑ øØð 	Ø(ˆE�'‰NˆNØ˜ÐÐØ�g�øà�eÐÐØ�g�Øð *Ø")ˆÐÑà€K�ÑÔÐØÐÑÔÐÝ˜5‘k”k€Fˆ7�Oð €}Ð&Ñ'Ô'ð .ØˆÐ(¨"Ñ-Ô-Ð-Ø€}Ð%Ñ&Ô&ð -ØˆÐ'¨Ñ,Ô,Ð,à#+Ð/AÒ#AÐ#A��ÐGX€Jà*3ÐBÐ&Ð&¸ð õ 
�G„G€GÝ	Ð
)Ñ*Ô*Ð*Ý	Ð
0 Ð
0Ð
0Ñ1Ô1Ð1Ý	Ð
- Ð
-Ð
-Ñ.Ô.Ð.Ý	Ð
- Ð
-Ð
-Ñ.Ô.Ð.Ý	Ð
2 Ð
2Ð
2Ñ3Ô3Ð3Øð SÝÐ7 WÐ7Ð7Ð7Ð7Ñ8Ô8Ð8Ð8åÐQÑRÔRÐRÝ	�G„G€G€G€Gs®   È1)I É I?É>I?Ì01M" Í" NÎNÎ N/ Î/
O6Î93O1Ï1O6Õ3V Ö V2Ö1V2×W ×
X×$W=×=XØ0Y Ù Y/Ù.Y/Þ,1_ ß `à`â+-c ã c=ã<c=å6'f æ gçgc           	     óJ  ‡)— ddl m}m}m} ddlm}m} ddlm}m	} ddl
m}	 |d         }
|d         }|                     dd	¦  «        }|                     d
d	¦  «        }|                     dd	¦  «        }|                     dd	¦  «        Š)|                     d¦  «        pd	                     ¦   «         }|s"|r t          j                             |d	¦  «        } |||¦  «        }|                     dd¦  «        }t!          |t"          ¦  «        r|                     ¦   «         dv}g }|                     di ¦  «        }t!          |t&          ¦  «        rd„ |D ¦   «         }n!t!          |t(          ¦  «        rd„ |D ¦   «         }t+          d|
› �¦  «         t+          d|› �¦  «         ‰)rt+          d‰)› �¦  «         t+          ¦   «          |s$|r"t+          dt-          |¦  «        › �¦  «         |}nNt+          d¦  «         ddi}|r||d<    |	||fi |¤Ž}|p|}|r$	 ddlm}  |||¦  «         n# t2          $ r Y nw xY w|�rûd}‰)r‰)|v r|                     ‰)¦  «        }t+          dt-          |¦  «        › d�¦  «         	 ddlm} ˆ)fd„|D ¦   «         d gz   } |d!|
› d"�||d#d¬$¦  «        }t+          ¦   «          |dk     s|t-          |¦  «        k    rt+          d%¦  «         d&S ||         }�n# t:          t<          t>          t@          j!        f$ �r) tE          |d'¦  «        D ]&\  }}|‰)k    rd(nd	}t+          d)|› d*|› |› �¦  «         Œ't+          d)t-          |¦  «        d'z   › d+�¦  «         t+          ¦   «          	 tG          d,t-          |¦  «        d'z   › d-�¦  «                             ¦   «         } | st+          d%¦  «         Y d&S tI          | ¦  «        d'z
  }|dk     s|t-          |¦  «        k    rt+          d%¦  «         Y d&S ||         }n.# tJ          tL          tN          f$ r t+          d.¦  «         Y Y d&S w xY wY nÑw xY w‰)r_t+          d/¦  «         	 tG          d0‰)› d-�¦  «                             ¦   «         p‰)}n“# tL          tN          f$ r t+          d.¦  «         Y d&S w xY wt+          d1¦  «         	 tG          d2¦  «                             ¦   «         }n'# tL          tN          f$ r t+          d.¦  «         Y d&S w xY w|st+          d3¦  «         d&S  ||¦  «          |¦   «         }!|!                     d¦  «        }"t!          |"t&          ¦  «        s|"rd4|"ini }"|"|!d<   |r@tQ          |
|¦  «        |"d5<   |" )                    dd&¦  «         |" )                    d
d&¦  «         nd6|"d5<    |||¦  «        |"d<   |r||"d
<   |                     dd	¦  «        }#|#r|#|"d<   n|" )                    dd&¦  «          ||!¦  «          |¦   «          |�rs |¦   «         }!|!                     d7¦  «        }$t!          |$t&          ¦  «        �r=|$                     |¦  «        }%t!          |%t&          ¦  «        �r||%d8<   t#          |                     d9d	¦  «        pd	¦  «                             ¦   «         }&t#          |                     d
d	¦  «        pd	¦  «                             ¦   «         }'tU          |&p|'¦  «        }(|(r>|r<t#          |%                     d
d	¦  «        pd	¦  «                             ¦   «         s||%d
<   |r<t#          |%                     dd	¦  «        pd	¦  «                             ¦   «         s||%d<   |$|!d7<    ||!¦  «         n |||||¬:¦  «         t+          d;|› �¦  «         t+          d<|
› d=|› d>�¦  «         d&S )?a  Handle a named custom provider from config.yaml custom_providers list.

    Always probes the endpoint's /models API to let the user pick a model.
    If a model was previously saved, it is pre-selected in the menu.
    Falls back to the saved model if probing fails.
    r   )Ú%_custom_provider_api_key_config_valueÚ&_custom_provider_base_url_config_valuerH  rº   r�   r8  r~   r6   r”   r   r{   rm  r�   Úprovider_keyÚdiscover_modelsT>   Ú0ÚnoÚfalser1  c                ón   — g | ]2}t          |¦  «                             ¦   «         ¯#t          |¦  «        ‘Œ3S rV  )r   rg   ©r$   rƒ  s     r   ú
<listcomp>z,_model_flow_named_custom.<locals>.<listcomp>  s1   € ÐJÐJÐJ¨½3¸q¹6¼6¿<º<¹>¼>ÐJ�S ™VœVÐJÐJÐJr   c                ó~   — g | ]:}t          |t          ¦  «        ¯|                     ¦   «         ¯+t          |¦  «        ‘Œ;S rV  )rB   r   rg   rÏ  s     r   rÐ  z,_model_flow_named_custom.<locals>.<listcomp>	  sM   € ð 
ð 
ð 
Ø­*°Q½Ñ*<Ô*<ð
ØABÇÂÁÄð
Ý�‰FŒFð
ð 
ð 
r   z  Provider: z  URL:      z  Current:  z2Using configured models (discover_models: false): zFetching available models...ræ   g       @)Ú!_save_discovered_models_to_configzFound z model(s):
)Úcurses_radiolistc                ó*   •— g | ]}|‰k    r|› d �n|‘ŒS )ú
 (current)rV  )r$   rƒ  Úsaved_models     €r   rÐ  z,_model_flow_named_custom.<locals>.<listcomp>8  s>   ø€ ð ð ð Ø@A A¨Ò$4Ð$4�1Ð Ð Ð Ð ¸!ðð ð r   rT   zSelect model from r«   éÿÿÿÿ)r¢   Úcancel_returnsÚ
searchablerœ  NrZ   rÕ  r]   r^   z. Cancelz
Choice [1-rÀ   rP  z%Could not fetch models from endpoint.zModel name [z@Could not fetch models from endpoint. Enter model name manually.úModel name: zNo model specified. Cancelled.r‘   r’   rh  Ú	providersÚdefault_modelÚapi_key_ref)r”   u   
âœ… Model set to: z   Provider: r`  rk  )+r™   rÇ  rÈ  rH  r1   rw   rx   rœ   rŽ   r�   r›   r9  rF   rg   ÚosÚenvironrB   r   r   rC   rE   rd   rÃ   Úhermes_cli.model_switchrÒ  rH   rÄ   Úhermes_cli.curses_uirÓ  r£  ÚNotImplementedErrorÚOSErrorÚ
subprocessÚSubprocessErrorre   rf   rÇ   rÈ   rh   ri   r   rÉ   r   )*r�   Úprovider_inforÇ  rÈ  rH  rw   rx   rŽ   r�   r9  r~   r6   r”   r{   rm  rÉ  Úconfig_api_keyÚdiscoverÚconfigured_modelsÚ
cfg_modelsr1  Úfetch_kwargsÚlive_modelsrÒ  rÑ   rÓ  Ú
menu_itemsrk   r€  rl   rƒ  rÐ   rÃ  r£   r�   Úcustom_api_modeÚproviders_cfgÚprovider_entryÚoriginal_api_key_refÚoriginal_api_keyÚhad_inline_api_keyrÖ  s*                                            @r   Ú_model_flow_named_customrô  á  sÿ	  ø€ ð Eð  Eð  Eð  Eð  Eð  Eð  Eð  Eð  Eð  EØGÐGÐGÐGÐGÐGÐGÐGØ:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ø2Ð2Ð2Ð2Ð2Ð2à˜Ô €DØ˜ZÔ(€HØ× Ò  ¨RÑ0Ô0€HØ×Ò 	¨2Ñ.Ô.€GØ×Ò 	¨2Ñ.Ô.€GØ×#Ò# G¨RÑ0Ô0€KØ!×%Ò% nÑ5Ô5Ð;¸×BÒBÑDÔD€Lð ð .�wð .Ý”*—.’. ¨"Ñ-Ô-ˆØ:Ð:¸=È'ÑRÔR€Nð × Ò Ð!2°DÑ9Ô9€HÝ�(�CÑ Ô ð @Ø—>’>Ñ#Ô#Ð+?Ð?ˆØ#%ÐØ×"Ò" 8¨RÑ0Ô0€JÝ�*�dÑ#Ô#ð 
ØJÐJ¨ZÐJÑJÔJÐÐÝ	�J¥Ñ	%Ô	%ð 
ð
ð 
Ø&ð
ñ 
ô 
Ðõ 
Ð
˜Ð
Ð
Ñ Ô Ð Ý	Ð
#˜Ð
#Ð
#Ñ$Ô$Ð$Øð ,ÝÐ*˜[Ð*Ð*Ñ+Ô+Ð+Ý	�G„G€Gàð Ð)ð åÐ[Å3ÐGXÑCYÔCYÐ[Ð[Ñ\Ô\Ð\Ø"ˆˆåÐ,Ñ-Ô-Ð-Ø! 3Ð'ˆØð 	0Ø'/ˆL˜Ñ$Ø&Ð& w°ÐIÐI¸LÐIÐIˆð Ð1Ð 1ˆð ð 	ððð ð ð ð ð ð 2Ð1°(¸KÑHÔHÐHÐHøÝð ð ð Ø�ðøøøð ñ ;ØˆØð 	4˜;¨&Ð0Ð0Ø Ÿ,š, {Ñ3Ô3ˆKåÐ0•s˜6‘{”{Ð0Ð0Ð0Ñ1Ô1Ð1ð$	Ø=Ð=Ð=Ð=Ð=Ð=ðð ð ð ØEKðñ ô à�
ñˆJð #Ð"Ø, TÐ,Ð,Ð,ØØ$Ø!Øðñ ô ˆCõ ‰GŒGˆGØ�QŠwˆw˜#¥ V¡¤Ò,Ð,Ý�lÑ#Ô#Ð#Ø�Ø œˆJ‰JøÝÕ0µ'½:Ô;UÐVð 	ñ 	ð 	Ý! &¨!Ñ,Ô,ð -ð -‘��1Ø)*¨kÒ)9Ð)9˜˜¸r�ÝÐ+˜1Ð+Ð+ Ð+ 6Ð+Ð+Ñ,Ô,Ð,Ð,ÝÐ0•s˜6‘{”{ Q‘Ð0Ð0Ð0Ñ1Ô1Ð1Ý‰GŒGˆGðÝÐ=­¨V©¬°q©Ð=Ð=Ð=Ñ>Ô>×DÒDÑFÔF�Øð Ý˜,Ñ'Ô'Ð'Ø�F�FÝ˜#‘h”h ‘l�Ø˜’7�7˜c¥S¨¡[¤[Ò0Ð0Ý˜,Ñ'Ô'Ð'Ø�F�FØ# Cœ[�
�
øÝÕ 1µ8Ð<ð ð ð Ý�nÑ%Ô%Ð%Ø���ðøøøð �
ð	øøøð& 
ð ÝÐ5Ñ6Ô6Ð6ð	ÝÐ>¨kÐ>Ð>Ð>Ñ?Ô?×EÒEÑGÔGÐVÈ;ˆJˆJøÝ!¥8Ð,ð 	ð 	ð 	Ý�.Ñ!Ô!Ð!ØˆFˆFð	øøøõ 	ÐPÑQÔQÐQð	Ý˜~Ñ.Ô.×4Ò4Ñ6Ô6ˆJˆJøÝ!¥8Ð,ð 	ð 	ð 	Ý�.Ñ!Ô!Ð!ØˆFˆFð	øøøð ð 	ÝÐ2Ñ3Ô3Ð3ØˆFð Ð�zÑ"Ô"Ð"à
ˆ+‰-Œ-€CØ�GŠG�GÑÔ€EÝ�e�TÑ"Ô"ð Ø&+Ð3�˜EÐ"Ð"°ˆØˆˆG‰Øð 
.Ý0°°|ÑDÔDˆˆjÑØ�	Š	�*˜dÑ#Ô#Ð#Ø�	Š	�)˜TÑ"Ô"Ð"Ð"à$ˆˆjÑØBÐBØ˜8ñ
ô 
ˆˆjÑð ð 	.Ø-ˆE�)Ñà#×'Ò'¨
°BÑ7Ô7€OØð $Ø+ˆˆjÑÐà�	Š	�*˜dÑ#Ô#Ð#Ø€K�ÑÔÐØÐÑÔÐð ñ  WØˆk‰mŒmˆØŸš Ñ,Ô,ˆÝ�m¥TÑ*Ô*ñ 	!Ø*×.Ò.¨|Ñ<Ô<ˆNÝ˜.­$Ñ/Ô/ñ !Ø2<�˜Ñ/õ (+Ø!×%Ò% m°RÑ8Ô8Ð>¸Bñ(ô (ç’%‘'”'ð %õ $' }×'8Ò'8¸ÀBÑ'GÔ'GÐ'MÈ2Ñ#NÔ#N×#TÒ#TÑ#VÔ#VÐ Ý%)Ð*>Ð*RÐBRÑ%SÔ%SÐ"à&ð?à&ð?õ   × 2Ò 2°9¸bÑ AÔ AÐ GÀRÑHÔH×NÒNÑPÔPð?ð
 1?�N 9Ñ-Øð 8¥3 ~×'9Ò'9¸)ÀRÑ'HÔ'HÐ'NÈBÑ#OÔ#O×#UÒ#UÑ#WÔ#Wð 8Ø07�N 9Ñ-Ø#0��KÑ Ø�˜CÑ Ô Ð øð 	Ð˜h¨¸
ÈXÐVÑVÔVÐVå	Ð
- Ð
-Ð
-Ñ.Ô.Ð.Ý	Ð
-˜$Ð
-Ð
- (Ð
-Ð
-Ð
-Ñ.Ô.Ð.Ð.Ð.s�   ÈH) È)
H6È5H6É:A"K( ËK( Ë(BP4Í4APÎ=:PÏ:PÐP4Ð&P.Ð)P4Ð-P.Ð.P4Ð3P4Ñ	'Q1 Ñ1 RÒRÒ(!S
 Ó
 S.Ó-S.c                ó€  — ddl m}m}m} ddlm}m}m}m}m	}	 ddl
m}
m}m} ddlm}m}m}m}m}m} d}||         } |	|¦  «        }|                     dd¦  «        }|                     d	d¦  «        }|�sœt-          d
¦  «         t-          ¦   «          t-          d¦  «         t-          d¦  «         t-          d¦  «         t-          d¦  «         t-          d¦  «         t-          ¦   «          t-          d¦  «         t-          d¦  «         t-          d¦  «         t-          d¦  «         t-          ¦   «          	 t/          d¦  «                             ¦   «         }n&# t2          t4          f$ r t-          ¦   «          Y dS w xY w|dk    rz	 ddlm}  |¦   «         }|r* |
d|¦  «         t-          d¦  «         t-          ¦   «          nt-          d¦  «         dS �n# t:          $ r}t-          d|› �¦  «         Y d}~dS d}~ww xY w|dk    rÄddlm} 	  |d¦  «                             ¦   «         }n&# t2          t4          f$ r t-          ¦   «          Y dS w xY w|st-          d¦  «         dS 	 dd lm }  ||¦  «        \  }} |st-          d!| › �¦  «         dS n# tB          $ r Y nw xY w |
d|¦  «         t-          d"¦  «         t-          ¦   «          nt-          d¦  «         dS  |	|¦  «        }|                     dd¦  «        }|                     d	d¦  «        }ni|d#v r2dd$l"m#}!  |!|¦  «        }"t-          d%|dd&…         › d'|› |"› d(�¦  «         n%|d)k    rt-          d*¦  «         nt-          d+¦  «         t-          ¦   «          |j$        }# ||¦  «        }$|$rd,„ |$D ¦   «         n |||#¦  «        }% |||$|¬-¦  «        p|}&|%r-d.„ |%D ¦   «         }'t-          d/tK          |'¦  «        › d0�¦  «         n6|                     |g ¦  «        }'|'rt-          d1¦  «         t-          d2¦  «         |'r ||'|&||#|¬3¦  «        }(n<	 t/          d4¦  «                             ¦   «         }(n# t2          t4          f$ r d}(Y nw xY w|(�r@ ||(|$|¬-¦  «        p|(}( |¦   «         }) ||)¦  «        }* ||(|$|¬-¦  «        }+d},|+r t-          d5|(› d6�¦  «          ||+|*¬7¦  «        }, ||(¦  «          |¦   «         }-|-                     d8¦  «        }.tM          |.tN          ¦  «        s|.rd9|.ini }.|.|-d8<   ||.d:<   |#|.d;<    ||(|$|¬-¦  «        |.d<<   tQ          |.d=¬>¦  «         |,� ||-|,¦  «          ||-¦  «          |¦   «          t-          d?|(› d@|j)        › d(�¦  «         |+r-|,dAk    rt-          dB¦  «         dS |,rt-          dC|,› �¦  «         dS dS dS t-          dD¦  «         dS )EzAGitHub Copilot flow using env vars, gh CLI, or OAuth device code.r   )Ú_current_reasoning_effortÚ"_prompt_reasoning_effort_selectionÚ_set_reasoning_effort)r³   rv   rw   rx   Ú$resolve_api_key_provider_credentials)rÝ   rŽ   r�   )r.  r9  Úfetch_github_model_catalogÚgithub_model_reasoning_effortsÚcopilot_model_api_modeÚnormalize_copilot_model_idÚcopilotr{   r   r=   z.No GitHub token configured for GitHub Copilot.z  Supported token types:uL       â†’ OAuth token (gho_*)          via `copilot login` or device code flowuI       â†’ Fine-grained PAT (github_pat_*)  with Copilot Requests permissionu=       â†’ GitHub App token (ghu_*)     via environment variableuA       âœ— Classic PAT (ghp_*)          NOT supported by Copilot APIz
  Options:z1    1. Login with GitHub (OAuth device code flow)z    2. Enter a token manuallyú    3. Cancelz  Choice [1-3]: Nr`   )Úcopilot_device_code_loginÚCOPILOT_GITHUB_TOKENz  Copilot token saved.z  Login cancelled or failed.z  Login failed: ra   rJ  z   Token (COPILOT_GITHUB_TOKEN): ú  Cancelled.)Úvalidate_copilot_tokenu     âœ— z  Token saved.>   ÚGH_TOKENÚGITHUB_TOKEN©Úformat_secret_source_suffixz  GitHub token: rL  u	   ... âœ“ (rk  zgh auth tokenu*     GitHub token: âœ“ (from `gh auth token`)u     GitHub token: âœ“c                ód   — g | ]-}|                      d ¦  «        ¯|                      d d¦  «        ‘Œ.S ©r?   r   ©rF   ©r$   Úitems     r   rÐ  z'_model_flow_copilot.<locals>.<listcomp>  s5   € ÐBÐBÐB °4·8²8¸D±>´>ÐBˆ�Š�$˜Ñ	Ô	ÐBÐBÐBr   ©Úcatalogr{   c                ó   — g | ]}|¯|‘ŒS rV  rV  )r$   r   s     r   rÐ  z'_model_flow_copilot.<locals>.<listcomp>)  s   € ÐGÐGÐG 8¸hÐG�hÐGÐGÐGr   ú  Found ú model(s) from GitHub CopilotõL     âš  Could not auto-detect models from GitHub Copilot â€” showing defaults.ú?    Use "Enter custom model name" if you do not see your model.r   rÚ  r]   z supports reasoning controls.)Úcurrent_effortr�   r‘   r’   r6   r”   Fr•   r—   rj  Únonez"Reasoning disabled for this model.zReasoning effort set to: r˜   )*r™   rö  r÷  rø  r1   r³   rv   rw   rx   rù  rœ   rÝ   rŽ   r�   r›   r.  r9  rú  rû  rü  rý  rF   rd   rf   rg   rh   ri   Úhermes_cli.copilot_authr   rH   rn  rK  r  r£  Úhermes_cli.env_loaderr  Úinference_base_urlrÃ   rB   rC   r   r~   )/r�   rˆ   rö  r÷  rø  r³   rv   rw   rx   rù  rÝ   rŽ   r�   r.  r9  rú  rû  rü  rý  r-   r2   r  r{   r=   ro   r   Útokenr
  rK  Únew_keyr  Úvalidr  r  Ú	bw_suffixÚeffective_baser  rì  Únormalized_current_modelÚ
model_listr¢   Úinitial_cfgr  Úreasoning_effortsÚselected_effortr£   r�   s/                                                  r   Ú_model_flow_copilotr#  ®  s·  € àtÐtÐtÐtÐtÐtÐtÐtÐtÐtðð ð ð ð ð ð ð ð ð ð ð ð ð ð KÐJÐJÐJÐJÐJÐJÐJÐJÐJðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð €KØ Ô,€Gà0Ð0°Ñ=Ô=€EØ�iŠi˜	 2Ñ&Ô&€GØ�YŠY�x Ñ$Ô$€Fàñ MÝÐ>Ñ?Ô?Ð?Ý‰ŒˆÝÐ(Ñ)Ô)Ð)ÝØZñ	
ô 	
ð 	
õ 	ÐYÑZÔZÐZÝÐMÑNÔNÐNÝÐQÑRÔRÐRÝ‰ŒˆÝˆlÑÔÐÝÐAÑBÔBÐBÝÐ-Ñ.Ô.Ð.ÝˆoÑÔÐÝ‰Œˆð	ÝÐ-Ñ.Ô.×4Ò4Ñ6Ô6ˆFˆFøÝ!¥8Ð,ð 	ð 	ð 	Ý‰GŒGˆGØˆFˆFð	øøøð �SŠ=ˆ=ðØMÐMÐMÐMÐMÐMà1Ð1Ñ3Ô3�Øð Ø"�NÐ#9¸5ÑAÔAÐAÝÐ2Ñ3Ô3Ð3Ý‘G”G�G�GåÐ8Ñ9Ô9Ð9Ø�Fñ øõ ð ð ð ÝÐ.¨Ð.Ð.Ñ/Ô/Ð/Ø�����øøøøðøøøð �sŠ]ˆ]ØEÐEÐEÐEÐEÐEðØ.Ð.Ð/QÑRÔR×XÒXÑZÔZ��øÝ%¥xÐ0ð ð ð Ý‘”�Ø��ðøøøð ð Ý�nÑ%Ô%Ð%Ø�ðØJÐJÐJÐJÐJÐJà3Ð3°GÑ<Ô<‘
��sØð Ý˜. 3˜.˜.Ñ)Ô)Ð)Ø�Fðøõ ð ð ð Ø�ðøøøàˆNÐ1°7Ñ;Ô;Ð;ÝÐ"Ñ#Ô#Ð#Ý‰GŒGˆGˆGå�.Ñ!Ô!Ð!ØˆFà4Ð4°[ÑAÔAˆØ—)’)˜I rÑ*Ô*ˆØ—’˜8 RÑ(Ô(ˆˆàÐ1Ð1Ð1ØIÐIÐIÐIÐIÐIØ3Ð3°FÑ;Ô;ˆIÝÐO W¨R¨a¨R¤[ÐOÐO¸6ÐOÀ9ÐOÐOÐOÑPÔPÐPÐPØ�Ò&Ð&ÝÐ>Ñ?Ô?Ð?Ð?åÐ'Ñ(Ô(Ð(Ý‰ŒˆàÔ/€Nà(Ð(¨Ñ1Ô1€Gð ð	7ÐBÐB¨ÐBÑBÔBÐBàÐ˜g ~Ñ6Ô6ð ð 	#Ð"ØØØð	
ñ 	
ô 	
ð 	ð
 ð ð ð 	UØGÐG¨{ÐGÑGÔGˆ
ÝÐG�˜Z™œÐGÐGÐGÑHÔHÐHÐHà%×)Ò)¨+°rÑ:Ô:ˆ
Øð 	UÝØ^ñô ð õ ÐSÑTÔTÐTàð Ø*Ð*ØØ2Ø(Ø+Ø#ð
ñ 
ô 
ˆˆð	Ý˜^Ñ,Ô,×2Ò2Ñ4Ô4ˆHˆHøÝ!¥8Ð,ð 	ð 	ð 	ØˆHˆHˆHð	øøøð ñ 2à&Ð&ØØØðñ ô ð ð
 ð 	ð "�k‘m”mˆØ2Ð2°;Ñ?Ô?ˆØ:Ð:ØØØð
ñ 
ô 
Ðð
 ˆØð 	ÝÐ>�xÐ>Ð>Ð>Ñ?Ô?Ð?Ø@Ð@Ø!°.ðñ ô ˆOð 	Ð˜8Ñ$Ô$Ð$àˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ'ˆˆjÑØ*ˆˆjÑØ2Ð2ØØØð
ñ 
ô 
ˆˆjÑõ
 	)¨¸uÐEÑEÔEÐEØÐ&Ø!Ð! # Ñ7Ô7Ð7Øˆ�CÑÔÐØÐÑÔÐåÐF xÐFÐF°w´|ÐFÐFÐFÑGÔGÐGØð 	EØ &Ò(Ð(ÝÐ:Ñ;Ô;Ð;Ð;Ð;Ø ð EÝÐC°/ÐCÐCÑDÔDÐDÐDÐDð		Eð 	EðEð Eõ 	ˆlÑÔÐÐÐsa   Ä8!E ÅE=Å<E=ÆAG Ç
G=Ç G8Ç8G=ÈH+ È+IÉIÉ%(J Ê
JÊJÐ1!Q ÑQ)Ñ(Q)c                ó  — ddl m}m}m}m}m}m}m} ddlm	}	m
}
m} ddlm}m} ~ d}||         } ||¦  «        }|                     d¦  «        p|                     d¦  «        pd}|                     d	¦  «        p|j        }t#          d
¦  «         t#          d¦  «         t#          d¦  «         t#          d|› �¦  «         t#          d|› �¦  «         t#          ¦   «          	  ||¦  «        }n9# t$          $ r,}t#          d|› �¦  «         t#          d¦  «         Y d}~dS d}~ww xY w|                     d	¦  «        p|}d}	  |d¦  «        }|                     dd¦  «        }n# t$          $ r Y nw xY w |
|¦  «        } ||||¬¦  «        p|}|r-d„ |D ¦   «         }t#          dt'          |¦  «        › d�¦  «         n6|	                     dg ¦  «        }|rt#          d¦  «         t#          d¦  «         |r ||||||¬¦  «        }n<	 t)          d¦  «                             ¦   «         }n# t,          t.          f$ r d}Y nw xY w|st#          d¦  «         dS  ||||¬¦  «        p|} ||¦  «          |¦   «         }|                     d¦  «        }t1          |t2          ¦  «        s|rd|ini }||d<   ||d<   ||d	<   d |d!<   t5          |d"¬#¦  «          ||¦  «          |¦   «          t#          d$|› d%|j        › d&�¦  «         dS )'z4GitHub Copilot ACP flow using the local Copilot CLI.r   )r³   rv   rw   rx   Ú$get_external_process_provider_statusrù  Ú-resolve_external_process_provider_credentials)r.  rú  rý  r�   zcopilot-acpÚresolved_commandÚcommandrþ  r6   z?  GitHub Copilot ACP delegates Hermes turns to `copilot --acp`.zB  Hermes currently starts its own ACP subprocess for each request.zH  Hermes uses your selected model as a hint for the Copilot ACP session.z  Command: z  Backend marker: u     âš  z[  Set HERMES_COPILOT_ACP_COMMAND or COPILOT_CLI_PATH if Copilot CLI is installed elsewhere.Nr   r{   r  c                ód   — g | ]-}|                      d ¦  «        ¯|                      d d¦  «        ‘Œ.S r	  r
  r  s     r   rÐ  z+_model_flow_copilot_acp.<locals>.<listcomp>¶  s5   € ÐOÐOÐO¨TÀÇÂÈÁÄÐO�d—h’h˜t RÑ(Ô(ÐOÐOÐOr   r  r  r  r  r   rÚ  r˜   r�   r‘   r’   r“   r”   Fr•   r—   rj  rk  )r1   r³   rv   rw   rx   r%  rù  r&  r›   r.  rú  rý  rœ   rŽ   r�   rF   r  rd   rH   rÃ   rf   rg   rh   ri   rB   rC   r   r~   )r�   rˆ   r³   rv   rw   rx   r%  rù  r&  r.  rú  rý  rŽ   r�   r-   r2   r"  r'  r  r  r
  Úcatalog_api_keyÚcatalog_credsr  r  r  r¢   r£   r�   s                                r   Ú_model_flow_copilot_acpr,  u  s­  € ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð
 ;Ð:Ð:Ð:Ð:Ð:Ð:Ð:àà€KØ Ô,€Gà1Ð1°+Ñ>Ô>€Fà�
Š
Ð%Ñ&Ô&ÐL¨&¯*ª*°YÑ*?Ô*?ÐLÀ9ð ð —Z’Z 
Ñ+Ô+ÐI¨wÔ/I€Nå	Ð
KÑLÔLÐLÝ	Ð
NÑOÔOÐOÝ	Ð
TÑUÔUÐUÝ	Ð
*Ð(Ð
*Ð
*Ñ+Ô+Ð+Ý	Ð
/˜~Ð
/Ð
/Ñ0Ô0Ð0Ý	�G„G€GðØ=Ð=¸kÑJÔJˆˆøÝð ð ð Ýˆn�sˆnˆnÑÔÐÝØiñ	
ô 	
ð 	
ð 	ˆˆˆˆˆøøøøðøøøð —Y’Y˜zÑ*Ô*Ð<¨n€Nà€OðØ<Ð<¸YÑGÔGˆØ'×+Ò+¨I°rÑ:Ô:ˆˆøÝð ð ð Øˆðøøøð )Ð(¨Ñ9Ô9€Gà"Ð"ØØØ#ð	
ñ 	
ô 	
ð 	ð
 ð ð ð 	UØOÐO°WÐOÑOÔOˆ
ÝÐG�˜Z™œÐGÐGÐGÑHÔHÐHÐHà%×)Ò)¨)°RÑ8Ô8ˆ
Øð 	UÝØ^ñô ð õ ÐSÑTÔTÐTàð Ø*Ð*ØØ2Ø(Ø+Ø+ð
ñ 
ô 
ˆˆð	Ý˜^Ñ,Ô,×2Ò2Ñ4Ô4ˆHˆHøÝ!¥8Ð,ð 	ð 	ð 	ØˆHˆHˆHð	øøøð ð ÝˆlÑÔÐØˆð 	#Ð"ØØØ#ð	
ñ 	
ô 	
ð 	ð
 ð ð Ð�xÑ Ô Ð à
ˆ+‰-Œ-€CØ�GŠG�GÑÔ€EÝ�e�TÑ"Ô"ð Ø&+Ð3�˜EÐ"Ð"°ˆØˆˆG‰Ø#€Eˆ*ÑØ&€Eˆ*ÑØ*€Eˆ*ÑÝ$ U¸5ÐAÑAÔAÐAØ€K�ÑÔÐØÐÑÔÐå	Ð
B 8Ð
BÐ
B°7´<Ð
BÐ
BÐ
BÑCÔCÐCÐCÐCs<   Ã#C/ Ã/
D%Ã9!D Ä D%Å!E$ Å$
E1Å0E1È!H* È*I È?I c                óö  — ddl m} ddlm}m}m}m}m} ddlm	}m
}	m}
m} ddlm} d}||         }|j        pd}t!          ||¦  «        \  }} |||||¬¦  «        \  }}|rd	S |                     d
¦  «        }|r|}t%          d|› �¦  «         n|j        }t%          d|› �¦  «         |r ||¦  «        r |	|d¦  «         t%          ¦   «          |                     |rdndg ¦  «        }|r ||||||¬¦  «        }n<	 t+          d¦  «                             ¦   «         }n# t.          t0          f$ r d	}Y nw xY w|r° ||¦  «          |
¦   «         }|                     d¦  «        }t3          |t4          ¦  «        s|rd|ini }||d<   ||d<   ||d<   |                     dd	¦  «         t9          |d¬¦  «          ||¦  «          |¦   «          |rdnd}t%          d|› d|› d�¦  «         d	S t%          d¦  «         d	S )u  Kimi / Moonshot model selection with automatic endpoint routing.

    - sk-kimi-* keys   â†’ api.kimi.com/coding/v1  (Kimi Coding Plan)
    - Other keys        â†’ api.moonshot.ai/v1      (legacy Moonshot)

    No manual base URL prompt â€” endpoint is determined by key prefix.
    r   rr   )r³   ÚKIMI_CODE_BASE_URLrv   rw   rx   r�  r-  zkimi-codingr   r�   Nzsk-kimi-u$     Detected Kimi Coding Plan key â†’ u     Using Moonshot endpoint â†’ Úmoonshotr   zEnter model name: r�   r‘   r’   r6   r”   Fr•   zKimi CodingÚMoonshotr—   rj  rk  r˜   )r™   rs   r1   r³   r.  rv   rw   rx   rœ   r´   rÝ   rŽ   r�   r›   r.  Úbase_url_env_varr3   r   rd   r  rF   rf   rg   rh   ri   rB   rC   rÉ   r   )r�   rˆ   rs   r³   r.  rv   rw   rx   r´   rÝ   rŽ   r�   r.  r-   r2   Úbase_url_envrž   r‚   r    Úis_coding_planr  r  r¢   r£   r�   Úendpoint_labels                             r   Ú_model_flow_kimir5  ê  sM  € ð 0Ð/Ð/Ð/Ð/Ð/ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð 3Ð2Ð2Ð2Ð2Ð2à€KØ Ô,€GØÔ+Ð1¨r€Lõ %EÀ[ÐRYÑ$ZÔ$ZÑ!€L�/à)˜/ØØØØ'ð	ñ ô Ñ€L�%ð ð Øˆð "×,Ò,¨ZÑ8Ô8€NØð AØ+ˆÝÐE°^ÐEÐEÑFÔFÐFÐFà Ô3ˆÝÐ?¨~Ð?Ð?Ñ@Ô@Ð@àð )˜˜ lÑ3Ô3ð )Øˆ�| RÑ(Ô(Ð(Ý	�G„G€Gð "×%Ò%°~Ð&U m mÈ:ÐWYÑZÔZ€Jàð Ø*Ð*ØØ'Ø(Ø+Ø(ð
ñ 
ô 
ˆˆð	ÝÐ1Ñ2Ô2×8Ò8Ñ:Ô:ˆHˆHøÝ!¥8Ð,ð 	ð 	ð 	ØˆHˆHˆHð	øøøð ð ØÐ˜8Ñ$Ô$Ð$ð ˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ'ˆˆjÑØ*ˆˆjÑØ�	Š	�*˜dÑ#Ô#Ð#Ý(¨¸uÐEÑEÔEÐEØˆ�CÑÔÐØÐÑÔÐà*8ÐH˜˜¸jˆÝÐH xÐHÐH°~ÐHÐHÐHÑIÔIÐIÐIÐIåˆlÑÔÐÐÐs   Ã=!D ÄD5Ä4D5c                óÐ  — ddl m}m}m}m} ddlm}m}m}m	}	 ddl
m}
m}m}m} ddlm}m} d}||         }|j        pd}t'          ||¦  «        \  }} |||||¬¦  «        \  }}|rd	S d}|r  |
|¦  «        pt)          j        |d¦  «        }|s`|                      d
¦  «        }t/          |t0          ¦  «        r6t3          |                     d¦  «        pd¦  «                             ¦   «         } ||p|j        ¦  «        }dd |d¦  «        › d�fdd |d¦  «        › d�fg}g }|D ]>\  }}||k    r|                     d||› d�f¦  «         Œ'|                     ||f¦  «         Œ?|                     d¦  «          |d„ |D ¦   «         ¦  «        }|�||         d         dk    rt=          d¦  «         d	S ||         d         } ||¦  «        }|r |||¦  «          |||¦  «        } | r+| }!t=          dt?          |!¦  «        › d|j         › d�¦  «         n0|                     |g ¦  «        }!|!rt=          d|j         › d�¦  «         |!r ||!||||¬¦  «        }"n<	 tC          d¦  «                             ¦   «         }"n# tD          tF          f$ r d	}"Y nw xY w|"rÁ ||"¦  «          |¦   «         }#|#                     d
¦  «        }$t/          |$t0          ¦  «        s|$rd|$ini }$|$|#d
<   ||$d<   ||$d<   |$ $                    dd	¦  «         tK          |$d ¬!¦  «          ||#¦  «          |	¦   «          t1          |$¦  «        | d
<   t=          d"|"› d#|j         › d�¦  «         d	S t=          d¦  «         d	S )$z6StepFun Step Plan flow with region-specific endpoints.r   )Ú_infer_stepfun_regionrs   Ú_prompt_provider_choiceÚ_stepfun_base_url_for_regionr²   r�  )r.  r9  Ústepfunr   r�   Nr�   r6   ÚinternationalzInternational (rk  ÚchinazChina (u     â†� currently active)rY   rT   c                ó   — g | ]\  }}|‘ŒS rV  rV  )r$   rg  rm   s      r   rÐ  z'_model_flow_stepfun.<locals>.<listcomp>}  s   € Ð)PÐ)PÐ)P±H°A°u¨%Ð)PÐ)PÐ)Pr   rY   r˜   r  ú model(s) from ú APIz$  Could not auto-detect models from u,    API â€” showing Step Plan fallback catalog.r   rÚ  r‘   r’   r”   Fr•   r—   rj  )&r™   r7  rs   r8  r9  r1   r³   rv   rw   rx   rœ   r´   rÝ   rŽ   r�   r›   r.  r9  r1  r3   rÞ  ÚgetenvrF   rB   rC   r   rg   r  ÚinsertrG   rd   rÃ   r~   rf   rh   ri   rÉ   r   )%r�   rˆ   r7  rs   r8  r9  r³   rv   rw   rx   r´   rÝ   rŽ   r�   r.  r9  r-   r2   r2  rž   r‚   r    Úcurrent_baser  Úcurrent_regionÚregion_choicesÚordered_regionsÚ
region_keyrm   Ú
region_idxÚselected_regionr  rì  r  r¢   r£   r�   s%                                        r   Ú_model_flow_stepfunrI  E  s(  € à}Ð}Ð}Ð}Ð}Ð}Ð}Ð}Ð}Ð}Ð}Ð}ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð EÐDÐDÐDÐDÐDÐDÐDà€KØ Ô,€GØÔ+Ð1¨r€Lå$DÀ[ÐRYÑ$ZÔ$ZÑ!€L�/à)˜/ØØØØ'ð	ñ ô Ñ€L�%ð ð Øˆà€LØð RØ$�} \Ñ2Ô2ÐQµb´iÀÈbÑ6QÔ6QˆØð HØ—J’J˜wÑ'Ô'ˆ	Ý�i¥Ñ&Ô&ð 	HÝ˜yŸ}š}¨ZÑ8Ô8Ð>¸BÑ?Ô?×EÒEÑGÔGˆLØ*Ð*¨<Ð+U¸7Ô;UÑVÔV€Nð ØNÐ:Ð:¸?ÑKÔKÐNÐNÐNð	
ð 
ÐDÐ8Ð8¸ÑAÔAÐDÐDÐDÐEð€Nð €OØ+ð 8ð 8Ñˆ
�EØ˜Ò'Ð'Ø×"Ò" 1 z°eÐ3SÐ3SÐ3SÐ&TÑUÔUÐUÐUà×"Ò" J°Ð#6Ñ7Ô7Ð7Ð7Ø×ÒÐ/Ñ0Ô0Ð0à(Ð(Ð)PÐ)PÀÐ)PÑ)PÔ)PÑQÔQ€JØÐ˜_¨ZÔ8¸Ô;¸xÒGÐGÝˆlÑÔÐØˆà% jÔ1°!Ô4€OØ1Ð1°/ÑBÔB€NØð 5Øˆ�| ^Ñ4Ô4Ð4à"Ð" <°Ñ@Ô@€KØð 	Ø ˆ
ÝÐK�˜Z™œÐKÐK¸¼ÐKÐKÐKÑLÔLÐLÐLà%×)Ò)¨+°rÑ:Ô:ˆ
Øð 	Ýð6°w´|ð 6ð 6ð 6ñô ð ð
 ð Ø*Ð*ØØ'Ø(Ø+Ø(ð
ñ 
ô 
ˆˆð	Ý˜^Ñ,Ô,×2Ò2Ñ4Ô4ˆHˆHøÝ!¥8Ð,ð 	ð 	ð 	ØˆHˆHˆHð	øøøð ð ØÐ˜8Ñ$Ô$Ð$àˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ'ˆˆjÑØ*ˆˆjÑØ�	Š	�*˜dÑ#Ô#Ð#Ý(¨¸uÐEÑEÔEÐEØˆ�CÑÔÐØÐÑÔÐå˜u™+œ+ˆˆw‰ÝÐF xÐFÐF°w´|ÐFÐFÐFÑGÔGÐGÐGÐGåˆlÑÔÐÐÐs   É!I; É;JÊJc                óŽ  — ddl m}m}m} ddlm}m}m} ddlm	}	 d|› d�}
ddl m
}m}  |dd	d
d¬¦  «        } |d|¦  «        \  }}|r1ddlm}  ||pd¦  «        }t          d|dd…         › d|› �¦  «         n›t          d|
› �¦  «         t          ¦   «          ddlm} 	  |d¦  «                             ¦   «         }n&# t$          t&          f$ r t          ¦   «          Y dS w xY w|st          d¦  «         dS  |d|¦  «         |}t          d¦  «         t          ¦   «          |	                     dg ¦  «        }t          dt+          |¦  «        › d�¦  «         |r |||d|
|¬¦  «        }n<	 t-          d¦  «                             ¦   «         }n# t$          t&          f$ r d}Y nw xY w|�r ||¦  «          |¦   «         }|                     d¦  «        }t/          |t0          ¦  «        s|rd|ini }||d<   d|d<   |
|d<   |                     d d¦  «         t5          |d!¬"¦  «         |                     di ¦  «        }t/          |t0          ¦  «        si }||d#<   ||d<    |d$|¦  «          |d%|
¦  «          ||¦  «          |¦   «          t          d&|› d'|› d(�¦  «         t          d|
› �¦  «         dS t          d)¦  «         dS )*uç   Bedrock API Key mode â€” uses the OpenAI-compatible bedrock-mantle endpoint.

    For developers who don't have an AWS account but received a Bedrock API Key
    from their AWS admin. Works like any OpenAI-compatible endpoint.
    r   ©rv   rw   rx   )rŽ   r�   rÝ   r-  zhttps://bedrock-mantle.z.api.aws/v1)r0   ru   ÚbedrockÚBedrockr{   )ÚAWS_BEARER_TOKEN_BEDROCKr}   r  rN  z  Bedrock API Key: Né   õ   ... âœ“z  Endpoint: rJ  r  õ     âœ“ API key saved.ú
  Showing z curated modelsrh  r   ú  Model ID: r�   r‘   r’   r6   r”   Fr•   rB  rý   rü   ú  Default model set to: z (via Bedrock API Key, rk  ú  No change.)r1   rv   rw   rx   rœ   rŽ   r�   rÝ   r›   r.  r0   ru   r  r  rd   rn  rK  rg   rh   ri   rF   rÃ   rf   rB   rC   rÉ   r   )r�   rB  rˆ   rv   rw   rx   rŽ   r�   rÝ   r.  Úmantle_base_urlr0   ru   Úbedrock_pconfigrž   r‚   r  Úsource_suffixrK  r{   r  r¢   r£   r�   Úbedrock_cfgs                            r   Ú_model_flow_bedrock_api_keyrZ  µ  sI  € ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð
 3Ð2Ð2Ð2Ð2Ð2àC°ÐCÐCÐC€Oð QÐPÐPÐPÐPÐPÐPÐPØ$�nØØØØ6ð	ñ ô €Oð %EÐ$DØ�?ñ%ô %Ñ!€L�/ð ð &ØEÐEÐEÐEÐEÐEØ3Ð3ØÐ9Ð9ñ
ô 
ˆõ 	ÐM L°°"°Ô$5ÐMÐM¸mÐMÐMÑNÔNÐNÐNåÐ.˜_Ð.Ð.Ñ/Ô/Ð/Ý‰ŒˆØAÐAÐAÐAÐAÐAð	Ø*Ð*Ð+@ÑAÔA×GÒGÑIÔIˆGˆGøÝ!¥8Ð,ð 	ð 	ð 	Ý‰GŒGˆGØˆFˆFð	øøøð ð 	Ý�.Ñ!Ô!Ð!ØˆFØˆÐ1°7Ñ;Ô;Ð;ØˆÝÐ$Ñ%Ô%Ð%Ý	�G„G€Gð "×%Ò% i°Ñ4Ô4€JÝ	Ð
7•s˜:‘”Ð
7Ð
7Ð
7Ñ8Ô8Ð8àð Ø*Ð*ØØ'Ø%Ø,Ø(ð
ñ 
ô 
ˆˆð	Ý˜^Ñ,Ô,×2Ò2Ñ4Ô4ˆHˆHøÝ!¥8Ð,ð 	ð 	ð 	ØˆHˆHˆHð	øøøð ñ ØÐ˜8Ñ$Ô$Ð$ð ˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ$ˆˆjÑØ+ˆˆjÑØ�	Š	�*˜dÑ#Ô#Ð#Ý(¨¸uÐEÑEÔEÐEð —g’g˜i¨Ñ,Ô,ˆÝ˜+¥tÑ,Ô,ð 	ØˆKØ &ˆ�HÑØ$ˆˆI‰ð 	ˆÐ'¨Ñ6Ô6Ð6ØˆÐ(¨/Ñ:Ô:Ð:àˆ�CÑÔÐØÐÑÔÐåÐS¨ÐSÐSÈ&ÐSÐSÐSÑTÔTÐTÝÐ.˜_Ð.Ð.Ñ/Ô/Ð/Ð/Ð/åˆnÑÔÐÐÐs$   Â!B? Â?C"Ã!C"Å-!F ÆF%Æ$F%c                ó„
  ‡‡ ‡!‡"— ddl m}m}m} ddlm}m} ddlm} 	 ddl	m
}m}	m}
m} n=# t          $ r0 t          d¦  «         t          d¦  «         t          ¦   «          Y dS w xY w |¦   «         s,t          d	¦  «         t          d
¦  «         t          ¦   «           |	¦   «         }|rt          d|› d�¦  «         nt          d¦  «         t          ¦   «           |
¦   «         }	 t!          d|› d�¦  «                             ¦   «         }n&# t$          t&          f$ r t          ¦   «          Y dS w xY w|p|}t          d¦  «         t          ¦   «          t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          ¦   «          	 t!          d¦  «                             ¦   «         }n&# t$          t&          f$ r t          ¦   «          Y dS w xY w|dk    rt)          | ||¦  «         dS t          d|› d�¦  «          ||¦  «        }|�rd}d}g }|D ]h}|d         Š"t+          ˆ"fd„|D ¦   «         ¦  «        rŒ&t+          ˆ"fd„|D ¦   «         ¦  «        rŒBt-          ‰"|¦  «        sŒS|                     |¦  «         Œit0          dz   Št3          ¦   «         }|D ]R}|d         Š"t5          ˆ"fd „‰D ¦   «         d¦  «        }|r*|                     ‰"t9          |¦  «        d…         ¦  «         ŒSg }|D ]9}|d         Š"‰"                     ‰¦  «        s‰"|v rŒ$|                     |¦  «         Œ:g d!¢Š d@ˆfd%„Š!ˆ ˆ!fd&„}|                     |¬'¦  «         d(„ |D ¦   «         }t          d)t9          |¦  «        › d*t9          |¦  «        › d+�¦  «         nJ|                     d,g ¦  «        }|r!t          d-t9          |¦  «        › d.�¦  «         nt          d/¦  «         dS |r |||d,d0|› d1�¬2¦  «        }n<	 t!          d3¦  «                             ¦   «         }n# t$          t&          f$ r d}Y nw xY w|rå ||¦  «          |¦   «         }|                     d4¦  «        }tA          |tB          ¦  «        s|rd5|ini }||d4<   d,|d6<   d0|› d1�|d7<   | "                    d8d¦  «         tG          |d9¬:¦  «         |                     d,i ¦  «        }tA          |tB          ¦  «        si }||d;<   ||d,<    ||¦  «          |¦   «          t          d<|› d=|› d>�¦  «         dS t          d?¦  «         dS )Au$  AWS Bedrock provider: verify credentials, pick region, discover models.

    Uses the native Converse API via boto3 â€” not the OpenAI-compatible endpoint.
    Auth is handled by the AWS SDK default credential chain (env vars, profile,
    instance role), so no API key prompt is needed.
    r   rK  r�   r-  )Úhas_aws_credentialsÚresolve_aws_auth_env_varÚresolve_bedrock_regionÚdiscover_bedrock_modelsu.     âœ— boto3 is not installed. Install it with:z    pip install boto3Nu<     âš  No AWS credentials detected via environment variables.zE  Bedrock will use boto3's default credential chain (IMDS, SSO, etc.)z  AWS credentials: u    âœ“z<  AWS credentials: boto3 default chain (instance role / SSO)z  AWS Region [rÀ   ú  Choose authentication method:z)    1. IAM credential chain (recommended)zB       Works with EC2 instance roles, SSO, env vars, aws configurez    2. Bedrock API Keyu<          Enter your Bedrock API Key directly â€” also supportsz5       team scenarios where an admin distributes keysz  Choice [1]: ra   z  Discovering models in rM  )z
stability.zcohere.embedztwelvelabs.zus.stability.zus.cohere.embedzus.twelvelabs.zglobal.cohere.embedzglobal.twelvelabs.)Ú	safeguardÚvoxtralzpalmyra-visionr?   c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r!   r"   r#   s     €r   r'   z&_model_flow_bedrock.<locals>.<genexpr>y	  s/   øè è € Ð@Ð@¨�3—>’> !Ñ$Ô$Ð@Ð@Ð@Ð@Ð@Ð@r   c              3  óD   •K  — | ]}|‰                      ¦   «         v V — Œd S r!   ©r   )r$   Úsr&   s     €r   r'   z&_model_flow_bedrock.<locals>.<genexpr>{	  s0   øè è € ÐAÐA¨�1˜Ÿ	š	™œÐ#ÐAÐAÐAÐAÐAÐAr   )r(   c              3  óF   •K  — | ]}‰                      |¦  «        ¯|V — Œd S r!   r"   r#   s     €r   r'   z&_model_flow_bedrock.<locals>.<genexpr>‡	  ó4   øè è € ÐJÐJ˜a¸¿ºÀqÑ8IÔ8IÐJ˜ÐJÐJÐJÐJÐJÐJr   )	zanthropic.claude-sonnet-4-6zanthropic.claude-opus-4-6zanthropic.claude-haiku-4-5zamazon.nova-prozamazon.nova-litezamazon.nova-microzdeepseek.v3zmeta.llama4-maverickzmeta.llama4-scoutr&   r   r   c                ót   •‡ — t          ˆ fd„‰D ¦   «         d ¦  «        }|r‰ t          |¦  «        d …         n‰ S )Nc              3  óF   •K  — | ]}‰                      |¦  «        ¯|V — Œd S r!   r"   r#   s     €r   r'   z8_model_flow_bedrock.<locals>._base_id.<locals>.<genexpr>¥	  rh  r   )r)   rÃ   )r&   Ú_ppÚ_PROFILE_PREFIXESs   ` €r   Ú_base_idz%_model_flow_bedrock.<locals>._base_id¤	  sF   øø€ ÝÐJÐJÐJÐJÐ#4ÐJÑJÔJÈDÑQÔQˆCØ%(Ð1�3•s˜3‘x”x�y�y”>�>¨cÐ1r   c                óþ   •— | d         } ‰|¦  «        }t          ‰¦  «        D ]9\  }}|                     |¦  «        rd||                     d¦  «        sdnd|fc S Œ:|                     d¦  «        rddd|fS ddd|fS )Nr?   r   r(   rZ   é   )re   r   )rƒ  r&   Úbaserl   ÚrecÚ_RECOMMENDED_BASESrm  s        €€r   Ú	_sort_keyz&_model_flow_bedrock.<locals>._sort_key¨	  s®   ø€ Ø�D”'ˆCØ�8˜C‘=”=ˆDÝ#Ð$6Ñ7Ô7ð Rð R‘��3Ø—?’? 3Ñ'Ô'ð Rà˜q¨3¯>ª>¸)Ñ+DÔ+DÐ"K ! !È!ÈSÐQÐQÐQÐQðRð �~Š~˜iÑ(Ô(ð &Ø˜1˜a �~Ð%Ø�q˜!˜S�>Ð!r   )rÂ  c                ó   — g | ]
}|d          ‘ŒS )r?   rV  rÏ  s     r   rÐ  z'_model_flow_bedrock.<locals>.<listcomp>´	  s   € Ð/Ð/Ð/ !�a˜”gÐ/Ð/Ð/r   r  z text model(s) (filtered from z total)rL  z  Using z, curated models (live discovery unavailable)zJ  No models found. Check IAM permissions for bedrock:ListFoundationModels.zhttps://bedrock-runtime.z.amazonaws.comr=  rS  r�   r‘   r’   r6   r”   Fr•   rB  rT  z (via AWS Bedrock, rk  rU  )r&   r   r   r   )$r1   rv   rw   rx   rœ   rŽ   r�   r›   r.  Úagent.bedrock_adapterr\  r]  r^  r_  r£  rd   rf   rg   rh   ri   rZ  ro  r,   rG   r*   Úsetr)   ÚaddrÃ   r   ÚsortrF   rB   rC   rÉ   r   )#r�   rˆ   rv   rw   rx   rŽ   r�   r.  r\  r]  r^  r_  Úauth_varrC  Úregion_inputrB  r°  rì  Ú_EXCLUDE_PREFIXESÚ_EXCLUDE_SUBSTRINGSÚfilteredrƒ  Úprofile_base_idsrk  Údedupedrs  r  r¢   r£   r�   rY  rl  rr  rm  r&   s#                                  @@@@r   Ú_model_flow_bedrockr€  	  sm  øøøø€ ðð ð ð ð ð ð ð ð ð ð
 ;Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ø2Ð2Ð2Ð2Ð2Ð2ðð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øõ ð ð ð ÝÐ>Ñ?Ô?Ð?ÝÐ%Ñ&Ô&Ð&Ý‰ŒˆØˆˆð	øøøð ÐÑ Ô ð ÝÐLÑMÔMÐMÝÐUÑVÔVÐVÝ‰Œˆà'Ð'Ñ)Ô)€HØð NÝÐ2 HÐ2Ð2Ð2Ñ3Ô3Ð3Ð3åÐLÑMÔMÐMÝ	�G„G€Gð ,Ð+Ñ-Ô-€NðÝÐA¨nÐAÐAÐAÑBÔB×HÒHÑJÔJˆˆøÝ�xÐ(ð ð ð Ý‰ŒˆØˆˆðøøøð Ð+˜^€Fõ 
Ð
+Ñ,Ô,Ð,Ý	�G„G€GÝ	Ð
5Ñ6Ô6Ð6Ý	Ð
NÑOÔOÐOÝ	Ð
"Ñ#Ô#Ð#Ý	Ð
HÑIÔIÐIÝ	Ð
AÑBÔBÐBÝ	�G„G€GðÝÐ,Ñ-Ô-×3Ò3Ñ5Ô5ˆˆøÝ�xÐ(ð ð ð Ý‰ŒˆØˆˆðøøøð �cÒÐÝ# F¨F°MÑBÔBÐBØˆõ 
Ð
0 VÐ
0Ð
0Ð
0Ñ1Ô1Ð1Ø)Ð)¨&Ñ1Ô1€Kàñ Zð	
Ðð IÐð ˆØð 	ð 	ˆAØ�D”'ˆCÝÐ@Ð@Ð@Ð@Ð.?Ð@Ñ@Ô@Ñ@Ô@ð ØÝÐAÐAÐAÐAÐ-@ÐAÑAÔAÑAÔAð ØÝ5°c¸6ÑBÔBð ØØ�OŠO˜AÑÔÐÐõ 1°<Ñ?ÐÝ™5œ5ÐØð 	5ð 	5ˆAØ�D”'ˆCÝÐJÐJÐJÐJÐ#4ÐJÑJÔJÈDÑQÔQˆCØð 5Ø ×$Ò$ S­¨S©¬¨¨¤^Ñ4Ô4Ð4øàˆØð 	ð 	ˆAØ�D”'ˆCà—N’NÐ#4Ñ5Ô5ðàÐ+Ð+Ð+àØ�NŠN˜1ÑÔÐÐð


ð 

ð 

Ðð	2ð 	2ð 	2ð 	2ð 	2ð 	2ð		"ð 		"ð 		"ð 		"ð 		"ð 		"ð 	�Š˜ˆÑ#Ô#Ð#Ø/Ð/ wÐ/Ñ/Ô/ˆ
ÝØ_•s˜:‘”Ð_Ð_ÅcÈ+ÑFVÔFVÐ_Ð_Ð_ñ	
ô 	
ð 	
ð 	
ð &×)Ò)¨)°RÑ8Ô8ˆ
Øð 	ÝØX�3˜z™?œ?ÐXÐXÐXñô ð ð õ Ø\ñô ð ð ˆFð ð Ø*Ð*ØØ'Ø&ØN¸ÐNÐNÐNð	
ñ 
ô 
ˆˆð	Ý˜^Ñ,Ô,×2Ò2Ñ4Ô4ˆHˆHøÝ!¥8Ð,ð 	ð 	ð 	ØˆHˆHˆHð	øøøð ð ØÐ˜8Ñ$Ô$Ð$àˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ%ˆˆjÑØM°vÐMÐMÐMˆˆjÑØ�	Š	�*˜dÑ#Ô#Ð#Ý(¨¸uÐEÑEÔEÐEà—g’g˜i¨Ñ,Ô,ˆÝ˜+¥tÑ,Ô,ð 	ØˆKØ &ˆ�HÑØ$ˆˆI‰àˆ�CÑÔÐØÐÑÔÐåÐO¨ÐOÐOÀfÐOÐOÐOÑPÔPÐPÐPÐPåˆnÑÔÐÐÐsE   ž+ «6A%Á$A%Ã&%D ÄD/Ä.D/Æ-!G ÇG2Ç1G2Ð!P1 Ð1QÑQc                óh  — ddl m}m}m} ddlm}m}m} ddlm	}  |d¦  «        p |d¦  «        pd 
                    ¦   «         }	|	rt          d|	› d	�¦  «         n<t          d
¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          ¦   «           |¦   «         }
|
                     d¦  «        }t          |t          ¦  «        si }t          |                     d¦  «        pd¦  «         
                    ¦   «         }	 t!          d|pd› d�¦  «         
                    ¦   «         }n&# t"          t$          f$ r t          ¦   «          Y dS w xY w|p|}t          |                     d¦  «        pd¦  «         
                    ¦   «         pd}	 t!          d|› d�¦  «         
                    ¦   «         }n&# t"          t$          f$ r t          ¦   «          Y dS w xY w|p|}|                     dg ¦  «        pddg}|dk    rd|› d�nd|› d|› d�} |||d|¬¦  «        }|rö ||¦  «          |¦   «         }
|
                     d¦  «        }t          |t          ¦  «        s|rd|ini }||
d<   d|d <   |                     d!d¦  «         |                     d"d¦  «         t)          |d#¬$¦  «         |
                     d¦  «        }t          |t          ¦  «        si }||d<   ||d<   ||
d<    ||
¦  «          |¦   «          t          d%|› d&|› d'�¦  «         dS t          d(¦  «         dS ))uŽ  Google Vertex AI provider: Gemini via the OpenAI-compatible endpoint.

    Auth is OAuth2 â€” short-lived tokens minted from a service-account JSON or
    Application Default Credentials (ADC). No static API key. The credential
    *path* lives in .env (VERTEX_CREDENTIALS_PATH / GOOGLE_APPLICATION_CREDENTIALS);
    project ID and region are non-secret and saved to config.yaml under vertex:.
    r   rK  )rŽ   r�   r´   r-  ÚVERTEX_CREDENTIALS_PATHÚGOOGLE_APPLICATION_CREDENTIALSr   z,  Vertex credentials: service account JSON (u   ) âœ“z;  Vertex credentials: Application Default Credentials (ADC)z5    Vertex uses OAuth2, not a static API key. Either:u9         â€¢ run 'gcloud auth application-default login', oruQ         â€¢ set VERTEX_CREDENTIALS_PATH in ~/.hermes/.env to a service account JSONÚvertexÚ
project_idz  GCP project ID [zfrom credentialsrÀ   NrB  rC  z  Vertex region [zgoogle/gemini-3-pro-previewzgoogle/gemini-3-flash-previewzGhttps://aiplatform.googleapis.com/v1beta1/projects/<project>/locations/z/endpoints/openapirR  z@-aiplatform.googleapis.com/v1beta1/projects/<project>/locations/r=  r�   r‘   r’   r6   r”   Fr•   rT  z (via Google Vertex AI, rk  rU  )r1   rv   rw   rx   rœ   rŽ   r�   r´   r›   r.  rg   rd   rF   rB   rC   r   rf   rh   ri   rÉ   r   )r�   rˆ   rv   rw   rx   rŽ   r�   r´   r.  Úsa_pathr£   Ú
vertex_cfgÚcurrent_projectÚproject_inputr…  rC  rz  rB  r  Úbase_url_previewr¢   r�   Úvcfgs                          r   Ú_model_flow_vertexrŒ  í	  s`  € ðð ð ð ð ð ð ð ð ð ð
 JÐIÐIÐIÐIÐIÐIÐIÐIÐIØ2Ð2Ð2Ð2Ð2Ð2ð 	ˆÐ/Ñ0Ô0ð 	Øˆ=Ð9Ñ:Ô:ð	àß‚e�g„gð	 ð
 ð cÝÐK¸WÐKÐKÐKÑLÔLÐLÐLåÐKÑLÔLÐLÝÐEÑFÔFÐFÝÐIÑJÔJÐJÝÐaÑbÔbÐbÝ	�G„G€Gà
ˆ+‰-Œ-€CØ—’˜Ñ"Ô"€JÝ�j¥$Ñ'Ô'ð Øˆ
õ ˜*Ÿ.š.¨Ñ6Ô6Ð<¸"Ñ=Ô=×CÒCÑEÔE€OðÝØK Ð!FÐ4FÐKÐKÐKñ
ô 
ç
Š%‰'Œ'ð 	ˆøõ �xÐ(ð ð ð Ý‰ŒˆØˆˆðøøøð Ð1 /€Jõ ˜Ÿš¨Ñ1Ô1Ð=°XÑ>Ô>×DÒDÑFÔFÐRÈ(€NðÝÐD°ÐDÐDÐDÑEÔE×KÒKÑMÔMˆˆøÝ�xÐ(ð ð ð Ý‰ŒˆØˆˆðøøøð Ð+˜^€Fð "×%Ò% h°Ñ3Ô3ð Ø%Ø'ð8€Jð �XÒÐð	0Øð	0ð 	0ð 	0ð 	0ð0˜ð 0ð 0Øð0ð 0ð 0ð	 ð 'Ð&ØØ#Ø!Ø)ð	ñ ô €Hð ð ØÐ˜8Ñ$Ô$Ð$àˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ$ˆˆjÑà�	Š	�*˜dÑ#Ô#Ð#Ø�	Š	�*˜dÑ#Ô#Ð#Ý(¨¸uÐEÑEÔEÐEà�wŠw�xÑ Ô ˆÝ˜$¥Ñ%Ô%ð 	ØˆDØ'ˆˆ\ÑØˆˆX‰ØˆˆH‰àˆ�CÑÔÐØÐÑÔÐåÐT¨ÐTÐTÈ6ÐTÐTÐTÑUÔUÐUÐUÐUåˆnÑÔÐÐÐs$   Ä'D: Ä:EÅEÆ%G ÇG&Ç%G&rB  c                óü  — ddl m} ddlm} d„ |D ¦   «         }| pd                     ¦   «                              d¦  «        }d}t          |¦  «        D ]%\  }\  }}||                     d¦  «        k    r|} nŒ&|rt          |¦  «        }d„ |D ¦   «         }	|	                     d¦  «          ||	|d	¬
¦  «        }
|
€| S |
t          |¦  «        k    r�	 t          d| › d�¦  «                             ¦   «         }n'# t          t          f$ r t          ¦   «          | cY S w xY w|s| S |                     d¦  «        st          d¦  «         | S |                     d¦  «        S ||
         d                              d¦  «        S )a‘  Present a picker for Z.AI endpoint selection during setup.

    Offers the four official Z.AI endpoints (Global, China, Coding Plan
    Global, Coding Plan China) plus a custom-proxy option.  The list is
    sourced from ``ZAI_ENDPOINTS`` in ``hermes_cli.auth`` so it stays in
    sync with the probe list.

    Returns the selected base URL.  Falls back to *current_base* on cancel
    or error.
    r   )r8  )ÚZAI_ENDPOINTSc                ó    — g | ]\  }}}}||f‘ŒS rV  rV  )r$   rg  Úurlrm   s       r   rÐ  z(_select_zai_endpoint.<locals>.<listcomp>c
  s%   € ÐBÐBÐBÑ 0  3¨¨5��sˆ|ÐBÐBÐBr   r   rø   c                ó$   — g | ]\  }}|› d |› d�‘ŒS )r`  rk  rV  )r$   rm   r�  s      r   rÐ  z(_select_zai_endpoint.<locals>.<listcomp>r
  s-   € Ð<Ð<Ð<¡j e¨S�%Ð!Ð!˜3Ð!Ð!Ð!Ð<Ð<Ð<r   zCustom proxy URLzSelect Z.AI / GLM endpoint:)r‘   rR   NzCustom base URL [rÀ   rQ  õM     Invalid URL â€” must start with http:// or https://. Keeping current value.rZ   )r™   r8  r1   rŽ  rg   r  re   rÃ   rG   rf   rh   ri   rd   r   )rB  r8  rŽ  ÚoptionsÚnormalized_currentrÑ   rk   rg  r�  rj   r¢   Úoverrides               r   Ú_select_zai_endpointr–  T
  sô  € ð 8Ð7Ð7Ð7Ð7Ð7Ø-Ð-Ð-Ð-Ð-Ð-ð CÐB°MÐBÑBÔB€GØ&Ð,¨"×3Ò3Ñ5Ô5×<Ò<¸SÑAÔAÐð €KÝ" 7Ñ+Ô+ð 'ð '‰ˆ‰Xˆa�Ø §¢¨C¡¤Ò0Ð0ØˆKØˆEð 1ð ð 	'å˜g™,œ,ˆKà<Ð<°GÐ<Ñ<Ô<€GØ‡N‚NÐ%Ñ&Ô&Ð&à&Ð&ØØØ+ðñ ô €Hð
 ÐØÐà•3�w‘<”<ÒÐð	 ÝÐB°ÐBÐBÐBÑCÔC×IÒIÑKÔKˆHˆHøÝ!¥8Ð,ð 	 ð 	 ð 	 Ý‰GŒGˆGØÐÐÐð	 øøøð ð 	 ØÐØ×"Ò"Ð#:Ñ;Ô;ð 	 ÝÐaÑbÔbÐbØÐØ�Š˜sÑ#Ô#Ð#à�8Ô˜QÔ×&Ò& sÑ+Ô+Ð+s   Ã%C7 Ã7!DÄDc                óÂ  ‡‡/— ddl m} ddlm}m}m}m} ddlm}m	}	m
}
m} ddlm}m}m}mŠ/ |‰         }|j        r|j        d         nd}|j        pd}t'          ‰|¦  «        \  }} |||‰|¬¦  «        \  }}|rdS ‰d	k    �rS|�rP	 dd
lm} n# t,          $ r d}Y nw xY w|��3t/          d¦  «         |r ||¦  «        ndpt1          j        |pdd¦  «        p|j        } |||¦  «        }|dk    r²t/          ¦   «          t/          d¦  «         t/          d¦  «         t/          d¦  «         t/          d¦  «         t/          ¦   «          t/          d¦  «         t/          d¦  «         t/          ¦   «          t/          d¦  «         t/          ¦   «          t/          d¦  «         dS |dk    rt/          d¦  «         nt/          d¦  «         t/          ¦   «          d}|r  ||¦  «        pt1          j        |d¦  «        }|s³	  |
¦   «                              d¦  «        pi }t9          |                     d¦  «        pd¦  «                             ¦   «                              ¦   «         ‰k    r6t9          |                     d¦  «        pd¦  «                             ¦   «         }n# t,          $ r Y nw xY w|p|j        }‰dk    r(t?          |¦  «        }|r||k    r|r |	||¦  «         |}n…	 tA          d|› d�¦  «                             ¦   «         }n'# tB          tD          f$ r t/          ¦   «          d}Y nw xY w|r5|r3| #                    d¦  «        st/          d¦  «         n |	||¦  «         |}‰d k    r…dd!lm$} dd"lm%} |p|r ||¦  «        nd}	  |||¬#¦  «        } n5# |$ r-}!t/          d$|!› �¦  «         t/          d%¦  «         g } Y d}!~!nd}!~!ww xY w| r t/          d&tM          | ¦  «        › d'�¦  «         �n;‰d(k    rIdd)lm'}" |p|r ||¦  «        nd} |"||d*¬+¦  «        } | r t/          d&tM          | ¦  «        › d,�¦  «         �nì‰d-k    �rHdd.lm} |p|r ||¦  «        nd}|                     ‰g ¦  «        }# |||¦  «        }$|$r,|$} t/          d&tM          | ¦  «        › d/|j(        › d0�¦  «         �n~g }%	 dd1l)m*}&  |&‰¦  «        }%n# t,          $ r Y nw xY w|%r”d2„ |%D ¦   «         }'tW          |%¦  «        } |#D ]T}(|(                     ¦   «         |'vr<|  ,                    |(¦  «         |' -                    |(                     ¦   «         ¦  «         ŒUt/          d&tM          | ¦  «        › d3�¦  «         �nÃ|#} | r t/          d4tM          | ¦  «        › d5�¦  «         �n�|                     ‰g ¦  «        }#g }%	 dd1l)m*}&  |&‰¦  «        }%n# t,          $ r Y nw xY w|%rš|#rud6„ |%D ¦   «         }'tW          |%¦  «        })|#D ]T}(|(                     ¦   «         |'vr<|) ,                    |(¦  «         |' -                    |(                     ¦   «         ¦  «         ŒU|)} n|%} t/          d&tM          | ¦  «        › d3�¦  «         nÆ|#r6tM          |#¦  «        d7k    r#|#} t/          d4tM          | ¦  «        › d5�¦  «         nŽ|p|r ||¦  «        nd} |||¦  «        }$|$rKtM          |$¦  «        tM          |#¦  «        k    r+|$} t/          d&tM          | ¦  «        › d/|j(        › d0�¦  «         n$|#} | r t/          d4tM          | ¦  «        › d5�¦  «         ‰d8v rLˆ/ˆfd9„| D ¦   «         }  ‰/‰|¦  «        }tW          t\           /                    d:„ | D ¦   «         ¦  «        ¦  «        } | r;i }*	 dd;lm0}+  |+‰¦  «        pi }*n# t,          $ r i }*Y nw xY w || ||*‰||¬<¦  «        },n<	 tA          d=¦  «                             ¦   «         },n# tB          tD          f$ r d},Y nw xY w|,rÓ‰d8v r ‰/‰|,¦  «        }, ||,¦  «          |
¦   «         }-|-                     d¦  «        }.tc          |.t\          ¦  «        s|.rd>|.ini }.|.|-d<   ‰|.d<   ||.d<   te          |.d?¬@¦  «         ‰d8v r |‰|,¦  «        |.dA<   n|. 3                    dAd¦  «          ||-¦  «          |¦   «          t/          dB|,› dC|j(        › dD�¦  «         dS t/          dE¦  «         dS )FzCGeneric flow for API-key providers (z.ai, MiniMax, OpenCode, etc.).r   rr   r²   r�  )r.  r9  Úopencode_model_api_modeÚnormalize_opencode_model_idr   r�   NÚgemini)Úprobe_gemini_tierz  Checking Gemini API tier...ÚfreeuW   â�Œ This Google API key is on the free tier (<= 250 requests/day for gemini-2.5-flash).z[   Hermes typically makes 3-10 API calls per user turn (tool iterations + auxiliary tasks),zO   so the free tier is exhausted after a handful of messages and cannot sustainz   an agent session.zX   To use Gemini with Hermes, enable billing on your Google Cloud project and regeneratezK   the key in a billing-enabled project: https://aistudio.google.com/apikeyzY   Alternatives with workable free usage: DeepSeek, OpenRouter (free models), Groq, Nous.z*Not saving Gemini as the default provider.Úpaidu     Tier check: paid âœ“z3  Tier check: could not verify (proceeding anyway).r�   r’   r6   Úzaiz
Base URL [rÀ   rQ  r’  Úlmstudio)rÚ   )Úfetch_lmstudio_models)r{   r6   z"  LM Studio rejected the request: zC  Set LM_API_KEY (or update it) to match the server's bearer token.r  z model(s) from LM Studiozollama-cloud)Úfetch_ollama_cloud_modelsT)r{   r6   r†   z model(s) from Ollama CloudÚnovitar8  r>  r?  )Úlist_agentic_modelsc                ó6   — h | ]}|                      ¦   «         ’ŒS rV  re  rÏ  s     r   ú	<setcomp>z/_model_flow_api_key_provider.<locals>.<setcomp>N  ó    € Ð7Ð7Ð7 a˜Ÿš™	œ	Ð7Ð7Ð7r   z" model(s) from models.dev registryrR  rù   c                ó6   — h | ]}|                      ¦   «         ’ŒS rV  re  rÏ  s     r   r¥  z/_model_flow_api_key_provider.<locals>.<setcomp>k  r¦  r   rL  >   úopencode-goúopencode-zenc                ó(   •— g | ]} ‰‰|¦  «        ‘ŒS rV  rV  )r$   r&   r™  r-   s     €€r   rÐ  z0_model_flow_api_key_provider.<locals>.<listcomp>Œ  s4   ø€ ð 
ð 
ð 
Ø>AÐ'Ð'¨°SÑ9Ô9ð
ð 
ð 
r   c              3  ó   K  — | ]}|¯|V — Œ	d S r!   rV  )r$   r&   s     r   r'   z/_model_flow_api_key_provider.<locals>.<genexpr>�  s'   è è € Ð'IÐ'I°ÀSÐ'I¨Ð'IÐ'IÐ'IÐ'IÐ'IÐ'Ir   )r„   r‡   rÚ  r‘   Fr•   r”   r—   rj  rk  r˜   )4r™   rs   r1   r³   rv   rw   rx   rœ   r´   rÝ   rŽ   r�   r›   r.  r9  r˜  r™  r€   r1  r3   Úagent.gemini_native_adapterr›  rH   rd   rÞ  r@  r  rF   r   rg   r   r–  rf   rh   ri   r   rÚ   r   rÃ   r¡  r~   Úagent.models_devr£  rE   rG   rw  rC   Úfromkeysr„   rB   r   rÉ   )0r�   r-   rˆ   rs   r³   rv   rw   rx   r´   rÝ   rŽ   r�   r.  r9  r˜  r2   rm  r2  rž   r‚   r    r›  Ú
probe_baseÚtierrB  Ú_mr  Úchosen_baser•  rÚ   r   Úapi_key_for_prober  r
  r¡  Úcuratedrì  Úmdev_modelsr£  Úseenrƒ  Úmergedr‰   r„   r¢   r£   r�   r™  s0    `                                             @r   Ú_model_flow_api_key_providerr¸  Ž
  s  øø€ à/Ð/Ð/Ð/Ð/Ð/ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð   Ô,€GØ-4Ô-EÐMˆgÔ& qÔ)Ð)È2€GØÔ+Ð1¨r€Lõ %EÀ[ÐRYÑ$ZÔ$ZÑ!€L�/à)˜/ØØØØ'ð	ñ ô Ñ€L�%ð ð Øˆð �hÒÑ <Ñð	%ØEÐEÐEÐEÐEÐEÐEøÝð 	%ð 	%ð 	%Ø $ÐÐÐð	%øøøàÑ(ÝÐ1Ñ2Ô2Ð2à0<ÐD��˜|Ñ,Ô,Ð,À"ð .Ý”9˜\Ð/¨R°Ñ4Ô4ð.àÔ-ð ð
 %Ð$ \°:Ñ>Ô>ˆDØ�vŠ~ˆ~Ý‘”�ÝðBñô ð õ ð;ñô ð õ ð2ñô ð õ Ð,Ñ-Ô-Ð-Ý‘”�Ýð:ñô ð õ ð9ñô ð õ ‘”�Ýð<ñô ð õ ‘”�ÝÐBÑCÔCÐCØ�Ø�vŠ~ˆ~ÝÐ.Ñ/Ô/Ð/Ð/õ
 ÐKÑLÔLÐLÝ‰GŒGˆGð €LØð RØ$�} \Ñ2Ô2ÐQµb´iÀÈbÑ6QÔ6QˆØð ð	Ø�‘”×"Ò" 7Ñ+Ô+Ð1¨rˆBÝ�2—6’6˜*Ñ%Ô%Ð+¨Ñ,Ô,×2Ò2Ñ4Ô4×:Ò:Ñ<Ô<ÀÒKÐKÝ" 2§6¢6¨*Ñ#5Ô#5Ð#;¸Ñ<Ô<×BÒBÑDÔD�øøÝð 	ð 	ð 	ØˆDð	øøøà!Ð? WÔ%?€Nà�eÒÐõ
 +¨>Ñ:Ô:ˆØð 	6˜;¨.Ò8Ð8¸\Ð8ØˆN˜<¨Ñ5Ô5Ð5Ø$ˆˆð	ÝÐ=¨.Ð=Ð=Ð=Ñ>Ô>×DÒDÑFÔFˆHˆHøÝ!¥8Ð,ð 	ð 	ð 	Ý‰GŒGˆGØˆHˆHˆHð	øøøð ð 	*˜ð 	*Ø×&Ò&Ð'>Ñ?Ô?ð *ÝØcñô ð ð ð �˜|¨XÑ6Ô6Ð6Ø!)�ð �jÒ Ð Ø-Ð-Ð-Ð-Ð-Ð-Ø;Ð;Ð;Ð;Ð;Ð;à(ÐWÀwÐ-V¨]¨]¸7Ñ-CÔ-CÐ-CÐTVÐð	Ø.Ð.Ø)°Nðñ ô ˆJˆJøð ð 	ð 	ð 	ÝÐ<°sÐ<Ð<Ñ=Ô=Ð=ÝÐWÑXÔXÐXØˆJˆJˆJˆJˆJˆJøøøøð	øøøð ð 	HÝÐF�S ™_œ_ÐFÐFÐFÑGÔGÐGùØ	˜Ò	&Ð	&Ø?Ð?Ð?Ð?Ð?Ð?à(ÐWÀwÐ-V¨]¨]¸7Ñ-CÔ-CÐ-CÐTVÐð
 /Ð.Ø%Ø#Øð
ñ 
ô 
ˆ
ð
 ð 	KÝÐI�S ™_œ_ÐIÐIÐIÑJÔJÐJùØ	˜Ò	 Ñ	 Ø6Ð6Ð6Ð6Ð6Ð6à(ÐWÀwÐ-V¨]¨]¸7Ñ-CÔ-CÐ-CÐTVÐØ"×&Ò& {°BÑ7Ô7ˆØ&Ð&Ð'8¸.ÑIÔIˆØð 	Ø$ˆJÝÐO�S ™_œ_ÐOÐO¸W¼\ÐOÐOÐOÑPÔPÐPÑPà "ˆKðØ@Ð@Ð@Ð@Ð@Ð@à1Ð1°+Ñ>Ô>��øÝð ð ð Ø�ðøøøàð Ø7Ð7¨;Ð7Ñ7Ô7�Ý! +Ñ.Ô.�
Ø ð ,ð ,�AØ—w’w‘y”y¨Ð,Ð,Ø"×)Ò)¨!Ñ,Ô,Ð,ØŸš §¢¡¤Ñ+Ô+Ð+øÝÐT¥ Z¡¤ÐTÐTÐTÑUÔUÐUÑUà$�
Øð ÝØs¥S¨¡_¤_ÐsÐsÐsñô ð ùð #×&Ò& {°BÑ7Ô7ˆð ˆð	Ø<Ð<Ð<Ð<Ð<Ð<à-Ð-¨kÑ:Ô:ˆKˆKøÝð 	ð 	ð 	ØˆDð	øøøð ð !	ð ð 	)Ø7Ð7¨;Ð7Ñ7Ô7�Ý˜kÑ*Ô*�Ø ð ,ð ,�AØ—w’w‘y”y¨Ð,Ð,ØŸš aÑ(Ô(Ð(ØŸš §¢¡¤Ñ+Ô+Ð+øØ#�
�
à(�
ÝÐP�S ™_œ_ÐPÐPÐPÑQÔQÐQÐQØð 	�˜W™œ¨Ò*Ð*à ˆJÝØk�S ™_œ_ÐkÐkÐkñô ð ð ð !-ð !Ø*1Ð9��˜gÑ&Ô&Ð&°rð ð +Ð*Ð+<¸nÑMÔMˆKØð �s ;Ñ/Ô/µ3°w±<´<Ò?Ð?Ø(�
ÝÐS¥ Z¡¤ÐSÐSÀÄÐSÐSÐSÑTÔTÐTÐTà$�
Øð ÝØs¥S¨¡_¤_ÐsÐsÐsñô ð ð
 Ð5Ð5Ð5ð
ð 
ð 
ð 
ð 
ØEOð
ñ 
ô 
ˆ
ð 4Ð3°KÀÑOÔOˆÝ�$Ÿ-š-Ð'IÐ'I°zÐ'IÑ'IÔ'IÑIÔIÑJÔJˆ
àð ð ˆð	ØBÐBÐBÐBÐBÐBà.Ð.¨{Ñ;Ô;ÐA¸rˆGˆGøÝð 	ð 	ð 	ØˆGˆGˆGð	øøøà*Ð*ØØ'ØØ(Ø+Ø(ð
ñ 
ô 
ˆˆð	Ý˜^Ñ,Ô,×2Ò2Ñ4Ô4ˆHˆHøÝ!¥8Ð,ð 	ð 	ð 	ØˆHˆHˆHð	øøøð ð ØÐ9Ð9Ð9Ø2Ð2°;ÀÑIÔIˆHàÐ˜8Ñ$Ô$Ð$ð ˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ'ˆˆjÑØ*ˆˆjÑÝ(¨¸uÐEÑEÔEÐEØÐ9Ð9Ð9Ø 7Ð 7¸ÀXÑ NÔ NˆE�*ÑÐà�IŠI�j $Ñ'Ô'Ð'Øˆ�CÑÔÐØÐÑÔÐåÐF xÐFÐF°w´|ÐFÐFÐFÑGÔGÐGÐGÐGåˆlÑÔÐÐÐs—   ÂB ÂBÂBÇ>B!J  Ê 
J-Ê,J-Ë(%L Ì!L2Ì1L2ÎN ÎOÎ##OÏOÒ7S	 Ó	
SÓSÖ.W  × 
W×WÞ^ Þ^*Þ)^*ß !_" ß"_8ß7_8c                óè  — ddl m} ddlm}m}m} ddlm}m}m	}m
}	 ddlm}
 ddlm}  |¦   «         }d}	 ddlm}m}m}  |¦   «         }|r ||¦  «        rd	}n# t$          $ r Y nw xY wd}|r ||¦  «        r|sd	}t'          |¦  «        r| p|}| }|r·|rvdd
lm} ddlm} d}|d         j        D ]<}t1          j        |d¦  «                             ¦   «         |k    r ||¦  «        }|r nŒ=t7          d|dd…         › d|› �¦  «         n|rt7          d¦  «         t7          ¦   «          t9          d¦  «        }|dk    rd	}n|dk    rdS |�r€t7          ¦   «          t7          d¦  «         t7          ¦   «          t7          d¦  «         t7          d¦  «         t7          d¦  «         t7          ¦   «          	 t;          d¦  «                             ¦   «         }n&# t<          t>          f$ r t7          ¦   «          Y dS w xY w|dk    r ||¦  «        sdS n½|dk    r¦t7          ¦   «          t7          d¦  «         t7          ¦   «          ddl m!} 	  |d¦  «                             ¦   «         }n&# t<          t>          f$ r t7          ¦   «          Y dS w xY w|st7          d ¦  «         dS  |	||¬!¦  «         t7          d"¦  «         nt7          d#¦  «         dS t7          ¦   «          |
 "                    dg ¦  «        }|r |||d¬$¦  «        }n<	 t;          d%¦  «                             ¦   «         }n# t<          t>          f$ r d}Y nw xY w|r  ||¦  «          |¦   «         }| "                    d&¦  «        }tG          |tH          ¦  «        s|rd'|ini }||d&<   d|d(<   | %                    d)d¦  «         tM          |¦  «          ||¦  «          |¦   «          t7          d*|› d+�¦  «         dS t7          d,¦  «         dS )-uR   Flow for Anthropic provider â€” OAuth subscription, API key, or Claude Code creds.r   )Ú_run_anthropic_oauth_flowrK  )rÝ   rŽ   r�   Úsave_anthropic_api_keyr-  )Úget_anthropic_keyF)Úread_claude_code_credentialsÚis_claude_code_token_validÚ_is_oauth_tokenTr  )r³   r   Ú	anthropicz  Anthropic credentials: NrO  rP  u.     Claude Code credentials: âœ“ (auto-detected)zAnthropic credentials:rX   rY   r`  z0    1. Claude Pro/Max subscription (OAuth login)z(    2. Anthropic API key (pay-per-token)rÿ  r_   r`   ra   z>  Get an API key at: https://platform.claude.com/settings/keysrJ  z  API key (sk-ant-...): r  )Úsave_fnrQ  rU  )rˆ   rŠ   z-Model name (e.g., claude-sonnet-4-20250514): r�   r‘   r’   r6   r—   z (via Anthropic)r˜   )'r™   rº  r1   rv   rw   rx   rœ   rÝ   rŽ   r�   r»  r›   r.  r¼  Úagent.anthropic_adapterr½  r¾  r¿  rH   r   r  r  r³   r€   rÞ  r@  rg   rd   rp   rf   rh   ri   rn  rK  rF   rB   rC   rÉ   r   ) r�   rˆ   rº  rv   rw   rx   rÝ   rŽ   r�   r»  r.  r¼  rž   Úcc_availabler½  r¾  r¿  Úcc_credsÚexisting_is_stale_oauthÚ	has_credsÚ
needs_authr  r³   rX  Úvarro   rK  r{   r  r¢   r£   r�   s                                    r   Ú_model_flow_anthropicrÉ  Ç  sï  € à9Ð9Ð9Ð9Ð9Ð9ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð ð 3Ð2Ð2Ð2Ð2Ð2ð 2Ð1Ð1Ð1Ð1Ð1à$Ð$Ñ&Ô&€LØ€Lðð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 0Ð/Ñ1Ô1ˆØð 	 Ð2Ð2°8Ñ<Ô<ð 	 ØˆLøøÝð ð ð Øˆðøøøð $ÐØð '˜˜¨Ñ5Ô5ð '¸lð 'Ø"&Ðå�lÑ#Ô#ÐCÐ,CÐ(CÐTÈ€IØ�€Jàð àð 	DØIÐIÐIÐIÐIÐIØ9Ð9Ð9Ð9Ð9Ð9ð ˆMØ(¨Ô5ÔFð ð �Ý”9˜S "Ñ%Ô%×+Ò+Ñ-Ô-°Ò=Ð=Ø$?Ð$?ÀÑ$DÔ$D�MØ$ð Ø˜øÝØU¨L¸¸"¸Ô,=ÐUÐUÀmÐUÐUñô ð ð ð ð 	DÝÐBÑCÔCÐCÝ‰ŒˆÝ0Ð1IÑJÔJˆà�XÒÐØˆJˆJØ�xÒÐØˆFð ñ &å‰ŒˆÝÐ/Ñ0Ô0Ð0Ý‰ŒˆÝÐ@ÑAÔAÐAÝÐ8Ñ9Ô9Ð9ÝˆoÑÔÐÝ‰Œˆð	ÝÐ/Ñ0Ô0×6Ò6Ñ8Ô8ˆFˆFøÝ!¥8Ð,ð 	ð 	ð 	Ý‰GŒGˆGØˆFˆFð	øøøð �SŠ=ˆ=Ø,Ð,¨^Ñ<Ô<ð Ø�ðð �sŠ]ˆ]Ý‰GŒGˆGÝÐRÑSÔSÐSÝ‰GŒGˆGØEÐEÐEÐEÐEÐEðØ.Ð.Ð/IÑJÔJ×PÒPÑRÔR��øÝ%¥xÐ0ð ð ð Ý‘”�Ø��ðøøøð ð Ý�nÑ%Ô%Ð%Ø�Ø"Ð" 7°NÐCÑCÔCÐCÝÐ(Ñ)Ô)Ð)Ð)õ �.Ñ!Ô!Ð!ØˆFÝ	�G„G€Gð "×%Ò% k°2Ñ6Ô6€JØð 
Ø*Ð*ØØ'Ø(ð
ñ 
ô 
ˆˆð	ÝÐLÑMÔM×SÒSÑUÔUˆHˆHøÝ!¥8Ð,ð 	ð 	ð 	ØˆHˆHˆHð	øøøð ð ØÐ˜8Ñ$Ô$Ð$ð ˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ'ˆˆjÑØ�	Š	�*˜dÑ#Ô#Ð#Ý(¨Ñ/Ô/Ð/Øˆ�CÑÔÐØÐÑÔÐåÐA xÐAÐAÐAÑBÔBÐBÐBÐBåˆlÑÔÐÐÐsG   ¶#A Á
A'Á&A'Æ7!G ÇG<Ç;G<ÉI) É)JÊJÌ!L( Ì(L>Ì=L>)r   r   r   r   )r   r   r   r   r   r   )r-   r   r   r.   )r6   r   r5   r   r   r7   )rR   r   r   r   )r   )r~   r   r¥   rC   r   r7   )r   N)rB  r   r   r   )(Ú__doc__Ú
__future__r   rÿ   rÞ  rä  Úurllib.parsers  rœ   r   Úhermes_cli.providersr   r*   r   r,   r3   rQ   rp   r¤   r¯   r¸   rÕ   r  r'  r2  r>  rD  r‹  rÅ  rô  r#  r,  r5  rI  rZ  r€  rŒ  r–  r¸  rÉ  rV  r   r   ú<module>rÎ     s  ððð ð( #Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø Ð Ð Ð Ø Ð Ð Ð à >Ð >Ð >Ð >Ð >Ð >Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5ðÐ ð
ð ð ð ð"ð ð ð ð(Bð Bð Bð Bð ð2ð 2ð 2ð 2ð 2ð 2ðj#ð #ð #ð #ðLDð Dð Dð DðNFð Fð Fð Fð3ð 3ð 3ð 3ðlR-ð R-ð R-ð R-ðj_ð _ð _ð _ðBVð Vð Vð VðpO¸Tð Oð Oð Oð Oð Oðb.ð .ð .ð .ð`35ð 35ð 35ð 35ðlpð pð pðfnð nð nð nð`K/ð K/ð K/ðZEð Eð Eð EðNsDð sDð sDð sDðjYð Yð Yð Yðvnð nð nð nð`hð hð hð hðTKð Kð Kð Kð\eð eð eð eðN7,ð 7,ð 7,ð 7,ðtwð wð wð wðr	Uð Uð Uð Uð Uð Ur   