
    dh(                        S SK Jr  S SKrS SKJrJrJrJrJrJ	r	  S SK
JrJr  S SKJr  S SKJr  S SKJrJrJr  S SKJrJr  \R0                  " \5      r " S	 S
\5      rg)    )annotationsN)AnyAsyncIteratorDictIteratorListOptional)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)LLM)GenerationChunk)convert_to_secret_strget_from_dict_or_envpre_init)Field	SecretStrc                  
  ^  \ rS rSr% Sr\" \S9rS\S'    \" \S9r	S\S'    Sr
S\S	'   \" SS
S9rS\S'   \" SSS9rS\S'   SrS\S'    \" SS9rS\S'    SrS\S'    \" SSS9rS\S'    SrS\S'   SrS\S'   S rS\S!'    \S,S" j5       r\S-U 4S# jj5       r\S.S$ j5       r\S-S% j5       r      S/S& jr  S0         S1S' jjr  S0         S2S( jjr  S0         S3S) jjr  S0         S4S* jjrS+rU =r $ )5QianfanLLMEndpoint   ur
  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           	        [        [        USS/SSS95      US'   [        [        USS/SSS95      US'   0 UR                  S	0 5      ES
US
   0EnUS   R                  5       S:w  a  US   R                  5       US'   US   R                  5       S:w  a  US   R                  5       US'   US   b  US   S:w  a  US   US'    SS KnUR
                  " S0 UD6US'   U$ ! [         a    [        S5      ef = f)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paramsr5   s       g/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/llms/baidu_qianfan_endpoint.pyvalidate_environment'QianfanLLMEndpoint.validate_environment   sH   4 y)	 
|  5 |,	 
|
jj+
VG_
 ,002b8!,/@@BF4L,002b8!,/@@BF4L*)fZ.@B.F!'
!3F:	&11;F;F8   	( 	s   C C3c                N   > 0 U R                   U R                  S.E[        TU ]  E$ )N)r$   r#   )r$   r#   super_identifying_params)self	__class__s    r;   r@   &QianfanLLMEndpoint._identifying_params   s/    
==4::>
g)
 	
    c                    g)zReturn type of llm.zbaidu-qianfan-endpointr2   )rA   s    r;   	_llm_typeQianfanLLMEndpoint._llm_type   s     (rD   c                    U R                   U R                  U R                  U R                  U R                  U R
                  U R                  S.n0 UEU R                  E$ )z3Get the default parameters for calling Qianfan API.)r#   r$   streamr'   r(   r)   r+   )r#   r$   r!   r'   r(   r)   r+   r   )rA   normal_paramss     r;   _default_params"QianfanLLMEndpoint._default_params   sZ     ZZnn#33ZZ++!//
 6-54#4#455rD   c                r    SU;   a  UR                  S5      US'   0 XR                  S.EU R                  EUE$ )Nr!   rI   )promptr#   )popr#   rK   )rA   rN   kwargss      r;   _convert_prompt_msg_params-QianfanLLMEndpoint._convert_prompt_msg_params   sP    
 & %zz+6F8
**5
""
 
 	
rD   c                    U R                   (       a-  SnU R                  " XU40 UD6 H  nXVR                  -  nM     U$ U R                  " U40 UD6nX'S'   U R                  R
                  " S0 UD6nUS   $ )aM  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resultr2   )r!   _streamtextrQ   r   do	rA   rN   rT   run_managerrP   
completionchunkr:   response_payloads	            r;   _callQianfanLLMEndpoint._call   sz    $ >>JfKJ6Jjj(
 K00B6Bv;;>>3F3))rD   c                  #    U R                   (       a/  SnU R                  " XU40 UD6  S h  vN nXVR                  -  nM  U R                  " U40 UD6nX'S'   U R                  R
                  " S0 UD6I S h  vN nUS   $  NT
 U$  N7f)Nr.   rT   rU   r2   )r!   _astreamrW   rQ   r   adorY   s	            r;   _acallQianfanLLMEndpoint._acall
  s      >>J#}}V;Q&Q )ejj(
 00B6Bv!%!:6!::)))Q ;s2   (B
BBBAB
9B:	B
BB
c              +    #    U R                   " U40 0 UESS0ED6nX%S'   U R                  R                  " S0 UD6 H>  nU(       d  M  [        US   S9nU(       a  UR	                  UR
                  5        Uv   M@     g 7fNrI   TrT   rU   )rW   r2   )rQ   r   rX   r   on_llm_new_tokenrW   rA   rN   rT   rZ   rP   r:   resr\   s           r;   rV   QianfanLLMEndpoint._stream  sx      00V;Uf;UhPT;UVv;;>>+F+Cs'S];00< ,s   AA?7A?c               :  #    U R                   " U40 0 UESS0ED6nX%S'   U R                  R                  " S0 UD6I S h  vN   S h  vN nU(       d  M  [        US   S9nU(       a#  UR	                  UR
                  5      I S h  vN   U7v   MO   NS NL N
 g 7frf   )rQ   r   rb   r   rg   rW   rh   s           r;   ra   QianfanLLMEndpoint._astream-  s      00V;Uf;UhPT;UVv#{{8888 	#s'S];%66uzzBBB 9 	 C	 9sL   =BB BBB	BB1BBBBBBr2   )r9   r   returnr   )rm   r   )rm   str)rN   rn   rP   r   rm   dict)NN)
rN   rn   rT   Optional[List[str]]rZ   "Optional[CallbackManagerForLLMRun]rP   r   rm   rn   )
rN   rn   rT   rp   rZ   'Optional[AsyncCallbackManagerForLLMRun]rP   r   rm   rn   )
rN   rn   rT   rp   rZ   rq   rP   r   rm   zIterator[GenerationChunk])
rN   rn   rT   rp   rZ   rr   rP   r   rm   zAsyncIterator[GenerationChunk])!__name__
__module____qualname____firstlineno____doc__r   ro   r   __annotations__r   r   r   r    r!   r#   r$   r'   r(   r)   r+   r   r<   propertyr@   rF   rK   rQ   r^   rc   rV   ra   __static_attributes____classcell__)rB   s   @r;   r   r      s6   [z #("=K=@ $)#>L.>8FC&+D	&JJ#J&+D&MJ#M %I~%/ .E=. #Hm"E%*2Y%GO]G0 E? #'K'%&M?& % %N 
 
 ( ( 6 6

 
 
	
  %):>	** "* 8	*
 * 
*@ %)?C	** "* =	*
 * 
*, %):>	 " 8	
  
#& %)?C	 " =	
  
( rD   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   	getLoggerrs   loggerr   r2   rD   r;   <module>r      sI    "   4 2 V V %			8	$b brD   