§
    šŠtj>  ã                   óª   — d dl Z d dlZd dlmZ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 d dlmZ  ej        e¦  «        Z G d„ de¦  «        ZdS )	é    N)ÚAnyÚDictÚListÚMappingÚOptionalÚSet)ÚCallbackManagerForLLMRun)ÚLLM)ÚField)Úenforce_stop_tokensc                   óR  ‡ — e Zd ZU dZdZeed<   	  edd¬¦  «        Ze	ed<   	 dZ
ee         ed	<   	 d
Zee         ed<   	 dZee	         ed<   	 dZeed<   	 dZee         ed<   	 g Zeee                  ed<   	 dZee	         ed<   	 dZee         ed<   	 dZeed<   	 g Ze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         fd„¦   «         Zde eef         fd„Z!ede"eef         fd „¦   «         Z#	 	 d$d!edeee                  d"ee$         dedef
d#„Z%ˆ xZ&S )%ÚYuan2un  Yuan2.0 language models.

    Example:
        .. code-block:: python

            yuan_llm = Yuan2(
                infer_api="http://127.0.0.1:8000/yuan",
                max_tokens=1024,
                temp=1.0,
                top_p=0.9,
                top_k=40,
            )
            print(yuan_llm)
            print(yuan_llm.invoke("ä½ æ˜¯è°�ï¼Ÿ"))
    zhttp://127.0.0.1:8000/yuanÚ	infer_apii   Ú	max_token)ÚaliasÚ
max_tokensgffffffæ?ÚtempgÍÌÌÌÌÌì?Útop_pr   Útop_kFÚ	do_sampleÚechoÚstopé@   Úrepeat_last_ngáz®Gáò?Úrepeat_penaltyÚ	streamingÚhistoryÚuse_historyÚkwargsÚreturnNc                 ó¸   •—  t          ¦   «         j        di |¤Ž | j        pddk    r0| j        pddk    r%t                               d¦  «         d| _        dS dS dS )zInitialize the Yuan2 class.r   zGtop_p and top_k cannot be set simultaneously. set top_k to 0 instead...N© )ÚsuperÚ__init__r   r   ÚloggerÚwarning)Úselfr   Ú	__class__s     €ú\/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/yuan2.pyr$   zYuan2.__init__I   sw   ø€ à�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"àŒJˆO˜!˜qÒ Ð  d¤j o°A¸Ò%:Ð%:Ý�NŠNð,ñô ð ð ˆDŒJˆJˆJð !Ð Ð%:Ð%:ó    c                 ó   — dS )NzYuan2.0r"   ©r'   s    r)   Ú	_llm_typezYuan2._llm_typeT   s   € àˆyr*   c                  ó
   — h d£S )N>   r   r   r   r   r   r"   r"   r*   r)   Ú_model_param_nameszYuan2._model_param_namesX   s   € ð
ð 
ð 
ð 	
r*   c           	      óh   — | j         | j        | j        | j        | j        | j        | j        | j        dœS )N©r   r   r   r   r   r   r   r   r1   r,   s    r)   Ú_default_paramszYuan2._default_paramsb   s;   € àœØœØœ/Ø"Ô1Ø”IØ”ZØ”ZØÔ+ð	
ð 	
ð 		
r*   c                 óˆ   ‡ — d‰ j         i‰                      ¦   «         ¥ˆ fd„‰ j                             ¦   «         D ¦   «         ¥S )zGet the identifying parameters.Úmodelc                 óH   •— i | ]\  }}|‰                      ¦   «         v ¯||“ŒS r"   )r/   )Ú.0ÚkÚvr'   s      €r)   ú
<dictcomp>z-Yuan2._identifying_params.<locals>.<dictcomp>t   s<   ø€ ð ð ð Ù˜˜A¸!¸t×?VÒ?VÑ?XÔ?XÐ:XÐ:X��1Ð:XÐ:XÐ:Xr*   )r-   r2   Ú__dict__Úitemsr,   s   `r)   Ú_identifying_paramszYuan2._identifying_paramsn   sc   ø€ ð �T”^ð
à×"Ò"Ñ$Ô$ð
ðð ð ð Ø!%¤×!4Ò!4Ñ!6Ô!6ðñ ô ð
ð 	
r*   ÚpromptÚrun_managerc           	      ó’  — | j         r5| j                             |¦  «         d                     | j        ¦  «        }n|}ddi}t	          j        d|dœg| j        | j        | j        | j	        | j
        dœ¦  «        }t                               d|¦  «         	 t          j        | j        ||¬¦  «        }n.# t          j        j        $ r}	t%          d	|	› �¦  «        ‚d
}	~	ww xY wt                               d|› �¦  «         |j        dk    rt%          d|› �¦  «        ‚	 |                     ¦   «         }
|
d         dk    r"t%          d|
d         › d|
d         › d�¦  «        ‚d|
v rIt)          |
d         d         ¦  «        dk    r|
d         d         d         d         }nt%          d¦  «        ‚t%          d¦  «        ‚n6# t          j        j        $ r}	t%          d|	› d|j        › �¦  «        ‚d
}	~	ww xY w|�t/          ||¦  «        }| j         r| j                             |¦  «         t                               d| j        › �¦  «         |S )ux  Call out to a Yuan2.0 LLM inference endpoint.

        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 = yuan_llm.invoke("ä½ èƒ½å�šä»€ä¹ˆ?")
        z<n>zContent-Typezapplication/jsonÚ000)ÚidÚques)Ú	ques_listÚtokens_to_generateÚtemperaturer   r   r   zYuan2.0 prompt:)ÚheadersÚdatazError raised by inference api: NzYuan2.0 response: éÈ   zFailed with response: ÚerrCodeÚ0zFailed with error code [z], error message: [ÚexceptionMsgú]ÚresDataÚoutputr   ÚanszNo output found in response.zNo resData found in response.z:Error raised during decoding response from inference api: z.
Response: z	history: )r   r   ÚappendÚjoinÚjsonÚdumpsr   r   r   r   r   r%   ÚdebugÚrequestsÚputr   Ú
exceptionsÚRequestExceptionÚ
ValueErrorÚstatus_codeÚlenÚJSONDecodeErrorÚtextr   )r'   r=   r   r>   r   ÚinputrF   rG   ÚresponseÚeÚrespÚgenerate_texts               r)   Ú_callzYuan2._cally   sÀ  € ð, Ôð 	ØŒL×Ò Ñ'Ô'Ð'Ø—J’J˜tœ|Ñ,Ô,ˆEˆEàˆEà!Ð#5Ð6ˆåŒzà%*°EÐ:Ð:Ð;Ø&*¤oØ#œyØœØœØ!œ^ðð ñ	
ô 	
ˆõ 	�ŠÐ&¨Ñ.Ô.Ð.ð	DÝ”| D¤N¸GÈ$ÐOÑOÔOˆHˆHøÝÔ"Ô3ð 	Dð 	Dð 	DÝÐB¸qÐBÐBÑCÔCÐCøøøøð	Døøøõ 	�ŠÐ4¨(Ð4Ð4Ñ5Ô5Ð5àÔ 3Ò&Ð&ÝÐ@°hÐ@Ð@ÑAÔAÐAð	Ø—=’=‘?”?ˆDà�IŒ #Ò%Ð%Ý ð?¨t°I¬ð ?ð ?Ø'+¨NÔ';ð?ð ?ð ?ñô ð ð
 ˜DÐ Ð Ý�t˜I” xÔ0Ñ1Ô1°QÒ6Ð6Ø$(¨¤O°HÔ$=¸aÔ$@ÀÔ$G�M�Må$Ð%CÑDÔDÐDå Ð!@ÑAÔAÐAð	 "øõ Ô"Ô2ð 	ð 	ð 	Ýð/ÈQð /ð /Ø'œ}ð/ð /ñô ð øøøøð	øøøð ÐÝ/°¸tÑDÔDˆMð Ôð 	/ØŒL×Ò Ñ.Ô.Ð.å�ŠÐ/ ¤Ð/Ð/Ñ0Ô0Ð0ØÐs1   ÂB4 Â4CÃCÃCÄBF< Æ<G/ÇG*Ç*G/)NN)'Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚstrÚ__annotations__r   r   Úintr   r   Úfloatr   r   r   Úboolr   r   r   r   r   r   r   r   r   r$   Úpropertyr-   Ústaticmethodr   r/   r   r2   r   r<   r	   rc   Ú__classcell__)r(   s   @r)   r   r      s›  ø€ € € € € € ðð ð  2€IˆsÐ1Ð1Ñ1Øà�e˜D¨Ð4Ñ4Ô4€J�Ð4Ð4Ñ4Øà€Dˆ(�5Œ/ÐÐÑØ.à €Eˆ8�EŒ?Ð Ð Ñ Ø.à€Eˆ8�CŒ=ÐÐÑØ.à€IˆtÐÐÑðð !€Dˆ(�4Œ.Ð Ð Ñ Ø%à "€Dˆ(�4˜”9Ô
Ð"Ð"Ñ"Ø@à#%€M�8˜C”=Ð%Ð%Ñ%Øà&*€N�H˜U”OÐ*Ð*Ñ*Ø2à€IˆtÐÐÑØ/à€GˆT�#ŒYÐÐÑØ%à€K�ÐÐÑØ'ð	 ð 	¨ð 	ð 	ð 	ð 	ð 	ð 	ð ð˜3ð ð ð ñ „Xðð ð
  C¤ð 
ð 
ð 
ñ „\ð
ð

  c¨3 h¤ð 

ð 

ð 

ð 

ð ð
 W¨S°#¨XÔ%6ð 
ð 
ð 
ñ „Xð
ð %)Ø:>ð	Tð TàðTð �t˜C”yÔ!ðTð Ð6Ô7ð	Tð
 ðTð 
ðTð Tð Tð Tð Tð Tð Tð Tr*   r   )rR   ÚloggingÚtypingr   r   r   r   r   r   rU   Úlangchain_core.callbacksr	   Ú#langchain_core.language_models.llmsr
   Úpydanticr   Úlangchain_community.llms.utilsr   Ú	getLoggerrd   r%   r   r"   r*   r)   ú<module>rw      sè   ðØ €€€Ø €€€Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :à €€€Ø =Ð =Ð =Ð =Ð =Ð =Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø Ð Ð Ð Ð Ð à >Ð >Ð >Ð >Ð >Ð >à	ˆÔ	˜8Ñ	$Ô	$€ð~ð ~ð ~ð ~ð ~ˆCñ ~ô ~ð ~ð ~ð ~r*   