
    nSjB                         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d          Z ee           dS )zQwen Portal provider profile.    )Any)register_provider)ProviderProfilec                   .   e Zd ZdZedeeef         deeeef         e	f         fd            Z
deeeef                  deeeef                  fdZddd	edz  deeef         fd
Zddddedz  dedz  deeeef         eeef         f         fdZdS )QwenProfileuN   Qwen Portal — message normalization, vl_high_resolution, metadata top-level.partreturnc                     |                      d          }t          |t                    r%t          |           }t          |          |d<   |dfS | dfS )N	image_urlTF)get
isinstancedict)r   r   copieds      M/home/ice/.hermes/hermes-agent/plugins/model-providers/qwen-oauth/__init__.py_copy_part_if_request_mutablez)QwenProfile._copy_part_if_request_mutable   sT    HH[))	i&& 	 $ZZF"&y//F;4<U{    messagesc                 "   |sg S t          |          }d}t          |          D ]5\  }}t          |t                    s||                    d          dk    r|}|                    d          }t          |t
                    rt          |          }d|dg|d<   |||<   t          |t                     rg }d}	|D ]{}
t          |
t
                    r|                    d|
d           d}	2t          |
t                    r2|                     |
          \  }}|                    |           |	p|}	yd}	||r|	rt          |          }||d<   |||<   7|||         }t          |t                    r|                    d          }t          |t                     rj|rht          |d	         t                    rMt          |          }t          |          }t          |d	                   |d	<   d
di|d	         d<   ||d<   |||<   |S )zNormalize content to list-of-dicts format.

        Inject cache_control on system message.

        Matches the behavior of run_agent.py:_qwen_prepare_chat_messages().
        Nrolesystemcontenttext)typer   FTr   	ephemeralcache_control)list	enumerater   r   r   strappendr   )selfr   prepared
system_idxidxmsgr   msg_copynormalized_partschangedr   normalized_partr   content_copys                 r   prepare_messageszQwenProfile.prepare_messages   sb     	I>>!%
!(++ 	- 	-HCc4(( !cggfoo&A&A 
ggi((G'3'' -9906'H'H&I# (GT** -#% # 	' 	'D!$,, '(//0N0NOOO"&#D$// '262T2TUY2Z2Z/(//@@@")"3V"&# - -#CyyH*:HY'$,HSM !:&C#t$$ 4''),,w--
4
4 #72;55
4
  $CyyH#'==L'+L,<'='=L$9?8ML$_5*6HY'+3HZ(r   N)
session_idr,   c                
    ddiS )Nvl_high_resolution_imagesT )r!   r,   contexts      r   build_extra_bodyzQwenProfile.build_extra_bodyP   s     ,T22r   )reasoning_configqwen_session_metadatar2   r3   c                    i }|r||d<   i |fS )z;Qwen metadata goes to top-level api_kwargs, not extra_body.metadatar/   )r!   r2   r3   r0   	top_levels        r   build_api_kwargs_extrasz#QwenProfile.build_api_kwargs_extrasU   s%     	  	:$9Ij!9}r   )__name__
__module____qualname____doc__staticmethodr   r   r   tupleboolr   r   r+   r1   r7   r/   r   r   r   r      sD       XXDcN uT#s(^UYEY?Z    \:d38n)= :$tCQTH~BV : : : :z +/3 3 3 4Z3	c3h3 3 3 3 )--1	   +  $d{	 
tCH~tCH~-	.     r   r   z
qwen-oauth)qwenzqwen-portalzqwen-cli)QWEN_API_KEYzhttps://portal.qwen.ai/v1oauth_externali   )namealiasesenv_varsbase_url	auth_typedefault_max_tokensN)	r;   typingr   	providersr   providers.baser   r   r?   r/   r   r   <module>rK      s    # #       ' ' ' ' ' ' * * * * * *X X X X X/ X X Xv {	/(    $     r   