o
    ưi                     @   s   d dl Z d dlZd dlmZ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mZmZ d dlmZ d dlmZ d dlmZmZmZmZmZ G dd	 d	eZG d
d deZG dd deZdS )    N)AsyncIteratorIteratorListOptionalUnion)BaseModelResponseIterator)
BaseConfigBaseLLMExceptionLiteLLMLoggingObjget_secret_str)AllMessageValues)ChatCompletionToolCallChunkChatCompletionUsageBlockGenericStreamingChunkModelResponseUsagec                       s   e Zd Z fddZ  ZS )CloudflareErrorc                    sJ   || _ || _tjddd| _tj|| jd| _t j||| j| jd d S )NPOSTzhttps://api.cloudflare.com)methodurl)status_coderequest)r   messager   response)	r   r   httpxRequestr   Responser   super__init__)selfr   r   	__class__ b/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/cloudflare/chat/transformation.pyr      s   
zCloudflareError.__init__)__name__
__module____qualname__r   __classcell__r#   r#   r!   r$   r      s    r   c                       s  e Zd ZU dZee ed< dZee ed< 		d-dee dee ddfddZ	e
 fddZ		d-d	ed
edee dededee dee defddZ	d.dee dee d
edededee defddZ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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d"d#Zd$ed%ed	eeejf defd&d'Z	(d/d)eee ee ef d*ed!ee fd+d,Z   Z!S )0CloudflareChatConfigN
max_tokensstreamreturnc                 C   s>   t   }| D ]\}}|dkr|d urt| j|| q	d S )Nr    )localscopyitemssetattrr"   )r    r*   r+   Zlocals_keyvaluer#   r#   r$   r   +   s   
zCloudflareChatConfig.__init__c                    s
   t   S N)r   
get_config)clsr!   r#   r$   r4   5   s   
zCloudflareChatConfig.get_configheadersmodelmessagesoptional_paramslitellm_paramsapi_keyapi_basec                 C   s$   |d u rt dddd| d}|S )NzMissing CloudflareError API Key - A call is being made to cloudflare but no key is set either in the environment variables or via paramszapplication/jsonzapbplication/jsonzBearer )acceptzcontent-typeAuthorization)
ValueError)r    r6   r7   r8   r9   r:   r;   r<   r#   r#   r$   validate_environment9   s   
z)CloudflareChatConfig.validate_environmentc                 C   s$   |d u rt d}d| d}|| S )NZCLOUDFLARE_ACCOUNT_IDz.https://api.cloudflare.com/client/v4/accounts/z/ai/run/r   )r    r<   r;   r7   r9   r:   r+   Z
account_idr#   r#   r$   get_complete_urlN   s
   	
z%CloudflareChatConfig.get_complete_urlc                 C   s   ddgS )Nr+   r*   r#   )r    r7   r#   r#   r$   get_supported_openai_params^   s   z0CloudflareChatConfig.get_supported_openai_paramsnon_default_paramsdrop_paramsc                 C   sD   | j |d}| D ]\}}|dkr||d< q
||v r|||< q
|S )N)r7   Zmax_completion_tokensr*   )rB   r/   )r    rC   r9   r7   rD   Zsupported_openai_paramsparamr2   r#   r#   r$   map_openai_paramsd   s   
z&CloudflareChatConfig.map_openai_paramsc           
      C   s<   t j }| D ]\}}||vr|||< q	d|i|}	|	S )Nr8   )litellmr)   r4   r/   )
r    r7   r8   r9   r:   r6   configkvdatar#   r#   r$   transform_requests   s   
z&CloudflareChatConfig.transform_requestraw_responsemodel_responselogging_objrequest_dataencoding	json_modec                 C   s   |  }|d d |jd j_tjj||d}t|	|d d d 	dd}t
t |_d	| |_t|||| d
}t|d| |S )Nresultr   r   )r8   r7   choicesr   content zcloudflare/)prompt_tokenscompletion_tokensZtotal_tokensusage)jsonrT   r   rU   rG   utilsZget_token_countlenencodegetinttimecreatedr7   r   r0   )r    r7   rM   rN   rO   rP   r8   r9   r:   rQ   r;   rR   Zcompletion_responserW   rX   rY   r#   r#   r$   transform_response   s"   
z'CloudflareChatConfig.transform_responseerror_messager   c                 C   s   t ||dS )N)r   r   )r   )r    rc   r   r6   r#   r#   r$   get_error_class   s   z$CloudflareChatConfig.get_error_classFstreaming_responsesync_streamc                 C   s   t |||dS )N)re   rf   rR   )CloudflareChatResponseIterator)r    re   rf   rR   r#   r#   r$   get_model_response_iterator   s
   z0CloudflareChatConfig.get_model_response_iterator)NNr3   )F)"r%   r&   r'   r*   r   r_   __annotations__r+   boolr   classmethodr4   dictstrr   r   r@   rA   rB   rF   rL   r   r   r   r
   rb   r   ZHeadersr	   rd   r   r   rh   r(   r#   r#   r!   r$   r)   '   s   
 


	



	

#
r)   c                   @   s   e Zd ZdedefddZdS )rg   chunkr,   c           
   	   C   st   z*d}d }d}d}d }d }t |dd}d|v r|d }t|||||||d}	|	W S  tjy9   td| w )NrV   Findexr   r   )texttool_useis_finishedfinish_reasonrY   ro   provider_specific_fieldsz"Failed to decode JSON from chunk: )r_   r^   r   rZ   JSONDecodeErrorr?   )
r    rn   rp   rq   rr   rs   rY   rt   ro   returned_chunkr#   r#   r$   chunk_parser   s.   
z+CloudflareChatResponseIterator.chunk_parserN)r%   r&   r'   rl   r   rw   r#   r#   r#   r$   rg      s    rg   )rZ   r`   typingr   r   r   r   r   r   rG   Z)litellm.llms.base_llm.base_model_iteratorr   Z)litellm.llms.base_llm.chat.transformationr   r	   r
   Zlitellm.secret_managers.mainr   Zlitellm.types.llms.openair   Zlitellm.types.utilsr   r   r   r   r   r   r)   rg   r#   r#   r#   r$   <module>   s    	 