o
    ưio6                     @   sT  d Z ddlZddlmZmZmZmZ ddlZddlZddlm	Z	 ddl
mZ ddlmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZmZ ddlmZmZ ddlmZ 		d dee de de!de de de"dee de#fddZ$			d!dee de de!de de de"dee de#deee%ej&f  fddZ'G dd deZ(dS )"zh
OpenAI-like chat completion handler

For handling OpenAI-like chat completions, like IBM WatsonX, etc.
    N)AnyCallableOptionalUnion)LlmProviders)MockResponseIterator)AsyncHTTPHandlerHTTPHandler)ModelResponseIterator)OpenAIGPTConfig)OpenAIConfig)CustomStreamingDecoderModelResponse)CustomStreamWrapperProviderConfigManager   )OpenAILikeBaseOpenAILikeError   )OpenAILikeChatConfigFclientapi_baseheadersdatamodelmessagesstreaming_decoderfake_streamc	                    s   | d u rt j} | j|||| dI d H }	|d ur#||	jdd}
n|r4td
i |	 }t|d}
nt|	 dd}
|j	|d|
d|id	 |
S )N)r   r   stream   
chunk_sizemodel_responseFZstreaming_responseZsync_stream complete_input_dictinputapi_keyoriginal_responseadditional_args )
litellmmodule_level_aclientpostZaiter_bytesr   jsonr   r
   Zaiter_lines	post_call)r   r   r   r   r   r   logging_objr   r   responsecompletion_streamr#   r,   r,   \/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/openai_like/chat/handler.py	make_call   s.   

r6   timeoutc
                 C   s   | d u rt j} | j|||| |	d}
|
jdkr t|
j|
 d|d ur.||
jdd}n|r?tdi |
 }t	|d}nt
|
 dd}|j|d	d
d|id |S )N)r   r   r   r7      status_codemessager   r    r"   Tr$   r%   zfirst stream response receivedr&   r'   r,   )r-   Zmodule_level_clientr/   r:   r   readZ
iter_bytesr   r0   r   r
   
iter_linesr1   )r   r   r   r   r   r   r2   r   r   r7   r3   r4   r#   r,   r,   r5   make_sync_callB   s0   

r>   c                !       s\  e Zd Z fddZdddi dddfdedededed	ed
ededede	e
 de	e dedefddZddi ddfdededed	ed
ededede	e
 dede	e dede	eeejf  dedefddZdi dddddddd	dedededed	ed
edede	e dedede	e de	eeejf  de	eee
f  de	e de	e def ddZ  ZS ) OpenAILikeChatHandlerc                    s   t  jdi | d S )Nr,   )super__init__)selfkwargs	__class__r,   r5   rA   p   s   zOpenAILikeChatHandler.__init__NFr   r   custom_llm_providerr   custom_prompt_dictr#   print_verboser   r   r   r   returnc              
      sB   d|d< t |||t||||
|dI d H }t||||
d}|S )NTr   )r   r   r   r   r   r   r2   r   r4   r   rF   r2   )r6   r0   dumpsr   )rB   r   r   rF   r   rG   r#   rH   encodingr)   r2   r   r   optional_paramslitellm_params	logger_fnr   r   r   r   r4   Zstreamwrapperr,   r,   r5   acompletion_stream_functions   s&   
z1OpenAILikeChatHandler.acompletion_stream_function
base_modelrM   r7   	json_modec                    s   |d u rt jddd}|d u rtj}z|j||t||dI d H }|  W n7 t jy? } z
t	|j
j|j
jdd }~w t jyL   t	ddd ty_ } zt	dt|dd }~ww tj|||||||
||||	|||d	S )
Ng     @g      @)r7   connect)r   r   r7   r9     Timeout error occurred.  r   r3   r#   r   r2   rM   r)   r   r   rH   rL   rR   rF   rQ   )httpxTimeoutr-   r.   r/   r0   rK   raise_for_statusHTTPStatusErrorr   r3   r:   textTimeoutException	Exceptionstrr   _transform_response)rB   r   r   r   rG   r#   rF   rH   r   rL   r)   r2   r   r   rQ   rM   rN   rO   r   r7   rR   r3   er,   r,   r5   acompletion_function   sL   z*OpenAILikeChatHandler.acompletion_function)	acompletionrN   rO   r   r7   r   custom_endpointr   r   r)   rN   r   rd   c                C   sH  |p| dd }| dd }| j||	d||d\}}| dd p!d}| di }| dd }| d	d  |s:||d< |d ur\|d ur\tj|t|d
}t|tsUt|tr\|j||d}||d||}|
j	||	|||dd |du r
|d u st|t
sd }|du r||d< | jd,i d|d|d|d|d|d|d|d|d|	d|
d|d|d|d|d|d|d|d |d!|S | jd,i d|d|d|d|d|d|d|d|d|d|	d|
d|d|d|d|d|d"|d|d|d|S |du r5t|d urt|tr|nd ||t||||
|||d#
}t||||
d$S |d u s@t|tsEt|d%}z|j||t|d&}|  W n: tjyn } z
t|jj|jjd'd }~w tjy|   td(d)d' ty } ztd*t|d'd }~ww tj|||||
||	|||||||d+S )-Nrd   rQ   Zchat_completions)r   r)   Zendpoint_typerd   r   r   F
extra_bodyrR   max_retries)r   provider)r   r   )r   r   )r&   r   r   )r(   r)   r+   Tr   r   r   r   rG   r#   rH   rL   r)   r2   rM   rN   rO   r   r   rF   r   r   r7   )
r   r   r   r   r   r   r2   r   r   r7   rJ   )r7   )urlr   r   r9   rT   rU   rV   rW   r,   )popZ_validate_environmentr   Zget_provider_chat_configr   
isinstancer   r   Z_transform_messagesZpre_callr   rP   rb   r>   r	   r0   rK   r   r/   rZ   rX   r[   r   r3   r:   r\   r]   r^   r_   r   r`   )rB   r   r   r   rF   rG   r#   rH   rL   r)   r2   rM   rc   rN   rO   r   r7   r   rd   r   r   rQ   r   re   rR   Zprovider_configr   r4   r3   ra   r,   r,   r5   
completion   sr  

	
	

	


z OpenAILikeChatHandler.completion)__name__
__module____qualname__rA   r_   listdictr   r   r   r   r   boolr   rP   r   floatrX   rY   rb   r	   rk   __classcell__r,   r,   rD   r5   r?   o   s    
;	
K	r?   )NF)NFN))__doc__r0   typingr   r   r   r   rX   r-   r   Z(litellm.llms.bedrock.chat.invoke_handlerr   Z&litellm.llms.custom_httpx.http_handlerr   r	   Z'litellm.llms.databricks.streaming_utilsr
   Z+litellm.llms.openai.chat.gpt_transformationr   Zlitellm.llms.openai.openair   Zlitellm.types.utilsr   r   Zlitellm.utilsr   r   Zcommon_utilsr   r   Ztransformationr   r_   rp   ro   rq   r6   rr   rY   r>   r?   r,   r,   r,   r5   <module>   sr    	
0	

-