
    h                         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	e      Z G d
 de      Z G d de      Zy)    N)AsyncIteratorIteratorListOptionalUnion)BaseModelResponseIterator)
BaseConfigBaseLLMExceptionLiteLLMLoggingObjget_secret_str)AllMessageValues)ChatCompletionToolCallChunkChatCompletionUsageBlockGenericStreamingChunkModelResponseUsagec                        e Zd Z fdZ xZS )CloudflareErrorc                     || _         || _        t        j                  dd      | _        t        j
                  || j                        | _        t        | !  ||| j                  | j                         y )NPOSTzhttps://api.cloudflare.com)methodurl)status_coderequest)r   messager   response)	r   r   httpxRequestr   Responser   super__init__)selfr   r   	__class__s      g/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/cloudflare/chat/transformation.pyr"   zCloudflareError.__init__   sa    &}}F8TU;U#LL]]	 	 	
    )__name__
__module____qualname__r"   __classcell__r$   s   @r%   r   r      s    

 

r&   r   c                       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Z	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	 d#dee   dee   ded
ededee   defdZ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e   d
edededef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Zdededeeej6                  f   defdZ	 d$deee   ee   ef   d edee   fd!Z  xZ!S )%CloudflareChatConfigN
max_tokensstreamreturnc                     t               j                         }|j                         D ]%  \  }}|dk7  s|t        | j                  ||       ' y )Nr#   )localscopyitemssetattrr$   )r#   r.   r/   locals_keyvalues         r%   r"   zCloudflareChatConfig.__init__+   sA    
 (--/!--/JCf}!2U3 *r&   c                      t         |          S N)r!   
get_config)clsr$   s    r%   r;   zCloudflareChatConfig.get_config5   s    w!##r&   headersmodelmessagesoptional_paramslitellm_paramsapi_keyapi_basec                 2    |t        d      ddd|z   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#   r=   r>   r?   r@   rA   rB   rC   s           r%   validate_environmentz)CloudflareChatConfig.validate_environment9   s:     ? [  )/&0

 r&   c                 2    |t        d      }d| d}||z   S )NCLOUDFLARE_ACCOUNT_IDz.https://api.cloudflare.com/client/v4/accounts/z/ai/run/r   )r#   rC   rB   r>   r@   rA   r/   
account_ids           r%   get_complete_urlz%CloudflareChatConfig.get_complete_urlN   s3     '(?@J@HU  %r&   c                 
    ddgS )Nr/   r.    )r#   r>   s     r%   get_supported_openai_paramsz0CloudflareChatConfig.get_supported_openai_params^   s    
 	
r&   non_default_paramsdrop_paramsc                     | j                  |      }|j                         D ]  \  }}|dk(  r||d<   ||v s|||<    |S )N)r>   max_completion_tokensr.   )rO   r4   )r#   rP   r@   r>   rQ   supported_openai_paramsparamr8   s           r%   map_openai_paramsz&CloudflareChatConfig.map_openai_paramsd   s]     #'"B"B"B"O.446LE5//05-11).&	 7
 r&   c                     t         j                  j                         }|j                         D ]  \  }}||vs|||<    d|i|}	|	S )Nr?   )litellmr-   r;   r4   )
r#   r>   r?   r@   rA   r=   configkvdatas
             r%   transform_requestz&CloudflareChatConfig.transform_requests   s[     --88:LLNDAq'%&" #
 

 r&   raw_responsemodel_responselogging_objrequest_dataencoding	json_modec                    |j                         }|d   d   |j                  d   j                  _        t        j
                  j                  ||      }t        |	j                  |d   d   d   j                  dd                  }t        t        j                               |_        d	|z   |_        t        ||||z   
      }t        |d|       |S )Nresultr   r   )r?   r>   choicesr   content zcloudflare/)prompt_tokenscompletion_tokenstotal_tokensusage)jsonrf   r   rg   rX   utilsget_token_countlenencodegetinttimecreatedr>   r   r5   )r#   r>   r^   r_   r`   ra   r?   r@   rA   rb   rB   rc   completion_responseri   rj   rl   s                   r%   transform_responsez'CloudflareChatConfig.transform_response   s     +//14G4Q5
q!))1  55xu5UOON95a8CGG	SUVW
 "%TYY[!1,u4'/&)::

 	/r&   error_messager   c                     t        ||      S )N)r   r   )r   )r#   rx   r   r=   s       r%   get_error_classz$CloudflareChatConfig.get_error_class   s     #!
 	
r&   streaming_responsesync_streamc                     t        |||      S )N)r{   r|   rc   )CloudflareChatResponseIterator)r#   r{   r|   rc   s       r%   get_model_response_iteratorz0CloudflareChatConfig.get_model_response_iterator   s     .1#
 	
r&   )NNr:   )F)"r'   r(   r)   r.   r   rs   __annotations__r/   boolr"   classmethodr;   dictstrr   r   rH   rL   rO   rV   r]   r   r    r   r   rw   r   Headersr
   rz   r   r   r   r*   r+   s   @r%   r-   r-   '   s    $J$!FHTN! %)!%4SM4 4 
	4 $ $ "&"&  '(	
   # 3- 
8 "& 3-  #  	 
       
  
 
c 
   	
  
 '( 	
   
< "&$(!! nn! &	!
 '! ! '(! ! ! ! #! D>! 
!F
 
/2
=B4CV=W
	
 %*	

!(3-s1C]"RS

 

 D>	

r&   r-   c                       e Zd ZdedefdZy)r~   chunkr0   c           	          	 d}d }d}d}d }d }t        |j                  dd            }d|v r|d   }t        |||||||      }	|	S # t        j                  $ r t        d|       w xY w)Nrh   Findexr   r   )texttool_useis_finishedfinish_reasonrl   r   provider_specific_fieldsz"Failed to decode JSON from chunk: )rs   rr   r   rm   JSONDecodeErrorrG   )
r#   r   r   r   r   r   rl   r   r   returned_chunks
             r%   chunk_parserz+CloudflareChatResponseIterator.chunk_parser   s    	KD>BHKM8<E'+$		'1-.EU"Z(2!'+)AN "!## 	KA%IJJ	Ks   AA "A(N)r'   r(   r)   r   r   r   rN   r&   r%   r~   r~      s    K$ K+@ Kr&   r~   )rm   rt   typingr   r   r   r   r   r   rX   )litellm.llms.base_llm.base_model_iteratorr   )litellm.llms.base_llm.chat.transformationr	   r
   r   litellm.secret_managers.mainr   litellm.types.llms.openair   litellm.types.utilsr   r   r   r   r   r   r-   r~   rN   r&   r%   <module>r      sa      A A   O 
 8 6 
& 
T
: T
nK%> Kr&   