
    Jjr                         d Z ddlmZ ddlmZ ddlmZ  G d de          Z eddd	d
d          Z ee           dS )u$  Custom / Ollama (local) provider profile.

Covers any endpoint registered as provider="custom", including local
Ollama instances and OpenAI-compatible reasoning endpoints (GLM-5.2 on
Volcengine ARK, vLLM, llama.cpp). Key quirks:
  - ollama_num_ctx → extra_body.options.num_ctx (local context window)
  - reasoning_config disabled → extra_body.think = False
  - reasoning_config enabled + effort → top-level reasoning_effort
    (the native OpenAI-compatible format GLM/ARK expect; unset omits it
    so the endpoint's server default applies)
    )Any)register_provider)ProviderProfilec                        e Zd ZdZddddedz  dedz  dedeeeef         eeef         f         fdZ	ddd	d
dedz  dedz  de
dee         dz  f fdZ xZS )CustomProfileuA   Custom/Ollama local provider — think=false and num_ctx support.N)reasoning_configollama_num_ctxr   r	   ctxreturnc                T   i }i }|r |                     di           }||d<   ||d<   |r}t          |t                    rh|                     d          pd                                                                }|                     dd          }|dk    s|du rd|d	<   n|r||d
<   ||fS )Noptionsnum_ctxeffort enabledTnoneFthinkreasoning_effort)get
isinstancedictstriplower)	selfr   r	   r
   
extra_body	top_levelr   _effort_enableds	            M/home/rurouni/.hermes/hermes-agent/plugins/model-providers/custom/__init__.pybuild_api_kwargs_extrasz%CustomProfile.build_api_kwargs_extras   s     &(
$&	  	, nnY33G!/GI$+Jy!   	8
+;T B B 	8'++H55;BBDDJJLLG'++It<<H&  H$5$5&+
7## 807	,-9$$    g       @api_keybase_urltimeoutr#   r$   r%   c                b    |s	| j         sdS t                                          |||          S )z9Custom/Ollama: base_url is user-configured; fetch if set.Nr"   )r$   superfetch_models)r   r#   r$   r%   	__class__s       r   r(   zCustomProfile.fetch_models>   s;      	DM 	4ww##GhPW#XXXr!   )__name__
__module____qualname____doc__r   intr   tuplestrr    floatlistr(   __classcell__)r)   s   @r   r   r      s       KK
 )-%)	&% &% &% +&% d
	&%
 &% 
tCH~tCH~-	.&% &% &% &%V ##
Y 
Y 
Y t
Y *	
Y
 
Y 
cT	
Y 
Y 
Y 
Y 
Y 
Y 
Y 
Y 
Y 
Yr!   r   custom)ollamalocalvllmllamacppz	llama.cppz	llama-cpp r   i   )namealiasesenv_varsr$   default_max_tokensN)	r-   typingr   	providersr   providers.baser   r   r4   r9   r!   r   <module>rA      s   
 
       ' ' ' ' ' ' * * * * * *5Y 5Y 5Y 5Y 5YO 5Y 5Y 5Yp 
	 
 !
 
 
&  &     r!   