
    Ng                      6   U d dl Z d dl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 d dlmZmZ d dlmZmZmZ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Z% G d de	          Z&dS )    N)AnyDictListOptional)CallbackManagerForLLMRun)BaseChatModel)	AIMessageBaseMessageChatMessageHumanMessageSystemMessage)ChatGeneration
ChatResult)convert_to_secret_strget_from_dict_or_envget_pydantic_field_namespre_init)_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__     e/var/www/html/ai-engine/env/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 )zConvert a LangChain message to a dictionary.

    Args:
        message: The LangChain message.

    Returns:
        The dictionary.
    contentroler   r   r   zGot unknown type )	r(   
isinstancer   r)   r   r   r   r	   	TypeError)r%   message_dicts     r$   _convert_message_to_dictr-   "   s     	7?$L
 ';'' 	7GLO,K,K&|V	G]	+	+ 7'V	G\	*	* 7%V	GY	'	' 7*V5G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)r.   r/   
stop_tokenstop_token_idxs       r$   _truncate_at_stop_tokensr5   =   sM    
 | ) )
:..R(DKr#   c                      e Zd ZU dZ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<   	  ed          edeeef         defd                        Zededefd             Zd(d!Ze defd"            Z!	 	 d)d#e"e#         d$ee"e                  d%ee$         d&ede%f
d'Z&dS )*ChatSnowflakeCortexa  Snowflake Cortex based Chat model

    To use 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()
    N_sp_sessionzsnowflake-arcticmodelcompletecortex_functiongffffff?temperature
max_tokenstop_pusername)defaultaliassnowflake_usernamepasswordsnowflake_passwordaccountsnowflake_accountdatabasesnowflake_databaseschemasnowflake_schema	warehousesnowflake_warehouser)   snowflake_rolebefore)modevaluesr&   c                 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}	 |j                            |                                          |d<   n$# t          $ r}t          d|           d }~ww xY w|S )Nr   )Sessionzm`snowflake-snowpark-python` package not found, please install it with `pip install snowflake-snowpark-python`rB   SNOWFLAKE_USERNAMErD   SNOWFLAKE_PASSWORDrF   SNOWFLAKE_ACCOUNTrH   SNOWFLAKE_DATABASErJ   SNOWFLAKE_SCHEMArL   SNOWFLAKE_WAREHOUSErM   SNOWFLAKE_ROLE)rE   r   rC   rG   rI   rK   r)   r8   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$+O$;$;<M$N$N$U$U$W$WF=!! 	M 	M 	M*+K+K+KLLL	M s    	 #/D6 6
E EEc                 ^    t          | dd           | j                                         d S d S )Nr8   )getattrr8   closeselfs    r$   __del__zChatSnowflakeCortex.__del__   s7    4--9""$$$$$ :9r#   c                     d| j          S )z7Get the type of language model used by this chat model.zsnowflake-cortex-)r9   rk   s    r$   	_llm_typezChatSnowflakeCortex._llm_type   s     04:///r#   messagesr/   run_managerkwargsc           	      z   d |D             }t          |          }d| j        i}| j        
| j        |d<   | j        
| j        |d<   t          |          }d| j         d| j         d| d| d		}		 | j                            |	                                          }
n$# t          $ r}t          d
|           d }~ww xY wt          j        |
d         d                   }|d         d         d         }t          ||          }t          ||d                   }t          |          }t!          |g          S )Nc                 ,    g | ]}t          |          S r"   )r-   ).0ms     r$   
<listcomp>z1ChatSnowflakeCortex._generate.<locals>.<listcomp>   s!    GGG1!44GGGr#   r<   r>   r=   z%
            select snowflake.cortex.z(
                'z'
                ,,z) as llm_response;z=Error while making request to Snowflake Cortex via Snowpark: r   LLM_RESPONSEchoicesrp   usage)r(   response_metadata)r%   )generations)strr<   r>   r=   r;   r9   r8   sqlcollectrd   r   jsonloadsr5   r	   r   r   )rl   rp   r/   rq   rr   message_dictsmessage_stroptionsoptions_strsql_stmtl_rowsrf   responseai_message_contentr(   r%   
generations                    r$   	_generatezChatSnowflakeCortex._generate   s    HGhGGG-(( $"23:!#zGG?&$(OGL!'llB%)%9B B*B B B B !,B B B
	%))(33;;==FF 	 	 	*SPQSS  	
 :fQi788%i03J?*+=tDD&w/
 
 
 $G444
zl3333s   0,B 
B>'B99B>)r&   N)NN)'r   r   r    r!   r8   r   __annotations__r9   r~   r;   r<   floatr=   r   intr>   r   rB   rD   r   rF   rH   rJ   rL   rM   r   classmethodr   rT   r   rg   rm   propertyro   r   r
   r   r   r   r"   r#   r$   r7   r7   L   s          K"#E3###+ &OS%%%+ K< $J$$$>!E8E?!!! ).d*(M(M(MMMMS.3eD
.S.S.S+SSSS',uT'K'K'Kx}KKKR(-d*(M(M(MMMMS&+eD&I&I&IhsmIIIQ).t;)O)O)O#OOOT$)E$f$E$E$ENHSMEEEO_(###c3h C    [ $# .$ .4 . . . X.`% % % % 03 0 0 0 X0 %):>	$4 $4{#$4 tCy!$4 67	$4
 $4 
$4 $4 $4 $4 $4 $4r#   r7   )'r   typingr   r   r   r    langchain_core.callbacks.managerr   langchain_core.language_modelsr   langchain_core.messagesr	   r
   r   r   r   langchain_core.outputsr   r   langchain_core.utilsr   r   r   r   langchain_core.utils.utilsr   pydanticr   r   r   r   r~   r   rd   r   dictr-   r5   r7   r"   r#   r$   <module>r      s    , , , , , , , , , , , , E E E E E E 8 8 8 8 8 8              > = = = = = = =            ; : : : : : 6 6 6 6 6 6 6 6 6 6  c   & & & & &y & & &k d    6

49
 	   [4 [4 [4 [4 [4- [4 [4 [4 [4 [4r#   