o
    ưi                     @   s   d Z ddlmZmZmZmZmZ ddlZddl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	d
lmZmZ G dd deZdS )z_
Volcengine Embedding Transformation
Transforms OpenAI embedding requests to Volcengine format
    )ListOptionalUnionDictAnyN)AllEmbeddingInputValuesAllMessageValues)EmbeddingResponse)Logging)BaseEmbeddingConfig)BaseLLMException   )get_volcengine_base_urlget_volcengine_headersc                       sr  e Zd ZdZ	d(dee ddfddZe fddZd	ede	e fd
dZ
	d(dee dee d	edededee defddZdeeef deeef d	ededeeef f
ddZd	ededededef
ddZd	edejdededee dedededefdd Z		d)ded	ed!e	e dededee dee defd"d#Zd$ed%edeeejf defd&d'Z  ZS )*VolcEngineEmbeddingConfigz
    Configuration class for Volcengine embedding models.
    Reference: https://ark.cn-beijing.volces.com/api/v3/embeddings
    Nencoding_formatreturnc                 C   s>   t   }| D ]\}}|dkr|d urt| j|| q	d S )Nself)localscopyitemssetattr	__class__)r   r   Zlocals_keyvalue r   g/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/volcengine/embedding/transformation.py__init__   s   
z"VolcEngineEmbeddingConfig.__init__c                    s
   t   S N)super
get_config)clsr   r   r   r       s   
z$VolcEngineEmbeddingConfig.get_configmodelc                 C   s   g dS )z
        Get the list of OpenAI parameters supported by Volcengine embedding models.

        Args:
            model: The model name

        Returns:
            List of supported parameter names
        )r   userextra_headersr   )r   r#   r   r   r   get_supported_openai_params#   s   
z5VolcEngineEmbeddingConfig.get_supported_openai_paramsapi_baseapi_keyoptional_paramslitellm_paramsstreamc                 C   s&   t |}|dr| dS | dS )aJ  
        Get the complete URL for volcengine embedding API calls.
        
        Args:
            api_base: Optional custom API base URL
            api_key: API key (not used for URL construction)
            model: Model name (not used for URL construction)
            optional_params: Optional parameters (not used for URL construction)
            litellm_params: LiteLLM parameters (not used for URL construction)
            stream: Stream parameter (not used for URL construction)
            
        Returns:
            Complete URL for the embedding API endpoint
        z/api/v3z/embeddingsz/api/v3/embeddings)r   endswith)r   r'   r(   r#   r)   r*   r+   base_urlr   r   r   get_complete_url3   s   


z*VolcEngineEmbeddingConfig.get_complete_urlnon_default_paramsdrop_paramsc                 C   s   |  D ]:\}}|dkr |dv r||d< q|std| dq|dkr)||d< q|| |v r5|||< q|s>td| q|S )az  
        Map OpenAI embedding parameters to Volcengine format.

        Args:
            non_default_params: Parameters that are not default values
            optional_params: Optional parameters dict to update
            model: The model name
            drop_params: Whether to drop unsupported parameters

        Returns:
            Updated optional_params dict
        r   )floatbase64NzUnsupported encoding_format: z*. Volcengine supports: float, base64, nullr$   z&Unsupported parameter for Volcengine: )r   
ValueErrorr&   )r   r/   r)   r#   r0   paramr   r   r   r   map_openai_paramsQ   s"   



z+VolcEngineEmbeddingConfig.map_openai_paramsinputheadersc                 C   s^   |t |tr|n|gd}d|v r|d }|dur||d< d|v r-|d }|dur-||d< |S )z0Transform embedding request to Volcengine format)r#   r6   r   Nr$   )
isinstancelist)r   r#   r6   r)   r7   datar   r$   r   r   r   transform_embedding_requestz   s   
z5VolcEngineEmbeddingConfig.transform_embedding_requestraw_responsemodel_responselogging_objrequest_datac	              
   C   s   z|  }	W n ty }
 z	tdt|
 d}
~
ww d|	dg |	d||	di d}d|	v r9|	d |d< td	i |S )
z2Transform Volcengine response to EmbeddingResponsez-Failed to parse Volcengine response as JSON: Nr9   r:   r#   usage)objectr:   r#   r@   idr   )json	Exceptionr3   strgetr	   )r   r#   r<   r=   r>   r(   r?   r)   r*   Zresponse_jsoneZtransformed_responser   r   r   transform_embedding_response   s   


z6VolcEngineEmbeddingConfig.transform_embedding_responsemessagesc           	      C   s$   |du rt dt|}i ||S )z'Validate environment and return headersNz1api_key is required for Volcengine authentication)r3   r   )	r   r7   r#   rI   r)   r*   r(   r'   Zvolcengine_headersr   r   r   validate_environment   s   z.VolcEngineEmbeddingConfig.validate_environmenterror_messagestatus_codec                 C   s.   ddl m} t|trt|}||||dS )z%Get error class for Volcengine errorsr   )VolcEngineError)rL   messager7   )common_utilsrM   r8   dicthttpxHeaders)r   rK   rL   r7   rM   r   r   r   get_error_class   s   

z)VolcEngineEmbeddingConfig.get_error_classr   )NN) __name__
__module____qualname____doc__r   rE   r   classmethodr    r   r&   rP   boolr.   r   r   r5   r   r;   rQ   Responser	   LiteLLMLoggingObjrH   r   rJ   intr   rR   r   rS   __classcell__r   r   r"   r   r      s    
	




)
	

(	
r   )rW   typingr   r   r   r   r   rQ   Zlitellm.types.llms.openair   r   Zlitellm.types.utilsr	   Z*litellm.litellm_core_utils.litellm_loggingr
   r[   Z.litellm.llms.base_llm.embedding.transformationr   Z)litellm.llms.base_llm.chat.transformationr   rO   r   r   r   r   r   r   r   <module>   s    