
    j                         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e      Zy)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                       e Zd ZdZ	 ddee   ddfdZe fd       Zdede	e   fdZ
	 dd	ee   d
ee   dedededee   defdZdeeef   deeef   dededeeef   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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e   d	ee   defdZdededeeej8                  f   defdZ xZS )!VolcEngineEmbeddingConfigz
    Configuration class for Volcengine embedding models.
    Reference: https://ark.cn-beijing.volces.com/api/v3/embeddings
    Nencoding_formatreturnc                     t               j                         }|j                         D ]%  \  }}|dk7  s|t        | j                  ||       ' y )Nself)localscopyitemssetattr	__class__)r   r   locals_keyvalues        /Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/litellm/llms/volcengine/embedding/transformation.py__init__z"VolcEngineEmbeddingConfig.__init__   sA     (--/!--/JCf}!2U3 *    c                      t         |          S N)super
get_config)clsr   s    r   r%   z$VolcEngineEmbeddingConfig.get_config   s    w!##r!   modelc                 
    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_headers )r   r'   s     r   get_supported_openai_paramsz5VolcEngineEmbeddingConfig.get_supported_openai_params#   s    
 	
r!   api_baseapi_keyoptional_paramslitellm_paramsstreamc                 N    t        |      }|j                  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/   r0   r1   base_urls           r   get_complete_urlz*VolcEngineEmbeddingConfig.get_complete_url3   s7    . +84Y'Z{++Z122r!   non_default_paramsdrop_paramsc                     |j                         D ]Z  \  }}|dk(  r|dv r||d<   |rt        d| d      |dk(  r||d<   2|| j                  |      v r|||<   K|rNt        d|        |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   r6   r/   r'   r7   paramr   s          r   map_openai_paramsz+VolcEngineEmbeddingConfig.map_openai_paramsQ   s    & /446LE5))559>O$56&(;E7Blm  &*/'$::5AA).&  #I%!QRR! 7$ r!   inputheadersc                 v    |t        |t              r|n|gd}d|v r|d   }|||d<   d|v r|d   }|||d<   |S )z0Transform embedding request to Volcengine format)r'   r>   r   r)   )
isinstancelist)r   r'   r>   r/   r?   datar   r)   s           r   transform_embedding_requestz5VolcEngineEmbeddingConfig.transform_embedding_requestz   sj     (5UE7
 /-.?@O**9&'_$"6*D#Vr!   raw_responsemodel_responselogging_objrequest_datac	                    	 |j                         }	d|	j	                  dg       |	j	                  d|      |	j	                  di       d}d|	v r|	d   |d<   t        d	i |S # t        $ r}
t        dt        |
             d}
~
ww xY w)
z2Transform Volcengine response to EmbeddingResponsez-Failed to parse Volcengine response as JSON: NrB   rC   r'   usage)objectrC   r'   rJ   idr+   )json	Exceptionr;   strgetr
   )r   r'   rE   rF   rG   r.   rH   r/   r0   response_jsonetransformed_responses               r   transform_embedding_responsez6VolcEngineEmbeddingConfig.transform_embedding_response   s    	W(--/M !%%fb1"&&w6"&&w3	 
 = )6t)< & !8#788#  	WLSQRVHUVV	Ws   A   	B)B  Bmessagesc                 >    |t        d      t        |      }i ||S )z'Validate environment and return headersz1api_key is required for Volcengine authentication)r;   r   )	r   r?   r'   rU   r/   r0   r.   r-   volcengine_headerss	            r   validate_environmentz.VolcEngineEmbeddingConfig.validate_environment   s1     ?PQQ3G<0'0/00r!   error_messagestatus_codec                 n    ddl m} t        |t              rt	        j
                  |      } ||||      S )z%Get error class for Volcengine errorsr   )VolcEngineError)rZ   messager?   )common_utilsr\   rA   dicthttpxHeaders)r   rY   rZ   r?   r\   s        r   get_error_classz)VolcEngineEmbeddingConfig.get_error_class   s5     	3gt$mmG,G#!
 	
r!   r#   )NN) __name__
__module____qualname____doc__r   rO   r    classmethodr%   r   r,   r_   boolr5   r   r   r=   r   rD   r`   Responser
   LiteLLMLoggingObjrT   r	   rX   intr   ra   r   rb   __classcell__)r   s   @r   r   r      s2    *.4!#4 
4 $ $
 
c 
. "&33-3 #3 	3
 3 3 3 
3<% cN% c3h% 	%
 % 
c3h%R ' 	
  
699 nn9 *	9
 '9 #9 9 9 9 
9P "&"&11 1 '(	1
 1 1 #1 3-1 
1"
 
/2
=B4CV=W
	
r!   r   )rf   typingr   r   r   r   r   r`   litellm.types.llms.openair   r	   litellm.types.utilsr
   *litellm.litellm_core_utils.litellm_loggingr   rj   .litellm.llms.base_llm.embedding.transformationr   )litellm.llms.base_llm.chat.transformationr   r^   r   r   r   r+   r!   r   <module>rs      s6   
 4 3  O 1 S N F JC
 3 C
r!   