
    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	m
Z
 d dlmZ d dlmZ  ej                  e      Z G d de      Zy)    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                 ~    t        |   di | | j                   d| j                   d| j                   | _        y)z+Initialize the Cloudflare Workers AI class./z/ai/run/N )super__init__r   r   r   r   )selfr   	__class__s     k/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/llms/cloudflare_workersai.pyr   zCloudflareWorkersAI.__init__+   s9    "6"#}}oQt.?x

|T    c                      y)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                 `    | j                   | j                  | j                  | j                  dS )zIdentifying parametersr   r   r   r   r&   r!   s    r   _identifying_paramsz'CloudflareWorkersAI._identifying_params;   s*     //ZZ	
 	
r   promptparamsc                     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   sS    "gdnn-=$>? DNNEfE==wT$..
 r   r2   c                 z    |j                   r|j                         }|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   s=    ;;==?D>*--:8;O;O:PQRRr   stoprun_managerc              +     K   | j                   }d| _         t        d      }d}| j                  ||      j                         D ]`  }||k(  r nYt        |      |kD  s	 t	        j
                  ||d       }	|	5d|	v s:|r|j                  |	d          t        |	d          b t        j                  d       || _         y# t        $ r}
t        j                  |       |
d}
~
ww xY ww)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>>@ 	AE,,5z22::e,B,C&DED #
d(:"#44T*5EF)tJ/?@@	A 	\"* ! LL'Gs7   AC+C5C+8C+=AC+	C(C##C((C+c                     | j                   r<dj                   | j                  |||fi |D cg c]  }|j                   c}      S | j	                  ||      }| j                  |      S c c}w )zRegular predictionr   )r   joinrJ   r=   r3   r9   )r   r(   r:   r;   r   cr2   s          r   _callzCloudflareWorkersAI._callr   sk     >>77!-fdK!R6!RSAS  ~~ff5H))(33	 Ts   A,)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
   rJ   rN   __classcell__)r   s   @r   r   r      s   , ON0E30CHcCItL#U U U 3   c3h   
T#s(^ 
 
 T#s(^ @Q@Q S(*;*; S S %):>	++ tCy!+ 67	+
 + 
/	"+> %):>	44 tCy!4 67	4
 4 
4r   r   )r.   loggingtypingr   r   r   r   r   r/   langchain_core.callbacksr   #langchain_core.language_models.llmsr	   langchain_core.outputsr
   	getLoggerrO   rB   r   r   r   r   <module>r_      s=      6 6  = 3 2			8	$s4# s4r   