+
    kHàj  ã            	       ó|   € R t ^ RIHt ^ RIHt ^ RIHt R R lt ! R R]4      t]! RRRR	R
RR7      t	]! ]	4       R# )zQwen Portal provider profile.)ÚAny)Úregister_provider)ÚProviderProfilec                ó>   € V ^8„  d   QhR\         R\         R,          /# )é   ÚcontentÚreturnN)Úlist)Úformats   "ÚP/home/ubuntu/.hermes/hermes-agent/plugins/model-providers/qwen-oauth/__init__.pyÚ__annotate__r      s   € ÷ 0ñ 0œdð 0¤t¨d¥{ñ 0ó    c                ót  € . Rr!V  Fœ  p\        V\        4      '       d   VP                  RRRV/4       RpK2  \        V\        4      '       dS   \        VP	                  R4      \        4      '       d   / VCR\        VR,          4      /CpRpVP                  V4       Kš  RpKž  	  V'       d   V'       d   V# R# )z�List content -> list-of-dict parts (str -> text part, image_url dicts copied,
other junk dropped). None when nothing changed (copy-on-write).FÚtypeÚtextTÚ	image_urlN)Ú
isinstanceÚstrÚappendÚdictÚget)r   ÚpartsÚchangedÚparts   &   r   Ú_normalize_partsr      s¡   € ð ˜ˆ7ÛˆÜ�dœC× Ò Ø�L‰L˜& &¨&°$Ð7Ô8ØŠGÜ˜œd×#Ò#Ü˜$Ÿ(™( ;Ó/´×6Ò6ØE˜$ÐE ¬T°$°{Õ2CÓ-DÑE�Ø�Ø�L‰L˜ÖàŠGñ ÷ Ÿgˆ5Ð/¨4Ð/r   c                   ón   a € ] tR t^t o RtV 3R lR ltRR/V 3R lR lltRRR	R/V 3R
 lR lltRtV t	R# )ÚQwenProfileuN   Qwen Portal â€” message normalization, vl_high_resolution, metadata top-level.c                ór   <€ V ^8„  d   QhRS[ S[S[S[3,          ,          RS[ S[S[S[3,          ,          /# )r   Úmessagesr   )r	   r   r   r   )r
   Ú__classdict__s   "€r   r   ÚQwenProfile.__annotate__   s6   ø€ ÷ ñ ©©d±3¹°8­nÕ)=ð Á$ÁtÉCÑQTÈHÅ~ÕBVñ r   c                óœ  € V'       g   . # \        V4      pRp\        V4       F¤  w  rE\        V\        4      '       g   K  Vf   VP	                  R4      R8X  d   TpVP	                  R4      p\        V\
        4      '       d   / VCRRRRV/./CW$&   Kq  \        V\         4      '       g   K‰  \        V4      pVf   Kš  / VCRV/CW$&   K¦  	  Ve~   W#,          pVP	                  R4      p\        V\         4      '       dO   V'       dG   \        VR	,          \        4      '       d*   \        V4      p/ VR	,          CRRR//CVR	&   / VCRV/CW#&   V# )
z‘Normalize content to list-of-dicts and inject cache_control on the (first)
system message. Copy-on-write: only touched messages/parts are copied.NÚroleÚsystemr   r   r   Úcache_controlÚ	ephemeraléÿÿÿÿ)r	   Ú	enumerater   r   r   r   r   )	Úselfr   ÚpreparedÚ
system_idxÚidxÚmsgr   r   Úcontent_copys	   &&       r   Úprepare_messagesÚQwenProfile.prepare_messages   s@  € ÷ ØˆIÜ˜“>ˆØ!%ˆ
Ü! (Ö+‰HˆCÜ˜c¤4×(Ò(ÙØÒ! c§g¡g¨f£o¸Ô&AØ �
Ø—g‘g˜iÓ(ˆGÜ˜'¤3×'Ò'Ø W 3Ð W¨	°V¸VÀVÈWÐ4UÐ3VÑ W�“Ü˜G¤T×*Ô*Ü(¨Ó1�ØÔ$Ø$= sÐ$=¨I°uÑ$=�H“Mñ ,ð Ò!ØÕ&ˆCØ—g‘g˜iÓ(ˆGÜ˜'¤4×(Ò(¯W¼ÀGÈBÅKÔQU×9VÒ9VÜ# G›}�Ø#_ l°2Õ&6Ð#_¸È&ÐR]ÐI^Ñ#_�˜RÑ Ø'G¨#Ð'G¨y¸,Ñ'G�Ñ$Øˆr   Ú
session_idNc                óJ   <€ V ^8„  d   QhRS[ R,          RS[S[ S[3,          /# )r   r0   Nr   )r   r   r   )r
   r   s   "€r   r   r    9   s*   ø€ ÷ 3ñ 3©c°D­jð 3ÉtÑTWÑY\ÐT\Í~ñ 3r   c               ó
   € R R/# )Úvl_high_resolution_imagesT© )r(   r0   Úcontexts   &$,r   Úbuild_extra_bodyÚQwenProfile.build_extra_body9   s   € Ø+¨TÐ2Ð2r   Úreasoning_configÚqwen_session_metadatac          
      óŠ   <€ V ^8„  d   QhRS[ R,          RS[ R,          RS[S[ S[S[3,          S[ S[S[3,          3,          /# )r   r8   Nr9   r   )r   Útupler   r   )r
   r   s   "€r   r   r    <   sM   ø€ ÷ Xñ XÙ#'¨$¥;ðXÙNRÐUYÍkðXá	‰t‘C™�H�~™t¡C© H�~Ð-Õ	.ñXr   c               ó$   € / V'       d   RV/3# / 3# )z;Qwen metadata goes to top-level api_kwargs, not extra_body.Úmetadatar4   )r(   r8   r9   r5   s   &$$,r   Úbuild_api_kwargs_extrasÚ#QwenProfile.build_api_kwargs_extras<   s!   € ð ×:O�JÐ 5Ð6ÐWÐWÐUWÐWÐWr   r4   )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r.   r6   r>   Ú__static_attributes__Ú__classdictcell__)r   s   @r   r   r      sG   ø‡ € ÙX÷ð ð83¸4÷ 3ò 3ðXØ15ðXØ\`÷X÷ Xð Xr   r   z
qwen-oauthzhttps://portal.qwen.ai/v1Úoauth_externali   )ÚnameÚaliasesÚenv_varsÚbase_urlÚ	auth_typeÚdefault_max_tokensN)Úqwenzqwen-portalzqwen-cli)ÚQWEN_API_KEY)
rD   Útypingr   Ú	providersr   Úproviders.baser   r   r   rN   r4   r   r   Ú<module>rS      sM   ðÙ #Ý å 'Ý *õ0ô$&X�/ô &XñR Ø	ÐBÐM^Ø(Ð4DÐY^ô€ñ
 �$Ö r   