
    AHj                    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)TYPE_CHECKINGAnyAsyncIteratorCallable	CoroutineIterableIteratorListLiteralOptional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__)r7   locals_keyvalues       R/root/tools/cai/cai_env/lib/python3.12/site-packages/litellm/llms/openai/openai.py__init__zMistralEmbeddingConfig.__init__H   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__r;   
startswith
isinstancetypesFunctionTypeBuiltinFunctionTypeclassmethodstaticmethod)clskvs      rA   
get_configz!MistralEmbeddingConfig.get_configP   st     **,
1<<%&&-- 	  qD
 	
 
s   AA6c                     dgS Nencoding_format r7   s    rA   get_supported_openai_paramsz2MistralEmbeddingConfig.get_supported_openai_paramsb   s    
 	
rC   non_default_paramsoptional_paramsc                 L    |j                         D ]  \  }}|dk(  s||d<    |S rS   )r;   )r7   rX   rY   paramr@   s        rA   map_openai_paramsz(MistralEmbeddingConfig.map_openai_paramsg   s:    .446 	;LE5))5: 12	; rC   returnN)
__name__
__module____qualname____doc__rB   rL   rQ   rW   dictr\   rU   rC   rA   r4   r4   C   s@    4	4 
 
"

D 4 rC   r4   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 r6   r8   )r7   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   r>   r?   r@   s                   rA   rB   zOpenAIConfig.__init__   sF     (--/!--/ 	4JCf}!2U3	4rC   c                      t         |          S N)superrQ   )rN   r=   s    rA   rQ   zOpenAIConfig.get_config   s    w!##rC   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
        rv   )	openaiOSeriesConfigis_model_o_series_modelrW   openAIGPT5Configis_model_gpt_5_modellitellmopenAIGPTAudioConfigis_model_gpt_audio_modelopenAIGPTConfig)r7   rv   s     rA   rW   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SrC   rX   rY   c                 l    | j                  |      }|j                         D ]  \  }}||v s|||<    |S rt   )rW   r;   )r7   rX   rY   rv   supported_openai_paramsr[   r@   s          rA   _map_openai_paramszOpenAIConfig._map_openai_params   sL     #'"B"B5"I.446 	/LE5//).&	/ rC   messagesc                     |S rt   rU   )r7   r   rv   s      rA   _transform_messagesz OpenAIConfig._transform_messages   s	     rC   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 ) rx   )rX   rY   rv   r   )	ry   rz   r\   r{   r|   r}   r~   r   r   )r7   rX   rY   rv   r   s        rA   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 
 	
rC   error_messagestatus_codeheadersc                     t        |||      S )Nr   messager   )r1   )r7   r   r   r   s       rA   get_error_classzOpenAIConfig.get_error_class   s     #!
 	
rC   litellm_paramsc                 6    | j                  ||      }||d|S )N)r   rv   )rv   r   )r   )r7   rv   r   rY   r   r   s         rA   transform_requestzOpenAIConfig.transform_request  s)     ++XU+KHHHHrC   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(   jsonrc   )r7   rv   r   r   r   r   r   rY   r   r   r   r   final_response_objs                rA   transform_responsezOpenAIConfig.transform_response  s{     	0A0AB=I=Q=Q&&'9:!, , 1 1 3&4(,*>*>?"&|';';"<	
 "!rC   api_basec                     dd| i|S )NAuthorizationBearer rU   )r7   r   rv   r   rY   r   r   r   s           rA   validate_environmentz!OpenAIConfig.validate_environment+  s"     wwi0

 	
rC   streaming_responsesync_streamc                     t        |||      S )N)r   r   r   )$OpenAIChatCompletionResponseIterator)r7   r   r   r   s       rA   get_model_response_iteratorz(OpenAIConfig.get_model_response_iterator:  s     41#
 	
rC   )NNNNNNNNNNNNNN)F)0r_   r`   ra   rb   rf   r   int__annotations__rg   r   strrc   rh   listri   rj   rk   rl   rm   rn   ro   rp   rq   rB   rL   rQ   rW   r   r
   AllMessageValuesr   boolr\   httpxHeadersr   r   r   Responser$   LiteLLMLoggingObjr   r   r   r	   r   r   __classcell__r=   s   @rA   re   re   n   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>	


 


rC   re   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'}
        NrU   )r%   	Exception)r7   r   es      rA   chunk_parserz1OpenAIChatCompletionResponseIterator.chunk_parserH  s*    	&/// 	G	s   
 	N)r_   r`   ra   rc   r%   r   rU   rC   rA   r   r   G  s    $ +> rC   r   c            *           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ededee   dededededee   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#	 	 	 	 	 	 	 	 dAd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$	 	 	 	 	 	 	 	 	 	 dBd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   ded   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d0       Z' e       dededeeej                  f   defd1       Z(	 	 	 	 	 dCd2eded e)deded	ee   d
ee   dee   ded   fd3Z*	 	 	 	 	 	 dDded2eded e)ded	ee   d
ee   dee	   ded   de)f fd4Z+	 	 	 	 	 	 dDd5eded ededed	ee   d
ee   dee   d%ee   fd6Z,	 	 	 	 	 	 	 dEdee   d5edededed	ee   d
ee   d ee-   dee   d%ee   de-fd7Z.	 	 	 dFded2ed8eded	ee   d
ee   dee   d9ee   de	deeej                  f   d:ee   ded   de/fd;Z0	 	 d>ded2ed8eded	ee   d
ee   dee   d9ee   de	deeej                  f   ded   de/fd<Z1 xZ2S )GOpenAIChatCompletionr^   Nc                 "    t         |           y rt   ru   rB   r7   r=   s    rA   rB   zOpenAIChatCompletion.__init__S      rC   clientorganizationmax_retriesc                 *    |||_         |||_        y y rt   )r   r   )r7   r   r   r   s       rA   _set_dynamic_params_on_clientz2OpenAIChatCompletion._set_dynamic_params_on_clientV  s%     #".F"!,F #rC   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   )r9   rH   r   r1   formatget_cached_openai_clientr   r   r   _get_async_http_client_get_sync_http_clientset_cached_openai_clientr   )r7   r   r   r   r   r   r   r   r   r   r   cached_client_new_clients                rA   _get_openai_clientz'OpenAIChatCompletion._get_openai_clienta  s#    .4X$>k3/! #MTT#  !99-I$ : M
 mV4
!;9 )(:E#% 4 K K'5 !L ! $ +!-	; %#% 4 J J L# +!- )))-I$ * 
  ..)' / 
 MrC   openai_aclientdatar   c                 x  K   t        j                          }	  |j                  j                  j                  j                  di |d|i d{   }t        j                          }t        |d      rt        |j                        }ni }|j                         }	|j                  d      st        |	d      st        dd|	d	      ||	fS 7 ~# 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   stream
model_dump  7Empty or invalid response from LLM endpoint. Received: 8. Check the reverse proxy or model server configuration.r   r+   z - timeout value=z, time taken=z secondsrU   )timechatcompletionswith_raw_responsecreatehasattrrc   r   parsegetr1   r   APITimeoutErrorroundr   r   )r7   r   r   r   r   
start_timer   end_timer   responser   
time_deltas               rA   #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88H%gh.M! #UV^Ua  bZ  [  H$$!" %% 	yy{Hx*4a8JII,WI]:,hWWIG 	G	sH   D:7C CA=C D:C D7#AD$$D70D22D77D:r   c           
         d}	  |j                   j                  j                  j                  di |d|i}t	        |d      rt        |j                        }ni }|j                         }|j                  d      st	        |d      st        dd|d	      ||fS # t        $ r  t        $ r.}|%t        d
j                  ||t        |                  |d}~ww xY w)r   Nr   r   r   r   r   r   r   r   z9error - {}, Received response - {}, Type of response - {}rU   )r   r   r   r   r   rc   r   r   r   r1   r   r   type	r7   r   r   r   r   r   r   r   r   s	            rA   (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88H%gh.M! #UV^Ua  bZ  [  H$$ 	 	'OVV<l);  	s   BB C0)CCr   rv   r   rY   r   r   c                   K   ddl m} ddlm}	 t        j
                  |j                  xs g z   }
 |j                  dt        |
             |j                  dg       } |j                  dt        |t              rt        |      n|rdnd       |j                  dd	      }|
D ]  }	 t        ||	      rpt        |d
      s|j                  |||||||       d{   \  }}|r>|r|j                         ni }||d<   |j                  ||||||||       d{   }|c S  y7 J7 # t         $ r(} |j"                  dt%        |              Y d}~d}~ww xY ww)ad  
        Call agentic completion hooks for all custom loggers (OpenAI Chat Completions API).

        1. Call async_should_run_chat_completion_agentic_loop to check if agentic loop is needed
        2. If yes, call async_run_chat_completion_agentic_loop to execute the loop

        Returns the response from agentic loop, or None if no hook runs.
        r   r   )CustomLoggerz(LiteLLM.AgenticHooks: callbacks_count=%stoolsz$LiteLLM.AgenticHooks: tools_count=%sr-   custom_llm_providerr   -async_should_run_chat_completion_agentic_loop)r   rv   r   r  r   r  kwargsN)r  rv   r   r   rY   r   r   r  zLLiteLLM.AgenticHookError: Exception in agentic completion hooks for OpenAI: )litellm._loggingr   "litellm.integrations.custom_loggerr  r}   	callbacksdynamic_success_callbacksdebuglenr   rH   r   r   r  r:   &async_run_chat_completion_agentic_loopr   	exceptionr   )r7   r   rv   r   rY   r   r   r   r   r  r  r  r  callback
should_run
tool_callskwargs_with_provideragentic_responser   s                      rA   %_call_agentic_completion_hooks_openaiz:OpenAIChatCompletion._call_agentic_completion_hooks_openai  s    $ 	4C%%)N)N)TRTU	GYX##GR02$UD1CJEqq	

 -001FQ! 3	H2h5" "Q ! 'TT!)#!)#%,?- U  "" " 6DN//1 -
 0 -1 #+"Q"Q&0&+)1)10?,7'-'; #R 	# 	 )  0/]3	j Q*	  (((bcfghcibjk s`   B%E(D+ ED+D'>D+D)D+!E'D+)D++	E4EEEEstream_optionsc                 >    t        |      }t        ||d||      }|S )N)r   r   )completion_streamrv   r  r   r  )r    r&   )r7   r   r   rv   r  r  r   s          rA   mock_streamingz#OpenAIChatCompletion.mock_streamingP  s1     1I0/ (#)
 "!rC   Fr   print_verbosedynamic_paramsazure_ad_tokenacompletionr   custom_prompt_dictr  r   c                 h	   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 rQ|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/                  ||j0                  ||j2                  j4                  ||d       | j7                  ||||      \  }} ||j8                  d<   | j;                         }!|j=                  ||	|!d|i       t?        |!||      }"|du r%| jA                  tC        tD        |"      |||      c S |"c S  y # t        $ r d }Y Bw xY w# tF        jH                  $ r0}#tJ        jL                  du s|du rtO        |#|      }n|#Y d }#~#d }#~#wtP        $ r'}#| |dtS        |#              d tS        |#      v sd!tS        |#      v r|| |d"       g }$t!        tU        |      d#z
        D ]_  }%|$jW                  ||%          ||%   d$   ||%d#z      d$   k(  s,||%   d$   d%k(  r|$jW                  d&d'd(       L|$jW                  d%d'd(       a |$jW                  |d)          |$}nNd*tS        |#      v r||}$|$jW                  d%d'd(       |$}n&d+tS        |#      v rtK        jX                  |,       n|#Y d }#~#$d }#~#ww xY w# t        $ r}#|#d }#~#wtP        $ ro}#t[        |#d-d.      }&t[        |#d/d       }'t[        |#d0tS        |#            }(t[        |#d1d       })t[        |#d2d       }*|'|)rt[        |)d/d       }'t        |&|(|'|*3      d }#~#ww xY w)4Nr   Fr  r   )rv   provider)rv   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   rY   r   provider_configrv   r   r   r   r   r   r   r   r   r  r   )r   rY   r   r$  r   rv   r   r   r   r   r   r   r   r   r   r   fake_streamr   rv   r   rY   r   r   )r   r   r   rv   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   rv   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 )r1  contentz"Last message must have role `user`z3unknown field: parameter index is not a valid field)r   r   r   r   r   r   bodyr   r   r   r7  ).ru   
completionr:   popr'   get_provider_chat_configr   
ValueErrorre   should_fake_streamr1   rH   floatr   Timeoutrv   rangeasync_streamingr  r   	streamingr   r   pre_callr   	_base_url_uri_referencer  r   r   r   r(   r  r   r$   r   UnprocessableEntityErrorr}   r   r2   r   r   r  appendremove_index_from_tool_callsgetattr),r7   r   r   rY   r   r   rv   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,                                              rA   r9  zOpenAIChatCompletion.completionb  s4   2 	.9g	 %K.335-=-A-A $.N &6%9%9(E%JF48O".53D+&;&T&T#l;N.O'O &"..-@@5HQW A  4; 1} 0!c;VWWgu-j7 " #J 
 #.3F(3R*=)>aw'G$ m j "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1Em 9 " +&*O+~ 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 FD1J$ '	4 H'"%	 	s   <P+  J$ 0BP+ ?J6P+ "J6(P+ +>J6)P+ ,C/J6P+ J6P+ "P+ $J3/P+ 2J33P+ 6P(	%K4.P+ 4P(B P#BP#P+ #P((P+ +	R14P66R1A*R,,R1r$  r%  c                 8  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|      }| j                  |||||d|       d {   }||}|du r%| j                  t        t        |      |||      c S |c S  y 7 57 7 <# t         j"                  $ r0}t$        j&                  du s|du rt)        ||      }n|Y d }~jd }~wt*        $ ro}t-        |dd       }t-        |dd      }t-        |dd       }t-        |dd       }||rt-        |dd       }t-        |dt/        |            } t1        || ||      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   F)r   rv   r   rY   r   r   r   r0  r   r   r   r7  r   r8  )async_transform_requestr@  r   rC  r   rD  rE  r   r   r   r   r(   r  r  r   r$   r   rF  r}   r   r2   r   rI  r   r1   )!r7   r   rY   r   r$  rv   r   r   r   r   r   r   r   r   r   r   r   r  r%  r   r   r   rL  r   rM  r   r  r   exception_responser   exception_bodyrP  r   s!                                    rA   r  z OpenAIChatCompletion.acompletione  s    , $<<+)Mr = 
 
 
 _	A\.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&-	&" *.)S)S/%$3 + #1 *T * $  $/)9&$&..!%m5G!H$/#'5	 /   *)S_	
J%,$, 22 &&$.+2EFq$ODG   %,Q
D%A"%a<!(FD!9 '9d ; (-?$+,>	4$PM!!YA7! +#)'	 sw    HEHA;E2E3A,EE .EHEHEEH1%FHH(A*HHH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  rv   r  r   r  r   )updateget_stream_optionsr   rC  r   rD  rE  r  r   r&   r   )r7   r   r   r   rv   r   r   r   r   r   r   r   r  r   r   streamwrappers                   rA   rB  zOpenAIChatCompletion.streaming  s    X##>H#U	
 !% 7 7##% !8 	!
 	z"+w}7L7L6M-NO)33BB$'+	 	 		
 !II'#	 J 
 >E&&'9:+& (#88$4d;%
 rC   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   r[  r+   rU  r   r)  r+  rV  r   r   r  r\  r   r   r   r   r7  r   z

Original Response: r8  ReadTimeouti  )r   r]  r^  r@  r   rC  r   r   r&   r   r   rF  r}   r   r2   r   rH   r1   rI  r   r   r   r   r_   )r7   r   r   rY   r   r$  rv   r   r   r   r   r   r   r   r   r   r  r   r   r   rL  r   r_  r   rP  r   rR  rY  s                               rA   rA  z$OpenAIChatCompletion.async_streaming  s    ( 00+)Mr 1 
 X##>H#U	
 q W	AV.2.E.E!#% +# +!-!#1 /F 
/ $$z*##*$,'+/3	% % 	 +/*R*R#1# +	 +S + %! FM../AB 3&.(0 +#'88,<d#C&-! %$QW	2%  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6%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)r7   r  r   s      rA   r^  z'OpenAIChatCompletion.get_stream_options  sE     %$n55 8H#5#>#>BR#R(?D*ABB	rC   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   NrU   
embeddingsr   r   rc   r   r   r   )	r7   r   r   r   r   r   r   r   r   s	            rA   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rf  rg  r  s	            rA   "make_sync_openai_embedding_requestz7OpenAIChatCompletion.make_sync_openai_embedding_request  su    		L=33EELL  'L <//0G#))+HH$$ 	G	s   AA 	A%A  A%r,  c           	        K   	 | j                  d||||	||
      }| j                  ||||       d {   \  }}||j                  d<   |j                         }|j	                  ||d|i|       t        ||d|      }|S 7 N# t        $ r'}|j	                  ||d|it        |             |d }~wt        $ r}|j	                  ||d|it        |             t        |d	d
      }t        |dd       }t        |dt        |            }t        |dd       }||rt        |dd       }t        |||      d }~ww xY ww)NTr   r   r   r   r   r   r   rV  r   r*  r,  r   r-  r   	embedding)r   r   response_typer   r   r   r   r   r   r   )
r   ri  r   r   r   r(   r1   r   r   rI  )r7   r,  r   r   r   r   r   r   r   r   r   r   r   r   rM  returned_responser   r   rP  rQ  rR  s                        rA   
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)rv   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*  rn  ro  )r   r   r   rp  r   r   r   r   r   r   )ru   ro  r}   r   rH   r   r1   rC  rr  r   rk  r   r   r(   r   r   rI  r   )r7   rv   r,  r   r   r   rY   r   r   r   rr  r   r   r   r   r   sync_embedding_responser   r   r   rP  rQ  rR  r=   s                          rA   ro  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           	      l  K   d }	 | j                  d||||	|
|      }|r||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   r*  rn  image_generationr   r   rp  )r,  r   r   rU   )r   imagesgenerater   r   r(   r   r   )r7   ru  r   r   r   r   r   r   r   r   r   r   r   r   rM  r   s                   rA   aimage_generationz&OpenAIChatCompletion.aimage_generationv  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;   B4AB B	8B B4B 	B1B,,B11B4c                 l   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       |r||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)rv   ru  r   r+   r   r'  r   T)r   ru  r   r   r   r   r   r   r   r   r   Frw  r   r   r)  r+  r"  r   r*  rn  rx  ry  r   r   rU   )r:  rH   r   r1   r|  r   rC  r   rD  rE  rz  r{  r   r   r(   r   r   r   rI  )r7   rv   ru  r   rY   r   r   r   r   r   aimg_generationr   r   r   r   r   	_responser   r   s                      rA   rx  z%OpenAIChatCompletion.image_generation  sK    C	C"fHHD((=!4Kk3/!c;WXX$&--4T_p~  JR  \c  mt  }C  Q\  kw  AH-  I  I$($;$;!') %< %M   %-- /7=;P;P:Q1RS - 7 7 F F#'+/	! ! 	 (/_%5,,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 B9D 	F3"D??F3A#F..F3voiceprojectaspeechc                    |!|du r| j                  |||||||||	|
||      S | j                  d|||
|	||      } t        t        |      j                  j
                  j                  d|||d|}t        |j                        S )NT)rv   r,  r  rY   r   r   r   r  r   r   r   r   Frm  rv   r  r,  r   rU   )	async_audio_speechr   r   r   audiospeechr   HttpxBinaryResponseContentr   )r7   rv   r,  r  rY   r   r   r   r  r   r   r  r   r   r   r   s                   rA   audio_speechz!OpenAIChatCompletion.audio_speech  s      7d?** /!)'- +   //#) 0 
 C4.44;;BB 

 	
 *83D3DEErC   c                    K   t        t        | j                  d|||
|	||            } |j                  j                  j
                  d|||d| d {   }t        |j                        S 7 w)NTrm  r  r  rU   )r   r   r   r  r  r   r  r   )r7   rv   r,  r  rY   r   r   r   r  r   r   r   r   r   r   s                  rA   r  z'OpenAIChatCompletion.async_audio_speech,  s      ##!'- $ 
 ;,,33:: 

 	
 
 *83D3DEE
s   AA3A1A3r]   r   rt   )NNNNNNNNNFN)NNNNNNNN)
NNNNNNNNNN)NNNNN)NNNNNN)NNNNNNNNNN)3r_   r`   ra   rB   r   r   r   r   r   r   r   r   r?  r   r   r>  r   r   rc   r   Tupler   r   r  r   r
   Dictr  r$   r&   r  r   r   r9  r   r  rB  rA  r^  ri  rk  r!   rr  ro  r|  r"   rx  r  r  r  r   r   s   @rA   r   r   R  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	& &P '' ' uemm+,	'
 '' 
tY	' 'RVV V t*	V
 V 'V V V 
#Vz *."" '" 	"
 !" 
"2  $#',0!%"&%))-(,!"&#%&*-1&*48/A%A uemm+,A 	A
 A A }A 4.A  )A #A 3-A c]A !A !A A" $#A$ !%A( sm)A* &c]+A, d^-A. !1/AZ "&"&%)&*&*)-!48)}} } 	}
 $} } &} '} uemm+,} #} 3-} c]} sm}" d^#}$ !%}& '}( !1)}J "&"&%)&*)-9 uemm+,9 	9
 9 #9 3-9 c]9 sm9 !9H "&"&%)&*&*)-48%wuemm+,w w 	w
 w $w w 'w #w 3-w c]w smw  d^!w" !#w$ !1%wr&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- $-l "&"&26&*"&SC}SC SC 	SC
 SC SC #SC 3-SC !/SC smSC $SC 
SCB #'480F0F 0F 	0F
 0F #0F 3-0F sm0F #0F 0F uemm+,0F $0F !10F 
$0F| 48#F#F #F 	#F
 #F ##F 3-#F sm#F ##F #F uemm+,#F !1#F 
$#FrC   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 rt   r   r   s    rA   rB   zOpenAIFilesAPI.__init__]  r   rC   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 Nr7   r   r  r   r   TrU   r9   r;   r   r   r7   r   r   r   r   r   r   r  received_argsr   r   rO   rP   s                rA   get_openai_clientz OpenAIFilesAPI.get_openai_client`       >B>D%++-  1;!x-13C*_'(D$]DG  D  + 3d 3 	 !'  #MrC   create_file_datar   c                    K    |j                   j                  di | d {   }t        di |j                         S 7 wNrU   )filesr   OpenAIFileObjectr   )r7   r  r   r   s       rA   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   r  jOpenAI client is not initialized. Make sure api_key is passed or OPENAI_API_KEY is set in the environment.T\OpenAI client is not an instance of AsyncOpenAI. Make sure you passed an AsyncOpenAI client.)r  r   rU   )r  r<  rH   r   r  r   r   r  r   r  r   )r7   r  r  r   r   r   r   r   r   r   r   s              rA   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8rC   file_content_requestc                    K    |j                   j                  di | d {   }t        |j                        S 7 w)Nr  rU   )r  r5  r  r   )r7   r  r   r   s       rA   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   r  rU   )r  r<  rH   r   r  r   r   r  r5  r  r   )r7   r  r  r   r   r   r   r   r   r   r   s              rA   file_contentzOpenAIFilesAPI.file_content  s     ?C>T>T#% ?U ?
  |  m[9 r  %%%9+ &   =4.44<<T?ST)83D3DEErC   file_idc                 Z   K   |j                   j                  |       d {   }|S 7 wNr  )r  retriever7   r  r   r   s       rA   aretrieve_filezOpenAIFilesAPI.aretrieve_file  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<  rH   r   r  r  r  r7   r  r  r   r   r   r   r   r   r   r   s              rA   retrieve_filezOpenAIFilesAPI.retrieve_file  s     ?C>T>T#% ?U ?
  |  m[9 r  &&+ '   !&&///@rC   c                 Z   K   |j                   j                  |       d {   }|S 7 wr  )r  deleter  s       rA   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<  rH   r   r  r  r  r  s              rA   delete_filezOpenAIFilesAPI.delete_file  s     ?C>T>T#% ?U ?
  |  m[9 r  $$+ %   !&&--g->rC   purposec                    K   t        |t              r&|j                  j                  |       d {   }|S |j                  j                          d {   }|S 7 *7 w)Nr  )rH   r   r  r   )r7   r   r  r   s       rA   alist_fileszOpenAIFilesAPI.alist_files6  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<  rH   r   r  r   r  r   )r7   r  r   r   r   r   r   r  r   r   r   s              rA   
list_fileszOpenAIFilesAPI.list_filesA  s     ?C>T>T#% ?U ?
  |  m[9 r  ##+ $  
 gs#$**///@H  %**//1HrC   r]   NFrt   r   )#r_   r`   ra   rb   rB   r   r   r   r>  r   r?  r   r   r   r   r  CreateFileRequestr  r  r   r   r  FileContentRequestr  r  r  
FileObjectr  r  r   r  r  r  r  r   r   s   @rA   r  r  R  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(rC   r  c                       e Zd ZdZd fdZ	 	 ddee   dee   deee	j                  f   dee   dee   d	eeeef      d
edeeeef      fdZdededefdZ	 dd
ededee   dee   deee	j                  f   dee   dee   d	eeeef      deeeeeef   f   fdZdededefdZ	 dd
ededee   dee   deee	j                  f   dee   dee   d	ee   fdZdededefdZ	 dd
ededee   dee   deee	j                  f   dee   dee   d	ee   fdZ	 	 ddedee   dee   fdZ	 	 	 dd
edee   dee   deee	j                  f   dee   dee   dee   dee   d	ee   fdZ xZS )OpenAIBatchesAPIz
    OpenAI methods to support for batches
    - create_batch()
    - retrieve_batch()
    - cancel_batch()
    - list_batch()
    r^   c                 "    t         |           y rt   r   r   s    rA   rB   zOpenAIBatchesAPI.__init__u  r   rC   r   r   r   r   r   r   r  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                rA   r  z"OpenAIBatchesAPI.get_openai_clientx  r  rC   create_batch_datar   c                    K    |j                   j                  di | d {   }t        di |j                         S 7 wr  )batchesr   r#   r   )r7   r  r   r   s       rA   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   rU   )r  r<  rH   r   r  r   r   r  r   r#   r   )r7   r  r  r   r   r   r   r   r   r   r   s              rA   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4rC   retrieve_batch_datac                    K   t        j                  d|        |j                  j                  di | d {   }t	        di |j                         S 7 w)Nzretrieving batch, args= %srU   )r   r  r  r  r#   r   )r7   r  r   r   s       rA   aretrieve_batchz OpenAIBatchesAPI.aretrieve_batch  sV     
 	9;NO7..77N:MNN4h11344 O   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   rU   )r  r<  rH   r   r  r   r   r  r  r#   r   )r7   r  r  r   r   r   r   r   r   r   r   s              rA   retrieve_batchzOpenAIBatchesAPI.retrieve_batch  s     ?C>T>T#% ?U ?
  |  m[9 r  ''$7} (   @4.66??VBUV4h11344rC   cancel_batch_datac                    K   t        j                  d|        |j                  j                  di | d {   }t	        di |j                         S 7 w)Nz async cancelling batch, args= %srU   )r   r  r  cancelr#   r   )r7   r  r   r   s       rA   acancel_batchzOpenAIBatchesAPI.acancel_batch  sV     
 	?ARS5..55J8IJJ4h11344 Kr  c	           	      P   | j                  |||||||      }	|	t        d      |du r.t        |	t              st        d      | j	                  ||	      S t        |	t
              st        d       |	j                  j                  di |}
t        di |
j                         S )Nr  r  Tr  )r  r   zVOpenAI client is not an instance of OpenAI. Make sure you passed a sync OpenAI client.rU   )
r  r<  rH   r   r  r   r  r  r#   r   )r7   r  r  r   r   r   r   r   r   r   r   s              rA   cancel_batchzOpenAIBatchesAPI.cancel_batch  s     ?C>T>T#% ?U ?
  |  m[9 r  %%"3= &  
 -0h  0=((//D2CD4h11344rC   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   )r7   r   r  r  r   s        rA   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<  rH   r   r  r  r   )r7   r  r   r   r   r   r   r  r  r   r   r   s               rA   list_batcheszOpenAIBatchesAPI.list_batches-  s     ?C>T>T#% ?U ?
  |  m[9 r  %%+5 &   !((--E-GrC   r]   r  rt   r   r  )r_   r`   ra   rb   rB   r   r   r   r>  r   r?  r   r   r   r   r  CreateBatchRequestr#   r  r   r   r  RetrieveBatchRequestr  r  CancelBatchRequestr  r  r  r  r   r   s   @rA   r  r  l  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5-5 #5 
	5$ $((5(5 .(5 #	(5
 3-(5 uemm+,(5 c](5 sm(5  (5Z  $#	" } }	$  $##'## ## 3-	#
 uemm+,# c]# sm# }# }#  #rC   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 rt   r   r   s    rA   rB   zOpenAIAssistantsAPI.__init__T  r   rC   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 Nr7   r   r   r   rU   )r9   r;   r   r7   r   r   r   r   r   r   r  r   rO   rP   r   s               rA   r  z%OpenAIAssistantsAPI.get_openai_clientW  s     >D%++-  1;!x-*_'(D$]DG  #NTNM  #MrC   c                     t               }|Gi }|j                         D ]%  \  }	}
|	dk(  s|	dk(  r|	dk(  r|
|
|d<   |
!|
||	<   ' t        di |}|S |}|S r  )r9   r;   r   r  s               rA   async_get_openai_clientz+OpenAIAssistantsAPI.async_get_openai_clientp  s     >D%++-  1;!x-*_'(D$]DG  (/$/M  #MrC   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  rU   )r  beta
assistantsr   )r7   r   r   r   r   r   r   r  r  r  r  r   request_paramsr   s                 rA   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 rt   rU   r7   r   r   r   r   r   r   r  s           rA   get_assistantsz"OpenAIAssistantsAPI.get_assistants       	rC   Fc                      y rt   rU   r  s           rA   r  z"OpenAIAssistantsAPI.get_assistants  r  rC   c                     ||du r| j                  ||||||      S | j                  ||||||      }||	d}|
r|
|d<   |r||d<    |j                  j                  j                  di |}|S )NTr  r  r  r  rU   )r  r  r  r  r   )r7   r   r   r   r   r   r   r  r  r  r  r  r   r  r   s                  rA   r  z"OpenAIAssistantsAPI.get_assistants  s     &?d+B,,!') -   ..#% / 
 

 '-N8$&+N7#5=%%0055GGrC   create_assistant_datac                    K   | j                  ||||||      } |j                  j                  j                  di | d {   }	|	S 7 w)Nr  rU   )r  r  r  r   )
r7   r   r   r   r   r   r   r  r   r   s
             rA   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  rU   )r   r  r  r  r   )r7   r   r   r   r   r   r  r   r   r   r   s              rA   create_assistantsz%OpenAIAssistantsAPI.create_assistants	  s     #.3Jd3R//!')&; 0   ..#% / 
 8=%%0077P:OPrC   assistant_idc                    K   | j                  ||||||      }|j                  j                  j                  |       d {   }	|	S 7 w)Nr  r  )r  r  r  r  )
r7   r   r   r   r   r   r   r  r   r   s
             rA   async_delete_assistantz*OpenAIAssistantsAPI.async_delete_assistant3	  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  )r7   r   r   r   r   r   r  r   async_delete_assistantsr   r   s              rA   delete_assistantz$OpenAIAssistantsAPI.delete_assistantJ	  s     #.3Jd3R..!')) /   ..#% / 
 !%%0077\7RrC   	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	completedrU   )	r  r  threadsr   r   rI  r  OpenAIMessagerc   )r7   r  r  r   r   r   r   r   r   r   thread_messageresponse_objs               rA   a_add_messagez!OpenAIAssistantsAPI.a_add_messagem	  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 rt   rU   
r7   r  r  r   r   r   r   r   r   r  s
             rA   add_messagezOpenAIAssistantsAPI.add_message	       	rC   c
                      y rt   rU   r  s
             rA   r  zOpenAIAssistantsAPI.add_message	  r  rC   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  rU   )
r  r  r  r  r   r   rI  r  r  rc   )r7   r  r  r   r   r   r   r   r   r  r   r  r  s                rA   r  zOpenAIAssistantsAPI.add_message	  s     $$)>%%#)!') & 	 	 ..#% / 
 )S(:(:(B(B(K(K(R(R)
%)
 15>8T2:$/N!(A>+>+>+@AL  )A>+>+>+@ALrC   c                    K   | j                  ||||||      }|j                  j                  j                  j	                  |       d {   }	|	S 7 w)Nr  r  )r  r  r  r   r   
r7   r  r   r   r   r   r   r   r   r   s
             rA   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 rt   rU   	r7   r  r   r   r   r   r   r   r  s	            rA   get_messagesz OpenAIAssistantsAPI.get_messages	       	rC   c	                      y rt   rU   r!  s	            rA   r"  z OpenAIAssistantsAPI.get_messages
  r#  rC   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   )r7   r  r   r   r   r   r   r   r  r   r   s              rA   r"  z OpenAIAssistantsAPI.get_messages
  s     $$)>**#!') +   ..#% / 
 !%%--66;;i;PrC   metadatar   c	                    K   | j                  ||||||      }	i }
|||
d<   |||
d<    |	j                  j                  j                  di |
 d {   }t	        di |j                         S 7 w)Nr  r   r'  rU   )r  r  r  r   Threadrc   )r7   r'  r   r   r   r   r   r   r   r   r   message_threads               rA   async_create_threadz'OpenAIAssistantsAPI.async_create_thread6
  s      44#% 5 
 'D'D@}1199@@H4HH.++-.. Is   AA3A1A3acreate_threadc
                      y rt   rU   
r7   r'  r   r   r   r   r   r   r   r,  s
             rA   create_threadz!OpenAIAssistantsAPI.create_threadV
  r  rC   c
                      y rt   rU   r.  s
             rA   r/  z!OpenAIAssistantsAPI.create_threade
  r  rC   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'  rU   )r+  r  r  r  r   r)  rc   )r7   r'  r   r   r   r   r   r   r   r,  r   r   r*  s                rA   r/  z!OpenAIAssistantsAPI.create_threadv
  s    , %.D*@++!!')! , 	 	 ..#% / 
 'D'D:++33::BTB.++-..rC   c                    K   | j                  ||||||      }|j                  j                  j                  |       d {   }	t	        di |	j                         S 7 w)Nr  r  rU   )r  r  r  r  r)  rc   r  s
             rA   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 rt   rU   	r7   r  r   r   r   r   r   r   r4  s	            rA   
get_threadzOpenAIAssistantsAPI.get_thread
  r#  rC   c	                      y rt   rU   r6  s	            rA   r7  zOpenAIAssistantsAPI.get_thread
  r#  rC   c	           	          ||du r| j                  |||||||      S | j                  ||||||      }	|	j                  j                  j	                  |      }
t        di |
j                         S )NTr&  r  r  rU   )r3  r  r  r  r  r)  rc   )r7   r  r   r   r   r   r   r   r4  r   r   s              rA   r7  zOpenAIAssistantsAPI.get_thread
  s     "{d':((#!') )   ..#% / 
 !%%--666K(((rC   c                      y rt   rU   rV   s    rA   delete_threadz!OpenAIAssistantsAPI.delete_thread  s    rC   additional_instructionsinstructionsrv   r   r  c           	         K   | j                  |	|
||||      }|j                  j                  j                  j	                  |||||||       d {   }|S 7 w)Nr  r  r  r<  r=  r'  rv   r  )r  r  r  runscreate_and_poll)r7   r  r  r<  r=  r'  rv   r   r  r   r   r   r   r   r   r   r   s                    rA   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?  rC  rU   r  r  r@  r   r7   r   r  r  r<  r=  r'  rv   r  rC  r   s              rA   async_run_thread_streamz+OpenAIAssistantsAPI.async_run_thread_stream.  X     #('>(  
 $$1D!.v{{""''..666rC   c
                     |||||||d}
|	|	|
d<    |j                   j                  j                  j                  di |
S rE  rF  rG  s              rA   run_thread_streamz%OpenAIAssistantsAPI.run_thread_streamG  rI  rC   rB  c                      y rt   rU   r7   r  r  r<  r=  r'  rv   r   r  r   r   r   r   r   r   rB  rC  s                    rA   
run_threadzOpenAIAssistantsAPI.run_threadb      ( 	rC   c                      y rt   rU   rM  s                    rA   rN  zOpenAIAssistantsAPI.run_threadx  rO  rC   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'  rv   r  rC  )r  r  r<  r=  r'  rv   r   r  r   r   r   r   r   r   r?  )	r  rH  rB  r  rK  r  r  r@  rA  )r7   r  r  r<  r=  r'  rv   r   r  r   r   r   r   r   r   rB  rC  _clientr   r   s                       rA   rN  zOpenAIAssistantsAPI.run_thread  sm   & "{d':!fn66#%# +!-! 7  33"'!-,C!-%"/ 4 
 
 ###)(?)!!') $    ..#% / 
 &D.))$#)(?)!+ * 
 
 !%%--22BB%$;% C 
 rC   r]   rt   )desc   NN)NNrS  rT  NNr   r  )7r_   r`   ra   rB   r   r   r   r>  r   r?  r   r   r  r   r  AsyncCursorPage	Assistantr  r   r   r   r  SyncCursorPagerc   r   r  r   r  r
  r  r  r  r   r  r"  r   OpenAICreateThreadParamsMessager)  r+  r/  r3  r7  r;  r  AssistantToolParamRunrB  AssistantEventHandlerAsyncAssistantStreamManagerAsyncAssistantEventHandlerrH  AssistantStreamManagerrK  rN  r   r   s   @rA   r  r  S  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rC   r  )Or   rI   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   r	  r   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_utilsr0   r1   r2   ry   r{   r4   re   r   r   r  r  r  rU   rC   rA   <module>rs     s         " %  & @ 1  &    + 1 S I O R I   #  7 =  *+ #% ( (VV
: V
r+D }F7M }F@(WW Wtdw dNU' UrC   