
    g,v                         d dl Z d dlZd dl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mZmZmZ d dlmZmZ d dlmZmZmZ d d	lmZm Z m!Z! er	d d
l"m#Z$ e$Z%neZ% G d d      Z&y)    N)TYPE_CHECKINGAnyOptionalTupleUnion)
BaseConfig)BaseEmbeddingConfig)BaseRerankConfig)AsyncHTTPHandlerHTTPHandler_get_httpx_clientget_async_httpx_client)OptionalRerankParamsRerankResponse)EmbeddingResponse	FileTypesTranscriptionResponse)CustomStreamWrapperModelResponseProviderConfigManager)Loggingc            "          e Zd Z	 d/dedededededeee	j                  f   ded	ed
e	j                  fdZ	 d/dedededededeee	j                  f   ded	ed
e	j                  fdZ	 	 d0d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   fdZdddi df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e   dedee   dee   deeeef      fdZ	 	 d1dedededededededeee	j                  f   dedee   d
eeef   fdZ	 	 d1d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e   fdZ	 	 d1d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ee	j4                  f   fdZdddi fd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fd!Z	 	 	 d2d"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di dddfdededed$e deeee	j                  f      de!d%ededee   dee   deeeef      d
e!fd&Z"	 	 	 d2d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&fd)Z'ddi 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eef      d+eded
e(fd,Z*d-e+deee#f   fd.Z,y)3BaseLLMHTTPHandlerFasync_httpx_clientprovider_configapi_baseheadersdatatimeoutlitellm_paramsstreamreturnc	                   K   |j                   }	d}
t        t        |	d            D ]5  }	 |j                  ||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   r   r   r!   er    r(   request_datar(   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   r   r   r    r!   r2   responseir(   hit_max_retryshould_retrys                  _/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/custom_httpx/llm_http_handler.py_make_common_async_callz*BaseLLMHTTPHandler._make_common_async_call"   sK     CC 	0 .2sBAFGAO!3!8!8 #D)#! "9 " . 3 H6 !118 2   A (( S !A)P P.hh  i    'WWd X  
 ,,q/,RR O((1o(NNOsR   'C<,A8A6A8C<6A88C92C=C<CC9!C44C99C<sync_httpx_clientc	                    |j                   }	d }
t        t        |	d            D ]-  }	 |j                  ||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)	Nr$   r%   r'   r)   r+   r,   r-   r.   r1   )r?   rF   r   r   r   r   r   r    r!   r2   r@   rA   r(   rB   rC   s                  rD   _make_common_sync_callz)BaseLLMHTTPHandler._make_common_sync_callW   s=    CC 	0 .2sBAFGAO,11 #D)#! 2 . 3 H6 !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)   )A,,C-?2C	6C		C-C((C-Ncustom_llm_providermodelmodel_responselogging_objmessagesoptional_paramsencodingapi_keyclientc                    K   | t        t        j                  |            }n|}| j                  |||||||d       d {   }|j	                  ||||	|||
|||
      S 7 w)Nllm_providerFr   r   r   r   r   r   r    r!   
rJ   raw_responserK   rL   rP   r*   rM   rN   r    rO   )r   litellmLlmProvidersrE   transform_response)r?   rI   r   r   r   r   r   rJ   rK   rL   rM   rN   r    rO   rP   rQ   r   r@   s                     rD   async_completionz#BaseLLMHTTPHandler.async_completion   s     $ >!7$112EF" "(551+) 6 	
 	
 11!)#+) 2 
 	
	
s   AA%A# A%acompletionfake_streamc                 V   t        j                  |t        j                  |            }|j	                  ||xs i ||||      }|j                  ||||      }|j                  ||||
|      }|j                  |||||d       |du r}|du r@|dur||d<   | j                  |||||||	||||t        |t              r||
	      S d |
	      S | j                  ||||||	|||||||
||t        |t              r|
      S d 
      S |du rK|dur||d<   | j                  ||||||||	||t        |t              r|nd |
      \  }}t        ||||      S |t        |t              st               }n|}| j!                  ||||||	|
      }|j#                  |||||||||
|
      S )NrJ   provider)rP   r   rJ   rM   rN   r   )r   rJ   rN   r!   )rJ   rM   rN   r    r   complete_input_dictr   r   inputrP   additional_argsTr!   )rJ   rM   r   r   rI   r   r   rL   r   r]   rQ   r    )rI   r   r   r   r   r   rJ   rK   rL   rP   rM   rN   r    rO   rQ   )r   r   r   r   rJ   rM   rL   r   r]   rQ   r    completion_streamrJ   rI   rL   )rF   r   r   r   r   r   r    rV   )r   get_provider_chat_configrX   rY   validate_environmentget_complete_urltransform_requestpre_callacompletion_stream_function
isinstancer   r[   make_sync_callr   r   r   rH   rZ   )r?   rJ   rM   r   rI   rK   rO   rL   rN   r   r    r\   r!   r]   rP   r   rQ   r   r   rg   rF   r@   s                         rD   
completionzBaseLLMHTTPHandler.completion   s   & 0HH'"6"67J"K
 "66Mr+ 7 
 #33+	 4 
 00+) 1 
 	'+$" 	 	
 $~d*%+DN77%%#(;$3# + + "-*VEU2V  $2! 8   "#1! 8  ( ,,(;$3%###1 +#%$3#1% "-*VEU2V ! -  $ "% -  , T>$&!'X)-)<)< /!!'' )j.M - *= *&w" '"3$7'	  >FK!@ 1 3 &../+) / 
 11!)#+) 2 
 	
    c           
      l   |t        |t              st               }n|}d}|
du rd}| j                  ||||||	||      }|
du r"|j	                  |j                         d      }n!|j	                  |j                         d      }|j                  |ddd|i       |t        |j                        fS )	NTF)rF   r   r   r   r   r   r    r!   streaming_responsesync_stream first stream response receivedrb   rd   rP   original_responsere   )
rn   r   r   rH   get_model_response_iteratorr6   
iter_lines	post_calldictr   )r?   r   r   r   r   rJ   rM   rL   r    r   r]   rQ   rF   r!   r@   rg   s                   rD   ro   z!BaseLLMHTTPHandler.make_sync_call[  s     >FK!@ 1 3 &$F../+) / 	
 $ / K K#+==? !L ! !0 K K#+#6#6#8d !L !
 	>2D9	 	 	
 !$x'7'7"888rq   c                 ~   K   | j                  |||||	||||||
       d {   \  }}t        ||||      }|S 7 w)N)rI   r   r   r   r   rM   rL   r   r]   rQ   r    rf   )make_async_callr   )r?   rJ   rM   r   rI   r   r   r   rL   r   r    r]   rQ   rg   _response_headersstreamwrappers                   rD   rm   z.BaseLLMHTTPHandler.acompletion_stream_function  sp      6:5I5I 3+##) 6J 6
 0
,, ,/ 3#	
 '0
s    =;=c           
        K   | t        t        j                  |            }n|}d}|
du rd}| j                  |||||||	|       d {   }|
du r"|j	                  |j                         d      }n!|j	                  |j                         d      }|j                  |ddd|i	       ||j                  fS 7 pw)
NrS   TFrU   rs   rv   rw   rb   rx   )	r   rX   rY   rE   rz   r6   aiter_linesr|   r   )r?   rI   r   r   r   r   rM   rL   r   r    r]   rQ   r   r!   r@   rg   s                   rD   r   z"BaseLLMHTTPHandler.make_async_call  s     >!7$112EF" "($F551+) 6 	
 	
 $ / K K#+==? !L ! !0 K K#+#7#7#9u !L ! 	>2D9	 	 	
 !("2"2227	
s   A	B>B<A1B>rd   
aembeddingc                 R   t        j                  |t        j                  |            }|j	                  |
||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_   rP   r   rJ   rM   rN   r   rJ   rN   )rJ   rd   rN   r   ra   rc   T)r*   r   r   rJ   rI   r   rK   rL   rP   r   rQ   rN   r    r&   r   r   r   r+   rJ   rW   rK   rL   rP   r*   rN   r    )r   get_provider_embedding_configrX   rY   ri   rj   transform_embedding_requestrl   r   rn   r   r   r5   r6   r7   r=   r<   transform_embedding_response)r?   rJ   rd   r   rI   rL   r   rN   r    rK   rP   rQ   r   r   r   r   rF   r@   r(   s                      rD   	embeddingzBaseLLMHTTPHandler.embedding  s   " 0MM'"6"67J"K
 "66+ 7 
 #33+ 4 
 ::+	 ; 
 	'+$" 	 	
 ??!!$7 /-' /- #    >FK!@ 1 3 &	(--ZZ%	 . H ;;!)#+) < 	
 		
  	$$ / %  	s   (D 	D&D!!D&r*   c           
      R  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)NrS   r   r+   r   )rn   r   r   rX   rY   r5   r6   r7   r=   r<   r   )r?   r*   r   r   rJ   rI   r   rK   rL   rN   r    rP   r   rQ   r   r@   r(   s                    rD   r   zBaseLLMHTTPHandler.aembeddingK  s       >F4D!E!7$112EF" "(	K/44ZZ-	 5  H ;;!)#%+) < 	
 		
  	K$$q/$JJ	Ks:   5B'+B #B$B (B'B 	B$BB$$B'optional_rerank_params	_is_asyncc                 b   t        j                  |t        j                  |            }|j	                  |	||      }|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)Nr_   )rP   r   rJ   )r   rJ   )rJ   r   r   queryrv   ra   rc   T)rJ   r*   rI   r   rL   rK   r   r   rP   r   rQ   r   r+   rJ   rW   rK   rL   rP   r*   )r   get_provider_rerank_configrX   rY   ri   rj   transform_rerank_requestrl   getarerankrn   r   r   r5   r6   r7   r=   r<   transform_rerank_response)r?   rJ   rI   rL   r   r   rK   r   r   rP   r   rQ   r   r   rF   r@   r(   s                    rD   rerankzBaseLLMHTTPHandler.rerankw  s    0JJ'"6"67J"K
 "66 7 
 #33 4 

 77#9 8 
 	(,,Wb9'+$" 	 	
 <<!$7 /'-!     >FK!@ 1 3 &	(--ZZ%	 . H 88!)# 9 
 	
  	$$ / %  	s   (D 	D.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)NrS   r   r+   r   )rn   r   r   rX   rY   r5   r6   r7   r=   r<   r   )r?   rJ   r*   rI   r   rL   rK   r   r   rP   r   rQ   r   r@   r(   s                  rD   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                 H   t        |t              r't        |d      5 }|j                         }ddd       |S t        |t              rk|dd \  }}t        |t              r't        |d      5 }|j                         }ddd       |S t        |t
              r|}|S t        dt        |       d      t        |t
              r|}|S t        |t        j                        r|j                         }|S t        dt        |             # 1 sw Y   S xY w# 1 sw Y   S xY w)a  
        Processes the audio file input based on its type and returns the binary data.

        Args:
            audio_file: Can be a file path (str), a tuple (filename, file_content), or binary data (bytes).

        Returns:
            The binary data of the audio file.
        rbN   zUnexpected type in tuple: z. Expected str or bytes.z!Unsupported type for audio_file: )
rn   stropenreadtuplebytes	TypeErrortypeioBufferedReader)r?   r   fbinary_data_file_contents         rD   handle_audio_filez$BaseLLMHTTPHandler.handle_audio_file  s,    j#&j$'1ffh (0 - 
E*(!nOA|,,,-"#&&(K .$ ! L%0*   0l1C0DD\]  
E*$K  
B$5$56$//+K
  ?Z@P?QRSS- (0 % .$ s   D
,D
DD!max_retriesatranscriptionc           
         t        j                  |t        j                  |
            }|t	        d| d|
       |j                  |||g |      }|t        |t              s
t               }|j                  |	||      }| j                  |      }	 |j                  ||||      }t        |t        j                        r|j                  ||||i |i |      }|S |S # t        $ r}| j                  ||      d }~ww xY w)	Nr_   z$No provider config found for model: z and provider: r   r   )r&   r   contentr   r+   )rJ   rW   rK   rL   r*   rN   r    rP   )r   'get_provider_audio_transcription_configrX   rY   
ValueErrorri   rn   r   r   rj   r   r5   r=   r<    DeepgramAudioTranscriptionConfig&transform_audio_transcription_response)r?   rJ   r   rN   rK   r   r   rL   rP   r   rI   rQ   r   r   r   complete_urlr   r@   r(   returned_responses                       rD   audio_transcriptionsz'BaseLLMHTTPHandler.audio_transcriptions!  sX     0WW'"6"67J"K
 "6ug_M`Lab  "66+ 7 
 >FK!@&(F&77+ 8 
 ,,Z8		K{{ #	 # H ow'O'OP / V V%-' /! !W 	! %$  	K$$q/$JJ	Ks   C" "	D+C>>Dr(   c                    t        |dd      }t        |dd       }t        |dt        |            }t        |dd       }||rt        |dd       }|rt        |d      rt        |d|      }|rt        |      }ni }|j	                  |||      )Nr0   i  r   textr@   r.   )getattrr   hasattrr}   r>   )r?   r(   r   r0   error_headers
error_texterror_responses          rD   r<   z BaseLLMHTTPHandler._handle_errore  s     a49d3QA/
 J5 ^#NItDMgnf= DJ /MM--$#! . 
 	
rq   )F)NN)FN)NNN)-__name__
__module____qualname__r   r   r   r}   r   floatr8   TimeoutboolResponserE   r   rH   r   LiteLLMLoggingObjlistr   r   r[   rp   r   ro   rm   Headersr   r   r   r	   r   r   r   r   r
   r   r   r   r   r   intr   r=   r<    rq   rD   r   r       sF    3,3 $3 	3
 3 3 uemm+,3 3 3 
3| 4&4 $4 	4
 4 4 uemm+,4 4 4 
4J "&-1!.
 .
 $.
 	.

 .
 .
 uemm+,.
 .
 &.
 '.
 .
 .
 .
 .
 #.
  )*!.
z "'!!%"$AE#\
\
 \
 	\

 !\
 &\
 '\
 \
 uemm+,\
 \
 \
 \
 \
 #\
  $!\
" {,<<=>#\
R "(,29#29 29 	29
 29 29 29 29 uemm+,29 29 %29 
sDy	29@ "-1"" " 	"
 !" " $" uemm+," '" " " " )*"^ "-133 33 $33 	33
 33 33 33 '33 uemm+,33 33 33 )*33 
sEMM!	"33@ "&AE a
a
 a
 	a

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

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

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

 *&
 '&
 '&
 &
 &
 #&
 %u}} 456&
 {,<<=>&
 
&
P'I '% 'j BF$BB B 	B
 .B B B 'B #B 3-B !B {,<<=>B B B 
BH

-2:?O3O-P
rq   r   )'r   r6   typingr   r   r   r   r   r8   rX   litellm.litellm_core_utilslitellm.typeslitellm.types.utils)litellm.llms.base_llm.chat.transformationr   .litellm.llms.base_llm.embedding.transformationr	   +litellm.llms.base_llm.rerank.transformationr
   &litellm.llms.custom_httpx.http_handlerr   r   r   r   litellm.types.rerankr   r   r   r   r   litellm.utilsr   r   r   *litellm.litellm_core_utils.litellm_loggingr   _LiteLLMLoggingObjr   r   r   rq   rD   <module>r      sc    	  = =   !   @ N H  F S S S SX*X
 X
rq   