§
    šŠtj¡8  ã                   ój  — U d dl Z d dlmZmZmZmZmZmZmZm	Z	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mZ d dlmZmZmZ d dlmZ d dlmZmZm Z  d d	l!m"Z" d d
l#m$Z$ d dl%m&Z&m'Z'm(Z( g d¢Z)ee*         e+d<    G d„ de,¦  «        Z-dede.fd„Z/de*deee*                  de*fd„Z0 G d„ de¦  «        Z1dS )é    N)
ÚAnyÚCallableÚDictÚIteratorÚListÚLiteralÚOptionalÚSequenceÚTypeÚUnion)ÚCallbackManagerForLLMRun)ÚBaseChatModel)Ú	AIMessageÚAIMessageChunkÚBaseMessageÚChatMessageÚHumanMessageÚSystemMessage)ÚChatGenerationÚChatGenerationChunkÚ
ChatResult)ÚBaseTool)Úconvert_to_secret_strÚget_from_dict_or_envÚget_pydantic_field_names©Úconvert_to_openai_tool)Ú_build_model_kwargs)ÚFieldÚ	SecretStrÚmodel_validator)ÚsystemÚuserÚ	assistantÚSUPPORTED_ROLESc                   ó   — e Zd ZdZdS )ÚChatSnowflakeCortexErrorzError with Snowpark client.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úg/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/chat_models/snowflake.pyr'   r'   +   s   € € € € € Ø%Ð%Ð%Ð%r-   r'   ÚmessageÚreturnc                 ó:  — d| j         i}t          | t          ¦  «        r| j        t          v r| j        |d<   nct          | t
          ¦  «        rd|d<   nHt          | t          ¦  «        rd|d<   n-t          | t          ¦  «        rd|d<   nt          d| › �¦  «        ‚|S )zŠConvert a LangChain message to a dictionary.

    Args:
        message: The LangChain message.

    Returns:
        The dictionary.
    ÚcontentÚroler"   r#   r$   zGot unknown type )	r2   Ú
isinstancer   r3   r%   r   r   r   Ú	TypeError)r/   Úmessage_dicts     r.   Ú_convert_message_to_dictr7   /   s»   € ð 	�7”?ð$€Lõ
 �'�;Ñ'Ô'ð 	7¨G¬L½OÐ,KÐ,KØ&œ|ˆ�VÑÐÝ	�G�]Ñ	+Ô	+ð 7Ø'ˆ�VÑÐÝ	�G�\Ñ	*Ô	*ð 7Ø%ˆ�VÑÐÝ	�G�YÑ	'Ô	'ð 7Ø*ˆ�VÑÐåÐ5¨GÐ5Ð5Ñ6Ô6Ð6ØÐr-   ÚtextÚstopc                 ób   — |€| S |D ]'}|                       |¦  «        }|dk    r
| d|…         } Œ(| S )z0Truncates text at the earliest stop token found.Néÿÿÿÿ)Úfind)r8   r9   Ú
stop_tokenÚstop_token_idxs       r.   Ú_truncate_at_stop_tokensr?   J   sM   € ð
 €|Øˆàð )ð )ˆ
ØŸš :Ñ.Ô.ˆØ˜RÒÐØ˜˜˜Ô(ˆDøØ€Kr-   c                   óN  — e Zd ZU dZ ee¬¦  «        Zeee	eee
f         eeef         f         ed<   dZe
ed<   	 dZeed<   	 dZeed	<   	 d
Zeed<   	 dZee         ed<   	 d
Zee         ed<   	  edd¬¦  «        Zee         ed<   	  edd¬¦  «        Zee         ed<   	  edd¬¦  «        Zee         ed<   	  edd¬¦  «        Zee         ed<   	  edd¬¦  «        Zee         ed<   	  edd¬¦  «        Zee         ed<   	  edd¬¦  «        Zee         ed<   	 ddœde e	eee
f         eeef                  d ee	eee!d!         e"f                  d"e
d#d fd$„Z# e$d%¬&¦  «        e%d'eee
f         d#e
fd(„¦   «         ¦   «         Z& e$d%¬&¦  «        d'ed#efd)„¦   «         Z'd3d*„Z(e)d#efd+„¦   «         Z*	 	 d4d,e+e,         d-ee+e                  d.ee-         d"e
d#e.f
d/„Z/d0ed-ee+e                  d#e0e1         fd1„Z2	 	 d4d,e+e,         d-ee+e                  d.ee-         d"e
d#e0e1         f
d2„Z3dS )5ÚChatSnowflakeCortexa×  Snowflake Cortex based Chat model

    To use the chat model, you must have the ``snowflake-snowpark-python`` Python
    package installed and either:

        1. environment variables set with your snowflake credentials or
        2. directly passed in as kwargs to the ChatSnowflakeCortex constructor.

    Example:
        .. code-block:: python

            from langchain_community.chat_models import ChatSnowflakeCortex
            chat = ChatSnowflakeCortex()
    )Údefault_factoryÚ
test_toolsNÚsessionzmistral-largeÚmodelÚcompleteÚcortex_functionr   ÚtemperatureÚ
max_tokensÚtop_pÚusername)ÚdefaultÚaliasÚsnowflake_usernameÚpasswordÚsnowflake_passwordÚaccountÚsnowflake_accountÚdatabaseÚsnowflake_databaseÚschemaÚsnowflake_schemaÚ	warehouseÚsnowflake_warehouser3   Úsnowflake_roleÚauto)Útool_choiceÚtoolsr[   )rZ   ÚanyÚnoneÚkwargsr0   c                ój   — d„ |D ¦   «         }d„ |D ¦   «         }| j                              |¦  «         | S )z]Bind tool-like objects to this chat model, ensuring they conform to
        expected formats.c                 ó,   — g | ]}t          |¦  «        ‘ŒS r,   r   ©Ú.0Útools     r.   ú
<listcomp>z2ChatSnowflakeCortex.bind_tools.<locals>.<listcomp>    s!   € ÐJÐJÐJ¸DÕ1°$Ñ7Ô7ÐJÐJÐJr-   c                 ó(   — i | ]}d |v ¯|d          |“ŒS )Únamer,   rb   s     r.   ú
<dictcomp>z2ChatSnowflakeCortex.bind_tools.<locals>.<dictcomp>¢   s*   € ð  
ð  
ð  
Ø#'¸fÈ¸n¸nˆD�ŒL˜$¸n¸n¸nr-   )rC   Úupdate)Úselfr\   r[   r_   Úformatted_toolsÚformatted_tools_dicts         r.   Ú
bind_toolszChatSnowflakeCortex.bind_tools”   sU   € ð KÐJÀEÐJÑJÔJˆð 
ð  
Ø+:ð 
ñ  
ô  
Ðð 	Œ×ÒÐ3Ñ4Ô4Ð4àˆr-   Úbefore)ÚmodeÚvaluesc                 óD   — t          | ¦  «        }t          ||¦  «        }|S )z>Build extra kwargs from additional params that were passed in.)r   r   )Úclsrp   Úall_required_field_namess      r.   Úbuild_extrazChatSnowflakeCortex.build_extra©   s'   € õ $<¸CÑ#@Ô#@Ð Ý$ VÐ-EÑFÔFˆØˆr-   c           	      óº  — 	 ddl m} n# t          $ r t          d¦  «        ‚w xY wt          |dd¦  «        |d<   t	          t          |dd¦  «        ¦  «        |d<   t          |dd	¦  «        |d<   t          |d
d¦  «        |d
<   t          |dd¦  «        |d<   t          |dd¦  «        |d<   t          |dd¦  «        |d<   |d         |d         |d                              ¦   «         |d
         |d         |d         |d         ddœ}	 |j                             |¦  «                             ¦   «         |d<   n$# t          $ r}t          d|› �¦  «        ‚d }~ww xY w|S )Nr   )ÚSessionz‡`snowflake-snowpark-python` package not found, please install:
                `pip install snowflake-snowpark-python`
                rN   ÚSNOWFLAKE_USERNAMErP   ÚSNOWFLAKE_PASSWORDrR   ÚSNOWFLAKE_ACCOUNTrT   ÚSNOWFLAKE_DATABASErV   ÚSNOWFLAKE_SCHEMArX   ÚSNOWFLAKE_WAREHOUSErY   ÚSNOWFLAKE_ROLEÚTrue)rQ   r#   rO   rS   rU   rW   r3   Úclient_session_keep_aliverD   zFailed to create session: )Úsnowflake.snowparkrv   ÚImportErrorr   r   Úget_secret_valueÚbuilderÚconfigsÚcreateÚ	Exceptionr'   )rr   rp   rv   Úconnection_paramsÚes        r.   Úvalidate_environmentz(ChatSnowflakeCortex.validate_environment±   s  € ð	Ø2Ð2Ð2Ð2Ð2Ð2Ð2øÝð 	ð 	ð 	Ýðñô ð ð	øøøõ (<ØÐ(Ð*>ñ(
ô (
ˆÐ#Ñ$õ (=Ý  Ð)=Ð?SÑTÔTñ(
ô (
ˆÐ#Ñ$õ ';ØÐ'Ð)<ñ'
ô '
ˆÐ"Ñ#õ (<ØÐ(Ð*>ñ(
ô (
ˆÐ#Ñ$õ &:ØÐ&Ð(:ñ&
ô &
ˆÐ!Ñ"õ )=ØÐ)Ð+@ñ)
ô )
ˆÐ$Ñ%õ $8ØÐ$Ð&6ñ$
ô $
ˆÐÑ ð
 Ð1Ô2ØÐ/Ô0ØÐ3Ô4×EÒEÑGÔGØÐ3Ô4ØÐ/Ô0ØÐ 5Ô6ØÐ+Ô,Ø)/ð	
ð 	
Ðð	MØ '¤× 7Ò 7Ð8IÑ JÔ J× QÒ QÑ SÔ SˆF�9ÑÐøÝð 	Mð 	Mð 	MÝ*Ð+KÈÐ+KÐ+KÑLÔLÐLøøøøð	Møøøð ˆs    ‚	 ‰#Ä/D7 Ä7
EÅEÅEc                 ó^   — t          | dd ¦  «        �| j                             ¦   «          d S d S )NrD   )ÚgetattrrD   Úclose©rj   s    r.   Ú__del__zChatSnowflakeCortex.__del__ä   s6   € Ý�4˜ DÑ)Ô)Ð5ØŒL×ÒÑ Ô Ð Ð Ð ð 6Ð5r-   c                 ó   — d| j         › �S )z7Get the type of language model used by this chat model.zsnowflake-cortex-)rE   r�   s    r.   Ú	_llm_typezChatSnowflakeCortex._llm_typeè   s   € ð 0 4¤:Ð/Ð/Ð/r-   Úmessagesr9   Úrun_managerc           	      óÈ  — d„ |D ¦   «         }d }|D ]¯}t          |j        t          ¦  «        r“t          |t          ¦  «        r~d|j        v rut	          j        |j                             d¦  «        ¦  «        }|                     d¦  «        }	|	| j        v r+|                     di ¦  «        }
 | j        |	         di |
¤Ž} nŒ°|r$|                     dt          |¦  «        i¦  «         t	          j
        |¦  «        }| j        | j        �| j        nd| j        �| j        nddœ}t	          j
        |¦  «        }d	| j        › d
| j        › d|› d|› d�	}	 | j                             d| j                             ¦   «         › d�¦  «                             ¦   «          | j                             |¦  «                             ¦   «         }n$# t(          $ r}t+          d|› �¦  «        ‚d }~ww xY wt	          j        |d         d         ¦  «        }|d         d         d         }t-          ||¦  «        }t/          ||d         ¬¦  «        }t1          |¬¦  «        }t3          |g¬¦  «        S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r,   ©r7   ©rc   Úms     r.   re   z1ChatSnowflakeCortex._generate.<locals>.<listcomp>ô   ó!   € ÐGÐGÐG¸Õ1°!Ñ4Ô4ÐGÐGÐGr-   Úinvoke_toolÚ	tool_nameÚargsÚtool_outputç      ð?é   ©rH   rJ   rI   ú%
            select snowflake.cortex.ú(
                'ú ',
                parse_json($$ú"$$),
                parse_json($$z+$$)
            ) as llm_response;
        úUSE WAREHOUSE ú;z0Error while making request to Snowflake Cortex: r   ÚLLM_RESPONSEÚchoicesr‘   Úusage)r2   Úresponse_metadata©r/   )Úgenerationsr,   )r4   r2   Údictr   ÚjsonÚloadsÚgetrC   ÚappendÚstrÚdumpsrH   rJ   rI   rG   rE   rD   ÚsqlÚget_current_warehouseÚcollectr†   r'   r?   r   r   r   )rj   r‘   r9   r’   r_   Úmessage_dictsrœ   r/   Ú	tool_inforš   Ú	tool_argsÚmessage_jsonÚoptionsÚoptions_jsonÚsql_stmtÚl_rowsrˆ   ÚresponseÚai_message_contentr2   Ú
generations                        r.   Ú	_generatezChatSnowflakeCortex._generateí   sÇ  € ð HÐG¸hÐGÑGÔGˆð ˆØð 	ð 	ˆGå˜7œ?­DÑ1Ô1ð
å˜w­Ñ6Ô6ð
ð " W¤_Ð4Ð4å œJ w¤×':Ò':¸=Ñ'IÔ'IÑJÔJ�	Ø%ŸMšM¨+Ñ6Ô6�	Ø ¤Ð/Ð/Ø )§¢¨f°bÑ 9Ô 9�IØ"< $¤/°)Ô"<Ð"IÐ"I¸yÐ"IÐ"I�KØ�Eøð ð 	Ø× Ò Ø¥ KÑ 0Ô 0Ð1ñô ð õ
 ”z -Ñ0Ô0ˆàÔ+Ø#'¤:Ð#9�T”Z�Z¸sØ-1¬_Ð-H˜$œ/˜/Èdð
ð 
ˆõ
 ”z 'Ñ*Ô*ˆðØ%)Ô%9ðð à”*ðð ð +ðð ð +ð	ð ð ˆð		àŒL×ÒØH ¤×!CÒ!CÑ!EÔ!EÐHÐHÐHñô çŠg‰iŒiˆiØ”\×%Ò% hÑ/Ô/×7Ò7Ñ9Ô9ˆFˆFøÝð 	ð 	ð 	Ý*ØFÀ1ÐFÐFñô ð øøøøð	øøøõ
 ”:˜f Qœi¨Ô7Ñ8Ô8ˆØ% iÔ0°Ô3°JÔ?Ðå*Ð+=¸tÑDÔDˆÝØØ& wÔ/ð
ñ 
ô 
ˆõ $¨GÐ4Ñ4Ô4ˆ
Ý z lÐ3Ñ3Ô3Ð3s   ÅA3G Ç
G%ÇG Ç G%r2   c              #   óÊ   K  — d}t          ||¦  «        }t          dt          |¦  «        |¦  «        D ]/}||||z   …         }t          t	          |¬¦  «        ¬¦  «        V — Œ0dS )zY
        Stream the output of the model in chunks to return ChatGenerationChunk.
        é2   r   )r2   rª   N)r?   ÚrangeÚlenr   r   )rj   r2   r9   Ú
chunk_sizeÚtruncated_contentÚiÚchunk_contents          r.   Ú_stream_contentz#ChatSnowflakeCortex._stream_content3  s‰   è è € ð ˆ
Ý4°W¸dÑCÔCÐå�q�#Ð/Ñ0Ô0°*Ñ=Ô=ð 	Uð 	UˆAØ-¨a°!°j±.Ð.@ÔAˆMõ &­nÀ]Ð.SÑ.SÔ.SÐTÑTÔTÐTÐTÐTÐTð		Uð 	Ur-   c           	   +   ó†  K  — d„ |D ¦   «         }|D ]ß}t          |t          ¦  «        rÈt          |t          ¦  «        r³d|j        v rªt	          j        |j        ¦  «        }|                     dg ¦  «        }|D ]-}	|	                     d¦  «        }
|	                     di ¦  «        }Œ.|
| j        v rB|                     di ¦  «        } | j        |
         di |¤Ž}d|i}|                     |¦  «         Œàt	          j	        |¦  «        }| j
        | j        �| j        nd| j        �| j        nd	d
œ}t	          j	        |¦  «        }d| j        › d| j        › d|› d|› d�	}	 | j                             d| j                             ¦   «         › d�¦  «                             ¦   «          | j                             |¦  «                             ¦   «         }|D ]M}t	          j        |d         ¦  «        }|d         d         d         }|                      ||¦  «        D ]}|V — ŒŒNdS # t(          $ r}t+          d|› �¦  «        ‚d}~ww xY w)zGStream the output of the model in chunks to return ChatGenerationChunk.c                 ó,   — g | ]}t          |¦  «        ‘ŒS r,   r•   r–   s     r.   re   z/ChatSnowflakeCortex._stream.<locals>.<listcomp>J  r˜   r-   r™   Úinvoke_toolsrš   r›   rœ   Nr�   rž   rŸ   r    r¡   r¢   r£   z2$$)
            ) as llm_stream_response;
        r¤   r¥   ÚLLM_STREAM_RESPONSEr§   r   r‘   z7Error while making request to Snowflake Cortex stream: r,   )r4   r±   r   r2   r­   r®   r¯   rC   r°   r²   rH   rJ   rI   rG   rE   rD   r³   r´   rµ   rÊ   r†   r'   )rj   r‘   r9   r’   r_   r¶   r/   r·   Ú	tool_listrd   rš   r¸   Útool_resultÚadditional_contextr¹   rº   r»   r¼   ÚresultÚrowr¾   r¿   Úchunkrˆ   s                           r.   Ú_streamzChatSnowflakeCortex._streamB  sÐ  è è € ð HÐG¸hÐGÑGÔGˆð  ð 	ð 	ˆGå˜7¥CÑ(Ô(ðå˜w­Ñ6Ô6ðð " W¤_Ð4Ð4å œJ w¤Ñ7Ô7�	Ø%ŸMšM¨.¸"Ñ=Ô=�	Ø%ð 5ð 5�DØ $§¢¨Ñ 5Ô 5�IØ $§¢¨°Ñ 4Ô 4�I�Ià ¤Ð/Ð/Ø )§¢¨f°bÑ 9Ô 9�IØ"< $¤/°)Ô"<Ð"IÐ"I¸yÐ"IÐ"I�KØ*7¸Ð)EÐ&Ø!×(Ò(Ø*ñô ð øõ
 ”z -Ñ0Ô0ˆàÔ+Ø#'¤:Ð#9�T”Z�Z¸sØ-1¬_Ð-H˜$œ/˜/Èdð
ð 
ˆõ ”z 'Ñ*Ô*ˆðØ%)Ô%9ðð à”*ðð ð +ðð ð +ð	ð ð ˆð	àŒL×ÒØH ¤×!CÒ!CÑ!EÔ!EÐHÐHÐHñô çŠg‰iŒiˆiØ”\×%Ò% hÑ/Ô/×7Ò7Ñ9Ô9ˆFð ð  ð  �Ýœ: cÐ*?Ô&@ÑAÔA�Ø%-¨iÔ%8¸Ô%;¸JÔ%GÐ"ð "×1Ò1Ð2DÀdÑKÔKð  ð  �EØ�K�K�K�Kð ð ð  øõ ð 	ð 	ð 	Ý*ØMÈ!ÐMÐMñô ð øøøøð	øøøs   ÅCH È
I È)H;È;I )r0   N)NN)4r(   r)   r*   r+   r   r¬   rC   r   r±   r   r   r   r   r   Ú__annotations__rD   rE   rG   rH   ÚfloatrI   r	   ÚintrJ   rN   rP   r    rR   rT   rV   rX   rY   r
   r   Úboolrm   r!   Úclassmethodrt   r‰   rŽ   Úpropertyr�   r   r   r   r   rÁ   r   r   rÊ   rÕ   r,   r-   r.   rA   rA   Y   sy  € € € € € € ðð ð  NSÈUØðNñ Nô N€J��S˜%  S¨# X¤°°hÀÐ HÔIÐIÔJð ð ñ ð €GˆSÐÐÑØ"à €Eˆ3Ð Ð Ñ ðð &€O�SÐ%Ð%Ñ%ð+ð €K�ÐÐÑØ<à $€J�˜”Ð$Ð$Ñ$Ø>à€Eˆ8�EŒ?ÐÐÑðð ).¨°dÀ*Ð(MÑ(MÔ(MÐ˜ œÐMÐMÑMØSØ.3¨e¸DÈ
Ð.SÑ.SÔ.SÐ˜ Ô+ÐSÐSÑSØSØ', u°TÀÐ'KÑ'KÔ'KÐ�x ”}ÐKÐKÑKØRØ(-¨°dÀ*Ð(MÑ(MÔ(MÐ˜ œÐMÐMÑMØSØ&+ e°DÀÐ&IÑ&IÔ&IÐ�h˜s”mÐIÐIÑIØQØ).¨°tÀ;Ð)OÑ)OÔ)OÐ˜ #œÐOÐOÑOØTØ$) E°$¸fÐ$EÑ$EÔ$E€N�H˜S”MÐEÐEÑEØOð ðð ð à˜˜d 3¨ 8œn¨d°H¸hÐFÔGÔHðð Ø�$˜˜WÐ%:Ô;¸TÐAÔBô
ð	ð ðð 
ðð ð ð ð* €_˜(Ð#Ñ#Ô#Øð  c¨3 h¤ð °Cð ð ð ñ „[ñ $Ô#ðð €_˜(Ð#Ñ#Ô#ð0¨$ð 0°4ð 0ð 0ð 0ñ $Ô#ð0ðd!ð !ð !ð !ð ð0˜3ð 0ð 0ð 0ñ „Xð0ð %)Ø:>ð	D4ð D4à�{Ô#ðD4ð �t˜C”yÔ!ðD4ð Ð6Ô7ð	D4ð
 ðD4ð 
ðD4ð D4ð D4ð D4ðLUØðUØ"*¨4°¬9Ô"5ðUà	Ð%Ô	&ðUð Uð Uð Uð$ %)Ø:>ð	Eð Eà�{Ô#ðEð �t˜C”yÔ!ðEð Ð6Ô7ð	Eð
 ðEð 
Ð%Ô	&ðEð Eð Eð Eð Eð Er-   rA   )2r­   Útypingr   r   r   r   r   r   r	   r
   r   r   Ú langchain_core.callbacks.managerr   Úlangchain_core.language_modelsr   Úlangchain_core.messagesr   r   r   r   r   r   Úlangchain_core.outputsr   r   r   Úlangchain_core.toolsr   Úlangchain_core.utilsr   r   r   Ú%langchain_core.utils.function_callingr   Úlangchain_core.utils.utilsr   Úpydanticr   r    r!   r%   r±   rÖ   r†   r'   r¬   r7   r?   rA   r,   r-   r.   ú<module>ræ      s�  ðØ €€€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð FÐ EÐ EÐ EÐ EÐ EØ 8Ð 8Ð 8Ð 8Ð 8Ð 8ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð SÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð
 IÐ HÐ HÐ HÐ HÐ HØ :Ð :Ð :Ð :Ð :Ð :Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð €��c”ð ð ñ ð&ð &ð &ð &ð &˜yñ &ô &ð &ð kð °dð ð ð ð ð6Ø
ðà
�4˜”9Ô
ðð 	ðð ð ð ðnð nð nð nð n˜-ñ nô nð nð nð nr-   