
    Ng                         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j        e          Z G d de          ZdS )    N)AnyDictIteratorListOptional)CallbackManagerForLLMRun)LLM)GenerationChunkc                       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<   deddf fdZedefd            Zedeeef         fd            Zedeeef         fd            Zdedeeef         dej        fdZdej        defdZ	 	 ddedeee                  dee         dedee         f
dZ	 	 ddedeee                  dee         dedef
dZ x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_urlkwargsreturnNc                 v     t                      j        d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__s     i/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/llms/cloudflare_workersai.pyr   zCloudflareWorkersAI.__init__+   sJ    ""6"""#}TTtTT
TT    c                     dS )zReturn type of LLM.
cloudflarer   r   s    r   	_llm_typezCloudflareWorkersAI._llm_type1   s	     |r   c                     i S )zDefault parametersr   r!   s    r   _default_paramsz#CloudflareWorkersAI._default_params6   s	     	r   c                 8    | j         | j        | j        | j        dS )zIdentifying parametersr   r   r   r   r&   r!   s    r   _identifying_paramsz'CloudflareWorkersAI._identifying_params;   s'     /Z	
 
 	
r   promptparamsc                 z    dd| j          i}|| j        d|}t          j        | j        ||| j                  }|S )zCall Cloudflare Workers APIAuthorizationzBearer )r(   stream)headersjsonr,   )r   r   requestspostr   )r   r(   r)   r-   dataresponses         r   	_call_apizCloudflareWorkersAI._call_apiE   sV    "$>dn$>$>? DNEEfE=wT$.
 
 
 r   r2   c                     |j         r"|                                }|d         d         S t          d|j                   )zProcess API responseresultr2   zRequest failed with status )okr.   
ValueErrorstatus_code)r   r2   r1   s      r   _process_responsez%CloudflareWorkersAI._process_responseN   sC    ; 	S==??D>*--Q8;OQQRRRr   stoprun_managerc              +   $  K   | j         }d| _         t          d          }d}|                     ||                                          D ]}||k    r nt          |          |k    r	 t	          j        ||d                   }	n.# t          $ r!}
t                              |           |
d}
~
ww xY w|	9d|	v r5|r|	                    |	d                    t          |	d                   V  t                              d           || _         dS )zStreaming predictionTzdata: s   data: [DONE]Nr2   textz
stream end)r   lenr3   
iter_linesr.   loads	Exceptionloggerdebugon_llm_new_tokenr
   )r   r(   r:   r;   r   original_steaming_response_prefix_count_response_stream_endchunkr1   es              r   _streamzCloudflareWorkersAI._streamV   s=      #'.!$X.^^FF33>>@@ 	A 	AE,,,5zz222:e,B,C,C&DEEDD    LL'''G #
d(:(:" G#44T*5EFFF)tJ/?@@@@@@\"""*s   (B
B0B++B0c                     | j         r-d                    d  | j        |||fi |D                       S |                     ||          }|                     |          S )zRegular predictionr   c                     g | ]	}|j         
S r   r=   ).0cs     r   
<listcomp>z-CloudflareWorkersAI._call.<locals>.<listcomp>|   s    SSSASSSr   )r   joinrK   r3   r9   )r   r(   r:   r;   r   r2   s         r   _callzCloudflareWorkersAI._callr   sv     > 	477SSfdK!R!R6!R!RSSS   ~~ff55H))(333r   )NN)__name__
__module____qualname____doc__str__annotations__r   r   r   boolr   r   r   propertyr"   r   r$   r'   r/   Responser3   r9   r   r   r   r   r
   rK   rR   __classcell__)r   s   @r   r   r      s\         , OOONNN0E3000CHcCCCItL#U U U U U U U U 3    X c3h    X 
T#s(^ 
 
 
 X
 T#s(^ @Q    S(*; S S S S S %):>	+ ++ tCy!+ 67	+
 + 
/	"+ + + +> %):>	4 44 tCy!4 67	4
 4 
4 4 4 4 4 4 4 4r   r   )r.   loggingtypingr   r   r   r   r   r/   langchain_core.callbacksr   #langchain_core.language_models.llmsr	   langchain_core.outputsr
   	getLoggerrS   rC   r   r   r   r   <module>rc      s      6 6 6 6 6 6 6 6 6 6 6 6 6 6  = = = = = = 3 3 3 3 3 3 2 2 2 2 2 2		8	$	$s4 s4 s4 s4 s4# s4 s4 s4 s4 s4r   