
    `gjB                     n    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       y)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y)QwenProfileuN   Qwen Portal — message normalization, vl_high_resolution, metadata top-level.partreturnc                     | j                  d      }t        |t              rt        |       }t        |      |d<   |dfS | dfS )N	image_urlTF)get
isinstancedict)r   r   copieds      ^/root/.hermes/venv/lib/python3.12/site-packages/plugins/model-providers/qwen-oauth/__init__.py_copy_part_if_request_mutablez)QwenProfile._copy_part_if_request_mutable   sE    HH[)	i&$ZF"&y/F;4<U{    messagesc                 b   |sg S t        |      }d}t        |      D ]  \  }}t        |t              s||j	                  d      dk(  r|}|j	                  d      }t        |t
              rt        |      }d|dg|d<   |||<   kt        |t               s|g }d}	|D ]g  }
t        |
t
              r|j                  d|
d       d}	*t        |
t              r,| j                  |
      \  }}|j                  |       |	xs |}	fd}	i |s|	st        |      }||d<   |||<   	 |||   }t        |t              rq|j	                  d      }t        |t               rP|rNt        |d	   t              r;t        |      }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   s    I>!%
!(+ 	-HCc4(!cggfo&A 
ggi(G'3'906'H&I# (GT*#% # 	'D!$,(//0NO"&#D$/262T2TUY2Z/(//@")"3V"&	' $#CyH*:HY'$,HSM5	-: !:&C#t$''),w-"72;5#CyH#'=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      s    XDcN uT#s(^UYEY?Z  :d38n)= :$tCQTH~BV :z +/3 4Z3	c3h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      sH    #  ' *X/ Xv 	/( $ r   