o
    ưi'                     @   s   d dl mZmZmZ d dlmZ d dlZd dlmZ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 G dd deZdS )    )ListOptionalUnion)OpenAIN)AsyncHTTPHandlerHTTPHandlerget_async_httpx_client)OpenAIChatCompletion)ImageEmbeddingRequest)EmbeddingResponse) convert_to_model_response_object   )AzureAICohereConfigc                       sL  e Zd Zdee dee dee dedef
ddZ	dd	ed
e	de
dededee dee deeeef  defddZ	dd	ed
e	de
dededee dee deeeef  fddZ			dd	edede
dededee dee def fddZ						dd	edede
dededee dee dee def fddZ  ZS )AzureAIEmbeddingimage_embedding_responsestext_embedding_responsesimage_embeddings_idxmodel_responseinputc                 C   s   g }|d ur6|d ur6d}d}t t|D ]}	|	|v r&|||  |d7 }q|||  |d7 }q||_n|d ur>||_n|d urE||_t j|d}
|
S )Nr   r   )response)rangelenappenddatar   Z_transform_response)selfr   r   r   r   r   Zcombined_responsesZtext_idxZ	image_idxidxr    r   Z/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/azure_ai/embed/handler.py_process_response   s$   

z"AzureAIEmbedding._process_responseNmodelr   timeoutoptional_paramsapi_keyapi_baseclientreturnc
                    sz   |	d u s
t |	tsttjjd|id}	d|}
|	j|
|dd|idI d H }| }t	|j
}t||dd|d	}|S )
Nr    )Zllm_providerparams{}/images/embeddingsAuthorization	Bearer {}urljsonheaders	embeddingFZresponse_objectZmodel_response_objectZresponse_typestreamZ_response_headers)
isinstancer   r   litellmZLlmProvidersZAZURE_AIformatpostr,   dictr-   r   r   r   r   r    logging_objr   r!   r"   r#   r$   r+   r   Zembedding_responseZembedding_headersZreturned_responser   r   r   async_image_embedding7   s,   

z&AzureAIEmbedding.async_image_embeddingc
                 C   s   |d u rt d|d u rt d|	d u st|	tst|dd}	d|}
|	j|
|dd|id}| }t|j}t||d	d
|d}|S )Nzhapi_base is None. Please set AZURE_AI_API_BASE or dynamically via `api_base` param, to make the request.zeapi_key is None. Please set AZURE_AI_API_KEY or dynamically via `api_key` param, to make the request.r   )r    Zconcurrent_limitr'   r(   r)   r*   r.   Fr/   )	
ValueErrorr1   r   r3   r4   r,   r5   r-   r   r6   r   r   r   image_embedding\   s4   

z AzureAIEmbedding.image_embeddingc
                    s   t  j|||d\}
}}d }d }|
d r1| j||
|||||||	d	I d H }|j}|d u r1td|d rSt j|||||||||	dd
I d H }|j}|d u rStd| j|||||dS )	Nr   r!   r   r   	r   r   r    r7   r   r!   r"   r#   r$   1/image/embeddings route returned None Embeddings.T)
r   r   r    r7   r   r!   r"   r#   r$   
aembedding./v1/embeddings route returned None Embeddings.r   r   r   r   r   )r   _transform_requestr8   r   	Exceptionsuperr.   r   )r   r   r   r    r7   r   r!   r"   r#   r$   image_embeddings_requestv1_embeddings_requestr   r   r   image_responser   	__class__r   r   async_embedding   s`   z AzureAIEmbedding.async_embeddingmax_retriesc                    s   |
du r|  |||||||||		S t j|||d\}}}d}d}|d r>| j|||||||||	d	}|j}|du r>td|d rit j|||||||||	durXt|	t	rX|	nd|
|d}|j}|du ritd| j
|||||d	S )
z
        - Separate image url from text
        -> route image url call to `/image/embeddings`
        -> route text call to `/v1/embeddings` (OpenAI route)

        assemble result in-order, and return
        Tr;   Nr   r<   r=   )r$   r>   shared_sessionr?   r@   )rI   r   rA   r:   r   rB   rC   r.   r1   r   r   )r   r   r   r    r7   r   r!   r"   r#   r$   r>   rJ   rK   rD   rE   r   r   r   rF   r   rG   r   r   r.      s|   zAzureAIEmbedding.embedding)N)NNN)NNNNNN)__name__
__module____qualname__r   r   intr   r   strr
   floatr5   r   r   r   r8   r:   rI   r.   __classcell__r   r   rG   r   r      s    
-	

/	

3	I	r   )typingr   r   r   Zopenair   r2   Z&litellm.llms.custom_httpx.http_handlerr   r   r   Zlitellm.llms.openai.openair	   Zlitellm.types.llms.azure_air
   Zlitellm.types.utilsr   Zlitellm.utilsr   Zcohere_transformationr   r   r   r   r   r   <module>   s    