
    gׁ                       d dl Z d dlZd dlmZmZmZmZmZmZm	Z	m
Z
mZmZmZ d dlZd dlZd dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlZd dlmZ d d	lmZ d d
lmZ  d dl!m"Z" d dl#m$Z$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0m1Z1m2Z2 ddl3 ddl4m5Z5 ddl6m7Z7m8Z8  G d d      Z9 G d de$      Z: G d de"      Z; G d de5      Z< G d d e5      Z= G d! d"e5      Z> G d# d$e5      Z?y)%    N)AnyAsyncIteratorCallable	CoroutineIterableIteratorListLiteralOptionalUnioncast)AsyncOpenAIOpenAI)AssistantDeleted)FileDeleted)	BaseModel)overload)LlmProviders)verbose_logger)Logging)BaseModelResponseIterator)
BaseConfigBaseLLMException)MockResponseIterator)_DEFAULT_TTL_FOR_HTTPX_CLIENTS)EmbeddingResponseImageResponseModelResponseModelResponseStream)CustomStreamWrapperProviderConfigManager convert_to_model_response_object   )*   )BaseLLM   )OpenAIError+drop_params_from_unprocessable_entity_errorc                   B    e Zd ZdZ	 	 d	dZed        Zd ZdedefdZ	y)
MistralEmbeddingConfigzK
    Reference: https://docs.mistral.ai/api/#operation/createEmbedding
    Nc                     t               j                         }|j                         D ]%  \  }}|dk7  s|t        | j                  ||       ' y Nselflocalscopyitemssetattr	__class__)r.   locals_keyvalues       O/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/openai/openai.py__init__zMistralEmbeddingConfig.__init__7   sA     (--/!--/JCf}!2U3 *    c                     | j                   j                         D ci c]O  \  }}|j                  d      s9t        |t        j
                  t        j                  t        t        f      s|||Q c}}S c c}}w )N__)	__dict__r2   
startswith
isinstancetypesFunctionTypeBuiltinFunctionTypeclassmethodstaticmethod)clskvs      r8   
get_configz!MistralEmbeddingConfig.get_config?   sy     **,
,1<<%&&-- 	  qD,
 	
 
s   AA6c                     dgS Nencoding_format r.   s    r8   get_supported_openai_paramsz2MistralEmbeddingConfig.get_supported_openai_paramsQ   s    
 	
r:   non_default_paramsoptional_paramsc                 L    |j                         D ]  \  }}|dk(  s||d<    |S rJ   )r2   )r.   rO   rP   paramr7   s        r8   map_openai_paramsz(MistralEmbeddingConfig.map_openai_paramsV   s5    .446LE5))5: 12 7 r:   returnN)
__name__
__module____qualname____doc__r9   rC   rH   rN   dictrS   rL   r:   r8   r+   r+   2   s@    4	4 
 
"

D 4 r:   r+   c                   ~    e Zd ZU dZdZee   ed<   dZee	e
ef      ed<   dZee   ed<   dZee   ed<   dZee   ed<   dZee   ed<   dZee   ed	<   dZee   ed
<   dZee	e
ef      ed<   dZee   ed<   dZee   ed<   dZee   ed<   	 	 	 	 	 	 	 	 	 	 	 	 d.dee   dee	e
ef      dee   dee   dee   dee   d	ee   d
ee   dee	e
ef      dee   dee   dee   ddfdZe fd       Zde
defdZdedede
defdZdee   de
dee   fdZdedede
dedef
dZ de
dede	ee!jD                  f   de#fdZ$de
dee   dedededefd Z%	 	 d/de
d!e!jL                  d"e'd#e(d$edee   deded%e)d&ee
   d'ee   de'fd(Z*	 	 d/dede
dee   ded&ee
   d)ee
   defd*Z+	 d0d+e	e,e
   e-e
   e'f   d,ed'ee   de)fd-Z. xZ/S )1OpenAIConfiga?  
    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_formatrU   c                     t               j                         }|j                         D ]%  \  }}|dk7  s|t        | j                  ||       ' y r-   r/   )r.   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   r5   r6   r7   s                   r8   r9   zOpenAIConfig.__init__   sA     (--/!--/JCf}!2U3 *r:   c                      t         |          S N)superrH   )rE   r4   s    r8   rH   zOpenAIConfig.get_config   s    w!##r:   modelc                 B   t         j                  j                  |      r t         j                  j                  |      S t         j                  j                  |      r t         j                  j                  |      S t         j                  j                  |      S )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
        rm   )litellmopenAIO1Configis_model_o1_reasoning_modelrN   openAIGPTAudioConfigis_model_gpt_audio_modelopenAIGPTConfig)r.   rm   s     r8   rN   z(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Sr:   rO   rP   c                 l    | j                  |      }|j                         D ]  \  }}||v s|||<    |S rk   )rN   r2   )r.   rO   rP   rm   supported_openai_paramsrR   r7   s          r8   _map_openai_paramszOpenAIConfig._map_openai_params   sG     #'"B"B5"I.446LE5//).& 7 r:   messagesc                     |S rk   rL   )r.   ry   rm   s      r8   _transform_messagesz OpenAIConfig._transform_messages   s	     r:   drop_paramsc                 T   t         j                  j                  |      r#t         j                  j                  ||||      S t         j                  j                  |      r#t         j                  j                  ||||      S t         j                  j                  ||||      S ) ro   )rO   rP   rm   r|   )rp   rq   rr   rS   rs   rt   ru   )r.   rO   rP   rm   r|   s        r8   rS   zOpenAIConfig.map_openai_params   s     !!==E=J));;#5 /'	 <   ))BBBO//AA#5 /'	 B   &&881+#	 9 
 	
r:   error_messagestatus_codeheadersc                     t        |||      S )Nr   messager   )r(   )r.   r   r   r   s       r8   get_error_classzOpenAIConfig.get_error_class   s     #!
 	
r:   litellm_paramsc                 6    | j                  ||      }||d|S )N)ry   rm   )rm   ry   )r{   )r.   rm   ry   rP   r   r   s         r8   transform_requestzOpenAIConfig.transform_request   s)     ++XU+KHHHHr:   raw_responsemodel_responselogging_objrequest_dataencodingapi_key	json_modec                    |j                  |j                         |j                  |j                  d<   t	        t
        t        |j                         |d|j                  it        |j                                    }|S )N)original_responseresponse_headersr   response_objectmodel_response_objecthidden_params_response_headers)		post_calltextr   model_call_detailsr   r   r"   jsonrZ   )r.   rm   r   r   r   r   ry   rP   r   r   r   r   final_response_objs                r8   transform_responsezOpenAIConfig.transform_response   s{     	0A0AB=I=Q=Q&&'9:!, , 1 1 3&4(,*>*>?"&|';';"<	
 "!r:   api_basec                     dd| i|S )NAuthorizationBearer rL   )r.   r   rm   ry   rP   r   r   s          r8   validate_environmentz!OpenAIConfig.validate_environment  s"     wwi0

 	
r:   streaming_responsesync_streamc                     t        |||      S )N)r   r   r   )$OpenAIChatCompletionResponseIterator)r.   r   r   r   s       r8   get_model_response_iteratorz(OpenAIConfig.get_model_response_iterator   s     41#
 	
r:   )NNNNNNNNNNNNNN)F)0rV   rW   rX   rY   r]   r   int__annotations__r^   r   strrZ   r_   listr`   ra   rb   rc   rd   re   rf   rg   rh   r9   rC   rH   rN   rx   r	   AllMessageValuesr{   boolrS   httpxHeadersr   r   r   Responser   LiteLLMLoggingObjr   r   r   r   r   r   __classcell__r4   s   @r8   r\   r\   ]   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>" 
"F "&"&

 
 '(	

 
 #
 3-
 

$ %*	

!(3-s1C]"RS

 

 D>	


 


r:   r\   c                       e Zd ZdedefdZy)r   chunkrU   c                 @    	 t        di |S # t        $ r}|d}~ww xY w)a  
        {'choices': [{'delta': {'content': '', 'role': 'assistant'}, 'finish_reason': None, 'index': 0, 'logprobs': None}], 'created': 1735763082, 'id': 'a83a2b0fbfaf4aab9c2c93cb8ba346d7', 'model': 'mistral-large', 'object': 'chat.completion.chunk'}
        NrL   )r   	Exception)r.   r   es      r8   chunk_parserz1OpenAIChatCompletionResponseIterator.chunk_parser.  s*    	&/// 	G	s   
 	N)rV   rW   rX   rZ   r   r   rL   r:   r8   r   r   -  s    $ +> r:   r   c            (       >    e Zd Zd7 fdZddd ej
                  d      dddfdedee   dee   dee   d	e	e
ej
                  f   d
ee   dee   dee	eef      fdZdeded	e	e
ej
                  f   deeef   fdZdeded	e	e
ej
                  f   deeef   fdZ	 d8dedededee   def
dZdddddddddddi ddddfded	e	e
ej
                  f   dedededee   dee   dee   dee   dee   dee   dee   dee   d ed!ee   d"edee   d#ee   d$ee   f& fd%Z	 	 	 	 	 	 	 	 	 	 d9dedededed	e	e
ej
                  f   dee   dee   dee   dee   d$ee   dee   d&efd'Z	 	 	 	 	 	 	 	 d:d	e	e
ej
                  f   dededee   dee   dee   dee   dee   fd(Z	 	 	 	 	 	 	 	 	 d;d	e	e
ej
                  f   dedededee   dee   dee   dee   d$ee   dee   fd)Zdeded	e	e
ej
                  f   fd*Zdeded	e	e
ej
                  f   fd+Z 	 	 	 	 d<d,edede!d	e
dedee   dee   dee   fd-Z"	 	 	 	 	 d=ded,ed	e
de!dedee   dee   d
ee   de!f fd.Z#	 	 	 	 d<d/ededed	e
dedee   dee   fd0Z$	 	 	 	 	 d=dee   d/ed	e
dededee   dee   dee%   de%fd1Z&	 	 d>ded,ed2ededee   dee   dee   d3ee   d
ed	e	e
ej
                  f   d4ee   de'fd5Z(	 d8ded,ed2ededee   dee   dee   d3ee   d
ed	e	e
ej
                  f   de'fd6Z) xZ*S )?OpenAIChatCompletionrU   Nc                 "    t         |           y rk   rl   r9   r.   r4   s    r8   r9   zOpenAIChatCompletion.__init__:      r:   r%   is_asyncr   r   api_versiontimeoutmax_retriesorganizationclientc	                 &   t               }	|t        |t              st        ddj	                  |            d }
|3t        j                  |j                               }|j                         }
d|
 d| d| d| d| d	| }t        j                  j                  |      }|r|S |r t        ||t        j                  |||
      }nt        ||t        j                  |||
      }t        j                  j!                  ||t"               |S |S )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   )r6   r7   ttl)r0   r?   r   r(   formathashlibsha256encode	hexdigestrp   in_memory_llm_clients_cache	get_cacher   aclient_sessionr   client_session	set_cacher   )r.   r   r   r   r   r   r   r   r   argshashed_api_keyhash_object
_cache_key_cached_client_new_clients                  r8   _get_openai_clientz'OpenAIChatCompletion._get_openai_client=  sW    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 : 
  Mr:   openai_aclientdatac                   K   	  |j                   j                  j                  j                  di |d|i d{   }t	        |d      rt        |j                        }ni }|j                         }||fS 7 <# t        $ r}|d}~ww xY ww)
        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hasattrrZ   r   parser   r.   r   r   r   r   r   responser   s           r8   #make_openai_chat_completion_requestz8OpenAIChatCompletion.make_openai_chat_completion_request}  s     	Nn))55GGNN $+   |Y/|334#))+HH$$  	G	s8   B7A: A8;A: 7B8A: :	B
BB

Bopenai_clientc           
      T   d}	  |j                   j                  j                  j                  di |d|i}t	        |d      rt        |j                        }ni }|j                         }||fS # t        $ r.}|%t        dj                  ||t        |                  |d}~ww xY w)r   Nr   r   z9error - {}, Received response - {}, Type of response - {}rL   )r   r   r   r   r   rZ   r   r   r   r   typer.   r   r   r   r   r   r   r   s           r8   (make_sync_openai_chat_completion_requestz=OpenAIChatCompletion.make_sync_openai_chat_completion_request  s     	R=--99KKRR  'L |Y/|334#))+HH$$ 	'OVV<l);  	s   A+A0 0	B'9)B""B'r   r   rm   stream_optionsc                 >    t        |      }t        ||d||      }|S )N)r   openai)completion_streamrm   custom_llm_providerr   r   )r   r    )r.   r   r   rm   r   r   r   s          r8   mock_streamingz#OpenAIChatCompletion.mock_streaming  s1     1I0/ (#)
 "!r:   Fr   rP   r   ry   print_verbosedynamic_paramsazure_ad_tokenacompletionr   custom_prompt_dictr   r|   c                 B	   t         )|           	 d}|j                         }|j                  dd       }|j                  dd      }d }|"| t	        j
                  |t        |            }|r|j                  |||      }|r||d<   ||t        dd	      t        |t              s't        |t        j                        st        dd
	      ||dk7  r| d| |_        t        d      D ]  }||j                  |||||xs i       }n"t!               j                  |||||xs i       }	 |j                  dd      }|du rI|du r$|du r | j#                  |||||
|	|||||||      c S | j%                  ||||||
|	|||||||      c S |du r#|du r| j'                  |||||
|	||||||      c S t        |t(              st        dd	      | j+                  d|	|
|||||      }|j-                  ||j.                  ||j0                  j2                  ||d       | j5                  |||      \  }}||j6                  d<   |j9                         } |j;                  ||	| d|i       t=        | ||      }!|du r%| j?                  tA        tB        |!      |||      c S |!c S  y # tD        jF                  $ r0}"tH        jJ                  du s|du rtM        |"|      }n|"Y d }"~"d }"~"wtN        $ r'}"| |dtQ        |"              dtQ        |"      v sd tQ        |"      v r|| |d!       g }#t        tS        |      d"z
        D ]_  }$|#jU                  ||$          ||$   d#   ||$d"z      d#   k(  s,||$   d#   d$k(  r|#jU                  d%d&d'       L|#jU                  d$d&d'       a |#jU                  |d(          |#}nNd)tQ        |"      v r||}#|#jU                  d$d&d'       |#}n&d*tQ        |"      v rtI        jV                  |+       n|"Y d }"~".d }"~"ww xY w# t        $ r}"|"d }"~"wtN        $ ra}"tY        |"d,d-      }%tY        |"d.d       }&tY        |"d/tQ        |"            }'tY        |"d0d       }(|&|(rtY        |(d.d       }&t        |%|'|&1      d }"~"ww xY w)2NFr   stream)rm   provider)rm   r   r   extra_headersr   zMissing model or messagesr   z,Timeout needs to be a float or httpx.Timeoutr   /r%   )rm   ry   rP   r   r   r   T)r   r   r   rm   r   r   r   r   r   r   r   r|   r   )r   r   rm   r   r   r   r   r   r   r   r   r   r|   fake_stream)r   r   r   rm   r   r   r   r   r   r   r   r   max retries must be an intr   r   r   r   r   r   r   r   r   r   r   complete_input_dictinputr   additional_argsr   r   r   r   r  r  r   r   r  )r   r   r   r   r   rm   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	assistant )r  contentz"Last message must have role `user`z3unknown field: parameter index is not a valid field)ry   r     r   r   r   r   )-rl   
completionr1   popr!   get_provider_chat_configr   should_fake_streamr(   r?   floatr   Timeoutrm   ranger   r\   async_streamingr   	streamingr   r   pre_callr   	_base_url_uri_referencer   r   
model_dumpr   r"   r   r   r   r   UnprocessableEntityErrorrp   r|   r)   r   r   lenappendremove_index_from_tool_callsgetattr)*r.   r   r   rP   r   r   rm   ry   r   r   r   r   r   r   r   	logger_fnr   r   r   r   r   r|   r   inference_paramsr   r   provider_config_r   r   r   r   stringified_responser   r   new_messagesir   error_headers
error_texterror_responser4   s*                                            r8   r  zOpenAIChatCompletion.completion  s   2 	Z	 %K.335-=-A-A $.N &6%9%9(E%JF48O".53D"7"P"P,7J*K# -@@5HQW A  4; 1} 0!c;VWWgu-j7 " #J 
 #.3F(3R*=)>aw'G$ #.*<<#!)(8'5 '2 = D (>;;#!)(8'5 '2 < DX "&((=!"<K"d*!T>kU.B#'#7#7,7(/%)&+)1(/,7(/'-,7-9,7/= $8 $   $(#3#3%)(/&+,7/=)1(/,7(/'-,7-9,7,7 $4 $    4K5,@#~~(3$+!%"'%-$+(3$+#)(3)5+9  .     *+s;"-,/9U#  150G0G%*$+%-(3$+(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1AB 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#/NRUS   <<hOC! D  	G 		!!]C8K#Ay$7M FCF3J$Q
D9N$ '	4 H'] 		s   D"P& 4;J1/P& 2J1P& $J17P& :C.J1(P& +J1,P& /P& 1P#%K/)P& /P#<B P=BPP& P##P& &	R/P11R=ARRr   c                 f  K   d }t        d      D ]  }	 | j                  d||||||	|
      }|j                  |d   |j                  dd|j                   i|j                  j
                  d|d       | j                  |||	       d {   \  }}|j                         }|j                  |d   ||d
|i       ||j                  d<   t        ||d|i|      }|du r%| j                  t        t        |      |||      c S |c S  y 7 # t        j                  $ r0}t         j"                  du s|du rt%        ||      }n|Y d }~>d }~wt&        $ rT}t)        |dd       }t)        |dd      }t)        |dd       }||rt)        |dd       }t+        |t-        |      |      d }~ww xY ww)Nr%   Tr  ry   r   r   r  r  r   r   r   r  r	  r   r   r   r
  r   r   r  r   )r  r   r  r   r  r  r   r  r   r   r"   r   r   r   r   r  rp   r|   r)   r   r#  r(   r   )r.   r   rm   r   r   r   r   r   r   r   r   r   r   r|   r   r   r   r'  r   r(  r   r   exception_responser   r+  s                            r8   r   z OpenAIChatCompletion.acompletion  s/    $ 
AF.2.E.E!#% +# +!-! /F 	/ $$z**22 ,w~7M7M6N-O$ %3$<$<$K$K'+/3% %  +/*R*R#1g +S + %! (0':':'<$%%z*#&:%:D$A	 &  FM../AB%E$8*8#,g"6&-	&" $&..!%m5G!H$/#'5	 /   *)q
:%8 22 &&$.+2EFq$ODG   	%,Q
D%A"%a< '9d ; (-?$+,>	4$PM! +SV] 	s[   F1A9DDA7DF1D	F1DF.#%EF1F.AF))F..F1c           
      \   d|d<   |||d<   | j                  d|||||
||	      }|j                  |d   |dd|j                   i|j                  j                  d|d	
       | j                  |||      \  }}||j                  d<   t        ||d||j                  dd       |      }|S )NTr   r   Fr  ry   r   r   r  r  r  r   r   r   rm   r   r   r   r   )	r   r  r   r  r  r   r   r    get)r.   r   r   r   rm   r   r   r   r   r   r   r   r   r   r   streamwrappers                   r8   r  zOpenAIChatCompletion.streaming  s    X%%3D!" $ 7 7##% !8 	!
 	z"+w}7L7L6M-NO)33BB$'+	 	 		
 !II' J 
 >E&&'9:+& (#88$4d;%
 r:   c                   K   d }d|d<   |||d<   t        d      D ]  }	 | j                  d|||||
||	      }|j                  |d   |||d|d       | j                  |||	       d {   \  }}||j                  d
<   t        ||d||j                  dd       |      }|c S  y 7 =# t        j                  $ r/}t        j                  du s|du rt        ||      }n|Y d }~d }~wt        $ r}t        |t              r|t        |dd       }t        |dd      }t        |dd       }||rt        |dd       }|2t!        |d      r&t        |t#        |       d|j$                   |      t'        |      j(                  dk(  r"t        dt'        |      j(                   |      t!        |d      r"t        t        |dd      t#        |      |      t        dt#        |       |      d }~ww xY ww)NTr   r   r%   r  ry   r  r  r/  r   r   r2  r   r   r  r   r   z

Original Response: r   ReadTimeouti  )r  r   r  r   r   r    r3  r   r  rp   r|   r)   r   r?   r(   r#  r   r   r   r   rV   )r.   r   r   rm   r   r   r   r   r   r   r   r   r|   r   r   r'  r   r4  r   r+  r   r-  s                         r8   r  z$OpenAIChatCompletion.async_streamingX  sh      X%%3D!"qAL.2.E.E!#% +# +!-! /F 	/ $$z*##*$,'+/3	% % 	 +/*R*R#1g +S + %! FM../AB 3&.(0 +#'88,<d#C&-! %$I 0% 22 &&$.+2EFq$ODG  " a-G '9d ;%a<!(J!= (^$+NIt$LM'GHf,E%$/#&q6(*A(-- Q -  Aw''=8)(+'+Aw'7'7&8$1 
 !M2)(/=#(F$'F$1  *(+Ax- A"sN   G<AB,,B*-8B,%G<*B,,G9?%C)$G<)G96C>G44G99G<c                    K   	  |j                   j                  j                  di |d|i d{   }t        |j                        }|j                         }||fS 7 -# t        $ r}|d}~ww xY ww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   rZ   r   r   r   r   s           r8   make_openai_embedding_requestz2OpenAIChatCompletion.make_openai_embedding_request  s     	!S!:!:!L!L!S!S "" '" L <//0G#))+HH$$  	G	s8   A4-A! A,A! A4A! !	A1*A,,A11A4c                     	  |j                   j                  j                  di |d|i}t        |j                        }|j                         }||fS # t        $ r}|d}~ww xY wr8  r9  r   s           r8   "make_sync_openai_embedding_requestz7OpenAIChatCompletion.make_sync_openai_embedding_request  su    		L=33EELL  'L <//0G#))+HH$$ 	G	s   AA 	A%A  A%r  c
           	        K   	 | j                  d||||	|      }
| j                  |
||       d {   \  }}||j                  d<   |j                         }|j	                  ||d|i|       t        ||d|      }|S 7 N# t        $ r'}|j	                  ||d|it        |             |d }~wt        $ r}|j	                  ||d|it        |             t        |d	d
      }t        |dd       }t        |dt        |            }t        |dd       }||rt        |dd       }t        |||      d }~ww xY ww)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   r;  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   r+  r,  r-  s                       r8   
aembeddingzOpenAIChatCompletion.aembedding  s    5	*.*A*A!' +B +N '+&H&H-D' 'I ' !GX BIK**+=>#+#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>.B BAB  D>B 	D;"B..D;:A<D66D;;D>c                    t         |           	 |}||d|}|xs t        j                  }t	        |t
              st        dd      |j                  ||||d       |
du r| j                  ||||||||	|	      S | j                  d	|||||	
      }d }| j                  |||      \  }}||j                  d<   |j                  ||d|i|       t        |j                         ||d      }|S # t        $ r}|d }~wt        $ ra}t!        |dd      }t!        |dd       }t!        |dt#        |            }t!        |dd       }||rt!        |dd       }t        |||      d }~ww xY w)N)rm   r  r   r  r   )r  r   r  T)	r   r  r   r   r   r   r   r   r   Fr?  r  r   r  r@  rA  )r   r   r   rB  r   r  r   r   r   r   )rl   rA  rp   DEFAULT_MAX_RETRIESr?   r   r(   r  rD  r   r=  r   r   r"   r  r   r#  r   )r.   rm   r  r   r   r   rP   r   r   r   rD  r   r   r   r   sync_embedding_responser   r   r   r+  r,  r-  r4   s                         r8   rA  zOpenAIChatCompletion.embedding*  s    	C	E"UFoFD%D)D)DKk3/!c;WXX  8<( S !  T! +#1%##! + ' 
 
 %)$;$;!' %< %M '+G/3/V/V+$ 0W 0,G,
 BIK**+=>!!!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.C5  A4C5 5	E->D  E-AE((E-promptc
                 \  K   d }
	 | j                  d||||	|      } |j                  j                  d	i |d|i d {   }
|
j                         }|j	                  ||d|i|       t        ||d      S 7 9# t        $ r$}|j	                  ||t        |             |d }~ww xY ww)
NTr?  r   r  r@  image_generationr   r   rB  )r  r   r   rL   )r   imagesgenerater  r   r"   r   r   )r.   rH  r   r   r   r   r   r   r   r   r   r   r(  r   s                 r8   aimage_generationz&OpenAIChatCompletion.aimage_generation~  s      	!44!' 5 N <^22;;TdTGTTH#+#6#6#8 !!!6 ="6	 "  4DXp~  Oa  b  b U  	!!"%a& " 
 G	s:   B,:A<  A:8A< 9B,:A< <	B)B$$B))B,c                 \   i }	 |}||d|}|j                  dd      }t        |t              st        dd      |
du r| j	                  ||||||||	|	      S | j                  d	|||||	
      }|j                  ||j                  dd|j                   i|j                  j                  d|d        |j                  j                  di |d|i}|j                         }|j                  ||d|i|       t        ||d      S # t        $ r'}|j                  ||d|it        |             |d }~wt         $ rh}|j                  ||d|it        |             t#        |d      r!t        t%        |dd      t        |            t        dt        |            d }~ww xY w)N)rm   rH  r   r%   r   r  r   T)	r   rH  r   r   r   r   r   r   r   Fr?  r   r   r  r  r   r  r@  rJ  rK  r   r  rL   )r  r?   r   r(   rN  r   r  r   r  r  rL  rM  r  r   r"   r   r   r   r#  )r.   rm   rH  r   rP   r   r   r   r   r   aimg_generationr   r   r   	_responser   r   s                    r8   rJ  z%OpenAIChatCompletion.image_generation  s4    B	CE"fHHD((=!4Kk3/!c;WXX$&--4T_p~  JR  \c  mt  }C  Q\-  ]  ]$($;$;!' %< %M   %-- /7=;P;P:Q1RS - 7 7 F F#'+/	! ! 	 6,,55NNgNI ++-H!!!6 ="*	 "  4Hdr  CU  V  V 		 !!!6 ="%a&	 "  G 	C!!!6 ="%a&	 "  q-(! '=# >A  "c3q6BB	Cs,   AD B1D 	F+"D77F+A#F&&F+voiceprojectaspeechc                    | |du r| j                  |||||||||	|
|      S | j                  d|||
|	|      } t        t        |      j                  j
                  j                  d|||d|}t        |j                        S )NT)rm   r  rR  rP   r   r   r   rS  r   r   r   Fr?  rm   rR  r  r   rL   )	async_audio_speechr   r   r   audiospeechr   HttpxBinaryResponseContentr   )r.   rm   r  rR  rP   r   r   r   rS  r   r   rT  r   r   r   s                  r8   audio_speechz!OpenAIChatCompletion.audio_speech  s      7d?** /!)' +   //# 0 
 C4.44;;BB 

 	
 *83D3DEEr:   c                    K   t        t        | j                  d|||
|	|            } |j                  j                  j
                  d|||d| d {   }t        |j                        S 7 w)NTr?  rV  rW  rL   )r   r   r   rY  rZ  r   r[  r   )r.   rm   r  rR  rP   r   r   r   rS  r   r   r   r   r   s                 r8   rX  z'OpenAIChatCompletion.async_audio_speech+  s      ##!' $ 

 ;,,33:: 

 	
 
 *83D3DEE
s   AA2A0A2rT   rk   )
NNNNNNNNNF)NNNNNNNN)	NNNNNNNNN)NNNN)NNNNNr   )+rV   rW   rX   r9   r   r  r   r   r   r   r  r   r   r   r   rZ   Tupler   r   r   r   r   r    r   r   r   r   r  r   r  r  r;  r=  r   rD  rA  rN  r   rJ  r[  r\  rX  r   r   s   @r8   r   r   8  sr    "&"&%)/<u}}T/B%&&*7;>> #> 3-	>
 c]> uemm+,> c]> sm> v{234>@#  uemm+,	
 
tY	6  uemm+,	
 
tY	L *."" '" 	"
 !" 
"2  $#',0!%"&%))-(,!"&#%&*-1&*-t%t uemm+,t 	t
 t t }t 4.t  )t #t 3-t c]t !t !t t" $#t$ !%t( sm)t* &c]+t, d^-tz "&"&%)&*&*)-!!\\ \ &	\
 '\ uemm+,\ #\ 3-\ c]\ sm\ d^\ !\  !\H "&"&%)&*)-7 uemm+,7 	7
 7 #7 3-7 c]7 sm7 !7~ "&"&%)&*&*)-auemm+,a a 	a
 'a #a 3-a c]a sma d^a !aH#  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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r:   r   c                   j    e Zd ZdZd fdZ	 	 ddee   dee   deee	j                  f   dee   dee   d	eeeef      d
edeeeef      fdZdededefdZ	 dd
edededee   deee	j                  f   dee   dee   d	eeeef      deeeeeef   f   fdZdededefdZ	 dd
edededee   deee	j                  f   dee   dee   d	eeeef      deeeeeef   f   fdZdededefdZ	 dd
edededee   deee	j                  f   dee   dee   d	eeeef      fdZdededefdZ	 dd
edededee   deee	j                  f   dee   dee   d	eeeef      fdZ	 ddedee   fdZ	 	 dd
ededee   deee	j                  f   dee   dee   dee   d	eeeef      fdZ  xZ!S )OpenAIFilesAPIz
    OpenAI methods to support for batches
    - create_file()
    - retrieve_file()
    - list_files()
    - delete_file()
    - file_content()
    - update_file()
    rU   c                 "    t         |           y rk   r   r   s    r8   r9   zOpenAIFilesAPI.__init__[  r   r:   r   r   r   r   r   r   	_is_asyncc                     t               }d }	|]i }
|j                         D ]*  \  }}|dk(  s
|dk(  s|dk(  r|dk(  r|||
d<   #|&||
|<   , |du rt        di |
}	|	S t        di |
}	|	S |}	|	S Nr.   r   rb  r   r   TrL   r0   r2   r   r   r.   r   r   r   r   r   r   rb  received_argsr   r   rF   rG   s                r8   get_openai_clientz OpenAIFilesAPI.get_openai_client^       >B>D%++-1;!x-13C*_'(D$]DG . D  + 3d 3 	 !'  #Mr:   create_file_datar   c                 Z   K    |j                   j                  di | d {   }|S 7 wNrL   )filesr   )r.   rj  r   r   s       r8   acreate_filezOpenAIFilesAPI.acreate_file|  s2     
 4,,33G6FGG H    +)+c	           	          | j                  |||||||      }	|	t        d      |du r.t        |	t              st        d      | j	                  ||	      S  |	j
                  j                  di |}
|
S )Nr   r   r   r   r   r   rb  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.)rj  r   rL   )rh  
ValueErrorr?   r   rn  rm  r   )r.   rb  rj  r   r   r   r   r   r   r   r   s              r8   create_filezOpenAIFilesAPI.create_file  s     ?C>T>T#% ?U ?
  |  m[9 r  $$!1 %   .=&&--A0@Ar:   file_content_requestc                    K    |j                   j                  di | d {   }t        |j                        S 7 w)NrW  rL   )rm  r  r[  r   )r.   rv  r   r   s       r8   afile_contentzOpenAIFilesAPI.afile_content  s>     
 5,,44L7KLL)83D3DEE Ms    ?=?c	           	      0   | j                  |||||||      }	|	t        d      |du r.t        |	t              st        d      | j	                  ||	      S  t        t        |	      j                  j                  di |}
t        |
j                        S )Nrq  rr  Trs  )rv  r   rW  rL   )rh  rt  r?   r   rx  r   r   rm  r  r[  r   )r.   rb  rv  r   r   r   r   r   r   r   r   s              r8   file_contentzOpenAIFilesAPI.file_content  s     ?C>T>T#% ?U ?
  |  m[9 r  %%%9+ &   =4.44<<T?ST)83D3DEEr:   file_idc                 Z   K   |j                   j                  |       d {   }|S 7 wNr{  )rm  retriever.   r{  r   r   s       r8   aretrieve_filezOpenAIFilesAPI.aretrieve_file  s/     
 ',,55g5FF Gro  c	           	          | j                  |||||||      }	|	t        d      |du r.t        |	t              st        d      | j	                  ||	      S |	j
                  j                  |      }
|
S Nrq  rr  Trs  )r{  r   r~  )rh  rt  r?   r   r  rm  r  r.   rb  r{  r   r   r   r   r   r   r   r   s              r8   retrieve_filezOpenAIFilesAPI.retrieve_file  s     ?C>T>T#% ?U ?
  |  m[9 r  &&+ '   !&&///@r:   c                 Z   K   |j                   j                  |       d {   }|S 7 wr}  )rm  deleter  s       r8   adelete_filezOpenAIFilesAPI.adelete_file  s/     
 ',,33G3DD Ero  c	           	          | j                  |||||||      }	|	t        d      |du r.t        |	t              st        d      | j	                  ||	      S |	j
                  j                  |      }
|
S r  )rh  rt  r?   r   r  rm  r  r  s              r8   delete_filezOpenAIFilesAPI.delete_file  s     ?C>T>T#% ?U ?
  |  m[9 r  $$+ %   !&&--g->r:   purposec                    K   t        |t              r&|j                  j                  |       d {   }|S |j                  j                          d {   }|S 7 *7 w)Nr  )r?   r   rm  r   )r.   r   r  r   s       r8   alist_fileszOpenAIFilesAPI.alist_files4  s]     
 gs#*0055g5FFH  +005577H G7s!   0A!A#A!AA!A!c	           	      D   | j                  |||||||      }	|	t        d      |du r.t        |	t              st        d      | j	                  ||	      S t        |t
              r|	j                  j                  |      }
|
S |	j                  j                         }
|
S )Nrq  rr  Trs  )r  r   r  )rh  rt  r?   r   r  r   rm  r   )r.   rb  r   r   r   r   r   r  r   r   r   s              r8   
list_fileszOpenAIFilesAPI.list_files?  s     ?C>T>T#% ?U ?
  |  m[9 r  ##+ $  
 gs#$**///@H  %**//1Hr:   rT   NFrk   r   )"rV   rW   rX   rY   r9   r   r   r   r  r   r  r   r   r   r   rh  CreateFileRequest
FileObjectrn  r   r   ru  FileContentRequestr[  rx  rz  r  r  r   r  r  r  r  r   r   s   @r8   r`  r`  P  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(r:   r`  c                       e Zd ZdZd fdZ	 	 ddee   dee   deee	j                  f   dee   dee   d	eeeef      d
edeeeef      fdZdededefdZ	 dd
ededee   dee   deee	j                  f   dee   dee   d	eeeef      deeeeeef   f   fdZdededefdZ	 dd
ededee   dee   deee	j                  f   dee   dee   d	ee   fdZdededefdZ	 dd
ededee   dee   deee	j                  f   dee   dee   d	ee   fdZ	 	 ddedee   dee   fdZ	 	 	 dd
edee   dee   deee	j                  f   dee   dee   dee   dee   d	ee   fdZ xZS )OpenAIBatchesAPIz
    OpenAI methods to support for batches
    - create_batch()
    - retrieve_batch()
    - cancel_batch()
    - list_batch()
    rU   c                 "    t         |           y rk   r   r   s    r8   r9   zOpenAIBatchesAPI.__init__s  r   r:   r   r   r   r   r   r   rb  c                     t               }d }	|]i }
|j                         D ]*  \  }}|dk(  s
|dk(  s|dk(  r|dk(  r|||
d<   #|&||
|<   , |du rt        di |
}	|	S t        di |
}	|	S |}	|	S rd  re  rf  s                r8   rh  z"OpenAIBatchesAPI.get_openai_clientv  ri  r:   create_batch_datar   c                 Z   K    |j                   j                  di | d {   }|S 7 wrl  )batchesr   )r.   r  r   r   s       r8   acreate_batchzOpenAIBatchesAPI.acreate_batch  s2     
 6..55J8IJJ Kro  c	           	          | j                  |||||||      }	|	t        d      |du r.t        |	t              st        d      | j	                  ||	      S  |	j
                  j                  di |}
|
S )Nrq  rr  Trs  )r  r   rL   )rh  rt  r?   r   r  r  r   )r.   rb  r  r   r   r   r   r   r   r   r   s              r8   create_batchzOpenAIBatchesAPI.create_batch  s     ?C>T>T#% ?U ?
  |  m[9 r  %%"3= &   0=((//D2CDr:   retrieve_batch_datac                    K   t        j                  d|        |j                  j                  di | d {   }|S 7 w)Nzretrieving batch, args= %srL   )r   debugr  r  )r.   r  r   r   s       r8   aretrieve_batchz OpenAIBatchesAPI.aretrieve_batch  sD     
 	9;NO7..77N:MNN O   6A?Ac	           	          | j                  |||||||      }	|	t        d      |du r.t        |	t              st        d      | j	                  ||	      S  |	j
                  j                  di |}
|
S )Nrq  rr  Trs  )r  r   rL   )rh  rt  r?   r   r  r  r  )r.   rb  r  r   r   r   r   r   r   r   r   s              r8   retrieve_batchzOpenAIBatchesAPI.retrieve_batch  s     ?C>T>T#% ?U ?
  |  m[9 r  ''$7} (   2=((11H4GHr:   cancel_batch_datac                    K   t        j                  d|        |j                  j                  di | d {   }|S 7 w)Nz async cancelling batch, args= %srL   )r   r  r  cancel)r.   r  r   r   s       r8   acancel_batchzOpenAIBatchesAPI.acancel_batch  sD     
 	?ARS5..55J8IJJ Kr  c	           	          | j                  |||||||      }	|	t        d      |du r.t        |	t              st        d      | j	                  ||	      S  |	j
                  j                  di |}
|
S )Nrq  rr  Trs  )r  r   rL   )rh  rt  r?   r   r  r  r  )r.   rb  r  r   r   r   r   r   r   r   r   s              r8   cancel_batchzOpenAIBatchesAPI.cancel_batch  s     ?C>T>T#% ?U ?
  |  m[9 r  %%"3= &   0=((//D2CDr:   afterlimitc                    K   t        j                  d||       |j                  j                  ||       d {   }|S 7 w)Nz%listing batches, after= %s, limit= %sr  r  )r   r  r  r   )r.   r   r  r  r   s        r8   alist_batcheszOpenAIBatchesAPI.alist_batches  sD      	DeUS&..33%u3MM Ns   8AAAc
           	          | j                  ||||||	|      }
|
t        d      |du r/t        |
t              st        d      | j	                  |
||      S |
j
                  j                  ||      }|S )Nrq  rr  Trs  )r   r  r  r  )rh  rt  r?   r   r  r  r   )r.   rb  r   r   r   r   r   r  r  r   r   r   s               r8   list_batcheszOpenAIBatchesAPI.list_batches%  s     ?C>T>T#% ?U ?
  |  m[9 r  %%+5 &   !((--E-Gr:   rT   r  rk   r   NNN)rV   rW   rX   rY   r9   r   r   r   r  r   r  r   r   r   r   rh  CreateBatchRequestBatchr  r   r   r  RetrieveBatchRequestr  r  CancelBatchRequestr  r  r  r  r   r   s   @r8   r  r  j  sh    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"  "H- # 
	$ $(## .# #	#
 3-# uemm+,# c]# sm#  #P  $#	" } }	$  $##'## ## 3-	#
 uemm+,# c]# sm# }# }#  #r:   r  c            $           e Zd ZdC fdZ	 dDdee   dee   deeej                  f   dee
   dee   d	ee   defd
Z	 dDdee   dee   deeej                  f   dee
   dee   d	ee   defdZ	 	 	 	 dEdee   dee   deeej                  f   dee
   dee   d	ee   dee   dee
   dee   dee   dee   fdZedee   dee   deeej                  f   dee
   dee   d	ee   ded   deddee   f   fd       Zedee   dee   deeej                  f   dee
   dee   d	ee   deed      dee   fd       Z	 	 	 	 	 	 dFdee   dee   deeej                  f   dee
   dee   dee   dee
   dee   dee   fdZdee   dee   deeej                  f   dee
   dee   d	ee   dedefdZ	 	 dGdee   dee   deeej                  f   dee
   dee   defdZdee   dee   deeej                  f   dee
   dee   d	ee   dedefdZ	 	 dGdee   dee   deeej                  f   dee
   dee   defdZ	 dDdededee   dee   deeej                  f   dee
   dee   d	ee   defdZedededee   dee   deeej                  f   dee
   dee   d	ee   d ed   deddef   fd!       Zedededee   dee   deeej                  f   dee
   dee   d	ee   d eed      defd"       Z	 	 dGdededee   dee   deeej                  f   dee
   dee   d ee    fd#Z	 dDdedee   dee   deeej                  f   dee
   dee   d	ee   dee   fd$Z!ededee   dee   deeej                  f   dee
   dee   d	ee   d%ed   deddee   f   fd&       Z"ededee   dee   deeej                  f   dee
   dee   d	ee   d%eed      dee   fd'       Z"	 	 dGdedee   dee   deeej                  f   dee
   dee   fd(Z"d)ee   dee   dee   deeej                  f   dee
   dee   d	ee   d*ee#e$      de%fd+Z&ed)ee   dee   dee   deeej                  f   dee
   dee   d*ee#e$      d	ee   d,ed   dedde%f   fd-       Z'ed)ee   dee   dee   deeej                  f   dee
   dee   d*ee#e$      d	ee   d,eed      de%fd.       Z'	 	 dGd)ee   dee   dee   deeej                  f   dee
   dee   d*ee#e$      fd/Z'dedee   dee   deeej                  f   dee
   dee   d	ee   de%fd0Z(ededee   dee   deeej                  f   dee
   dee   d	ee   d1ed   dedde%f   fd2       Z)ededee   dee   deeej                  f   dee
   dee   d	ee   d1eed      de%fd3       Z)	 	 dGdedee   dee   deeej                  f   dee
   dee   fd4Z)d5 Z*deded6ee   d7ee   d)ee+   d8ee   d9ee    d:ee#e,      dee   dee   deeej                  f   dee
   dee   d	ee   de-fd;Z.d	ededed6ee   d7ee   d)ee+   d8ee   d:ee#e,      d<ee/   de0e1   fd=Z2d	ededed6ee   d7ee   d)ee+   d8ee   d:ee#e,      d<ee/   de3e/   fd>Z4ededed6ee   d7ee   d)ee+   d8ee   d9ee    d:ee#e,      dee   dee   deeej                  f   dee
   dee   d?ed   d<ee/   dedde-f   f d@       Z5ededed6ee   d7ee   d)ee+   d8ee   d9ee    d:ee#e,      dee   dee   deeej                  f   dee
   dee   d?eed      d<ee/   de-f dA       Z5	 	 	 dHdeded6ee   d7ee   d)ee+   d8ee   d9ee    d:ee#e,      dee   dee   deeej                  f   dee
   dee   d<ee/   fdBZ5 xZ6S )IOpenAIAssistantsAPIrU   Nc                 "    t         |           y rk   r   r   s    r8   r9   zOpenAIAssistantsAPI.__init__L  r   r:   r   r   r   r   r   r   c                     t               }|Gi }|j                         D ]%  \  }	}
|	dk(  s|	dk(  r|	dk(  r|
|
|d<   |
!|
||	<   ' t        di |}|S |}|S Nr.   r   r   r   rL   )r0   r2   r   r.   r   r   r   r   r   r   rg  r   rF   rG   r   s               r8   rh  z%OpenAIAssistantsAPI.get_openai_clientO  s     >D%++-1;!x-*_'(D$]DG . #NTNM  #Mr:   c                     t               }|Gi }|j                         D ]%  \  }	}
|	dk(  s|	dk(  r|	dk(  r|
|
|d<   |
!|
||	<   ' t        di |}|S |}|S r  )r0   r2   r   r  s               r8   async_get_openai_clientz+OpenAIAssistantsAPI.async_get_openai_clienth  s     >D%++-1;!x-*_'(D$]DG . (/$/M  #Mr:   orderr  beforer  c                    K   | j                  ||||||      }||d}|	r|	|d<   |
r|
|d<    |j                  j                  j                  di | d {   }|S 7 w)Nr   r   r   r   r   r   r  r  r  r  rL   )r  beta
assistantsr   )r.   r   r   r   r   r   r   r  r  r  r  r   request_paramsr   s                 r8   async_get_assistantsz(OpenAIAssistantsAPI.async_get_assistants  s      44#% 5 
 
 '-N8$&+N7#;++66;;MnMM Ns   AAAAaget_assistantsTc                      y rk   rL   r.   r   r   r   r   r   r   r  s           r8   get_assistantsz"OpenAIAssistantsAPI.get_assistants       	r:   Fc                      y rk   rL   r  s           r8   r  z"OpenAIAssistantsAPI.get_assistants  r  r:   c                     ||du r| j                  ||||||      S | j                  ||||||      }||	d}|
r|
|d<   |r||d<    |j                  j                  j                  di |}|S )NTr  r  r  r  rL   )r  rh  r  r  r   )r.   r   r   r   r   r   r   r  r  r  r  r  r   r  r   s                  r8   r  z"OpenAIAssistantsAPI.get_assistants  s     &?d+B,,!') -   ..#% / 
 

 '-N8$&+N7#5=%%0055GGr:   create_assistant_datac                    K   | j                  ||||||      } |j                  j                  j                  di | d {   }	|	S 7 w)Nr  rL   )r  r  r  r   )
r.   r   r   r   r   r   r   r  r   r   s
             r8   async_create_assistantsz+OpenAIAssistantsAPI.async_create_assistants  sa      44#% 5 
 >++66==V@UVV W   AAA
Ac	           	          ||du r| j                  |||||||      S | j                  ||||||      }	 |	j                  j                  j                  di |}
|
S )NT)r   r   r   r   r   r   r  r  rL   )r  rh  r  r  r   )r.   r   r   r   r   r   r  r   r  r   r   s              r8   create_assistantsz%OpenAIAssistantsAPI.create_assistants	  s     #.3Jd3R//!')&; 0   ..#% / 
 8=%%0077P:OPr:   assistant_idc                    K   | j                  ||||||      }|j                  j                  j                  |       d {   }	|	S 7 w)Nr  r  )r  r  r  r  )
r.   r   r   r   r   r   r   r  r   r   s
             r8   async_delete_assistantz*OpenAIAssistantsAPI.async_delete_assistant+  s^      44#% 5 
 '++66==<=XX Yr  c	           	          ||du r| j                  |||||||      S | j                  ||||||      }	|	j                  j                  j	                  |      }
|
S )NT)r   r   r   r   r   r   r  r  r  )r  rh  r  r  r  )r.   r   r   r   r   r   r  r   async_delete_assistantsr   r   s              r8   delete_assistantz$OpenAIAssistantsAPI.delete_assistantB  s     #.3Jd3R..!')) /   ..#% / 
 !%%0077\7Rr:   	thread_idmessage_datac	                 F  K   | j                  ||||||      }	 |	j                  j                  j                  j                  |fi | d {   }
d }t        |
dd       "d|
_        t        di |
j                         }|S t        di |
j                         }|S 7 Pw)Nr  status	completedrL   )	r  r  threadsry   r   r#  r  OpenAIMessagerZ   )r.   r  r  r   r   r   r   r   r   r   thread_messageresponse_objs               r8   a_add_messagez!OpenAIAssistantsAPI.a_add_messagee  s      44#% 5 
 /Ym.@.@.H.H.Q.Q.X.X/
%/
 )
 15>8T2:$/N!(A>+>+>+@AL  )A>+>+>+@AL)
s   AB!BAB!r  c
                      y rk   rL   
r.   r  r  r   r   r   r   r   r   r  s
             r8   add_messagezOpenAIAssistantsAPI.add_message       	r:   c
                      y rk   rL   r  s
             r8   r  zOpenAIAssistantsAPI.add_message  r  r:   c
           
      h   |	|	du r| j                  ||||||||      S | j                  ||||||      }
 |
j                  j                  j                  j
                  |fi |}d }t        |dd       "d|_        t        di |j                         }|S t        di |j                         }|S )NT)r  r  r   r   r   r   r   r   r  r  r  rL   )
r  rh  r  r  ry   r   r#  r  r  rZ   )r.   r  r  r   r   r   r   r   r   r  r   r  r  s                r8   r  zOpenAIAssistantsAPI.add_message  s     $$)>%%#)!') & 	 	 ..#% / 
 )S(:(:(B(B(K(K(R(R)
%)
 15>8T2:$/N!(A>+>+>+@AL  )A>+>+>+@ALr:   c                    K   | j                  ||||||      }|j                  j                  j                  j	                  |       d {   }	|	S 7 w)Nr  r  )r  r  r  ry   r   
r.   r  r   r   r   r   r   r   r   r   s
             r8   async_get_messagesz&OpenAIAssistantsAPI.async_get_messages  sd      44#% 5 
 '++33<<AAIAVV Ws   AAAAaget_messagesc	                      y rk   rL   	r.   r  r   r   r   r   r   r   r  s	            r8   get_messagesz OpenAIAssistantsAPI.get_messages       	r:   c	                      y rk   rL   r  s	            r8   r  z OpenAIAssistantsAPI.get_messages  r  r:   c	           	          ||du r| j                  |||||||      S | j                  ||||||      }	|	j                  j                  j                  j                  |      }
|
S )NTr  r   r   r   r   r   r   r  r  )r  rh  r  r  ry   r   )r.   r  r   r   r   r   r   r   r  r   r   s              r8   r  z OpenAIAssistantsAPI.get_messages
	  s     $$)>**#!') +   ..#% / 
 !%%--66;;i;Pr:   metadatary   c	                    K   | j                  ||||||      }	i }
|||
d<   |||
d<    |	j                  j                  j                  di |
 d {   }t	        di |j                         S 7 w)Nr  ry   r  rL   )r  r  r  r   ThreadrZ   )r.   r  r   r   r   r   r   r   ry   r   r   message_threads               r8   async_create_threadz'OpenAIAssistantsAPI.async_create_thread.	  s      44#% 5 
 'D'D@}1199@@H4HH.++-.. Is   AA3A1A3acreate_threadc
                      y rk   rL   
r.   r  r   r   r   r   r   ry   r   r  s
             r8   create_threadz!OpenAIAssistantsAPI.create_threadN	  r  r:   c
                      y rk   rL   r   s
             r8   r  z!OpenAIAssistantsAPI.create_thread]	  r  r:   c
           
         |	|	du r| j                  ||||||||      S | j                  ||||||      }
i }|||d<   |||d<    |
j                  j                  j                  di |}t        di |j                         S )a-  
        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   ry   r  ry   r  rL   )r  rh  r  r  r   r  rZ   )r.   r  r   r   r   r   r   ry   r   r  r   r   r  s                r8   r  z!OpenAIAssistantsAPI.create_threadn	  s    , %.D*@++!!')! , 	 	 ..#% / 
 'D'D:++33::BTB.++-..r:   c                    K   | j                  ||||||      }|j                  j                  j                  |       d {   }	t	        di |	j                         S 7 w)Nr  r  rL   )r  r  r  r  r  rZ   r  s
             r8   async_get_threadz$OpenAIAssistantsAPI.async_get_thread	  sm      44#% 5 
 '++33<<y<QQ((( Rs   AA#A!A#aget_threadc	                      y rk   rL   	r.   r  r   r   r   r   r   r   r  s	            r8   
get_threadzOpenAIAssistantsAPI.get_thread	  r  r:   c	                      y rk   rL   r  s	            r8   r	  zOpenAIAssistantsAPI.get_thread	  r  r:   c	           	          ||du r| j                  |||||||      S | j                  ||||||      }	|	j                  j                  j	                  |      }
t        di |
j                         S )NTr  r  r  rL   )r  rh  r  r  r  r  rZ   )r.   r  r   r   r   r   r   r   r  r   r   s              r8   r	  zOpenAIAssistantsAPI.get_thread	  s     "{d':((#!') )   ..#% / 
 !%%--666K(((r:   c                      y rk   rL   rM   s    r8   delete_threadz!OpenAIAssistantsAPI.delete_thread	  s    r:   additional_instructionsinstructionsrm   r   toolsc           	         K   | j                  |	|
||||      }|j                  j                  j                  j	                  |||||||       d {   }|S 7 w)Nr  r  r  r  r  r  rm   r  )r  r  r  runscreate_and_poll)r.   r  r  r  r  r  rm   r   r  r   r   r   r   r   r   r   r   s                    r8   arun_threadzOpenAIAssistantsAPI.arun_thread 
  s     " 44#% 5 
 '++3388HH%$;% I 
 
 
s   AAAAevent_handlerc
                     |||||||d}
|	|	|
d<    |j                   j                  j                  j                  di |
S Nr  r  rL   r  r  r  r   r.   r   r  r  r  r  r  rm   r  r  r   s              r8   async_run_thread_streamz+OpenAIAssistantsAPI.async_run_thread_stream&
  X     #('>( 
 $$1D!.v{{""''..666r:   c
                     |||||||d}
|	|	|
d<    |j                   j                  j                  j                  di |
S r  r  r  s              r8   run_thread_streamz%OpenAIAssistantsAPI.run_thread_stream?
  r  r:   r  c                      y rk   rL   r.   r  r  r  r  r  rm   r   r  r   r   r   r   r   r   r  r  s                    r8   
run_threadzOpenAIAssistantsAPI.run_threadZ
      ( 	r:   c                      y rk   rL   r   s                    r8   r!  zOpenAIAssistantsAPI.run_threadp
  r"  r:   c                    |Z|du rV|5|du r1| j                  |	|
||||      }| j                  |||||||||	      S | j                  |||||||||	|
||||      S | j                  |	|
||||      }||du r| j	                  |||||||||	      S |j
                  j                  j                  j                  |||||||      }|S )NTr  )	r   r  r  r  r  r  rm   r  r  )r  r  r  r  r  rm   r   r  r   r   r   r   r   r   r  )	r  r  r  rh  r  r  r  r  r  )r.   r  r  r  r  r  rm   r   r  r   r   r   r   r   r   r  r  _clientr   r   s                       r8   r!  zOpenAIAssistantsAPI.run_thread
  sm   & "{d':!fn66#%# +!-! 7  33"'!-,C!-%"/ 4 
 
 ###)(?)!!') $    ..#% / 
 &D.))$#)(?)!+ * 
 
 !%%--22BB%$;% C 
 r:   rT   rk   )desc   NN)NNr&  r'  NNr   r  )7rV   rW   rX   r9   r   r   r   r  r   r  r   r   rh  r   r  AsyncCursorPage	Assistantr  r   r
   r   r  SyncCursorPagerZ   r  r  r   r  r  r  r  r  r   r  r  r   OpenAICreateThreadParamsMessager  r  r  r  r	  r  objectAssistantToolParamRunr  AssistantEventHandlerAsyncAssistantStreamManagerAsyncAssistantEventHandlerr  AssistantStreamManagerr  r!  r   r   s   @r8   r  r  K  s    $(# 3- uemm+,	
 c] sm   
@ )-# 3- uemm+,	
 c] sm % 
F  &! $# #  3-  uemm+,	 
 c]  sm  %  }  }    }  
	# H 
#
 3-
 uemm+,	

 c]
 sm
 %
 !
 
4y99	:
 
 
#
 3-
 uemm+,	

 c]
 sm
  
 "'%.1
 
		"
 
* %! $#,#, 3-, uemm+,	,
 c], sm, }, }, , },^# 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r:   r  )@r   r@   typingr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   #openai.types.beta.assistant_deletedr   openai.types.file_deletedr   pydanticr   typing_extensionsr   rp   r   litellm._loggingr   *litellm.litellm_core_utils.litellm_loggingr   r   )litellm.llms.base_llm.base_model_iteratorr   )litellm.llms.base_llm.chat.transformationr   r   (litellm.llms.bedrock.chat.invoke_handlerr   &litellm.llms.custom_httpx.http_handlerr   litellm.types.utilsr   r   r   r   litellm.utilsr    r!   r"   types.llms.openaibaser&   common_utilsr(   r)   r+   r\   r   r   r`  r  r  rL   r:   r8   <module>rC     s           & @ 1  &    + S O R I Q   #  R( (VM
: M
`+D UF7 UFp WW Wt^w ^BU' Ur:   