Ë
    µŒj(  ã                  ó¾   — 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j0                  e«      Z G d	„ d
e«      Zy)é    )Ú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d*d!„«       Zed+ˆ fd"„«       Zed,d#„«       Zed+d$„«       Z	 	 	 	 	 	 d-d%„Z	 	 d.	 	 	 	 	 	 	 	 	 d/d&„Z	 	 d.	 	 	 	 	 	 	 	 	 d0d'„Z	 	 d.	 	 	 	 	 	 	 	 	 d1d(„Z	 	 d.	 	 	 	 	 	 	 	 	 d2d)„Zˆ xZS )3Ú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_scorec                óî  — t        t        |ddgdd¬«      «      |d<   t        t        |ddgdd¬«      «      |d<   i |j                  d	i «      ¥d
|d
   i¥}|d   j                  «       dk7  r|d   j                  «       |d<   |d   j                  «       dk7  r|d   j                  «       |d<   |d   �|d   dk7  r|d   |d<   	 dd l} |j
                  di |¤Ž|d<   |S # t        $ r t        d«      ‚w xY w)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)ÚclsÚvaluesÚparamsr4   s       úy/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/llms/baidu_qianfan_endpoint.pyÚvalidate_environmentz'QianfanLLMEndpoint.validate_environment�   sJ  € ä4Ü ØØ˜yÐ)ØØô	ó 
ˆˆ|Ñô  5Ü ØØ˜|Ð,ØØô	ó 
ˆˆ|Ñð
Ø�j‰j˜¨Ó+ð
à�V˜G‘_ñ
ˆð �,Ñ×0Ñ0Ó2°bÒ8Ø! ,Ñ/×@Ñ@ÓBˆF�4‰LØ�,Ñ×0Ñ0Ó2°bÒ8Ø! ,Ñ/×@Ñ@ÓBˆF�4‰LØ�*ÑÐ)¨f°ZÑ.@ÀBÒ.FØ!'¨
Ñ!3ˆF�:Ñð	Ûà1˜w×1Ñ1Ñ;°FÑ;ˆF�8Ñð ˆøô ò 	Üð(óð ð	ús   ÃC ÃC4c                óN   •— i | j                   | j                  dœ¥t        ‰| �  ¥S )N)r#   r"   )r#   r"   ÚsuperÚ_identifying_params)ÚselfÚ	__class__s    €r:   r>   z&QianfanLLMEndpoint._identifying_paramsÅ   s/   ø€ ð
ØŸ=™=°4·:±:Ñ>ð
ä‰gÑ)ð
ð 	
ó    c                 ó   — y)zReturn type of llm.zbaidu-qianfan-endpointr1   )r?   s    r:   Ú	_llm_typezQianfanLLMEndpoint._llm_typeÌ   s   € ð (rA   c                óÂ   — | 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Ñ   sZ   € ð —Z‘ZØŸ™Ø—n‘nØ#×3Ñ3Ø—Z‘ZØ×+Ñ+Ø!×/Ñ/ñ
ˆð 6�-Ð5 4×#4Ñ#4Ð5Ð5rA   c                óp   — d|v r|j                  d«      |d<   i || j                  dœ¥| j                  ¥|¥S )Nr    rE   )Úpromptr"   )Úpopr"   rG   )r?   rI   Úkwargss      r:   Ú_convert_prompt_msg_paramsz-QianfanLLMEndpoint._convert_prompt_msg_paramsà   sR   € ð
 ˜&Ñ Ø%Ÿz™z¨+Ó6ˆF�8Ñð
Ø¨$¯*©*Ñ5ð
à×"Ñ"ð
ð ð
ð 	
rA   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-   ÚstopÚresultr1   )r    Ú_streamÚtextrL   r   Údo©	r?   rI   rN   Úrun_managerrK   Ú
completionÚchunkr9   Úresponse_payloads	            r:   Ú_callzQianfanLLMEndpoint._callí   s†   € ð$ �>Š>ØˆJØ%˜Ÿ™ f¨d°KÑJÀ6ÔJ�Ø˜eŸj™jÑ(‘
ð KàÐØ0�×0Ñ0°ÑB¸6ÑBˆØˆˆv‰Ø)˜4Ÿ;™;Ÿ>™>Ñ3¨FÑ3Ðà Ñ)Ð)rA   c              ‹  ó  K  — | j                   r0d} | j                  |||fi |¤Ž2 3 d {  –—† }||j                  z  }Œ | j                  |fi |¤Ž}||d<    | j                  j
                  di |¤Žƒ d {  –—† }|d   S 7 ŒU6 |S 7 Œ­w)Nr-   rN   rO   r1   )r    Ú_astreamrQ   rL   r   ÚadorS   s	            r:   Ú_acallzQianfanLLMEndpoint._acall
  sœ   è ø€ ð �>Š>ØˆJØ,˜tŸ}™}¨V°T¸;ÑQÈ&ÒQ÷ )�eØ˜eŸj™jÑ(‘
ð 1�×0Ñ0°ÑB¸6ÑBˆØˆˆv‰Ø!0 §¡§¡Ñ!:°6Ñ!:×:Ðà Ñ)Ð)ð)øÐQàÐð ;ús2   ‚$B¦BªB «B®ABÁ6BÁ7	BÂ BÂBc              +  óð   K  —  | j                   |fi i |¥ddi¥¤Ž}||d<    | j                  j                  di |¤ŽD ]5  }|sŒt        |d   ¬«      }|r|j	                  |j
                  «       |–— Œ7 y ­w©NrE   TrN   rO   )rQ   r1   )rL   r   rR   r   Úon_llm_new_tokenrQ   ©r?   rI   rN   rT   rK   r9   ÚresrV   s           r:   rP   zQianfanLLMEndpoint._stream  s}   è ø€ ð 1�×0Ñ0°ÑVÐ;U¸fÐ;UÀhÐPTÑ;UÑVˆØˆˆv‰Ø!�4—;‘;—>‘>Ñ+ FÔ+ˆCÚÜ'¨S°©]Ô;�ÙØ×0Ñ0°·±Ô<Ø“ñ ,ùs   ‚A A6Á3A6c               ó*  K  —  | j                   |fi i |¥ddi¥¤Ž}||d<    | j                  j                  di |¤Žƒ d {  –—† 2 3 d {  –—† }|sŒt        |d   ¬«      }|r#|j	                  |j
                  «      ƒ d {  –—†  |­–— ŒF7 ŒJ7 ŒC7 Œ6 y ­wr^   )rL   r   r[   r   r_   rQ   r`   s           r:   rZ   zQianfanLLMEndpoint._astream-  s¡   è ø€ ð 1�×0Ñ0°ÑVÐ;U¸fÐ;UÀhÐPTÑ;UÑVˆØˆˆv‰Ø.˜tŸ{™{Ÿ™Ñ8°Ñ8×8Ð8÷ 	�#ÚÜ'¨S°©]Ô;�ÙØ%×6Ñ6°u·z±zÓB×BÐBØ”ð 9øð 	øð Cøñ	 9ùsM   ‚>BÁ BÁBÁBÁ	BÁ
BÁBÁ/BÂ BÂBÂBÂBÂB)r8   r   Úreturnr   )rc   r   )rc   Ústr)rI   rd   rK   r   rc   Údict)NN)
rI   rd   rN   úOptional[List[str]]rT   ú"Optional[CallbackManagerForLLMRun]rK   r   rc   rd   )
rI   rd   rN   rf   rT   ú'Optional[AsyncCallbackManagerForLLMRun]rK   r   rc   rd   )
rI   rd   rN   rf   rT   rg   rK   r   rc   zIterator[GenerationChunk])
rI   rd   rN   rf   rT   rh   rK   r   rc   zAsyncIterator[GenerationChunk])Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   re   r   Ú__annotations__r   r   r   r   r    r"   r#   r&   r'   r(   r*   r   r;   Úpropertyr>   rC   rG   rL   rX   r\   rP   rZ   Ú__classcell__)r@   s   @r:   r   r      s1  ø… ñ[ñz #(¸Ô"=€K�Ó=ð@ñ $)¸Ô#>€L�.Ó>Ø8à€FˆCÓá&+°DÀ	Ô&J€JÐ#ÓJÙ&+°DÀÔ&M€JÐ#ÓMà %€Iˆ~Ó%Ø/á ¨Ô.€Eˆ=Ó.ðð #€HˆmÓ"ØEá%*°2¸YÔ%G€O�]ÓGØ0à €Eˆ?Ó Ø#'€K�Ó'Ø%&€M�?Ó&ðð ò%ó ð%ðN ô
ó ð
ð ò(ó ð(ð ò6ó ð6ð
àð
ð ð
ð 
ó	
ð  %)Ø:>ð	*àð*ð "ð*ð 8ð	*ð
 ð*ð 
ó*ð@ %)Ø?Cð	*àð*ð "ð*ð =ð	*ð
 ð*ð 
ó*ð, %)Ø:>ð	àðð "ðð 8ð	ð
 ðð 
#óð& %)Ø?Cð	àðð "ðð =ð	ð
 ðð 
(÷rA   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   Ú	getLoggerri   Úloggerr   r1   rA   r:   Ú<module>rz      sK   ðÝ "ã ÷÷ ÷õ 4Ý 2ß VÑ Vß %à	ˆ×	Ñ	˜8Ó	$€ôb˜õ brA   