Ë
    uPêj/  ã                   óž   — U d Z ddlmZ ddlZddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZmZ dd	lmZmZ d
dlmZ dZeed<    G d„ de
«      Zy)a(  
Transformation logic from OpenAI /v1/embeddings format to DashScope's /v1/embeddings format.

Supports
- text-embedding-v4
- text-embedding-v3

Endpoint
- https://dashscope.aliyuncs.com/compatible-mode/v1/embeddings

Docs - https://help.aliyun.com/zh/model-studio/text-embedding-synchronous-api
é    )ÚFinalN)ÚLogging)ÚBaseLLMException)ÚBaseEmbeddingConfig)Úget_secret_str)ÚAllEmbeddingInputValuesÚAllMessageValues)ÚEmbeddingResponseÚUsageé   )ÚDashScopeErrorz1https://dashscope.aliyuncs.com/compatible-mode/v1ÚDEFAULT_API_BASEc                   ó\  — e Zd ZdZdd„Zdedee   fd„Z	 ddededed	e	def
d
„Z
	 	 ddededee   dedededz  dedz  defd„Z	 d dedz  dedz  dededede	dz  defd„Zdededededef
d„Zdedej"                  dedededz  dedededefd„Zdededeej,                  z  defd„Zy)!ÚDashScopeEmbeddingConfigzé
    Reference: https://help.aliyun.com/zh/model-studio/text-embedding-synchronous-api

    DashScope exposes an OpenAI-compatible /v1/embeddings endpoint, so the
    request and response shapes are nearly identical to OpenAI's.
    ÚreturnNc                  ó   — y ©N© )Úselfs    úp/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/dashscope/embed/transformation.pyÚ__init__z!DashScopeEmbeddingConfig.__init__&   s   € Øó    Úmodelc                 ó
   — g d¢S )N©Ú
dimensionsÚencoding_formatÚuserr   )r   r   s     r   Úget_supported_openai_paramsz4DashScopeEmbeddingConfig.get_supported_openai_params)   s
   € ò 9Ð8r   Únon_default_paramsÚoptional_paramsÚdrop_paramsc                 ór   — | j                  |«      }|j                  «       D ]  \  }}|€Œ	||v sŒ|||<   Œ |S r   )r   Úitems)r   r    r!   r   r"   Ú	supportedÚkÚvs           r   Úmap_openai_paramsz*DashScopeEmbeddingConfig.map_openai_params/   sQ   € ð  ×;Ñ;¸EÓBˆ	Ø&×,Ñ,Ó.ò 	'‰DˆAˆqØˆyØØ�IŠ~Ø%&� Ò"ð		'ð Ðr   ÚheadersÚmessagesÚlitellm_paramsÚapi_keyÚapi_basec                 óR   — |€t        d«      }|€t        d«      ‚dd|› �dœ}i |¥|¥S )NÚDASHSCOPE_API_KEYzZDashScope API key is required. Set 'DASHSCOPE_API_KEY' env var or pass api_key explicitly.zapplication/jsonzBearer )zContent-TypeÚAuthorization)r   Ú
ValueError)	r   r)   r   r*   r!   r+   r,   r-   Údefault_headerss	            r   Úvalidate_environmentz-DashScopeEmbeddingConfig.validate_environmentA   sQ   € ð ˆ?Ü$Ð%8Ó9ˆGØˆ?ÜØlóð ð /Ø& w iÐ0ñ"
ˆð .�/Ð- WÐ-Ð-r   Ústreamc                 ó‚   — |xs t        d«      xs t        }|j                  d«      }|j                  d«      r|S |› d�S )NÚDASHSCOPE_API_BASEú/z/embeddings)r   r   ÚrstripÚendswith)r   r-   r,   r   r!   r+   r4   Úbases           r   Úget_complete_urlz)DashScopeEmbeddingConfig.get_complete_urlW   sF   € ð ÒSœ>Ð*>Ó?ÒSÔCSˆØ�{‰{˜3ÓˆØ�=‰=˜Ô'ØˆKØ��{Ð#Ð#r   Úinputc                 óP   — ||dœ}dD ]  }|j                  |«      }|€Œ|||<   Œ |S )N)r   r<   r   )Úget)r   r   r<   r!   r)   ÚdataÚkeyÚvalues           r   Útransform_embedding_requestz4DashScopeEmbeddingConfig.transform_embedding_requestf   sH   € ð Øñ
ˆð =ò 	"ˆCØ#×'Ñ'¨Ó,ˆEØÑ Ø!��S’	ð	"ð ˆr   Úraw_responseÚmodel_responseÚlogging_objÚrequest_datac	           	      ó¬  — 	 |j                  «       }	|j	                  |j                  d«      |d|i|	¬«       d|	v rR|	d   }t        |t        «      r|j                  dt        |«      «      n
t        |«      }t        |j                  |¬«      ‚d|_	        |	j                  d	g «      |_
        |	j                  d
|«      |_        |	j                  d«      xs i }|j                  dd«      }|j                  d|«      }t        |dt        |d|¬«      «       d|	v rt        |d|	d   «       |S # t        $ r}
t        |j                  d|
› �¬«      ‚d }
~
ww xY w)Nz,Failed to parse DashScope response as JSON: )Ústatus_codeÚmessager<   Úcomplete_input_dict)r<   r,   Úadditional_argsÚoriginal_responseÚerrorrI   Úlistr?   r   ÚusageÚprompt_tokensr   Útotal_tokens)rP   Úcompletion_tokensrQ   Úid)ÚjsonÚ	Exceptionr   rH   Ú	post_callr>   Ú
isinstanceÚdictÚstrÚobjectr?   r   Úsetattrr   )r   r   rC   rD   rE   r,   rF   r!   r+   Úresponse_jsonÚerM   rI   rO   rP   rQ   s                   r   Útransform_embedding_responsez5DashScopeEmbeddingConfig.transform_embedding_responsew   sv  € ð	Ø#/×#4Ñ#4Ó#6ˆMð 	×ÑØ×"Ñ" 7Ó+ØØ2°LÐAØ+ð	 	ô 	
ð �mÑ#Ø(¨Ñ1ˆEÜAKÈEÔSWÔAX˜UŸY™Y y´#°e³*Ô=Ô^aÐbgÓ^hˆGÜ Ø(×4Ñ4Øôð ð
 !'ˆÔØ+×/Ñ/°¸Ó;ˆÔØ,×0Ñ0°¸%Ó@ˆÔà$×(Ñ(¨Ó1Ò7°RˆØ$Ÿy™y¨¸!Ó<ˆØ#Ÿi™i¨¸ÓFˆÜØØÜØ+Ø"#Ø)ôô	
ð �=Ñ Ü�N D¨-¸Ñ*=Ô>àÐøôS ò 	Ü Ø(×4Ñ4ØFÀqÀcÐJôð ûð	ús   ‚D+ Ä+	EÄ4EÅEÚerror_messagerH   c                 óh   — t        |t        «      rt        j                  |«      }t	        |||¬«      S )N)rH   rI   r)   )rW   rX   ÚhttpxÚHeadersr   )r   r_   rH   r)   s       r   Úget_error_classz(DashScopeEmbeddingConfig.get_error_class¯   s2   € ô �gœtÔ$Ü—m‘m GÓ,ˆGÜØ#Ø!Øô
ð 	
r   )r   N)F)NNr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rY   rN   r   rX   Úboolr(   r	   r3   r;   r   rB   ra   ÚResponser
   ÚLiteLLMLoggingObjr^   Úintrb   r   rc   r   r   r   r   r      sï  „ ñóð9°ð 9¸¸c¹ó 9ð "ñà ðð ðð ð	ð
 ðð 
óð2 #Ø#ñ.àð.ð ð.ð Ð'Ñ(ð	.ð
 ð.ð ð.ð �t‘ð.ð ˜‘*ð.ð 
ó.ð: #ñ$à˜‘*ð$ð �t‘ð$ð ð	$ð
 ð$ð ð$ð �t‘ð$ð 
ó$ðàðð 'ðð ð	ð
 ðð 
óð"6àð6ð —n‘nð6ð *ð	6ð
 'ð6ð �t‘ð6ð ð6ð ð6ð ð6ð 
ó6ðp
àð
ð ð
ð ˜Ÿ™Ñ%ð	
ð
 
ô
r   r   )rg   Útypingr   ra   Ú*litellm.litellm_core_utils.litellm_loggingr   rj   Ú)litellm.llms.base_llm.chat.transformationr   Ú.litellm.llms.base_llm.embedding.transformationr   Úlitellm.secret_managers.mainr   Úlitellm.types.llms.openair   r	   Úlitellm.types.utilsr
   r   Úcommon_utilsr   r   Ú__annotations__r   r   r   r   ú<module>ru      sA   ðòõ ã å SÝ FÝ NÝ 7ß Oß 8å )àMÐ �%Ó Mô]
Ð2õ ]
r   