§
    šŠtjX>  ã                  óD  — d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m	Z	 d dlm
Z
 d dlmZ d dlmZmZmZmZmZmZ d dlmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dl m!Z!m"Z" d dl#m$Z$  ej%        e&¦  «        Z' G d„ de¦  «        Z( G d„ d¦  «        Z)dS )é    )ÚannotationsN)Údatetime)ÚQueue)Úmktime)ÚAnyÚDictÚ	GeneratorÚIteratorÚListÚOptional)Ú	urlencodeÚurlparseÚ
urlunparse)Úformat_date_time)ÚCallbackManagerForLLMRun)ÚLLM)ÚGenerationChunk)Úget_from_dict_or_envÚpre_init)ÚFieldc                  óÌ  — e Zd ZU dZdZded<    edd¬¦  «        Zded<   	  edd	¬¦  «        Zded
<   	  edd¬¦  «        Z	ded<   	  edd¬¦  «        Z
ded<   	  edd¬¦  «        Zded<   	 dZded<   dZded<   	  edd¬¦  «        Zded<   	 dZded<   	 dZded<   	  ee¬ ¦  «        Zd!ed"<   	 ed2d&„¦   «         Zed3d'„¦   «         Zed4d(„¦   «         Z	 	 d5d6d/„Z	 	 d5d7d1„ZdS )8ÚSparkLLMuT  iFlyTek Spark completion model integration.

    Setup:
        To use, you should set environment variables ``IFLYTEK_SPARK_APP_ID``,
        ``IFLYTEK_SPARK_API_KEY`` and ``IFLYTEK_SPARK_API_SECRET``.

    .. code-block:: bash

            export IFLYTEK_SPARK_APP_ID="your-app-id"
            export IFLYTEK_SPARK_API_KEY="your-api-key"
            export IFLYTEK_SPARK_API_SECRET="your-api-secret"

    Key init args â€” completion params:
        model: Optional[str]
            Name of IFLYTEK SPARK model to use.
        temperature: Optional[float]
            Sampling temperature.
        top_k: Optional[float]
            What search sampling control to use.
        streaming: Optional[bool]
             Whether to stream the results or not.

    Key init args â€” client params:
        app_id: Optional[str]
            IFLYTEK SPARK API KEY. Automatically inferred from env var `IFLYTEK_SPARK_APP_ID` if not provided.
        api_key: Optional[str]
            IFLYTEK SPARK API KEY. If not passed in will be read from env var IFLYTEK_SPARK_API_KEY.
        api_secret: Optional[str]
            IFLYTEK SPARK API SECRET. If not passed in will be read from env var IFLYTEK_SPARK_API_SECRET.
        api_url: Optional[str]
            Base URL for API requests.
        timeout: Optional[int]
            Timeout for requests.

    See full list of supported init args and their descriptions in the params section.

    Instantiate:
        .. code-block:: python

            from langchain_community.llms import SparkLLM

            llm = SparkLLM(
                app_id="your-app-id",
                api_key="your-api_key",
                api_secret="your-api-secret",
                # model='Spark4.0 Ultra',
                # temperature=...,
                # other params...
            )

    Invoke:
        .. code-block:: python

            input_text = "ç”¨50ä¸ªå­—å·¦å�³é˜�è¿°ï¼Œç”Ÿå‘½çš„æ„�ä¹‰åœ¨äºŽ"
            llm.invoke(input_text)

        .. code-block:: python

            'ç”Ÿå‘½çš„æ„�ä¹‰åœ¨äºŽå®žçŽ°è‡ªæˆ‘ä»·å€¼ï¼Œè¿½æ±‚å†…å¿ƒçš„å¹³é�™ä¸Žå¿«ä¹�ï¼Œå�Œæ—¶ä¸ºä»–äººå’Œç¤¾ä¼šå¸¦æ�¥æ­£é�¢å½±å“�ã€‚'

    Stream:
        .. code-block:: python

            for chunk in llm.stream(input_text):
                print(chunk)

        .. code-block:: python

            ç”Ÿå‘½ | çš„æ„�ä¹‰åœ¨äºŽ | ä¸�æ–­æŽ¢ç´¢å’Œ | å®žçŽ°ä¸ªäººæ½œèƒ½ï¼Œé€šè¿‡ | å­¦ä¹  | ã€�æˆ�é•¿å’Œå¯¹ç¤¾ä¼š | çš„è´¡çŒ®ï¼Œè¿½æ±‚å†…å¿ƒçš„æ»¡è¶³å’Œå¹¸ç¦�ã€‚

    Async:
        .. code-block:: python

            await llm.ainvoke(input_text)

            # stream:
            # async for chunk in llm.astream(input_text):
            #    print(chunk)

            # batch:
            # await llm.abatch([input_text])

        .. code-block:: python

            'ç”Ÿå‘½çš„æ„�ä¹‰åœ¨äºŽå®žçŽ°è‡ªæˆ‘ä»·å€¼ï¼Œè¿½æ±‚å†…å¿ƒçš„å¹³é�™ä¸Žå¿«ä¹�ï¼Œå�Œæ—¶ä¸ºä»–äººå’Œç¤¾ä¼šå¸¦æ�¥æ­£é�¢å½±å“�ã€‚'

    Nr   ÚclientÚapp_id)ÚdefaultÚaliasúOptional[str]Úspark_app_idÚapi_keyÚspark_api_keyÚ
api_secretÚspark_api_secretÚapi_urlÚspark_api_urlÚmodelÚspark_llm_domainÚlc_userÚstrÚspark_user_idFÚboolÚ	streamingé   ÚtimeoutÚintÚrequest_timeoutg      à?ÚfloatÚtemperatureé   Útop_k)Údefault_factoryúDict[str, Any]Úmodel_kwargsÚvaluesr   Úreturnc           	     ó¾  — t          |ddgd¦  «        |d<   t          |ddgd¦  «        |d<   t          |ddgd	¦  «        |d<   t          |d
dgdd¦  «        |d
<   t          |ddgdd¦  «        |d<   |d         p| j        |d         d<   |d         p| j        |d         d<   t          |d         |d         |d         |d
         |d         |d         ¬¦  «        |d<   |S )Nr   r   ÚIFLYTEK_SPARK_APP_IDr    r   ÚIFLYTEK_SPARK_API_KEYr"   r!   ÚIFLYTEK_SPARK_API_SECRETr$   r#   ÚIFLYTEK_SPARK_API_URLú$wss://spark-api.xf-yun.com/v3.5/chatr&   r%   ÚIFLYTEK_SPARK_LLM_DOMAINúgeneralv3.5r1   r6   r3   )r   r   r!   r#   Úspark_domainr6   r   )r   r1   r3   Ú_SparkLLMClient)Úclsr7   s     ú_/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/sparkllm.pyÚvalidate_environmentzSparkLLM.validate_environmentŽ   sE  € å!5ØØ˜XÐ&Ø"ñ"
ô "
ˆˆ~Ñõ
 #7ØØ˜iÐ(Ø#ñ#
ô #
ˆˆÑõ
 &:ØØ Ð.Ø&ñ&
ô &
ˆÐ!Ñ"õ
 #7ØØ˜iÐ(Ø#Ø2ñ	#
ô #
ˆˆÑõ &:ØØ Ð)Ø&Øñ	&
ô &
ˆÐ!Ñ"ð 17°}Ô0EÐ0XÈÌˆˆ~Ô˜}Ñ-Ø*0°¬/Ð*F¸S¼Yˆˆ~Ô˜wÑ'å*Ø˜.Ô)Ø˜?Ô+ØÐ0Ô1Ø˜?Ô+ØÐ 2Ô3Ø Ô/ð
ñ 
ô 
ˆˆxÑð ˆó    c                ó   — dS )zReturn type of llm.zspark-llm-chat© )Úselfs    rD   Ú	_llm_typezSparkLLM._llm_type¹   s
   € ð  ÐrF   c                óZ   — | j         | j        | j        | j        | j        dœ}i |¥| j        ¥S )z4Get the default parameters for calling SparkLLM API.)r&   Ústreamr/   r3   r1   )r&   r+   r/   r3   r1   r6   )rI   Únormal_paramss     rD   Ú_default_paramszSparkLLM._default_params¾   sA   € ð !%Ô 5Ø”nØ#Ô3Ø”ZØÔ+ð
ð 
ˆð 6�-Ð5 4Ô#4Ð5Ð5rF   ÚpromptÚstopúOptional[List[str]]Úrun_managerú"Optional[CallbackManagerForLLMRun]Úkwargsc                ó&  — | j         r!d} | j        |||fi |¤ŽD ]}||j        z  }Œ|S d}| j                             d|dœg| j        | j        | j         ¦  «         | j                             | j        ¬¦  «        D ]}d|vrŒ|d         d         }Œ|S )av  Call out to an sparkllm for each generation with a prompt.
        Args:
            prompt: The prompt to pass into the model.
            stop: Optional list of stop words to use when generating.
        Returns:
            The string generated by the llm.

        Example:
            .. code-block:: python
                response = client("Tell me a joke.")
        Ú Úuser©ÚroleÚcontent©r-   ÚdatarZ   )	r+   Ú_streamÚtextr   Úarunr)   r6   Ú	subscriber/   )rI   rO   rP   rR   rT   Ú
completionÚchunkrZ   s           rD   Ú_callzSparkLLM._callË   s×   € ð$ Œ>ð 	ØˆJØ%˜œ f¨d°KÐJÐJÀ6ÐJÐJð )ð )�Ø˜eœjÑ(�
�
ØÐØˆ
ØŒ×ÒØ¨Ð0Ð0Ð1ØÔØÔØŒNñ		
ô 	
ð 	
ð ”{×,Ò,°TÔ5IÐ,ÑJÔJð 	4ð 	4ˆGØ˜WÐ$Ð$ØØ  œ¨Ô3ˆJˆJàÐrF   úIterator[GenerationChunk]c              +  ó  K  — | j                              d|dœg| j        | j        d¦  «         | j                              | j        ¬¦  «        D ]>}d|vrŒ|d         }|r|                     |¦  «         t          |d         ¬¦  «        V — Œ?d S )NrW   rX   Tr[   r\   rZ   )r^   )r   Úrunr)   r6   r`   r/   Úon_llm_new_tokenr   )rI   rO   rP   rR   rT   rZ   Údeltas          rD   r]   zSparkLLM._streamð   sÀ   è è € ð 	Œ�ŠØ¨Ð0Ð0Ð1ØÔØÔØñ		
ô 	
ð 	
ð ”{×,Ò,°TÔ5IÐ,ÑJÔJð 	9ð 	9ˆGØ˜WÐ$Ð$ØØ˜F”OˆEØð 4Ø×,Ò,¨UÑ3Ô3Ð3Ý! u¨YÔ'7Ð8Ñ8Ô8Ð8Ð8Ð8Ð8ð	9ð 	9rF   )r7   r   r8   r   )r8   r(   )r8   r5   )NN)
rO   r(   rP   rQ   rR   rS   rT   r   r8   r(   )
rO   r(   rP   rQ   rR   rS   rT   r   r8   rd   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r    r"   r$   r&   r)   r+   r/   r1   r3   Údictr6   r   rE   ÚpropertyrJ   rN   rc   r]   rH   rF   rD   r   r      s  € € € € € € ðVð Vðp €FÐÐÐÑØ"' %°¸HÐ"EÑ"EÔ"E€LÐEÐEÐEÑEðà#( 5°¸YÐ#GÑ#GÔ#G€MÐGÐGÐGÑGð*à&+ e°DÀÐ&MÑ&MÔ&MÐÐMÐMÐMÑMð-à#( 5°¸YÐ#GÑ#GÔ#G€MÐGÐGÐGÑGðà&+ e°DÀÐ&HÑ&HÔ&HÐÐHÐHÐHÑHØØ"€MÐ"Ð"Ð"Ñ"Ø€IÐÐÐÑØ/Ø ˜5¨°9Ð=Ñ=Ô=€OÐ=Ð=Ð=Ñ=Ø0Ø€KÐÐÐÑØ+Ø€E€N€N€N�NØ.Ø#( 5¸Ð#>Ñ#>Ô#>€LÐ>Ð>Ð>Ñ>ØQàð(ð (ð (ñ „Xð(ðT ð ð  ð  ñ „Xð ð ð
6ð 
6ð 
6ñ „Xð
6ð %)Ø:>ð	#ð #ð #ð #ð #ðP %)Ø:>ð	9ð 9ð 9ð 9ð 9ð 9ð 9rF   r   c                  óŒ   — e Zd ZdZ	 	 	 d-d.d„Zed/d„¦   «         Z	 	 d0d1d„Z	 	 d0d2d„Zd3d„Z	d4d!„Z
d5d"„Zd6d$„Z	 d7d8d'„Zd9d:d,„ZdS );rB   z�
    Use websocket-client to call the SparkLLM interface provided by Xfyun,
    which is the iFlyTek's open platform for AI capabilities
    Nr   r(   r   r!   r#   r   rA   r6   úOptional[dict]c                óô   — 	 dd l }|| _        n# t          $ r t          d¦  «        ‚w xY w|sdn|| _        || _        || _        |pd| _        t          ¦   «         | _        dddœ| _	        || _
        || _        d S )Nr   zhCould not import websocket client python package. Please install it with `pip install websocket-client`.r>   r@   rV   Ú	assistant©rZ   rY   )Ú	websocketÚwebsocket_clientÚImportErrorr#   r   r6   rA   r   ÚqueueÚblocking_messager   r!   )rI   r   r   r!   r#   rA   r6   ru   s           rD   Ú__init__z_SparkLLMClient.__init__  s´   € ð	ØÐÐÐà$-ˆDÔ!Ð!øÝð 	ð 	ð 	ÝðIñô ð ð	øøøð ;BÐNÐ2Ð2Àwð 	Œð ˆŒØ(ˆÔØ(Ð9¨MˆÔÝ"'¡'¤'ˆŒ
Ø,.¸Ð DÐ DˆÔØˆŒØ$ˆŒˆˆs   ‚ Ž(r8   c                óæ  — t          t          t          j        ¦   «                              ¦   «         ¦  «        ¦  «        }t          | ¦  «        }|j        }|j        }d|› d|› d|› d�}t          j	        | 
                    d¦  «        | 
                    d¦  «        t          j        ¬¦  «                             ¦   «         }t          j        |¦  «                             d¬¦  «        }	d|› d	|	› d
�}
t          j        |
 
                    d¦  «        ¦  «                             d¬¦  «        }|||dœ}t#          |¦  «        }t%          |j        |j        |j        |j        ||j        f¦  «        }|S )zK
        Generate a request url with an api key and an api secret.
        zhost: z
date: z
GET z	 HTTP/1.1zutf-8)Ú	digestmod)Úencodingz	api_key="zQ", algorithm="hmac-sha256",         headers="host date request-line", signature="ú")ÚauthorizationÚdateÚhost)r   r   r   ÚnowÚ	timetupler   ÚnetlocÚpathÚhmacÚnewÚencodeÚhashlibÚsha256ÚdigestÚbase64Ú	b64encodeÚdecoder   r   ÚschemeÚparamsÚfragment)r#   r   r!   r€   Ú
parsed_urlr�   r…   Úsignature_originÚsignature_shaÚsignature_sha_base64Úauthorization_originr   Úparams_dictÚencoded_paramsÚurls                  rD   Ú_create_urlz_SparkLLMClient._create_url*  s˜  € õ  ¥¥x¤|¡~¤~×'?Ò'?Ñ'AÔ'AÑ BÔ BÑCÔCˆõ ˜gÑ&Ô&ˆ
ØÔ ˆØŒˆàM DÐMÐM°$ÐMÐM¸dÐMÐMÐMÐõ œØ×Ò˜gÑ&Ô&Ø×#Ò# GÑ,Ô,Ý”nð
ñ 
ô 
÷ Š&‰(Œ(ð	 	õ  &Ô/°Ñ>Ô>×EÒEÈwÐEÑWÔWÐð N¨7ð  Nð  NØ6Jð Nð  Nð  NÐåÔ(Ð)=×)DÒ)DÀWÑ)MÔ)MÑNÔN×UÒUØð Vñ 
ô 
ˆð
 )6¸tÈTÐRÐRˆÝ" ;Ñ/Ô/ˆÝàÔ!ØÔ!Ø”ØÔ!ØØÔ#ðñ	
ô 	
ˆð ˆ
rF   FÚmessagesú
List[Dict]Úuser_idr+   r*   ÚNonec                ód  — | j                              d¦  «         | j                              t                               | j        | j        | j        ¦  «        | j        | j	        | j
        | j        ¬¦  «        }||_        ||_        |€| j        n||_        ||_        |                     ¦   «          d S )NF)Ú
on_messageÚon_errorÚon_closeÚon_open)rv   ÚenableTraceÚWebSocketApprB   rš   r#   r   r!   r    r¡   r¢   r£   r›   r�   r6   r+   Úrun_forever)rI   r›   r�   r6   r+   Úwss         rD   rf   z_SparkLLMClient.runW  s±   € ð 	Ô×)Ò)¨%Ñ0Ô0Ð0ØÔ"×/Ò/Ý×'Ò'Ø”Ø”Ø”ñô ð
 ”Ø”]Ø”]Ø”Lð 0ñ 

ô 

ˆð ˆŒØˆŒ
Ø/;Ð/C˜$Ô+Ð+ÈˆŒØ ˆŒØ
�ŠÑÔÐÐÐrF   úthreading.Threadc                ól   — t          j        | j        ||||f¬¦  «        }|                     ¦   «          |S )N)ÚtargetÚargs)Ú	threadingÚThreadrf   Ústart)rI   r›   r�   r6   r+   Ú	ws_threads         rD   r_   z_SparkLLMClient.arunp  sI   € õ Ô$Ø”8àØØØð	ð
ñ 
ô 
ˆ	ð 	�ŠÑÔÐØÐrF   r§   r   ÚerrorúOptional[Any]c                óf   — | j                              d|i¦  «         |                     ¦   «          d S )Nr°   )rx   ÚputÚclose)rI   r§   r°   s      rD   r¡   z_SparkLLMClient.on_errorƒ  s,   € ØŒ
�Š˜ Ð'Ñ(Ô(Ð(Ø
�Š‰
Œ
ˆ
ˆ
ˆ
rF   Úclose_status_coder.   Úclose_reasonc                ó|   — t                                d||dœi¦  «         | j                             ddi¦  «         d S )NÚlog)rµ   r¶   ÚdoneT)ÚloggerÚdebugrx   r³   )rI   r§   rµ   r¶   s       rD   r¢   z_SparkLLMClient.on_close‡  sP   € Ý�ŠàØ):Ø$0ðð ðñ	
ô 	
ð 	
ð 	Œ
�Š˜ �~Ñ&Ô&Ð&Ð&Ð&rF   c                ó¶   — dddœ| _         t          j        |                      |j        |j        |j        ¬¦  «        ¦  «        }|                     |¦  «         d S )NrV   rs   rt   )r›   r�   r6   )ry   ÚjsonÚdumpsÚ
gen_paramsr›   r�   r6   Úsend)rI   r§   r\   s      rD   r£   z_SparkLLMClient.on_open’  s[   € Ø,.¸Ð DÐ DˆÔÝŒzØ�OŠOØœ¨b¬jÀrÄð ñ ô ñ
ô 
ˆð
 	�Š�‰ŒˆˆˆrF   Úmessagec                ó   — t          j        |¦  «        }|d         d         }|dk    rD| j                             dd|› d|d         d         › �i¦  «         |                     ¦   «          d S |d         d	         }|d
         }|d         d         d         }|j        r)| j                             d|d         d         i¦  «         n| j        dxx         |z  cc<   |dk    rœ|j        s!| j                             d| j        i¦  «         |r>|                     di ¦  «                             di ¦  «                             di ¦  «        ni }| j                             d|i¦  «         |                     ¦   «          d S d S )NÚheaderÚcoder   r°   zCode: z	, Error: rÁ   ÚpayloadÚchoicesÚstatusr^   rZ   r\   é   Úusage)r½   Úloadsrx   r³   r´   r+   ry   Úget)	rI   r§   rÁ   r\   rÄ   rÆ   rÇ   rZ   Ú
usage_datas	            rD   r    z_SparkLLMClient.on_message›  s–  € ÝŒz˜'Ñ"Ô"ˆØ�HŒ~˜fÔ%ˆØ�1Š9ˆ9ØŒJ�NŠNØÐM 4ÐMÐM°$°x´.ÀÔ2KÐMÐMÐNñô ð ð �HŠH‰JŒJˆJˆJˆJà˜9”o iÔ0ˆGØ˜XÔ&ˆFØ˜f”o aÔ(¨Ô3ˆGØŒ|ð <Ø”
—’ ¨°¬¸Ô(:Ð;Ñ<Ô<Ð<Ð<àÔ% iÐ0Ð0Ô0°GÑ;Ð0Ð0Ñ0Ø˜Š{ˆ{Ø”|ð DØ”J—N’N F¨DÔ,AÐ#BÑCÔCÐCð ð�D—H’H˜Y¨Ñ+Ô+×/Ò/°¸Ñ<Ô<×@Ò@ÀÈÑLÔLÐLàð ð
 ”
—’ ¨Ð4Ñ5Ô5Ð5Ø—’‘
”
�
�
�
ð ˆ{rF   Úlistrn   c                ó¼   — | j         |dœdd| j        iidd|iidœ}|r!|d         d                              |¦  «         t                               d|› �¦  «         |S )	N)r   ÚuidÚchatÚdomainrÁ   r^   )rÃ   Ú	parameterrÅ   rÒ   zSpark Request Parameters: )r   rA   Úupdaterº   r»   )rI   r›   r�   r6   r\   s        rD   r¿   z_SparkLLMClient.gen_params¶  s‚   € ð "&¤°WÐ=Ð=Ø  8¨TÔ->Ð"?Ð@Ø! F¨HÐ#5Ð6ð
ð 
ˆð ð 	;Ø�Ô˜fÔ%×,Ò,¨\Ñ:Ô:Ð:Ý�ŠÐ8°$Ð8Ð8Ñ9Ô9Ð9ØˆrF   r,   r-   úOptional[int]úGenerator[Dict, None, None]c              #  óü   K  — 	 	 | j                              |¬¦  «        }n*# t           j        $ r}t          d|› d�¦  «        ‚d }~ww xY wd|v rt	          |d         ¦  «        ‚d|v r|V — Œjd|v rd S d|vrd S |V — Œz)	NTr[   z-SparkLLMClient wait LLM api response timeout z secondsr°   rÉ   r¹   r\   )rx   rË   ÚEmptyÚTimeoutErrorÚConnectionError)rI   r-   rZ   Ú_s       rD   r`   z_SparkLLMClient.subscribeÄ  sÍ   è è € ð	ðØœ*Ÿ.š.°˜.Ñ9Ô9��øÝ”;ð ð ð Ý"ØUÀGÐUÐUÐUñô ð øøøøðøøøð ˜'Ð!Ð!Ý% g¨gÔ&6Ñ7Ô7Ð7Ø˜'Ð!Ð!Ø���ØØ˜Ð Ð Ø�Ø˜WÐ$Ð$Ø�ØˆMˆMˆMð!	s   …! ¡A°AÁA)NNN)r   r(   r   r(   r!   r(   r#   r   rA   r   r6   rq   )r#   r(   r   r(   r!   r(   r8   r(   )NF)
r›   rœ   r�   r(   r6   rq   r+   r*   r8   rž   )
r›   rœ   r�   r(   r6   rq   r+   r*   r8   r¨   )r§   r   r°   r±   r8   rž   )r§   r   rµ   r.   r¶   r(   r8   rž   )r§   r   r8   rž   )r§   r   rÁ   r(   r8   rž   )N)r›   rÍ   r�   r(   r6   rq   r8   rn   )r,   )r-   rÔ   r8   rÕ   )ri   rj   rk   rl   rz   Ústaticmethodrš   rf   r_   r¡   r¢   r£   r    r¿   r`   rH   rF   rD   rB   rB     s.  € € € € € ðð ð "&Ø&*Ø'+ð%ð %ð %ð %ð %ð< ð*ð *ð *ñ „\ð*ð` (,Øðð ð ð ð ð: (,Øðð ð ð ð ð&ð ð ð ð	'ð 	'ð 	'ð 	'ðð ð ð ðð ð ð ð8 LPðð ð ð ð ðð ð ð ð ð ð rF   rB   )*Ú
__future__r   rŒ   r‰   r†   r½   Úloggingrx   r¬   r   r   Útimer   Útypingr   r   r	   r
   r   r   Úurllib.parser   r   r   Úwsgiref.handlersr   Úlangchain_core.callbacksr   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr   Úlangchain_core.utilsr   r   Úpydanticr   Ú	getLoggerri   rº   r   rB   rH   rF   rD   ú<module>rè      sÐ  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø -Ð -Ð -Ð -Ð -Ð -à =Ð =Ð =Ð =Ð =Ð =Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø Ð Ð Ð Ð Ð à	ˆÔ	˜8Ñ	$Ô	$€ði9ð i9ð i9ð i9ð i9ˆsñ i9ô i9ð i9ðXOð Oð Oð Oð Oñ Oô Oð Oð Oð OrF   