o
    ưi                    @   s  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r6d 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;T ddl<m=Z= ddl>m?Z? ddl@mAZA ddlBmCZCmDZDmEZE eA ZFe? ZGG dd dZHG dd de-ZIG d d! d!e+ZJG d"d# d#e=eCZKG d$d% d%e=ZLG d&d' d'e=ZMG d(d) d)e=ZNdS )*    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                   @   sD   e Zd ZdZ		dddZedd Zdd	 Zd
edefddZ	dS )MistralEmbeddingConfigzK
    Reference: https://docs.mistral.ai/api/#operation/createEmbedding
    returnNc                 C   s>   t   }| D ]\}}|dkr|d urt| j|| q	d S Nselflocalscopyitemssetattr	__class__)r5   locals_keyvalue r?   Q/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/openai/openai.py__init__H   s   
zMistralEmbeddingConfig.__init__c                 C   s   dd | j  D S )Nc                 S   s>   i | ]\}}| d st|tjtjttfs|dur||qS )__N)
startswith
isinstancetypesFunctionTypeBuiltinFunctionTypeclassmethodstaticmethod).0kvr?   r?   r@   
<dictcomp>R   s     z5MistralEmbeddingConfig.get_config.<locals>.<dictcomp>)__dict__r9   clsr?   r?   r@   
get_configP   s   z!MistralEmbeddingConfig.get_configc                 C   s   dgS NZencoding_formatr?   r5   r?   r?   r@   get_supported_openai_paramsb   s   z2MistralEmbeddingConfig.get_supported_openai_paramsnon_default_paramsoptional_paramsc                 C   s&   |  D ]\}}|dkr||d< q|S rR   )r9   )r5   rU   rV   paramr>   r?   r?   r@   map_openai_paramsg   s
   z(MistralEmbeddingConfig.map_openai_paramsr3   N)
__name__
__module____qualname____doc__rA   rH   rQ   rT   dictrX   r?   r?   r?   r@   r2   C   s    

r2   c                       s  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dZe fddZde
defddZdedede
defddZdee de
dee fddZdedede
dedef
dd Z d!e
d"ed#e	ee!j"f de#fd$d%Z$de
dee ded&ed#edefd'd(Z%		d;de
d)e!j&d*e'd+e(d,edee ded&ed-e)d.ee
 d/ee de'fd0d1Z*		d;d#ede
dee ded&ed.ee
 d2ee
 defd3d4Z+	5d<d6e	e,e
 e-e
 e'f d7ed/ee de)fd8d9Z.  Z/S )=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_formatr3   c                 C   s>   t   }| D ]\}}|dkr|d urt| j|| q	d S r4   r6   )r5   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   r<   r=   r>   r?   r?   r@   rA      s   
zOpenAIConfig.__init__c                    s
   t   S N)superrQ   rO   r;   r?   r@   rQ      s   
zOpenAIConfig.get_configmodelc                 C   sZ   t j|drt j|dS tj|drtj|dS tjj|dr&tjj|dS tjj|d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
        ro   )	openaiOSeriesConfigis_model_o_series_modelrT   openAIGPT5Configis_model_gpt_5_modellitellmopenAIGPTAudioConfigis_model_gpt_audio_modelopenAIGPTConfig)r5   ro   r?   r?   r@   rT      s   z(OpenAIConfig.get_supported_openai_paramsrU   rV   c                 C   s0   |  |}| D ]\}}||v r|||< q	|S rl   )rT   r9   )r5   rU   rV   ro   Zsupported_openai_paramsrW   r>   r?   r?   r@   _map_openai_params   s   
zOpenAIConfig._map_openai_paramsmessagesc                 C   s   |S rl   r?   )r5   rz   ro   r?   r?   r@   _transform_messages   s   z OpenAIConfig._transform_messagesdrop_paramsc                 C   sr   t j|drt j||||dS tj|drtj||||dS tjj|dr/tjj||||dS tjj||||dS ) rp   )rU   rV   ro   r|   )	rq   rr   rX   rs   rt   ru   rv   rw   rx   )r5   rU   rV   ro   r|   r?   r?   r@   rX      s6   zOpenAIConfig.map_openai_paramserror_messagestatus_codeheadersc                 C   s   t |||dS )Nr   messager   )r0   )r5   r~   r   r   r?   r?   r@   get_error_class   s
   zOpenAIConfig.get_error_classlitellm_paramsc                 C   s   | j ||d}||d|S )N)rz   ro   )ro   rz   )r{   )r5   ro   rz   rV   r   r   r?   r?   r@   transform_request  s   zOpenAIConfig.transform_requestraw_responsemodel_responselogging_objrequest_dataencodingapi_key	json_modec                 C   sD   |j |jd |j|jd< ttt| |d|jit|jd}|S )N)original_responseresponse_headersr   response_objectmodel_response_objectZhidden_params_response_headers)		post_calltextr   model_call_detailsr   r#   r'   jsonr^   )r5   ro   r   r   r   r   rz   rV   r   r   r   r   final_response_objr?   r?   r@   transform_response  s   
zOpenAIConfig.transform_responseapi_basec                 C   s   dd| i|S )NAuthorizationBearer r?   )r5   r   ro   rz   rV   r   r   r   r?   r?   r@   validate_environment+  s   
z!OpenAIConfig.validate_environmentFstreaming_responsesync_streamc                 C   s   t |||dS )N)r   r   r   )$OpenAIChatCompletionResponseIterator)r5   r   r   r   r?   r?   r@   get_model_response_iterator:  s
   z(OpenAIConfig.get_model_response_iterator)NNNNNNNNNNNNNN)F)0rZ   r[   r\   r]   r`   r   int__annotations__ra   r   strr^   rb   listrc   rd   re   rf   rg   rh   ri   rj   rk   rA   rH   rQ   rT   ry   r	   ZAllMessageValuesr{   boolrX   httpxZHeadersr   r   r   Responser#   LiteLLMLoggingObjr   r   r   r   r   r   __classcell__r?   r?   rn   r@   r_   n   sB  
 	


	

%
	
	

#	
r_   c                   @   s   e Zd ZdedefddZdS )r   chunkr3   c              
   C   s.   zt di |W S  ty } z|d}~w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'}
        Nr?   )r$   	Exception)r5   r   er?   r?   r@   chunk_parserH  s   z1OpenAIChatCompletionResponseIterator.chunk_parserN)rZ   r[   r\   r^   r$   r   r?   r?   r?   r@   r   G  s    r   c                *       s2  e Zd ZdQ fddZ		dRdeeef dee dee	 fdd	Z
ddde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dZe dededeeejf dedeeef f
ddZe dededeeejf dedeeef f
ddZdededee dededed edee fd!d"Z	dSdededed#ee def
d$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d0d1Z!										&	dTdeded ed2e"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 d3eded f d4d5Z#								dUd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d6d7Z$										dVdeeejf deded ed2e"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d8d9Z%d#ee dee defd:d;Z&e dededeeejf defd<d=Z'e dededeeejf defd>d?Z(					dWd@eded'e)dededee dee dee ded fdAdBZ*						dXded@eded'e)dedee dee dee	 ded de)f fdCdDZ+						dXdEeded'edededee dee dee d,ee fdFdGZ,							dYdee dEededededee dee d'ee- dee d,ee de-fdHdIZ.			dZded@edJededee dee dee dKee de	deeejf dLee ded de/fdMdNZ0		dRded@edJededee dee dee dKee de	deeejf ded de/fdOdPZ1  Z2S )[OpenAIChatCompletionr3   Nc                       t    d S rl   rm   rA   rS   rn   r?   r@   rA   S     zOpenAIChatCompletion.__init__clientorganizationmax_retriesc                 C   s$   |d ur||_ |d ur||_d S d S rl   )r   r   )r5   r   r   r   r?   r?   r@   _set_dynamic_params_on_clientV  s
   
z2OpenAIChatCompletion._set_dynamic_params_on_clientis_asyncr   r   api_versiontimeoutshared_sessionr   c
                 C   s   t  }
|d u rQt|tstdd|d| j|
dd}|r*t|ts(t|tr*|S |r;t||tj	|	d|||d}nt||t
 |||d}| j||
dd |S | j|||d	 |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   )r7   rD   r   r0   formatZget_cached_openai_clientr   r   r   Z_get_async_http_clientZ_get_sync_http_clientZset_cached_openai_clientr   )r5   r   r   r   r   r   r   r   r   r   r   Zcached_clientZ_new_clientr?   r?   r@   _get_openai_clienta  sb   

z'OpenAIChatCompletion._get_openai_clientopenai_aclientdatar   c              
      s   t   }z@|jjjjdi |d|iI dH }t   }t|dr't|j}ni }| }	|	dsAt|	dsAt
dd|	dd	||	fW S  tjym }
 zt   }t|| d
}|
 jd| d| d7  _|
d}
~
w tyz }
 z|
d}
~
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 secondsr?   )timechatcompletionswith_raw_responsecreatehasattrr^   r   parsegetr0   r   ZAPITimeoutErrorroundr   r   )r5   r   r   r   r   
start_timer   end_timer   responser   Z
time_deltar?   r?   r@   #make_openai_chat_completion_request  s<   


z8OpenAIChatCompletion.make_openai_chat_completion_requestr   c           	   
   C   s   d}z9|j jjjdi |d|i}t|drt|j}ni }| }|ds7t|ds7t	dd|dd	||fW S  t	yC     t
y_ } z|durYt
d
||t||d}~ww )r   Nr   r   r   r   r   r   r   r   z9error - {}, Received response - {}, Type of response - {}r?   )r   r   r   r   r   r^   r   r   r   r0   r   r   type	r5   r   r   r   r   r   r   r   r   r?   r?   r@   (make_sync_openai_chat_completion_request  s:   



z=OpenAIChatCompletion.make_sync_openai_chat_completion_requestr   ro   rz   rV   r   r   c                    sB  ddl m} ddlm}	 tj|jpg  }
|dt|
 |	dg }|dt
|tr/t|n|r3dnd |	dd	}|
D ]`}zBt
||	rt|d
sMW q>|j|||||||dI dH \}}|r|rf| ni }||d< |j||||||||dI dH }|W   S W q> ty } z|dt|  W Y d}~q>d}~ww dS )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   ro   rz   r   r   r   kwargsN)r   ro   rz   r   rV   r   r   r   zLLiteLLM.AgenticHookError: Exception in agentic completion hooks for OpenAI: )litellm._loggingr   Z"litellm.integrations.custom_loggerr   ru   	callbacksZdynamic_success_callbacksdebuglenr   rD   r   r   r   r8   Z&async_run_chat_completion_agentic_loopr   	exceptionr   )r5   r   ro   rz   rV   r   r   r   r   r   r   r   r   callbackZ
should_runZ
tool_callsZkwargs_with_provideragentic_responser   r?   r?   r@   %_call_agentic_completion_hooks_openai  sf   



z:OpenAIChatCompletion._call_agentic_completion_hooks_openaistream_optionsc                 C   s    t |d}t||d||d}|S )N)r   r   )completion_streamro   r   r   r   )r   r%   )r5   r   r   ro   r   r   r   r?   r?   r@   mock_streamingJ  s   
z#OpenAIChatCompletion.mock_streamingFr   print_verbosedynamic_paramsazure_ad_tokenacompletionr   custom_prompt_dictr   r|   c           +         s  t  j|d zd}| }|dd }|dd}d }|d ur<|d ur<ztj|t|d}W n ty;   d }Y nw |d u rCt }|rM|j	|||d}|rS||d< |d u s[|d u rat
dd	d
t|tsrt|tjsrt
ddd
|d ur|dkr| d| |_tdD ]}z&|dd}|du r|du r|du r| jdBi d|d|d|d|d|d|d|d|
d|	d|d|d|d|d|d|d|d|W   W S | jdBi d|d|d|d|d|d|d|d |d|
d|	d|d|d|d|d|d|d!|d|W   W S |j|||||p%i d"}|du rG|du rG| j|||||
|	||||||d#W   W S t|tsSt
dd$d
| jd|	|
|||||d%}|j||j||jj||d&d' | j||||d(\}} ||jd)< |  }!|j||	|!d*|id+ t|!||d,}"|du r| j t!t"|"|||d-W   W S |"W   W S  t#j$y }# zt%j&du s|du rt'|#|}n|#W Y d }#~#qd }#~#w t(y }# z|d ur|d.t)|#  d/t)|#v sd0t)|#v rR|d urR|d ur	|d1 g }$tt*|d2 D ]4}%|$+||%  ||% d3 ||%d2  d3 krF||% d3 d4kr>|$+d5d6d7 q|$+d4d6d7 q|$+|d8  |$}n)d9t)|#v rk|d urk|}$|$+d4d6d7 |$}nd:t)|#v ryt%j,|d; n|#W Y d }#~#qd }#~#ww W d S  t
y }# z|#d }#~#w t(y }# z6t-|#d<d=}&t-|#dd }'t-|#d>t)|#}(t-|#d?d })t-|#d@d }*|'d u r|)rt-|)dd }'t
|&|(|'|*dAd }#~#ww )CNr   Fr   r   )ro   provider)ro   r   r   extra_headersr   zMissing model or messagesr   z,Timeout needs to be a float or httpx.Timeoutr   /r*   r   Tr   r   rz   rV   r   provider_configro   r   r   r   r   r   r   r|   r   r   fake_streamro   rz   rV   r   r   )r   r   r   ro   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   ro   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userZ	assistant )r  contentz"Last message must have role `user`z3unknown field: parameter index is not a valid field)rz   r   r   r   r   bodyr   r   r   r  r?   ).rm   
completionr8   popr&   Zget_provider_chat_configr   
ValueErrorr_   Zshould_fake_streamr0   rD   floatr   Timeoutro   rangeasync_streamingr   r   	streamingr   r   pre_callr   	_base_url_uri_referencer   r   r   r   r'   r   r   r#   r   UnprocessableEntityErrorru   r|   r1   r   r   r   appendZremove_index_from_tool_callsgetattr)+r5   r   r   rV   r   r   ro   rz   r   r   r   r   r   r   r   Z	logger_fnr   r   r   r   r   r|   r   r   Zinference_paramsr   r   r   _r   r   r   r   stringified_responser   r   Znew_messagesir   error_headers
error_texterror_responseZ
error_bodyrn   r?   r@   r
  \  s  



	

	






  /zOpenAIChatCompletion.completionr   r   c           !         s  d }|j |||||pi dI d H }tdD ]}z| jd|	|
||||||d	}|j|d |jdd|j i|jjd|dd	 | j||||d
I d H \}}| }|j	|d |	|d|id ||j
d< t||d|i|d}| j|||||d|dI d H }|d ur|}|du r| jtt||||dW   S |W   S  tjy } ztjdu s|du rt||}n|W Y d }~qd }~w ty } z4t|dd }t|dd}t|dd }t|dd }|d u r|rt|dd }t|dt|} t|| ||dd }~ww d S )Nr   r*   T	r   r   r   r   r   r   r   r   r   rz   r   r   r   r   r   r   r   r   r   r  r   r   r   F)r   ro   rz   rV   r   r   r   r  r   r   r   r  r   r	  )Zasync_transform_requestr  r   r  r   r  r  r   r   r   r   r'   r   r   r   r#   r   r  ru   r|   r1   r   r  r   r0   )!r5   rz   rV   r   r   ro   r   r   r   r   r   r   r   r   r   r   r|   r   r   r   r   r   r  r   r  r   r   r   Zexception_responser   exception_bodyr  r   r?   r?   r@   r   _  s   


z OpenAIChatCompletion.acompletionc              
   C   s   d|d< | | j||d | jd|||||
||	d}|j|d |dd|j i|jjd|d	d
 | j||||d\}}||jd< t	||d||
dd |d}|S )NTr   r   r   Fr   rz   r   r   r   r   r   r   r   r   r   ro   r   r   r   r   )updateget_stream_optionsr   r  r   r  r  r   r   r%   r   )r5   r   r   r   ro   r   r   r   r   r   r   r   r   r   r   streamwrapperr?   r?   r@   r    sN   



zOpenAIChatCompletion.streamingc                    s  d }|j |||||pi d}d|d< || j||	d tdD ]}zC| jd||	|
|||||d	}|j|d |||	d|dd	 | j||||d
I d H \}}||jd< t||d||	dd |d}|W   S  t
jy } ztjdu sx|du r~t||}n|W Y d }~q!d }~w ty } zut|tr|t|dd }t|dd}t|dd }t|dd }|d u r|rt|dd }|d urt|drt|t| d|j ||dt|jdkrtdt|j ||dt|drtt|ddt|||dtdt| ||dd }~ww d S )Nr   Tr   r!  r*   r  rz   r   r   r  r   r   r   r"  r   r   r   r   r  r   z

Original Response: r	  ReadTimeouti  )r   r#  r$  r  r   r  r   r   r%   r   r   r  ru   r|   r1   r   rD   r0   r  r   r   r   r   rZ   )r5   r   rz   rV   r   r   ro   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    s   






z$OpenAIChatCompletion.async_streamingc                 C   s6   |durd|iS |du 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
        Nr   zapi.openai.comZinclude_usageT)r   hostname)r5   r   r   r?   r?   r@   r$    s
   z'OpenAIChatCompletion.get_stream_optionsc           	   
      s^   z|j jjdi |d|iI dH }t|j}| }||fW S  ty. } z|d}~ww z
        Helper to:
        - call embeddings.create.with_raw_response when litellm.return_response_headers is True
        - call embeddings.create by default
        r   Nr?   Z
embeddingsr   r   r^   r   r   r   )	r5   r   r   r   r   r   r   r   r   r?   r?   r@   make_openai_embedding_request  s   

z2OpenAIChatCompletion.make_openai_embedding_requestc           	   
   C   sV   z|j jjdi |d|i}t|j}| }||fW S  ty* } z|d}~ww r(  r)  r   r?   r?   r@   "make_sync_openai_embedding_request  s   

z7OpenAIChatCompletion.make_sync_openai_embedding_requestr   c              
      s6  z9| j d||||	||
d}| j||||dI d H \}}||jd< | }|j||d|i|d t||d|d}|W S  tyU } z|j||d|it|d |d }~w ty } z:|j||d|it|d t	|d	d
}t	|dd }t	|dt|}t	|dd }|d u r|rt	|dd }t|||dd }~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   r*  r   r   r   r'   r0   r   r   r  )r5   r   r   r   r   r   r   r   r   r   r   r   r   r   r  Zreturned_responser   r   r  r  r  r?   r?   r@   
aembedding  sv   	
zOpenAIChatCompletion.aembeddingc                    sn  t    zk||d|}|ptj}t|tstddd|j||||dd |
du r<| j||||||||	||d
W S | j	d	|||||	d
}d }| j
||||d\}}||jd< |j||d|i|d t| ||dd}|W S  ty~ } z|d }~w ty } z-t|dd}t|dd }t|dt|}t|dd }|d u r|rt|dd }t|||dd }~ww )N)ro   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   r-  r.  )r   r   r   r/  r   r   r   r   r   r   )rm   r.  ru   r   rD   r   r0   r  r0  r   r+  r   r   r'   r   r   r  r   )r5   ro   r   r   r   r   rV   r   r   r   r0  r   r   r   r   r   Zsync_embedding_responser   r   r   r  r  r  rn   r?   r@   r.    s   





zOpenAIChatCompletion.embeddingpromptc              
      s   d }z9| j d||||	|
|d}|r||d< |jjd
i |d|iI d H }| }|j||d|i|d t||ddW S  tyT } z|j||t|d	 |d }~ww )NTr   r   r   r   r   r   r   r   r   r   r-  image_generationr   r   r/  )r   r   r   r?   )r   imagesgenerater   r   r'   r   r   )r5   r1  r   r   r   r   r   r   r   r   r   r   r   r   r  r   r?   r?   r@   aimage_generationp  s@   
 z&OpenAIChatCompletion.aimage_generationc                 C   s  i }zy||d|}| dd}t|tstddd|
du r0| j||||||||	|||dW S | jd	||||||	d
}|j||jdd|j i|jj	d|dd |rX||d< |j
jdi |d|i}| }|j||d|i|d t||ddW S  ty } z|j||d|it|d |d }~w ty } z&|j||d|it|d t|drtt|ddt|dtdt|dd }~ww )N)ro   r1  r   r*   r   r   r   T)r   r1  r   r   r   r   r   r   r   r   r   Fr2  r   r   r   r   r   r   r   r-  r3  r4  r   r   r?   )r  rD   r   r0   r7  r   r  r   r  r  r5  r6  r   r   r'   r   r   r   r  )r5   ro   r1  r   rV   r   r   r   r   r   Zaimg_generationr   r   r   r   r   	_responser   r   r?   r?   r@   r3    sx   
"
z%OpenAIChatCompletion.image_generationvoiceprojectaspeechc                 C   sx   |d ur|du r| j |||||||||	|
||dS | jd|||
|	||d}tt|jjjd|||d|}t|jdS )NT)ro   r   r9  rV   r   r   r   r:  r   r   r   r   Fr,  ro   r9  r   r   r?   )	async_audio_speechr   r   r   audiospeechr   HttpxBinaryResponseContentr   )r5   ro   r   r9  rV   r   r   r   r:  r   r   r;  r   r   r   r   r?   r?   r@   audio_speech  s@   
z!OpenAIChatCompletion.audio_speechc                    sN   t t| jd|||
|	||d}|jjjd|||d|I d H }t|jdS )NTr,  r<  r=  r?   )r   r   r   r?  r@  r   rA  r   )r5   ro   r   r9  rV   r   r   r   r:  r   r   r   r   r   r   r?   r?   r@   r>  &  s*   
z'OpenAIChatCompletion.async_audio_speechrY   r   rl   )NNNNNNNNNFN)NNNNNNNN)
NNNNNNNNNN)NNNNN)NNNNNN)NNNNNNNNNN)3rZ   r[   r\   rA   r   r   r   r   r   r   r   r   r  r   r   r  r   r   r^   r   Tupler   r   r   r   r	   Dictr   r#   r%   r   r   r   r
  r   r   r  r  r$  r*  r+  r    r0  r.  r7  r!   r3  rA  rB  r>  r   r?   r?   rn   r@   r   R  s   

	

D
(
)	
W
	
  	

 	
D	

y
	
P	_
6	
a	

>	
r   c                       s  e Zd ZdZd) fd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dZdededefd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dZdededefd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dZdededefd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dZdededefd 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"d#Z	d+ded$ee fd%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'd(Z!  Z"S )-OpenAIFilesAPIz
    OpenAI methods to support for batches
    - create_file()
    - retrieve_file()
    - list_files()
    - delete_file()
    - file_content()
    - update_file()
    r3   Nc                    r   rl   r   rS   rn   r?   r@   rA   W  r   zOpenAIFilesAPI.__init__Fr   r   r   r   r   r   	_is_asyncc                 C      t  }d }	|d u rLi }
| D ]&\}}|dks|dks|dkr q|dkr-|d ur-||
d< q|d ur5||
|< q|du rCtdi |
}	|	S tdi |
}	|	S |}	|	S Nr5   r   rG  r   r   Tr?   r7   r9   r   r   r5   r   r   r   r   r   r   rG  received_argsr   r   rK   rL   r?   r?   r@   get_openai_clientZ  &   

z OpenAIFilesAPI.get_openai_clientcreate_file_datar   c                    ,   |j jdi |I d H }tdi | S Nr?   )filesr   OpenAIFileObjectr   )r5   rO  r   r   r?   r?   r@   acreate_filex     zOpenAIFilesAPI.acreate_filec	              	   C   sz   | j |||||||d}	|	d u rtd|du r(t|	ts!td| j||	dS tt|	jjdi |}
t	di |

 S )Nr   r   r   r   r   r   rG  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.)rO  r   r?   )rM  r  rD   r   rT  r   r   rR  r   rS  r   )r5   rG  rO  r   r   r   r   r   r   r   r   r?   r?   r@   create_file  .   	
zOpenAIFilesAPI.create_filefile_content_requestc                    s&   |j jdi |I d H }t|jdS )Nr=  r?   )rR  r  rA  r   )r5   r[  r   r   r?   r?   r@   afile_content  s   zOpenAIFilesAPI.afile_contentc	              	   C   st   | j |||||||d}	|	d u rtd|du r(t|	ts!td| j||	dS tt|	jjdi |}
t	|
j
dS )NrV  rW  TrX  )r[  r   r=  r?   )rM  r  rD   r   r\  r   r   rR  r  rA  r   )r5   rG  r[  r   r   r   r   r   r   r   r   r?   r?   r@   file_content  s0   	
zOpenAIFilesAPI.file_contentfile_idc                       |j j|dI d H }|S Nr^  )rR  retriever5   r^  r   r   r?   r?   r@   aretrieve_file     zOpenAIFilesAPI.aretrieve_filec	              	   C   b   | j |||||||d}	|	d u rtd|du r(t|	ts!td| j||	dS |	jj|d}
|
S NrV  rW  TrX  )r^  r   ra  )rM  r  rD   r   rd  rR  rb  r5   rG  r^  r   r   r   r   r   r   r   r   r?   r?   r@   retrieve_file  0   	
zOpenAIFilesAPI.retrieve_filec                    r_  r`  )rR  deleterc  r?   r?   r@   adelete_file  re  zOpenAIFilesAPI.adelete_filec	              	   C   rf  rg  )rM  r  rD   r   rl  rR  rk  rh  r?   r?   r@   delete_file
  rj  zOpenAIFilesAPI.delete_filepurposec                    s8   t |tr|jj|dI d H }|S |j I d H }|S )Nrn  )rD   r   rR  r   )r5   r   rn  r   r?   r?   r@   alist_files0  s   
zOpenAIFilesAPI.alist_filesc	              	   C   sz   | j |||||||d}	|	d u rtd|du r(t|	ts!td| j||	dS t|tr6|	jj|d}
|
S |	j }
|
S )NrV  rW  TrX  )rn  r   ro  )rM  r  rD   r   rp  r   rR  r   )r5   rG  r   r   r   r   r   rn  r   r   r   r?   r?   r@   
list_files;  s6   	


zOpenAIFilesAPI.list_filesrY   NFrl   r   )#rZ   r[   r\   r]   rA   r   r   r   r  r   r  r   r   r   r   rM  ZCreateFileRequestrS  rT  r   r   rY  ZFileContentRequestrA  r\  r]  Z
FileObjectrd  ri  r   rl  rm  rp  rq  r   r?   r?   rn   r@   rF  L  s2   

	

	

$
	

(
	
&
	
)
	rF  c                       sH  e Zd ZdZd& fd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dZdededefd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dZdededefd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dZdededefd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dZ		d)ded ee d!ee fd"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$d%Z  ZS )+OpenAIBatchesAPIz
    OpenAI methods to support for batches
    - create_batch()
    - retrieve_batch()
    - cancel_batch()
    - list_batch()
    r3   Nc                    r   rl   r   rS   rn   r?   r@   rA   o  r   zOpenAIBatchesAPI.__init__Fr   r   r   r   r   r   rG  c                 C   rH  rI  rJ  rK  r?   r?   r@   rM  r  rN  z"OpenAIBatchesAPI.get_openai_clientcreate_batch_datar   c                    rP  rQ  )batchesr   r"   r   )r5   rt  r   r   r?   r?   r@   acreate_batch  rU  zOpenAIBatchesAPI.acreate_batchc	              	   C   z   | j |||||||d}	|	d u rtd|du r(t|	ts!td| j||	dS tt|	jjdi |}
t	di |

 S )NrV  rW  TrX  )rt  r   r?   )rM  r  rD   r   rv  r   r   ru  r   r"   r   )r5   rG  rt  r   r   r   r   r   r   r   r   r?   r?   r@   create_batch  s.   	
zOpenAIBatchesAPI.create_batchretrieve_batch_datac                    8   t d| |jjdi |I d H }tdi | S )Nzretrieving batch, args= %sr?   )r   r   ru  rb  r"   r   )r5   ry  r   r   r?   r?   r@   aretrieve_batch     z OpenAIBatchesAPI.aretrieve_batchc	              	   C   rw  )NrV  rW  TrX  )ry  r   r?   )rM  r  rD   r   r{  r   r   ru  rb  r"   r   )r5   rG  ry  r   r   r   r   r   r   r   r   r?   r?   r@   retrieve_batch  rZ  zOpenAIBatchesAPI.retrieve_batchcancel_batch_datac                    rz  )Nz async cancelling batch, args= %sr?   )r   r   ru  cancelr"   r   )r5   r~  r   r   r?   r?   r@   acancel_batch  r|  zOpenAIBatchesAPI.acancel_batchc	              	   C   s   | j |||||||d}	|	d u rtd|du r(t|	ts!td| j||	dS t|	ts1td|	jjdi |}
tdi |
	 S )NrV  rW  TrX  )r~  r   zVOpenAI client is not an instance of OpenAI. Make sure you passed a sync OpenAI client.r?   )
rM  r  rD   r   r  r   ru  r  r"   r   )r5   rG  r~  r   r   r   r   r   r   r   r   r?   r?   r@   cancel_batch  s6   	

zOpenAIBatchesAPI.cancel_batchafterlimitc                    s*   t d|| |jj||dI d H }|S )Nz%listing batches, after= %s, limit= %sr  r  )r   r   ru  r   )r5   r   r  r  r   r?   r?   r@   alist_batches  s   zOpenAIBatchesAPI.alist_batchesc
              	   C   sf   | j ||||||	|d}
|
d u rtd|du r)t|
ts!td| j|
||dS |
jj||d}|S )NrV  rW  TrX  )r   r  r  r  )rM  r  rD   r   r  ru  r   )r5   rG  r   r   r   r   r   r  r  r   r   r   r?   r?   r@   list_batches'  s.   	
zOpenAIBatchesAPI.list_batchesrY   rr  rl   r   rC  )rZ   r[   r\   r]   rA   r   r   r   r  r   r  r   r   r   r   rM  ZCreateBatchRequestr"   rv  r   r   rx  ZRetrieveBatchRequestr{  r}  ZCancelBatchRequestr  r  r  r  r   r?   r?   rn   r@   rs  f  s   
	

	

%
	
$
	
-
	
rs  c                $       s  e Zd Zd[ fddZ	d\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dZ	d\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dZ				d]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
 dee dee dee fd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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dZ						d^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 dee fd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d Z		d_dee dee deeej	f dee
 d	ee defd!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$d%Z		d_dee dee deeej	f dee
 d	ee d#efd&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 defd*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-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/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d0d.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 fd1d2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 d3ed deddee f fd4d5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 d3eed  dee fd6d5Z"		d_d(edee dee deeej	f dee
 d	ee fd7d5Z"d8ee dee dee deeej	f dee
 d	ee d
ee d9ee#e$  de%fd:d;Z&ed8ee dee dee deeej	f dee
 d	ee d9ee#e$  d
ee d<ed dedde%f fd=d>Z'ed8ee dee dee deeej	f dee
 d	ee d9ee#e$  d
ee d<eed  de%fd?d>Z'		d_d8ee dee dee deeej	f dee
 d	ee d9ee#e$  fd@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dAdB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 dCed dedde%f fdDdE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 dCeed  de%fdFdEZ)		d_d(edee dee deeej	f dee
 d	ee fdGdEZ)dHdI Z*d(ed#edJee dKee d8ee+ dLee dMee  dNe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dOdPZ.d
ed(ed#edJee dKee d8ee+ dLee dNee#e,  dQee/ de0e1 fdRdSZ2d
ed(ed#edJee dKee d8ee+ dLee dNee#e,  dQee/ de3e/ fdTdUZ4ed(ed#edJee dKee d8ee+ dLee dMee  dNee#e,  dee dee deeej	f dee
 d	ee dVed dQee/ dedde-f f dWdXZ5ed(ed#edJee dKee d8ee+ dLee dMee  dNee#e,  dee dee deeej	f dee
 d	ee dVeed  dQee/ de-f dYdXZ5			d`d(ed#edJee dKee d8ee+ dLee dMee  dNee#e,  dee dee deeej	f dee
 d	ee dQee/ fdZdXZ5  Z6S )aOpenAIAssistantsAPIr3   Nc                    r   rl   r   rS   rn   r?   r@   rA   N  r   zOpenAIAssistantsAPI.__init__r   r   r   r   r   r   c                 C   z   t  }|d u r9i }| D ]"\}	}
|	dks|	dkrq|	dkr'|
d ur'|
|d< q|
d ur/|
||	< qtdi |}|S |}|S Nr5   r   r   r   r?   )r7   r9   r   r5   r   r   r   r   r   r   rL  r   rK   rL   r   r?   r?   r@   rM  Q     	
z%OpenAIAssistantsAPI.get_openai_clientc                 C   r  r  )r7   r9   r   r  r?   r?   r@   async_get_openai_clientj  r  z+OpenAIAssistantsAPI.async_get_openai_clientdesc   orderr  beforer  c                    sX   | j ||||||d}||d}|	r|	|d< |
r|
|d< |jjjdi |I d H }|S )Nr   r   r   r   r   r   r  r  r  r  r?   )r  beta
assistantsr   )r5   r   r   r   r   r   r   r  r  r  r  r   request_paramsr   r?   r?   r@   async_get_assistants  s$   	z(OpenAIAssistantsAPI.async_get_assistantsaget_assistantsTc                 C      d S rl   r?   r5   r   r   r   r   r   r   r  r?   r?   r@   get_assistants     z"OpenAIAssistantsAPI.get_assistantsFc                 C   r  rl   r?   r  r?   r?   r@   r    r  c                 C   sv   |d ur|du r| j ||||||dS | j||||||d}||	d}|
r)|
|d< |r/||d< |jjjdi |}|S )NTr  r  r  r  r?   )r  rM  r  r  r   )r5   r   r   r   r   r   r   r  r  r  r  r  r   r  r   r?   r?   r@   r    s4   
create_assistant_datac           
         s6   | j ||||||d}|jjjdi |I d H }	|	S )Nr  r?   )r  r  r  r   )
r5   r   r   r   r   r   r   r  r   r   r?   r?   r@   async_create_assistants  s   
	z+OpenAIAssistantsAPI.async_create_assistantsc	              	   C   sV   |d ur|du r| j |||||||dS | j||||||d}	|	jjjdi |}
|
S )NT)r   r   r   r   r   r   r  r  r?   )r  rM  r  r  r   )r5   r   r   r   r   r   r  r   r  r   r   r?   r?   r@   create_assistants	  s(   		z%OpenAIAssistantsAPI.create_assistantsassistant_idc           
         s2   | j ||||||d}|jjj|dI d H }	|	S )Nr  r  )r  r  r  rk  )
r5   r   r   r   r   r   r   r  r   r   r?   r?   r@   async_delete_assistant-	  s   
	z*OpenAIAssistantsAPI.async_delete_assistantc	              	   C   sR   |d ur|du r| j |||||||dS | j||||||d}	|	jjj|d}
|
S )NT)r   r   r   r   r   r   r  r  r  )r  rM  r  r  rk  )r5   r   r   r   r   r   r  r   Zasync_delete_assistantsr   r   r?   r?   r@   delete_assistantD	  s(   		z$OpenAIAssistantsAPI.delete_assistant	thread_idmessage_datac	                    s|   | j ||||||d}	|	jjjj|fi |I d H }
d }t|
dd d u r3d|
_tdi |
 }|S tdi |
 }|S )Nr  status	completedr?   )	r  r  threadsrz   r   r  r  OpenAIMessager^   )r5   r  r  r   r   r   r   r   r   r   thread_messageresponse_objr?   r?   r@   a_add_messageg	  s*   
	z!OpenAIAssistantsAPI.a_add_messager  c
           
      C   r  rl   r?   
r5   r  r  r   r   r   r   r   r   r  r?   r?   r@   add_message	     zOpenAIAssistantsAPI.add_messagec
           
      C   r  rl   r?   r  r?   r?   r@   r  	  r  c
              
   C   s   |	d ur|	du r| j ||||||||dS | j||||||d}
|
jjjj|fi |}d }t|dd d u rDd|_tdi |	 }|S tdi |	 }|S )NT)r  r  r   r   r   r   r   r   r  r  r  r?   )
r  rM  r  r  rz   r   r  r  r  r^   )r5   r  r  r   r   r   r   r   r   r  r   r  r  r?   r?   r@   r  	  s>   

	c           
         s4   | j ||||||d}|jjjj|dI d H }	|	S )Nr  r  )r  r  r  rz   r   
r5   r  r   r   r   r   r   r   r   r   r?   r?   r@   async_get_messages	  s   
	z&OpenAIAssistantsAPI.async_get_messagesaget_messagesc	           	      C   r  rl   r?   	r5   r  r   r   r   r   r   r   r  r?   r?   r@   get_messages	     z OpenAIAssistantsAPI.get_messagesc	           	      C   r  rl   r?   r  r?   r?   r@   r  	  r  c	              	   C   sT   |d ur|du r| j |||||||dS | j||||||d}	|	jjjj|d}
|
S )NTr  r   r   r   r   r   r   r  r  )r  rM  r  r  rz   r   )r5   r  r   r   r   r   r   r   r  r   r   r?   r?   r@   r  
  s(   		metadatarz   c	                    sh   | j ||||||d}	i }
|d ur||
d< |d ur||
d< |	jjjdi |
I d H }tdi | S )Nr  rz   r  r?   )r  r  r  r   Threadr^   )r5   r  r   r   r   r   r   r   rz   r   r   message_threadr?   r?   r@   async_create_thread0
  s    	z'OpenAIAssistantsAPI.async_create_threadacreate_threadc
           
      C   r  rl   r?   
r5   r  r   r   r   r   r   rz   r   r  r?   r?   r@   create_threadP
  r  z!OpenAIAssistantsAPI.create_threadc
           
      C   r  rl   r?   r  r?   r?   r@   r  _
  r  c
              
   C   s   |	dur|	du r| j ||||||||dS | j||||||d}
i }|dur*||d< |dur2||d< |
jjjdi |}tdi | 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])
        ```
        NT)r  r   r   r   r   r   r   rz   r  rz   r  r?   )r  rM  r  r  r   r  r^   )r5   r  r   r   r   r   r   rz   r   r  r   r   r  r?   r?   r@   r  p
  s4   
	c           
         s@   | j ||||||d}|jjj|dI d H }	tdi |	 S )Nr  r  r?   )r  r  r  rb  r  r^   r  r?   r?   r@   async_get_thread
  s   
	z$OpenAIAssistantsAPI.async_get_threadaget_threadc	           	      C   r  rl   r?   	r5   r  r   r   r   r   r   r   r  r?   r?   r@   
get_thread
  r  zOpenAIAssistantsAPI.get_threadc	           	      C   r  rl   r?   r  r?   r?   r@   r  
  r  c	              	   C   s`   |d ur|du r| j |||||||dS | j||||||d}	|	jjj|d}
tdi |
 S )NTr  r  r  r?   )r  rM  r  r  rb  r  r^   )r5   r  r   r   r   r   r   r   r  r   r   r?   r?   r@   r  
  s(   		c                 C   r  rl   r?   rS   r?   r?   r@   delete_thread
  s   z!OpenAIAssistantsAPI.delete_threadadditional_instructionsinstructionsro   r   r   c              	      s@   | j |	|
||||d}|jjjj|||||||dI d H }|S )Nr  r  r  r  r  r  ro   r   )r  r  r  runscreate_and_poll)r5   r  r  r  r  r  ro   r   r   r   r   r   r   r   r   r   r   r?   r?   r@   arun_thread  s&   
	
zOpenAIAssistantsAPI.arun_threadevent_handlerc
                 C   :   |||||||d}
|	d ur|	|
d< |j jjjdi |
S Nr  r  r?   r  r  r  r   r5   r   r  r  r  r  r  ro   r   r  r   r?   r?   r@   async_run_thread_stream(     	z+OpenAIAssistantsAPI.async_run_thread_streamc
                 C   r  r  r  r  r?   r?   r@   run_thread_streamA  r  z%OpenAIAssistantsAPI.run_thread_streamr  c                 C   r  rl   r?   r5   r  r  r  r  r  ro   r   r   r   r   r   r   r   r   r  r  r?   r?   r@   
run_thread\     zOpenAIAssistantsAPI.run_threadc                 C   r  rl   r?   r  r?   r?   r@   r  r  r  c                 C   s   |d ur<|du r<|d ur)|du r)| j |	|
||||d}| j|||||||||d	S | j|||||||||	|
||||dS | j|	|
||||d}|d ur]|du r]| j|||||||||d	S |jjjj|||||||d}|S )NTr  )	r   r  r  r  r  r  ro   r   r  )r  r  r  r  r  ro   r   r   r   r   r   r   r   r   r  )	r  r  r  rM  r  r  r  r  r  )r5   r  r  r  r  r  ro   r   r   r   r   r   r   r   r   r  r  Z_clientr   r   r?   r?   r@   r    s   	

rY   rl   )r  r  NN)NNr  r  NNr   rC  )7rZ   r[   r\   rA   r   r   r   r  r   r  r   r   rM  r   r  ZAsyncCursorPageZ	Assistantr  r   r
   r   r  ZSyncCursorPager^   r  r  r   r  r  r  r  r  r   r  r  r   ZOpenAICreateThreadParamsMessager  r  r  r  r  r  rE  ZAssistantToolParamZRunr  ZAssistantEventHandlerZAsyncAssistantStreamManagerZAsyncAssistantEventHandlerr  ZAssistantStreamManagerr  r  r   r?   r?   rn   r@   r  M  s8   

 
#	

$	
		

/	

"	

,	

"	
	



4	
	

	

$
	

 
	

	



4	
	

	

"
	

&
	


	


	

	

&
	
r  )Or   rE   typingr   r   r   r   r   r   r   r	   r
   r   r   r   urllib.parser   r   Zaiohttpr   r   r   r   Z#openai.types.beta.assistant_deletedr   Zopenai.types.file_deletedr   Zpydanticr   Ztyping_extensionsr   ru   r   r   r   Zlitellm.constantsr   Z*litellm.litellm_core_utils.litellm_loggingr   r   Z(litellm.litellm_core_utils.logging_utilsr   Z)litellm.llms.base_llm.base_model_iteratorr   Z)litellm.llms.base_llm.chat.transformationr   r   Z(litellm.llms.bedrock.chat.invoke_handlerr   Zlitellm.types.utilsr    r!   r"   r#   r$   Zlitellm.utilsr%   r&   r'   Ztypes.llms.openaibaser+   Zchat.gpt_5_transformationr-   Zchat.o_series_transformationr.   Zcommon_utilsr/   r0   r1   rq   rs   r2   r_   r   r   rF  rs  r  r?   r?   r?   r@   <module>   sh    8+ Z             h