
    ^h5                     R   S r SSKrSSKJrJrJrJr  SSKrSSKrSSKJ	r	  SSK
Jr  SSKJrJr  SSKJr  SSKJr  SS	KJr  SS
KJrJr  SSKJrJr  SSKJrJr  SSKJr    SS\\   S\ S\!S\ S\ S\"S\\   S\#4S jjr$  SS\\   S\ S\!S\ S\ S\"S\\   S\#4S jjr% " S S\5      r&g)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	                 b  #    U c  [         R                  n U R                  XX8(       + S9I S h  vN n	Ub  UR                  U	R                  SS95      n
OBU(       a#  [	        S
0 U	R                  5       D6n[        US9n
O[        U	R                  5       SS9n
UR                  USU
SU0S	9  U
$  N~7f)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               _/home/james-whalen/.local/lib/python3.13/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   ,B/B-A?B/c	                    U c  [         R                  n U R                  XX8(       + S9n	U	R                  S:w  a"  [	        U	R                  U	R                  5       S9eUb  UR                  U	R                  SS95      n
OBU(       a#  [        S0 U	R                  5       D6n[        US9n
O[        U	R                  5       SS9n
UR                  US	S
SU0S9  U
$ )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     ~,,{{84{XHs"(*>*>XX$-8840
 
&990O1'224$

 :.5	       c                     ^  \ rS rSrU 4S jrSSS0 SSS4S\S\S\S\S	\S
\S\	S\S\
\   S\
\   S\S\4S jjrSS0 SS4S\S\S\S	\S
\S\S\	S\
\   S\S\
\   S\S\
\\\R&                  4      S\S\4S jjrSSSSSSSSSS.	S\S\S\S\S	\S
\S\	S\
\   S\S\
\   S\
\\\R&                  4      S\
\\\4      S\
\   S\
\   S\4S jjrSrU =r$ )OpenAILikeChatHandlerl   c                 &   > [         TU ]  " S0 UD6  g )Nr1   )super__init__)selfkwargs	__class__s     r=   rO   OpenAILikeChatHandler.__init__m   s    "6"rI   NFr   r   custom_llm_providerr   custom_prompt_dictr&   print_verboser   r   r   r   returnc                    #    SUS'   [        UUU[        R                  " U5      UUU
US9I S h  vN n[        UUUU
S9nU$  N7f)NTr!   )r   r   r   r   r   r   r:   r   r<   r   rT   r:   )r>   r6   dumpsr   )rP   r   r   rT   r   rU   r&   rV   encodingr.   r:   r!   r   optional_paramslitellm_params	logger_fnr   r   r   r   r<   streamwrappers                         r=   acompletion_stream_function1OpenAILikeChatHandler.acompletion_stream_functionp   sf     , X"+D!#/	#
 	
 ,/ 3#	
 #	
s   -AAA
base_modelr\   timeout	json_modec                 :  #    Uc  [         R                  " SSS9nUc  [        R                  n UR	                  UU[
        R                  " U5      US9I S h  vN nUR                  5         [         R"                  " UUUUUUU
UUUU	UUUS	9$  N5! [         R                   a7  n[        UR                  R                  UR                  R                  S9eS nAf[         R                   a    [        SSS9e[         a  n[        S[        U5      S9eS nAff = f7f)
Ng     @g      @)rc   connect)r   r   rc   rA     Timeout error occurred.  r   r;   r&   r!   r:   r\   r.   r   r   rV   r[   rd   rT   rb   )httpxTimeoutr2   r3   r4   r6   rZ   raise_for_statusHTTPStatusErrorr   r;   rB   textTimeoutException	Exceptionstrr   _transform_response)rP   r   r   r   rU   r&   rT   rV   r   r[   r.   r:   r!   r   rb   r\   r]   r^   r   rc   rd   r;   es                          r=   acompletion_function*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$2C*D DDD)	acompletionr]   r^   r   rc   r   custom_endpointr   r   r.   r   rx   c                   U=(       d    UR                  SS 5      nUR                  SS 5      nU R                  UU	SUUS9u  p?UR                  SS 5      =(       d    SnUR                  S0 5      nUR                  SS 5      nUR                  S	S 5        U(       d  UUS'   UbZ  UbW  [        R                  " U[	        U5      S
9n[        U[        5      (       d  [        U[        5      (       a  UR                  X!S9nUUS.UEUEnU
R                  UU	UUUS.S9  USL af  Ub  [        U[        5      (       d  S nUSL a&  UUS'   U R                  UUUUUUUUU	U
UUUUUUUUUS9$ U R                  UUUUUUUUUU	U
UUUUUUUUS9$ USL aK  [        Ub  [        U[        5      (       a  UOS UU[        R                   " U5      UUU
UUS9	n[#        UUUU
S9$ Ub  [        U[        5      (       d	  [        US9n UR%                  X?[        R                   " U5      S9nUR'                  5         [:        R<                  " UUUUU
UU	UUUUUUUS9$ ! [(        R*                   a7  n[-        UR.                  R0                  UR.                  R2                  S9eS nAf[(        R4                   a    [-        SSS9e[6         a  n[-        S[9        U5      S9eS nAff = f)Nrx   rb   chat_completions)r   r.   endpoint_typerx   r   r!   F
extra_bodyrd   max_retries)r   provider)r   r   )r   r   )r+   r   r   )r-   r.   r0   T)r   r   r   r   rU   r&   rV   r[   r.   r:   r\   r!   r]   r^   r   r   rT   r   r   )r   r   r   r   rU   rT   r&   rV   r[   r.   r:   r\   r!   r]   r^   r   rc   rb   r   )	r   r   r   r   r   r   r:   r   r   rY   )rc   )r   r   rA   rg   rh   ri   rj   )pop_validate_environmentr   get_provider_chat_configr   
isinstancer   r   _transform_messagespre_callr	   r`   ru   rH   r
   r6   rZ   r   r4   rm   rk   rn   r   r;   rB   ro   rp   rq   rr   r   rs   )rP   r   r   r   rT   rU   r&   rV   r[   r.   r:   r\   rw   r]   r^   r   rc   r   rx   r   r   rb   r!   r|   rd   provider_configr   r<   r;   rt   s                                 r=   
completion 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@ @ +>>% ? 
  
 
 	
 	'+$" 	 	
 $~Z8H%I%I$!'X77%%'9#1"/%# +$3!#1'#!(;&7 +' 8  , 00%%'9(;#1"/%# +$3!#1'##)!' 1  . ~$2 "-*V[2Q2Q !%#D)% +&7 +%!  +&7(; +	  >FK)H)H(9FK%{{ 

48H  +  H --/ $77)#+' 3!
 	
 ,, )$%JJ$:$: !

  -- )$'1J  ! K)c3q6JJKs$   84I K!2J*K=KKr1   )__name__
__module____qualname____firstlineno__rO   rr   listdictr   r   r   r	   r   boolr   r`   r   floatrk   rl   ru   r
   r   __static_attributes____classcell__)rR   s   @r=   rK   rK   l   sl   #" -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
 w
rI   rK   )NF)'__doc__r6   typingr   r   r   r   rk   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   rr   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   