
    j\                        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 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)LiteLLMAiohttpTransport)	FileTypes)HttpHandlerRequestFieldsImageResponseLlmProviders)CustomStreamWrapperModelResponseProviderConfigManager)LoggingiX  c            #          e Zd Z	 	 	 d3deej
                     dee   deej                     fdZdee   fdZ	deej                     fdZ
defd	Z	 d4d
ee   defdZd Z	 	 d5d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	 	 	 	 d6d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j6                  fdZ	 	 d7d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"	 	 d8d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)	 	 	 	 	 	 	 d9d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d0Z+d1e,defd2Z-y):BaseLLMAIOHTTPHandlerNclient_session	transport	connectorc                 d    || _         |d u | _        || _        |d u | _        || _        |d u | _        y N)r   _owns_sessionr   _owns_transportr   _owns_connector)selfr   r   r   s       /Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/litellm/llms/custom_httpx/aiohttp_handler.py__init__zBaseLLMAIOHTTPHandler.__init__$   sN     -d" 	 # 	 # 	    returnc                     | j                   r| j                   S 	 t        j                         | _         d| _        | j                   S # t        $ r Y yw xY w)z5Get existing transport or create a new one if needed.TN)r   r   _create_aiohttp_transportr"   	Exceptionr$   s    r%   _get_or_create_transportz.BaseLLMAIOHTTPHandler._get_or_create_transport9   sL    >>>>!	-GGIDN#'D >>! 		s   +A 	AAc                     | j                   r| j                   S | j                  rPt        | j                  d      r:| j                  j                  }t	        |      ryt        |d      r|j                   S y)z1Get or create a connector for the client session.clientNr   )r   r   hasattrr/   callable)r$   r/   s     r%   _get_connectorz$BaseLLMAIOHTTPHandler._get_connectorG   sZ    >>>>!^^ A^^**F-'''r'   c                     | j                         }| j                  r2t        | j                  d      r| j                  j                         }|S |rt	        j
                  |      }|S t	        j
                         }|S )zGCreate a new client session using transport or connector configuration._get_valid_client_session)r   )r2   r   r0   r4   aiohttpr
   )r$   r   sessions      r%   %_create_client_session_with_transportz;BaseLLMAIOHTTPHandler._create_client_session_with_transportU   si    '')	>>gdnn6QRnn>>@GN++i@GN ++-GNr'   dynamic_client_sessionc                     |r|S | j                   r| j                   S | j                         | _         d| _        | j                   S )NT)r   r7   r!   )r$   r8   s     r%   _get_async_client_sessionz/BaseLLMAIOHTTPHandler._get_async_client_sessionf   sI     "))  &&& #'"L"L"ND!%D&&&r'   c                 z  K   | j                   rD| j                   j                  s.| j                  r"| j                   j                          d{    | j                  rH| j
                  r;t        | j                  d      r$	 | j                  j                          d{    yyyy7 Y7 
# t        $ r Y yw xY ww)z>Close the aiohttp client session and transport if we own them.Naclose)	r   closedr!   closer   r"   r0   r<   r+   r,   s    r%   r>   zBaseLLMAIOHTTPHandler.closes   s      ''..""%%++--- NN$$1nn++--- 2 % 	 . . sH   AB;B(2B;B, B* B, $B;*B, ,	B85B;7B88B;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)r8      )urlrB   jsonrC   texter@   No response from the API  error_messagestatus_coderB   )'max_retry_on_unprocessable_entity_errorr:   rangemaxpostokraise_for_statusr5   ClientResponseErrorsetattrmessage_handle_errorr+   get_error_class)r$   r?   r@   rA   rB   rC   rD   rE   rF   rG   rT   responseirN   s                 r%   _make_common_async_callz-BaseLLMAIOHTTPHandler._make_common_async_call   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)	NrI   )rJ   rB   rC   rD   rG   rc   rd   re   )rN   rE   )rN   request_datarM   rO   rP   rQ   )rT   rU   rV   rW   httpxHTTPStatusError9should_retry_llm_api_inside_llm_translation_on_http_error/transform_request_on_unprocessable_entity_errorr]   r+   r^   )r$   rb   r@   rA   rB   rC   rD   rE   rG   rc   rd   re   rT   r_   r`   rN   hit_max_retryshould_retrys                     r%   _make_common_sync_callz,BaseLLMAIOHTTPHandler._make_common_sync_call   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_keyr/   c                    K   | j                  |||||||d       d {   }|j                  ||||	|||
|||
       d {   }|S 7 )7 w)NF)r?   r@   rA   rB   rC   rD   rE   rG   
rp   raw_responserq   rr   rv   rg   rs   rt   rE   ru   )ra   transform_response)r$   ro   r@   rA   rB   rC   rD   rp   rq   rr   rs   rt   rE   ru   rv   r/   	_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rp   providerz%Provider config not found for model: z and provider: rv   rB   rp   rs   rt   rE   rA   rA   rv   rp   rt   rE   rG   )rp   rs   rt   rE   rB   )complete_input_dictrA   rB   inputrv   additional_argsT)ro   r@   rA   rB   rC   rD   rp   rq   rr   rv   rs   rt   rE   ru   r/   rG   )r@   rA   rB   rC   rp   rs   rr   rD   r   r/   rE   )completion_streamrp   ro   rr   )rb   r@   rA   rB   rD   rE   rC   rx   )r   get_provider_chat_configlitellmr   
ValueErrorvalidate_environmentget_complete_urltransform_requestpre_callr}   
isinstancer
   make_sync_callr   r   r   rn   rz   )r$   rp   rs   rA   ro   rq   ru   rr   rt   rD   rE   r~   rG   r   rv   rB   r/   r@   rC   r   rb   r_   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)rb   r@   rA   rB   rC   rD   rE   rG   )streaming_responsesync_stream zfirst stream response receivedr   )r   rv   original_responser   )
r   r   r   rn   get_model_response_iteratorrK   
iter_lines	post_calldictrB   )r$   r@   rA   rB   rC   rp   rs   rr   rE   rD   r   r/   rb   rG   r_   r   s                   r%   r   z$BaseLLMAIOHTTPHandler.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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)Nrc   rC   rI   r      )filenamecontent_typeF)	r?   r@   rA   rB   rC   rF   rD   rE   rG   rB   rA   rv   r   r   
rp   rq   ry   rr   rg   r   rt   rE   ru   rv   )	r   items	add_fieldra   r	   r   r   rL   (async_transform_response_image_variation)r$   r/   r@   rA   rB   rC   rD   rE   rq   rr   rv   rp   r   rt   rF   kvkeyvaluer{   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 variationsr   z$image variation provider not found: .Fr   usertest)rolerd   r   )rp   r   rt   rB   r   )rB   rA   r   r   
async_call)rA   rC   rB   rq   rr   rp   rD   r/   rt   rE   r   r@   rC   rc   rd   re   )rb   r@   rA   rB   rD   rE   rG   rC   rc   rd   re   r   r   r   )r   r   #get_provider_image_variation_configr   r   r   !transform_request_image_variationr   copygetr   r   r   r   rn   r   rL   "transform_response_image_variationr	   r   )r$   rq   rv   rp   r   rD   ro   rr   rt   rE   r   rA   r   	logger_fnr/   r   rB   r@   rC   rb   r_   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'   rN   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	                  |||      )NrS   i  rB   rL   r_   rQ   )getattrstrr0   r   r^   )r$   rN   r@   rS   error_headers
error_texterror_responses          r%   r]   z#BaseLLMAIOHTTPHandler._handle_error  s    a49d3QA/
 J5 ^#NItDMgnf= DJ /MM--$#! . 
 	
r'   )NNNr    )NF)FNNN)NN)FN)NNFNNNN).__name__
__module____qualname__r   r5   r
   r   BaseConnectorr&   r-   r2   r7   r:   r>   r   r   r   r   floatrh   Timeoutr   boolClientResponsera   r   r   Responsern   r   LiteLLMLoggingObjlistr}   r   r   r   r   r   r   r   r   r   r   r   r+   r]    r'   r%   r   r   #   s    ;?7;59	
 !6!67
 34
 G112	
*(3J*K )>)> ? } $ 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	   r5   rh   r
   r   r   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.llms.custom_httpx.aiohttp_transportr   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      sm    M M M   +  !   @ 
 P / U U S SX*L

 L

r'   