
    gm                         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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)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      `/var/www/openai/venv/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e   dee   defdZ	 d#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                         D ]%  \  }}|dk7  s|t        | j                  ||       ' y )Nr!   )localsitemssetattrr"   )r!   r,   r-   locals_keyvalues         r#   r    zCloudflareChatConfig.__init__*   s;    
 (!--/JCf}!2U3 *r$   c                      t         |          S N)r   
get_config)clsr"   s    r#   r8   zCloudflareChatConfig.get_config4   s    w!##r$   headersmodelmessagesoptional_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=   r>   r?   s          r#   validate_environmentz)CloudflareChatConfig.validate_environment8   s:     ? [  )/&0

 r$   c                     ||z   S r7    )r!   r?   r;   r=   r-   s        r#   get_complete_urlz%CloudflareChatConfig.get_complete_urlL   s     %r$   c                 
    ddgS )Nr-   r,   rF   )r!   r;   s     r#   get_supported_openai_paramsz0CloudflareChatConfig.get_supported_openai_paramsU   s    
 	
r$   non_default_paramsdrop_paramsc                     | j                  |      }|j                         D ]  \  }}|dk(  r||d<   ||v s|||<    |S )N)r;   max_completion_tokensr,   )rI   r1   )r!   rJ   r=   r;   rK   supported_openai_paramsparamr5   s           r#   map_openai_paramsz&CloudflareChatConfig.map_openai_params[   s]     #'"B"B"B"O.446LE5//05-11).&	 7
 r$   litellm_paramsc                     t         j                  j                         }|j                         D ]  \  }}||vs|||<    d|i|}	|	S )Nr<   )litellmr+   r8   r1   )
r!   r;   r<   r=   rQ   r:   configkvdatas
             r#   transform_requestz&CloudflareChatConfig.transform_requestj   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)jsonra   r   rb   rS   utilsget_token_countlenencodegetinttimecreatedr;   r   r2   )r!   r;   rY   rZ   r[   r\   r<   r=   rQ   r]   r>   r^   completion_responserd   re   rg   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!   rs   r   r:   s       r#   get_error_classz$CloudflareChatConfig.get_error_class   s     #!
 	
r$   streaming_responsesync_streamc                     t        |||      S )N)rv   rw   r^   )CloudflareChatResponseIterator)r!   rv   rw   r^   s       r#   get_model_response_iteratorz0CloudflareChatConfig.get_model_response_iterator   s     .1#
 	
r$   )NNr7   )F)"r%   r&   r'   r,   r   rn   __annotations__r-   boolr    classmethodr8   dictstrr   r   rD   rG   rI   rP   rX   r   r   r   r   rr   r   Headersr
   ru   r   r   rz   r(   r)   s   @r#   r+   r+   &   s    $J$!FHTN! %)!%4SM4 4 
	4 $ $ "&"&  '(	
  # 3- 
2 "&     	 
   
 
 
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)ry   chunkr.   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)Nrc   Findexr   r   )texttool_useis_finishedfinish_reasonrg   r   provider_specific_fieldsz"Failed to decode JSON from chunk: )rn   rm   r   rh   JSONDecodeErrorrC   )
r!   r   r   r   r   r   rg   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   rF   r$   r#   ry   ry      s    K$ K+@ Kr$   ry   )rh   ro   typingr   r   r   r   r   r   rS   )litellm.llms.base_llm.base_model_iteratorr   )litellm.llms.base_llm.chat.transformationr	   r
   r   litellm.types.llms.openair   litellm.types.utilsr   r   r   r   r   r   r+   ry   rF   r$   r#   <module>r      s^      A A   O 
 7 
& 
L
: L
^K%> Kr$   