
    gO'                         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e      Zy)    )ListOptionalUnion)OpenAIN)AsyncHTTPHandlerHTTPHandlerget_async_httpx_client)OpenAIChatCompletion)ImageEmbeddingRequest)EmbeddingResponse) convert_to_model_response_object   )AzureAICohereConfigc                       e Zd Zdee   dee   dee   dedef
dZ	 ddede	d	e
dej                  d
edee   dee   deeeef      def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Z	 	 	 ddeded	e
dej                  d
edee   dee   def f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Z xZS )AzureAIEmbeddingimage_embedding_responsestext_embedding_responsesimage_embeddings_idxmodel_responseinputc                 $   g }|^|\d}d}t        t        |            D ]9  }	|	|v r|j                  ||          |dz  }!|j                  ||          |dz  }; ||_        n|||_        n	|||_        t	               j                  |      }
|
S )Nr   r   )response)rangelenappenddatar   _transform_response)selfr   r   r   r   r   combined_responsestext_idx	image_idxidxr   s              X/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/azure_ai/embed/handler.py_process_responsez"AzureAIEmbedding._process_response   s      %1(4 HISZ(..&--.G	.RSNI&--.Fx.PQMH ) #5N&2";N%1":N&(<<n<U    modelr   timeoutoptional_paramsapi_keyapi_baseclientreturnc
                 j  K   |	t        |	t              s't        t        j                  j
                  d|i      }	dj                  |      }
|	j                  |
|ddj                  |      i       d {   }|j                         }t        |j                        }t        ||dd|	      }|S 7 ;w)
Nr'   )llm_providerparams{}/images/embeddingsAuthorization	Bearer {}urljsonheaders	embeddingFresponse_objectmodel_response_objectresponse_typestream_response_headers)
isinstancer   r	   litellmLlmProvidersAZURE_AIformatpostr5   dictr6   r   r   r&   r   r'   logging_objr   r(   r)   r*   r+   r4   r   embedding_responseembedding_headersreturned_responses                  r#   async_image_embeddingz&AzureAIEmbedding.async_image_embedding8   s      >F4D!E+$11::!7+F
 %++H5$k&8&8&AB % 
 
 &]]_ !1!12/O."0%/0
 ! 
s   A3B35B16<B3c
                 N   |t        d      |t        d      |	t        |	t              st        |d      }	dj                  |      }
|	j	                  |
|ddj                  |      i      }|j                         }t        |j                        }t        ||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'   concurrent_limitr0   r1   r2   r3   r7   Fr8   )	
ValueErrorr>   r   rB   rC   r5   rD   r6   r   rE   s                  r#   image_embeddingz AzureAIEmbedding.image_embedding]   s     z  ?w  >FK!@ 1EF$++H5;;$k&8&8&AB  
 &]]_ !1!12/O."0%/0
 ! r%   c
                   K   t               j                  |||      \  }
}}d }d }|
d   r;| j                  ||
|||||||		       d {   }|j                  }|t	        d      |d   r:t
        |   |||||||||	d
       d {   }|j                  }|t	        d      | j                  |||||      S 7 r7 5w)	Nr   r(   r&   r   	r&   r   r'   rF   r   r(   r)   r*   r+   1/image/embeddings route returned None Embeddings.T)
r&   r   r'   rF   r   r(   r)   r*   r+   
aembedding./v1/embeddings route returned None Embeddings.r   r   r   r   r   )r   _transform_requestrJ   r   	Exceptionsuperr7   r$   )r   r&   r   r'   rF   r   r(   r)   r*   r+   image_embeddings_requestv1_embeddings_requestr   r   r   image_responser   	__class__s                    r#   async_embeddingz AzureAIEmbedding.async_embedding   s0    "  !44 5 
		
$! 
 59!37 #G,#'#=#=-'- /! $> 
$ 
N )7(;(;%(0 STT )050A'- /! 1B 1 +H (0}}$'/ PQQ%%&?%=!5) & 
 	
C
"+s$   AC
B=>C	B?
4C?Cmax_retriesc                    |
du r| j                  |||||||||		      S t               j                  |||      \  }}}d}d}|d   r3| j                  |||||||||		      }|j                  }|t        d      |d   rFt        |   |||||||||	t        |	t              r|	nd|

      }|j                  }|t        d      | j                  |||||	      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
        TrP   Nr   rQ   rR   )r+   rS   rT   rU   )r]   r   rV   rN   r   rW   rX   r7   r>   r   r$   )r   r&   r   r'   rF   r   r(   r)   r*   r+   rS   r^   rY   rZ   r   r   r   r[   r   r\   s                      r#   r7   zAzureAIEmbedding.embedding   sc   * ''
 
   !44 5 
		
$! 
 59!37 #G,!11-'- /! 2 
N )7(;(;%(0 STT )*/'*; )j.H % +< +H" (0}}$'/ PQQ%%&?%=!5) & 
 	
r%   )N)NNN)NNNNN)__name__
__module____qualname__r   r   intr   r$   strr   floatr?   rD   r   r   r   rJ   rN   r]   r7   __classcell__)r\   s   @r#   r   r      s;   !#+D>! #+4.! #3i	!
 *! !Z BF#!#! $#! 	#!  11#! #! ##! 3-#! {,<<=>#! 
#!^ BF)!)! $)! 	)! *)! )! #)! 3-)! {,<<=>)!f "&"&@
@
 @
 	@
  11@
 @
 #@
 3-@
 
@
T "&"&%)Z
Z
 Z
 	Z
 *Z
 Z
 #Z
 3-Z
 c]Z
 
Z
 Z
r%   r   )typingr   r   r   openair   r?   &litellm.llms.custom_httpx.http_handlerr   r   r	   litellm.llms.openai.openair
   litellm.types.llms.azure_air   litellm.types.utilsr   litellm.utilsr   cohere_transformationr   r    r%   r#   <module>rp      s;    ( (   
 < = 1 : 6Q
+ Q
r%   