
    j=                         d Z ddlmZmZmZmZmZ erddlmZ ddl	m
Z
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  G d de      Zy)zd
Translate from OpenAI's `/v1/embeddings` to Sagemaker's `/invoke`

In the Huggingface TGI format. 
    )TYPE_CHECKINGAnyListOptionalUnion)AllEmbeddingInputValues)HeadersResponse)BaseEmbeddingConfig)BaseLLMException)UsageEmbeddingResponse)VoyageEmbeddingConfig   SagemakerErrorc                      e Zd ZdZddZededdf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edee
ef   defdZdeddd
e
de
de
f
dZdi i i fdededddedee   de
d
e
de
dd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y)!SagemakerEmbeddingConfigzW
    SageMaker embedding configuration factory for supporting embedding parameters
    returnNc                      y N )selfs    /Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/litellm/llms/sagemaker/embedding/transformation.py__init__z!SagemakerEmbeddingConfig.__init__   s        modelr   c                 H    d|j                         v r
t               S  |        S )z
        Factory method to get the appropriate embedding config based on model type
        
        Args:
            model: The model name
            
        Returns:
            Appropriate embedding config instance
        voyage)lowerr   )clsr   s     r   get_model_configz)SagemakerEmbeddingConfig.get_model_config   s"     u{{}$(**5Lr   c                 \    d|j                         v rt               j                  |      S g S )Nr   )r    r   get_supported_openai_params)r   r   s     r   r$   z4SagemakerEmbeddingConfig.get_supported_openai_params.   s)    u{{}$(*FFuMMIr   non_default_paramsoptional_paramsdrop_paramsc                     |S r   r   )r   r%   r&   r   r'   s        r   map_openai_paramsz*SagemakerEmbeddingConfig.map_openai_params5   s
     r   error_messagestatus_codeheadersc                     t        |||      S )N)messager+   r,   r   )r   r*   r+   r,   s       r   get_error_classz(SagemakerEmbeddingConfig.get_error_class?   s     !{G
 	
r   inputr   c                     d|i|S )zR
        Transform embedding request for Hugging Face models on SageMaker
        inputsr   )r   r   r0   r&   r,   s        r   transform_embedding_requestz4SagemakerEmbeddingConfig.transform_embedding_requestF   s     %3?33r   raw_responsemodel_responser   logging_objapi_keyrequest_datalitellm_paramsc	                    	 |j                         }	d|	vrt        dd      |	d   }t        |t              st        dd	|       g }t        |      D ]  \  }}|j                  d||d
        d|_	        ||_
        ||_        |j                  dg       }d}|D ]  }|t        |j                               z  }  t        |d|      |_        |S # t        $ r(}
t        dt        |
       |j                        d}
~
ww xY w)zS
        Transform embedding response for Hugging Face models on SageMaker
        zFailed to parse response: )r.   r+   N	embeddingi  z%HF response missing 'embedding' field)r+   r.   i  z%HF response not in expected format - )objectindexr;   listr2   r   )prompt_tokenscompletion_tokenstotal_tokens)json	Exceptionr   strr+   
isinstancer>   	enumerateappendr<   datar   getlensplitr   usage)r   r   r4   r5   r6   r7   r8   r&   r9   response_datae
embeddingsoutput_dataidxr;   input_textsinput_tokenstexts                     r   transform_embedding_responsez5SagemakerEmbeddingConfig.transform_embedding_responseS   s=   	(--/M m+ )P  #;/
*d+ ?
|L 
 '
3NC&9M 4
 !')$ #&&x4DC

--L    %&% 
 Q  	 4SVH=(44 	s   C 	D#C??Dmessagesapi_basec                 
    ddiS )z?
        Validate environment for SageMaker embeddings
        zContent-Typezapplication/jsonr   )r   r,   r   rV   r&   r9   r7   rW   s           r   validate_environmentz-SagemakerEmbeddingConfig.validate_environment   s      233r   )r   N)NN)__name__
__module____qualname____doc__r   classmethodrD   r"   r   r$   dictboolr)   intr   r	   r   r/   r3   r
   r   r   rU   rY   r   r   r   r   r      s    S -B   c    	
  

 
/2
=B4==Q
	
44 )4 	4
 4 
4& "& "!88 8 ,	8
 8 #8 8 8 8 
8B "&"&44 4 s)	4
 4 4 #4 3-4 
4r   r   N)r]   typingr   r   r   r   r   litellm.types.llms.openair   httpx._modelsr	   r
   .litellm.llms.base_llm.embedding.transformationr   )litellm.llms.base_llm.chat.transformationr   litellm.types.utilsr   r   ,litellm.llms.voyage.embedding.transformationr   common_utilsr   r   r   r   r   <module>rj      s9    = <A + N F 8 N )D42 D4r   