
    Jj                        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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    S/home/rurouni/.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                X    t          |           t          fddD                       S )zDDetect GLM-5.2 across alias spellings (glm-5.2 / glm-5-2 / glm-5p2).c              3      K   | ]}|v V  	d S N ).0tokenr   s     r   	<genexpr>z$_is_glm_5_2_model.<locals>.<genexpr>%   s'      IIeuzIIIIIIr   )zglm-5.2zglm-5-2zglm-5p2)r   anyr   s    @r   _is_glm_5_2_modelr(   "   s4    AIIII'HIIIIIIr   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 r"   )r+   getr   default_max_tokens)selfr   caps      r   get_max_tokensz OpenCodeGoProfile.get_max_tokens4   s4    $(()9%)@)@AA?J&&r   N)reasoning_configr   r3   dict | None%tuple[dict[str, Any], dict[str, Any]]c                  i }i }t          |          rt          |t                    s||fS |                    d          du r||fS |                    d          pd                                                                }|r|dk    r||fS |dv rdnd|d	<   ||fS 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effortr   none>   maxxhighr:   highreasoning_efforttypedisabledthinking>   lowr<   mediumT)r(   
isinstancedictr.   r   r   r   r   )r0   r3   r   context
extra_body	top_levelr8   r7   s           r   build_api_kwargs_extrasz)OpenCodeGoProfile.build_api_kwargs_extras:   s    &(
$&	U## 	)
 .55 -!9,,##I..%77!9,,&**844:AACCIIKKF -Vv--!9,,5;?O5O5OEEU[I()y((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,   )r3   r4   r   r   r	   r5   )__name__
__module____qualname____doc__r+   __annotations__r2   rH   r#   r   r   r*   r*   (   s         :: 	)    ' ' ' ' 264E% E% E% E% E% E% E% E%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   )rL   
__future__r   typingr   	providersr   providers.baser   r   r   r   r(   r*   rO   rW   r#   r   r   <module>r^      sY    # " " " " "       ' ' ' ' ' ' * * * * * *< < < <
9 9 9 9$ $ $ $J J J JW% W% W% W% W% W% W% W%t 	/&)&    	4%,    ,     +     r   