
    )#hO                       d dl Z 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% d dl&m'Z'm(Z( d dl)m*Z* d dl+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3m4Z4m5Z5 ddl6 ddl7m8Z8 ddl9m:Z:m;Z;  G d d      Z< G d de'      Z= G d de%      Z> G d de8      Z? G d  d!e8      Z@ G d" d#e8      ZA G d$ d%e8      ZBy)&    N)AnyAsyncIteratorCallable	CoroutineIterableIteratorListLiteralOptionalUnioncast)AsyncOpenAIOpenAI)AssistantDeleted)FileDeleted)	BaseModel)overload)LlmProviders)verbose_logger)Logging)track_llm_api_timing)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       W/var/www/html/sandstorm/venv/lib/python3.12/site-packages/litellm/llms/openai/openai.py__init__zMistralEmbeddingConfig.__init__9   sF     (--/!--/ 	4JCf}!2U3	4    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__r3   
startswith
isinstancetypesFunctionTypeBuiltinFunctionTypeclassmethodstaticmethod)clskvs      r9   
get_configz!MistralEmbeddingConfig.get_configA   st     **,
1<<%&&-- 	  qD
 	
 
s   AA6c                     dgS Nencoding_format r/   s    r9   get_supported_openai_paramsz2MistralEmbeddingConfig.get_supported_openai_paramsS   s    
 	
r;   non_default_paramsoptional_paramsc                 L    |j                         D ]  \  }}|dk(  s||d<    |S rK   )r3   )r/   rP   rQ   paramr8   s        r9   map_openai_paramsz(MistralEmbeddingConfig.map_openai_paramsX   s:    .446 	;LE5))5: 12	; r;   returnN)
__name__
__module____qualname____doc__r:   rD   rI   rO   dictrT   rM   r;   r9   r,   r,   4   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_formatrV   c                     t               j                         }|j                         D ]%  \  }}|dk7  s|t        | j                  ||       ' y r.   r0   )r/   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   r6   r7   r8   s                   r9   r:   zOpenAIConfig.__init__   sF     (--/!--/ 	4JCf}!2U3	4r;   c                      t         |          S N)superrI   )rF   r5   s    r9   rI   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
        rn   )litellmopenAIO1Configis_model_o1_reasoning_modelrO   openAIGPTAudioConfigis_model_gpt_audio_modelopenAIGPTConfig)r/   rn   s     r9   rO   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;   rP   rQ   c                 l    | j                  |      }|j                         D ]  \  }}||v s|||<    |S rl   )rO   r3   )r/   rP   rQ   rn   supported_openai_paramsrS   r8   s          r9   _map_openai_paramszOpenAIConfig._map_openai_params   sL     #'"B"B5"I.446 	/LE5//).&	/ r;   messagesc                     |S rl   rM   )r/   rz   rn   s      r9   _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 ) rp   )rP   rQ   rn   r}   )rq   rr   rs   rT   rt   ru   rv   )r/   rP   rQ   rn   r}   s        r9   rT   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       r9   get_error_classzOpenAIConfig.get_error_class   s     #!
 	
r;   litellm_paramsc                 6    | j                  ||      }||d|S )N)rz   rn   )rn   rz   )r|   )r/   rn   rz   rQ   r   r   s         r9   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#   jsonr[   )r/   rn   r   r   r   r   rz   rQ   r   r   r   r   final_response_objs                r9   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 rM   )r/   r   rn   rz   rQ   r   r   s          r9   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       r9   get_model_response_iteratorz(OpenAIConfig.get_model_response_iterator"  s     41#
 	
r;   )NNNNNNNNNNNNNN)F)0rW   rX   rY   rZ   r^   r   int__annotations__r_   r   strr[   r`   listra   rb   rc   rd   re   rf   rg   rh   ri   r:   rD   rI   rO   ry   r	   AllMessageValuesr|   boolrT   httpxHeadersr   r   r   Responser   LiteLLMLoggingObjr   r   r   r   r   r   __classcell__r5   s   @r9   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   chunkrV   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'}
        NrM   )r    	Exception)r/   r   es      r9   chunk_parserz1OpenAIChatCompletionResponseIterator.chunk_parser0  s*    	&/// 	G	s   
 	N)rW   rX   rY   r[   r    r   rM   r;   r9   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 e       deded	e	e
ej
                  f   dedeeef   f
d       Z e       deded	e	e
ej
                  f   de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 e       deded	e	e
ej
                  f   defd*       Z  e       deded	e	e
ej
                  f   de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 )?OpenAIChatCompletionrV   Nc                 "    t         |           y rl   rm   r:   r/   r5   s    r9   r:   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   )r7   r8   ttl)r1   r@   r   r)   formathashlibsha256encode	hexdigestrq   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                  r9   _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datar   c                   K   t        j                          }	  |j                  j                  j                  j                  di |d|i d{   }t        j                          }t        |d      rt        |j                        }ni }|j                         }	||	fS 7 P# t        j                  $ rF}
t        j                          }t        ||z
  d      }|
xj                  d| d| dz  c_        |
d}
~
w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   r&   z - timeout value=z, time taken=z secondsrM   )timechatcompletionswith_raw_responsecreatehasattrr[   r   parseopenaiAPITimeoutErrorroundr   r   )r/   r   r   r   r   
start_timer   end_timer   responser   
time_deltas               r9   #make_openai_chat_completion_requestz8OpenAIChatCompletion.make_openai_chat_completion_request  s     YY[
	Nn))55GGNN $+  
 yy{H|Y/|334#))+HH$$ %% 	yy{Hx*4a8JII,WI]:,hWWIG 	G	sH   D7B" B AB" D B" "D	5AC66D	DD		D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 - {}rM   )r   r   r   r   r   r[   r   r   r   r   type	r/   r   r   r   r   r   r   r   r   s	            r9   (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   rn   stream_optionsc                 >    t        |      }t        ||d||      }|S )N)r   r   )completion_streamrn   custom_llm_providerr   r   )r   r!   )r/   r   r   rn   r   r   r   s          r9   mock_streamingz#OpenAIChatCompletion.mock_streaming  s1     1I0/ (#)
 "!r;   Fr   rQ   r   rz   print_verbosedynamic_paramsazure_ad_tokenacompletionr   custom_prompt_dictr   r}   c                 D	   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)rn   provider)rn   r   r  extra_headersr   zMissing model or messagesr   z,Timeout needs to be a float or httpx.Timeoutr   /r&   )rn   rz   rQ   r   r   r   T)r   r   r   rn   r   r   r   r   r   r   r   r}   r   )r   r   rn   r   r   r   r   r   r   r   r   r   r}   fake_stream)r   r   r   rn   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   r   rn   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)rz   r     r   r   r   r   )-rm   
completionr2   popr"   get_provider_chat_configr   should_fake_streamr)   r@   floatr   Timeoutrn   ranger   r]   async_streamingr   	streamingr   r   pre_callr   	_base_url_uri_referencer   r   
model_dumpr   r#   r   r   r   r   UnprocessableEntityErrorrq   r}   r*   r   r   lenappendremove_index_from_tool_callsgetattr)*r/   r   r   rQ   r   r   rn   rz   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_responser5   s*                                            r9   r  zOpenAIChatCompletion.completion  s   2 	\	 %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$ m  #.*<<#!)(8'5 '2 = D (>;;#!)(8'5 '2 < DY "&((=!"<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.;%)(/,7	 J  * NU667IJ/7/B/B/D,#--"*$+.B-BD,I	 .  .N,@2@.5.*
 '$.#'#6#6)-m=O)P,7&+/=	 $7 $   21Em F 66  **d2kT6I+V/,(  	 ) ! ! $0%(KCPQF8&TUJcRSfTKsSTvU".(4)*MN')!&s8}q'8!9 YA(//<'{62hq1uof6MM#+A;v#6&#@$0$7$71<(L%& %1$7$7TV8W$XY %++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;J2/P' 2J2P' $J27P' :C/J2)P' ,J2-P' 0P' 2P$%K0*P' 0P$=B P>BPP' P$$P' '	R0P22R>ARRr  c                   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&        $ ra}t)        |dd       }t)        |dd      }t)        |dd       }||rt)        |dd       }t)        |dt+        |            }t-        |||      d }~ww xY ww)Nr&   Tr  rz   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   r   r%  rq   r}   r*   r   r)  r   r)   )r/   r   rn   r   r   r   r   r   r   r   r   r   r   r}   r   r  r   r-  r   r.  r   r   exception_responser   r1  r   s                             r9   r   z OpenAIChatCompletion.acompletion  sI    $ 
 N	AJ.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	 /   *)yN	<%> 22 &&$.+2EFq$ODG   
%,Q
D%A"%a< '9d ; (-?$+,>	4$PM!!YA7! +Wm 
s[   F?A:DDA7DF?	D
F?DF<$%E	F?F<AF77F<<F?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  rz   r   r   r	  r  r  r   r   r   rn   r   r   r   r   )	r   r!  r   r"  r#  r   r   r!   get)r/   r   r   r   rn   r   r   r   r   r   r   r   r   r   r   streamwrappers                   r9   r   zOpenAIChatCompletion.streaming4  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  rz   r	  r  r5  r   r   r8  r   r   r  r   r   z

Original Response: r   ReadTimeouti  )r  r   r!  r   r   r!   r9  r   r%  rq   r}   r*   r   r@   r)   r)  r   r   r   r   rW   )r/   r   r   rn   r   r   r   r   r   r   r   r   r}   r   r   r-  r   r:  r   r1  r   r3  s                         r9   r  z$OpenAIChatCompletion.async_streamingn  st      X%%3D!"q P	AO.2.E.E!#% +# +!-! /F 	/ $$z*##*$,'+/3	% % 	 +/*R*R#1# +	 +S + %! FM../AB 3&.(0 +#'88,<d#C&-! %$OP	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--G: %C*%G=*G:7C>G55G::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   NrM   
embeddingsr   r   r[   r   r   r   )	r/   r   r   r   r   r   r   r   r   s	            r9   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r>  r?  r   s	            r9   "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   r5  r   r
  r  r   r  r   	embedding)r   r   response_typer   r   r  r   r   r   r   )
r   rA  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   r1  r2  r3  s                       r9   
aembeddingzOpenAIChatCompletion.aembedding  s    8	*.*A*A!' +B +N '+&H&H-'	 '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<D77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)rn   r  r   r  r   )r
  r   r  T)	r   r  r   r   r   r   r   r   r   FrE  r  r   r
  rF  rG  )r   r   r   rH  r   r  r   r   r   r   )rm   rG  rq   DEFAULT_MAX_RETRIESr@   r   r)   r!  rJ  r   rC  r   r   r#   r$  r   r)  r   )r/   rn   r  r   r   r   rQ   r   r   r   rJ  r   r   r   r   sync_embedding_responser   r   r   r1  r2  r3  r5   s                         r9   rG  zOpenAIChatCompletion.embeddingJ  s    	F	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.C6  A5C6 6	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)
NTrE  r   r
  rF  image_generationr   r   rH  )r  r   r   rM   )r   imagesgenerater$  r   r#   r   r   )r/   rN  r   r   r   r   r   r   r   r   r   r   r.  r   s                 r9   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)rn   rN  r   r&   r   r  r   T)	r   rN  r   r   r   r   r   r   r   FrE  r   r   r	  r  r   r
  rF  rP  rQ  r   r  rM   )r  r@   r   r)   rT  r   r!  r   r"  r#  rR  rS  r$  r   r#   r   r   r   r)  )r/   rn   rN  r   rQ   r   r   r   r   r   aimg_generationr   r   r   	_responser   r   s                    r9   rP  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)rn   r  rX  rQ   r   r   r   rY  r   r   r   FrE  rn   rX  r  r   rM   )	async_audio_speechr   r   r   audiospeechr   HttpxBinaryResponseContentr   )r/   rn   r  rX  rQ   r   r   r   rY  r   r   rZ  r   r   r   s                  r9   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)NTrE  r\  r]  rM   )r   r   r   r_  r`  r   ra  r   )r/   rn   r  rX  rQ   r   r   r   rY  r   r   r   r   r   s                 r9   r^  z'OpenAIChatCompletion.async_audio_speechN  s      ##!' $ 

 ;,,33:: 

 	
 
 *83D3DEE
s   AA2A0A2rU   rl   )
NNNNNNNNNF)NNNNNNNN)	NNNNNNNNN)NNNN)NNNNNr   ),rW   rX   rY   r:   r   r  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  rA  rC  r   rJ  rG  rT  r   rP  ra  rb  r^  r   r   s   @r9   r   r   :  s    "&"&%)/<u}}T/B%&&*7;?? #? 3-	?
 c]? uemm+,? c]? sm? v{234?B !#! ! uemm+,	!
 '! 
tY	! !F      uemm+,	 
 '  
tY	   N *."" '" 	"
 !" 
"2  $#',0!%"&%))-(,!"&#%&*-1&*-v%v uemm+,v 	v
 v v }v 4.v  )v #v 3-v c]v !v !v v" $#v$ !%v( sm)v* &c]+v, d^-v~ "&"&%)&*&*)-!!aa a &	a
 'a uemm+,a #a 3-a c]a sma d^a !a  !aR "&"&%)&*)-8 uemm+,8 	8
 8 #8 3-8 c]8 sm8 !8@ "&"&%)&*&*)-duemm+,d d 	d
 'd #d 3-d c]d smd d^d !dN #  uemm+,	
 ' ,   uemm+,	
 ' < "&"&(,DD D *	D
 D 'D #D 3-D %D\ "&"&%)UU U 	U *U U #U 3-U c]U 
U| "&"&)) ) &	)
 ) ) #) 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()
    rV   c                 "    t         |           y rl   r   r   s    r9   r:   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   rh  r   r   TrM   r1   r3   r   r   r/   r   r   r   r   r   r   rh  received_argsr   r   rG   rH   s                r9   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NrM   )filesr   )r/   rp  r   r   s       r9   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   rh  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.)rp  r   rM   )rn  
ValueErrorr@   r   rt  rs  r   )r/   rh  rp  r   r   r   r   r   r   r   r   s              r9   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)Nr]  rM   )rs  r  ra  r   )r/   r|  r   r   s       r9   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 )Nrw  rx  Try  )r|  r   r]  rM   )rn  rz  r@   r   r~  r   r   rs  r  ra  r   )r/   rh  r|  r   r   r   r   r   r   r   r   s              r9   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  )rs  retriever/   r  r   r   s       r9   aretrieve_filezOpenAIFilesAPI.aretrieve_file  s/     
 ',,55g5FF Gru  c	           	          | j                  |||||||      }	|	t        d      |du r.t        |	t              st        d      | j	                  ||	      S |	j
                  j                  |      }
|
S Nrw  rx  Try  )r  r   r  )rn  rz  r@   r   r  rs  r  r/   rh  r  r   r   r   r   r   r   r   r   s              r9   retrieve_filezOpenAIFilesAPI.retrieve_file  s     ?C>T>T#% ?U ?
  |  m[9 r  &&+ '   !&&///@r;   c                 Z   K   |j                   j                  |       d {   }|S 7 wr  )rs  deleter  s       r9   adelete_filezOpenAIFilesAPI.adelete_file)  s/     
 ',,33G3DD Eru  c	           	          | j                  |||||||      }	|	t        d      |du r.t        |	t              st        d      | j	                  ||	      S |	j
                  j                  |      }
|
S r  )rn  rz  r@   r   r  rs  r  r  s              r9   delete_filezOpenAIFilesAPI.delete_file1  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   rs  r   )r/   r   r  r   s       r9   alist_fileszOpenAIFilesAPI.alist_filesW  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 )Nrw  rx  Try  )r  r   r  )rn  rz  r@   r   r  r   rs  r   )r/   rh  r   r   r   r   r   r  r   r   r   s              r9   
list_fileszOpenAIFilesAPI.list_filesb  s     ?C>T>T#% ?U ?
  |  m[9 r  ##+ $  
 gs#$**///@H  %**//1Hr;   rU   NFrl   r   )"rW   rX   rY   rZ   r:   r   r   r   r  r   r  r   r   r   r   rn  CreateFileRequest
FileObjectrt  r   r   r{  FileContentRequestra  r~  r  r  r  r   r  r  r  r  r   r   s   @r9   rf  rf  s  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;   rf  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()
    rV   c                 "    t         |           y rl   r   r   s    r9   r:   zOpenAIBatchesAPI.__init__  r   r;   r   r   r   r   r   r   rh  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 rj  rk  rl  s                r9   rn  z"OpenAIBatchesAPI.get_openai_client  ro  r;   create_batch_datar   c                 Z   K    |j                   j                  di | d {   }|S 7 wrr  )batchesr   )r/   r  r   r   s       r9   acreate_batchzOpenAIBatchesAPI.acreate_batch  s2     
 6..55J8IJJ Kru  c	           	          | j                  |||||||      }	|	t        d      |du r.t        |	t              st        d      | j	                  ||	      S  |	j
                  j                  di |}
|
S )Nrw  rx  Try  )r  r   rM   )rn  rz  r@   r   r  r  r   )r/   rh  r  r   r   r   r   r   r   r   r   s              r9   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= %srM   )r   debugr  r  )r/   r  r   r   s       r9   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 )Nrw  rx  Try  )r  r   rM   )rn  rz  r@   r   r  r  r  )r/   rh  r  r   r   r   r   r   r   r   r   s              r9   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= %srM   )r   r  r  cancel)r/   r  r   r   s       r9   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 )Nrw  rx  Try  )r  r   rM   )rn  rz  r@   r   r  r  r  )r/   rh  r  r   r   r   r   r   r   r   r   s              r9   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        r9   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 )Nrw  rx  Try  )r   r  r  r  )rn  rz  r@   r   r  r  r   )r/   rh  r   r   r   r   r   r  r  r   r   r   s               r9   list_batcheszOpenAIBatchesAPI.list_batchesH  s     ?C>T>T#% ?U ?
  |  m[9 r  %%+5 &   !((--E-Gr;   rU   r  rl   r   NNN)rW   rX   rY   rZ   r:   r   r   r   r  r   r  r   r   r   r   rn  CreateBatchRequestBatchr  r   r   r  RetrieveBatchRequestr  r  CancelBatchRequestr  r  r  r  r   r   s   @r9   r  r    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OpenAIAssistantsAPIrV   Nc                 "    t         |           y rl   r   r   s    r9   r:   zOpenAIAssistantsAPI.__init__o  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   rM   )r1   r3   r   r/   r   r   r   r   r   r   rm  r   rG   rH   r   s               r9   rn  z%OpenAIAssistantsAPI.get_openai_clientr  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  )r1   r3   r   r  s               r9   async_get_openai_clientz+OpenAIAssistantsAPI.async_get_openai_client  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  rM   )r  beta
assistantsr   )r/   r   r   r   r   r   r   r  r  r  r  r   request_paramsr   s                 r9   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 rl   rM   r/   r   r   r   r   r   r   r  s           r9   get_assistantsz"OpenAIAssistantsAPI.get_assistants       	r;   Fc                      y rl   rM   r  s           r9   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  rM   )r  rn  r  r  r   )r/   r   r   r   r   r   r   r  r  r  r  r  r   r  r   s                  r9   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  rM   )r  r  r  r   )
r/   r   r   r   r   r   r   r  r   r   s
             r9   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  rM   )r  rn  r  r  r   )r/   r   r   r   r   r   r  r   r  r   r   s              r9   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
             r9   async_delete_assistantz*OpenAIAssistantsAPI.async_delete_assistantN  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  rn  r  r  r  )r/   r   r   r   r   r   r  r   async_delete_assistantsr   r   s              r9   delete_assistantz$OpenAIAssistantsAPI.delete_assistante  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	completedrM   )	r  r  threadsrz   r   r)  r  OpenAIMessager[   )r/   r  r  r   r   r   r   r   r   r   thread_messageresponse_objs               r9   a_add_messagez!OpenAIAssistantsAPI.a_add_message  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 rl   rM   
r/   r  r  r   r   r   r   r   r   r  s
             r9   add_messagezOpenAIAssistantsAPI.add_message       	r;   c
                      y rl   rM   r  s
             r9   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  rM   )
r  rn  r  r  rz   r   r)  r  r  r[   )r/   r  r  r   r   r   r   r   r   r  r   r  r  s                r9   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  rz   r   
r/   r  r   r   r   r   r   r   r   r   s
             r9   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 rl   rM   	r/   r  r   r   r   r   r   r   r  s	            r9   get_messagesz OpenAIAssistantsAPI.get_messages	       	r;   c	                      y rl   rM   r  s	            r9   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  rn  r  r  rz   r   )r/   r  r   r   r   r   r   r   r  r   r   s              r9   r  z OpenAIAssistantsAPI.get_messages-	  s     $$)>**#!') +   ..#% / 
 !%%--66;;i;Pr;   metadatarz   c	                    K   | j                  ||||||      }	i }
|||
d<   |||
d<    |	j                  j                  j                  di |
 d {   }t	        di |j                         S 7 w)Nr  rz   r  rM   )r  r  r  r   Threadr[   )r/   r  r   r   r   r   r   r   rz   r   r   message_threads               r9   async_create_threadz'OpenAIAssistantsAPI.async_create_threadQ	  s      44#% 5 
 'D'D@}1199@@H4HH.++-.. Is   AA3A1A3acreate_threadc
                      y rl   rM   
r/   r  r   r   r   r   r   rz   r   r  s
             r9   create_threadz!OpenAIAssistantsAPI.create_threadq	  r  r;   c
                      y rl   rM   r  s
             r9   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   rz   r  rz   r  rM   )r  rn  r  r  r   r  r[   )r/   r  r   r   r   r   r   rz   r   r  r   r   r  s                r9   r  z!OpenAIAssistantsAPI.create_thread	  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  rM   )r  r  r  r  r  r[   r  s
             r9   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 rl   rM   	r/   r  r   r   r   r   r   r   r  s	            r9   
get_threadzOpenAIAssistantsAPI.get_thread	  r  r;   c	                      y rl   rM   r  s	            r9   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  rM   )r  rn  r  r  r  r  r[   )r/   r  r   r   r   r   r   r   r  r   r   s              r9   r  zOpenAIAssistantsAPI.get_thread	  s     "{d':((#!') )   ..#% / 
 !%%--666K(((r;   c                      y rl   rM   rN   s    r9   delete_threadz!OpenAIAssistantsAPI.delete_thread
  s    r;   additional_instructionsinstructionsrn   r  toolsc           	         K   | j                  |	|
||||      }|j                  j                  j                  j	                  |||||||       d {   }|S 7 w)Nr  r  r  r  r  r  rn   r  )r  r  r  runscreate_and_poll)r/   r  r  r  r  r  rn   r  r  r   r   r   r   r   r   r   r   s                    r9   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  rM   r  r  r  r  r/   r   r  r  r  r  r  rn   r  r  r   s              r9   async_run_thread_streamz+OpenAIAssistantsAPI.async_run_thread_streamI
  X     #('>( 
 $$1D!.v{{""''..666r;   c
                     |||||||d}
|	|	|
d<    |j                   j                  j                  j                  di |
S r  r  r   s              r9   run_thread_streamz%OpenAIAssistantsAPI.run_thread_streamb
  r"  r;   r  c                      y rl   rM   r/   r  r  r  r  r  rn   r  r  r   r   r   r   r   r   r  r  s                    r9   
run_threadzOpenAIAssistantsAPI.run_thread}
      ( 	r;   c                      y rl   rM   r&  s                    r9   r'  zOpenAIAssistantsAPI.run_thread
  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  rn   r  r  )r  r  r  r  r  rn   r  r  r   r   r   r   r   r   r  )	r  r!  r  rn  r$  r  r  r  r  )r/   r  r  r  r  r  rn   r  r  r   r   r   r   r   r   r  r  _clientr   r   s                       r9   r'  zOpenAIAssistantsAPI.run_thread
  sm   & "{d':!fn66#%# +!-! 7  33"'!-,C!-%"/ 4 
 
 ###)(?)!!') $    ..#% / 
 &D.))$#)(?)!+ * 
 
 !%%--22BB%$;% C 
 r;   rU   rl   )desc   NN)NNr,  r-  NNr   r  )7rW   rX   rY   r:   r   r   r   r  r   r  r   r   rn  r   r  AsyncCursorPage	Assistantr  r   r
   r   r  SyncCursorPager[   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   @r9   r  r  n  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  )Cr   r   rA   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   rq   r   litellm._loggingr   *litellm.litellm_core_utils.litellm_loggingr   r   (litellm.litellm_core_utils.logging_utilsr   )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   rf  r  r  rM   r;   r9   <module>rJ     s            & @ 1  &    + S I O R I Q   #  R( (VM
: M
`+D vF7 vFr!WW Wt^w ^BU' Ur;   