§
    æ˜ºh6,  ã                  ó*  — d dl mZ d dlZd dlZd dlZd dlmZmZ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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!m"Z"m#Z#  ej$        e%¦  «        Z&dd„Z'dd„Z(dd„Z)dd„Z*dd„Z+ G d„ de¦  «        Z,dS )é    )ÚannotationsN)ÚAnyÚAsyncIteratorÚCallableÚDictÚIteratorÚListÚMappingÚOptional)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseLLM)Ú
GenerationÚGenerationChunkÚ	LLMResult)ÚFieldÚroot_validator)Úget_from_dict_or_env)Ú	HTTPError)Úbefore_sleep_logÚretryÚretry_if_exception_typeÚstop_after_attemptÚwait_exponentialÚllmÚTongyiÚreturnúCallable[[Any], Any]c           
     óÔ   — d}d}t          dt          | j        ¦  «        t          d||¬¦  «        t	          t
          ¦  «        t          t          t          j	        ¦  «        ¬¦  «        S )Né   é   T)Ú
multiplierÚminÚmax)ÚreraiseÚstopÚwaitr   Úbefore_sleep)
r   r   Úmax_retriesr   r   r   r   ÚloggerÚloggingÚWARNING)r   Úmin_secondsÚmax_secondss      úg/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/llms/tongyi.pyÚ_create_retry_decoratorr0   %   sa   € Ø€KØ€Kõ ØÝ ¤Ñ0Ô0Ý¨°ÀÐMÑMÔMÝ&¥yÑ1Ô1Ý%¥f­g¬oÑ>Ô>ðñ ô ð ó    Úrespr   c                óÎ   — | j         dk    r| S | j         dv r't          d| j         › d| j        › d| j        › �¦  «        ‚t	          d| j         › d| j        › d| j        › �| ¬¦  «        ‚)z,Check the response from the completion call.éÈ   )i�  i‘  zstatus_code: z	 
 code: z 
 message: z"HTTP error occurred: status_code: )Úresponse)Ústatus_codeÚ
ValueErrorÚcodeÚmessager   ©r2   s    r/   Úcheck_responser;   3   sµ   € àÔ˜3ÒÐØˆØ	Ô	˜ZÐ	'Ð	'Ýð<˜DÔ,ð <ð <Ø”Yð<ð <Ø-1¬\ð<ð <ñ
ô 
ð 	
õ
 ð<°Ô1Að <ð <Ø”Yð<ð <Ø-1¬\ð<ð <àð
ñ 
ô 
ð 	
r1   Úkwargsc                óN   ‡ — t          ‰ ¦  «        }|dˆ fd„¦   «         } |di |¤ŽS )ú*Use tenacity to retry the completion call.Ú_kwargsr   r   c                 óF   •—  ‰j         j        di | ¤Ž}t          |¦  «        S ©N© ©ÚclientÚcallr;   )r?   r2   r   s     €r/   Ú_generate_with_retryz1generate_with_retry.<locals>._generate_with_retryH   s*   ø€ àˆsŒzŒÐ)Ð) Ð)Ð)ˆÝ˜dÑ#Ô#Ð#r1   ©r?   r   r   r   rB   ©r0   )r   r<   Úretry_decoratorrF   s   `   r/   Úgenerate_with_retryrJ   D   sQ   ø€ å-¨cÑ2Ô2€Oàð$ð $ð $ð $ð $ñ „_ð$ð  ÐÐ)Ð) &Ð)Ð)Ð)r1   c                óN   ‡ — t          ‰ ¦  «        }|dˆ fd„¦   «         } |di |¤ŽS )r>   r?   r   r   c               ;  ó\   •K  —  ‰j         j        di | ¤Ž}|D ]}t          |¦  «        V — Œd S rA   rC   )r?   Ú	responsesr2   r   s      €r/   Ú_stream_generate_with_retryz?stream_generate_with_retry.<locals>._stream_generate_with_retryT   sP   øè è € à#�C”J”OÐ.Ð. gÐ.Ð.ˆ	Øð 	'ð 	'ˆDÝ  Ñ&Ô&Ð&Ð&Ð&Ð&ð	'ð 	'r1   rG   rB   rH   )r   r<   rI   rN   s   `   r/   Ústream_generate_with_retryrO   P   sQ   ø€ å-¨cÑ2Ô2€Oàð'ð 'ð 'ð 'ð 'ñ „_ð'ð
 'Ð&Ð0Ð0¨Ð0Ð0Ð0r1   c               óR   K  —  G d„ d¦  «        } || fi |¤Ž2 3 d{V —†}|W V — Œ6 dS )zyBecause the dashscope SDK doesn't provide an async API,
    we wrap `stream_generate_with_retry` with an async generator.c                  ó.   — e Zd Zdd„Zdd„Zdd	„Zdd
„ZdS )ú8astream_generate_with_retry.<locals>._AioTongyiGeneratorÚ_llmr   r?   r   c                ó*   — t          |fi |¤Ž| _        d S ©N)rO   Ú	generator)ÚselfrS   r?   s      r/   Ú__init__zAastream_generate_with_retry.<locals>._AioTongyiGenerator.__init__b   s   € Ý7¸ÐHÐHÀÐHÐHˆDŒNˆNˆNr1   r   úAsyncIterator[Any]c                ó   — | S rU   rB   ©rW   s    r/   Ú	__aiter__zBastream_generate_with_retry.<locals>._AioTongyiGenerator.__aiter__e   s   € ØˆKr1   c              “  ó€   K  — t          j        ¦   «                              d | j        ¦  «        ƒ d {V —†}|�|S t          ‚rU   )ÚasyncioÚget_running_loopÚrun_in_executorÚ
_safe_nextÚStopAsyncIteration)rW   Úvalues     r/   Ú	__anext__zBastream_generate_with_retry.<locals>._AioTongyiGenerator.__anext__h   s\   è è € Ý!Ô2Ñ4Ô4×DÒDØ�d”oñô ð ð ð ð ð ð ˆEð Ð Ø�å(Ð(r1   c                óN   — 	 t          | j        ¦  «        S # t          $ r Y d S w xY wrU   )ÚnextrV   ÚStopIterationr[   s    r/   ra   zCastream_generate_with_retry.<locals>._AioTongyiGenerator._safe_nextq   s9   € ðÝ˜DœNÑ+Ô+Ð+øÝ ð ð ð Ø�t�tðøøøs   ‚ –
$£$N)rS   r   r?   r   )r   rY   )r   r   )Ú__name__Ú
__module__Ú__qualname__rX   r\   rd   ra   rB   r1   r/   Ú_AioTongyiGeneratorrR   a   sh   € € € € € ð	Ið 	Ið 	Ið 	Ið	ð 	ð 	ð 	ð	)ð 	)ð 	)ð 	)ð	ð 	ð 	ð 	ð 	ð 	r1   rk   NrB   )r   r<   rk   Úchunks       r/   Úastream_generate_with_retryrm   ]   sƒ   è è € ðð ð ð ð ñ ô ð ð, +Ð*¨3Ð9Ð9°&Ð9Ð9ð ð ð ð ð ð ð ˆeØˆˆˆˆˆð :Ð9Ð9s   ™&c                  ó’  ‡ — e Zd ZU dZed7d„¦   «         Zded<   dZded	<   	  ee	¬
¦  «        Z
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¦   «         d9d„¦   «         Zed:d„¦   «         Zed;ˆ fd„¦   «         Z	 	 d<d=d(„Z	 	 d<d>d*„Z	 	 d<d?d-„Z	 	 d<d@d/„ZdAd0„ZedBd2„¦   «         ZedCd6„¦   «         Zˆ xZS )Dr   az  Tongyi Qwen large language models.

    To use, you should have the ``dashscope`` python package installed, and the
    environment variable ``DASHSCOPE_API_KEY`` set with your API key, or pass
    it as a named parameter to the constructor.

    Example:
        .. code-block:: python

            from langchain_community.llms import Tongyi
            tongyi = tongyi()
    r   úDict[str, str]c                ó
   — ddiS )NÚdashscope_api_keyÚDASHSCOPE_API_KEYrB   r[   s    r/   Ú
lc_secretszTongyi.lc_secrets‰   s   € à#Ð%8Ð9Ð9r1   r   rD   z	qwen-plusÚstrÚ
model_name)Údefault_factoryúDict[str, Any]Úmodel_kwargsgš™™™™™é?ÚfloatÚtop_pNzOptional[str]rq   FÚboolÚ	streamingé
   Úintr)   c                ó   — dS )zReturn type of llm.ÚtongyirB   r[   s    r/   Ú	_llm_typezTongyi._llm_typeŸ   s	   € ð ˆxr1   Úvaluesr   c                óÆ   — t          |dd¦  «        |d<   	 ddl}n# t          $ r t          d¦  «        ‚w xY w	 |j        |d<   n# t          $ r t          d¦  «        ‚w xY w|S )z?Validate that api key and python package exists in environment.rq   rr   r   NzZCould not import dashscope python package. Please install it with `pip install dashscope`.rD   z¢`dashscope` has no `Generation` attribute, this is likely due to an old version of the dashscope package. Try upgrading it with `pip install --upgrade dashscope`.)r   Ú	dashscopeÚImportErrorr   ÚAttributeErrorr7   )Úclsr‚   r„   s      r/   Úvalidate_environmentzTongyi.validate_environment¤   s·   € õ ';ØÐ'Ð)<ñ'
ô '
ˆÐ"Ñ#ð	ØÐÐÐÐøÝð 	ð 	ð 	ÝðBñô ð ð	øøøð
	Ø(Ô3ˆF�8ÑÐøÝð 	ð 	ð 	Ýð:ñô ð ð	øøøð ˆs   – ›5¹
A ÁAc                óB   — | j         | j        | j        dœ}i |¥| j        ¥S )z7Get the default parameters for calling Tongyi Qwen API.)Úmodelrz   Úapi_key)ru   rz   rq   rx   )rW   Únormal_paramss     r/   Ú_default_paramszTongyi._default_params¼   s5   € ð ”_Ø”ZØÔ-ð
ð 
ˆð 6�-Ð5 4Ô#4Ð5Ð5r1   úMapping[str, Any]c                ó<   •— d| j         it          ¦   «         j        ¥S )Nru   )ru   ÚsuperÚ_identifying_params)rW   Ú	__class__s    €r/   r‘   zTongyi._identifying_paramsÇ   s   ø€ à˜dœoÐMµ±´Ô1LÐMÐMr1   Úpromptsú	List[str]r&   úOptional[List[str]]Úrun_managerú"Optional[CallbackManagerForLLMRun]r<   r   c           
     óÚ  — g }| j         rut          |¦  «        dk    rt          d¦  «        ‚d } | j        |d         ||fi |¤ŽD ]}|€|}Œ||z  }Œ|€J ‚|                     |                      |¦  «        g¦  «         nV | j        dd|i|¤Ž}|D ]D}	t          | fd|	i|¤Ž}
|                     t          di |  	                    |
¦  «        ¤Žg¦  «         ŒEt          |d| j        i¬¦  «        S )	Nr    ú,Cannot stream results with multiple prompts.r   r&   Úpromptru   ©ÚgenerationsÚ
llm_outputrB   )r|   Úlenr7   Ú_streamÚappendÚ_chunk_to_generationÚ_invocation_paramsrJ   r   Ú_generation_from_qwen_respr   ru   ©rW   r“   r&   r–   r<   rœ   Ú
generationrl   Úparamsrš   Ú
completions              r/   Ú	_generatezTongyi._generateË   s]  € ð ˆØŒ>ð 	Ý�7‰|Œ|˜aÒÐÝ Ð!OÑPÔPÐPØ48ˆJØ%˜œ g¨a¤j°$¸ÐNÐNÀvÐNÐNð (ð (�ØÐ%Ø!&�J�Jà %Ñ'�J�JØÐ)Ð)Ð)Ø×Ò × 9Ò 9¸*Ñ EÔ EÐFÑGÔGÐGÐGà%< TÔ%<Ð%QÐ%QÀ$Ð%QÈ&Ð%QÐ%QˆFØ!ð ð �Ý0°ÐOÐO¸fÐOÈÐOÐO�
Ø×"Ò"ÝÐNÐN $×"AÒ"AÀ*Ñ"MÔ"MÐNÐNÐOñô ð ð õ Ø#à˜dœoðð
ñ 
ô 
ð 	
r1   ú'Optional[AsyncCallbackManagerForLLMRun]c              ‹  óZ  K  — g }| j         r{t          |¦  «        dk    rt          d¦  «        ‚d } | j        |d         ||fi |¤Ž2 3 d {V —†}|€|}Œ||z  }Œ6 |€J ‚|                     |                      |¦  «        g¦  «         nŽ | j        dd|i|¤Ž}|D ]|}	t          j        ¦   «          	                    d t          j        t          fi | |	dœ|¥¤Ž¦  «        ƒ d {V —†}
|                     t          di |                      |
¦  «        ¤Žg¦  «         Œ}t          |d| j        i¬¦  «        S )	Nr    r™   r   r&   )r   rš   ru   r›   rB   )r|   rž   r7   Ú_astreamr    r¡   r¢   r^   r_   r`   Ú	functoolsÚpartialrJ   r   r£   r   ru   r¤   s              r/   Ú
_ageneratezTongyi._agenerateì   s×  è è € ð ˆØŒ>ð 	Ý�7‰|Œ|˜aÒÐÝ Ð!OÑPÔPÐPØ48ˆJØ,˜tœ}¨W°Q¬Z¸¸{ÐUÐUÈfÐUÐUð (ð (ð (ð (ð (ð (ð (�eØÐ%Ø!&�J�Jà %Ñ'�J�Jð	  Vð
 Ð)Ð)Ð)Ø×Ò × 9Ò 9¸*Ñ EÔ EÐFÑGÔGÐGÐGà%< TÔ%<Ð%QÐ%QÀ$Ð%QÈ&Ð%QÐ%QˆFØ!ð 	ð 	�Ý#*Ô#;Ñ#=Ô#=×#MÒ#MØÝÔ%Ý+ðð Ø7;ÀvÐ/XÐ/XÐQWÐ/Xðð ñ$ô $ð ð ð ð ð ð �
ð ×"Ò"ÝÐNÐN $×"AÒ"AÀ*Ñ"MÔ"MÐNÐNÐOñô ð ð õ Ø#à˜dœoðð
ñ 
ô 
ð 	
s   ÁArš   úIterator[GenerationChunk]c              +  óÜ   K  —  | j         d|ddœ|¤Ž}t          | fd|i|¤ŽD ]I}t          di |                      |¦  «        ¤Ž}|V — |r"|                     |j        || j        ¬¦  «         ŒJd S ©NT)r&   Ústreamrš   )rl   ÚverboserB   )r¢   rO   r   r£   Úon_llm_new_tokenÚtextr³   ©rW   rš   r&   r–   r<   r¦   Ústream_resprl   s           r/   rŸ   zTongyi._stream  sÀ   è è € ð "9 Ô!8ð "
Ø˜dð"
ð "
Ø&,ð"
ð "
ˆõ 6°dÐTÐTÀ6ÐTÈVÐTÐTð 	ð 	ˆKÝ#ÐSÐS d×&EÒ&EÀkÑ&RÔ&RÐSÐSˆEØˆKˆKˆKØð Ø×,Ò,Ø”JØØ œLð -ñ ô ð øð		ð 	r1   úAsyncIterator[GenerationChunk]c               óö   K  —  | j         d|ddœ|¤Ž}t          | fd|i|¤Ž2 3 d {V —†}t          di |                      |¦  «        ¤Ž}|W V — |r(|                     |j        || j        ¬¦  «        ƒ d {V —† ŒV6 d S r±   )r¢   rm   r   r£   r´   rµ   r³   r¶   s           r/   r«   zTongyi._astream&  s  è è € ð "9 Ô!8ð "
Ø˜dð"
ð "
Ø&,ð"
ð "
ˆõ "=Øð"
ð "
Øð"
Ø#)ð"
ð "
ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	�+õ $ÐSÐS d×&EÒ&EÀkÑ&RÔ&RÐSÐSˆEØˆKˆKˆKˆKØð Ø!×2Ò2Ø”JØØ œLð 3ñ ô ð ð ð ð ð ð ð øð"
ð "
ð "
s   ¢A8c                ó^   — i | j         ¥|¥}|�||d<   |                     d¦  «        rd|d<   |S )Nr&   r²   TÚincremental_output)r�   Úget)rW   r&   r<   r¦   s       r/   r¢   zTongyi._invocation_params<  sQ   € ð
ØÔ"ð
àð
ˆð ÐØ!ˆF�6‰NØ�:Š:�hÑÔð 	0Ø+/ˆFÐ'Ñ(Øˆr1   r2   c                ó¦   — t          | d         d         t          | d         d         | d         t          | d         ¦  «        ¬¦  «        ¬¦  «        S )NÚoutputrµ   Úfinish_reasonÚ
request_idÚusage)r¿   rÀ   Útoken_usage©rµ   Úgeneration_info)Údictr:   s    r/   r£   z!Tongyi._generation_from_qwen_respG  sZ   € åØ�h” Ô'Ý Ø" 8œn¨_Ô=Ø Ô-Ý   g¤Ñ/Ô/ðñ ô ð
ñ 
ô 
ð 	
r1   rl   r   r   c                ó8   — t          | j        | j        ¬¦  «        S )NrÃ   )r   rµ   rÄ   )rl   s    r/   r¡   zTongyi._chunk_to_generationR  s$   € åØ”Ø!Ô1ð
ñ 
ô 
ð 	
r1   )r   ro   )r   rt   )r‚   r   r   r   )r   rw   )r   rŽ   )NN)
r“   r”   r&   r•   r–   r—   r<   r   r   r   )
r“   r”   r&   r•   r–   r©   r<   r   r   r   )
rš   rt   r&   r•   r–   r—   r<   r   r   r¯   )
rš   rt   r&   r•   r–   r©   r<   r   r   r¸   )r&   r   r<   r   r   rw   )r2   r   r   rw   )rl   r   r   r   )rh   ri   rj   Ú__doc__Úpropertyrs   Ú__annotations__ru   r   rÅ   rx   rz   rq   r|   r)   r�   r   rˆ   r�   r‘   r¨   r®   rŸ   r«   r¢   Ústaticmethodr£   r¡   Ú__classcell__)r’   s   @r/   r   r   {   sJ  ø€ € € € € € ðð ð ð:ð :ð :ñ „Xð:ð €K€K�KØ!€JÐ!Ð!Ð!Ñ!àØ#( 5¸Ð#>Ñ#>Ô#>€LÐ>Ð>Ð>Ñ>à€EÐÐÐÑØDà'+ÐÐ+Ð+Ð+Ñ+Ø5à€IÐÐÐÑØ/à€KÐÐÐÑØ<àðð ð ñ „Xðð €^ÑÔðð ð ñ Ôðð. ð6ð 6ð 6ñ „Xð6ð ðNð Nð Nð Nð Nñ „XðNð %)Ø:>ð	
ð 
ð 
ð 
ð 
ðH %)Ø?Cð	$
ð $
ð $
ð $
ð $
ðR %)Ø:>ð	ð ð ð ð ð. %)Ø?Cð	ð ð ð ð ð,	ð 	ð 	ð 	ð ð
ð 
ð 
ñ „\ð
ð ð
ð 
ð 
ñ „\ð
ð 
ð 
ð 
ð 
r1   )r   r   r   r   )r2   r   r   r   )r   r   r<   r   r   r   )-Ú
__future__r   r^   r¬   r+   Útypingr   r   r   r   r   r	   r
   r   Úlangchain_core.callbacksr   r   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr   r   r   Úlangchain_core.pydantic_v1r   r   Úlangchain_core.utilsr   Úrequests.exceptionsr   Útenacityr   r   r   r   r   Ú	getLoggerrh   r*   r0   r;   rJ   rO   rm   r   rB   r1   r/   ú<module>rÖ      s+  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ø €€€ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ðð ð ð ð ð ð ð ð 8Ð 7Ð 7Ð 7Ð 7Ð 7Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 
ˆÔ	˜8Ñ	$Ô	$€ðð ð ð ð
ð 
ð 
ð 
ð"	*ð 	*ð 	*ð 	*ð
1ð 
1ð 
1ð 
1ðð ð ð ð<\
ð \
ð \
ð \
ð \
ˆWñ \
ô \
ð \
ð \
ð \
r1   