o
    ưi-                     @   s(  d dl Z d dlZd dlZd dlmZmZmZ d dlZd dlm	Z	 d dl
mZmZmZmZ d dlmZ d dlmZmZ ddlmZ d	d
lmZ e ZdedefddZdedefddZi ddi fdededededede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eef fddZdS )    N)CallableListUnion)REPLICATE_POLLING_DELAY_SECONDS)AsyncHTTPHandlerHTTPHandler_get_httpx_clientget_async_httpx_client)AllMessageValues)CustomStreamWrapperModelResponse   )ReplicateError   )ReplicateConfigheadershttp_clientc              	   c   s"   d}d}d}|dvrt t |d|   |j| |d}|jdkr~| }	|	d }d|	v rdz	d|	d }W n tyL   td	d
	|	d |j
dw |t|d  }
|d|
  |
|dV  |}|	d }|dkr}|	dd}tdd| |j
dn|d|j |j  |dvsd S d S )N TZ	succeededfailedcanceledzreplicate: polling endpoint: r      statusoutput   Unable to parse response. Got={}status_codemessager   New chunk: r   r   r   error  Error: 8Replicate: Failed to fetch prediction status and output.)timesleepr   getr   jsonjoin	Exceptionr   formatr   lentext)prediction_url	api_tokenprint_verboser   r   previous_outputoutput_stringr   responseresponse_data
new_outputreplicate_error r8   Z/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/replicate/chat/handler.py$handle_prediction_response_streaming   sT   
	r:   c                 C  sj  d}d}d}|dvrt tI d H  |j| |dI d H }|jdkr| }	|	dd}d|	v o5|	d d u}
|
rz t|	d trHd|	d }n|	d d u rQd}nt	|	d }W n t
yn   tdd	|	dd |jd
w |t|d  }|d|  ||dV  |}|	dd}|dkr|	dd}tdd| |jd
n|d|j |j  |dvsd S d S )Nr   Tr   r   r   r   r   r   r   r   r    r!   r   r"   r#   r$   r%   )asyncior'   r   r(   r   r)   
isinstancelistr*   strr+   r   r,   r   r-   r.   )r/   r0   r1   r   r   r2   r3   r   r4   r5   Zoutput_presentr6   r7   r8   r8   r9   *async_handle_prediction_response_streamingG   s^   


	r?   modelmessagesapi_basemodel_responser1   optional_paramslitellm_paramsreturnc                 C   sv  t j||| |||d}t | }t j| ||||d}|d ur3|du r3t|| |	||||||||||dS tt |_t j||| ||d}t	ddid}|j
||t|d	}t |}d
|v rz|d
 du rz|d t|||||d}t|| |ddS ttjD ]4}ttjd|   |j||d}|jdkr| ddv rqt j| |||||||||	d
  S tddd d)N)api_keyr   r@   rA   rD   rE   )r@   rA   rD   rE   r   T)rC   r@   encodingrA   rD   rE   
version_id
input_datarG   rB   logging_objr1   r   rB   rG   r@   rD   rE   timeout     @)paramsurlr   datastreamzstreaming requestr   r   	replicaterK   Zcustom_llm_providerr   rQ   r   r   r   
processingstarting
r@   Zraw_responserC   rK   rG   Zrequest_datarA   rD   rE   rH     9No response received from Replicate API after max retriesr   )replicate_configZvalidate_environmentZmodel_to_version_idZtransform_requestasync_completionintr&   createdget_complete_urlr   postr)   dumpsget_prediction_urlr:   r   rangelitellm!DEFAULT_REPLICATE_POLLING_RETRIESr'   'DEFAULT_REPLICATE_POLLING_DELAY_SECONDSr(   r   r   transform_responser   )r@   rA   rB   rC   r1   rD   rE   rK   rG   rH   Zcustom_prompt_dictZ	logger_fnZacompletionr   rI   rJ   r/   Zhttpx_clientr4   	_responseretryr8   r8   r9   
completion   s   
		


rm   c                    s  t j|	||||d}ttjjddid}|j||t|dI d H }t 	|}d|v rC|d du rCt
|||||d}t|||
d	d
S ttjD ]:}ttjd|  I d H  |j||dI d H }|jdkrp| ddv rpqHt j||| |
||||||d
  S tddd d)NrL   rM   rN   )Zllm_providerrO   rP   rS   TrT   rU   rV   r   rW   r   r   rX   r[   r\   r]   r   )r^   rb   r	   rg   ZLlmProvidersZ	REPLICATErc   r)   rd   re   r?   r   rf   rh   r;   r'   ri   r(   r   r   rj   r   )rC   r@   rA   rH   rD   rE   rI   rJ   rG   rB   rK   r1   r   r/   Zasync_handlerr4   rk   rl   r8   r8   r9   r_      sd   



r_   ) r;   r)   r&   typingr   r   r   rg   Zlitellm.constantsr   Z&litellm.llms.custom_httpx.http_handlerr   r   r   r	   Zlitellm.types.llms.openair
   Zlitellm.utilsr   r   Zcommon_utilsr   Ztransformationr   r^   dictr:   r?   r>   r=   rm   r_   r8   r8   r8   r9   <module>   st    
/
F

u
