
    h*P                         d dl 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m
Z
m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mZmZ d dl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$dZ% G d d      Z&y)    )TYPE_CHECKINGAnyCallableOptionalTupleUnioncastN)ClientSessionFormData)
BaseConfig)BaseImageVariationConfig)AsyncHTTPHandlerHTTPHandler_get_httpx_client)	FileTypes)HttpHandlerRequestFieldsImageResponseLlmProviders)CustomStreamWrapperModelResponseProviderConfigManager)LoggingiX  c            #       n   e Zd Zd Z	 d-dee   defdZd Z	 	 d.dee   d	ed
e	de
dee
   deeej                  f   de
dee   dedej$                  fdZ	 	 	 	 d/ded	ed
e	de
de
deeeej                  f      de
dedee
   dede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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dee   d	e d
e	de
de!dede
de"dede	dee	   d%e#de
de"fd&Z$	 	 	 	 	 	 	 d2de"de	dee	   d%e#dede	dede
de
d'ee%   d
ee	   d(ed)ee	   dee
   de"fd*Z&d+e'd	efd,Z(y)3BaseLLMAIOHTTPHandlerc                     d | _         y N)client_sessionselfs    e/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/custom_httpx/aiohttp_handler.py__init__zBaseLLMAIOHTTPHandler.__init__#   s
    ?C    Ndynamic_client_sessionreturnc                     |r|S | j                   r| j                   S t        j                         | _         | j                   S r   )r   aiohttpr
   )r   r#   s     r    _get_async_client_sessionz/BaseLLMAIOHTTPHandler._get_async_client_session&   sA     "))  &&& #*"7"7"9D&&&r"   c                    K   | j                   r:| j                   j                  s#| j                   j                          d{    yyy7 w)z.Close the aiohttp client session if it exists.N)r   closedcloser   s    r    r*   zBaseLLMAIOHTTPHandler.close2   sA     t':':'A'A%%++--- (B-s   A AA
AFasync_client_sessionprovider_configapi_baseheadersdatatimeoutlitellm_params	form_datastreamc
                   K   |j                   }
d}| j                  |      }t        t        |
d            D ]=  }	 |j	                  ||||       d{   }|j
                  s|j                           n ||j                  ddi 	      |S 7 ;# t        j                  $ r/}t        |d|j                         | 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)r#      )urlr.   jsonr/   texter,   No response from the API  error_messagestatus_coder.   )'max_retry_on_unprocessable_entity_errorr'   rangemaxpostokraise_for_statusr&   ClientResponseErrorsetattrmessage_handle_error	Exceptionget_error_class)r   r+   r,   r-   r.   r/   r0   r1   r2   r3   r@   responseir:   s                 r    _make_common_async_callz-BaseLLMAIOHTTPHandler._make_common_async_call7   s*     CC 	0 6:#==#7  >  
 sBAFGAO!5!:!: #"	 "; "   {{--/  H" !118 2   - .. O6199-((1o(NN O((1o(NNOsF   9C6BB B5C6BC3%*CC3C..C33C6sync_httpx_clientfilescontentparamsc                    |j                   }d }t        t        |d            D ]  }	 |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)	Nr5   )r6   r.   r/   r0   r3   rP   rQ   rR   )r:   r1   )r:   request_datar9   r;   r<   r=   )r@   rA   rB   rC   httpxHTTPStatusError9should_retry_llm_api_inside_llm_translation_on_http_error/transform_request_on_unprocessable_entity_errorrI   rJ   rK   )r   rO   r,   r-   r.   r/   r0   r1   r3   rP   rQ   rR   r@   rL   rM   r:   hit_max_retryshould_retrys                     r    _make_common_sync_callz,BaseLLMAIOHTTPHandler._make_common_sync_callg   s=    CC 	0 .2sBAFGAO,11 ##!#! 2 	4 9 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)   AC/2B9&B99CCCcustom_llm_providermodelmodel_responselogging_objmessagesoptional_paramsencodingapi_keyclientc                    K   | j                  |||||||d       d {   }|j                  ||||	|||
|||
       d {   }|S 7 )7 w)NF)r+   r,   r-   r.   r/   r0   r1   r3   
r]   raw_responser^   r_   rc   rT   r`   ra   r1   rb   )rN   transform_response)r   r\   r,   r-   r.   r/   r0   r]   r^   r_   r`   ra   r1   rb   rc   rd   	_response_transformed_responses                     r    async_completionz&BaseLLMAIOHTTPHandler.async_completion   s     $ 66!'+) 7 	
 	
	 '6&H&H")#+) 'I '
 !
 %$-	
!
s!   AA	"AAAAacompletionfake_streamc                    t        j                  |t        j                  |            }|t	        d| d|       |j                  ||xs i ||||
|      }|j                  |||||
|      }|j                  ||||
|      }|j                  |||||d       |d	u r9| 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r]   providerz%Provider config not found for model: z and provider: rc   r.   r]   r`   ra   r1   r-   r-   rc   r]   ra   r1   r3   )r]   r`   ra   r1   r.   )complete_input_dictr-   r.   inputrc   additional_argsT)r\   r,   r-   r.   r/   r0   r]   r^   r_   rc   r`   ra   r1   rb   rd   r3   )r,   r-   r.   r/   r]   r`   r_   r0   rm   rd   r1   )completion_streamr]   r\   r_   )rO   r,   r-   r.   r0   r1   r/   rf   )r   get_provider_chat_configlitellmr   
ValueErrorvalidate_environmentget_complete_urltransform_requestpre_callrk   
isinstancer
   make_sync_callr   r   r   r[   rh   )r   r]   r`   r-   r\   r^   rb   r_   ra   r0   r1   rl   r3   rm   rc   r.   rd   r,   r/   rw   rO   rL   s                         r    
completionz BaseLLMAIOHTTPHandler.completion   sr   & 0HH'"6"67J"K
 "7woNaMbc  "66Mr+) 7 
 #33+) 4 
 00+) 1 
 	'+$" 	 	
 $(($7 /!-'! /-! )j.O ! )  $ % )  , T>$&!'X)-)<)< /!!'' )j.M - *= *&w" '"3$7'	  >FK!@ 1 3 &../+) / 
 11!)#+) 2 
 	
r"   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)rO   r,   r-   r.   r/   r0   r1   r3   )streaming_responsesync_stream zfirst stream response receivedrs   )ru   rc   original_responserv   )
r   r   r   r[   get_model_response_iteratorr7   
iter_lines	post_calldictr.   )r   r,   r-   r.   r/   r]   r`   r_   r1   r0   rm   rd   rO   r3   rL   rw   s                   r    r   z$BaseLLMAIOHTTPHandler.make_sync_callZ  s     >FK!@ 1 3 &$F../+) / 	
 $ / K K#+==? !L ! !0 K K#+#6#6#8d !L !
 	>2D9	 	 	
 !$x'7'7"888r"   imagec                   K   d }d|v rtd|v rpt               }|d   j                         D ]#  \  }}|j                  ||d   |d   |d          % |d   j                         D ]  \  }}|j                  ||        | j                  |||||d nt	        t
        |      |||d	       d {   }|	j                  |
|j                  ||d	
       |j                  ||||	t	        t
        |      |||d |

       d {   S 7 V7 w)NrP   r/   r5   r      )filenamecontent_typeF)	r+   r,   r-   r.   r/   r2   r0   r1   r3   r.   r-   rc   r   rv   
r]   r^   rg   r_   rT   r   ra   r1   rb   rc   )	r   items	add_fieldrN   r	   r   r   r8   (async_transform_response_image_variation)r   rd   r,   r-   r.   r/   r0   r1   r^   r_   rc   r]   r   ra   r2   kvkeyvalueri   s                       r    async_image_variationsz,BaseLLMAIOHTTPHandler.async_image_variations  sK    " )-	d?v~ 
IW++-1##Aqtad1#N . #6l002
U##C/ 3 66!'+".Dt4D) 7 

 

	 	'nn"$ 	 	
 %MM)"#dD)+) N 
 
 	
/

.
s%   B*D,D-AD>D?DDprint_verboseaimage_variationorganizationc                 J   |t        d      t        j                  |t        |            }|t        d| d      |j	                  |||||	d      }|j                  ||xs i |ddd	g||	|
      }|j                  ||||      }|j                  d||||j                         d       |	j                  dd      r| j                  ||||||||||	||      S |t        |t              st               }n|}| j                  ||||||	d|j                  d      xs i |j                  d      |j                  d      |j                  d            }|j                  ||j                   ||d       |j#                  ||||t%        t&        |      |||	d |
      S )Nz1model is required for non-openai image variationsro   z$image variation provider not found: .Frr   usertest)rolerQ   rq   )r]   r   ra   r.   r   )r.   r-   rs   rt   
async_call)r-   r/   r.   r^   r_   r]   r0   rd   ra   r1   r   r,   r/   rP   rQ   rR   )rO   r,   r-   r.   r0   r1   r3   r/   rP   rQ   rR   r   r   r   )rz   r   #get_provider_image_variation_configr   r|   r{   !transform_request_image_variationr~   copygetr   r   r   r   r[   r   r8   "transform_response_image_variationr	   r   )r   r^   rc   r]   r   r0   r\   r_   ra   r1   r   r-   r   	logger_fnrd   r   r.   r,   r/   rO   rL   s                        r    image_variationsz&BaseLLMAIOHTTPHandler.image_variations  s>   & =PQQ/SS!"56

 "67J6K1M  #33+) 4 
 "66Mr%&9:+) 7 
 @@+	 A 
 	"$'+yy{ 	 	
 lE2..!-' /- / /   >FK!@ 1 3 &../+)&!'R((7#HHY'88H% / 
 	&mm"$ 	 	
 AA)!#dD)+) B 
 	
r"   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	                  |||      )Nr?   i  r.   r8   rL   r=   )getattrstrhasattrr   rK   )r   r:   r,   r?   error_headers
error_texterror_responses          r    rI   z#BaseLLMAIOHTTPHandler._handle_errorL  s    a49d3QA/
 J5 ^#NItDMgnf= DJ /MM--$#! . 
 	
r"   r   )NF)FNNN)NN)FN)NNFNNNN))__name__
__module____qualname__r!   r   r
   r'   r*   r   r   r   r   floatrU   Timeoutr   boolr&   ClientResponserN   r   r   Responser[   r   LiteLLMLoggingObjlistrk   r   r   r   r   r   r   r   r   r   r   r   rJ   rI    r"   r    r   r   "   s!   D AE
'&.}&=
'	
'. )-.&}5. $. 	.
 . tn. uemm+,. . H%. . 
		.r  $!%9&9 $9 	9
 9 9 %u}} 4569 9 9 ~9 9 9 
9T "&*.!(% (% $(% 	(%
 (% (% uemm+,(% (% &(% '(% (% (% (% (% #(%  '!(%n "'!!%"$PT#L
L
 L
 	L

 !L
 &L
 'L
 L
 uemm+,L
 L
 L
 L
 L
 #L
  $!L
" {,<mKLM#L
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9h<
'<
 2<
 	<

 <
 '<
 <
 <
 &<
 '<
 <
 }<
 <
 <
 
<
R -1"&!&&*"&#~
%~
 ~
 }	~

 ~
 ~
 !~
 '~
 ~
 ~
  )~
 3-~
 ~
  sm!~
" $#~
$ 
%~
@
y 
: 
r"   r   )'typingr   r   r   r   r   r   r	   r&   rU   r
   r   ry   litellm.litellm_core_utilslitellm.typeslitellm.types.utils)litellm.llms.base_llm.chat.transformationr   5litellm.llms.base_llm.image_variations.transformationr   &litellm.llms.custom_httpx.http_handlerr   r   r   litellm.types.llms.openair   r   r   r   litellm.utilsr   r   r   *litellm.litellm_core_utils.litellm_loggingr   _LiteLLMLoggingObjr   DEFAULT_TIMEOUTr   r   r"   r    <module>r      si    M M M   +  !   @ 
 0 U U S SX*{
 {
r"   