
    j                    L   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mZ d dlmZ d dlZerd dlm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+ d dl,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8m9Z9m:Z: ddl; ddl<m=Z= ddl>m?Z? ddl@mAZA ddlBmCZCmDZDmEZE  eA       ZF e?       ZG G d d      ZH G d de-      ZI G d  d!e+      ZJ G d" d#e=eC      ZK G d$ d%e=      ZL G d& d'e=      ZM G d( d)e=      ZNy)*    N)AnyAsyncIteratorCallable	CoroutineIterableIteratorListLiteralOptionalTYPE_CHECKINGUnioncast)urlparse)ClientSession)AsyncOpenAIOpenAI)AssistantDeleted)FileDeleted)	BaseModel)overload)LlmProviders)verbose_logger)DEFAULT_MAX_RETRIES)Logging)track_llm_api_timing)BaseModelResponseIterator)
BaseConfigBaseLLMException)MockResponseIterator)EmbeddingResponseImageResponseLiteLLMBatchModelResponseModelResponseStream)CustomStreamWrapperProviderConfigManager convert_to_model_response_object   )*   )BaseLLM   )OpenAIGPT5Config)OpenAIOSeriesConfig)BaseOpenAILLM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__)r6   locals_keyvalues       s/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/litellm/llms/openai/openai.py__init__zMistralEmbeddingConfig.__init__G   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__r:   
startswith
isinstancetypesFunctionTypeBuiltinFunctionTypeclassmethodstaticmethod)clskvs      r@   
get_configz!MistralEmbeddingConfig.get_configO   sy     **,
,1<<%&&-- 	  qD,
 	
 
s   AA6c                     dgS Nencoding_format r6   s    r@   get_supported_openai_paramsz2MistralEmbeddingConfig.get_supported_openai_paramsa   s    
 	
rB   non_default_paramsoptional_paramsc                 L    |j                         D ]  \  }}|dk(  s||d<    |S rR   )r:   )r6   rW   rX   paramr?   s        r@   map_openai_paramsz(MistralEmbeddingConfig.map_openai_paramsf   s5    .446LE5))5: 12 7 rB   returnN)
__name__
__module____qualname____doc__rA   rK   rP   rV   dictr[   rT   rB   r@   r3   r3   B   s@    4	4 
 
"

D 4 rB   r3   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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_formatr]   c                     t               j                         }|j                         D ]%  \  }}|dk7  s|t        | j                  ||       ' y r5   r7   )r6   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   r=   r>   r?   s                   r@   rA   zOpenAIConfig.__init__   sA     (--/!--/JCf}!2U3 *rB   c                      t         |          S N)superrP   )rM   r<   s    r@   rP   zOpenAIConfig.get_config   s    w!##rB   modelc                 r   t         j                  |      rt         j                  |      S t        j	                  |      rt        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
        ru   )	openaiOSeriesConfigis_model_o_series_modelrV   openAIGPT5Configis_model_gpt_5_modellitellmopenAIGPTAudioConfigis_model_gpt_audio_modelopenAIGPTConfig)r6   ru   s     r@   rV   z(OpenAIConfig.get_supported_openai_params   s     66U6C&BBBOO222?#??e?LL))BBBO//KKRWKXX**FFUFSSrB   rW   rX   c                 l    | j                  |      }|j                         D ]  \  }}||v s|||<    |S rs   )rV   r:   )r6   rW   rX   ru   supported_openai_paramsrZ   r?   s          r@   _map_openai_paramszOpenAIConfig._map_openai_params   sG     #'"B"B5"I.446LE5//).& 7 rB   messagesc                     |S rs   rT   )r6   r   ru   s      r@   _transform_messagesz OpenAIConfig._transform_messages   s	     rB   drop_paramsc                    t         j                  |      rt         j                  ||||      S t        j	                  |      rt        j                  ||||      S t
        j                  j                  |      r#t
        j                  j                  ||||      S t
        j                  j                  ||||      S ) rw   )rW   rX   ru   r   )	rx   ry   r[   rz   r{   r|   r}   r~   r   )r6   rW   rX   ru   r   s        r@   r[   zOpenAIConfig.map_openai_params   s     66U6C&88#5 /'	 9   222?#55#5 /'	 6   ))BBBO//AA#5 /'	 B   &&881+#	 9 
 	
rB   error_messagestatus_codeheadersc                     t        |||      S )Nr   messager   )r0   )r6   r   r   r   s       r@   get_error_classzOpenAIConfig.get_error_class   s     #!
 	
rB   litellm_paramsc                 6    | j                  ||      }||d|S )N)r   ru   )ru   r   )r   )r6   ru   r   rX   r   r   s         r@   transform_requestzOpenAIConfig.transform_request  s)     ++XU+KHHHHrB   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'   jsonrb   )r6   ru   r   r   r   r   r   rX   r   r   r   r   final_response_objs                r@   transform_responsezOpenAIConfig.transform_response  s{     	0A0AB=I=Q=Q&&'9:!, , 1 1 3&4(,*>*>?"&|';';"<	
 "!rB   api_basec                     dd| i|S )NAuthorizationBearer rT   )r6   r   ru   r   rX   r   r   r   s           r@   validate_environmentz!OpenAIConfig.validate_environment*  s"     wwi0

 	
rB   streaming_responsesync_streamc                     t        |||      S )N)r   r   r   )$OpenAIChatCompletionResponseIterator)r6   r   r   r   s       r@   get_model_response_iteratorz(OpenAIConfig.get_model_response_iterator9  s     41#
 	
rB   )NNNNNNNNNNNNNN)F)0r^   r_   r`   ra   re   r   int__annotations__rf   r   strrb   rg   listrh   ri   rj   rk   rl   rm   rn   ro   rp   rA   rK   rP   rV   r   r	   AllMessageValuesr   boolr[   httpxHeadersr   r   r   Responser#   LiteLLMLoggingObjr   r   r   r   r   r   __classcell__r<   s   @r@   rd   rd   m   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0"&9=FI	-.7:		
#
 #
 #
 	#

 #
 
#
J
 
/2
=B4CV=W
	
	I	I '(	I 		I
 	I 	I 
	I, "&$("" nn" &	"
 '" " '(" " " " #" D>" 
"F "&"&

 
 '(	

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

 


rB   rd   c                       e Zd ZdedefdZy)r   chunkr]   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'}
        NrT   )r$   	Exception)r6   r   es      r@   chunk_parserz1OpenAIChatCompletionResponseIterator.chunk_parserG  s*    	&/// 	G	s   
 	N)r^   r_   r`   rb   r$   r   rT   rB   r@   r   r   F  s    $ +> rB   r   c            *       n    e Zd Zd; fdZ	 	 d<deeef   dee   dee	   fdZ
ddd ej                  d      e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      ded   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	 d=d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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   ded   f( fd'Z	 	 	 	 	 	 	 	 	 	 	 d>dededed(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ded   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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e   d
ee   d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%	 	 	 	 	 dAd0edede&deded	ee   d
ee   dee   ded   fd1Z'	 	 	 	 	 	 dBded0edede&ded	ee   d
ee   dee	   ded   de&f fd2Z(	 	 	 	 	 dAd3ededededed	ee   d
ee   dee   fd4Z)	 	 	 	 	 	 dBdee   d3edededed	ee   d
ee   dee*   dee   de*fd5Z+	 	 d<ded0ed6eded	ee   d
ee   dee   d7ee   de	deeej                  f   d8ee   de,fd9Z-	 d=ded0ed6eded	ee   d
ee   dee   d7ee   de	deeej                  f   de,fd:Z. xZ/S )COpenAIChatCompletionr]   Nc                 "    t         |           y rs   rt   rA   r6   r<   s    r@   rA   zOpenAIChatCompletion.__init__R      rB   clientorganizationmax_retriesc                 *    |||_         |||_        y y rs   )r   r   )r6   r   r   r   s       r@   _set_dynamic_params_on_clientz2OpenAIChatCompletion._set_dynamic_params_on_clientU  s%     #".F"!,F #rB   is_asyncr   r   api_versiontimeoutshared_sessionr   c
                    t               }
|t        |t              st        ddj	                  |            | j                  |
d      }|r"t        |t              st        |t              r|S |r&t        ||t        j                  |	      |||      }n#t        ||t        j                         |||      }| j                  ||
d       |S | j                  |||	       |S )
N  z/max retries must be an int. Passed in value: {}r   r   openai)client_initialization_paramsclient_typer   )r   base_urlhttp_clientr   r   r   )openai_clientr   r   )r   r   r   )r8   rG   r   r0   formatget_cached_openai_clientr   r   r   _get_async_http_client_get_sync_http_clientset_cached_openai_clientr   )r6   r   r   r   r   r   r   r   r   r   r   cached_client_new_clients                r@   _get_openai_clientz'OpenAIChatCompletion._get_openai_client`  s#    .4X$>k3/! #MTT#  !99-I$ : M
 mV4
!;9 )(:E#% 4 K K'5 !L ! $ +!-	; %#% 4 J J L# +!- )))-I$ * 
  ..)' / 
 MrB   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 secondsrT   )timechatcompletionswith_raw_responsecreatehasattrrb   r   parser   APITimeoutErrorroundr   r   )r6   r   r   r   r   
start_timer   end_timer   responser   
time_deltas               r@   #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r   c           
      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 - {}rT   )r   r   r   r   r   rb   r   r   r   r   type	r6   r   r   r   r   r   r   r   r   s	            r@   (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   ru   stream_optionsc                 >    t        |      }t        ||d||      }|S )N)r   r   )completion_streamru   custom_llm_providerr   r   )r   r%   )r6   r   r   ru   r   r   r   s          r@   mock_streamingz#OpenAIChatCompletion.mock_streaming  s1     1I0/ (#)
 "!rB   Fr   rX   r   r   print_verbosedynamic_paramsazure_ad_tokenacompletionr   custom_prompt_dictr   r   c                 @	   t         +|   |       	 d}|j                         }|j                  dd       }|j                  dd      }d }|"| t	        j
                  |t        |            }|
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                  dd      }|du rP|du r'|du r#| j!                  ||||||||
|	|||||||      c S | j#                  |||||||||
|	||||||||      c S |j%                  |||||xs i       }|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        $ ro}#tY        |#d-d.      }&tY        |#d/d       }'tY        |#d0tQ        |#            }(tY        |#d1d       })tY        |#d2d       }*|'|)rtY        |)d/d       }'t        |&|(|'|*3      d }#~#ww xY w)4Nr   Fr   stream)ru   provider)ru   r   r  extra_headersr   zMissing model or messagesr   z,Timeout needs to be a float or httpx.Timeoutr   /r*   r   T)r   r   r   rX   r   provider_configru   r   r   r   r   r   r   r   r   r   )r   rX   r   r  r   ru   r   r   r   r   r   r   r   r   r   r   fake_streamr   ru   r   rX   r   r   )r   r   r   ru   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   ru   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)r   r     r   r   r   bodyr   r   r   r  )-rt   
completionr9   popr&   get_provider_chat_configr   rd   should_fake_streamr0   rG   floatr   Timeoutru   rangeasync_streamingr  r   	streamingr   r   pre_callr   	_base_url_uri_referencer   r   
model_dumpr   r'   r   r   r#   r   UnprocessableEntityErrorr|   r   r1   r   r   lenappendremove_index_from_tool_callsgetattr),r6   r   r   rX   r   r   ru   r   r  r   r   r   r  r  r  	logger_fnr   r  r   r   r   r   r   r  inference_paramsr   r  r  _r   r   r   r   stringified_responser   r   new_messagesir   error_headers
error_texterror_response
error_bodyr<   s,                                              r@   r!  zOpenAIChatCompletion.completion  s	   2 	.9b	 %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$i "2"6"6}a"HK"d*!T>kU.B#'#7#7,7(/)10@/=0?&+)1(/,7(/'-,7-9,7/=! $8 $ & $(#3#3)10@/=0?(/&+,7/=)1(/,7(/'-,7-9,7,7/=% $4 $ * +<<#!)(8'5 '2 = D ~+*>#~~(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!%$+(3	 J #$ NU667IJ/7/B/B/D,#--"*$+.B-BD,I	 .  .N,@2@.5.*
 '$.#'#6#6)-m=O)P,7&+/=	 $7 $   21CD 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 FD1J$ '	4 H'"%	 	s   C/P >J"P "J"&P )>J"'P *C/J"P J"P  P "P5%K P  P-B P.BP	P PP 	R P""R.A*RRr  r  c                   K   d }|j                  |||||xs i        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 7 # t        j                   $ r0}t"        j$                  du s|du rt'        ||      }n|Y d }~Cd }~wt(        $ ro}t+        |dd       }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  r*   T)	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   )async_transform_requestr'  r   r*  r   r+  r,  r   r-  r   r   r'   r   r   r#   r   r.  r|   r   r1   r   r2  r   r0   ) r6   r   rX   r   r  ru   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r5  r   r6  r   r   exception_responser   exception_bodyr9  r   s                                    r@   r  z OpenAIChatCompletion.acompletion  s    , $<<+)Mr = 
 
 
AO.2.E.E!#% +# +!-!#1 /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

J%> 22 &&$.+2EFq$ODG   %,Q
D%A"%a<!(FD!9 '9d ; (-?$+,>	4$PM!!YA7! +#)'	 se    G3D2G3A;D71D52A7D7)G3,D7-G35D77G0
%E5/G35G0A*G++G00G3c           
         d|d<   |j                  | j                  ||             | j                  d|||||
||	      }|j                  |d   |dd|j                   i|j
                  j                  d|d	
       | j                  ||||      \  }}||j                  d<   t        ||d||j                  dd       |      }|S )NTr  r   r   Fr  r   r   r   r  r  r  r   r   r   r   ru   r   r   r   r   )updateget_stream_optionsr   r*  r   r+  r,  r   r   r%   get)r6   r   r   r   ru   r   r   r   r   r   r   r   r   r   r   streamwrappers                   r@   r)  zOpenAIChatCompletion.streamingm  s    X##>H#U	
 !% 7 7##% !8 	!
 	z"+w}7L7L6M-NO)33BB$'+	 	 		
 !II'#	 J 
 >E&&'9:+& (#88$4d;%
 rB   c                   K   d }|j                  |||||xs i       }d|d<   |j                  | j                  ||	             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       }t%        |dd       }||rt%        |dd       }|3t'        |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)Nr  Tr  rC  r*   r  r   r  r  r>  r   r   r   rD  r   r   r  r   r  r   z

Original Response: r   ReadTimeouti  )r   rE  rF  r'  r   r*  r   r   r%   rG  r   r.  r|   r   r1   r   rG   r0   r2  r   r   r   r   r^   )r6   r   r   rX   r   r  ru   r   r   r   r   r   r   r   r   r   r   r   r   r5  r   rH  r   r9  r   r;  rA  s                              r@   r(  z$OpenAIChatCompletion.async_streaming  s    & 00+)Mr 1 
 X##>H#U	
 qAU.2.E.E!#% +# +!-! /F 	/ $$z*##*$,'+/3	% % 	 +/*R*R#1# +	 +S + %! FM../AB 3&.(0 +#'88,<d#C&-! %$O 0%  22 &&$.+2EFq$ODG  ( a-G '9d ;%a<!(J!=!(FD!9 (^$+NIt$LM'GHf,E%$/#&q6(*A(-- Q -+	  Aw''=8)(+'+Aw'7'7&8$1!/	  !M2)(/=#(F$'F$1!/	  *(+'*1vh$1!/	 G(sP   AIAC""C #8C"I C""I 5%DII ,DH;;I  Ic                 R    |d|iS |t        |      j                  dk(  rdddiiS i S )zL
        Pass `stream_options` to the data dict for OpenAI requests
        r   zapi.openai.cominclude_usageT)r   hostname)r6   r   r   s      r@   rF  z'OpenAIChatCompletion.get_stream_options  sE     %$n55 8H#5#>#>BR#R(?D*ABB	rB   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   NrT   
embeddingsr   r   rb   r   r   r   )	r6   r   r   r   r   r   r   r   r   s	            r@   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rO  rP  r   s	            r@   "make_sync_openai_embedding_requestz7OpenAIChatCompletion.make_sync_openai_embedding_requestE  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  r   	embedding)r   r   response_typer   r   r  r   r   r   r   )
r   rR  r   r-  r   r'   r0   r   r   r2  )r6   r  r   r   r   r   r   r   r   r   r   r   r   r   r6  returned_responser   r   r9  r:  r;  s                        r@   
aembeddingzOpenAIChatCompletion.aembedding]  s    9	*.*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   E 0B BAB E B 	D="B00D=<A<D88D==E 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)ru   r  r   r  r   )r  r   r  T)
r   r  r   r   r   r   r   r   r   r   Fr   r   r   r   r   r   r  r   r  rV  rW  )r   r   r   rX  r   r  r   r   r   r   )rt   rW  r|   r   rG   r   r0   r*  rZ  r   rT  r   r   r'   r-  r   r2  r   )r6   ru   r  r   r   r   rX   r   r   r   rZ  r   r   r   r   r   sync_embedding_responser   r   r   r9  r:  r;  r<   s                          r@   rW  zOpenAIChatCompletion.embedding  s    	F	"UFoFD%D)D)DKk3/!c;WXX  8<( S !  T! +#1%##! +#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 ?A5C5 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)
NTr   r   r   r   r   r   r   r   r  rV  image_generationr   r   rX  )r  r   r   rT   )r   imagesgenerater-  r   r'   r   r   )r6   r^  r   r   r   r   r   r   r   r   r   r   r   r6  r   s                  r@   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= :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)ru   r^  r   r*   r   r  r   T)
r   r^  r   r   r   r   r   r   r   r   Fr`  r   r   r  r  r   r  rV  ra  rb  r   r  rT   )r"  rG   r   r0   re  r   r*  r   r+  r,  rc  rd  r-  r   r'   r   r   r   r2  )r6   ru   r^  r   rX   r   r   r   r   r   aimg_generationr   r   r   r   	_responser   r   s                     r@   ra  z%OpenAIChatCompletion.image_generation)  s7    A	C"fHHD((=!4Kk3/!c;WXX$&--4T_p~  JR  \c  mt  }C  Q\  kw-  x  x$($;$;!') %< %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 B2D 	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)ru   r  ri  rX   r   r   r   rj  r   r   r   Fr\  ru   ri  r  r   rT   )	async_audio_speechr   r   r   audiospeechr   HttpxBinaryResponseContentr   )r6   ru   r  ri  rX   r   r   r   rj  r   r   rk  r   r   r   s                  r@   audio_speechz!OpenAIChatCompletion.audio_speech{  s     7d?** /!)' +   //# 0 
 C4.44;;BB 

 	
 *83D3DEErB   c                    K   t        t        | j                  d|||
|	|            } |j                  j                  j
                  d|||d| d {   }t        |j                        S 7 w)NTr\  rm  rn  rT   )r   r   r   rp  rq  r   rr  r   )r6   ru   r  ri  rX   r   r   r   rj  r   r   r   r   r   s                 r@   ro  z'OpenAIChatCompletion.async_audio_speech  s      ##!' $ 

 ;,,33:: 

 	
 
 *83D3DEE
s   AA2A0A2r\   r   rs   )NNNNNNNNNFN)NNNNNNNN)	NNNNNNNNN)NNNNN)NNNNNN)0r^   r_   r`   rA   r   r   r   r   r   r   r   r   r&  r   r   r%  r   r   rb   r   Tupler   r   r   r#   r%   r   r   r   r   r!  r   r  r)  r(  rF  rR  rT  r    rZ  rW  re  r!   ra  rr  rs  ro  r   r   s   @r@   r   r   Q  s+
    '+%)		-fk)*	- sm	- c]		- "&"&%)/<u}}T/B%8&*7;48BB #B 3-	B
 c]B uemm+,B c]B smB v{234B !1B 
%+,	-BH !#! ! uemm+,	!
 '! 
tY	! !F      uemm+,	 
 '  
tY	   N *."" '" 	"
 !" 
"2  $#',0!%"&%))-(,!"&#%&*-1&*48/|%| uemm+,| 	|
 | | }| 4.|  )| #| 3-| c]| !| !| |" $#|$ !%|( sm)|* &c]+|, d^-|. !1/|P "&"&%)&*&*)-!48)pp p 	p
 $p p &p 'p uemm+,p #p 3-p c]p smp" d^#p$ !%p& 'p( !1)pp "&"&%)&*)-9 uemm+,9 	9
 9 #9 3-9 c]9 sm9 !9H "&"&%)&*&*)-#uuemm+,u u 	u
 u $u u 'u #u 3-u c]u smu  d^!u" !#un&tn8@	 #  uemm+,	
 ' ,   uemm+,	
 ' < "&"&(,48FF F *	F
 F 'F #F 3-F %F !1F` "&"&%)48VV V 	V *V V #V 3-V c]V !1V 
V~ "&"&&*** * &	*
 * * #* 3-* sm*f "&"&26&*PC}PC PC 	PC
 PC PC #PC 3-PC !/PC smPC 
PC| #'-F-F -F 	-F
 -F #-F 3--F sm-F #-F -F uemm+,-F $-F 
$-Fv !F!F !F 	!F
 !F #!F 3-!F sm!F #!F !F uemm+,!F 
$!FrB   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()
    r]   c                 "    t         |           y rs   r   r   s    r@   rA   zOpenAIFilesAPI.__init__  r   rB   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 Nr6   r   ry  r   r   TrT   r8   r:   r   r   r6   r   r   r   r   r   r   ry  received_argsr   r   rN   rO   s                r@   get_openai_clientz OpenAIFilesAPI.get_openai_client       >B>D%++-1;!x-13C*_'(D$]DG . D  + 3d 3 	 !'  #MrB   create_file_datar   c                    K    |j                   j                  di | d {   }t        di |j                         S 7 wNrT   )filesr   OpenAIFileObjectr-  )r6   r  r   r   s       r@   acreate_filezOpenAIFilesAPI.acreate_file  sD     
 4,,33G6FGG8("5"5"788 H    AA Ac	           	      6   | j                  |||||||      }	|	t        d      |du r.t        |	t              st        d      | j	                  ||	      S  t        t        |	      j                  j                  di |}
t        di |
j                         S )Nr   r   r   r   r   r   ry  jOpenAI client is not initialized. Make sure api_key is passed or OPENAI_API_KEY is set in the environment.T\OpenAI client is not an instance of AsyncOpenAI. Make sure you passed an AsyncOpenAI client.)r  r   rT   )r  
ValueErrorrG   r   r  r   r   r  r   r  r-  )r6   ry  r  r   r   r   r   r   r   r   r   s              r@   create_filezOpenAIFilesAPI.create_file  s     ?C>T>T#% ?U ?
  |  m[9 r  $$!1 %   <4.44;;O>NO8("5"5"788rB   file_content_requestc                    K    |j                   j                  di | d {   }t        |j                        S 7 w)Nrn  rT   )r  r  rr  r   )r6   r  r   r   s       r@   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 )Nr  r  Tr  )r  r   rn  rT   )r  r  rG   r   r  r   r   r  r  rr  r   )r6   ry  r  r   r   r   r   r   r   r   r   s              r@   file_contentzOpenAIFilesAPI.file_content.  s     ?C>T>T#% ?U ?
  |  m[9 r  %%%9+ &   =4.44<<T?ST)83D3DEErB   file_idc                 Z   K   |j                   j                  |       d {   }|S 7 wNr  )r  retriever6   r  r   r   s       r@   aretrieve_filezOpenAIFilesAPI.aretrieve_fileV  s/     
 ',,55g5FF G    +)+c	           	          | j                  |||||||      }	|	t        d      |du r.t        |	t              st        d      | j	                  ||	      S |	j
                  j                  |      }
|
S Nr  r  Tr  )r  r   r  )r  r  rG   r   r  r  r  r6   ry  r  r   r   r   r   r   r   r   r   s              r@   retrieve_filezOpenAIFilesAPI.retrieve_file^  s     ?C>T>T#% ?U ?
  |  m[9 r  &&+ '   !&&///@rB   c                 Z   K   |j                   j                  |       d {   }|S 7 wr  )r  deleter  s       r@   adelete_filezOpenAIFilesAPI.adelete_file  s/     
 ',,33G3DD Er  c	           	          | j                  |||||||      }	|	t        d      |du r.t        |	t              st        d      | j	                  ||	      S |	j
                  j                  |      }
|
S r  )r  r  rG   r   r  r  r  r  s              r@   delete_filezOpenAIFilesAPI.delete_file  s     ?C>T>T#% ?U ?
  |  m[9 r  $$+ %   !&&--g->rB   purposec                    K   t        |t              r&|j                  j                  |       d {   }|S |j                  j                          d {   }|S 7 *7 w)Nr  )rG   r   r  r   )r6   r   r  r   s       r@   alist_fileszOpenAIFilesAPI.alist_files  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 )Nr  r  Tr  )r  r   r  )r  r  rG   r   r  r   r  r   )r6   ry  r   r   r   r   r   r  r   r   r   s              r@   
list_fileszOpenAIFilesAPI.list_files  s     ?C>T>T#% ?U ?
  |  m[9 r  ##+ $  
 gs#$**///@H  %**//1HrB   r\   NFrs   r   )#r^   r_   r`   ra   rA   r   r   r   r%  r   r&  r   r   r   r   r  CreateFileRequestr  r  r   r   r  FileContentRequestrr  r  r  
FileObjectr  r  r   r  r  r  r  r   r   s   @r@   rw  rw    s,    8<# 3- uemm+,	
 c] sm v{234  
%+,	-<9+9 #9 
	9" 8<"9"9 ,"9 	"9
 #"9 uemm+,"9 c]"9 sm"9 v{234"9 
35E+E!FF	G"9H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(rB   rw  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()
    r]   c                 "    t         |           y rs   r   r   s    r@   rA   zOpenAIBatchesAPI.__init__  r   rB   r   r   r   r   r   r   ry  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 r{  r|  r}  s                r@   r  z"OpenAIBatchesAPI.get_openai_client  r  rB   create_batch_datar   c                    K    |j                   j                  di | d {   }t        di |j                         S 7 wr  )batchesr   r"   r-  )r6   r  r   r   s       r@   acreate_batchzOpenAIBatchesAPI.acreate_batch  sD     
 6..55J8IJJ4h11344 Kr  c	           	      6   | j                  |||||||      }	|	t        d      |du r.t        |	t              st        d      | j	                  ||	      S  t        t        |	      j                  j                  di |}
t        di |
j                         S )Nr  r  Tr  )r  r   rT   )r  r  rG   r   r  r   r   r  r   r"   r-  )r6   ry  r  r   r   r   r   r   r   r   r   s              r@   create_batchzOpenAIBatchesAPI.create_batch  s     ?C>T>T#% ?U ?
  |  m[9 r  %%"3= &   >4.66==R@QR4h11344rB   retrieve_batch_datac                    K   t        j                  d|        |j                  j                  di | d {   }t	        di |j                         S 7 w)Nzretrieving batch, args= %srT   )r   debugr  r  r"   r-  )r6   r  r   r   s       r@   aretrieve_batchz OpenAIBatchesAPI.aretrieve_batch?  sV     
 	9;NO7..77N:MNN4h11344 Os   6AAAc	           	      6   | j                  |||||||      }	|	t        d      |du r.t        |	t              st        d      | j	                  ||	      S  t        t        |	      j                  j                  di |}
t        di |
j                         S )Nr  r  Tr  )r  r   rT   )r  r  rG   r   r  r   r   r  r  r"   r-  )r6   ry  r  r   r   r   r   r   r   r   r   s              r@   retrieve_batchzOpenAIBatchesAPI.retrieve_batchH  s     ?C>T>T#% ?U ?
  |  m[9 r  ''$7} (   @4.66??VBUV4h11344rB   cancel_batch_datac                    K   t        j                  d|        |j                  j                  di | d {   }|S 7 w)Nz async cancelling batch, args= %srT   )r   r  r  cancel)r6   r  r   r   s       r@   acancel_batchzOpenAIBatchesAPI.acancel_batchl  sD     
 	?ARS5..55J8IJJ Ks   6A?Ac	           	          | j                  |||||||      }	|	t        d      |du r.t        |	t              st        d      | j	                  ||	      S  |	j
                  j                  di |}
|
S )Nr  r  Tr  )r  r   rT   )r  r  rG   r   r  r  r  )r6   ry  r  r   r   r   r   r   r   r   r   s              r@   cancel_batchzOpenAIBatchesAPI.cancel_batchu  s     ?C>T>T#% ?U ?
  |  m[9 r  %%"3= &   0=((//D2CDrB   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   )r6   r   r  r  r   s        r@   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 )Nr  r  Tr  )r   r  r  r  )r  r  rG   r   r  r  r   )r6   ry  r   r   r   r   r   r  r  r   r   r   s               r@   list_batcheszOpenAIBatchesAPI.list_batches  s     ?C>T>T#% ?U ?
  |  m[9 r  %%+5 &   !((--E-GrB   r\   r  rs   r   NNN) r^   r_   r`   ra   rA   r   r   r   r%  r   r&  r   r   r   r   r  CreateBatchRequestr"   r  r   r   r  RetrieveBatchRequestr  r  CancelBatchRequestBatchr  r  r  r  r   r   s   @r@   r  r    si    8<# 3- uemm+,	
 c] sm v{234  
%+,	-<5-5 #5 
	5" 8<#5#5 .#5 #	#5
 3-#5 uemm+,#5 c]#5 sm#5 v{234#5 
|YsC'=>>	?#5J515 #5 
	5$ $("5"5 2"5 #	"5
 3-"5 uemm+,"5 c]"5 sm"5  "5H- # 
	$ $(## .# #	#
 3-# uemm+,# c]# sm#  #P  $#	" } }	$  $##'## ## 3-	#
 uemm+,# c]# sm# }# }#  #rB   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OpenAIAssistantsAPIr]   Nc                 "    t         |           y rs   r   r   s    r@   rA   zOpenAIAssistantsAPI.__init__  r   rB   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 Nr6   r   r   r   rT   )r8   r:   r   r6   r   r   r   r   r   r   r~  r   rN   rO   r   s               r@   r  z%OpenAIAssistantsAPI.get_openai_client  s     >D%++-1;!x-*_'(D$]DG . #NTNM  #MrB   c                     t               }|Gi }|j                         D ]%  \  }	}
|	dk(  s|	dk(  r|	dk(  r|
|
|d<   |
!|
||	<   ' t        di |}|S |}|S r  )r8   r:   r   r  s               r@   async_get_openai_clientz+OpenAIAssistantsAPI.async_get_openai_client  s     >D%++-1;!x-*_'(D$]DG . (/$/M  #MrB   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  rT   )r  beta
assistantsr   )r6   r   r   r   r   r   r   r  r  r  r  r   request_paramsr   s                 r@   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 rs   rT   r6   r   r   r   r   r   r   r  s           r@   get_assistantsz"OpenAIAssistantsAPI.get_assistants&       	rB   Fc                      y rs   rT   r  s           r@   r  z"OpenAIAssistantsAPI.get_assistants3  r  rB   c                     ||du r| j                  ||||||      S | j                  ||||||      }||	d}|
r|
|d<   |r||d<    |j                  j                  j                  di |}|S )NTr  r  r  r  rT   )r  r  r  r  r   )r6   r   r   r   r   r   r   r  r  r  r  r  r   r  r   s                  r@   r  z"OpenAIAssistantsAPI.get_assistantsB  s     &?d+B,,!') -   ..#% / 
 

 '-N8$&+N7#5=%%0055GGrB   create_assistant_datac                    K   | j                  ||||||      } |j                  j                  j                  di | d {   }	|	S 7 w)Nr  rT   )r  r  r  r   )
r6   r   r   r   r   r   r   r  r   r   s
             r@   async_create_assistantsz+OpenAIAssistantsAPI.async_create_assistantsq  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  rT   )r  r  r  r  r   )r6   r   r   r   r   r   r  r   r  r   r   s              r@   create_assistantsz%OpenAIAssistantsAPI.create_assistants  s     #.3Jd3R//!')&; 0   ..#% / 
 8=%%0077P:OPrB   assistant_idc                    K   | j                  ||||||      }|j                  j                  j                  |       d {   }	|	S 7 w)Nr  r  )r  r  r  r  )
r6   r   r   r   r   r   r   r  r   r   s
             r@   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  r  r  r  r  )r6   r   r   r   r   r   r  r   async_delete_assistantsr   r   s              r@   delete_assistantz$OpenAIAssistantsAPI.delete_assistant  s     #.3Jd3R..!')) /   ..#% / 
 !%%0077\7RrB   	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	completedrT   )	r  r  threadsr   r   r2  r  OpenAIMessagerb   )r6   r  r  r   r   r   r   r   r   r   thread_messageresponse_objs               r@   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 rs   rT   
r6   r  r  r   r   r   r   r   r   r  s
             r@   add_messagezOpenAIAssistantsAPI.add_message	       	rB   c
                      y rs   rT   r   s
             r@   r  zOpenAIAssistantsAPI.add_message	  r  rB   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  rT   )
r  r  r  r  r   r   r2  r  r  rb   )r6   r  r  r   r   r   r   r   r   r  r   r  r  s                r@   r  zOpenAIAssistantsAPI.add_message&	  s     $$)>%%#)!') & 	 	 ..#% / 
 )S(:(:(B(B(K(K(R(R)
%)
 15>8T2:$/N!(A>+>+>+@AL  )A>+>+>+@ALrB   c                    K   | j                  ||||||      }|j                  j                  j                  j	                  |       d {   }	|	S 7 w)Nr  r  )r  r  r  r   r   
r6   r  r   r   r   r   r   r   r   r   s
             r@   async_get_messagesz&OpenAIAssistantsAPI.async_get_messagesR	  sd      44#% 5 
 '++33<<AAIAVV Ws   AAAAaget_messagesc	                      y rs   rT   	r6   r  r   r   r   r   r   r   r	  s	            r@   get_messagesz OpenAIAssistantsAPI.get_messagesk	       	rB   c	                      y rs   rT   r  s	            r@   r  z OpenAIAssistantsAPI.get_messagesy	  r  rB   c	           	          ||du r| j                  |||||||      S | j                  ||||||      }	|	j                  j                  j                  j                  |      }
|
S )NTr  r   r   r   r   r   r   r  r  )r  r  r  r  r   r   )r6   r  r   r   r   r   r   r   r	  r   r   s              r@   r  z OpenAIAssistantsAPI.get_messages	  s     $$)>**#!') +   ..#% / 
 !%%--66;;i;PrB   metadatar   c	                    K   | j                  ||||||      }	i }
|||
d<   |||
d<    |	j                  j                  j                  di |
 d {   }t	        di |j                         S 7 w)Nr  r   r  rT   )r  r  r  r   Threadrb   )r6   r  r   r   r   r   r   r   r   r   r   message_threads               r@   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 rs   rT   
r6   r  r   r   r   r   r   r   r   r  s
             r@   create_threadz!OpenAIAssistantsAPI.create_thread	  r  rB   c
                      y rs   rT   r  s
             r@   r  z!OpenAIAssistantsAPI.create_thread	  r  rB   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   r   r  r   r  rT   )r  r  r  r  r   r  rb   )r6   r  r   r   r   r   r   r   r   r  r   r   r  s                r@   r  z!OpenAIAssistantsAPI.create_thread	  s    , %.D*@++!!')! , 	 	 ..#% / 
 'D'D:++33::BTB.++-..rB   c                    K   | j                  ||||||      }|j                  j                  j                  |       d {   }	t	        di |	j                         S 7 w)Nr  r  rT   )r  r  r  r  r  rb   r  s
             r@   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 rs   rT   	r6   r  r   r   r   r   r   r   r  s	            r@   
get_threadzOpenAIAssistantsAPI.get_thread:
  r  rB   c	                      y rs   rT   r   s	            r@   r!  zOpenAIAssistantsAPI.get_threadH
  r  rB   c	           	          ||du r| j                  |||||||      S | j                  ||||||      }	|	j                  j                  j	                  |      }
t        di |
j                         S )NTr  r  r  rT   )r  r  r  r  r  r  rb   )r6   r  r   r   r   r   r   r   r  r   r   s              r@   r!  zOpenAIAssistantsAPI.get_threadX
  s     "{d':((#!') )   ..#% / 
 !%%--666K(((rB   c                      y rs   rT   rU   s    r@   delete_threadz!OpenAIAssistantsAPI.delete_threadz
  s    rB   additional_instructionsinstructionsru   r  toolsc           	         K   | j                  |	|
||||      }|j                  j                  j                  j	                  |||||||       d {   }|S 7 w)Nr  r  r  r&  r'  r  ru   r(  )r  r  r  runscreate_and_poll)r6   r  r  r&  r'  r  ru   r  r(  r   r   r   r   r   r   r   r   s                    r@   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.  rT   r  r  r+  r  r6   r   r  r  r&  r'  r  ru   r(  r.  r   s              r@   async_run_thread_streamz+OpenAIAssistantsAPI.async_run_thread_stream
  X     #('>(  
 $$1D!.v{{""''..666rB   c
                     |||||||d}
|	|	|
d<    |j                   j                  j                  j                  di |
S r0  r1  r2  s              r@   run_thread_streamz%OpenAIAssistantsAPI.run_thread_stream
  r4  rB   r-  c                      y rs   rT   r6   r  r  r&  r'  r  ru   r  r(  r   r   r   r   r   r   r-  r.  s                    r@   
run_threadzOpenAIAssistantsAPI.run_thread
      ( 	rB   c                      y rs   rT   r8  s                    r@   r9  zOpenAIAssistantsAPI.run_thread
  r:  rB   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  ru   r(  r.  )r  r  r&  r'  r  ru   r  r(  r   r   r   r   r   r   r*  )	r  r3  r-  r  r6  r  r  r+  r,  )r6   r  r  r&  r'  r  ru   r  r(  r   r   r   r   r   r   r-  r.  _clientr   r   s                       r@   r9  zOpenAIAssistantsAPI.run_thread  sm   & "{d':!fn66#%# +!-! 7  33"'!-,C!-%"/ 4 
 
 ###)(?)!!') $    ..#% / 
 &D.))$#)(?)!+ * 
 
 !%%--22BB%$;% C 
 rB   r\   rs   )desc   NN)NNr>  r?  NNr   r  )7r^   r_   r`   rA   r   r   r   r%  r   r&  r   r   r  r   r  AsyncCursorPage	Assistantr  r   r
   r   r  SyncCursorPagerb   r  r  r   r  r  r  r  r  r   r  r  r   OpenAICreateThreadParamsMessager  r  r  r  r!  r%  DictAssistantToolParamRunr-  AssistantEventHandlerAsyncAssistantStreamManagerAsyncAssistantEventHandlerr3  AssistantStreamManagerr6  r9  r   r   s   @r@   r  r    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$ 4.$ }$ $ !345$ #$ 3-$ uemm+,$ c]$ sm$ %$  
!$L77 7 	7
 "*#7 sm7 4.7 }7 !3457   567 
%%?	@7277 7 	7
 "*#7 sm7 4.7 }7 !3457   567 
  5	676   "*#	
 sm 4. }  !345 # 3- uemm+, c] sm  T]!"   56#$ 
4s?	#% *   "*#	
 sm 4. }  !345 # 3- uemm+, c] sm  gen-!"   56#$ 
% L 9=#XX X "*#	X
 smX 4.X }X X !345X #X 3-X uemm+,X c]X smX"   56#XrB   r  )Or   rH   typingr   r   r   r   r   r   r	   r
   r   r   r   r   urllib.parser   r   aiohttpr   r   r   r   #openai.types.beta.assistant_deletedr   openai.types.file_deletedr   pydanticr   typing_extensionsr   r|   r   litellm._loggingr   litellm.constantsr   *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.types.utilsr    r!   r"   r#   r$   litellm.utilsr%   r&   r'   types.llms.openaibaser+   chat.gpt_5_transformationr-   chat.o_series_transformationr.   common_utilsr/   r0   r1   rx   rz   r3   rd   r   r   rw  r  r  rT   rB   r@   <module>r`     s         " %  & @ 1  &    + 1 S I O R I   #  7 =  *+ #% ( (VV
: V
r+D zF7M zFz#WW Wt_w _DU' UrB   