Ë
    uPêjF  ã                   ó†   — d Z ddlmZ ddlmZmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ d	ed
efd„Z G d„ de«      Zy)zX
Translates from OpenAI's `/v1/chat/completions` to ModelScope's `/v1/chat/completions`
é    )Ú	Coroutine)ÚAnyÚFinalÚLiteralÚcastÚoverload)Úoverride)Úget_secret_str)ÚAllMessageValuesé   )ÚOpenAIGPTConfigÚmessageÚreturnc                 ój   — | j                  d«      }t        |t        «      syt        d„ |D «       «      S )z?Check if a message has non-text content items (e.g. image_url).ÚcontentFc              3   óD   K  — | ]  }|j                  d «      dk7  –— Œ y­w)ÚtypeÚtextN©Úget©Ú.0Úitems     úp/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/modelscope/chat/transformation.pyú	<genexpr>z(_has_non_text_content.<locals>.<genexpr>   s   è ø€ Ò>¨dˆt�x‰x˜Ó 6Õ)Ñ>ùs   ‚ )r   Ú
isinstanceÚlistÚany)r   r   s     r   Ú_has_non_text_contentr      s.   € à—[‘[ Ó+€GÜ�gœtÔ$ØÜÑ>°gÔ>Ó>Ð>ó    c                   óZ  ‡ — e Zd ZU dZeed<   edee   dede	d   de
eeee   f   fd„«       Ze	 ddee   dede	d	   dee   fd
„«       Z	 ddee   dededee   e
eeee   f   z  fˆ fd„Zdedz  dedz  deedz  edz  f   fd„Ze	 ddedz  dedz  dededededz  defd„«       Zˆ xZS )ÚModelScopeChatConfigz&https://api-inference.modelscope.cn/v1ÚDEFAULT_BASE_URLÚmessagesÚmodelÚis_asyncTr   c                  ó   — y ©N© ©Úselfr$   r%   r&   s       r   Ú_transform_messagesz(ModelScopeChatConfig._transform_messages   s   € ð 7:r    Fc                  ó   — y r(   r)   r*   s       r   r,   z(ModelScopeChatConfig._transform_messages    s   € ð "%r    c                 ó8  •— |D �cg c]  }t        t        i |¥«      ‘Œ }}|D ]K  }t        |«      rŒ|j                  d«      }t	        |t
        «      sŒ1dj                  d„ |D «       «      |d<   ŒM |rt        ‰| �!  ||d¬«      S t        ‰| �!  ||d¬«      S c c}w )zâ
        Flatten text-only content lists to strings for ModelScope.

        Messages with non-text content (e.g. image_url for vision models)
        are kept as lists so the parent class can normalize them properly.
        r   Ú c              3   óF   K  — | ]  }|j                  d «      xs d–— Œ y­w)r   r/   Nr   r   s     r   r   z;ModelScopeChatConfig._transform_messages.<locals>.<genexpr>7   s!   è ø€ Ò,XÈ¨T¯X©X°fÓ-=Ò-CÀÓ-CÑ,Xùs   ‚!T)r$   r%   r&   F)	r   r   r   r   r   r   ÚjoinÚsuperr,   )r+   r$   r%   r&   Úmr   r   Ú	__class__s          €r   r,   z(ModelScopeChatConfig._transform_messages(   s®   ø€ ð <DÖD°a”DÔ)¨5¨a¨5Õ1ÐDˆÐDØò 	YˆGÜ$ WÔ-ØØ—k‘k )Ó,ˆGÜ˜'¤4Õ(Ø%'§W¡WÑ,XÐPWÔ,XÓ%X�˜	Ò"ð	Yñ Ü‘7Ñ.¸ÈÐX\Ð.Ó]Ð]ä‘7Ñ.¸ÈÐX]Ð.Ó^Ð^ùò Es   †BÚapi_baseNÚapi_keyc                 ób   — |xs t        d«      xs | j                  }|xs t        d«      }||fS )NÚMODELSCOPE_API_BASEÚMODELSCOPE_API_KEY)r
   r#   )r+   r5   r6   Údynamic_api_keys       r   Ú$_get_openai_compatible_provider_infoz9ModelScopeChatConfig._get_openai_compatible_provider_info>   s:   € ð Ò]œ~Ð.CÓDÒ]È×H]ÑH]ˆØ!(Ò!P¬NÐ;OÓ,PˆØ˜Ð(Ð(r    Úoptional_paramsÚlitellm_paramsÚstreamc                 óN   — |s| j                   }|j                  d«      s|› d�}|S )ze
        If api_base is not provided, use the default ModelScope /chat/completions endpoint.
        z/chat/completions)r#   Úendswith)r+   r5   r6   r%   r<   r=   r>   s          r   Úget_complete_urlz%ModelScopeChatConfig.get_complete_urlE   s3   € ñ Ø×,Ñ,ˆHà× Ñ Ð!4Ô5Ø"˜Ð#4Ð5ˆHàˆr    )Fr(   )Ú__name__Ú
__module__Ú__qualname__r#   ÚstrÚ__annotations__r   r   r   r   r   r   r,   ÚboolÚtupler;   r	   ÚdictrA   Ú__classcell__)r4   s   @r   r"   r"      sŸ  ø… ØDÐ�cÓDàð:ØÐ-Ñ.ð:Ø7:ð:ØFMÈdÁmð:à	�3˜˜TÐ"2Ñ3Ð3Ñ	4ò:ó ð:ð ð
 $)ñ	%àÐ'Ñ(ð%ð ð%ð ˜%‘.ð	%ð
 
ÐÑ	ò%ó ð%ð NSñ_ØÐ-Ñ.ð_Ø7:ð_ØFJð_à	ÐÑ	 )¨C°°dÐ;KÑ6LÐ,LÑ"MÑ	Mõ_ð,)Ø˜d™
ð)Ø-0°4©Zð)à	ˆs�T‰z˜3 ™:Ð%Ñ	&ó)ð ð #ñà˜‘*ðð �t‘ðð ð	ð
 ðð ðð �t‘ðð 
òó ôr    r"   N)Ú__doc__Úcollections.abcr   Útypingr   r   r   r   r   Útyping_extensionsr	   Úlitellm.secret_managers.mainr
   Úlitellm.types.llms.openair   Úopenai.chat.gpt_transformationr   rG   r   r"   r)   r    r   ú<module>rR      sC   ðñõ &ß 6Õ 6å &å 7Ý 6å =ð?Ð#3ð ?¸ó ?ô@˜?õ @r    