§
    æ˜ºh¨  ã                   óì   — d dl Z d dlmZmZmZmZ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mZmZmZ d dlmZmZmZ d dlmZ  e j        e¦  «        Zded	efd
„Zded	efd„Z G d„ dee¦  «        Z dS )é    N)ÚAnyÚAsyncIteratorÚIteratorÚListÚOptional)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseChatModelÚagenerate_from_streamÚgenerate_from_stream)Ú	AIMessageÚAIMessageChunkÚBaseMessageÚChatMessageÚHumanMessageÚSystemMessage)ÚChatGenerationÚChatGenerationChunkÚ
ChatResult)Ú_BaseGigaChatÚmessageÚreturnc                 ó   — ddl m} | j        |j        k    rt	          | j        ¬¦  «        S | j        |j        k    rt          | j        ¬¦  «        S | j        |j        k    rt          | j        ¬¦  «        S t          d| j        › d| › �¦  «        ‚)Nr   )ÚMessagesRole©ÚcontentzGot unknown role ú )Úgigachat.modelsr   ÚroleÚSYSTEMr   r   ÚUSERr   Ú	ASSISTANTr   Ú	TypeError)r   r   s     úp/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/chat_models/gigachat.pyÚ_convert_dict_to_messager%      sž   € Ø,Ð,Ð,Ð,Ð,Ð,à„|�|Ô*Ò*Ð*Ý W¤_Ð5Ñ5Ô5Ð5Ø	Œ˜Ô*Ò	*Ð	*Ý G¤OÐ4Ñ4Ô4Ð4Ø	Œ˜Ô/Ò	/Ð	/Ý ¤Ð1Ñ1Ô1Ð1åÐD¨G¬LÐDÐD¸7ÐDÐDÑEÔEÐEó    c                 ó¨  — ddl m}m} t          | t          ¦  «        r ||j        | j        ¬¦  «        S t          | t          ¦  «        r ||j        | j        ¬¦  «        S t          | t          ¦  «        r ||j
        | j        ¬¦  «        S t          | t          ¦  «        r  | || j        ¦  «        | j        ¬¦  «        S t          d| › �¦  «        ‚)Nr   )ÚMessagesr   )r   r   zGot unknown type )r   r(   r   Ú
isinstancer   r    r   r   r!   r   r"   r   r   r#   )r   r(   r   s      r$   Ú_convert_message_to_dictr*   )   sê   € Ø6Ð6Ð6Ð6Ð6Ð6Ð6Ð6å�'�=Ñ)Ô)ð 	7Øˆx˜\Ô0¸'¼/ÐJÑJÔJÐJÝ	�G�\Ñ	*Ô	*ð 7Øˆx˜\Ô.¸¼ÐHÑHÔHÐHÝ	�G�YÑ	'Ô	'ð 7Øˆx˜\Ô3¸W¼_ÐMÑMÔMÐMÝ	�G�[Ñ	)Ô	)ð 7Øˆx˜\˜\¨'¬,Ñ7Ô7ÀÄÐQÑQÔQÐQåÐ5¨GÐ5Ð5Ñ6Ô6Ð6r&   c                   óÒ  — e Zd ZdZdee         defd„Zdedefd„Z		 	 	 ddee         de
ee                  d	e
e         d
e
e         dedefd„Z	 	 	 ddee         de
ee                  d	e
e         d
e
e         dedefd„Z	 	 ddee         de
ee                  d	e
e         dedee         f
d„Z	 	 ddee         de
ee                  d	e
e         dedee         f
d„Zdedefd„ZdS )ÚGigaChata3  `GigaChat` large language models API.

    To use, you should pass login and password to access GigaChat API or use token.

    Example:
        .. code-block:: python

            from langchain_community.chat_models import GigaChat
            giga = GigaChat(credentials=..., verify_ssl_certs=False)
    Úmessagesr   c                 óþ   — ddl m}  |d„ |D ¦   «         | j        ¬¦  «        }| j        �| j        |_        | j        �| j        |_        | j        r-t                               d|                     ¦   «         ¦  «         |S )Nr   )ÚChatc                 ó,   — g | ]}t          |¦  «        ‘ŒS © )r*   )Ú.0Úms     r$   ú
<listcomp>z+GigaChat._build_payload.<locals>.<listcomp>H   s!   € ÐDÐDÐD°aÕ.¨qÑ1Ô1ÐDÐDÐDr&   )r-   Úprofanity_checkzGiga request: %s)	r   r/   Ú	profanityÚtemperatureÚ
max_tokensÚverboseÚloggerÚinfoÚdict)Úselfr-   r/   Úpayloads       r$   Ú_build_payloadzGigaChat._build_payloadD   s”   € Ø(Ð(Ð(Ð(Ð(Ð(à�$ØDÐD¸8ÐDÑDÔDØ œNð
ñ 
ô 
ˆð ÔÐ'Ø"&Ô"2ˆGÔØŒ?Ð&Ø!%¤ˆGÔàŒ<ð 	<Ý�KŠKÐ*¨G¯LªL©N¬NÑ;Ô;Ð;àˆr&   Úresponsec                 óp  — g }|j         D ]�}t          |j        ¦  «        }|j        }t	          |d|i¬¦  «        }|                     |¦  «         |dk    rt                               d|¦  «         | j        r t           	                    d|j
        ¦  «         ŒŽ|j        |j        dœ}t          ||¬¦  «        S )NÚfinish_reason)r   Úgeneration_infoÚstopz'Giga generation stopped with reason: %szGiga response: %s)Útoken_usageÚ
model_name)ÚgenerationsÚ
llm_output)Úchoicesr%   r   rB   r   Úappendr:   Úwarningr9   r;   r   ÚusageÚmodelr   )r=   r@   rG   Úresr   rB   ÚgenrH   s           r$   Ú_create_chat_resultzGigaChat._create_chat_resultU   s×   € ØˆØÔ#ð 	Bð 	BˆCÝ.¨s¬{Ñ;Ô;ˆGØÔ-ˆMÝ ØØ!0°-Ð @ðñ ô ˆCð ×Ò˜sÑ#Ô#Ð#Ø Ò&Ð&Ý—’Ø=Ø!ñô ð ð Œ|ð BÝ—’Ð/°´ÑAÔAÐAøØ%-¤^À8Ä>ÐRÐRˆ
Ý k¸jÐIÑIÔIÐIr&   NrD   Úrun_managerÚstreamÚkwargsc                 óä   — |�|n| j         }|r  | j        |f||dœ|¤Ž}t          |¦  «        S |                      |¦  «        }| j                             |¦  «        }	|                      |	¦  «        S ©N)rD   rQ   )Ú	streamingÚ_streamr   r?   Ú_clientÚchatrP   ©
r=   r-   rD   rQ   rR   rS   Úshould_streamÚstream_iterr>   r@   s
             r$   Ú	_generatezGigaChat._generatei   s•   € ð #)Ð"4˜˜¸$¼.ˆØð 	5Ø&˜$œ,ØðØ#°ðð Ø@Fðð ˆKõ (¨Ñ4Ô4Ð4à×%Ò% hÑ/Ô/ˆØ”<×$Ò$ WÑ-Ô-ˆà×'Ò'¨Ñ1Ô1Ð1r&   c              ‹   ó   K  — |�|n| j         }|r& | j        |f||dœ|¤Ž}t          |¦  «        ƒ d {V —†S |                      |¦  «        }| j                             |¦  «        ƒ d {V —†}	|                      |	¦  «        S rU   )rV   Ú_astreamr   r?   rX   ÚachatrP   rZ   s
             r$   Ú
_ageneratezGigaChat._agenerate}   s½   è è € ð #)Ð"4˜˜¸$¼.ˆØð 	<Ø'˜$œ-ØðØ#°ðð Ø@Fðð ˆKõ /¨{Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;à×%Ò% hÑ/Ô/ˆØœ×+Ò+¨GÑ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4ˆà×'Ò'¨Ñ1Ô1Ð1r&   c              +   ó  K  — |                       |¦  «        }| j                             |¦  «        D ]W}|j        rN|j        d         j        j        }t          t          |¬¦  «        ¬¦  «        V — |r|                     |¦  «         ŒXd S ©Nr   r   )r   )	r?   rX   rR   rI   Údeltar   r   r   Úon_llm_new_token©r=   r-   rD   rQ   rS   r>   Úchunkr   s           r$   rW   zGigaChat._stream‘   sŸ   è è € ð ×%Ò% hÑ/Ô/ˆà”\×(Ò(¨Ñ1Ô1ð 	:ð 	:ˆEØŒ}ð :Øœ-¨Ô*Ô0Ô8�Ý)µ.ÈÐ2QÑ2QÔ2QÐRÑRÔRÐRÐRÐRØð :Ø×0Ò0°Ñ9Ô9Ð9øð	:ð 	:r&   c                ó2  K  — |                       |¦  «        }| j                             |¦  «        2 3 d {V —†}|j        rU|j        d         j        j        }t          t          |¬¦  «        ¬¦  «        W V — |r|                     |¦  «        ƒ d {V —† Œd6 d S rc   )	r?   rX   ÚastreamrI   rd   r   r   r   re   rf   s           r$   r_   zGigaChat._astream¡   s×   è è € ð ×%Ò% hÑ/Ô/ˆàœ<×/Ò/°Ñ8Ô8ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@�%ØŒ}ð @Øœ-¨Ô*Ô0Ô8�Ý)µ.ÈÐ2QÑ2QÔ2QÐRÑRÔRÐRÐRÐRÐRØð @Ø%×6Ò6°wÑ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?øð 9Ð8Ð8s   ²BÚtextc                 ó@   — t          t          |¦  «        dz  ¦  «        S )z"Count approximate number of tokensgffffff@)ÚroundÚlen)r=   rj   s     r$   Úget_num_tokenszGigaChat.get_num_tokens±   s   € å•S˜‘Y”Y ‘_Ñ%Ô%Ð%r&   )NNN)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r?   r   rP   r   Ústrr	   Úboolr]   r   ra   r   r   rW   r   r_   Úintrn   r1   r&   r$   r,   r,   8   s[  € € € € € ð	ð 	ð t¨KÔ'8ð ¸Sð ð ð ð ð"J¨Cð J°Jð Jð Jð Jð Jð. %)Ø:>Ø!%ð2ð 2à�{Ô#ð2ð �t˜C”yÔ!ð2ð Ð6Ô7ð	2ð
 ˜”ð2ð ð2ð 
ð2ð 2ð 2ð 2ð. %)Ø?CØ!%ð2ð 2à�{Ô#ð2ð �t˜C”yÔ!ð2ð Ð;Ô<ð	2ð
 ˜”ð2ð ð2ð 
ð2ð 2ð 2ð 2ð. %)Ø:>ð	:ð :à�{Ô#ð:ð �t˜C”yÔ!ð:ð Ð6Ô7ð	:ð
 ð:ð 
Ð%Ô	&ð:ð :ð :ð :ð& %)Ø?Cð	@ð @à�{Ô#ð@ð �t˜C”yÔ!ð@ð Ð;Ô<ð	@ð
 ð@ð 
Ð*Ô	+ð@ð @ð @ð @ð & 3ð &¨3ð &ð &ð &ð &ð &ð &r&   r,   )!ÚloggingÚtypingr   r   r   r   r   Úlangchain_core.callbacksr   r	   Ú*langchain_core.language_models.chat_modelsr
   r   r   Úlangchain_core.messagesr   r   r   r   r   r   Úlangchain_core.outputsr   r   r   Ú!langchain_community.llms.gigachatr   Ú	getLoggerro   r:   r%   r*   r,   r1   r&   r$   ú<module>r~      s±  ðØ €€€Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð SÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ Rà ;Ð ;Ð ;Ð ;Ð ;Ð ;à	ˆÔ	˜8Ñ	$Ô	$€ð
F cð 
F¨kð 
Fð 
Fð 
Fð 
Fð7 kð 7°cð 7ð 7ð 7ð 7ð{&ð {&ð {&ð {&ð {&ˆ}˜mñ {&ô {&ð {&ð {&ð {&r&   