§
    æ˜ºh+  ã                  ó  — d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	m
Z
mZmZmZ ddlmZ ddlmZmZ ddlmZmZ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! G d„ de¦  «        Z" G d„ de¦  «        Z#dS )zZHIPU AI chat models wrapper.é    )ÚannotationsN)Úpartial)ÚAnyÚDictÚIteratorÚListÚOptional)ÚCallbackManagerForLLMRun)ÚBaseChatModelÚgenerate_from_stream)Ú	AIMessageÚAIMessageChunkÚBaseMessage)ÚChatGenerationÚChatGenerationChunkÚ
ChatResult)Ú	BaseModelÚFieldc                  óP   — e Zd ZU  ed¦  «        Zded<    ed¦  «        Zded<   dS )ÚrefTÚboolÚenableÚ ÚstrÚsearch_queryN)Ú__name__Ú
__module__Ú__qualname__r   r   Ú__annotations__r   © ó    úo/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/chat_models/zhipuai.pyr   r      sD   € € € € € € Ø�5˜‘;”;€FÐÐÐÑØ˜˜b™	œ	€LÐ!Ð!Ð!Ñ!Ð!Ð!r!   r   c                  ó�   — e Zd ZU  ed¦  «        Zded<    ed¦  «        Zded<    ed¦  «        Zded<    ed¦  «        Zded<   dS )	Úmetar   r   Ú	user_infoÚbot_infoÚbot_nameÚUserÚ	user_nameN)	r   r   r   r   r%   r   r&   r'   r)   r    r!   r"   r$   r$      sv   € € € € € € Ø�U˜2‘Y”Y€IÐÐÐÑØ�E˜"‘I”I€HÐÐÐÑØ�E˜"‘I”I€HÐÐÐÑØ�U˜6‘]”]€IÐ"Ð"Ð"Ñ"Ð"Ð"r!   r$   c                  óD  ‡ — e Zd ZU dZded<    edd¬¦  «        Zded<   	  ed	¦  «        Zd
ed<   	  ed¦  «        Zded<   	  ed¦  «        Z	ded<   	  ed¦  «        Z
ded<   	  ed¦  «        Zded<   	  ed¦  «        Zded<   	  ed¦  «        Zd
ed<   	  ed¦  «        Zded<   	  ed¦  «        Zded<   	 ed;d„¦   «         Zed<d „¦   «         Zed=d"„¦   «         Zed>d$„¦   «         Zed;d%„¦   «         Zˆ fd&„Zd'„ Zd(„ Zd)„ Zd*„ Z	 	 	 d?d@d5„Z	 	 	 dAd@d6„Z	 	 dBdCd:„Zˆ xZS )DÚChatZhipuAIaa  
    `ZHIPU AI` large language chat models API.

    To use, you should have the ``zhipuai`` python package installed.

    Example:
    .. code-block:: python

    from langchain_community.chat_models import ChatZhipuAI

    zhipuai_chat = ChatZhipuAI(
        temperature=0.5,
        api_key="your-api-key",
        model="chatglm_turbo",
    )

    r   ÚzhipuaiNÚapi_key)ÚdefaultÚaliaszOptional[str]Úzhipuai_api_keyÚchatglm_turbor   Úmodelgffffffî?ÚfloatÚtemperaturegffffffæ?Útop_pÚ
request_idFr   Ú	streamingTÚincrementalÚjson_stringÚreturn_typezOptional[ref]r   zOptional[meta]r$   ÚreturnúDict[str, Any]c                ó   — d| j         iS )NÚ
model_name)r2   ©Úselfs    r"   Ú_identifying_paramszChatZhipuAI._identifying_paramsƒ   s   € à˜dœjÐ)Ð)r!   c                ó   — dS )zReturn the type of chat model.r,   r    r?   s    r"   Ú	_llm_typezChatZhipuAI._llm_type‡   s	   € ð ˆyr!   úDict[str, str]c                ó
   — ddiS )Nr0   ÚZHIPUAI_API_KEYr    r?   s    r"   Ú
lc_secretszChatZhipuAI.lc_secretsŒ   s   € à!Ð#4Ð5Ð5r!   ú	List[str]c                ó
   — g d¢S )z*Get the namespace of the langchain object.)Ú	langchainÚchat_modelsr,   r    )Úclss    r"   Úget_lc_namespacezChatZhipuAI.get_lc_namespace�   s   € ð 7Ð6Ð6Ð6r!   c                óp   — i }| j         r
| j         |d<   | j        r
| j        |d<   | j        r
| j        |d<   |S )Nr2   r7   r:   )r2   r7   r:   )r@   Ú
attributess     r"   Úlc_attributeszChatZhipuAI.lc_attributes•   sQ   € à%'ˆ
àŒ:ð 	-Ø"&¤*ˆJ�wÑàŒ>ð 	5Ø&*¤nˆJ�{Ñ#àÔð 	9Ø(,Ô(8ˆJ�}Ñ%àÐr!   c                ó®   •—  t          ¦   «         j        |i |¤Ž 	 dd l}|| _        | j        | j        _        d S # t
          $ r t          d¦  «        ‚w xY w)Nr   zMCould not import zhipuai package. Please install it via 'pip install zhipuai')ÚsuperÚ__init__r,   r0   r-   ÚImportErrorÚRuntimeError)r@   ÚargsÚkwargsr,   Ú	__class__s       €r"   rS   zChatZhipuAI.__init__¤   sy   ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)ð		ØˆNˆNˆNà"ˆDŒLØ#'Ô#7ˆDŒLÔ Ð Ð øÝð 	ð 	ð 	Ýð>ñô ð ð	øøøs	   œ: ºAc                óF  — | j         dk    r>| j        j                             | j         || j        | j        | j        | j        ¬¦  «        S | j         dk    rL| j         	                    ¦   «         }| j        j                             | j         ||| j        | j        ¬¦  «        S d S )Nr1   )r2   Úpromptr5   r4   r6   r:   Úcharacterglm)r2   r$   rZ   r6   r:   )
r2   r,   Ú	model_apiÚinvoker5   r4   r6   r:   r$   Údict©r@   rZ   r$   s      r"   r]   zChatZhipuAI.invoke±   s®   € ØŒ:˜Ò(Ð(Ø”<Ô)×0Ò0Ø”jØØ”jØ Ô,Øœ?Ø Ô,ð 1ñ ô ð ð ŒZ˜>Ò)Ð)Ø”9—>’>Ñ#Ô#ˆDØ”<Ô)×0Ò0Ø”jØØØœ?Ø Ô,ð 1ñ ô ð ð ˆtr!   c           	     ó^  — | j         dk    rD| j        j                             | j         || j        | j        | j        | j        | j        ¬¦  «        S | j         dk    rR| j	         
                    ¦   «         }| j        j                             | j         ||| j        | j        | j        ¬¦  «        S d S )Nr1   )r2   rZ   r5   r4   r6   r:   r8   r[   )r2   rZ   r$   r6   r:   r8   )r2   r,   r\   Ú
sse_invoker5   r4   r6   r:   r8   r$   r^   r_   s      r"   ra   zChatZhipuAI.sse_invokeÆ   sº   € ØŒ:˜Ò(Ð(Ø”<Ô)×4Ò4Ø”jØØ”jØ Ô,Øœ?Ø Ô,Ø Ô,ð 5ñ ô ð ð ŒZ˜>Ò)Ð)Ø”9—>’>Ñ#Ô#ˆDØ”<Ô)×4Ò4Ø”jØØØœ?Ø Ô,Ø Ô,ð 5ñ ô ð ð ˆtr!   c              ƒ  ó´   K  — t          j        ¦   «         }t          | j        j        j        | j        |¬¦  «        }|                     d |¦  «        ƒ d {V —†}|S )N)r2   rZ   )ÚasyncioÚget_running_loopr   r,   r\   Úasync_invoker2   Úrun_in_executor)r@   rZ   ÚloopÚpartial_funcÚresponses        r"   re   zChatZhipuAI.async_invokeÝ   s{   è è € ÝÔ'Ñ)Ô)ˆÝØŒLÔ"Ô/°t´zÈ&ð
ñ 
ô 
ˆð ×-Ò-ØØñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð ˆr!   c              ƒ  óˆ   K  — t          j        ¦   «         }|                     d | j        j        j        |¦  «        ƒ d {V —†}|S )N)rc   rd   rf   r,   r\   Úquery_async_invoke_result)r@   Útask_idrg   ri   s       r"   Úasync_invoke_resultzChatZhipuAI.async_invoke_resultè   s_   è è € ÝÔ'Ñ)Ô)ˆØ×-Ò-ØØŒLÔ"Ô<Øñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð
 ˆr!   ÚmessagesúList[BaseMessage]ÚstopúOptional[List[str]]Úrun_managerú"Optional[CallbackManagerForLLMRun]ÚstreamúOptional[bool]rW   r   c                óÆ  — g }|D ]9}t          |t          ¦  «        rd}nd}|                     ||j        dœ¦  «         Œ:|�|n| j        }	|	sw|                      |¦  «        }
|
d         dk    rt          |
¦  «        ‚|
d         d         d	         d
         }t          t          t          |¬¦  «        ¬¦  «        g¬¦  «        S  | j	        d|||dœ|¤Ž}t          |¦  «        S )zGenerate a chat response.Ú	assistantÚuser©ÚroleÚcontentNÚcodeéÈ   ÚdataÚchoicesr   r{   ©r{   ©Úmessage©Úgenerations)rZ   rp   rr   r    )Ú
isinstancer   Úappendr{   r7   r]   rU   r   r   Ú_streamr   )r@   rn   rp   rr   rt   rW   rZ   r‚   rz   Úshould_streamri   r{   Ústream_iters                r"   Ú	_generatezChatZhipuAI._generateñ   s(  € ð ˆØð 	Fð 	FˆGÝ˜'¥9Ñ-Ô-ð Ø"��à�à�MŠM 4°G´OÐDÐDÑEÔEÐEÐEà"(Ð"4˜˜¸$¼.ˆØð 	5Ø—{’{ 6Ñ*Ô*ˆHà˜Ô 3Ò&Ð&Ý" 8Ñ,Ô,Ð,à˜vÔ& yÔ1°!Ô4°YÔ?ˆGÝÝ+µIÀgÐ4NÑ4NÔ4NÐOÑOÔOÐPðñ ô ð ð
 '˜$œ,ð Ø D°kðð ØEKðð ˆKõ (¨Ñ4Ô4Ð4r!   c              ‹  ór  K  — g }|D ]9}t          |t          ¦  «        rd}nd}|                     ||j        dœ¦  «         Œ:|                      |¦  «        ƒ d{V —†}	|	d         d         }
|                      |
¦  «        ƒ d{V —†}|d         d         dk    rGt          j        d	¦  «        ƒ d{V —† |                      |
¦  «        ƒ d{V —†}|d         d         dk    °G|d         d
         d         d         }t          j	        |¦  «        }t          t          t          |¬¦  «        ¬¦  «        g¬¦  «        S )z(Asynchronously generate a chat response.rw   rx   ry   Nr~   rl   Útask_statusÚSUCCESSé   r   r   r{   r€   r�   rƒ   )r…   r   r†   r{   re   rm   rc   ÚsleepÚjsonÚloadsr   r   )r@   rn   rp   rr   rt   rW   rZ   r‚   rz   Úinvoke_responserl   ri   r{   s                r"   Ú
_ageneratezChatZhipuAI._agenerate  s„  è è € ð ˆØð 	Fð 	FˆGÝ˜'¥9Ñ-Ô-ð Ø"��à�à�MŠM 4°G´OÐDÐDÑEÔEÐEÐEà $× 1Ò 1°&Ñ 9Ô 9Ð9Ð9Ð9Ð9Ð9Ð9ˆØ! &Ô)¨)Ô4ˆà×1Ò1°'Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:ˆØ�vÔ˜}Ô-°Ò:Ð:Ý”- Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ø!×5Ò5°gÑ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>ˆHð �vÔ˜}Ô-°Ò:Ð:ð ˜6Ô" 9Ô-¨aÔ0°Ô;ˆÝ”*˜WÑ%Ô%ˆÝÝ'µ	À'Ð0JÑ0JÔ0JÐKÑKÔKÐLð
ñ 
ô 
ð 	
r!   rZ   úList[Dict[str, str]]úIterator[ChatGenerationChunk]c              +  ó:  K  — |                       |¦  «        }|                     ¦   «         D ]n}|j        dk    r?|j        }t	          t          |¬¦  «        ¬¦  «        V — |r|                     |¦  «         ŒL|j        dk    rt          d|j        › �¦  «        ‚ŒodS )z#Stream the chat response in chunks.Úaddr€   r�   Úerrorz!Error from ZhipuAI API response: N)ra   ÚeventsÚeventr~   r   r   Úon_llm_new_tokenÚ
ValueError)r@   rZ   rp   rr   rW   ri   ÚrÚdeltas           r"   r‡   zChatZhipuAI._stream6  s¾   è è € ð —?’? 6Ñ*Ô*ˆà—’Ñ"Ô"ð 	Oð 	OˆAØŒw˜%ÒÐØœ�Ý)µ.ÈÐ2OÑ2OÔ2OÐPÑPÔPÐPÐPÐPØð 8Ø×0Ò0°Ñ7Ô7Ð7øà”˜GÒ#Ð#Ý Ð!MÀQÄVÐ!MÐ!MÑNÔNÐNð $ð	Oð 	Or!   )r;   r<   )r;   r   )r;   rD   )r;   rH   )NNN)rn   ro   rp   rq   rr   rs   rt   ru   rW   r   r;   r   )NNF)NN)
rZ   r”   rp   rq   rr   rs   rW   r   r;   r•   ) r   r   r   Ú__doc__r   r   r0   r2   r4   r5   r6   r7   r8   r:   r   r$   ÚpropertyrA   rC   rG   ÚclassmethodrM   rP   rS   r]   ra   re   rm   rŠ   r“   r‡   Ú__classcell__)rX   s   @r"   r+   r+   "   sÜ  ø€ € € € € € ðð ð$ €L€L�LØ%* U°4¸yÐ%IÑ%IÔ%I€OÐIÐIÐIÑIØPà��Ñ'Ô'€EÐ'Ð'Ð'Ñ'ðð ˜˜t™œ€KÐ$Ð$Ð$Ñ$ðð �5˜‘:”:€EÐÐÐÑðð !&  d¡¤€JÐ+Ð+Ð+Ñ+ðð �e˜E‘l”l€IÐ"Ð"Ð"Ñ"Ø/à˜˜d™œ€KÐ#Ð#Ð#Ñ#ðð �u˜]Ñ+Ô+€KÐ+Ð+Ð+Ñ+ðð ˜˜t™œ€CÐ$Ð$Ð$Ñ$ðð !˜5 ™;œ;€DÐ&Ð&Ð&Ñ&Øàð*ð *ð *ñ „Xð*ð ðð ð ñ „Xðð ð6ð 6ð 6ñ „Xð6ð ð7ð 7ð 7ñ „[ð7ð ðð ð ñ „Xððð ð ð ð ðð ð ð*ð ð ð.	ð 	ð 	ðð ð ð %)Ø:>Ø!%ð"5ð "5ð "5ð "5ð "5ðN %)Ø:>Ø!&ð
ð 
ð 
ð 
ð 
ðH %)Ø:>ð	Oð Oð Oð Oð Oð Oð Oð Oð Or!   r+   )$rŸ   Ú
__future__r   rc   r�   ÚloggingÚ	functoolsr   Útypingr   r   r   r   r	   Úlangchain_core.callbacksr
   Ú*langchain_core.language_models.chat_modelsr   r   Úlangchain_core.messagesr   r   r   Úlangchain_core.outputsr   r   r   Úlangchain_core.pydantic_v1r   r   Ú	getLoggerr   Úloggerr   r$   r+   r    r!   r"   ú<module>r®      s³  ðØ #Ð #Ø "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6à =Ð =Ð =Ð =Ð =Ð =ðð ð ð ð ð ð ð ð KÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à	ˆÔ	˜8Ñ	$Ô	$€ð"ð "ð "ð "ð "ˆ)ñ "ô "ð "ð
#ð #ð #ð #ð #ˆ9ñ #ô #ð #ðfOð fOð fOð fOð fO�-ñ fOô fOð fOð fOð fOr!   