§
    šŠtj(  ã                  óÂ   — d dl mZ d dlZd dlmZmZmZmZmZm	Z	 d dl
mZmZ d dlmZ d dlmZ d dlmZmZmZ d dlmZmZ  ej        e¦  «        Z G d	„ d
e¦  «        ZdS )é    )ÚannotationsN)ÚAnyÚAsyncIteratorÚDictÚIteratorÚListÚOptional)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚLLM)ÚGenerationChunk)Úconvert_to_secret_strÚget_from_dict_or_envÚpre_init)ÚFieldÚ	SecretStrc                  óò  ‡ — e Zd ZU dZ ee¬¦  «        Zded<   	  ee¬¦  «        Z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<   	  e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<   dZded <   	 ed8d$„¦   «         Zed9ˆ fd%„¦   «         Zed:d'„¦   «         Zed9d(„¦   «         Zd;d,„Z	 	 d<d=d1„Z	 	 d<d>d3„Z	 	 d<d?d5„Z	 	 d<d@d7„Zˆ xZS )AÚQianfanLLMEndpointun  Baidu Qianfan completion model integration.

    Setup:
        Install ``qianfan`` and set environment variables ``QIANFAN_AK``, ``QIANFAN_SK``.

        .. code-block:: bash

            pip install qianfan
            export QIANFAN_AK="your-api-key"
            export QIANFAN_SK="your-secret_key"

    Key init args â€” completion params:
        model: str
            Name of Qianfan model to use.
        temperature: Optional[float]
            Sampling temperature.
        endpoint: Optional[str]
            Endpoint of the Qianfan LLM
        top_p: Optional[float]
            What probability mass to use.

    Key init args â€” client params:
        timeout: Optional[int]
            Timeout for requests.
        api_key: Optional[str]
            Qianfan API KEY. If not passed in will be read from env var QIANFAN_AK.
        secret_key: Optional[str]
            Qianfan SECRET KEY. If not passed in will be read from env var QIANFAN_SK.

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

    Instantiate:
        .. code-block:: python

            from langchain_community.llms import QianfanLLMEndpoint

            llm = QianfanLLMEndpoint(
                model="ERNIE-3.5-8K",
                # api_key="...",
                # secret_key="...",
                # 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

            ç”Ÿå‘½çš„æ„�ä¹‰ | åœ¨äºŽä¸�æ–­æŽ¢ç´¢ | ä¸Žæˆ�é•¿ | ï¼Œå®žçŽ° | è‡ªæˆ‘ä»·å€¼ï¼Œ| ç»™äºˆçˆ± | å¹¶æŽ¥å�— | çˆ±ï¼Œ | åœ¨ç»�åŽ† | ä¸­æ„Ÿæ‚Ÿ | ï¼Œè®© | çŸ­æš‚çš„å­˜åœ¨ | ç»½æ”¾å‡ºæ— é™� | çš„å…‰å½© | ä¸Žæ¸©æš– | ã€‚

        .. code-block:: python

            stream = llm.stream(input_text)
            full = next(stream)
            for chunk in stream:
                full += chunk
            full

        .. code-block::

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

    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

            'ç”Ÿå‘½çš„æ„�ä¹‰åœ¨äºŽæŽ¢ç´¢ã€�æˆ�é•¿ã€�çˆ±ä¸Žè¢«çˆ±ã€�è´¡çŒ®ç¤¾ä¼šï¼Œåœ¨æœ‰é™�çš„æ—¶é—´é‡Œè¿½å¯»æ— é™�çš„å�¯èƒ½ï¼Œå®žçŽ°è‡ªæˆ‘ä»·å€¼ï¼Œè®©ç”Ÿæ´»å……æ»¡è‰²å½©ä¸Žæ„�ä¹‰ã€‚'

    )Údefault_factoryúDict[str, Any]Úinit_kwargsÚmodel_kwargsNr   ÚclientÚapi_key)ÚdefaultÚaliaszOptional[SecretStr]Ú
qianfan_akÚ
secret_keyÚ
qianfan_skFzOptional[bool]Ú	streaming©r   zOptional[str]ÚmodelÚendpointé<   ÚtimeoutzOptional[int]Úrequest_timeoutgš™™™™™é?zOptional[float]Útop_pgffffffî?Útemperatureé   Úpenalty_scoreÚvaluesr   Úreturnc                ón  — t          t          |ddgdd¬¦  «        ¦  «        |d<   t          t          |ddgdd¬¦  «        ¦  «        |d<   i |                     d	i ¦  «        ¥d
|d
         i¥}|d                              ¦   «         dk    r|d                              ¦   «         |d<   |d                              ¦   «         dk    r|d                              ¦   «         |d<   |d         �|d         dk    r|d         |d<   	 dd l} |j        di |¤Ž|d<   n# t          $ r t          d¦  «        ‚w xY w|S )Nr   r   Ú
QIANFAN_AKÚ r!   r   r   Ú
QIANFAN_SKr   r"   ÚakÚskr#   r   r   zGqianfan package not found, please install it with `pip install qianfan`© )r   r   ÚgetÚget_secret_valueÚqianfanÚ
CompletionÚImportError)Úclsr+   Úparamsr6   s       úm/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/baidu_qianfan_endpoint.pyÚvalidate_environmentz'QianfanLLMEndpoint.validate_environment�   s   € å4Ý ØØ˜yÐ)ØØð	ñ ô ñ 
ô  
ˆˆ|Ñõ  5Ý ØØ˜|Ð,ØØð	ñ ô ñ 
ô  
ˆˆ|Ñð
Ø�jŠj˜¨Ñ+Ô+ð
à�V˜G”_ð
ð 
ˆð �,Ô×0Ò0Ñ2Ô2°bÒ8Ð8Ø! ,Ô/×@Ò@ÑBÔBˆF�4‰LØ�,Ô×0Ò0Ñ2Ô2°bÒ8Ð8Ø! ,Ô/×@Ò@ÑBÔBˆF�4‰LØ�*ÔÐ)¨f°ZÔ.@ÀBÒ.FÐ.FØ!'¨
Ô!3ˆF�:Ñð	ØˆNˆNˆNà1˜wÔ1Ð;Ð;°FÐ;Ð;ˆF�8ÑÐøÝð 	ð 	ð 	Ýð(ñô ð ð	øøøð
 ˆs   ÄD ÄD2c                óL   •— i | j         | j        dœ¥t          ¦   «         j        ¥S )N)r#   r"   )r#   r"   ÚsuperÚ_identifying_params)ÚselfÚ	__class__s    €r;   r?   z&QianfanLLMEndpoint._identifying_paramsÅ   s0   ø€ ð
Øœ=°4´:Ð>Ð>ð
å‰gŒgÔ)ð
ð 	
ó    Ústrc                ó   — dS )zReturn type of llm.zbaidu-qianfan-endpointr3   )r@   s    r;   Ú	_llm_typezQianfanLLMEndpoint._llm_typeÌ   s
   € ð (Ð'rB   c                ór   — | j         | j        | j        | j        | j        | j        | j        dœ}i |¥| j        ¥S )z3Get the default parameters for calling Qianfan API.)r"   r#   Ústreamr&   r'   r(   r*   )r"   r#   r    r&   r'   r(   r*   r   )r@   Únormal_paramss     r;   Ú_default_paramsz"QianfanLLMEndpoint._default_paramsÑ   sK   € ð ”ZØœØ”nØ#Ô3Ø”ZØÔ+Ø!Ô/ð
ð 
ˆð 6�-Ð5 4Ô#4Ð5Ð5rB   ÚpromptÚkwargsÚdictc                ód   — d|v r|                      d¦  «        |d<   i || j        dœ¥| j        ¥|¥S )Nr    rG   )rJ   r"   )Úpopr"   rI   )r@   rJ   rK   s      r;   Ú_convert_prompt_msg_paramsz-QianfanLLMEndpoint._convert_prompt_msg_paramsà   sV   € ð
 ˜&Ð Ð Ø%Ÿzšz¨+Ñ6Ô6ˆF�8Ñð
Ø¨$¬*Ð5Ð5ð
àÔ"ð
ð ð
ð 	
rB   ÚstopúOptional[List[str]]Úrun_managerú"Optional[CallbackManagerForLLMRun]c                ó¬   — | j         r!d} | j        |||fi |¤ŽD ]}||j        z  }Œ|S  | j        |fi |¤Ž}||d<    | j        j        di |¤Ž}|d         S )a•  Call out to an qianfan models endpoint 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 model.

        Example:
            .. code-block:: python
                response = qianfan_model.invoke("Tell me a joke.")
        r/   rP   Úresultr3   )r    Ú_streamÚtextrO   r   Údo©	r@   rJ   rP   rR   rK   Ú
completionÚchunkr:   Úresponse_payloads	            r;   Ú_callzQianfanLLMEndpoint._callí   s–   € ð$ Œ>ð 	ØˆJØ%˜œ f¨d°KÐJÐJÀ6ÐJÐJð )ð )�Ø˜eœjÑ(�
�
ØÐØ0�Ô0°ÐBÐB¸6ÐBÐBˆØˆˆv‰Ø)˜4œ;œ>Ð3Ð3¨FÐ3Ð3Ðà Ô)Ð)rB   ú'Optional[AsyncCallbackManagerForLLMRun]c              ‹  óÈ   K  — | j         r'd} | j        |||fi |¤Ž2 3 d {V —†}||j        z  }Œ6 |S  | j        |fi |¤Ž}||d<    | j        j        di |¤Žƒ d {V —†}|d         S )Nr/   rP   rU   r3   )r    Ú_astreamrW   rO   r   ÚadorY   s	            r;   Ú_acallzQianfanLLMEndpoint._acall
  sË   è è € ð Œ>ð 	ØˆJØ,˜tœ}¨V°T¸;ÐQÐQÈ&ÐQÐQð )ð )ð )ð )ð )ð )ð )�eØ˜eœjÑ(�
�
ð  RàÐà0�Ô0°ÐBÐB¸6ÐBÐBˆØˆˆv‰Ø!0 ¤¤Ð!:Ð!:°6Ð!:Ð!:Ð:Ð:Ð:Ð:Ð:Ð:Ðà Ô)Ð)s   œ.úIterator[GenerationChunk]c              +  óÖ   K  —  | j         |fi i |¥ddi¥¤Ž}||d<    | j        j        di |¤ŽD ]:}|r6t          |d         ¬¦  «        }|r|                     |j        ¦  «         |V — Œ;d S ©NrG   TrP   rU   )rW   r3   )rO   r   rX   r   Úon_llm_new_tokenrW   ©r@   rJ   rP   rR   rK   r:   Úresr[   s           r;   rV   zQianfanLLMEndpoint._stream  s­   è è € ð 1�Ô0°ÐVÐVÐ;U¸fÐ;UÀhÐPTÐ;UÐ;UÐVÐVˆØˆˆv‰Ø!�4”;”>Ð+Ð+ FÐ+Ð+ð 	ð 	ˆCØð Ý'¨S°¬]Ð;Ñ;Ô;�Øð =Ø×0Ò0°´Ñ<Ô<Ð<Ø���øð	ð 	rB   úAsyncIterator[GenerationChunk]c               óü   K  —  | j         |fi i |¥ddi¥¤Ž}||d<    | j        j        di |¤Žƒ d {V —†2 3 d {V —†}|r=t          |d         ¬¦  «        }|r |                     |j        ¦  «        ƒ d {V —† |W V — ŒG6 d S re   )rO   r   ra   r   rf   rW   rg   s           r;   r`   zQianfanLLMEndpoint._astream-  sî   è è € ð 1�Ô0°ÐVÐVÐ;U¸fÐ;UÀhÐPTÐ;UÐ;UÐVÐVˆØˆˆv‰Ø.˜tœ{œÐ8Ð8°Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ð 	ð 	ð 	ð 	ð 	ð 	ð 	�#Øð Ý'¨S°¬]Ð;Ñ;Ô;�Øð CØ%×6Ò6°u´zÑBÔBÐBÐBÐBÐBÐBÐBÐBØ����øð 9Ð8Ð8s   ´A;)r+   r   r,   r   )r,   r   )r,   rC   )rJ   rC   rK   r   r,   rL   )NN)
rJ   rC   rP   rQ   rR   rS   rK   r   r,   rC   )
rJ   rC   rP   rQ   rR   r^   rK   r   r,   rC   )
rJ   rC   rP   rQ   rR   rS   rK   r   r,   rc   )
rJ   rC   rP   rQ   rR   r^   rK   r   r,   ri   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rL   r   Ú__annotations__r   r   r   r   r    r"   r#   r&   r'   r(   r*   r   r<   Úpropertyr?   rE   rI   rO   r]   rb   rV   r`   Ú__classcell__)rA   s   @r;   r   r      s”  ø€ € € € € € ð[ð [ðz #( %¸Ð"=Ñ"=Ô"=€KÐ=Ð=Ð=Ñ=ð@ð $) 5¸Ð#>Ñ#>Ô#>€LÐ>Ð>Ð>Ñ>Ø8à€FÐÐÐÑà&+ e°DÀ	Ð&JÑ&JÔ&J€JÐJÐJÐJÑJØ&+ e°DÀÐ&MÑ&MÔ&M€JÐMÐMÐMÑMà %€IÐ%Ð%Ð%Ñ%Ø/à ˜5¨Ð.Ñ.Ô.€EÐ.Ð.Ð.Ñ.ðð #€HÐ"Ð"Ð"Ñ"ØEà%* U°2¸YÐ%GÑ%GÔ%G€OÐGÐGÐGÑGØ0à €EÐ Ð Ð Ñ Ø#'€KÐ'Ð'Ð'Ñ'Ø%&€MÐ&Ð&Ð&Ñ&ðð ð%ð %ð %ñ „Xð%ðN ð
ð 
ð 
ð 
ð 
ñ „Xð
ð ð(ð (ð (ñ „Xð(ð ð6ð 6ð 6ñ „Xð6ð
ð 
ð 
ð 
ð  %)Ø:>ð	*ð *ð *ð *ð *ð@ %)Ø?Cð	*ð *ð *ð *ð *ð, %)Ø:>ð	ð ð ð ð ð& %)Ø?Cð	ð ð ð ð ð ð ð ð rB   r   )Ú
__future__r   ÚloggingÚtypingr   r   r   r   r   r	   Úlangchain_core.callbacksr
   r   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr   Úlangchain_core.utilsr   r   r   Úpydanticr   r   Ú	getLoggerrk   Úloggerr   r3   rB   r;   ú<module>r|      sD  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð 4Ð 3Ð 3Ð 3Ð 3Ð 3Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VØ %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à	ˆÔ	˜8Ñ	$Ô	$€ðbð bð bð bð b˜ñ bô bð bð bð brB   