
    dh                         S SK r S SKrS SKJrJrJrJrJr  S SKrS SK	J
r
  S SKJr  S SKJr  \R                  " \5      r " S S\5      rg)    N)AnyDictIteratorListOptional)CallbackManagerForLLMRun)LLM)GenerationChunkc                     ^  \ rS rSr% Sr\\S'   \\S'   Sr\\S'   Sr\\S'   S	r	\
\S
'   Sr\\S'   S\SS4U 4S jjr\S\4S j5       r\S\\\4   4S j5       r\S\\\4   4S j5       rS\S\\\4   S\R(                  4S jrS\R(                  S\4S jr  SS\S\\\      S\\   S\S\\   4
S jjr  SS\S\\\      S\\   S\S\4
S jjrSrU =r$ )CloudflareWorkersAI   aH  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U ]  " S0 UD6  U R                   SU R                   SU R                   3U l        g)z+Initialize the Cloudflare Workers AI class./z/ai/run/N )super__init__r   r   r   r   )selfr   	__class__s     e/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/llms/cloudflare_workersai.pyr   CloudflareWorkersAI.__init__+   s9    "6"#}}oQt.?x

|T    c                     g)zReturn type of LLM.
cloudflarer   r   s    r   	_llm_typeCloudflareWorkersAI._llm_type1   s     r    c                     0 $ )zDefault parametersr   r#   s    r   _default_params#CloudflareWorkersAI._default_params6   s	     	r    c                 `    U R                   U R                  U R                  U R                  S.$ )zIdentifying parametersr   r   r   r   r*   r#   s    r   _identifying_params'CloudflareWorkersAI._identifying_params;   s*     //ZZ	
 	
r    promptparamsc                     SSU R                    30nXR                  S.UEn[        R                  " U R                  X4U R                  S9nU$ )zCall Cloudflare Workers APIAuthorizationzBearer )r-   stream)headersjsonr1   )r   r   requestspostr   )r   r-   r.   r2   dataresponses         r   	_call_apiCloudflareWorkersAI._call_apiE   sO    "gdnn-=$>? NNEfE==w$..
 r    r7   c                     UR                   (       a  UR                  5       nUS   S   $ [        SUR                   35      e)zProcess API responseresultr7   zRequest failed with status )okr3   
ValueErrorstatus_code)r   r7   r6   s      r   _process_response%CloudflareWorkersAI._process_responseN   s=    ;;==?D>*--:8;O;O:PQRRr    stoprun_managerc              +     #    U R                   nSU l         [        S5      nSnU R                  X5      R                  5        Hj  nX:X  a    Od[        U5      U:  d  M   [        R
                  " XS 5      n	U	c  M9  SU	;   d  MA  U(       a  UR                  U	S   5        [        U	S   S9v   Ml     [        R                  S5        XPl         g! [         a  n
[        R                  U5        U
eSn
A
ff = f7f)zStreaming predictionTzdata: s   data: [DONE]Nr7   )textz
stream end)r   lenr8   
iter_linesr3   loads	Exceptionloggerdebugon_llm_new_tokenr
   )r   r-   rA   rB   r   original_steaming_response_prefix_count_response_stream_endchunkr6   es              r   _streamCloudflareWorkersAI._streamV   s      #'..!$X.^^F3>>@E,5z22::e,C&DED #
d(:"#44T*5EF)tJ/?@@ A 	\"* ! LL'Gs7   AC5C6C5;C5A	C5
C2C--C22C5c                     U R                   (       a<  SR                  U R                  " XU40 UD6 Vs/ sH  oUR                  PM     sn5      $ U R	                  X5      nU R                  U5      $ s  snf )zRegular predictionr   )r   joinrQ   rD   r8   r?   )r   r-   rA   rB   r   cr7   s          r   _callCloudflareWorkersAI._callr   si     >>77!%fK!R6!RS!RA!RS  ~~f5H))(33	 Ts   A0)r   r   )NN) __name__
__module____qualname____firstlineno____doc__str__annotations__r   r   r   boolr   r   r   propertyr$   r   r'   r+   r4   Responser8   r?   r   r   r   r   r
   rQ   rV   __static_attributes____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 
4 4r    r   )r3   loggingtypingr   r   r   r   r   r4   langchain_core.callbacksr   #langchain_core.language_models.llmsr	   langchain_core.outputsr
   	getLoggerrX   rI   r   r   r    r   <module>rj      s;      6 6  = 3 2			8	$s4# s4r    