
    g3                         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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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)    N)TYPE_CHECKINGAnyOptionalTupleUnion)ClientSession)
BaseConfig)AsyncHTTPHandlerHTTPHandler_get_httpx_client)CustomStreamWrapperModelResponseProviderConfigManager)LoggingiX  c            #       t   e Zd Zd Z	 d"dee   defdZ	 d#de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	 	 d$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	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	 	 d%d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defd!Zy)&BaseLLMAIOHTTPHandlerc                     d | _         y N)client_session)selfs    ^/var/www/openai/venv/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   Fasync_client_sessionprovider_configapi_baseheadersdatatimeoutlitellm_paramsstreamc	                   K   |j                   }	d}
| j                  |      }t        t        |	d            D ]<  }	 |j	                  |||       d{   }
|
j
                  s|
j                           n |
|j                  ddi       |
S 7 ;# t        j                  $ r}| 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"   jsoner    No response from the API  error_messagestatus_coder"   )'max_retry_on_unprocessable_entity_errorr   rangemaxpostokraise_for_statusr   ClientResponseError_handle_error	Exceptionget_error_class)r   r   r    r!   r"   r#   r$   r%   r&   r2   responseir,   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((1o(NN O((1o(NNOsF   9CBB B4CBC$B77CCC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%   )r,   request_datar+   r-   r.   r/   )r2   r3   r4   r5   r*   dumpshttpxHTTPStatusError9should_retry_llm_api_inside_llm_translation_on_http_error/transform_request_on_unprocessable_entity_errorr9   r:   r;   )r   r?   r    r!   r"   r#   r$   r%   r&   r2   r<   r=   r,   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 #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-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#   r$   r%   r&   
rK   raw_responserL   rM   rQ   rA   rN   rO   r%   rP   )r>   transform_response)r   rJ   r    r!   r"   r#   r$   rK   rL   rM   rN   rO   r%   rP   rQ   rR   	_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                  |            }|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)rK   provider)rQ   r"   rK   rN   rO   r!   )r!   rK   rO   r&   )rK   rN   rO   r%   r"   )complete_input_dictr!   r"   )inputrQ   additional_argsT)rJ   r    r!   r"   r#   r$   rK   rL   rM   rQ   rN   rO   r%   rP   rR   r&   )r    r!   r"   r#   rK   rN   rM   r$   r[   rR   r%   )completion_streamrK   rJ   rM   )r?   r    r!   r"   r#   r$   r%   rT   )r   get_provider_chat_configlitellmLlmProvidersvalidate_environmentget_complete_urltransform_requestpre_callrY   
isinstancer   make_sync_callr   r   r   rI   rV   )r   rK   rN   r!   rJ   rL   rP   rM   rO   r$   r%   rZ   r&   r[   rQ   r"   rR   r    r#   ra   r?   r<   s                         r   
completionz BaseLLMAIOHTTPHandler.completion   sB   & 0HH'"6"67J"K
 "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)r?   r    r!   r"   r#   r$   r%   r&   )streaming_responsesync_stream zfirst stream response receivedr^   )r_   rQ   original_responser`   )
ri   r   r   rI   get_model_response_iteratorr*   
iter_lines	post_calldictr"   )r   r    r!   r"   r#   rK   rN   rM   r%   r$   r[   rR   r?   r&   r<   ra   s                   r   rj   z$BaseLLMAIOHTTPHandler.make_sync_callD  s     >FK!@ 1 3 &$F../+) / 	
 $ / K K#+==? !L ! !0 K K#+#6#6#8d !L !
 	>2D9	 	 	
 !$x'7'7"888r   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	                  |||      )Nr1   i  r"   textr<   r/   )getattrstrhasattrrt   r;   )r   r,   r    r1   error_headers
error_texterror_responses          r   r9   z#BaseLLMAIOHTTPHandler._handle_errorx  s    a49d3QA/
 J5 ^#NItDMgnf= DJ /MM--$#! . 
 	
r   r   )F)NN)FN) __name__
__module____qualname__r   r   r   r   r	   rx   rt   r   floatrC   Timeoutboolr   ClientResponser>   r   ResponserI   r   LiteLLMLoggingObjlistr   rY   r
   rk   r   rj   r:   r9    r   r   r   r      sc   D AE
'&.}&=
'	
'* +&}5+ $+ 	+
 + + uemm+,+ + + 
		+l 4&4 $4 	4
 4 4 uemm+,4 4 4 
4J "&*.!)% )% $)% 	)%
 )% )% uemm+,)% )% &)% ')% )% )% )% )% #)%  '!)%p "'!!%"$PT#E
E
 E
 	E

 !E
 &E
 'E
 E
 uemm+,E
 E
 E
 E
 E
 #E
  $!E
" {,<mKLM#E
d "(,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
y 
: 
r   r   )r*   typingr   r   r   r   r   r   rC   r   rc   litellm.litellm_core_utilslitellm.typeslitellm.types.utils)litellm.llms.base_llm.chat.transformationr	   &litellm.llms.custom_httpx.http_handlerr
   r   r   litellm.utilsr   r   r   *litellm.litellm_core_utils.litellm_loggingr   _LiteLLMLoggingObjr   DEFAULT_TIMEOUTr   r   r   r   <module>r      s\     = =   !  !   @ 
 T SX*k
 k
r   