Ë
    uPêj#  ã                   ó¸   — U d Z ddl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 d
dlmZ dZeed<    G d„ de«      Z G d„ de«      Zy)zÂ
GigaChat Embedding Transformation

Transforms OpenAI /v1/embeddings format to GigaChat format.
API Documentation: https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/post-embeddings
é    N)ÚFinal)ÚLlmProviders)ÚLogging)ÚBaseLLMException)ÚBaseEmbeddingConfig)ÚAllEmbeddingInputValuesÚAllMessageValues)ÚEmbeddingResponseé   ©Úget_access_tokenz+https://gigachat.devices.sberbank.ru/api/v1ÚGIGACHAT_BASE_URLc                   ó   — e Zd ZdZy)ÚGigaChatEmbeddingErrorzGigaChat Embedding API error.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ús/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/gigachat/embedding/transformation.pyr   r      s   „ Ú'r   r   c                   ó   — e Zd ZdZdd„Zed„ «       Zdedee   fd„Z	de
d	e
ded
ede
f
d„Zdedz  dedz  deeedz  edz  f   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!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edede
ej4                  z  defd„Zy)"ÚGigaChatEmbeddingConfigzu
    Configuration class for GigaChat Embeddings API.

    GigaChat embeddings endpoint: POST /api/v1/embeddings
    ÚreturnNc                  ó   — y ©Nr   )Úselfs    r   Ú__init__z GigaChatEmbeddingConfig.__init__%   s   € Ør   c                 óø   — | j                   j                  «       D ��ci c]O  \  }}|j                  d«      s9t        |t        j
                  t        j                  t        t        f«      s|�||“ŒQ c}}S c c}}w )NÚ__)	Ú__dict__ÚitemsÚ
startswithÚ
isinstanceÚtypesÚFunctionTypeÚBuiltinFunctionTypeÚclassmethodÚstaticmethod)ÚclsÚkÚvs      r   Ú
get_configz"GigaChatEmbeddingConfig.get_config(   st   € ð Ÿ™×*Ñ*Ó,÷
á��1Ø—<‘< Ô%ÜØä×&Ñ&Ü×-Ñ-ÜÜ ð	ôð �ð ˆq‰Dó
ð 	
ùó 
s   žAA6Úmodelc                 ó   — g S )z8GigaChat embeddings don't support additional parameters.r   )r   r.   s     r   Úget_supported_openai_paramsz3GigaChatEmbeddingConfig.get_supported_openai_params:   s   € àˆ	r   Únon_default_paramsÚoptional_paramsÚdrop_paramsc                 ó   — |S )zAMap OpenAI params to GigaChat format (no special mapping needed).r   )r   r1   r2   r.   r3   s        r   Úmap_openai_paramsz)GigaChatEmbeddingConfig.map_openai_params>   s
   € ð Ðr   Úapi_baseÚapi_keyc                 óP   — |xs t         }t        j                  j                  ||fS )z�
        Returns provider info for GigaChat.

        Returns:
            Tuple of (custom_llm_provider, api_base, dynamic_api_key)
        )r   r   ÚGIGACHATÚvalue)r   r6   r7   s      r   Ú$_get_openai_compatible_provider_infoz<GigaChatEmbeddingConfig._get_openai_compatible_provider_infoH   s(   € ð Ò0Ô0ˆÜ×$Ñ$×*Ñ*¨H°gÐ=Ð=r   Úlitellm_paramsÚstreamc                 ó    — |xs t         }|› d�S )z-Get the complete URL for embeddings endpoint.z/embeddings)r   )r   r6   r7   r.   r2   r<   r=   Úbases           r   Úget_complete_urlz(GigaChatEmbeddingConfig.get_complete_urlV   s   € ð Ò3Ô"3ˆØ��{Ð#Ð#r   ÚinputÚheadersc                 ó‚   — t        |t        «      r|g}nt        |t        «      r|}n|g}|j                  d«      }||dœS )zÆ
        Transform OpenAI embedding request to GigaChat format.

        GigaChat format:
        {
            "model": "Embeddings",
            "input": ["text1", "text2", ...]
        }
        z	gigachat/)r.   rA   )r$   ÚstrÚlistÚremoveprefix)r   r.   rA   r2   rB   Ú
input_lists         r   Útransform_embedding_requestz3GigaChatEmbeddingConfig.transform_embedding_requestc   sO   € ô" �eœSÔ!Ø %˜w‰JÜ˜œtÔ$Ø‰Jà˜ˆJð ×"Ñ" ;Ó/ˆð Øñ
ð 	
r   Úraw_responseÚmodel_responseÚlogging_objÚrequest_datac	                 óð   — |j                  «       }	|j                  |j                  d«      |d|i|	¬«       d}
d|	v r(|	d   D ]   }d|v rd|d   v r|
|d   d   z  }
d|v sŒ|d= Œ" |
|
dœ|	d<   t        d	i |	¤ŽS )
a  
        Transform GigaChat embedding response to OpenAI format.

        GigaChat returns:
        {
            "object": "list",
            "data": [{"object": "embedding", "embedding": [...], "index": 0, "usage": {...}}],
            "model": "Embeddings"
        }
        rA   Úcomplete_input_dict)rA   r7   Úadditional_argsÚoriginal_responser   ÚdataÚusageÚprompt_tokens)rS   Útotal_tokensr   )ÚjsonÚ	post_callÚgetr
   )r   r.   rI   rJ   rK   r7   rL   r2   r<   Úresponse_jsonrT   Úembs               r   Útransform_embedding_responsez4GigaChatEmbeddingConfig.transform_embedding_responseƒ   s½   € ð*  ,×0Ñ0Ó2ˆð 	×ÑØ×"Ñ" 7Ó+ØØ2°LÐAØ+ð	 	ô 	
ð ˆØ�]Ñ"Ø$ VÑ,ò %�Ø˜c‘> o¸¸W¹Ñ&EØ  C¨¡L°Ñ$AÑA�Là˜c’>Ø˜G™ð%ð *Ø(ñ"
ˆ�gÑô
 !Ñ1 =Ñ1Ð1r   Úmessagesc                 ó4   — t        |«      }dd|› �dœ}	i |	¥|¥S )z?
        Set up headers with OAuth token for GigaChat.
        zapplication/jsonzBearer )zContent-TypeÚAuthorizationr   )
r   rB   r.   r[   r2   r<   r7   r6   Úaccess_tokenÚdefault_headerss
             r   Úvalidate_environmentz,GigaChatEmbeddingConfig.validate_environment´   s6   € ô /¨wÓ7ˆð /Ø& | nÐ5ñ"
ˆð .�/Ð- WÐ-Ð-r   Úerror_messageÚstatus_codec                 ó   — t        ||¬«      S )z%Return GigaChat-specific error class.)rb   Úmessage)r   )r   ra   rb   rB   s       r   Úget_error_classz'GigaChatEmbeddingConfig.get_error_classÊ   s   € ä%Ø#Ø!ô
ð 	
r   )r   Nr   )NN)r   r   r   r   r   r(   r-   rD   rE   r0   ÚdictÚboolr5   Útupler;   r@   r   rH   ÚhttpxÚResponser
   ÚLiteLLMLoggingObjrZ   r	   r`   ÚintÚHeadersr   re   r   r   r   r   r      s6  „ ñóð ñ
ó ð
ð"°ð ¸¸c¹ó ðà ðð ðð ð	ð
 ðð 
óð>à˜‘*ð>ð �t‘ð>ð 
ˆs�C˜$‘J  d¡
Ð*Ñ	+ó	>ð* #ñ$à˜‘*ð$ð �t‘ð$ð ð	$ð
 ð$ð ð$ð �t‘ð$ð 
ó$ð
àð
ð 'ð
ð ð	
ð
 ð
ð 
ó
ð@/2àð/2ð —n‘nð/2ð *ð	/2ð
 'ð/2ð �t‘ð/2ð ð/2ð ð/2ð ð/2ð 
ó/2ðp #Ø#ñ.àð.ð ð.ð Ð'Ñ(ð	.ð
 ð.ð ð.ð �t‘ð.ð ˜‘*ð.ð 
ó.ð,
¨Sð 
¸sð 
ÈTÐTY×TaÑTaÑMað 
Ðfvô 
r   r   )r   r%   Útypingr   ri   Úlitellmr   Ú*litellm.litellm_core_utils.litellm_loggingr   rk   Ú)litellm.llms.base_llm.chat.transformationr   Ú.litellm.llms.base_llm.embedding.transformationr   Úlitellm.types.llms.openair   r	   Úlitellm.types.utilsr
   Úauthenticatorr   r   Ú__annotations__r   r   r   r   r   ú<module>rw      sT   ðòó Ý ã å  Ý SÝ FÝ Nß OÝ 1å ,ð IÐ �5Ó Hô(Ð-ô (ôq
Ð1õ q
r   