
    h                       d dl Z d dlmZmZmZmZmZmZmZm	Z	m
Z
mZmZ d dlZd dlZd dlZd dlZd dl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 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% 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/ d dl0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@ d dlAmBZBmCZC d dlDmEZE d dlFmGZG d dlmHZHmIZImJZJ d dlKmLZLmMZMmNZNmOZO d dlPmQZQmRZRmSZSmTZT erd dlUmVZW d dlXmYZY eWZZneZZ G d d      Z[y)     N)TYPE_CHECKINGAnyAsyncIterator	CoroutineDictListLiteralOptionalTupleUnioncast)verbose_logger)RealTimeStreaming)BaseAnthropicMessagesConfig)BaseAudioTranscriptionConfig)MockResponseIterator)
BaseConfig)BaseEmbeddingConfig)BaseFilesConfig)$BaseGoogleGenAIGenerateContentConfig)BaseImageEditConfig)BaseImageGenerationConfig)BaseRealtimeConfig)BaseRerankConfig)BaseResponsesAPIConfig)BaseVectorStoreConfig)AsyncHTTPHandlerHTTPHandler_get_httpx_clientget_async_httpx_client)!BaseResponsesAPIStreamingIterator!MockResponsesAPIStreamingIteratorResponsesAPIStreamingIterator!SyncResponsesAPIStreamingIterator)AnthropicMessagesResponse)CreateFileRequestOpenAIFileObjectResponseInputParamResponsesAPIResponse)OptionalRerankParamsRerankResponse)DeleteResponseResult)GenericLiteLLMParams)EmbeddingResponse	FileTypesTranscriptionResponse)&VectorStoreCreateOptionalRequestParamsVectorStoreCreateResponse&VectorStoreSearchOptionalRequestParamsVectorStoreSearchResponse)CustomStreamWrapperImageResponseModelResponseProviderConfigManager)Logging)BasePassthroughConfigc            '       P   e Zd Z	 	 drdedededededeee	j                  f   ded	ed
edee   de	j                  fdZ	 	 drdedededededeee	j                  f   ded	ed
edee   de	j                  fdZ	 	 	 	 dsdedededededeee	j                  f   deded	edededededee   dee   dedee   f"dZ	 	 	 	 	 	 dtdededededed	ededeee	j                  f   deded
ee   dedee   deeeef      deeeef      dee   f dZ	 	 	 dudededededee   dedededededeee	j                  f   dedee   dedeeef   fdZ	 	 	 	 dvdededededededeee	j                  f   d	edededededee   dee   dee   fdZ	 	 	 	 dvdededededededed	edeee	j                  f   dedededee   dee   dee   deee	j8                  f   f d Zdedededefd!Z	 	 	 	 dsded"ededed	edee   dedededee   deeeef      d#edeeeef      defd$Z 	 	 	 dwd%ededededede!ded	edededee   deeee	j                  f      deeeef      defd&Z"	 	 	 	 	 dxdeded	ede#d'e$deeee	j                  f      de%d(edeeeef      dee   dee   deeeef      de%fd)Z&	 	 	 dwded%edede#d	ede%dededee   deeee	j                  f      deeeef      de%fd*Z'ded+e(deded	edee   dee   deeeef      de)deeeeeedf   ee   f   fd,Z*de)ded-e	j                  de+d	ededee   de+fd.Z,	 	 	 	 dyded+e(dedede+ded/e-d	edee   dee   dedeeeef      d0edeeeef      dee)   dee+e.eee+f   f   f d1Z/	 	 	 dwded+e(dedede+ded/e-d	edee   dee   dedeeeef      deeeef      dee)   de+fd2Z0	 	 	 	 	 	 dzdede1e   d3e2d4edede3d	edee   d5eeeef      dee   dee   d
ee   d6eeeef      dee4e5f   fd7Z6	 	 	 	 	 d{dede1e   d3e2d4eded(ede3d	edeeeef      dee   dee   d
ee   d6eeeef      dee4e.eeee4e5f   f   f   fd8Z7	 	 	 	 	 	 	 d|ded"eee8f   d9e9d:edede3d	ed5eeeef      d;eeeef      deeee	j                  f      deeeef      d(eded<eeeef      dee:e;e.eeee:e;f   f   f   fd=Z<	 	 	 	 	 	 dzded"eee8f   d9e9d:edede3d	ed5eeeef      d;eeeef      deeee	j                  f      deeeef      ded<eeeef      dee:e;f   fd>Z=	 	 	 	 	 d}d?ed9e9de3d	edee   d5eeeef      d;eeeef      deeee	j                  f      deeeef      d(ede>fd@Z?	 	 	 	 	 d}d?ed9e9de3d	edee   d5eeeef      d;eeeef      deeee	j                  f      deeeef      d(edee>e.eee>f   f   fdAZ@	 	 	 	 	 	 d~d?ed9e9de3d	edee   d5eeeef      d;eeeef      deeee	j                  f      deeeef      d(edee:e.eee:f   f   fdBZA	 	 	 	 	 dd?ed9e9de3d	edee   d5eeeef      d;eeeef      deeee	j                  f      deeeef      de:fdCZB	 	 	 	 	 	 	 	 	 	 dd?ed9e9de3d	edee   dDee   dEee   dFee1e      dGe-dHeCdI   d5eeeef      deeee	j                  f      deeeef      d(edeee.eeef   f   fdJZD	 	 	 	 	 	 	 	 	 dd?ed9e9de3d	edee   dDee   dEee   dFee1e      dGe-dHeCdI   d5eeeef      deeee	j                  f      deeeef      defdKZE	 	 	 ddLeFdedeGdedee   dee   d	ed(edeeeef      deeee	j                  f      deeHe.eeeHf   f   fdMZI	 	 ddNeeeef   dedeGdeded	edeeeef      deeee	j                  f      fdOZJdP ZKdQ ZLdR ZMdS ZNd
edededeeef   fdTZOdUePdeee#e9eQeReSeTe2dVf	   fdWZU	 	 	 	 ddedXed	edeVdedee   dee   dee   dee   fdYZW	 	 	 	 	 	 ddedZed[ed\eQd]edede3d	edeee	j                  f   d5eeeef      d;eeeef      deeeef      d(eded<eeeef      deeXe.eeeXf   f   f d^ZY	 	 	 	 	 d{dedZe(d[ed\eQd]edede3d	edeee	j                  f   d5eeeef      d;eeeef      deeeef      ded<eeeef      deXfd_ZZ	 	 	 	 	 	 dded[ed`eRdaededed	edeee	j                  f   d5eeeef      d;eeeef      deeeef      d(eded<eeeef      deeXe.eeeXf   f   fdbZ[	 	 	 	 	 d{ded[ed`eRdaededed	edeee	j                  f   d5eeeef      d;eeeef      deeeef      ded<eeeef      deXfdcZ\	 	 	 	 	 d}ddedeeee1e   f   dfe]dgeSdede3d	ed5eeeef      d;eeeef      deeee	j                  f      deeeef      d(ede^fdhZ_	 	 	 	 	 d}ddedeeee1e   f   dfe]dgeSdede3d	ed5eeeef      d;eeeef      deeee	j                  f      deeeef      d(edee^e.eee^f   f   fdiZ`	 	 	 	 	 d}djeadgeSdede3d	ed5eeeef      d;eeeef      deeee	j                  f      deeeef      d(edebfdkZc	 	 	 	 	 d}djeadgeSdede3d	ed5eeeef      d;eeeef      deeee	j                  f      deeeef      d(edeebe.eeebf   f   fdlZd	 	 	 	 	 	 	 ddedmedneTdoedede3d	ed5eeeef      d;eeeef      deeee	j                  f      d(edeeeef      d
ed<eeeef      defdpZe	 	 	 	 	 	 dzdedmedneTdoedede3d	ed5eeeef      d;eeeef      deeee	j                  f      dee   d
ed<eeeef      defdqZfy)BaseLLMHTTPHandlerNasync_httpx_clientprovider_configapi_baseheadersdatatimeoutlitellm_paramslogging_objstreamsigned_json_bodyreturnc           	        K   |j                   }d}t        t        |d            D ]:  }	 |j                  |||
|
nt	        j
                  |      ||	|       d{   } n ||j                  ddi 	      |S 7 # t        j                  $ rO}|dz   |k(  }|j                  ||      }|r|s|j                  ||      }Y d}~| j                  ||      d}~wt        $ r}| j                  ||      d}~ww xY ww)
zbCommon implementation across stream + non-stream calls. Meant to ensure consistent error-handling.N   urlr@   rA   rB   rE   rD   erC   rM   request_datarM   r>   No response from the API  error_messagestatus_coder@   'max_retry_on_unprocessable_entity_errorrangemaxpostjsondumpshttpxHTTPStatusError9should_retry_llm_api_inside_llm_translation_on_http_error/transform_request_on_unprocessable_entity_error_handle_error	Exceptionget_error_class)selfr=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rW   responseirM   hit_max_retryshould_retrys                    f/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/custom_httpx/llm_http_handler.py_make_common_async_callz*BaseLLMHTTPHandler._make_common_async_call]   s\     CC 	0 .2sBAFGAO!3!8!8 # ,7 )!ZZ-#! + "9 " 8 = H@ !118 2   K (( S !A)P P.hh  i    'WWd X  
 ,,q/,RR O((1o(NNOsR   'D1A=A;A= D;A==C>2CDCC>&C99C>>Dsync_httpx_clientc           	         |j                   }d }t        t        |d            D ]2  }	 |j                  |||
|
nt	        j
                  |      ||	|      } n ||j                  ddi       |S # t        j                  $ rO}|dz   |k(  }|j                  ||      }|r|s|j                  ||      }Y d }~| j                  ||      d }~wt        $ r}| j                  ||      d }~ww xY w)	NrI   rJ   rL   rN   rP   rQ   rR   rS   rV   )rd   rk   r>   r?   r@   rA   rB   rC   rD   rE   rF   rW   re   rf   rM   rg   rh   s                    ri   _make_common_sync_callz)BaseLLMHTTPHandler._make_common_sync_call   sN    CC 	0 .2sBAFGAO,11 # ,7 )!ZZ-#! + 2 8 = H@ !118 2   3 (( S !A)P P.hh  i    'WWd X  
 ,,q/,RR O((1o(NNOs)   .A11C22C;CC2C--C2custom_llm_providermodelmodel_responsemessagesoptional_paramsencodingapi_keyclient	json_modec                    K   |3t        t        j                  |      d|j                  dd       i      }n|}| j	                  |||||||d|	|
       d {   }|j                  ||||	|||
||||      S 7  w)N
ssl_verifyllm_providerparamsF)
r=   r>   r?   r@   rA   rB   rC   rE   rD   rF   ro   raw_responserp   rD   rt   rO   rq   rr   rC   rs   rv   )r    litellmLlmProvidersgetrj   transform_response)rd   rn   r>   r?   r@   rA   rB   ro   rp   rD   rq   rr   rC   rs   rt   ru   rv   rF   r=   re   s                       ri   async_completionz#BaseLLMHTTPHandler.async_completion   s     ( >!7$112EF$n&8&8t&LM"
 "(551+)#- 6 
 
 11!)#+) 2 
 	

s   AA;A9!A;acompletionfake_streamc                    |j                  dd      }|j                  dd       }|xs* t        j                  |t        j                  |            }|t        d| d|       |xs( |j                  dd      xs |j                  |||      }|j                  ||xs i |||||
	      }|j                  ||||||

      }|j                  ||||
|      }|i ||}|j                  ||||||||      \  }}|j                  |||||d       |du r|du rH| j                  |||      }| j                  |||||||	||||t        |t              r|nd |
|||      S | j!                  ||||||	|||||||
||t        |t              r|nd ||      S |du r| j                  |||      }|j"                  du r|j%                  ||||||||||
      S | j'                  ||||||||||	||t        |t(              r|nd |
||      \  }}t+        ||||      S |t        |t(              st-        d|
j/                  dd       i      }n|}| j1                  |||||||	|
|	      }|j3                  |||||||||
||      S )Nrv   F
extra_bodyro   providerz%Provider config not found for model:  and provider: r   )ro   rn   rE   )rt   r@   ro   rq   rr   r?   rC   )r?   rt   ro   rr   rE   rC   )ro   rq   rr   rC   r@   r@   rr   rO   r?   rt   rE   r   ro   complete_input_dictr?   r@   inputrt   additional_argsT)rA   r>   r   )ro   rq   r?   r@   rn   r>   rB   rD   rA   r   ru   rC   rv   rr   rF   )rn   r>   r?   r@   rA   rB   ro   rp   rD   rt   rq   rr   rC   rs   ru   rv   rF   )
ro   rn   rD   r?   r@   rA   rF   rq   ru   rv   )r>   r?   r@   rA   rF   original_dataro   rq   rD   rB   r   ru   rC   rv   rr   completion_streamro   rn   rD   rx   r{   )	rk   r>   r?   r@   rA   rF   rB   rC   rD   r|   )popr8   get_provider_chat_configr~   r   
ValueErrorshould_fake_streamvalidate_environmentget_complete_urltransform_requestsign_requestpre_call!_add_stream_param_to_request_bodyacompletion_stream_function
isinstancer   r   has_custom_stream_wrapperget_sync_custom_stream_wrappermake_sync_callr   r5   r   r   rm   r   )rd   ro   rq   r?   rn   rp   rs   rD   rr   rB   rC   r   rE   r   rt   r@   ru   r>   rv   r   rA   rF   r   rk   re   s                            ri   
completionzBaseLLMHTTPHandler.completion  s,   ( *--k5A	%4%8%8t%L
  $==g&:&:;N&O 	 "7woNaMbc 
  ""=%8111DV 2  	 "66Mr+) 7 
 #33+) 4 
 00+) 1 
 !)d)j)D$3$@$@+# %A 	%
!! 	'+$" 	 	
 $~==$3 + > 
 77%%#(;$3# + + "-*VEU2V !#1'$3%5' 8  . ,,(;$3%###1 +#%$3#1% "-*VEU2V !'%5+ -  0 T>99 /' : D
 88D@&EE(; +%#%5%!' F   *.)<)< /!!1"!'' )j.M -# /' *= *&w* '"3$7'	  >FK!@ 1$n&8&8t&LM! !'../+-)# / 

 11!)#+) 2 
 	
    r   c                    |t        |t              st        d|j                  dd       i      }n|}d}|du rd}| j	                  ||||||||||	
      }|du r;|j                  ||t        j                         |	|||
|d |
      }t        ||      }n"|j                  |j                         d|      }|	j                  |dd	d
|i       |t        |j                        fS )Nrx   TF)
rk   r>   r?   r@   rA   rF   rB   rC   rE   rD   
ro   r}   rp   rD   rO   rq   rr   rC   rs   rv   rp   rv   )streaming_responsesync_streamrv    first stream response receivedr   r   rt   original_responser   )r   r   r   r   rm   r   r~   r7   r   get_model_response_iterator
iter_lines	post_calldictr@   )rd   r>   r?   r@   rA   rF   r   ro   rq   rD   rr   rC   rB   r   ru   rv   rk   rE   re   rp   r   s                        ri   r   z!BaseLLMHTTPHandler.make_sync_call  sC   $ >FK!@ 1 ."4"4\4"H! !'$F../+-)# / 
 $,;,N,N%&446'*! /-# -O -N &:-& !0 K K#+#6#6#8 # !L ! 	>2D9	 	 	
 !$x'7'7"888r   c                    K   |j                   du r#|j                  ||||||	||||
       d {   S | j                  ||||||	||||||
|||       d {   \  }}t        ||||      }|S 7 @7 w)NT)
ro   rn   rD   r?   r@   rA   rq   ru   rv   rF   )ro   rn   r>   r?   r@   rA   rq   rD   rB   r   ru   rC   rr   rv   rF   r   )r   get_async_custom_stream_wrappermake_async_call_stream_helperr5   )rd   ro   rq   r?   rn   r@   r>   rB   rD   rA   rC   rr   r   ru   rv   rF   r   _response_headersstreamwrappers                      ri   r   z.BaseLLMHTTPHandler.acompletion_stream_function<  s     $ 44<(HH$7'!!#!1 I    6:5W5W 3+##)+- 6X 6
 0
,," ,/ 3#	
 I0
s!   -A4A0'A4A2A42A4c                   K   |3t        t        j                  |      d|
j                  dd      i      }n|}d}|du rd}| j	                  |||||||	|
||
       d{   }|du r;|j                  ||t        j                         |||||
d|
      }t        ||      }n!|j                  |j                         d	      }|j                  |d
dd|i       ||j                  fS 7 w)zm
        Helper function for making an async call with stream.

        Handles fake stream as well.
        Nrx   ry   TF)
r=   r>   r?   r@   rA   rF   rB   rC   rE   rD   r   r   )r   r   r   r   r   r   )r    r~   r   r   rj   r   r7   r   r   aiter_linesr   r@   )rd   ro   rn   r>   r?   r@   rA   rq   rD   rB   rC   rr   r   ru   rv   rF   r=   rE   re   rp   r   s                        ri   r   z0BaseLLMHTTPHandler.make_async_call_stream_helperu  sM    . >!7$112EF$n&8&8t&LM"
 "($F551+-)# 6 
 
 $,;,N,N%&446'!! /-# -O -N &:-& !0 K K#+#7#7#9u !L ! 	>2D9	 	 	
 !("2"222U
s   AC, C*!B
C,c                 |    |du r$|j                         }|j                  dd       |S |j                  du rd|d<   |S )z
        Some providers like Bedrock invoke do not support the stream parameter in the request body, we only pass `stream` in the request body the provider supports it.
        TrE   N)copyr   %supports_stream_param_in_request_body)rd   rA   r>   r   new_datas        ri   r   z4BaseLLMHTTPHandler._add_stream_param_to_request_body  sF     $yy{HLL4(O@@DH!DNr   r   
aembeddingc                    t        j                  |t        j                  |            }|t	        d| d      |j                  |
|xs i |g ||      }|j                  ||
|||      }|j                  ||||      }|j                  ||
|||d       |d	u r| j                  |||||||	||
||||
      S |t        |t              st               }n|}	 |j                  ||t        j                  |      |      }|j%                  |||	||
|||      S # t         $ r}| j#                  ||      d }~ww xY w)Nr   	Provider z does not support embeddingrt   r@   ro   rq   rr   rC   r?   rt   ro   rr   rC   )ro   r   rr   r@   r   r   T)rO   r?   r@   ro   rn   r>   rp   rD   rt   rB   ru   rr   rC   rK   r@   rA   rB   rP   ro   r}   rp   rD   rt   rO   rr   rC   )r8   get_provider_embedding_configr~   r   r   r   r   transform_embedding_requestr   r   r   r   r   rZ   r[   r\   rb   ra   transform_embedding_response)rd   ro   r   rB   rn   rD   r?   rr   rC   rp   rt   ru   r   r@   r>   rA   rk   re   rM   s                      ri   	embeddingzBaseLLMHTTPHandler.embedding  s     0MM'"6"67J"K
 "/00KL  "66Mr+) 7 
 #33+) 4 
 ::+	 ; 
 	'+$" 	 	
 ??!!$7 /-' /- #    >FK!@ 1 3 &	(--ZZ%	 . H ;;!)#+) < 	
 		
  	$$ / %  	s   (D 	D>&D99D>rO   c           
      ,  K   |t        |t              s t        t        j                  |            }n|}	 |j                  ||||       d {   }|j                  |||||||	|
      S 7 # t        $ r}| j                  ||      d }~ww xY ww)Nrz   rK   r@   r[   rB   rP   r   )	r   r   r    r~   r   rZ   rb   ra   r   )rd   rO   r?   r@   ro   rn   r>   rp   rD   rr   rC   rt   rB   ru   r=   re   rM   s                    ri   r   zBaseLLMHTTPHandler.aembedding?  s       >F4D!E!7$112EF" "(	K/44!	 5  H ;;!)#%+) < 	
 		
  	K$$q/$JJ	Ks:   5BA0 A.A0 B.A0 0	B9BBBoptional_rerank_params	_is_asyncc                    |j                  |
|	xs i |      }	|j                  ||      }|j                  |||	      }|j                  |j	                  dd      |
|||	d       |du r| j                  ||||||||	|
||	      S |t        |t              st               }n|}	 |j                  ||	t        j                  |      |
      }|j                  |||||
|      S # t        $ r}| j                  ||      d }~ww xY w)Nrt   r@   ro   )r?   ro   )ro   r   r@   queryr   r   r   T)ro   rO   rn   r>   rD   rp   r?   r@   rt   rB   ru   r   rP   ro   r}   rp   rD   rt   rO   )r   r   transform_rerank_requestr   r   arerankr   r   r   rZ   r[   r\   rb   ra   transform_rerank_response)rd   ro   rn   rD   r>   r   rB   rp   r   r@   rt   r?   ru   rA   rk   re   rM   s                    ri   rerankzBaseLLMHTTPHandler.rerankk  s     "66Mr 7 
 #33 4 

 77#9 8 
 	(,,Wb9'+$" 	 	
 <<!$7 /'-!     >FK!@ 1 3 &	(--ZZ%	 . H 88!)# 9 
 	
  	$$ / %  	s   ((C' '	D0DDc                 N  K   |t        |t              s t        t        j                  |            }n|}	 |j                  ||t        j                  |      |
       d {   }|j                  |||||	|      S 7 # t        $ r}| j                  ||      d }~ww xY ww)Nr   r   rP   r   )r   r   r    r~   r   rZ   r[   r\   rb   ra   r   )rd   ro   rO   rn   r>   rD   rp   r?   r@   rt   rB   ru   r=   re   rM   s                  ri   r   zBaseLLMHTTPHandler.arerank  s      >F4D!E!7$112EF" "(	K/44ZZ-	 5  H 88!)#% 9 
 	
  	K$$q/$JJ	Ks:   5B%+B #A?$B (B%?B 	B"
BB""B%
audio_filec
                    ddl m}
 |	j                  ||xs i |g ||      }|	j                  |||||      }|	j	                  ||||      }t        ||
      s#t        d|	j                  j                   d      |j                  }|j                  }|j                  |j                  dd	      ||xs i ||d
       ||||fS )z
        Shared logic for preparing audio transcription requests.
        Returns: (headers, complete_url, data, files)
        r   )AudioTranscriptionRequestDatar   r   )ro   r   rr   rC   r   z* must return AudioTranscriptionRequestDatar   r   r   r   )8litellm.llms.base_llm.audio_transcription.transformationr   r   r   %transform_audio_transcription_requestr   r   	__class____name__rA   filesr   r   )rd   ro   r   rr   rC   rD   rt   r?   r@   r>   r   complete_urltransformed_resultrA   r   s                  ri   $_prepare_audio_transcription_requestz7BaseLLMHTTPHandler._prepare_audio_transcription_request  s   "	
 "66Mr+) 7 
 '77+) 8 
 -RR!+)	 S 
 ,.KLO55>>??ij  "&&"(( 	!%%gr2'+zr(" 	 	
 dE11r   re   c                 &    |j                  |      S )z<Shared logic for transforming audio transcription responses.)r}   )&transform_audio_transcription_response)rd   r>   ro   re   rp   rD   rr   rt   s           ri   '_transform_audio_transcription_responsez:BaseLLMHTTPHandler._transform_audio_transcription_response,  s      EE! F 
 	
r   max_retriesatranscriptionc                    |t        d| d|       |du r| j                  |||||||||	|
||||      S | j                  ||||||	|
||	      \  }}}}|t        |t              s
t               }	 |j                  |||||t        |t              r|nd |      }| j                  |||||||	      S # t        $ r}| j                  ||      d }~ww xY w)	N$No provider config found for model: r   T)ro   r   rr   rC   rp   rB   r   rD   rt   r?   rn   ru   r@   r>   	ro   r   rr   rC   rD   rt   r?   r@   r>   rK   r@   rA   r   r[   rB   rP   r>   ro   re   rp   rD   rr   rt   )r   async_audio_transcriptionsr   r   r   r   rZ   r   rb   ra   r   )rd   ro   r   rr   rC   rp   rB   r   rD   rt   r?   rn   ru   r   r@   r>   r   rA   r   re   rM   s                        ri   audio_transcriptionsz'BaseLLMHTTPHandler.audio_transcriptions;  sa   $ "6ug_M`Lab  T!22% /--''!$7 / 3  . 55!+)#+ 6 

	
 >FK!@&(F	K{{ !Mjt.DD$ # 	H ;;+)#+ < 
 	
  	K$$q/$JJ	Ks   3+B6 6	C?CCc                   K   |t        d| d|       | j                  ||||||	|
||	      \  }}}}|t        |t              s3t	        t        j                  |      d|j                  dd       i      }n|}	 |j                  |||||t        |t              r|nd |       d {   }| j                  |||||||	      S 7 # t        $ r}| j                  ||      d }~ww xY ww)	Nr   r   r   rx   ry   r   rP   r   )r   r   r   r   r    r~   r   r   rZ   r   rb   ra   r   )rd   ro   r   rr   rC   rp   rB   r   rD   rt   r?   rn   ru   r@   r>   r   rA   r   r=   re   rM   s                        ri   r   z-BaseLLMHTTPHandler.async_audio_transcriptions  sT    " "6ug_M`Lab  55!+)#+ 6 

	
 >F4D!E!7$112EF$n&8&8t&LM"
 "(	K/44 !Mjt.DD$ 5 	 	H ;;+)#+ < 
 	
	  	K$$q/$JJ	Ks<   A:C.=.C
 +C,C
 0C.C
 
	C+C&&C++C."anthropic_messages_provider_config*anthropic_messages_optional_request_paramsextra_headerskwargsc           
        K   |t        |t              s%t        t        j                  j
                        }n|}|xs i }t        t        t        j                  j                  j                     |j                  dd             }|r|j                  di       ni }	|j                  |	xs i |||t        |      |
|      \  }}|j                  |t        |      |j                  di       d i d||       |j                  |||||      }||_        |j"                  j%                  |       |j'                  ||
|t        |      t        |      |	      }|j)                  |t        |      |||
|d
|      \  }}|j+                  dt-        j.                  |      dgd|t1        |      |d       	 |j3                  |||xs t-        j.                  |      |xs d
|       d {   }|j5                          ||j"                  d<   |r|j;                  ||||      }|S |j=                  |||      S 7 P# t6        $ r}| j9                  ||      d }~ww xY ww)Nr   provider_specific_headerr   )r@   ro   rq   rr   rC   rt   r?   metadata)r   preset_cache_keystream_response)ro   rr   rC   rn   )ro   rq   r   rC   r@   )r?   rt   ro   rr   rC   rE   Fr   user)rolecontentr   r   r   )rK   r@   rA   rE   rD   rP   httpx_response)ro   r   request_bodylitellm_logging_objro   r}   rD   )r   r   r    r~   r   	ANTHROPICr   r
   typesutilsProviderSpecificHeaderr   'validate_anthropic_messages_environmentr   update_environment_variables$transform_anthropic_messages_requestrE   model_call_detailsupdater   r   r   r[   r\   strrZ   raise_for_statusrb   ra   %get_async_streaming_response_iterator%transform_anthropic_messages_response)rd   ro   rq   r   r   rn   rC   rD   ru   r   rt   r?   rE   r   r=   r   r@   r   request_urlrF   re   rM   r   s                          ri    async_anthropic_messages_handlerz3BaseLLMHTTPHandler.async_anthropic_messages_handler  s      >F4D!E!7$11;;" "( 2#'W]]((??@JJ148$
  ( %(("= 	 /VV!'RF/ W 
	
 	00 !KL"JJz26$(#% =	 !4 	1 
	
 :^^7a) _ 
 $&&--l; 9II   / J 	
 %G$S$S  &  %T %
!! 	"tzz,/GHI'3," 	 	
	/44%AL)A' 5  H %%' <D&&'78 B h h')$/	 !i ! %$5[[%' \  3  	$$%G %  	s<   F5I#84H? ,H=-H? <I#=H? ?	I II  I#c                 z    |r/| j                  ||||t        |	t              r|	nd||||
|||      S t        d      )z9
        LLM HTTP Handler for Anthropic Messages
        N)ro   rq   r   r   ru   rn   rC   rD   rt   r?   rE   r   z<anthropic_messages_handler is not implemented for sync calls)r  r   r   r   )rd   ro   rq   r   r   rn   r   rC   rD   ru   rt   r?   rE   r   s                 ri   anthropic_messages_handlerz-BaseLLMHTTPHandler.anthropic_messages_handlerc  s]    , 88!3U;e!+F4D!Ev4$7-'! 9   WXXr   responses_api_provider_config$response_api_optional_request_paramsr   litellm_metadatac                    |r0| j                  |||||||||	|
t        |t              r|nd||      S |t        |t              st	        d|j                  dd      i      }n|}|j                  |j                  di       xs i ||      }|r|j                  |       |j                  dd      }|j                  |j                  t        |      	      }|j                  |||||
      }|j                  |d|||d       	 |rj|du r| j                  |||      \  }}|j                  ||||
xs |j                  d      |      }|du rt        ||||||      S t!        ||||||      S |j                  ||||
xs |j                  d            }	 |j'                  |||      S # t"        $ r}| j%                  ||      d}~ww xY w)z
        Handles responses API requests.
        When _is_async=True, returns a coroutine instead of making the call directly.
        N)ro   r   r  r  rn   rC   rD   r   r   rB   ru   r   r  rx   r   r   r@   ro   rC   rE   Fr?   rC   ro   r   r  rC   r@   r   r   r   TrE   rA   r   rB   rK   r@   r[   rB   rE   re   ro   rD   r  r  rn   r   rP   r   )async_response_api_handlerr   r   r   r   r   r   r  r   r?   r   transform_responses_api_requestr   _prepare_fake_stream_requestrZ   r"   r$   rb   ra   transform_response_api_response)rd   ro   r   r  r  rn   rC   rD   r   r   rB   ru   r   r   r  rk   r@   rE   r?   rA   re   rM   s                         ri   response_api_handlerz'BaseLLMHTTPHandler.response_api_handler  s   8 22.K5Y$7-'+%!+F4D!Ev4'!1 3    >FK!@ 1$n&8&8t&LM! !'/DD8<<_bQWUW) E 
 NN=) 699(EJ0AA#,,/ B 

 -LL1U) M 
 	'+$" 	 	
0	$&#'#D#D%!$/ $E $LFD
 -11 ## K;??	J! 2  $&<!)#$/6S)9,?  9% +2O%5(;  -11 ## K;??	J 2  -LL!# M 
 	
  	$$ = %  	s%   AF1 #F1 4(F1 1	G:GGc                   K   |t        |t              s3t        t        j                  |      d|j                  dd      i      }n|}|j                  |j                  di       xs i ||      }|r|j                  |       |j                  dd      }|j                  |j                  t        |            }|j                  |||||	      }|j                  |d
|||d       	 |rr|du r| j                  |||      \  }}|j                  ||||
xs |j                  d      |       d{   }|du rt        ||||||      S t!        ||||||      S |j                  ||||
xs |j                  d             d{   }	 |j'                  |||      S 7 o7 # t"        $ r}| j%                  ||      d}~ww xY ww)n
        Async version of the responses API handler.
        Uses async HTTP client to make requests.
        Nrx   ry   r   r  rE   Fr  r  r   r   r   Tr  rB   r  r  r   rP   r   )r   r   r    r~   r   r   r   r  r   r?   r   r  r   r  rZ   r"   r#   rb   ra   r  )rd   ro   r   r  r  rn   rC   rD   r   r   rB   ru   r   r  r=   r@   rE   r?   rA   re   rM   s                        ri   r  z-BaseLLMHTTPHandler.async_response_api_handler  ss    ( >F4D!E!7$112EF$n&8&8t&LM"
 "(/DD8<<_bQWUW) E 
 NN=) 699(EJ0AA#,,/ B 

 -LL1U) M 
 	'+$" 	 	
4	$&#'#D#D%!$/ $E $LFD "4!8!8 ## K;??	J! "9 "  $&<!)#$/6S)9,?  5% +2O%5(;  "4!8!8 ## K;??	J "9 "  -LL!# M 
 	
Y<  	$$ = %  	sg   C)G,A	F) 5F%6F) GF) G +F) F'F) G%F) 'F) )	G
2GG

Gresponse_idc                 P  K   |	t        |	t              s3t        t        j                  |      d|j                  dd      i      }n|	}|j                  |xs i d|      }|r|j                  |       |j                  |j                  t        |            }|j                  ||||      \  }}|j                  t        d|||d	
       	 |j                  ||||       d{   }|j#                  ||      S 7 # t        $ r}| j!                  ||      d}~ww xY ww)zt
        Async version of the delete response API handler.
        Uses async HTTP client to make requests.
        Nrx   ry   Noner  r  r   r?   rC   r@   r   r   r   r   rP   r}   rD   )r   r   r    r~   r   r   r   r  r   r?   r   %transform_delete_response_api_requestr   r   deleterb   ra   &transform_delete_response_api_response)rd   r   r  rC   rD   rn   r   r   rB   ru   r   r=   r@   r?   rK   rA   re   rM   s                     ri   !async_delete_response_api_handlerz4BaseLLMHTTPHandler.async_delete_response_api_handler  sv    " >F4D!E!7$112EF$n&8&8t&LM"
 "(/DD!'Rvn E 
 NN=)0AA#,,/ B 

 2WW#)	 X 
	T 	'+$" 	 	
		/66tW 7  H -SS!# T 
 	
  	$$ = %  	s<   CD&D (D )D -D& D 	D#DD##D&c                 D   |
r| j                  |||||||||		      S |	t        |	t              st        d|j	                  dd      i      }n|	}|j                  |xs i d|      }|r|j                  |       |j                  |j                  t        |            }|j                  ||||      \  }}|j                  t        d	|||d
       	 |j                  ||||      }|j!                  ||      S # t        $ r}| j                  ||      d}~ww xY w)r  	r   r  rC   rD   rn   r   r   rB   ru   Nrx   r   r"  r  r  r#  r   r   r   r   rP   r$  )r(  r   r   r   r   r   r  r   r?   r   r%  r   r   r&  rb   ra   r'  rd   r   r  rC   rD   rn   r   r   rB   ru   r   rk   r@   r?   rK   rA   re   rM   s                     ri   delete_response_api_handlerz.BaseLLMHTTPHandler.delete_response_api_handler  s   " 99'.K-'$7+% : 
 
 >FK!@ 1$n&8&8t&LM! !'/DD!'Rvn E 
 NN=)0AA#,,/ B 

 2WW#)	 X 
	T 	'+$" 	 	
		(//tW 0 H -SS!# T 
 	
  	$$ = %  	s   C> >	DDDc                 :   |
r| j                  |||||||||		      S |	t        |	t              st        d|j	                  dd      i      }n|	}|j                  |xs i d|      }|r|j                  |       |j                  |j                  t        |            }|j                  ||||      \  }}|j                  d	d	|||d
       	 |j	                  |||      }|j                  ||      S # t        $ r}| j                  ||      d}~ww xY w)zq
        Get a response by ID
        Uses GET /v1/responses/{response_id} endpoint in the responses API
        r*  Nrx   r   r"  r  r  r#  r   r   r   rK   r@   r{   rP   r$  )async_get_responsesr   r   r   r   r   r  r   r?   r   "transform_get_response_api_requestr   rb   ra   #transform_get_response_api_responser+  s                     ri   get_responsesz BaseLLMHTTPHandler.get_responses1  s   " ++'.K-'$7+% , 
 
 >FK!@ 1$n&8&8t&LM! !'/DD!'Rvn E 
 NN=)0AA#,,/ B 

 2TT#)	 U 
	T 	'+$" 	 	
	(,,gd,SH -PP!# Q 
 	
  	$$ = %  	s   C9 9	DDDc
                 v  K   |	t        |	t              s3t        t        j                  |      d|j                  dd      i      }
n|	}
|j                  |xs i d|      }|r|j                  |       |j                  |j                  t        |            }|j                  ||||      \  }}|j                  dd|||d	
       	 |
j                  |||       d{   }|j#                  ||      S 7 # t        $ r0}t        j                  d|        | j!                  ||      d}~ww xY ww)z0
        Async version of get_responses
        Nrx   ry   r"  r  r  r#  r   r   r   r.  zError retrieving response: rP   r$  )r   r   r    r~   r   r   r   r  r   r?   r   r0  r   rb   r   	exceptionra   r1  )rd   r   r  rC   rD   rn   r   r   rB   ru   r=   r@   r?   rK   rA   re   rM   s                    ri   r/  z&BaseLLMHTTPHandler.async_get_responses  s     >F4D!E!7$112EF$n&8&8t&LM"
 "(/DD!'Rvn E 
 NN=)0AA#,,/ B 

 2TT#)	 U 
	T 	'+$" 	 	

	/33 4  H -PP!# Q 
 	
  	$$'B1#%FG$$ = %  	s<   C	D9C= #C;$C= (D9;C= =	D6+D11D66D9afterbeforeincludelimitorder)ascdescc                 L   |r| j                  |||||||||	|
|||      S |t        |t              st        d|j	                  dd       i      }n|}|j                  |xs i d|      }|r|j                  |       |j                  |j                  t        |            }|j                  ||||||||	|
	      \  }}|j                  dd|||d	
       	 |j	                  |||      }|j                  ||      S # t        $ r}| j                  ||      d }~ww xY w)N)r   r  rC   rD   rn   r5  r6  r7  r8  r9  r   rB   ru   rx   r   r"  r  r  	r   r?   rC   r@   r5  r6  r7  r8  r9  r   r   r   r.  rP   r$  ) async_list_responses_input_itemsr   r   r   r   r   r  r   r?   r   "transform_list_input_items_requestr   rb   ra   #transform_list_input_items_response)rd   r   r  rC   rD   rn   r5  r6  r7  r8  r9  r   rB   ru   r   rk   r@   r?   rK   r{   re   rM   s                         ri   list_responses_input_itemsz-BaseLLMHTTPHandler.list_responses_input_items  s   " 88'.K-'$7+ 9    >FK!@ 1$n&8&8t&LM! !'/DD!'Rvn E 
 NN=)0AA#,,/ B 

 4VV#) W 

V 	'-$" 	 	
	Y(,,gf,UH -PP!# Q 
 	
  	Y$$q:W$XX	Ys   D 	D#DD#c                 P  K   |t        |t              s3t        t        j                  |      d|j                  dd       i      }n|}|j                  |xs i d|      }|r|j                  |       |j                  |j                  t        |            }|j                  ||||||||	|
	      \  }}|j                  dd|||d	       	 |j                  |||
       d {   }|j                  ||      S 7 # t        $ r}| j                  ||      d }~ww xY ww)Nrx   ry   r"  r  r  r=  r   r   r   r.  rP   r$  )r   r   r    r~   r   r   r   r  r   r?   r   r?  r   rb   ra   r@  )rd   r   r  rC   rD   rn   r5  r6  r7  r8  r9  r   rB   ru   r=   r@   r?   rK   r{   re   rM   s                        ri   r>  z3BaseLLMHTTPHandler.async_list_responses_input_items  s      >F4D!E!7$112EF$n&8&8t&LM"
 "(/DD!'Rvn E 
 NN=)0AA#,,/ B 

 4VV#) W 

V 	'-$" 	 	
	Y/33 4  H -PP!# Q 
 	
  	Y$$q:W$XX	Ys<   CD&D (D )D -D& D 	D#DD##D&create_file_datac           
         |j                  ||dg i |      }|j                  ||di ||      }|t        d      |j                  d||i       }|r| j	                  |||||||	|
      S |	t        |	t              st               }n|	}t        |t              st        |t              r|j                  ||||
      }n	 |j                  |i ||d	   d
   t        j                  |d	   d         |
      }|j                  j                  d      }|st        d      |j                  ||d   d
   |d   d   |
      }|j#                  d|||      S # t        $ r}| j!                  ||      d}~ww xY w)G
        Creates a file using Gemini's two-step upload process
        r   r   )r?   rt   ro   rr   rC   rA   Nz$api_base is required for create_file)ro   rC  rC   rr   )transformed_requestrC   r>   r@   r?   rD   ru   rB   r   initial_requestr@   rA   X-Goog-Upload-URL-Failed to get upload URL from initial requestupload_requestrP   ro   r}   rD   rC   )r   get_complete_file_urlr   transform_create_file_requestasync_create_filer   r   r   r  bytesrZ   r[   r\   r@   r   rb   ra   transform_create_file_response)rd   rC  rC   r>   r@   r?   rt   rD   r   ru   rB   rF  rk   upload_responseinitial_response
upload_urlrM   s                    ri   create_filezBaseLLMHTTPHandler.create_filee  s-   " "66) 7 
 #88)! 9 
 CDD .KK-)	 L 
 ))$7- /!' * 	 	 >FK!@ 1 3 &)3/:4
 044(	 5 O#4#9#9 !-.?@K $78I$J6$RS# $: $  .5599:MN
!$%TUU #4"8"8"/0@A)L,-=>vF#	 #9 # ==(#)	 > 
 	
  (($3 )  s   BE 	E9!E44E9rF  c	                   K   |t        |t              st        |j                        }	n|}	t        |t              st        |t
              r|	j                  ||||       d{   }
n	 |	j                  |i ||d   d   t        j                  |d   d         |       d{   }|j                  j                  d      }|st        d      |	j                  ||d	   d   |d	   d   |       d{   }
|j!                  d|
||      S 7 7 l7 # t        $ r0}t        j                  d
|        | j                  ||      d}~ww xY ww)rE  Nr   r   rG  r@   rA   rH  rI  rJ  zError creating file: rP   rK  )r   r   r    rn   r  rO  rZ   r[   r\   r@   r   r   rb   r   r4  ra   rP  )rd   rF  rC   r>   r@   r?   rD   ru   rB   r=   rQ  rR  rS  rM   s                 ri   rN  z$BaseLLMHTTPHandler.async_create_file  s     >F4D!E!7,@@" "()3/:4
 %7$;$;(	 %< % O);)@)@ !-.?@K $78I$J6$RS# *A * $  .5599:MN
!$%TUU );(?(?"/0@A)L,-=>vF#	 )@ ) # ==(#)	 > 
 	
O$"#  ((+@)DE(($3 )  s[   A$E&D'E-;D (D)AD 9D:D >ED D 	E"+EEEc                      y)z!
        Lists all files
        N rd   s    ri   
list_fileszBaseLLMHTTPHandler.list_files	       	r   c                      y)z 
        Deletes a file
        NrW  rX  s    ri   delete_filezBaseLLMHTTPHandler.delete_file	  rZ  r   c                      y)z2
        Returns the metadata of the file
        NrW  rX  s    ri   retrieve_filez BaseLLMHTTPHandler.retrieve_file%	  rZ  r   c                      y)z1
        Returns the content of the file
        NrW  rX  s    ri   retrieve_file_contentz(BaseLLMHTTPHandler.retrieve_file_content+	  rZ  r   c                 B    |du rd}|j                  dd       ||fS ||fS )zI
        Handles preparing a request when `fake_stream` is True.
        TFrE   N)r   )rd   rE   rA   r   s       ri   r  z/BaseLLMHTTPHandler._prepare_fake_stream_request1	  s3     $FHHXt$4<t|r   rM   r:   c                    t        |dd      }t        |dd       }t        |t        j                        r-|j                  j
                  }|j                  j                  }nt        |dt        |            }t        |dd       }||rt        |dd       }|rt        |d      rt        |d|      }|rt        |      }ni }|ddl
m}  ||||      |j                  |||	      )
NrU   i  r@   textre   r   )BaseLLMException)rU   messager@   rS   )getattrr   r]   r^   re   rc  rU   r  hasattrr   )litellm.llms.base_llm.chat.transformationrd  rc   )rd   rM   r>   rU   error_headers
error_texterror_responserd  s           ri   ra   z BaseLLMHTTPHandler._handle_error@	  s     a49d3a../J**00K FCF3J J5 ^#NItDMgnf= DJ /MM"R"'"%  --$#! . 
 	
r   	websocketc
                 h  K   dd l }
ddlm} |j                  |||      }|j	                  |||      }	 |
j                  ||      4 d {   }t        |t        ||      |||      }|j                          d {    d d d       d {    y 7 F7 7 	# 1 d {  7  sw Y   y xY w# |
j                  j                  $ rQ}t        j                  d|        |j                  |j                  t        |             d {  7   Y d }~y d }~wt         $ r}t        j                  d|        	 |j                  ddt        |              d {  7   nD# t"        $ r3}d	t        |      v sd
t        |      v rnt!        d|       Y d }~nd }~ww xY wY d }~y Y d }~y d }~ww xY ww)Nr   )ClientConnection)r@   ro   rt   )r   zError connecting to backend: )codereasoni  zInternal server error: zalready completedzwebsocket.closez*Unexpected error while closing WebSocket: )
websocketswebsockets.asyncio.clientrn  r   r   connectr   r   bidirectional_forward
exceptionsInvalidStatusCoder   r4  closerU   r  rb   RuntimeError)rd   ro   rl  rD   r>   r@   r?   rt   ru   rB   rq  rn  rK   
backend_wsrealtime_streamingrM   close_errors                    ri   async_realtimez!BaseLLMHTTPHandler.async_realtimeo	  s     	>..xH!66 7 
 	!))7 *  
A 
A%6):6#&" )>>@@@
A 
A 
A A
A 
A 
A 
A $$66 	E$$'DQC%HI//q}}SV/DDD 	$$'DQC%HIoo(?Ax&H &      
&#k*::>OSVT ?  $D[MR  

 	s   2F2B. BB. -B=B>BB. BB. F2B. BB. B+B" B+'B. *F2+B. .F/ADD	DF2F/F*8"E!EE! F*!	F*)FF*FF* 
F2*F//F2imagepromptimage_edit_provider_config"image_edit_optional_request_paramsc                    |r1| j                  |||||||||
||	t        |t              r|nd||      S |t        |t              st	        d|j                  dd      i      }n|}|j                  |j                  |j                  di       xs i |      }|
r|j                  |
       |j                  ||j                  t        |            }|j                  ||||||      \  }}|j                  |d	|||d
       	 |j                  |||||	      }|j#                  |||      S # t        $ r}| j!                  ||      d}~ww xY w)z

        Handles image edit requests.
        When _is_async=True, returns a coroutine instead of making the call directly.
        N)ro   r}  r~  r  r  rn   rC   rD   r   r   rB   ru   r   r  rx   r   r   r   ro   r?   rC   ro   r}  r~  r  rC   r@   r   r   r   rK   r@   rA   r   rB   rP   r   )async_image_edit_handlerr   r   r   r   r   r   rt   r  r   r?   r   transform_image_edit_requestr   rZ   rb   ra   transform_image_edit_response)rd   ro   r}  r~  r  r  rn   rC   rD   rB   r   r   ru   r   r   r  rk   r@   r?   rA   r   re   rM   s                          ri   image_edit_handlerz%BaseLLMHTTPHandler.image_edit_handler	  s   4 00+E3U$7-'+%!+F4D!Ev4'!1 1  " >FK!@ 1$n&8&8t&LM! !',AA"**6::?BOUSU B 
 NN=)->>#,,/ ? 
 1MM/Q) N 
e 	'+$" 	 	
	(-- . H *GG!# H 
 	
  	$$ : %  	s   D0 0	E9EEc                   K   |t        |t              s3t        t        j                  |      d|j                  dd      i      }n|}|j                  |j                  |j                  di       xs i |      }|
r|j                  |
       |j                  ||j                  t        |            }|j                  ||||||      \  }}|j                  |d|||d	
       	 |j                  |||||	       d{   }|j#                  |||      S 7 # t        $ r}| j!                  ||      d}~ww xY ww)zk
        Async version of the image edit handler.
        Uses async HTTP client to make requests.
        Nrx   ry   r   r   r  r  r   r   r   r  rP   r   )r   r   r    r~   r   r   r   rt   r  r   r?   r   r  r   rZ   rb   ra   r  )rd   ro   r}  r~  r  r  rn   rC   rD   rB   r   r   ru   r   r  r=   r@   r?   rA   r   re   rM   s                         ri   r  z+BaseLLMHTTPHandler.async_image_edit_handler
  s    * >F4D!E!7$112EF$n&8&8t&LM"
 "(,AA"**6::?BOUSU B 
 NN=)->>#,,/ ? 
 1MM/Q) N 
e 	'+$" 	 	
	/44 5  H *GG!# H 
 	
  	$$ : %  	s<   C&E)D DD ED 	D>&D99D>>E image_generation_provider_config(image_generation_optional_request_paramsc                 F   |r0| j                  ||||||||	|
|t        |t              r|nd||      S |t        |t              st	        d|j                  dd      i      }n|}|j                  |j                  dd      |j                  di       xs i |g |t        |            }|	r|j                  |	       |j                  ||j                  dd      |j                  dd      |t        |      	      }|j                  |||t        |      |
      }|j                  |d|||d       	 |j                  ||||      }|j                  ||t!        j"                         |||t        |      d      }|S # t        $ r}| j                  ||      d}~ww xY w)z
        Handles image generation requests.
        When _is_async=True, returns a coroutine instead of making the call directly.
        N)ro   r~  r  r  rn   rC   rD   r   r   rB   ru   r   r  rx   r   rt   r   r   r?   ro   r?   rt   rr   rC   ro   r~  rr   rC   r@   r   r   r   r   rP   ro   r}   rp   rD   rO   rr   rC   rs   )async_image_generation_handlerr   r   r   r   r   r   r   r  r   "transform_image_generation_requestr   rZ   rb   ra   #transform_image_generation_responser~   r6   )rd   ro   r~  r  r  rn   rC   rD   rB   r   r   ru   r   r   r  rk   r@   r?   rA   re   rM   rp   s                         ri   image_generation_handlerz+BaseLLMHTTPHandler.image_generation_handlerh
  s   0 661Q9a$7-'+%!+F4D!Ev4'!1 7    >FK!@ 1$n&8&8t&LM! !'2GG"&&y$7<@@RTU[Y[D/ H 
 NN=)3DD#''
D9"&&y$7D/ E 
 0RRD/ S 
 	'+$" 	 	
	(--	 . H )I(l(l!"002#D/ )m 	)
 #  	$$ @ %  	s   4E? ?	F FF c                 &  K   |t        |t              s3t        t        j                  |      d|j                  dd      i      }n|}|j                  |j                  dd      |j                  di       xs i |g |t        |            }|	r|j                  |	       |j                  ||j                  dd      |j                  dd      |t        |            }|j                  |||t        |      |	      }|j                  |d
|||d       	 |j                  ||||       d{   }|j                  ||t        j                          |||t        |      d      }|S 7 :# t        $ r}| j                  ||      d}~ww xY ww)zq
        Async version of the image generation handler.
        Uses async HTTP client to make requests.
        Nrx   ry   rt   r   r   r?   r  r  r   r   r   r   rP   r  )r   r   r    r~   r   r   r   r   r  r   r  r   rZ   rb   ra   r  r6   )rd   ro   r~  r  r  rn   rC   rD   rB   r   r   ru   r   r  r=   r@   r?   rA   re   rM   rp   s                        ri   r  z1BaseLLMHTTPHandler.async_image_generation_handler
  s    ( >F4D!E!7$112EF$n&8&8t&LM"
 "( 3GG"&&y$7<@@RTU[Y[D/ H 
 NN=)3DD#''
D9"&&y$7D/ E 
 0RRD/ S 
 	'+$" 	 	
	/44	 5  H )I(l(l!"002#D/ )m 	)
 1  	$$ @ %  	s<   DFE- 0E+1E- 56F+E- -	F6F		FFvector_store_idr   #vector_store_search_optional_paramsvector_store_provider_configc           
        K   |t        |t              s3t        t        j                  |      d|j                  dd       i      }n|}|j                  |xs i |      }|r|j                  |       |j                  |j                  t        |            }|j                  |||||t        |            \  }}t        |      }|j                  |xs i        |j                  ||||      \  }}|j                  dd|||d	       |t        j                  |      n|}	 |j!                  ||||

       d {   }|j'                  ||      S 7 # t"        $ r}| j%                  ||      d }~ww xY ww)Nrx   ry   r@   rC   r  r  r   r  r?   r   rC   r@   rr   rO   r?   r   r   r   r   rP   re   r   )r   r   r    r~   r   r   r   r  r   r?   r   %transform_search_vector_store_requestr   r   r[   r\   rZ   rb   ra   &transform_search_vector_store_response)rd   r  r   r  r  rn   rC   rD   r   r   rB   ru   r   r=   r@   r?   rK   r   all_optional_paramsrF   rO   re   rM   s                          ri   !async_vector_store_search_handlerz4BaseLLMHTTPHandler.async_vector_store_search_handler;  s     >F4D!E!7$112EF$n&8&8t&LM"
 "(.CC!'R D 
 NN=)/@@#,,/ A 
 )NN /4W!$/#N3 O  	\ /3>.B""#F#L"M$@$M$M/%	 %N %
!! 	'3$" 	 	
 4D3Ktzz,/Qa	X/44!	 5  H ,RR + S 
 	
  	X$$q:V$WW	Xs<   D$E='E ?E E E=E 	E:"E55E::E=c                    |r| j                  |||||||||	|
|      S |t        |t              st        d|j	                  dd       i      }n|}|j                  |xs i |      }|r|j                  |       |j                  |j                  t        |            }|j                  |||||t        |            \  }}t        |      }|j                  |xs i        |j                  ||||      \  }}|j                  dd|||d	
       |t        j                  |      n|}	 |j                  |||      }|j%                  ||      S # t         $ r}| j#                  ||      d }~ww xY w)N)r  r   r  r  rC   rD   rn   r   r   rB   ru   rx   r   r  r  r  r  r   r   r   )rK   r@   rA   rP   r  )r  r   r   r   r   r   r  r   r?   r   r  r   r   r[   r\   rZ   rb   ra   r  )rd   r  r   r  r  rn   rC   rD   r   r   rB   ru   r   rk   r@   r?   rK   r   r  rF   rO   re   rM   s                          ri   vector_store_search_handlerz.BaseLLMHTTPHandler.vector_store_search_handler  s   " 99 /4W-I-'$7+% :   >FK!@ 1$n&8&8t&LM! !'.CC!'R D 
 NN=)/@@#,,/ A 
 )NN /4W!$/#N3 O  	\ /3>.B""#F#L"M$@$M$M/%	 %N %
!! 	'3$" 	 	
 4D3Ktzz,/Qa	X(--! . H ,RR + S 
 	
  	X$$q:V$WW	Xs   /E 	E7E22E7#vector_store_create_optional_paramsc                 @  K   |	t        |	t              s3t        t        j                  |      d|j                  dd       i      }n|	}|j                  |xs i |      }|r|j                  |       |j                  |j                  t        |            }|j                  ||      \  }}|j                  dd|||d       	 |j                  ||||	       d {   }|j!                  |      S 7 # t        $ r}| j                  ||
      d }~ww xY ww)Nrx   ry   r  r  r  r?   r   r   r   r   rP   re   )r   r   r    r~   r   r   r   r  r   r?   r   %transform_create_vector_store_requestr   rZ   rb   ra   &transform_create_vector_store_response)rd   r  r  rn   rC   rD   r   r   rB   ru   r   r=   r@   r?   rK   r   re   rM   s                     ri   !async_vector_store_create_handlerz4BaseLLMHTTPHandler.async_vector_store_create_handler  sj     >F4D!E!7$112EF$n&8&8t&LM"
 "(.CC!'R D 
 NN=)/@@#,,/ A 
 )NN4W! O  	\ 	'3$" 	 	
	X/44|W 5  H ,RR S 
 	
  	X$$q:V$WW	Xs<   CD	C: !C8"C: &D8C: :	DDDDc                 2   |
r| j                  |||||||||		      S |	t        |	t              st        d|j	                  dd       i      }n|	}|j                  |xs i |      }|r|j                  |       |j                  |j                  t        |            }|j                  ||      \  }}|j                  dd|||d	       	 |j                  |||
      }|j                  |      S # t        $ r}| j                  ||      d }~ww xY w)N)	r  r  rC   rD   rn   r   r   rB   ru   rx   r   r  r  r  r   r   r   )rK   r@   r[   rP   r  )r  r   r   r   r   r   r  r   r?   r   r  r   rZ   rb   ra   r  )rd   r  r  rn   rC   rD   r   r   rB   ru   r   rk   r@   r?   rK   r   re   rM   s                     ri   vector_store_create_handlerz.BaseLLMHTTPHandler.vector_store_create_handler+  s    994W-I-'$7+% : 
 
 >FK!@ 1$n&8&8t&LM! !'.CC!'R D 
 NN=)/@@#,,/ A 
 )NN4W! O  	\ 	'3$" 	 	
	X(--| . H ,RR S 
 	
  	X$$q:V$WW	Xs   C5 5	D>DDcontents generate_content_provider_configgenerate_content_config_dictc                    ddl m} |r0| j                  |||||||||	|
t        |t              r|nd||      S |t        |t
              st        d|j                  dd      i      }n|}|j                  |j                  |t        |      |      \  }}|r|j                  |       |j                  |||      }|	r|j                  |	       |j                  |d	|||d
       	 |r)|j                  ||||
d      } ||||||xs i ||      S |j                  ||||
      }	 |j#                  |||      S # t        $ r}| j!                  ||      d}~ww xY w)z
        Handles Google GenAI generate content requests.
        When _is_async=True, returns a coroutine instead of making the call directly.
        r   )+GoogleGenAIGenerateContentStreamingIteratorN)ro   r  r  r  rn   rC   rD   r   r   rB   ru   rE   r  rx   r   )r?   ro   rC   rE   ro   r  r  r   r   r   Tr  re   ro   rD   r  r  rn   r   r   rP   r   )'litellm.google_genai.streaming_iteratorr  async_generate_content_handlerr   r   r   r   r   sync_get_auth_token_and_urlr?   r   r  "transform_generate_content_requestr   rZ   rb   ra   #transform_generate_content_response)rd   ro   r  r  r  rn   rC   rD   r   r   rB   r   ru   rE   r  r  rk   r@   r?   rA   re   rM   s                         ri   generate_content_handlerz+BaseLLMHTTPHandler.generate_content_handlery  s   *	
 66!1Q-I$7-'+%!+F4D!Ev4!1 7    >FK!@ 1$n&8&8t&LM! !' -HH'00#N3	 I  	 NN=) 0RR)E S 
 KK
# 	'+$" 	 	
	,11 ## 2  C% +5U%5%;(;!%  -11 ##	 2  0SS!# T 
 	
  	$$ @ %  	s   **D? D? ?	E EE c           	        K   ddl m} |t        |t              s3t	        t        j                  |      d|j                  dd      i      }n|}|j                  |t        |      ||j                         d{   \  }}|r|j                  |       |j                  |||      }|	r|j                  |	       |j                  |d|||d	
       	 |r1|j                  ||||
d       d{   } ||||||xs i ||      S |j                  ||||
       d{   }	 |j#                  |||      S 7 7 K7 # t        $ r}| j!                  ||      d}~ww xY ww)zq
        Async version of the generate content handler.
        Uses async HTTP client to make requests.
        r   )0AsyncGoogleGenAIGenerateContentStreamingIteratorNrx   ry   )ro   rC   rE   r?   r  r   r   r   Tr  r  r   rP   r   )r  r  r   r   r    r~   r   r   get_auth_token_and_urlr   r?   r  r  r   rZ   rb   ra   r  )rd   ro   r  r  r  rn   rC   rD   r   r   rB   ru   rE   r  r  r=   r@   r?   rA   re   rM   s                        ri   r  z1BaseLLMHTTPHandler.async_generate_content_handler  s    (	
 >F4D!E!7$112EF$n&8&8t&LM"
 "( 3II#N3'00	 J   	 NN=) 0RR)E S 
 KK
# 	'+$" 	 	
	!3!8!8 ## "9 "  H% +5U%5%;(;!%  "4!8!8 ##	 "9 "  0SS!# T 
 	
AD$  	$$ @ %  	sg   A9E%;D;<AE%E 1D=2E E%	E !D?"E &E%=E ?E 	E"
EE""E%)FN)NNFN)FFNNNN)FNF)FNNN)NNN)FNNNN)NFNN)NNNNFN)NNNFN)NNNNFFN)NNNNF)NNNNNF)NNNNN)
NNNN   r;  NNNF)	NNNNr  r;  NNN)FNN)NN)NNNN)NNNFFN)NNNFNFN)gr   
__module____qualname__r   r   r  r   r   floatr]   TimeoutLiteLLMLoggingObjboolr
   rO  Responserj   r   rm   r7   listr   r   r   r   r   r   r   Headersr   r   r.   r   r   r   r   r*   r+   r   r   r/   r   r   r0   r   intr   r   r   r   r   r-   r%   r   r  r  r(   r   r)   r!   r  r  r,   r(  r,  r2  r/  r	   rA  r>  r&   r   r'   rT  rN  rY  r\  r^  r`  r  rb   r   r   r   r   ra   r   r|  r6   r  r  r  r  r3   r4   r  r  r1   r2   r  r  r  r  rW  r   ri   r<   r<   \   s!    ,0:,: $: 	:
 : : uemm+,: : ': : #5/: 
:L ,0:&: $: 	:
 : : uemm+,: : ': : #5/: 
:V "&-1,0%4
 4
 $4
 	4

 4
 4
 uemm+,4
 4
 &4
 '4
 4
 4
 4
 4
 #4
  )*!4
" #4
$ #5/%4
F "'!!%,0AE04%b
b
 b
 	b

 !b
 &b
 'b
 b
 uemm+,b
 b
 b
 b
 b
 #b
  $sCx.)!b
" {,<<=>#b
$ "*-%b
d "(,!K9#K9 K9 	K9
 K9 #5/K9 K9 K9 K9 K9 K9 uemm+,K9 K9 %K9  !K9" 
sDy	#K9t "-1$(,0!77 7 	7
 !7 7 $7 uemm+,7 '7 7 7 7 7 )*7 D>7  #5/!7L "-1$(,0!L3L3 !L3 $	L3
 L3 L3 L3 L3 'L3 uemm+,L3 L3 L3 L3 )*L3 D>L3  #5/!L3" 
sEMM!	"#L3\ $ 	
 
< "&AE ,0g
g
 g
 	g

 !g
 'g
 3-g
 g
 g
 *g
 #g
 {,<<=>g
 g
 $sCx.)g
 
g
j "&9=AE*
*
 *
 	*

 *
 !*
 -*
 **
 '*
 *
 *
 #*
 %u}} 456*
 {,<<=>*
 
*
j  ,0!%"&AET
T
 !T
 '	T

 *T
 !5T
 %u}} 456T
 'T
 T
 $sCx.)T
 #T
 3-T
 {,<<=>T
 
T
@ "&9=AE%
%
 %
 !	%

 *%
 '%
 '%
 %
 %
 #%
 %u}} 456%
 {,<<=>%
 
%
NB2B2 B2 	B2
 B2 'B2 #B2 3-B2 $sCx.)B2 6B2 
tS%eT 12HTNB	CB2H
5
 
 ..	

 .
 '
 
 #
 

8 BF$,0BF!U
U
 U
 	U

 U
 .U
 U
 U
 'U
 #U
 3-U
 !U
 {,<<=>U
 U
 $sCx.)U
  "">?!U
" 
$iS:O0O&PP	Q#U
H BF,0BFG
G
 G
 	G

 G
 .G
 G
 G
 'G
 #G
 3-G
 !G
 {,<<=>G
 $sCx.)G
 "">?G
  
!G
d .226!%"&!&+/FF t*F -H	F
 59F !F -F 'F )*F  S#X/F #F 3-F F c3h(F 
(-7	8Fd BF!%"&!&+/&Y&Y t*&Y -H	&Y
 59&Y !&Y &Y -&Y '&Y {,<<=>&Y #&Y 3-&Y &Y c3h(&Y 
!#sE";]"JKKL	N
&Yb 37/39=AE!59O
O
 S,,-O
 (>	O

 /3O
 !O
 -O
 'O
  S#X/O
 T#s(^,O
 %u}} 456O
 {,<<=>O
 O
 O
 #4S>2O
  
)e02SSTT	
	
!O
t 37/39=AE!59z
z
 S,,-z
 (>	z

 /3z
 !z
 -z
 'z
  S#X/z
 T#s(^,z
 %u}} 456z
 {,<<=>z
 z
 #4S>2z
 
#%FF	Gz
F 37/39=AEE
E
 (>E
 -	E

 'E
 &c]E
  S#X/E
 T#s(^,E
 %u}} 456E
 {,<<=>E
 E
 
E
\ 37/39=AEP
P
 (>P
 -	P

 'P
 &c]P
  S#X/P
 T#s(^,P
 %u}} 456P
 {,<<=>P
 P
 
#YsC9M/M%NN	OP
p .226/39=AEN
N
 (>N
 -	N

 'N
 &c]N
  S#X/N
 T#s(^,N
 %u}} 456N
 {,<<=>N
 N
 
#YsC9M/M%NN	ON
l .226/39=AED
D
 (>D
 -	D

 'D
 &c]D
  S#X/D
 T#s(^,D
 %u}} 456D
 {,<<=>D
 
D
^ .2# $'+(.269=AES
S
 (>S
 -	S

 'S
 &c]S
 }S
 S
 $s)$S
 S
 }%S
  S#X/S
 %u}} 456S
 {,<<=>S
 S
  
tYsC~..	/!S
v .2# $'+(.269=AED
D
 (>D
 -	D

 'D
 &c]D
 }D
 D
 $s)$D
 D
 }%D
  S#X/D
 %u}} 456D
 {,<<=>D
 
D
^  AE9=l
+l
 l
 )	l

 l
 3-l
 #l
 'l
 l
 {,<<=>l
 %u}} 456l
 
35E+E!FF	Gl
l BF9=D
"5#t#34D
 D
 )	D

 D
 D
 'D
 {,<<=>D
 %u}} 456D
L  	
 
tTz	-
-
 "%!0'#%

-
l #'!% $#'66 6 '	6
 ,6 6 3-6 #6 6 %6F 37/3AE!59!j
j
 j
 	j

 %8j
 -1j
 !j
 -j
 'j
 uemm+,j
  S#X/j
 T#s(^,j
 {,<<=>j
 j
 j
  #4S>2!j
" 
#sM)*	,
#j
n 37/3AE!59S
S
 S
 	S

 %8S
 -1S
 !S
 -S
 'S
 uemm+,S
  S#X/S
 T#s(^,S
 {,<<=>S
 S
 #4S>2S
  
!S
~ 37/3AE!59qq q +D	q
 37q !q q 'q uemm+,q  S#X/q T#s(^,q {,<<=>q q q #4S>2q  
#sM)*	,
!qz 37/3AE!59]] ] +D	]
 37] !] ] '] uemm+,]  S#X/] T#s(^,] {,<<=>] ] #4S>2] 
]R 37/39=AEO
O
 S$s)^$O
 .T	O

 '<O
 !O
 -O
 'O
  S#X/O
 T#s(^,O
 %u}} 456O
 {,<<=>O
 O
 
#O
t 37/39=AE`
`
 S$s)^$`
 .T	`

 '<`
 !`
 -`
 '`
  S#X/`
 T#s(^,`
 %u}} 456`
 {,<<=>`
 `
 
!9S#7P-P#QQ
`
R 37/39=AE;
-S;
 '<;
 !	;

 -;
 ';
  S#X/;
 T#s(^,;
 %u}} 456;
 {,<<=>;
 ;
 
#;
H 37/39=AEI
-SI
 '<I
 !	I

 -I
 'I
  S#X/I
 T#s(^,I
 %u}} 456I
 {,<<=>I
 I
 
!9S#7P-P#QQ
I
n 37/39=AE59w
w
 w
 +O	w

 '+w
 !w
 -w
 'w
  S#X/w
 T#s(^,w
 %u}} 456w
 w
 {,<<=>w
 w
 #4S>2w
  
!w
D 37/39=-159f
f
 f
 +O	f

 '+f
 !f
 -f
 'f
  S#X/f
 T#s(^,f
 %u}} 456f
 )*f
 f
 #4S>2f
 
f
r   r<   )\r[   typingr   r   r   r   r   r   r	   r
   r   r   r   r]   r~   litellm.litellm_core_utilslitellm.typeslitellm.types.utilslitellm._loggingr   -litellm.litellm_core_utils.realtime_streamingr   7litellm.llms.base_llm.anthropic_messages.transformationr   r   r   )litellm.llms.base_llm.base_model_iteratorr   rh  r   .litellm.llms.base_llm.embedding.transformationr   *litellm.llms.base_llm.files.transformationr   1litellm.llms.base_llm.google_genai.transformationr   /litellm.llms.base_llm.image_edit.transformationr   5litellm.llms.base_llm.image_generation.transformationr   -litellm.llms.base_llm.realtime.transformationr   +litellm.llms.base_llm.rerank.transformationr   .litellm.llms.base_llm.responses.transformationr   1litellm.llms.base_llm.vector_store.transformationr   &litellm.llms.custom_httpx.http_handlerr   r   r   r    $litellm.responses.streaming_iteratorr!   r"   r#   r$   8litellm.types.llms.anthropic_messages.anthropic_responser%   litellm.types.llms.openair&   r'   r(   r)   litellm.types.rerankr*   r+   litellm.types.responses.mainr,   litellm.types.routerr-   r.   r/   r0   litellm.types.vector_storesr1   r2   r3   r4   litellm.utilsr5   r6   r7   r8   *litellm.litellm_core_utils.litellm_loggingr9   _LiteLLMLoggingObj0litellm.llms.base_llm.passthrough.transformationr:   r  r<   rW  r   ri   <module>r     s          !   + K K @ N F P M H Q S    F = 5 S S   XV*|3
 |3
r   