§
    šŠtjÄ  ã                   óš   — 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     €úk/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/cloudflare_workersai.pyr   zCloudflareWorkersAI.__init__+   sJ   ø€ à�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"à#œ}ÐTÐT¨t¬Ð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   € à"Ð$>¨d¬nÐ$>Ð$>Ð?ˆØ ¨D¬NÐEÐE¸fÐEˆÝ”=ØÔ w°TÀ$Ä.ð
ñ 
ô 
ˆð ˆ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Ø˜”> *Ô-Ð-åÐQ¸8Ô;OÐQÐQÑRÔRÐRr   ÚstopÚrun_managerc              +   ó$  K  — | j         }d| _         t          d¦  «        }d}|                      ||¦  «                             ¦   «         D ]¤}||k    r n›t          |¦  «        |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¡¤ÐØ.ÐØ—^’^ F¨FÑ3Ô3×>Ò>Ñ@Ô@ð 	Að 	AˆEØÐ,Ò,Ð,Ø�Ý�5‰zŒzÐ2Ò2Ð2ðÝœ: eÐ,BÐ,CÐ,CÔ&DÑEÔE�D�DøÝ ð ð ð Ý—L’L Ñ'Ô'Ð'Ø�Gøøøøðøøøð Ð#¨
°dÐ(:Ð(:Ø"ð GØ#×4Ò4°T¸*Ô5EÑFÔFÐFÝ)¨t°JÔ/?Ð@Ñ@Ô@Ð@Ð@Ð@øÝ�Š�\Ñ"Ô"Ð"Ø*ˆŒˆˆ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ÐS˜A�”ÐSÐSÐSr   )r   ÚjoinrK   r3   r9   )r   r(   r:   r;   r   r2   s         r   Ú_callzCloudflareWorkersAI._callr   sv   € ð Œ>ð 	4Ø—7’7ØSÐS  ¤¨f°d¸KÐ!RÐ!RÈ6Ð!RÐ!RÐSÑSÔSñô ð ð —~’~ f¨fÑ5Ô5ˆHØ×)Ò)¨(Ñ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\  ø€ € € € € € ðð ð, €O€O�OØ€N€N�NØ0€Eˆ3Ð0Ð0Ñ0ØC€HˆcÐCÐCÑCØ€IˆtÐÐÑØ€L�#ÐÐÑðU ð U¨ð Uð Uð Uð Uð Uð Uð ð˜3ð ð ð ñ „Xðð ð  c¨3 h¤ð ð ð ñ „Xðð ð
 T¨#¨s¨(¤^ð 
ð 
ð 
ñ „Xð
ð ð ¨T°#°s°(¬^ð ÀÔ@Qð ð ð ð ðS¨(Ô*;ð SÀð Sð Sð Sð Sð %)Ø:>ð	+ð +àð+ð �t˜C”yÔ!ð+ð Ð6Ô7ð	+ð
 ð+ð 
�/Ô	"ð+ð +ð +ð +ð> %)Ø:>ð	4ð 4àð4ð �t˜C”yÔ!ð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   