
    ^h"                       S SK r S SKrS SKrS SKJrJrJrJrJrJ	r	J
r
JrJr  S SKrS SK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  S SK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$  S SK%J&r&  S SK'J(r(J)r)J*r*  S SK+J,r,J-r-J.r.  SSK/7  SSK0J1r1  SSK2J3r3  SSK4J5r5J6r6   " S S5      r7 " S S\!5      r8 " S S\15      r9 " S S\15      r: " S S \15      r; " S! S"\15      r<g)#    N)	AnyCallable	CoroutineIterableListLiteralOptionalUnioncast)AsyncOpenAIOpenAI)AssistantDeleted)FileDeleted)	BaseModel)overload)LlmProviders)verbose_logger)Logging)
BaseConfigBaseLLMException)MockResponseIterator)_DEFAULT_TTL_FOR_HTTPX_CLIENTS)EmbeddingResponseImageResponseModelResponse)CustomStreamWrapperProviderConfigManager convert_to_model_response_object   )*   )BaseLLM   )OpenAIGPTConfig)OpenAIError+drop_params_from_unprocessable_entity_errorc                   N    \ rS rSrSr  SS jr\S 5       rS rS\	S\	4S	 jr
S
rg)MistralEmbeddingConfig,   zC
Reference: https://docs.mistral.ai/api/#operation/createEmbedding
Nc                     [        5       R                  5       nUR                  5        H(  u  p#US:w  d  M  Uc  M  [        U R                  X#5        M*     g Nselflocalscopyitemssetattr	__class__)r,   locals_keyvalues       T/home/james-whalen/.local/lib/python3.13/site-packages/litellm/llms/openai/openai.py__init__MistralEmbeddingConfig.__init__1   s=     (--/!--/JCf}!23 *    c                    U R                   R                  5        VVs0 s H_  u  pUR                  S5      (       a  M  [        U[        R
                  [        R                  [        [        45      (       a  MX  Uc  M]  X_Ma     snn$ s  snnf )N__)	__dict__r0   
startswith
isinstancetypesFunctionTypeBuiltinFunctionTypeclassmethodstaticmethod)clskvs      r6   
get_config!MistralEmbeddingConfig.get_config9   s     **,
,<<%  &&-- 	   AD,
 	
 
s   B7B9B>Bc                     S/$ Nencoding_format r,   s    r6   get_supported_openai_params2MistralEmbeddingConfig.get_supported_openai_paramsK   s    
 	
r9   non_default_paramsoptional_paramsc                 P    UR                  5        H  u  p4US:X  d  M  XBS'   M     U$ rJ   )r0   )r,   rP   rQ   paramr5   s        r6   map_openai_params(MistralEmbeddingConfig.map_openai_paramsP   s1    .446LE))5: 12 7 r9   rL   returnN)__name__
__module____qualname____firstlineno____doc__r7   rB   rG   rN   dictrT   __static_attributes__rL   r9   r6   r(   r(   ,   s@    4	4 
 
"

D 4 r9   r(   c                   Z  ^  \ rS rSr% SrSr\\   \S'   Sr	\\
\\4      \S'   Sr\\   \S'   Sr\\   \S'   Sr\\   \S'   Sr\\   \S	'   Sr\\   \S
'   Sr\\   \S'   Sr\\
\\4      \S'   Sr\\   \S'   Sr\\   \S'   Sr\\   \S'               S,S\\   S\\
\\4      S\\   S\\   S\\   S	\\   S
\\   S\\   S\\
\\4      S\\   S\\   S\\   SS4S jjr\U 4S j5       rS\S\4S jrS\S\S\S\4S jrS\\   S\S\\   4S jrS\S\S\S\ S\4
S jr!S\S\S\
\\"RF                  4   S\$4S jr%S\S\\   S\S \S\S\4S! jr&  S-S\S"\"RN                  S#\(S$\)S%\S\\   S\S \S&\*S'\\   S(\\    S\(4S) jjr+ S.S\S\S\\   S\S'\\   S\4S* jjr,S+r-U =r.$ )/OpenAIConfigW   a  
Reference: https://platform.openai.com/docs/api-reference/chat/create

The class `OpenAIConfig` provides configuration for the OpenAI's Chat API interface. Below are the parameters:

- `frequency_penalty` (number or null): Defaults to 0. Allows a value between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, thereby minimizing repetition.

- `function_call` (string or object): This optional parameter controls how the model calls functions.

- `functions` (array): An optional parameter. It is a list of functions for which the model may generate JSON inputs.

- `logit_bias` (map): This optional parameter modifies the likelihood of specified tokens appearing in the completion.

- `max_tokens` (integer or null): This optional parameter helps to set the maximum number of tokens to generate in the chat completion. OpenAI has now deprecated in favor of max_completion_tokens, and is not compatible with o1 series models.

- `max_completion_tokens` (integer or null): An upper bound for the number of tokens that can be generated for a completion, including visible output tokens and reasoning tokens.

- `n` (integer or null): This optional parameter helps to set how many chat completion choices to generate for each input message.

- `presence_penalty` (number or null): Defaults to 0. It penalizes new tokens based on if they appear in the text so far, hence increasing the model's likelihood to talk about new topics.

- `stop` (string / array / null): Specifies up to 4 sequences where the API will stop generating further tokens.

- `temperature` (number or null): Defines the sampling temperature to use, varying between 0 and 2.

- `top_p` (number or null): An alternative to sampling with temperature, used for nucleus sampling.
Nfrequency_penaltyfunction_call	functions
logit_biasmax_completion_tokens
max_tokensnpresence_penaltystoptemperaturetop_presponse_formatrW   c                     [        5       R                  5       nUR                  5        H(  u  pUS:w  d  M  Uc  M  [        U R                  X5        M*     g r+   r-   )r,   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   r3   r4   r5   s                   r6   r7   OpenAIConfig.__init__   s=     (--/!--/JCf}!23 *r9   c                     > [         TU ]  5       $ N)superrG   )rD   r2   s    r6   rG   OpenAIConfig.get_config   s    w!##r9   modelc                 8   [         R                  R                  US9(       a  [         R                  R                  US9$ [         R                  R                  US9(       a  [         R                  R                  US9$ [         R                  R                  US9$ )a?  
This function returns the list
of supported openai parameters for a given OpenAI Model

- If O1 model, returns O1 supported params
- If gpt-audio model, returns gpt-audio supported params
- Else, returns gpt supported params

Args:
    model (str): OpenAI model

Returns:
    list: List of supported openai parameters
rt   )litellmopenAIO1Configis_model_o1_reasoning_modelrN   openAIGPTAudioConfigis_model_gpt_audio_modelopenAIGPTConfig)r,   rt   s     r6   rN   (OpenAIConfig.get_supported_openai_params   s     !!==E=J))EEEERR))BBBO//KKRWKXX**FFUFSSr9   rP   rQ   c                 p    U R                  U5      nUR                  5        H  u  pVXT;   d  M  XbU'   M     U$ rq   )rN   r0   )r,   rP   rQ   rt   supported_openai_paramsrS   r5   s          r6   _map_openai_paramsOpenAIConfig._map_openai_params   s@     #'"B"B5"I.446LE/).& 7 r9   messagesc                     U$ rq   rL   )r,   r   rt   s      r6   _transform_messages OpenAIConfig._transform_messages   s	     r9   drop_paramsc                 J   [         R                  R                  US9(       a   [         R                  R                  UUUUS9$ [         R                  R                  US9(       a   [         R                  R                  UUUUS9$ [         R                  R                  UUUUS9$ ) rv   )rP   rQ   rt   r   )rw   rx   ry   rT   rz   r{   r|   )r,   rP   rQ   rt   r   s        r6   rT   OpenAIConfig.map_openai_params   s     !!==E=J));;#5 /'	 <   ))BBBO//AA#5 /'	 B   &&881+#	 9 
 	
r9   error_messagestatus_codeheadersc                     [        UUUS9$ )Nr   messager   )r%   )r,   r   r   r   s       r6   get_error_classOpenAIConfig.get_error_class   s     #!
 	
r9   litellm_paramsc                     XS.UE$ )Nrt   r   rL   )r,   rt   r   rQ   r   r   s         r6   transform_requestOpenAIConfig.transform_request   s     HHHr9   raw_responsemodel_responselogging_objrequest_dataencodingapi_key	json_modec                     [        S5      e)NzBOpenAI handler does this transformation as it uses the OpenAI SDK.NotImplementedError)r,   rt   r   r   r   r   r   rQ   r   r   r   r   s               r6   transform_responseOpenAIConfig.transform_response   s     "P
 	
r9   c                     [        S5      e)Nz>OpenAI handler does this validation as it uses the OpenAI SDK.r   )r,   r   rt   r   rQ   r   s         r6   validate_environment!OpenAIConfig.validate_environment   s     "L
 	
r9   rL   )NNNNNNNNNNNNNNrq   )/rX   rY   rZ   r[   r\   rb   r	   int__annotations__rc   r
   strr]   rd   listre   rf   rg   rh   ri   rj   rk   rl   rm   r7   rB   rG   rN   r   r   AllMessageValuesr   boolrT   httpxHeadersr   r   r   Responser   LiteLLMLoggingObjr   r   r   r^   __classcell__r2   s   @r6   r`   r`   W   s   8 (,x}+04M8E#t),-4 $Ix~$!%J%+/8C=/ $J$Ax}&*hsm*'+D(5d#
$+!%K#%E8C=&*OXd^* ,048$(%)/3$(*.+/%)#*.4#C=4  c4i 014 D>	4
 TN4  (}4 SM4 C=4 #3-4 uS$Y'(4 c]4 }4 "$4 
4( $ $T T T,"&9=FI	-.7:		

 
 
 	

 
 

<
 
/2
=B4CV=W
	
II '(I 	I
 I I 
I* "&$(

 nn
 &	

 '
 
 '(
 
 
 
 #
 D>
 

0 "&



 

 '(	


 

 #

 


 

r9   r`   c            "         ^  \ rS rSrS8U 4S jjrSS\R                  " S5      SSS4S\S\\	   S\\	   S	\
\\R                  4   S
\\   S\\	   S\\
\\4      4S jjrS\S\S	\
\\R                  4   S\\\4   4S jrS\S\S	\
\\R                  4   S\\\4   4S jr S9S\S\S\	S\\   S\4
S jjrSSSSSSSS0 SSSS4S\S	\
\\R                  4   S\S\S\S\\	   S\\   S\\   S\\	   S\\	   S\S\\   S \S\\	   S!\\	   S"\\   4 U 4S# jjjr         S:S\S\	S\S\S	\
\\R                  4   S\\	   S\\	   S\\	   S"\\   S\\   S$\4S% jjr       S;S	\
\\R                  4   S\S\	S\\	   S\\	   S\\	   S\\   4S& jjr        S<S	\
\\R                  4   S\S\	S\S\\	   S\\	   S\\	   S"\\   S\\   4S' jjrS\S\S	\
\\R                  4   4S( jr S\S\S	\
\\R                  4   4S) 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
\\   S\"4U 4S, jjjr$    S=S-\	S\S\S	\S\S\\	   S\\	   4S. jjr%     S>S\\	   S-\	S	\S\S\S\\	   S\\	   S\\&   S\&4S/ jjr'  S?S\	S*\	S0\	S\S\\	   S\\	   S\\	   S1\\	   S
\S	\
\\R                  4   S2\\   S\(4S3 jjr) S9S\	S*\	S0\	S\S\\	   S\\	   S\\	   S1\\	   S
\S	\
\\R                  4   S\(4S4 jjr*     S>S\\	   S\\	   S	\S5\	S\\   S*\\   S-\\	   S\\	   S\\	   4S6 jjr+S7r,U =r-$ )@OpenAIChatCompletioni  rW   Nc                 "   > [         TU ]  5         g rq   rr   r7   r,   r2   s    r6   r7   OpenAIChatCompletion.__init__      r9   r!   is_asyncr   api_basetimeoutmax_retriesorganizationclientc                 2   [        5       nUGc  [        U[        5      (       d  [        SSR	                  U5      S9eS n	Ub4  [
        R                  " UR                  5       5      n
U
R                  5       n	SU	 SU SU SU SU S	U 3n[        R                  R                  U5      nU(       a  U$ U(       a  [        UU[        R                  UUUS
9nO[        UU[        R                  UUUS
9n[        R                  R!                  UU["        S9  U$ U$ )N  z/max retries must be an int. Passed in value: {}r   r   zhashed_api_key=z
,api_base=z	,timeout=z,max_retries=z,organization=z
,is_async=)r   base_urlhttp_clientr   r   r   )r4   r5   ttl)r.   r>   r   r%   formathashlibsha256encode	hexdigestrw   in_memory_llm_clients_cache	get_cacher   aclient_sessionr   client_session	set_cacher   )r,   r   r   r   r   r   r   r   argshashed_api_keyhash_object
_cache_key_cached_client_new_clients                 r6   _get_openai_client'OpenAIChatCompletion._get_openai_client  sZ    x>k3//! #MTT#  "N"%nnW^^-=>!,!6!6!8*>*:*XJiX_W``mnymz  {I  JV  IW  Wa  bj  ak  lJ$@@JJ:VN%%:E#% ' 7 7# +!-; %#% ' 6 6# +!- //99!2 : 
  Mr9   openai_aclientdatac                 (  #     UR                   R                  R                  R                  " S0 UDSU0D6I Sh  vN n[	        US5      (       a  [        UR                  5      nO0 nUR                  5       nXV4$  N@! [         a  nUeSnAff = f7f)
Helper to:
- call chat.completions.create.with_raw_response when litellm.return_response_headers is True
- call chat.completions.create by default
r   Nr   rL   )	chatcompletionswith_raw_responsecreatehasattrr]   r   parse	Exceptionr,   r   r   r   r   r   responsees           r6   #make_openai_chat_completion_request8OpenAIChatCompletion.make_openai_chat_completion_requestQ  s     	$))55GGNN $+   |Y//|334#))+H$$  	G	s8   B7A> A<?A> ;B<A> >
BB

BBopenai_clientc           
      ^   Sn UR                   R                  R                  R                  " S0 UDSU0D6n[	        US5      (       a  [        UR                  5      nO0 nUR                  5       nXV4$ ! [         a.  nUb$  [        SR                  Xt[        U5      5      5      eUeSnAff = f)r   Nr   r   z9error - {}, Received response - {}, Type of response - {}rL   )r   r   r   r   r   r]   r   r   r   r   typer,   r   r   r   r   r   r   r   s           r6   (make_sync_openai_chat_completion_request=OpenAIChatCompletion.make_sync_openai_chat_completion_requestl  s     	(--99KKRR  'L |Y//|334#))+H$$ 	'OVVl);  	s   A/A4 4
B,>)B''B,r   r   rt   stream_optionsc                 2    [        US9n[        UUSUUS9nU$ )N)r   openai)completion_streamrt   custom_llm_providerr   r   )r   r   )r,   r   r   rt   r   r   streaming_responses          r6   mock_streaming#OpenAIChatCompletion.mock_streaming  s1     1I0/ (#)
 "!r9   Fr   rQ   r   r   print_verboseacompletionr   custom_prompt_dictr   r   c                 
  > [         T&U ]  5          SnUR                  5       nUR                  SS 5      nUR                  SS5      nUb2  Ub/  [        R
                  " U[        U5      S9nUR                  UUUS9nU(       a  UUS'   Ub  Uc
  [        SSS	9e[        U[        5      (       d)  [        U[        R                  5      (       d
  [        SS
S	9eUb  US:w  a  U SU 3Ul        UbZ  UbW  [        R
                  " U[        U5      S9n[        U[        5      (       d  [        U[        5      (       a  UR!                  XvS9n[#        S5       GH  n[        5       R%                  UUUUU=(       d    0 S9n UR                  SS5      nUSL aC  USL a!  USL a  U R'                  UUUUU
U	UUUUUUS9s  $ U R)                  UUUUUU
U	UUUUUUS9s  $ USL a   USL a  U R+                  UUUUU
U	UUUUUS9s  $ [        U[,        5      (       d
  [        SSS	9eU R/                  SU	U
UUUUS9nUR1                  UUR2                  UUR4                  R6                  UUS.S9  U R9                  UUUS9u  nnXR:                  S'   UR=                  5       nUR?                  UU	USU0S9  [A        UUUS9nUSL a"  U RC                  [E        [F        U5      UUUS9s  $ Us  $    g ! [H        RJ                   a2  n[L        RN                  SL d  USL a  [Q        UU5      n S nAGM  UeS nAf[R         GaM  nUb  U" S[U        U5       35        S [U        U5      ;   d  S![U        U5      ;   a  Ub  Ub  U" S"5        / n [#        [W        U5      S#-
  5       Hd  n!U RY                  UU!   5        UU!   S$   UU!S#-      S$   :X  d  M.  UU!   S$   S%:X  a  U RY                  S&S'S(.5        MP  U RY                  S%S'S(.5        Mf     U RY                  US)   5        U n S nAGM  S*[U        U5      ;   a"  Ub  Un U RY                  S%S'S(.5        U n S nAGM  S+[U        U5      ;   a%  S,U;   a  [L        RZ                  " US,   US-9   S nAGM$  UeS nAff = f! [         a  nUeS nAf[R         ad  n[]        US.S/5      n"[]        US0S 5      n#[]        US1[U        U5      5      n$[]        US2S 5      n%U#c  U%(       a  []        U%S0S 5      n#[        U"U$U#S39eS nAff = f)4NFr   stream)rt   provider)rt   r   r   extra_headersr   zMissing model or messagesr   z,Timeout needs to be a float or httpx.Timeoutr   /)r   rt   r!   )rt   r   rQ   r   r   r   T)r   r   r   rt   r   r   r   r   r   r   r   r   )r   r   rt   r   r   r   r   r   r   r   r   r   fake_stream)r   r   r   rt   r   r   r   r   r   r   r   max retries must be an intr   r   r   r   r   r   r   r   r   r   complete_input_dictinputr   additional_argsr   r   r   response_headersr  r  r   original_responser  )response_objectmodel_response_object_response_headersr   r   rt   r   z#openai.py: Received openai error - z0Conversation roles must alternate user/assistantz.user and assistant roles should be alternatingz!openai.py: REFORMATS THE MESSAGE!r#   roleuser	assistantr   )r  contentz"Last message must have role `user`z3unknown field: parameter index is not a valid fieldtools)
tool_callsr   r     r   textr   r   )/rr   
completionr/   popr   get_provider_chat_configr   should_fake_streamr%   r>   floatr   Timeoutrt   r$   r`   r   ranger   async_streamingr   	streamingr   r   pre_callr   	_base_url_uri_referencer   model_call_details
model_dump	post_callr   r   r   r   r   UnprocessableEntityErrorrw   r   r&   r   r   lenappendremove_index_from_tool_callsgetattr)'r,   r   r   rQ   r   r   rt   r   r   r   r   r   	logger_fnr   r   r   r   r   r   r   inference_paramsr   r   provider_config_r   r   r   r   stringified_responsefinal_response_objr   new_messagesir   error_headers
error_texterror_responser2   s'                                         r6   r  OpenAIChatCompletion.completion  s-   * 	V	 %K.335-=-A-A $.N &6%9%9(E%JF".53D"7"P"P,7J*K# .@@5HQW A  4; 1} 0!c;VWWgu--j7 7 " #J 
 #.3F(3R*=)>aw'G$#(;(G"7"P"P,7J*K# o??:#\D D  /BB!)  C  H  $~77%$4#1#Mr 8 W "&((=!"<K"d*!T>kU.B#'#7#7,7(/%)&+)1(/(/'-,7-9,7/= $8 $  $(#3#3%)(/&+,7/=)1(/(/'-,7-9,7,7 $4 $   4K5,@#~~(3$+!%"'%-$+$+#)(3)5+9  .     *+s;;"-,/9U#  150G0G%*$+%-$+(3)5#) 1H 1 $,,"*$1$9$9+2,9,C,C,R,R/:7;	- - 	 !II.;%)(/ J  * NU667IJ/7/B/B/D,#--"*$+.B-BD,I	 .  .N,@2@.5.*
 '$.#'#6#6)-m=O)P,7&+/=	 $7 $   21ij 66  **d2kT6I+V/,(    # $0%(KCPQF8&TUJcRSfTKsSTvU".(4)*MN')!&s8}q'8!9A(//<'{62hq1uof6MM#+A;v#6&#@$0$7$71<(L%& %1$7$7TV8W$X ": %++HRL9#/<AF".'/$++V,KL#/MQTUVQWW!T/<<'+G}x   G# H  	G 		!!]C8K#Ay$7M FCF3J$Q
D9N$ '	4 H'] 		s   E*R <:K"6R 9K"R "K"8R ;CK"R K"R R "Q>6$L#R !L##Q>1BQ9;AQ9R *Q9<R -Q90R 7Q99Q>>R 
S>RS>AS99S>r   c                 L  #    S n[        S5       H  n U R                  SUUUU
UU	S9nUR                  US   UR                  SSUR                   30UR                  R
                  SUS.S9  U R                  UXS	9I S h  vN u  pUR                  5       nUR                  US   UUS
U0S9  XR                  S'   [        UUSU0US9nUSL a"  U R                  [        [        U5      UUUS9s  $ Us  $    g  Nw! [        R                   a2  n[         R"                  SL d  USL a  [%        UU5      n S nAGM+  UeS nAf[&         aW  n[)        USS 5      n[)        USS5      n[)        USS 5      nUc  U(       a  [)        USS 5      n[+        U[-        U5      US9eS nAff = f7f)Nr!   Tr   r   AuthorizationBearer r  r  r   r   r   r  r  r  r   )r
  r  hidden_paramsr  r  r   r   r  r   )r  r   r   r   r!  r"  r   r$  r%  r#  r   r   r   r   r   r&  rw   r   r&   r   r*  r%   r   )r,   r   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r.  r   r/  r0  r   exception_responser   r3  s                           r6   r    OpenAIChatCompletion.acompletion  s    " 
AE.2.E.E!#%# +!-! /F / $$z**22 ,w~7M7M6N-O$ %3$<$<$K$K'+/3% %  +/*R*R#1 +S + %! (0':':'<$%%z*#&:%:D$A	 &  FM../AB%E$8*8#,g"6&-	&" $&..!%m5G!H$/#'5	 /   *)o
8%8 22 &&$.+2EFq$ODG 	%,Q
D%A"%a< '9d ; (-?$+,>	4$PM! +SV] 	sa   F$A.C<C:A-C<0F$3C<4F$:C<<F!$D=4F$;D==F!
AFF!!F$c           
      >   SUS'   Ub  XS'   U R                  SUUUU	UUS9nUR                  US   USSUR                   30UR                  R                  SUS	.S
9  U R                  UUUS9u  pXR                  S'   [        UUSUUR                  SS 5      U
S9nU$ )NTr   r   Fr   r   r8  r9  r  r  r  r  r   r   rt   r   r   r   r  )	r   r   r   r!  r"  r   r#  r   get)r,   r   r   r   rt   r   r   r   r   r   r   r   r   r   streamwrappers                  r6   r  OpenAIChatCompletion.streaming  s     X%%3!" $ 7 7#% !8 !
 	z"+w}7L7L6M-NO)33BB$'+	 	 		
 !II' J 
 >E&&'9:+& (#88$4d;%
 r9   c                   #    S nSUS'   Ub  XS'   [        S5       Hz  n U R                  SUUUU	UUS9nUR                  US   UU
USUS.S9  U R                  XUS	9I S h  vN u  pXR                  S
'   [        UUSUUR                  SS 5      U
S9nUs  $    g  N9! [        R                   a1  n[        R                  SL d  USL a  [        UU5      n S nAM  UeS nAf[         Ga  n[        U[        5      (       a  Ue[        USS 5      n[        USS5      n[        USS 5      nUc  U(       a  [        USS 5      nUb4  [!        US5      (       a#  [        U[#        U5       SUR$                   3US9e['        U5      R(                  S:X  a  [        S['        U5      R(                   US9e[!        US5      (       a  [        [        USS5      [#        U5      US9e[        S[#        U5       US9eS nAff = f7f)NTr   r   r!   r   r   r  r  r:  r  r   r?  r   r   r  r   r  z

Original Response: r   ReadTimeouti  )r  r   r   r   r#  r   r@  r   r&  rw   r   r&   r   r>   r%   r*  r   r   r  r   rX   )r,   r   r   rt   r   r   r   r   r   r   r   r   r   r   r.  r   rA  r   r3  r   r5  s                        r6   r  $OpenAIChatCompletion.async_streaming  s^     X%%3!"qAK.2.E.E!#%# +!-! /F / $$z*##*$,'+/3	% % 	 +/*R*R#1g +S + %! FM../AB 3&.(0 +#'88,<d#C&-! %$G .% 22 &&$.+2EFq$ODG" a--G '9d ;%a<!(J!= (^$+NIt$LM'GHf,E,E%$/#&q6(*A(-- Q -  Aw''=8)(+'+Aw'7'7&8$1 
 !M22)(/=#(F$'F$1  *(+Ax- A"sT   G<AB!B"3BG<BG91$CG<CG9+D	G44G99G<c                    #     UR                   R                  R                  " S0 UDSU0D6I Sh  vN n[        UR                  5      nUR                  5       nXV4$  N,! [         a  nUeSnAff = f7fz
Helper to:
- call embeddings.create.with_raw_response when litellm.return_response_headers is True
- call embeddings.create by default
r   NrL   
embeddingsr   r   r]   r   r   r   r   s           r6   make_openai_embedding_request2OpenAIChatCompletion.make_openai_embedding_request  s     	!/!:!:!L!L!S!S "" '" L <//0G#))+H$$  	G	s8   A4-A  A+A  A4A   
A1*A,,A11A4c                      UR                   R                  R                  " S0 UDSU0D6n[        UR                  5      nUR                  5       nXV4$ ! [         a  nUeSnAff = frG  rH  r   s           r6   "make_sync_openai_embedding_request7OpenAIChatCompletion.make_sync_openai_embedding_request  sq    		(33EELL  'L <//0G#))+H$$ 	G	s   AA 
A%A  A%r  c
           	      `  #     U R                  SUUUU	US9n
U R                  XUS9I S h  vN u  pXR                  S'   UR                  5       nUR	                  UUSU0US9  [        UUSUS9nU$  NF! [         a$  nUR	                  UUSU0[        U5      S9  UeS nAf[         a  nUR	                  UUSU0[        U5      S9  [        US	S
5      n[        USS 5      n[        US[        U5      5      n[        USS 5      nUc  U(       a  [        USS 5      n[        UUUS9eS nAff = f7f)NTr   r   r   r   r   r   r:  r  r  r  r   r  r	  	embedding)r
  r  response_typer  r   r  r   r  r   r   )
r   rJ  r#  r$  r%  r   r%   r   r   r*  )r,   r  r   r   r   r   r   r   r   r   r   r   r   r/  returned_responser   r   r3  r4  r5  s                       r6   
aembeddingOpenAIChatCompletion.aembedding  s    5	*.*A*A!' +B +N '+&H&H-' 'I ' !G BI**+=>#+#6#6#8 !!!6 ="6	 "  4T 4&4)")	4 %$%!&  	!!!6 ="%a&	 "  G 	!!!6 ="%a&	 "  "!]C8K#Ay$7M FCF3J$Q
D9N$ '	4 H'] 	sF   D.'A4 A2AA4 1D.2A4 4
D+>BD+*A<D&&D++D.c                   > [         TU ]  5          UnXS.UEnU=(       d    [        R                  n[	        U[
        5      (       d
  [        SSS9eUR                  UUXS.S9  U
SL a  U R                  UUUUUUUU	US9	$ U R                  S	UUUUU	S
9nS nU R                  XUS9u  pXR                  S'   UR                  UUSU0US9  [        UR                  5       UUSS9nU$ ! [         a  nUeS nAf[         ad  n[!        USS5      n[!        USS 5      n[!        US[#        U5      5      n[!        USS 5      nUc  U(       a  [!        USS 5      n[        UUUS9eS nAff = f)Nrt   r  r   r   r   )r  r   r  T)	r   r  r   r   r   r   r   r   r   FrP  r  r  r  rQ  rR  )r
  r  r  rS  r   r  r   r  r   r   )rr   rR  rw   DEFAULT_MAX_RETRIESr>   r   r%   r   rU  r   rM  r#  r%  r   r$  r   r*  r   )r,   rt   r  r   r   r   rQ   r   r   r   rU  r   r   r   r   sync_embedding_responser   r   r   r3  r4  r5  r2   s                         r6   rR  OpenAIChatCompletion.embedding  s    	C	E"FoFD%D)D)DKk3//!c;WXX  8< S !  T! +#1%##! + ' 
 
 %)$;$;!' %< %M '+G/3/V/V+ 0W 0,G
 BI**+=>!!!6 ="9	 "  +K 7 B B D&4"))	+H O 	G 		!!]C8K#Ay$7M FCF3J$Q
D9N$ '	4 H'] 		s,   A.C&  A%C& &
E#0C22E#?AEE#promptc
           	      D  #    S n
 U R                  SUUUU	US9nUR                  R                  " S	0 UDSU0D6I S h  vN n
U
R                  5       nUR	                  UUSU0US9  [        XSS9$  N2! [         a!  nUR	                  UU[        U5      S9  UeS nAff = f7f)
NTrP  r   r  rQ  image_generationr
  r  rS  )r  r   r	  rL   )r   imagesgenerater$  r%  r   r   r   )r,   r\  r   r   r   r   r   r   r   r   r   r   r/  r   s                 r6   aimage_generation&OpenAIChatCompletion.aimage_generationC  s      	!44!' 5 N ,22;;TdTGTTH#+#6#6#8 !!!6 ="6	 "  4DX  Oa  b  b U  	!!"%a& " 
 G	s8   B 7A2 A01A2 /B 0A2 2
B<BBB c                 .   0 n UnXS.UEnUR                  SS5      n[        U[        5      (       d
  [        SSS9eU
SL a  U R	                  XXXXvX9US9	$ U R                  S	UUUUU	S
9nUR                  UUR                  SSUR                   30UR                  R                  SUS.S9  UR                  R                  " S0 UDSU0D6nUR                  5       nUR                  UUSU0US9  [        XSS9$ ! [         a$  nUR                  UUSU0[        U5      S9  UeS nAf[          ad  nUR                  UUSU0[        U5      S9  [#        US5      (       a  [        [%        USS5      [        U5      S9e[        S[        U5      S9eS nAff = f)Nrt   r\  r   r!   r   r   r   T)	r   r\  r   r   r   r   r   r   r   FrP  r8  r9  r  r  r   r  rQ  r^  r_  r   r  rL   )r  r>   r   r%   rb  r   r   r   r!  r"  r`  ra  r$  r%  r   r   r   r   r*  )r,   rt   r\  r   rQ   r   r   r   r   r   aimg_generationr   r   r   	_responser   r   s                    r6   r^  %OpenAIChatCompletion.image_generationn  s     B	CE"HHD((=!4Kk3//!c;WXX$&--4T_  JR  mt  Q\-  ]  ]$($;$;!' %< %M   %-- /7=;P;P:Q1RS - 7 7 F F#'+/	! ! 	 &,,55NNgNI ++-H!!!6 ="*	 "  4H  CU  V  V 		 !!!6 ="%a&	 "  G 	C!!!6 ="%a&	 "  q-((! '=# >A  "c3q6BB	Cs,   AC: B$C: :
FD##F0AFFvoiceprojectaspeechc                    Ub  USL a  U R                  UUUUUUUUU	U
US9$ U R                  SUUU
U	US9n[        [        U5      R                  R
                  R                  " SUUUS.UD6n[        UR                  S9$ )NT)rt   r  ri  rQ   r   r   r   rj  r   r   r   FrP  rt   ri  r  r   rL   )	async_audio_speechr   r   r   audiospeechr   HttpxBinaryResponseContentr   )r,   rt   r  ri  rQ   r   r   r   rj  r   r   rk  r   r   r   s                  r6   audio_speech!OpenAIChatCompletion.audio_speech  s      7d?** /!)' +   //# 0 
 .44;;BB 

 	
 *83D3DEEr9   c                    #    [        [        U R                  SUUU
U	US95      nUR                  R                  R
                  " SUUUS.UD6I S h  vN n[        UR                  S9$  N7f)NTrP  rm  rn  rL   )r   r   r   rp  rq  r   rr  r   )r,   rt   r  ri  rQ   r   r   r   rj  r   r   r   r   r   s                 r6   ro  'OpenAIChatCompletion.async_audio_speech  s      ##!' $ 

 ',,33:: 

 	
 
 *83D3DEE
s   AA,A*A,modec
                 b  #    [        UUUU	S9n
Uc  US:w  a  [        S5      eS nUS:X  a.  U
R                  R                  R	                  UUS9I S h  vN nGOUS:X  aF  Uc  [        S5      eU
R
                  R                  R                  R	                  UUS9I S h  vN nGOyUS	:X  a<  Uc  [        S
5      eU
R                  R                  R	                  UUS9I S h  vN nGO7US:X  a;  Uc  [        S5      eU
R                  R                  R                  UUS9I S h  vN nOUS:X  a  [        R                  R                  [        R                  R                  [        5      5      n[        R                  R                  US5      n[        US5      nU
R                   R"                  R                  R	                  UUUS9I S h  vN nOLUS:X  a8  U
R                   R$                  R                  R	                  UUSS9I S h  vN nO['        SU-   5      e0 nUb  [)        US5      (       d  [        S5      eUR*                  R-                  SS 5      b  UR*                  S   US'   UR*                  R-                  SS 5      b  UR*                  S   US'   U$  GNM GN GN GN N N7f)N)r   r   r   r   r^  zmodel is not setr  re  r   zmessages is not setr   rR  zinput is not setrX  zprompt is not setaudio_transcriptionz../../../tests/gettysburg.wavrb)filert   r\  rs  alloy)rt   r  ri  zmode not set, passed in mode: r   zinvalid completion responsezx-ratelimit-remaining-requestszx-ratelimit-remaining-tokens)r   r   r   r   r   r   rI  r`  ra  ospathdirnamerealpath__file__joinopenrp  transcriptionsrq  
ValueErrorr   r   r@  )r,   rt   r   r   rw  r   r  r\  r   r   r   r  pwd	file_path
audio_filer   s                   r6   ahealth_check"OpenAIChatCompletion.ahealth_check  s     %	
 =T%77.//
<%11CCJJ  K   J V^ 566%{{66HHOO!  P   J [ } 233%00BBII  J   J ''~ 344%}}>>GG  H   J **''//"''"2"28"<=C4I i.J%||::LLSS  T   J
 ^#%||22DDKK  L   J =DEEWZ%C%C9:: ""#CTJV9C9K9K0:H56 !!"@$GS7A7I7I.8H34 }sq   AJ/JAJ/J"AJ/ J%!AJ/"J(#B)J/J+=J/
J-BJ/"J/%J/(J/+J/-J/rL   rV   rq   )	NNNNNNNNF)NNNNNNN)NNNNNNNN)NNNN)NNNNNr   ).rX   rY   rZ   r[   r7   r   r  r   r	   r   r
   r  r   r   r   r   r]   Tupler   r   r   r   r   r   r   r   r   r   r  r   r  r  rJ  rM  r   rU  rR  rb  r   r^  rr  rs  ro  r  r^   r   r   s   @r6   r   r     s    "&"&/4}}T/B%&&*7;== #= 3-	=
 uemm+,= c]= sm= v{234=~#  uemm+,	
 
tY	6  uemm+,	
 
tY	L *."" '" 	"
 !" 
"2  $#',0!%"&!"&#%&*-1&*'l%l uemm+,l 	l
 l l }l 4.l  )l #l 3-l l $l !l" sm#l$ &c]%l& d^'l lj "&"&&*&*)-!ZZ Z &	Z
 'Z uemm+,Z #Z 3-Z smZ d^Z !Z ZD "&"&&*)-4 uemm+,4 	4
 4 #4 3-4 sm4 !4x "&"&&*&*)-_uemm+,_ _ 	_
 '_ #_ 3-_ sm_ d^_ !_D#  uemm+,	*  uemm+,	: "&"&(,AA A *	A
 A 'A #A 3-A %AV "&"&%)RR R 	R *R R #R 3-R c]R 
R Rv "&"&)) ) &	)
 ) ) #) 3-)d "&"&26PC}PC PC 	PC
 PC PC #PC 3-PC !/PC 
PC| #'.F.F .F 	.F
 .F #.F 3-.F sm.F #.F .F uemm+,.F $.F 
$.Fx "F"F "F 	"F
 "F #"F 3-"F sm"F #"F "F uemm+,"F 
$"FT $( $ $&*"&V}V #V 	V
 V 4.V ~V V smV 3-V Vr9   r   c                     ^  \ rS rSrSrSU 4S jjr  SS\\   S\\   S\\	\
R                  4   S\\   S	\\   S
\\\\4      S\S\\\\4      4S jjrS\S\S\4S jr SS\S\S\S\\   S\\	\
R                  4   S\\   S	\\   S
\\\\4      S\\\\\\4   4   4S jjrS\S\S\4S jr SS\S\S\S\\   S\\	\
R                  4   S\\   S	\\   S
\\\\4      S\\\\\\4   4   4S jjrS\S\S\4S jr SS\S\S\S\\   S\\	\
R                  4   S\\   S	\\   S
\\\\4      4S jjrS\S\S\4S jr SS\S\S\S\\   S\\	\
R                  4   S\\   S	\\   S
\\\\4      4S jjr SS\S\\   4S jjr   S S\S\S\\   S\\	\
R                  4   S\\   S	\\   S\\   S
\\\\4      4S jjr!Sr"U =r#$ )!OpenAIFilesAPIim  z
OpenAI methods to support for batches
- create_file()
- retrieve_file()
- list_files()
- delete_file()
- file_content()
- update_file()
rW   c                 "   > [         TU ]  5         g rq   r   r   s    r6   r7   OpenAIFilesAPI.__init__x  r   r9   r   r   r   r   r   r   	_is_asyncc                     [        5       nS n	Ucg  0 n
UR                  5        H1  u  pUS:X  d  US:X  d  US:X  a  M  US:X  a	  Ub  XS'   M(  Uc  M-  XU'   M3     USL a  [        S0 U
D6n	U	$ [        S0 U
D6n	 U	$ Un	U	$ Nr,   r   r  r   r   TrL   r.   r0   r   r   r,   r   r   r   r   r   r   r  received_argsr   r   rE   rF   s                r6   get_openai_client OpenAIFilesAPI.get_openai_client{       >B>D%++-;!x-13C*_'($]G . D  + 3d 3 	 !'  #Mr9   create_file_datar   c                 Z   #    UR                   R                  " S0 UD6I S h  vN nU$  N7fNrL   )filesr   )r,   r  r   r   s       r6   acreate_fileOpenAIFilesAPI.acreate_file  s/     
 ',,33G6FGG H    +)+c	           
          U R                  UUUUUUUS9n	U	c  [        S5      eUSL a/  [        U	[        5      (       d  [        S5      eU R	                  X)S9$ U	R
                  R                  " S0 UD6n
U
$ )Nr   r   r   r   r   r   r  jOpenAI client is not initialized. Make sure api_key is passed or OPENAI_API_KEY is set in the environment.T\OpenAI client is not an instance of AsyncOpenAI. Make sure you passed an AsyncOpenAI client.)r  r   rL   )r  r  r>   r   r  r  r   )r,   r  r  r   r   r   r   r   r   r   r   s              r6   create_fileOpenAIFilesAPI.create_file  s     ?C>T>T#% ?U ?
  |  m[99 r  $$!1 %   !&&--A0@Ar9   file_content_requestc                 |   #    UR                   R                  " S0 UD6I S h  vN n[        UR                  S9$  N7f)Nrn  rL   )r  r  rr  r   )r,   r  r   r   s       r6   afile_contentOpenAIFilesAPI.afile_content  s;     
 ',,44L7KLL)83D3DEE Ms    <:<c	           
      ,   U R                  UUUUUUUS9n	U	c  [        S5      eUSL a0  [        U	[        5      (       d  [        S5      eU R	                  UU	S9$ [        [        U	5      R                  R                  " S0 UD6n
[        U
R                  S9$ )Nr  r  Tr  )r  r   rn  rL   )r  r  r>   r   r  r   r   r  r  rr  r   )r,   r  r  r   r   r   r   r   r   r   r   s              r6   file_contentOpenAIFilesAPI.file_content  s     ?C>T>T#% ?U ?
  |  m[99 r  %%%9+ &   .44<<T?ST)83D3DEEr9   file_idc                 T   #    UR                   R                  US9I S h  vN nU$  N7fNr  )r  retriever,   r  r   r   s       r6   aretrieve_fileOpenAIFilesAPI.aretrieve_file  s.     
 ',,55g5FF G   (&(c	           
          U R                  UUUUUUUS9n	U	c  [        S5      eUSL a0  [        U	[        5      (       d  [        S5      eU R	                  UU	S9$ U	R
                  R                  US9n
U
$ Nr  r  Tr  )r  r   r  )r  r  r>   r   r  r  r  r,   r  r  r   r   r   r   r   r   r   r   s              r6   retrieve_fileOpenAIFilesAPI.retrieve_file  s     ?C>T>T#% ?U ?
  |  m[99 r  &&+ '   !&&///@r9   c                 T   #    UR                   R                  US9I S h  vN nU$  N7fr  )r  deleter  s       r6   adelete_fileOpenAIFilesAPI.adelete_file#  s.     
 ',,33G3DD Er  c	           
          U R                  UUUUUUUS9n	U	c  [        S5      eUSL a0  [        U	[        5      (       d  [        S5      eU R	                  UU	S9$ U	R
                  R                  US9n
U
$ r  )r  r  r>   r   r  r  r  r  s              r6   delete_fileOpenAIFilesAPI.delete_file+  s     ?C>T>T#% ?U ?
  |  m[99 r  $$+ %   !&&--g->r9   purposec                    #    [        U[        5      (       a#  UR                  R                  US9I S h  vN nU$ UR                  R                  5       I S h  vN nU$  N* N7f)Nr  )r>   r   r  r   )r,   r   r  r   s       r6   alist_filesOpenAIFilesAPI.alist_filesQ  s^     
 gs##*0055g5FFH  +005577H G7s!   2A#A#A#A!A#!A#c	           
      J   U R                  UUUUUUUS9n	U	c  [        S5      eUSL a0  [        U	[        5      (       d  [        S5      eU R	                  UU	S9$ [        U[
        5      (       a  U	R                  R                  US9n
U
$ U	R                  R                  5       n
U
$ )Nr  r  Tr  )r  r   r  )r  r  r>   r   r  r   r  r   )r,   r  r   r   r   r   r   r  r   r   r   s              r6   
list_filesOpenAIFilesAPI.list_files\  s     ?C>T>T#% ?U ?
  |  m[99 r  ##+ $  
 gs##$**///@H  %**//1Hr9   rL   rV   NFrq   r   )$rX   rY   rZ   r[   r\   r7   r	   r   r
   r  r   r  r   r   r   r   r  CreateFileRequest
FileObjectr  r   r   r  FileContentRequestrr  r  r  r  r  r   r  r  r  r  r^   r   r   s   @r6   r  r  m  s/    8<# 3- uemm+,	
 c] sm v{234  
%+,	-<+ # 
	" 8<"" ," 	"
 #" uemm+," c]" sm" v{234" 
z9S#z%9::	;"HF0F #F 
$	F" 8<&F&F 1&F 	&F
 #&F uemm+,&F c]&F sm&F v{234&F 
"Ic38R.R$SS
&FP # 
	" 8<$$ $ 	$
 #$ uemm+,$ c]$ sm$ v{234$L # 
	" 8<$$ $ 	$
 #$ uemm+,$ c]$ sm$ v{234$R "&	"	 #	& "&7;(( ( #	(
 uemm+,( c]( sm( #( v{234( (r9   r  c                     ^  \ rS rSrSrSU 4S jjr  SS\\   S\\   S\\	\
R                  4   S\\   S	\\   S
\\\\4      S\S\\\\4      4S jjrS\S\S\4S jr SS\S\S\\   S\\   S\\	\
R                  4   S\\   S	\\   S
\\\\4      S\\\\\\4   4   4S jjrS\S\S\4S jr SS\S\S\\   S\\   S\\	\
R                  4   S\\   S	\\   S
\\   4S jjr SS\S\S\\   S\\   S\\	\
R                  4   S\\   S	\\   S
\\   4S jjr  SS\S\\   S\\   4S jjr   SS\S\\   S\\   S\\	\
R                  4   S\\   S	\\   S\\   S\\   S
\\   4S jjrSrU =r$ ) OpenAIBatchesAPIi  zk
OpenAI methods to support for batches
- create_batch()
- retrieve_batch()
- cancel_batch()
- list_batch()
rW   c                 "   > [         TU ]  5         g rq   r   r   s    r6   r7   OpenAIBatchesAPI.__init__  r   r9   r   r   r   r   r   r   r  c                     [        5       nS n	Ucg  0 n
UR                  5        H1  u  pUS:X  d  US:X  d  US:X  a  M  US:X  a	  Ub  XS'   M(  Uc  M-  XU'   M3     USL a  [        S0 U
D6n	U	$ [        S0 U
D6n	 U	$ Un	U	$ r  r  r  s                r6   r  "OpenAIBatchesAPI.get_openai_client  r  r9   create_batch_datar   c                 Z   #    UR                   R                  " S0 UD6I S h  vN nU$  N7fr  )batchesr   )r,   r  r   r   s       r6   acreate_batchOpenAIBatchesAPI.acreate_batch  s/     
 '..55J8IJJ Kr  c	           
          U R                  UUUUUUUS9n	U	c  [        S5      eUSL a/  [        U	[        5      (       d  [        S5      eU R	                  X)S9$ U	R
                  R                  " S0 UD6n
U
$ )Nr  r  Tr  )r  r   rL   )r  r  r>   r   r  r  r   )r,   r  r  r   r   r   r   r   r   r   r   s              r6   create_batchOpenAIBatchesAPI.create_batch  s     ?C>T>T#% ?U ?
  |  m[99 r  %%"3 &   !((//D2CDr9   retrieve_batch_datac                    #    [         R                  " SU5        UR                  R                  " S0 UD6I S h  vN nU$  N7f)Nzretrieving batch, args= %srL   )r   debugr  r  )r,   r  r   r   s       r6   aretrieve_batch OpenAIBatchesAPI.aretrieve_batch  sA     
 	9;NO&..77N:MNN Os   7AA Ac	           
          U R                  UUUUUUUS9n	U	c  [        S5      eUSL a/  [        U	[        5      (       d  [        S5      eU R	                  X)S9$ U	R
                  R                  " S0 UD6n
U
$ )Nr  r  Tr  )r  r   rL   )r  r  r>   r   r  r  r  )r,   r  r  r   r   r   r   r   r   r   r   s              r6   retrieve_batchOpenAIBatchesAPI.retrieve_batch  s     ?C>T>T#% ?U ?
  |  m[99 r  ''$7 (   !((11H4GHr9   cancel_batch_datac	           
          U R                  UUUUUUUS9n	U	c  [        S5      eU	R                  R                  " S0 UD6n
U
$ )Nr  r  rL   )r  r  r  cancel)r,   r  r  r   r   r   r   r   r   r   r   s              r6   cancel_batchOpenAIBatchesAPI.cancel_batch
  si     ?C>T>T#% ?U ?
  |  !((//D2CDr9   afterlimitc                    #    [         R                  " SX#5        UR                  R                  X#S9I S h  vN nU$  N7f)Nz%listing batches, after= %s, limit= %sr  r  )r   r  r  r   )r,   r   r  r  r   s        r6   alist_batchesOpenAIBatchesAPI.alist_batches%  s?      	DeS&..33%3MM Ns   4?=?c
           
          U R                  UUUUUU	US9n
U
c  [        S5      eUSL a0  [        U
[        5      (       d  [        S5      eU R	                  XUS9$ U
R
                  R                  XxS9nU$ )Nr  r  Tr  )r   r  r  r  )r  r  r>   r   r  r  r   )r,   r  r   r   r   r   r   r  r  r   r   r   s               r6   list_batchesOpenAIBatchesAPI.list_batches/  s     ?C>T>T#% ?U ?
  |  m[99 r  %%+ &   !((--E-Gr9   rL   rV   r  rq   r   NNN) rX   rY   rZ   r[   r\   r7   r	   r   r
   r  r   r  r   r   r   r   r  CreateBatchRequestBatchr  r   r   r  RetrieveBatchRequestr  r  CancelBatchRequestr  r  r  r^   r   r   s   @r6   r  r    sK    8<# 3- uemm+,	
 c] sm v{234  
%+,	-<- # 
	" 8<"" ." #	"
 3-" uemm+," c]" sm" v{234" 
uiS%00	1"H1 # 
	$ $("" 2" #	"
 3-" uemm+," c]" sm"  "Z $( . #	
 3- uemm+, c] sm  <  $#	" } }	$  $##'## ## 3-	#
 uemm+,# c]# sm# }# }#  # #r9   r  c            $         ^  \ rS rSrSAU 4S jjr SBS\\   S\\   S\\\	R                  4   S\\   S	\\   S
\\   S\4S jjr SBS\\   S\\   S\\\	R                  4   S\\   S	\\   S
\\   S\4S jjrS\\   S\\   S\\\	R                  4   S\\   S	\\   S
\\   S\\   4S jr\S\\   S\\   S\\\	R                  4   S\\   S	\\   S
\\   S\S   S\SS\\   4   4S j5       r\S\\   S\\   S\\\	R                  4   S\\   S	\\   S
\\   S\\S      S\\   4S j5       r  SCS\\   S\\   S\\\	R                  4   S\\   S	\\   4
S jjrS\\   S\\   S\\\	R                  4   S\\   S	\\   S
\\   S\S\4S jr  SCS\\   S\\   S\\\	R                  4   S\\   S	\\   S\4S jjrS\\   S\\   S\\\	R                  4   S\\   S	\\   S
\\   S\S\4S jr  SCS\\   S\\   S\\\	R                  4   S\\   S	\\   S\4S jjr SBS\S\S\\   S\\   S\\\	R                  4   S\\   S	\\   S
\\   S\4S jjr\S\S\S\\   S\\   S\\\	R                  4   S\\   S	\\   S
\\   S\S   S\SS\4   4S j5       r \S\S\S\\   S\\   S\\\	R                  4   S\\   S	\\   S
\\   S\\S      S\4S j5       r   SCS\S\S\\   S\\   S\\\	R                  4   S\\   S	\\   S\\!   4S  jjr  SBS\S\\   S\\   S\\\	R                  4   S\\   S	\\   S
\\   S\\   4S! jjr"\S\S\\   S\\   S\\\	R                  4   S\\   S	\\   S
\\   S"\S   S\SS\\   4   4S# j5       r#\S\S\\   S\\   S\\\	R                  4   S\\   S	\\   S
\\   S"\\S      S\\   4S$ j5       r#  SCS\S\\   S\\   S\\\	R                  4   S\\   S	\\   4S% jjr#S&\\   S\\   S\\   S\\\	R                  4   S\\   S	\\   S
\\   S'\\$\%      S\&4S( jr'\S&\\   S\\   S\\   S\\\	R                  4   S\\   S	\\   S'\\$\%      S
\\   S)\S   S\SS\&4   4S* j5       r(\S&\\   S\\   S\\   S\\\	R                  4   S\\   S	\\   S'\\$\%      S
\\   S)\\S      S\&4S+ j5       r(  SCS&\\   S\\   S\\   S\\\	R                  4   S\\   S	\\   S'\\$\%      4S, jjr(S\S\\   S\\   S\\\	R                  4   S\\   S	\\   S
\\   S\&4S- jr)\S\S\\   S\\   S\\\	R                  4   S\\   S	\\   S
\\   S.\S   S\SS\&4   4S/ j5       r*\S\S\\   S\\   S\\\	R                  4   S\\   S	\\   S
\\   S.\\S      S\&4S0 j5       r*  SCS\S\\   S\\   S\\\	R                  4   S\\   S	\\   4S1 jjr*S2 r+S\S\S3\\   S4\\   S&\\,   S5\\   S6\\!   S7\\$\-      S\\   S\\   S\\\	R                  4   S\\   S	\\   S
\\   S\.4S8 jr/S
\S\S\S3\\   S4\\   S&\\,   S5\\   S7\\$\-      S9\\0   S\1\2   4S: jr3S
\S\S\S3\\   S4\\   S&\\,   S5\\   S7\\$\-      S9\\0   S\4\0   4S; jr5\S\S\S3\\   S4\\   S&\\,   S5\\   S6\\!   S7\\$\-      S\\   S\\   S\\\	R                  4   S\\   S	\\   S<\S   S9\\0   S\SS\.4   4 S= j5       r6\S\S\S3\\   S4\\   S&\\,   S5\\   S6\\!   S7\\$\-      S\\   S\\   S\\\	R                  4   S\\   S	\\   S<\\S      S9\\0   S\.4 S> j5       r6   SDS\S\S3\\   S4\\   S&\\,   S5\\   S6\\!   S7\\$\-      S\\   S\\   S\\\	R                  4   S\\   S	\\   S9\\0   4S? jjr6S@r7U =r8$ )EOpenAIAssistantsAPIiU  rW   Nc                 "   > [         TU ]  5         g rq   r   r   s    r6   r7   OpenAIAssistantsAPI.__init__V  r   r9   r   r   r   r   r   r   c                     [        5       nUcN  0 nUR                  5        H+  u  pU	S:X  d  U	S:X  a  M  U	S:X  a	  U
b  XS'   M"  U
c  M'  XU	'   M-     [        S0 UD6nU$ UnU$ Nr,   r   r   r   rL   )r.   r0   r   r,   r   r   r   r   r   r   r  r   rE   rF   r   s               r6   r  %OpenAIAssistantsAPI.get_openai_clientY  s{     >D%++-;!x-*_'($]G . #NTNM  #Mr9   c                     [        5       nUcN  0 nUR                  5        H+  u  pU	S:X  d  U	S:X  a  M  U	S:X  a	  U
b  XS'   M"  U
c  M'  XU	'   M-     [        S0 UD6nU$ UnU$ r  )r.   r0   r   r  s               r6   async_get_openai_client+OpenAIAssistantsAPI.async_get_openai_clientr  s}     >D%++-;!x-*_'($]G . (/$/M  #Mr9   c           	         #    U R                  UUUUUUS9nUR                  R                  R                  5       I S h  vN nU$  N7f)Nr   r   r   r   r   r   )r   beta
assistantsr   )	r,   r   r   r   r   r   r   r   r   s	            r6   async_get_assistants(OpenAIAssistantsAPI.async_get_assistants  sW      44#% 5 
 '++66;;== >s   <AAAaget_assistantsTc                     g rq   rL   r,   r   r   r   r   r   r   r  s           r6   get_assistants"OpenAIAssistantsAPI.get_assistants       	r9   Fc                     g rq   rL   r
  s           r6   r  r    r  r9   c           	          Ub  USL a  U R                  UUUUUUS9$ U R                  UUUUUUS9nUR                  R                  R	                  5       n	U	$ )NTr  )r  r  r  r  r   )
r,   r   r   r   r   r   r   r  r   r   s
             r6   r  r    s     &?d+B,,!') -   ..#% / 
 !%%00557r9   create_assistant_datac           	         #    U R                  UUUUUUS9nUR                  R                  R                  " S0 UD6I S h  vN n	U	$  N7f)Nr  rL   )r   r  r  r   )
r,   r   r   r   r   r   r   r  r   r   s
             r6   async_create_assistants+OpenAIAssistantsAPI.async_create_assistants  s^      44#% 5 
 '++66==V@UVV Ws   >A	 AA	c	           
          Ub  USL a  U R                  UUUUUUUS9$ U R                  UUUUUUS9n	U	R                  R                  R                  " S0 UD6n
U
$ )NT)r   r   r   r   r   r   r  r  rL   )r  r  r  r  r   )r,   r   r   r   r   r   r  r   r  r   r   s              r6   create_assistants%OpenAIAssistantsAPI.create_assistants  s     #.3Jd3R//!')&; 0   ..#% / 
 !%%0077P:OPr9   assistant_idc           	         #    U R                  UUUUUUS9nUR                  R                  R                  US9I S h  vN n	U	$  N7f)Nr  r  )r   r  r  r  )
r,   r   r   r   r   r   r   r  r   r   s
             r6   async_delete_assistant*OpenAIAssistantsAPI.async_delete_assistant  s]      44#% 5 
 '++66==<=XX Ys   ;AAAc	           
          Ub  USL a  U R                  UUUUUUUS9$ U R                  UUUUUUS9n	U	R                  R                  R	                  US9n
U
$ )NT)r   r   r   r   r   r   r  r  r  )r  r  r  r  r  )r,   r   r   r   r   r   r  r   async_delete_assistantsr   r   s              r6   delete_assistant$OpenAIAssistantsAPI.delete_assistant2  s     #.3Jd3R..!')) /   ..#% / 
 !%%0077\7Rr9   	thread_idmessage_datac	           	      B  #    U R                  UUUUUUS9n	U	R                  R                  R                  R                  " U40 UD6I S h  vN n
S n[        U
SS 5      c"  SU
l        [        S0 U
R                  5       D6nU$ [        S0 U
R                  5       D6nU$  NQ7f)Nr  status	completedrL   )	r   r  threadsr   r   r*  r#  OpenAIMessager]   )r,   r   r!  r   r   r   r   r   r   r   thread_messageresponse_objs               r6   a_add_message!OpenAIAssistantsAPI.a_add_messageU  s      44#% 5 
 /<.@.@.H.H.Q.Q.X.X/
%/
 )
 15>8T2:$/N!(A>+>+>+@AL  )A>+>+>+@AL)
s   A	BBABr)  c
                     g rq   rL   
r,   r   r!  r   r   r   r   r   r   r)  s
             r6   add_messageOpenAIAssistantsAPI.add_messagew       	r9   c
                     g rq   rL   r,  s
             r6   r-  r.    r/  r9   c
                 b   U	b  U	SL a  U R                  UUUUUUUUS9$ U R                  UUUUUUS9n
U
R                  R                  R                  R
                  " U40 UD6nS n[        USS 5      c"  SUl        [        S0 UR                  5       D6nU$ [        S0 UR                  5       D6nU$ )NT)r   r!  r   r   r   r   r   r   r  r#  r$  rL   )
r)  r  r  r%  r   r   r*  r#  r&  r]   )r,   r   r!  r   r   r   r   r   r   r)  r   r'  r(  s                r6   r-  r.    s     $$)>%%#)!') & 	 	 ..#% / 
 )6(:(:(B(B(K(K(R(R)
%)
 15>8T2:$/N!(A>+>+>+@AL  )A>+>+>+@ALr9   c           	         #    U R                  UUUUUUS9nUR                  R                  R                  R	                  US9I S h  vN n	U	$  N7f)Nr  r   )r   r  r%  r   r   
r,   r   r   r   r   r   r   r   r   r   s
             r6   async_get_messages&OpenAIAssistantsAPI.async_get_messages  sc      44#% 5 
 '++33<<AAIAVV Ws   AAAAaget_messagesc	                     g rq   rL   	r,   r   r   r   r   r   r   r   r7  s	            r6   get_messages OpenAIAssistantsAPI.get_messages       	r9   c	                     g rq   rL   r9  s	            r6   r:  r;    r<  r9   c	           
          Ub  USL a  U R                  UUUUUUUS9$ U R                  UUUUUUS9n	U	R                  R                  R                  R                  US9n
U
$ )NTr   r   r   r   r   r   r   r  r3  )r5  r  r  r%  r   r   )r,   r   r   r   r   r   r   r   r7  r   r   s              r6   r:  r;    s     $$)>**#!') +   ..#% / 
 !%%--66;;i;Pr9   metadatar   c	           	         #    U R                  UUUUUUS9n	0 n
Ub  XS'   Ub  XS'   U	R                  R                  R                  " S0 U
D6I S h  vN n[	        S0 UR                  5       D6$  N7f)Nr  r   r@  rL   )r   r  r%  r   Threadr]   )r,   r@  r   r   r   r   r   r   r   r   r   message_threads               r6   async_create_thread'OpenAIAssistantsAPI.async_create_thread	  s      44#% 5 
 '',1199@@H4HH.++-.. Is   AA0A.A0acreate_threadc
                     g rq   rL   
r,   r@  r   r   r   r   r   r   r   rF  s
             r6   create_thread!OpenAIAssistantsAPI.create_thread>	  r/  r9   c
                     g rq   rL   rH  s
             r6   rI  rJ  M	  r/  r9   c
                    U	b  U	SL a  U R                  UUUUUUUUS9$ U R                  UUUUUUS9n
0 nUb  X{S'   Ub  XS'   U
R                  R                  R                  " S0 UD6n[        S0 UR                  5       D6$ )z
Here's an example:
```
from litellm.llms.openai.openai import OpenAIAssistantsAPI, MessageData

# create thread
message: MessageData = {"role": "user", "content": "Hey, how's it going?"}
openai_api.create_thread(messages=[message])
```
T)r@  r   r   r   r   r   r   r   r  r   r@  rL   )rD  r  r  r%  r   rB  r]   )r,   r@  r   r   r   r   r   r   r   rF  r   r   rC  s                r6   rI  rJ  ^	  s    , %.D*@++!!')! , 	 	 ..#% / 
 ''&++33::BTB.++-..r9   c           	         #    U R                  UUUUUUS9nUR                  R                  R                  US9I S h  vN n	[	        S0 U	R                  5       D6$  N7f)Nr  r3  rL   )r   r  r%  r  rB  r]   r4  s
             r6   async_get_thread$OpenAIAssistantsAPI.async_get_thread	  sl      44#% 5 
 '++33<<y<QQ((( Rs   ;AAAaget_threadc	                     g rq   rL   	r,   r   r   r   r   r   r   r   rP  s	            r6   
get_threadOpenAIAssistantsAPI.get_thread	  r<  r9   c	                     g rq   rL   rR  s	            r6   rS  rT  	  r<  r9   c	           
          Ub  USL a  U R                  UUUUUUUS9$ U R                  UUUUUUS9n	U	R                  R                  R	                  US9n
[        S0 U
R                  5       D6$ )NTr?  r  r3  rL   )rN  r  r  r%  r  rB  r]   )r,   r   r   r   r   r   r   r   rP  r   r   s              r6   rS  rT  	  s     "{d':((#!') )   ..#% / 
 !%%--666K(((r9   c                     g rq   rL   rM   s    r6   delete_thread!OpenAIAssistantsAPI.delete_thread	  s    r9   additional_instructionsinstructionsrt   r   r  c           
         #    U R                  U	U
UUUUS9nUR                  R                  R                  R	                  UUUUUUUS9I S h  vN nU$  N7f)Nr  r   r  rZ  r[  r@  rt   r  )r   r  r%  runscreate_and_poll)r,   r   r  rZ  r[  r@  rt   r   r  r   r   r   r   r   r   r   r   s                    r6   arun_threadOpenAIAssistantsAPI.arun_thread	  s~     " 44#% 5 
 '++3388HH%$;% I 
 
 
s   AAAAevent_handlerc
                     UUUUUUUS.n
U	b  XS'   UR                   R                  R                  R                  " S0 U
D6$ Nr]  rb  rL   r  r%  r^  r   r,   r   r   r  rZ  r[  r@  rt   r  rb  r   s              r6   async_run_thread_stream+OpenAIAssistantsAPI.async_run_thread_stream
  T     #('>( 
 $$1!{{""''..666r9   c
                     UUUUUUUS.n
U	b  XS'   UR                   R                  R                  R                  " S0 U
D6$ rd  re  rf  s              r6   run_thread_stream%OpenAIAssistantsAPI.run_thread_stream/
  ri  r9   r`  c                     g rq   rL   r,   r   r  rZ  r[  r@  rt   r   r  r   r   r   r   r   r   r`  rb  s                    r6   
run_threadOpenAIAssistantsAPI.run_threadJ
      ( 	r9   c                     g rq   rL   rn  s                    r6   ro  rp  `
  rq  r9   c                    UbT  USL aO  Ub0  USL a+  U R                  U	U
UUUUS9nU R                  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S9$ U R                  U	U
UUUUS9nUb  USL a  U R	                  UUUUUUUUUS9	$ UR
                  R                  R                  R                  UUUUUUUS9nU$ )NTr  )	r   r   r  rZ  r[  r@  rt   r  rb  )r   r  rZ  r[  r@  rt   r   r  r   r   r   r   r   r   r]  )	r   rg  r`  r  rk  r  r%  r^  r_  )r,   r   r  rZ  r[  r@  rt   r   r  r   r   r   r   r   r   r`  rb  _clientr   r   s                       r6   ro  rp  x
  sm   & "{d':!fn66#%# +!-! 7  33"'!-,C!-%"/ 4 
 
 ###)(?)!!') $    ..#% / 
 &D.))$#)(?)!+ * 
 
 !%%--22BB%$;% C 
 r9   rL   rV   rq   r   r  )9rX   rY   rZ   r[   r7   r	   r   r
   r  r   r  r   r   r  r   r   AsyncCursorPage	Assistantr  r   r   r   r  SyncCursorPager]   r  r  r   r  r  r&  r)  r-  r   r5  r:  r   OpenAICreateThreadParamsMessagerB  rD  rI  rN  rS  rX  objectAssistantToolParamRunr`  AssistantEventHandlerAsyncAssistantStreamManagerAsyncAssistantEventHandlerrg  AssistantStreamManagerrk  ro  r^   r   r   s   @r6   r  r  U  s    $(# 3- uemm+,	
 c] sm   
@ )-# 3- uemm+,	
 c] sm % 
6# 3- uemm+,	
 c] sm % 
	#0 
#
 3-
 uemm+,	

 c]
 sm
 %
 !
 
4y99	:
 
 
#
 3-
 uemm+,	

 c]
 sm
  
 "'%.1
 
		"
 
* # 3- uemm+,	
 c] smB# 3- uemm+,	
 c] sm %  $ 
>  $# 3- uemm+,	
 c] sm  $D# 3- uemm+,	
 c] sm %  
>  $# 3- uemm+,	
 c] sm X )-  #	
 3- uemm+, c] sm % 
D   #	
 3- uemm+, c] sm % t} 
4},	-    #	
 3- uemm+, c] sm    / 
 2 (,** * #	*
 3-* uemm+,* c]* sm*  ~*h )- # 3-	
 uemm+, c] sm % 
	'2  # 3-	
 uemm+, c] sm % t} 
4}==	>   # 3-	
 uemm+, c] sm    / 
	& .    #  3-	 
 uemm+,  c]  sm H/4./ #/ 3-	/
 uemm+,/ c]/ sm/ %/ 8$CDE/ 
/@ 4. # 3-	
 uemm+, c] sm 8$CDE %   
4v%	&  4. # 3-	
 uemm+, c] sm 8$CDE   !0 
 2 2/4.2/ #2/ 3-	2/
 uemm+,2/ c]2/ sm2/ 8$CDE2/h)) #) 3-	)
 uemm+,) c]) sm) %) 
)2  # 3-	
 uemm+, c] sm % T] 
4v%	&   # 3-	
 uemm+, c] sm   gen- 
 .  ) ) # ) 3-	 )
 uemm+, ) c] ) sm )D
$$ $ "*#	$
 sm$ 6"$ }$ $ !345$ #$ 3-$ uemm+,$ c]$ sm$ %$  
!$L77 7 	7
 "*#7 sm7 6"7 }7 !3457   567 
%%?	@7277 7 	7
 "*#7 sm7 6"7 }7 !3457   567 
  5	676   "*#	
 sm 6" }  !345 # 3- uemm+, c] sm  T]!"   56#$ 
4s?	#% *   "*#	
 sm 6" }  !345 # 3- uemm+, c] sm  gen-!"   56#$ 
% L 9=#XX X "*#	X
 smX 6"X }X X !345X #X 3-X uemm+,X c]X smX"   56#X Xr9   r  )=r   r}  r?   typingr   r   r   r   r   r   r	   r
   r   r   r   r   r   #openai.types.beta.assistant_deletedr   openai.types.file_deletedr   pydanticr   typing_extensionsr   rw   r   litellm._loggingr   *litellm.litellm_core_utils.litellm_loggingr   r   )litellm.llms.base_llm.chat.transformationr   r   (litellm.llms.bedrock.chat.invoke_handlerr   &litellm.llms.custom_httpx.http_handlerr   litellm.types.utilsr   r   r   litellm.utilsr   r   r   types.llms.openaibaser"   chat.gpt_transformationr$   common_utilsr%   r&   r(   r`   r   r  r  r  rL   r9   r6   <module>r     s     	 
 
 
   & @ 1  &    + S R I Q O O  #  4 R( (Vs
: s
l]7 ]@#WW WtKw K\{' {r9   