
    L0&j                        d Z ddlmZ ddlmZ ddlmZ ddlmZ dd
Z	ddZ
ddZ G d de          Z eddddd          Z eddddd          Z ee            ee           dS )u9  OpenCode provider profiles (Zen + Go).

Both use per-model api_mode routing:
  - OpenCode Zen: Claude → anthropic_messages, GPT-5/Codex → codex_responses,
    everything else → chat_completions (this profile)
  - OpenCode Go: MiniMax → anthropic_messages, GLM/Kimi → chat_completions
    (this profile)
    )annotations)Any)register_provider)ProviderProfilemodel
str | Nonereturnstrc                    | pd                                                     dd          d                                         S )zBReturn the bare OpenCode model ID, tolerating aggregator prefixes. /   )striprsplitlowerr   s    R/home/ubuntu/.hermes/hermes-agent/plugins/model-providers/opencode-zen/__init__.py_flat_model_namer      s9    KR  ''Q//399;;;    boolc                F    t          |                               d          S )Nzkimi-k2r   
startswithr   s    r   _is_kimi_k2_modelr      s    E""--i888r   c                    t          |           }|                    d          r|                    d          sdS |dk    S )Nz
deepseek-vzdeepseek-v3Tzdeepseek-reasonerr   )r   ms     r   _is_deepseek_thinking_modelr      sG    A||L!! !,,}*E*E t###r   c                  >    e Zd ZU dZddiZded<   dd
ZdddddZdS )OpenCodeGoProfilez0OpenCode Go - model-specific reasoning controls.zmimo-v2.5-proi   zdict[str, int]_MODEL_MAX_TOKENSr   r   r	   
int | Nonec                f    | j                             t          |                    }||S | j        S )N)r!   getr   default_max_tokens)selfr   caps      r   get_max_tokensz OpenCodeGoProfile.get_max_tokens.   s4    $(()9%)@)@AA?J&&r   N)reasoning_configr   r)   dict | None%tuple[dict[str, Any], dict[str, Any]]c                  i }i }t          |          rt          |t                    s||fS |                    d          du}|sddi|d<   ||fS |                    d          pd                                                                }|dv rd	|d
<   n	|dv r||d
<   d
|vrddi|d<   ||fS t          |          s||fS d}t          |t                    r|                    d          du rd}|sddi|d<   ||fS t          |t                    rN|                    d          pd                                                                }|dv rd|d
<   n	|dv r||d
<   d
|vrddi|d<   ||fS )NenabledFtypedisabledthinkingeffortr   >   maxxhighhighreasoning_effort>   lowr4   mediumTr2   )r   
isinstancedictr$   r   r   r   )r&   r)   r   context
extra_body	top_levelr-   r1   s           r   build_api_kwargs_extrasz)OpenCodeGoProfile.build_api_kwargs_extras4   s    &(
$&	U## 	) .55 -!9,,&**955UBG -*0*)=
:&!9,,&**844:AACCIIKKF)))06	,--44406	,- "22*0))<
:&y((*511 	)y((&-- 	2B2F2Fy2Q2QUZ2Z2ZG 	)&,j%9Jz"y((&-- 	7&**844:AACCIIKKF)))05	,--44406	,- Y..&,i%8Jz"9$$r   )r   r   r	   r"   )r)   r*   r   r   r	   r+   )__name__
__module____qualname____doc__r!   __annotations__r(   r=    r   r   r    r    "   sx         :: 	)    ' ' ' ' 2646% 6% 6% 6% 6% 6% 6% 6%r   r    zopencode-zen)opencodeopencode_zenzen)OPENCODE_ZEN_API_KEYzhttps://opencode.ai/zen/v1zgemini-3-flash)namealiasesenv_varsbase_urldefault_aux_modelzopencode-go)opencode_gogozopencode-go-sub)OPENCODE_GO_API_KEYzhttps://opencode.ai/zen/go/v1zglm-5N)r   r   r	   r
   )r   r   r	   r   )rA   
__future__r   typingr   	providersr   providers.baser   r   r   r   r    rE   rM   rC   r   r   <module>rT      sA    # " " " " "       ' ' ' ' ' ' * * * * * *< < < <
9 9 9 9$ $ $ $H% H% H% H% H% H% H% H%V 	/&)&    	4%,    ,     +     r   