
    `gj                        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       y)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)ProviderProfilec                l    | xs dj                         j                  dd      d   j                         S )zBReturn the bare OpenCode model ID, tolerating aggregator prefixes. /   )striprsplitlowermodels    `/root/.hermes/venv/lib/python3.12/site-packages/plugins/model-providers/opencode-zen/__init__.py_flat_model_namer      s0    KR ''Q/399;;    c                6    t        |       j                  d      S )Nzkimi-k2r   
startswithr   s    r   _is_kimi_k2_modelr      s    E"--i88r   c                h    t        |       }|j                  d      r|j                  d      sy|dk(  S )Nz
deepseek-vzdeepseek-v3Tzdeepseek-reasonerr   r   ms     r   _is_deepseek_thinking_modelr      s2    A||L!!,,}*E###r   c                B    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  
 y wN ).0tokenr   s     r   	<genexpr>z$_is_glm_5_2_model.<locals>.<genexpr>%   s     IeuzIs   )zglm-5.2zglm-5-2zglm-5p2)r   anyr   s    @r   _is_glm_5_2_modelr$   "   s    AI'HIIIr   c                  F    e Zd ZU dZddiZded<   d
dZddd	 	 	 	 	 dd	Zy)OpenCodeGoProfilez0OpenCode Go - model-specific reasoning controls.zmimo-v2.5-proi   zdict[str, int]_MODEL_MAX_TOKENSc                j    | j                   j                  t        |            }||S | j                  S r   )r'   getr   default_max_tokens)selfr   caps      r   get_max_tokensz OpenCodeGoProfile.get_max_tokens4   s4    $$(()9%)@A?J&&&r   N)reasoning_configr   c               |   i }i }t        |      rvt        |t              s||fS |j                  d      du r||fS |j                  d      xs dj	                         j                         }|r|dk(  r||fS |dv rdnd|d	<   ||fS t        |      rt        |t              s||fS |j                  d      du}|sd
di|d<   ||fS |j                  d      xs dj	                         j                         }|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|j                  d      du rd}|sd
di|d<   ||fS t        |t              rD|j                  d      xs dj	                         j                         }|dv rd|d	<   n	|dv r||d	<   d	|vrd
di|d<   ||fS )NenabledFeffortr   none>   maxultraxhighr3   highreasoning_efforttypedisabledthinking>   lowr6   mediumT)r$   
isinstancedictr)   r   r   r   r   )r+   r.   r   context
extra_body	top_levelr1   r0   s           r   build_api_kwargs_extrasz)OpenCodeGoProfile.build_api_kwargs_extras:   sE    &(
$&	U#
 .5!9,,##I.%7!9,,&**84:AACIIKFVv-!9,,5;?X5XE^dI()y((U# .5!9,,&**95UBG*0*)=
:&!9,,&**84:AACIIKF2206	,-4406	,- "2*0))<
:&y((*51y((&-2B2F2Fy2QUZ2ZG&,j%9Jz"y((&-&**84:AACIIKF2205	,-4406	,- Y.&,i%8Jz"9$$r   )r   
str | Nonereturnz
int | None)r.   zdict | Noner   rC   rD   z%tuple[dict[str, Any], dict[str, Any]])__name__
__module____qualname____doc__r'   __annotations__r-   rB   r   r   r   r&   r&   (   sH    : 	)~ ' 264E%#.E%>H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   rC   rD   str)r   rC   rD   bool)rH   
__future__r   typingr   	providersr   providers.baser   r   r   r   r$   r&   rK   rS   r   r   r   <module>r\      s    #  ' *<
9$JW% W%t 	/&)&  	4%, ,  + r   