
    ^h@                        S SK r S SKrS SKrS SKJr  S SKJrJrJr  S SK	r	S SK
r
S SKr
S SK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  S SKJrJrJrJrJr  S	S
KJr  S\S\S\ S\S\S\!S\\\"\	RF                  4      4S jr$ " S S5      r%g)    N)partial)CallableOptionalUnion)map_finish_reason)custom_promptprompt_factory)AsyncHTTPHandlerget_async_httpx_client)LiteLLMLoggingBaseClass)ChoicesCustomStreamWrapperMessageModelResponseUsage   )PredibaseErrorclientapi_baseheadersdatamodelmessagestimeoutc                    #    U R                  XUSUS9I S h  vN nUR                  S:w  a  [        UR                  UR                  S9eUR	                  5       n	UR                  USU	SU0S9  U	$  NX7f)NTr   r   streamr      status_codemessage complete_input_dictinputapi_keyoriginal_responseadditional_args)postr    r   textaiter_lines	post_call)
r   r   r   r   r   r   logging_objr   responsecompletion_streams
             ]/home/james-whalen/.local/lib/python3.13/site-packages/litellm/llms/predibase/chat/handler.py	make_callr1      s      [[T7 !  H s")=)=x}}UU ,,.+.5	   !s   A3A1AA3c                     ^  \ rS rSrSU 4S jjrS\4S jrS\S\R                  S	\	S
\
S\S\S\S\\\4   S\S\	4S jrSSS0 4S\S\S\S\S	\	S\S\S\S\S\\\R$                  4   S\S\\	\4   4S jjrSS0 4S\S\S\S	\	S\S\S\S\\\R$                  4   S\	4S jjrSSS0 4S\S\S\S	\	S\S\S\\\R$                  4   S\4S jjrS rSrU =r$ )PredibaseChatCompletion;   returnNc                 "   > [         TU ]  5         g N)super__init__)self	__class__s    r0   r9    PredibaseChatCompletion.__init__<   s        generated_textc                    / SQnU Hw  nUR                  5       R                  U5      (       a  UR                  USS5      nUR                  U5      (       d  MR  USSS2   R                  USSS2   SS5      SSS2   nMy     U$ )z
Parse the output text to remove any special characters. In our current approach we just check for ChatML tokens.

Initial issue that prompted this - https://github.com/BerriAI/litellm/issues/763
)z<|assistant|>z
<|system|>z<|user|>z<s>z</s>r"      N)strip
startswithreplaceendswith)r:   r>   chat_template_tokenstokens       r0   output_parser%PredibaseChatCompletion.output_parser?   s     
 *E##%0077!/!7!7r1!E&&u--!/"!5!=!=eDbDk2q!QRVTVRV!W	 *
 r=   r   r.   model_responser   r-   optional_paramsr&   r   r   c                 &   UR                  U	UUR                  SU0S9  U
" SUR                   35         UR                  5       nSU;   a   [	        [        US   5      UR                  S9e[        U[        5      (       d  [	        SSU 3S9eS	U;  a  [	        SS
U 3S9e[        US	   5      S:  a0  U R                  US	   5      UR                  S   R                  l        SU;   ap  SUS   ;   ag  [        US   S   5      UR                  S   l        SnUS   S    H  nUS   c  M  XS   -  nM     [!        UR                  S   R                  SU5        SU;   a  US   S:  a  SU;   a  SUS   ;   a  / n[#        US   S   5       H  u  nnSnUS    H  nUS   c  M  XS   -  nM     [        US	   5      S:  a  [%        U R                  US	   5      US9nO	[%        S S9n['        [        US   5      US-   US9nUR)                  U5        M     UR                  R+                  U5        Sn [,        R.                  " U	S9nUS   S   S   R1                  SS5      nUbF  [        U5      S:  a7  Sn [        UR3                  US   S   S   R1                  SS5      5      5      nOSnUU-   n[5        [6        R6                  " 5       5      Ul        Xl        [=        UUUS9nUUl        UR@                  n0 nURC                  5        H2  u  nnURE                  S5      (       d  M  UUSRG                  U5      '   M4     UURH                  S'   U$ ! [         a    [	        UR                  SS9ef = f! [         a     GN:f = f! [         a     Nf = f) Nr#   r$   zraw model_response: i  )r!   r    errorz,'completion_response' is not a dictionary - r   r>   z4'generated_text' is not a key response dictionary - r   detailstokensfinish_reasonlogprob_logprobbest_ofr@   best_of_sequences)contentlogprobs)rU   )rP   indexr!   )r   choicesr!   rU   r"   )prompt_tokenscompletion_tokenstotal_tokenszx-zllm_provider-{}additional_headers)%r,   r*   json	Exceptionr   strr    
isinstancedictlenrH   rX   r!   rU   r   rP   setattr	enumerater   r   appendextendlitellmtoken_countergetencodeinttimecreatedr   r   usager   itemsrC   format_hidden_params)r:   r   r.   rJ   r   r-   rK   r&   r   r   print_verboseencodingcompletion_responsesum_logprobrG   choices_listidxitemmessage_obj
choice_objrY   output_textrZ   r[   rn   predibase_headersresponse_headerskvs                                r0   process_response(PredibaseChatCompletion.process_responseS   sJ    	&mm2D9	 	 	
 	,X]]O<=	I"*--/ )) /89$00 
 1488$ #JK^J_`  ")<<$ #RSfRgh  &'789A=<@<N<N'(89=&&q)119
 00 3I >>:K'	2?C;&&q)7  0;HEEY'3#Y'77 F "**1-55
 O+	0JQ0N!44+/B9/MM#%L%.+I67JK&	T '(%)(^E$Y/; +Y/? ? &4 t$456:*1(,(:(:4@P;Q(R)4+K
 +2$*?K%,*;D<Q*R"%'$/&

 %++J7'&( #**11,? 	#118DM %Y/29=AA)RP"s;'7!'; !$'OO&y1!4Y?CCIrR%! !"$'88!$TYY[!1$'/%

  % %,,%++-DAq||D!!@A !2!9!9!!<= . ?O%%&:;[  	I CHH	IN  		  s/   M 1M2 53N M/2
N ?N 
NNr   custom_prompt_dictrr   	tenant_idr   r   c                 N   [         R                  " 5       R                  UUUU
US9nSnSnSnSU;   a  UnO5U(       a  UnO+S[        R                  ;   a  [        R
                  " SS5      nU SU SU 3nU
R                  SS	5      S
L a  US-  nOUS-  nX;   a  XA   n[        US   US   US   US9nO	[        XS9n[         R                  R                  5       nUR                  5        H  u  nnUU
;  d  M  UU
U'   M     U
R                  SS	5      nUU
S.nUnU	R                  UUUUUUS.S9  US
L a>  US
L a  U R                  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
S	UUUUS9$ US
L aQ  [         R                  R!                  UU["        R$                  " U5      UUS9n['        UR)                  5       USU	S9nU$ [         R                  R!                  UU["        R$                  " U5      US9nU R+                  UUUU
R                  SS	5      U	U
UUUUUS9$ )N)r&   r   r   rK   r   r"   z!https://serving.app.predibase.comhttpsPREDIBASE_API_BASE/z/deployments/v2/llms/r   FTz/generate_streamz	/generaterolesinitial_prompt_valuefinal_prompt_value)	role_dictr   r   r   )r   r   )inputs
parameters)r#   r   r   acompletion)r%   r&   r(   )r   r   r   r   rJ   rr   rs   r&   r-   rK   litellm_params	logger_fnr   r   )r   r   r   r   rJ   rr   rs   r&   r-   rK   r   r   r   r   r   r   	predibase)custom_llm_providerr-   )urlr   r   r   )r   r.   rJ   r   r-   rK   r&   r   r   rr   rs   )rg   PredibaseConfigvalidate_environmentosenvirongetenvri   r   r	   
get_configro   poppre_callasync_streamingasync_completionmodule_level_clientr)   r]   dumpsr   
iter_linesr   )r:   r   r   r   r   rJ   rr   rs   r&   r-   rK   r   r   r   r   r   r   completion_url
input_textbase_urlmodel_prompt_detailspromptconfigr~   r   r   r   r.   	_responses                                r0   
completion"PredibaseChatCompletion.completion   s   & ))+@@+ A 
 
6e"NH!RZZ/yy!5r:H$:Qyk1FugNx/4700Nk)N&#5#< ".w7%9:P%Q#78L#M!	F $%CF ((335LLNDAq(%&"	 # !$$Xu5 )
 
'+"**	 	 		
 $~++%+#1"/%# +$3#1'## ,  $ ,,%+#1"/%# +$3 #1'## -  & T>2277ZZ% 8 H ,##%$/'	I  2277"ZZ%	 8 H $$)"&&x7#+' % 
 	
r=   c                 x  #    [        [        R                  R                  SU0S9n UR	                  X?[
        R                  " U
5      S9I S h  vN nU R%                  UUUU	UUU
UUUUS9$  N! [        R                   a[  n[        UR                  R                  SR                  UR                  R                  UR                  R                  5      S9eS nAf[         aQ  n[        R                   H  n[!        UU5      (       d  M  Ue   [        SSR                  [#        U5      5      S9eS nAff = f7f)	Nr   )llm_providerparams)r   r   z;HTTPStatusError - received status_code={}, error_message={}r   i  z{})r   r.   rJ   r   r-   r&   r   r   rr   rK   rs   )r   rg   LlmProviders	PREDIBASEr)   r]   r   httpxHTTPStatusErrorr   r.   r    rp   r*   r^   LITELLM_EXCEPTION_TYPESr`   r_   r   )r:   r   r   r   rJ   rr   rs   r&   r-   r   r   rK   r   r   r   r   async_handlerr.   e	exceptions                       r0   r   (PredibaseChatCompletion.async_completion{  s9    & / --77w'
	*//

40@ 0  H" $$)#'+ % 
 	
# $$ 	 JJ22U\\JJ**AJJOO   	$<<	a++G = !SV)< 		sM   %D:'A/ A-A/ D:-A/ /D7ACD7&"D2&D22D77D:c                 ~   #    SU	S'   [        S [        [        UU[        R                  " U	5      UUUU
S9USUS9nU$ 7f)NTr   )r   r   r   r   r   r-   r   r   )r/   r1   r   r   r-   )r   r   r1   r]   r   )r:   r   r   r   rJ   rr   rs   r&   r-   r   r   rK   r   r   r   streamwrappers                   r0   r   'PredibaseChatCompletion.async_streaming  sY     " X+"!ZZ%!'	  +#
  s   ;=c                     g r7    )r:   argskwargss      r0   	embedding!PredibaseChatCompletion.embedding  s    r=   r   )r5   N)__name__
__module____qualname____firstlineno__r9   r_   rH   r   Responser   boolr   ra   r   listr   r   floatTimeoutr   r   r   r   r   __static_attributes____classcell__)r;   s   @r0   r3   r3   ;   s5   C (FF ..F &	F
 F -F F F D#IF F 
Fl #^
^
 ^
 	^

 !^
 &^
  ^
 ^
 ^
 ^
 uemm+,^
" #^
$ 
}11	2%^
\ !5
5
 5
 	5

 &5
  5
 5
 5
 uemm+,5
" 
#5
F ## # 	#
 &#  # # uemm+,#  
!#J r=   r3   )&r]   r   rl   	functoolsr   typingr   r   r   r   rg   litellm.litellm_core_utils*litellm.litellm_core_utils.litellm_logging'litellm.litellm_core_utils.core_helpersr   3litellm.litellm_core_utils.prompt_templates.factoryr   r	   &litellm.llms.custom_httpx.http_handlerr
   r   litellm.types.utilsr   litellm.utilsr   r   r   r   r   common_utilsr   r_   ra   r   r   r   r1   r3   r   r=   r0   <module>r      s     	   , ,   ! 1 E 8 U U )  	
   eE5==012:] ]r=   