
    g5                     J   d Z ddlZddlmZmZmZm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 ddlmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZmZ ddlmZmZ ddlmZ 	 	 ddee   de de!de de de"dee   de#fdZ$	 	 ddee   de de!de de de"dee   de#fdZ% G d de      Z&y)zh
OpenAI-like chat completion handler

For handling OpenAI-like chat completions, like IBM WatsonX, etc.
    N)AnyCallableOptionalUnion)LlmProviders)MockResponseIterator)AsyncHTTPHandlerHTTPHandler)ModelResponseIterator)OpenAIGPTConfig)OpenAIConfig)CustomStreamingDecoderModelResponse)CustomStreamWrapperProviderConfigManager   )OpenAILikeBaseOpenAILikeError   )OpenAILikeChatConfigclientapi_baseheadersdatamodelmessagesstreaming_decoderfake_streamc	                 n  K   | t         j                  } | j                  ||||        d {   }	|"|j                  |	j                  d            }
nC|r&t	        d
i |	j                         }t        |      }
nt        |	j                         d      }
|j                  |d|
d|i	       |
S 7 w)Nr   r   stream   
chunk_sizemodel_responseFstreaming_responsesync_stream complete_input_dictinputapi_keyoriginal_responseadditional_args )
litellmmodule_level_aclientpostaiter_bytesr   jsonr   r   aiter_lines	post_callr   r   r   r   r   r   logging_objr   r   responsecompletion_streamr&   s               Z/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/openai_like/chat/handler.py	make_callr>      s      ~--[['_ !  H $!2!>!>  D 1"
 
&990O1'3355
 +.5	   /s   ,B5B3BB5c	                    | t         j                  } | j                  ||||       }	|	j                  dk7  r%t	        |	j                  |	j                               |"|j                  |	j                  d            }
nC|r&t        di |	j                         }t        |      }
nt        |	j                         d      }
|j                  |d	d
d|i       |
S )Nr       status_codemessager"   r#   r%   Tr'   r*   zfirst stream response receivedr+   r,   r1   )r2   module_level_clientr4   rB   r   read
iter_bytesr   r6   r   r   
iter_linesr8   r9   s               r=   make_sync_callrH   B   s     ~,,{{8W4K{XHs"(*>*>XX$-8840
 
&990O1'224$

 :.5	       c                       e Zd Z fdZdddi dddfd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fdZddi ddfdedededed	eded
ede	e
   dede	e   dede	eeej$                  f      dedefdZdddddddddd	dededededed	ed
ede	e   dede	e   de	eeej$                  f      de	eee
f      de	e   de	e   defdZ xZS )OpenAILikeChatHandlerc                 $    t        |   di | y )Nr1   )super__init__)selfkwargs	__class__s     r=   rN   zOpenAILikeChatHandler.__init__m   s    "6"rI   NFr   r   custom_llm_providerr   custom_prompt_dictr&   print_verboser   r   r   r   returnc           
         K   d|d<   t        |||t        j                  |      |||
|       d {   }t        ||||
      }|S 7 w)NTr!   )r   r   r   r   r   r   r:   r   r<   r   rR   r:   )r>   r6   dumpsr   )rO   r   r   rR   r   rS   r&   rT   encodingr.   r:   r!   r   optional_paramslitellm_params	logger_fnr   r   r   r   r<   streamwrappers                         r=   acompletion_stream_functionz1OpenAILikeChatHandler.acompletion_stream_functionp   sg     , X"+D!#/	#
 	
 ,/ 3#	
 #	
s   /A	AA	
base_modelrZ   timeout	json_modec                 N  K   |t        j                  dd      }|t        j                  }	 |j	                  ||t        j                  |      |       d {   }|j                          t!        j"                  |||||||
||||	|||	      S 7 7# t         j                  $ r:}t        |j                  j                  |j                  j                        d }~wt         j                  $ r t        dd      t        $ r}t        dt        |            d }~ww xY ww)
Ng     @g      @)r`   connect)r   r   r`   rA     Timeout error occurred.  r   r;   r&   r!   r:   rZ   r.   r   r   rT   rY   ra   rR   r_   )httpxTimeoutr2   r3   r4   r6   rX   raise_for_statusHTTPStatusErrorr   r;   rB   textTimeoutException	Exceptionstrr   _transform_response)rO   r   r   r   rS   r&   rR   rT   r   rY   r.   r:   r!   r   r_   rZ   r[   r\   r   r`   ra   r;   es                          r=   acompletion_functionz*OpenAILikeChatHandler.acompletion_function   s&    . ?mmE3?G>11F	C#[['

40@' )  H %%' $77)#+' 3!
 	
 $$ 	!JJ22

  %% 	V!c;TUU 	C!c3q6BB	CsF   ,D%+B BB /#D%B D"'5C+D"DD""D%)	acompletionr[   r\   r   r`   r   custom_endpointr   r   r.   r   rt   c                   |xs |j                  dd       }|j                  dd       }| j                  ||	d||      \  }}|j                  dd       xs d}|j                  di       }|j                  dd       }|j                  d	d        |s||d<   |U|St        j                  |t	        |      
      }t        |t              st        |t              r|j                  ||      }||d||}|
j                  ||	|||d       |du re|t        |t              sd }|du r)||d<   | j                  |||||||||	|
|||||||||      S | j                  ||||||||||	|
||||||||      S |du rJt        |t        |t              r|nd ||t        j                   |      |||
||	      }t#        ||||
      S |t        |t              st        |      }	 |j%                  ||t        j                   |            }|j'                          t;        j<                  |||||
||	|||||||      S # t(        j*                  $ r:}t-        |j.                  j0                  |j.                  j2                        d }~wt(        j4                  $ r t-        dd      t6        $ r}t-        dt9        |            d }~ww xY w)Nrt   r_   chat_completions)r   r.   endpoint_typert   r   r!   F
extra_bodyra   max_retries)r   provider)r   r   )r   r   )r+   r   r   )r-   r.   r0   T)r   r   r   r   rS   r&   rT   rY   r.   r:   rZ   r!   r[   r\   r   r   rR   r   r   )r   r   r   r   rS   rR   r&   rT   rY   r.   r:   rZ   r!   r[   r\   r   r`   r_   r   )	r   r   r   r   r   r   r:   r   r   rW   )r`   )urlr   r   rA   rd   re   rf   rg   )pop_validate_environmentr   get_provider_chat_configr   
isinstancer   r   _transform_messagespre_callr	   r^   rr   rH   r
   r6   rX   r   r4   rj   rh   rk   r   r;   rB   rl   rm   rn   ro   r   rp   )rO   r   r   r   rR   rS   r&   rT   rY   r.   r:   rZ   rs   r[   r\   r   r`   r   rt   r   r   r_   r!   rx   ra   provider_configr   r<   r;   rq   s                                 r=   
completionz OpenAILikeChatHandler.completion   s   4 * 
_-@-@t.
 %4$7$7d$K
 66,+ 7 
' '**8T:Ce$((r:
#''T:	M40(.OH%$7$C3LLl3F&GO /?;z@ +>>%U ? 
  
 
 	
 	'+$" 	 	
 $~Z8H%I$!'X77%%'9#1"/%# +$3!#1'#!(;&7 +' 8  , 00%%'9(;#1"/%# +$3!#1'##)!' 1  . ~$2 "-*V[2Q !%#D)% +&7 +%!  +&7(; +	  >FK)H(9FK%{{$gDJJt<L  +  H --/ $77)#+' 3!
 	
 ,, )$%JJ$:$: !

  -- )$'1J  ! K)c3q6JJKs$   #7H= =K5J+K0KK)__name__
__module____qualname__rN   ro   listdictr   r   r   r	   r   boolr   r^   r   floatrh   ri   rr   r
   r   __classcell__)rQ   s   @r=   rK   rK   l   sf   #" -1>B!)(( ( !	(
 ( !( &(  ( ($ )*%(& $$:;'(( )(* 
+(v 9=+;
;
 ;
 	;

 !;
 &;
 !;
  ;
 )*;
 ;
 SM;
  !;
( %u}} 456);
* +;
, 
-;
V "&9=AE*. !1w
 w
 	w

 w
 !w
 !w
 &w
  w
 #w
 w
" $#w
$ %u}} 456%w
& {,<<=>'w
( "$)w
* $"
+w
0 1w
rI   rK   )NF)'__doc__r6   typingr   r   r   r   rh   r2   r   (litellm.llms.bedrock.chat.invoke_handlerr   &litellm.llms.custom_httpx.http_handlerr	   r
   'litellm.llms.databricks.streaming_utilsr   +litellm.llms.openai.chat.gpt_transformationr   litellm.llms.openai.openair   litellm.types.utilsr   r   litellm.utilsr   r   common_utilsr   r   transformationr   ro   r   r   r   r>   rH   rK   r1   rI   r=   <module>r      s    1 1     I P I G 3 E D : 0 ;?%%&%% % 	%
 % %   67% %` ;?'[!'' ' 	'
 ' '   67' 'Tb
N b
rI   