a
    bg                     @   sv   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	m
Z
 d dlmZ d dlmZ eeZG dd deZdS )    N)AnyDictIteratorListOptional)CallbackManagerForLLMRun)LLM)GenerationChunkc                       s*  e Zd ZU dZeed< eed< dZeed< dZeed< dZe	ed	< d
Z
eed< edd fddZeedddZeeeef dddZeeeef dddZeeeef ejdddZejedddZd"eeee  ee eee dddZd#eeee  ee eedd d!Z  ZS )$CloudflareWorkersAIa  Cloudflare Workers AI service.

    To use, you must provide an API token and
    account ID to access Cloudflare Workers AI, and
    pass it as a named parameter to the constructor.

    Example:
        .. code-block:: python

            from langchain_community.llms.cloudflare_workersai import CloudflareWorkersAI

            my_account_id = "my_account_id"
            my_api_token = "my_secret_api_token"
            llm_model =  "@cf/meta/llama-2-7b-chat-int8"

            cf_ai = CloudflareWorkersAI(
                account_id=my_account_id,
                api_token=my_api_token,
                model=llm_model
            )
    
account_id	api_tokenz@cf/meta/llama-2-7b-chat-int8modelz-https://api.cloudflare.com/client/v4/accountsbase_urlF	streaming endpoint_urlN)kwargsreturnc                    s2   t  jf i | | j d| j d| j | _dS )z+Initialize the Cloudflare Workers AI class./z/ai/run/N)super__init__r   r   r   r   )selfr   	__class__ {/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/llms/cloudflare_workersai.pyr   +   s    zCloudflareWorkersAI.__init__)r   c                 C   s   dS )zReturn type of LLM.Z
cloudflarer   r   r   r   r   	_llm_type1   s    zCloudflareWorkersAI._llm_typec                 C   s   i S )zDefault parametersr   r   r   r   r   _default_params6   s    z#CloudflareWorkersAI._default_paramsc                 C   s   | j | j| j| jdS )zIdentifying parametersr   r   r   r   r   r   r   r   r   _identifying_params;   s
    z'CloudflareWorkersAI._identifying_params)promptparamsr   c                 C   s:   dd| j  i}|| jd|}tj| j||| jd}|S )zCall Cloudflare Workers APIAuthorizationzBearer )r!   stream)headersjsonr$   )r   r   requestspostr   )r   r!   r"   r%   dataresponser   r   r   	_call_apiE   s    zCloudflareWorkersAI._call_api)r*   r   c                 C   s.   |j r| }|d d S td|j dS )zProcess API responseresultr*   zRequest failed with status N)okr&   
ValueErrorstatus_code)r   r*   r)   r   r   r   _process_responseN   s    z%CloudflareWorkersAI._process_response)r!   stoprun_managerr   r   c                 k   s   | j }d| _ td}d}| || D ]}||kr8 qt||kr(zt||d }	W n2 ty }
 zt| |
W Y d}
~
n
d}
~
0 0 |	dur(d|	v r(|r|	|	d  t
|	d dV  q(td || _ dS )zStreaming predictionTzdata: s   data: [DONE]Nr*   textz
stream end)r   lenr+   
iter_linesr&   loads	ExceptionloggerdebugZon_llm_new_tokenr	   )r   r!   r1   r2   r   Zoriginal_steamingZ_response_prefix_countZ_response_stream_endchunkr)   er   r   r   _streamV   s&    

zCloudflareWorkersAI._streamc                 K   sF   | j r,ddd | j|||fi |D S | ||}| |S dS )zRegular predictionr   c                 S   s   g | ]
}|j qS r   r3   ).0cr   r   r   
<listcomp>|       z-CloudflareWorkersAI._call.<locals>.<listcomp>N)r   joinr=   r+   r0   )r   r!   r1   r2   r   r*   r   r   r   _callr   s    zCloudflareWorkersAI._call)NN)NN)__name__
__module____qualname____doc__str__annotations__r   r   r   boolr   r   r   propertyr   r   r   r    r'   Responser+   r0   r   r   r   r   r	   r=   rC   __classcell__r   r   r   r   r
      sD   
		  
  
r
   )r&   loggingtypingr   r   r   r   r   r'   Zlangchain_core.callbacksr   Z#langchain_core.language_models.llmsr   Zlangchain_core.outputsr	   	getLoggerrD   r9   r
   r   r   r   r   <module>   s   
