Ë
    uPêj.  ã                   ó|   — d Z ddlmZmZ ddl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mZ ddlmZ  G d	„ d
«      Zy)z?
Legacy /v1/embedding transformation logic for Bedrock Cohere.
é    )ÚAnyÚFinalN)Ú#COHERE_DEFAULT_EMBEDDING_INPUT_TYPE)ÚLogging)ÚCohereEmbeddingRequestÚCohereEmbeddingRequestWithModel)ÚEmbeddingResponseÚPromptTokensDetailsWrapperÚUsage)Úis_base64_encodedc                   óö   — e Zd ZdZdd„Zdee   fd„Zdededefd„Z	d	ede
fd
„Zd	edee   dedefd„Zdee   dededefd„Zdej$                  dedz  dedeez  ded	edededefd„Zdeded	edededefd„Zy)ÚCohereEmbeddingConfigz?
    Reference: https://docs.cohere.com/v2/reference/embed
    ÚreturnNc                  ó   — y )N© ©Úselfs    úp/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/cohere/embed/v1_transformation.pyÚ__init__zCohereEmbeddingConfig.__init__   s   € Øó    c                 ó   — dgS )NÚencoding_formatr   r   s    r   Úget_supported_openai_paramsz1CohereEmbeddingConfig.get_supported_openai_params   s   € Ø!Ð"Ð"r   Únon_default_paramsÚoptional_paramsc                 óL   — |j                  «       D ]  \  }}|dk(  sŒ||d<   Œ |S )Nr   Úembedding_types)Úitems)r   r   r   ÚkÚvs        r   Úmap_openai_paramsz'CohereEmbeddingConfig.map_openai_params   s:   € Ø&×,Ñ,Ó.ò 	7‰DˆAˆqØÐ%Ó%Ø56�Ð 1Ò2ð	7ð Ðr   Úmodelc                 ó
   — d|v S )NÚ3r   )r   r"   s     r   Ú_is_v3_modelz"CohereEmbeddingConfig._is_v3_model$   s   € Ø�eˆ|Ðr   ÚinputÚinference_paramsc                 ó®   — d}|D ]  }t        |«      }Œ |rt        ||d¬«      }nt        ||t        ¬«      }|j                  «       D ]
  \  }}|||<   Œ |S )NFÚimage)r"   ÚimagesÚ
input_type)r"   Útextsr+   )r   r   r   r   )	r   r"   r&   r'   Ú
is_encodedÚ	input_strÚtransformed_requestr   r    s	            r   Ú_transform_requestz(CohereEmbeddingConfig._transform_request'   sƒ   € ð ˆ
Øò 	6ˆIÜ*¨9Ó5‰Jð	6ñ Ü"AØØØ"ô#Ñô #BØØÜ>ô#Ðð %×*Ñ*Ó,ò 	'‰DˆAˆqØ%&Ð Ò"ð	'ð #Ð"r   ÚencodingÚmetac                 ó4  — d}|j                  di «      j                  d«      }|j                  di «      j                  d«      }d }|€'|€%|D ]  }|t        |j                  |«      «      z  }Œ! nt        ||¬«      }|r||z  }|r||z  }t	        |d||¬«      S )Nr   Úbilled_unitsÚinput_tokensr*   )Úimage_tokensÚtext_tokens)Úprompt_tokensÚcompletion_tokensÚtotal_tokensÚprompt_tokens_details)ÚgetÚlenÚencoder
   r   )	r   r&   r1   r2   r5   r7   r6   r;   Útexts	            r   Ú_calculate_usagez&CohereEmbeddingConfig._calculate_usage@   s½   € Øˆà)-¯©°.À"Ó)E×)IÑ)IÈ.Ó)Yˆà*.¯(©(°>À2Ó*F×*JÑ*JÈ8Ó*TˆàCGÐØÐ KÐ$7Øò ;�Ø¤ H§O¡O°DÓ$9Ó :Ñ:‘ñ;ô %?Ø)Ø'ô%Ð!ñ Ø Ñ,�ÙØ Ñ+�äØ&ØØ%Ø"7ô	
ð 	
r   ÚresponseÚapi_keyÚlogging_objÚdataÚmodel_responsec	                 ó|   — |j                  «       }	|j                  ||d|i|	¬«       | j                  |	||||¬«      S )NÚcomplete_input_dict)r&   rB   Úadditional_argsÚoriginal_response)Úresponse_jsonrE   r"   r1   r&   )ÚjsonÚ	post_callÚ_populate_embedding_response)
r   rA   rB   rC   rD   rE   r"   r1   r&   rJ   s
             r   Ú_transform_responsez)CohereEmbeddingConfig._transform_response\   s\   € ð  (Ÿ}™}›ˆà×ÑØØØ2°DÐ9Ø+ð	 	ô 	
ð ×0Ñ0Ø'Ø)ØØØð 1ó 
ð 	
r   rJ   c                 ó¢  — |d   }g }|j                  d«      dk(  }t        |t        «      rd}|r4|D ].  }	t        ||	   «      D ]  \  }
}|j	                  d|
||	dœ«       Œ Œ0 n(t        |«      D ]  \  }
}|j	                  d|
|dœ«       Œ d|_        ||_        ||_        t        |d	| j                  |||j                  d
i «      «      «       |S )aÙ  
        Parse a Cohere embed response body into an OpenAI-style EmbeddingResponse.

        Split out from `_transform_response` so callers that already log
        `post_call` themselves (e.g. SageMaker's embedding handler) can reuse
        the parsing without triggering a second `post_call`.

        Response shape:
            {
                'object': "list",
                'data': [...],
                'model',
                'usage',
            }
        Ú
embeddingsÚresponse_typeÚembeddings_by_typeTÚ	embedding)ÚobjectÚindexrS   Útype)rT   rU   rS   ÚlistÚusager2   )
r<   Ú
isinstanceÚdictÚ	enumerateÚappendrT   rD   r"   Úsetattrr@   )r   rJ   rE   r"   r1   r&   rP   Úoutput_dataÚis_embeddings_by_typeÚembedding_typeÚidxrS   s               r   rM   z2CohereEmbeddingConfig._populate_embedding_responsew   s  € ð. *¨,Ñ7ˆ
ØˆØ -× 1Ñ 1°/Ó BÐFZÑ ZÐä�j¤$Ô'Ø$(Ð!á Ø",ò 	�Ü&/°
¸>Ñ0JÓ&Kò ‘N�C˜Ø×&Ñ&à&1Ø%(Ø)2Ø$2ñ	õññ	ô #,¨JÓ"7ò b‘��YØ×"Ñ"¨kÀCÐV_Ñ#`Õaðbà &ˆÔØ)ˆÔØ$ˆÔäØØØ×!Ñ! %¨°=×3DÑ3DÀVÈRÓ3PÓQô	
ð Ðr   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rW   Ústrr   rZ   r!   Úboolr%   r   r0   r   r   r@   ÚhttpxÚResponseÚLiteLLMLoggingObjr   r	   rN   rM   r   r   r   r   r      sB  „ ñóð#¨T°#©Yó #ð°Dð È4ð ÐTXó ð #ð ¨$ó ð#Øð#Ø!% c¡ð#Ø>Bð#à	(ó#ð2
 d¨3¡ið 
¸3ð 
Àdð 
Èuó 
ð8
à—.‘.ð
ð �t‘ð
ð 'ð	
ð
 Ð+Ñ+ð
ð *ð
ð ð
ð ð
ð ð
ð 
ó
ð66àð6ð *ð6ð ð	6ð
 ð6ð ð6ð 
ô6r   r   )re   Útypingr   r   rh   Úlitellmr   Ú*litellm.litellm_core_utils.litellm_loggingr   rj   Úlitellm.types.llms.bedrockr   r   Úlitellm.types.utilsr	   r
   r   Úlitellm.utilsr   r   r   r   r   ú<module>rq      s5   ðñ÷ ã å 7Ý S÷÷ UÑ TÝ +÷Zò Zr   