Ë
    µŒj™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«      Z1y)é    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y)ÚChatSnowflakeCortexErrorzError with Snowpark client.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ús/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/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<   |S t        | t
        «      rd|d<   |S t        | t        «      rd|d<   |S t        | t        «      rd|d<   |S t        d| › �«      ‚)zŠConvert a LangChain message to a dictionary.

    Args:
        message: The LangChain message.

    Returns:
        The dictionary.
    ÚcontentÚroler!   r"   r#   zGot unknown type )	r1   Ú
isinstancer   r2   r$   r   r   r   Ú	TypeError)r.   Úmessage_dicts     r-   Ú_convert_message_to_dictr6   /   s°   € ð 	�7—?‘?ð$€Lô
 �'œ;Ô'¨G¯L©L¼OÑ,KØ&Ÿ|™|ˆ�VÑð Ðô 
�Gœ]Ô	+Ø'ˆ�VÑð Ðô 
�Gœ\Ô	*Ø%ˆ�VÑð
 Ðô	 
�GœYÔ	'Ø*ˆ�VÑð Ðô Ð+¨G¨9Ð5Ó6Ð6r,   ÚtextÚstopc                 óT   — |€| S |D ]  }| j                  |«      }|dk7  sŒ| d| } Œ  | S )z0Truncates text at the earliest stop token found.Néÿÿÿÿ)Úfind)r7   r8   Ú
stop_tokenÚstop_token_idxs       r-   Ú_truncate_at_stop_tokensr>   J   sA   € ð
 €|Øˆãˆ
ØŸ™ :Ó.ˆØ˜RÓØ˜˜Ð(‰Dð ð €Kr,   c                   ó>  — 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„Z3y)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_warehouser2   Úsnowflake_roleÚauto)Útool_choiceÚtoolsrZ   )rY   ÚanyÚnoneÚkwargsr/   c                ó°   — |D �cg c]  }t        |«      ‘Œ }}|D �ci c]  }d|v sŒ|d   |“Œ }}| j                  j                  |«       | S c c}w c c}w )z]Bind tool-like objects to this chat model, ensuring they conform to
        expected formats.Úname)r   rB   Úupdate)Úselfr[   rZ   r^   ÚtoolÚformatted_toolsÚformatted_tools_dicts          r-   Ú
bind_toolszChatSnowflakeCortex.bind_tools”   sr   € ñ EJÓJÁE¸DÔ1°$Õ7ÀEˆÐJñ ,;ó 
Ù+: 4¸fÈºnˆD�‰L˜$Ñ¨?ð 	ð  
ð 	�‰×ÑÐ3Ô4àˆùò Kùò 
s   …A�	A§AÚbefore)ÚmodeÚvaluesc                 ó4   — t        | «      }t        ||«      }|S )z>Build extra kwargs from additional params that were passed in.)r   r   )Úclsri   Úall_required_field_namess      r-   Úbuild_extrazChatSnowflakeCortex.build_extra©   s!   € ô $<¸CÓ#@Ð Ü$ VÐ-EÓFˆØˆr,   c           	      ó*  — 	 ddl m} 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   j                  «       |d
   |d   |d   |d   ddœ}	 |j                  j                  |«      j                  «       |d<   |S # t        $ r t        d«      ‚w xY w# t        $ r}t        d|› �«      ‚d }~ww xY w)Nr   )ÚSessionz‡`snowflake-snowpark-python` package not found, please install:
                `pip install snowflake-snowpark-python`
                rM   ÚSNOWFLAKE_USERNAMErO   ÚSNOWFLAKE_PASSWORDrQ   ÚSNOWFLAKE_ACCOUNTrS   ÚSNOWFLAKE_DATABASErU   ÚSNOWFLAKE_SCHEMArW   ÚSNOWFLAKE_WAREHOUSErX   ÚSNOWFLAKE_ROLEÚTrue)rP   r"   rN   rR   rT   rV   r2   Úclient_session_keep_aliverC   zFailed to create session: )Úsnowflake.snowparkro   ÚImportErrorr   r   Úget_secret_valueÚbuilderÚconfigsÚcreateÚ	Exceptionr&   )rk   ri   ro   Úconnection_paramsÚes        r-   Úvalidate_environmentz(ChatSnowflakeCortex.validate_environment±   sœ  € ð	Ý2ô (<ØÐ(Ð*>ó(
ˆÐ#Ñ$ô (=Ü  Ð)=Ð?SÓTó(
ˆÐ#Ñ$ô ';ØÐ'Ð)<ó'
ˆÐ"Ñ#ô (<ØÐ(Ð*>ó(
ˆÐ#Ñ$ô &:ØÐ&Ð(:ó&
ˆÐ!Ñ"ô )=ØÐ)Ð+@ó)
ˆÐ$Ñ%ô $8ØÐ$Ð&6ó$
ˆÐÑ ð
 Ð1Ñ2ØÐ/Ñ0ØÐ3Ñ4×EÑEÓGØÐ3Ñ4ØÐ/Ñ0ØÐ 5Ñ6ØÐ+Ñ,Ø)/ñ	
Ðð	MØ '§¡× 7Ñ 7Ð8IÓ J× QÑ QÓ SˆF�9Ñð ˆøô[ ò 	Üðóð ð	ûôT ò 	MÜ*Ð-GÈÀsÐ+KÓLÐLûð	Mús#   ‚C Â0,C6 ÃC3Ã6	DÃ?DÄDc                 óT   — t        | dd «      �| j                  j                  «        y y )NrC   )ÚgetattrrC   Úclose©rb   s    r-   Ú__del__zChatSnowflakeCortex.__del__ä   s&   € Ü�4˜ DÓ)Ð5Ø�L‰L×ÑÕ ð 6r,   c                 ó    — d| j                   › �S )z7Get the type of language model used by this chat model.zsnowflake-cortex-)rD   r†   s    r-   Ú	_llm_typezChatSnowflakeCortex._llm_typeè   s   € ð # 4§:¡: ,Ð/Ð/r,   Úmessagesr8   Úrun_managerc           	      óØ  — |D �cg c]  }t        |«      ‘Œ }}d }|D ]³  }t        |j                  t        «      sŒt        |t        «      sŒ/d|j                  v sŒ>t        j                  |j                  j                  d«      «      }	|	j                  d«      }
|
| j                  v sŒŒ|	j                  di «      } | j                  |
   di |¤Ž} n |r|j                  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"                  j%                  d| j"                  j'                  «       › d�«      j)                  «        | j"                  j%                  |«      j)                  «       }t        j                  |d   d   «      }|d   d   d   }t/        ||«      }t1        ||d   ¬«      }t3        |¬«      }t5        |g¬«      S c c}w # t*        $ r}t-        d|› �«      ‚d }~ww xY w)NÚinvoke_toolÚ	tool_nameÚargsÚtool_outputç      ð?é   ©rG   rI   rH   ú%
            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)r1   Úresponse_metadata©r.   )Úgenerationsr+   )r6   r3   r1   Údictr   ÚjsonÚloadsÚgetrB   ÚappendÚstrÚdumpsrG   rI   rH   rF   rD   rC   ÚsqlÚget_current_warehouseÚcollectr   r&   r>   r   r   r   )rb   rŠ   r8   r‹   r^   ÚmÚmessage_dictsr�   r.   Ú	tool_inforŽ   Ú	tool_argsÚmessage_jsonÚoptionsÚoptions_jsonÚsql_stmtÚl_rowsr�   ÚresponseÚai_message_contentr1   Ú
generations                         r-   Ú	_generatezChatSnowflakeCortex._generateí   sX  € ñ ?GÓG¹h¸Ô1°!Õ4¸hˆÐGð ˆÛˆGä˜7Ÿ?™?¬DÕ1Ü˜w¬Õ6Ø! W§_¡_Ò4ä ŸJ™J w§¡×':Ñ':¸=Ó'IÓJ�	Ø%ŸM™M¨+Ó6�	Ø §¡Ò/Ø )§¡¨f°bÓ 9�IØ"< $§/¡/°)Ñ"<Ñ"I¸yÑ"I�KÙð  ñ Ø× Ñ Ø¤ KÓ 0Ð1ôô
 —z‘z -Ó0ˆà×+Ñ+Ø#'§:¡:Ð#9�T—Z’Z¸sØ-1¯_©_Ð-H˜$Ÿ/š/Èdñ
ˆô
 —z‘z 'Ó*ˆð%Ø%)×%9Ñ%9Ð$:ð ;Ø—*‘*�ð Ø)˜Nð +Ø)˜Nð +	ð	ˆð		à�L‰L×ÑØ  §¡×!CÑ!CÓ!EÐ FÀaÐHóç‰gŒiØ—\‘\×%Ñ% hÓ/×7Ñ7Ó9ˆFô —:‘:˜f Q™i¨Ñ7Ó8ˆØ% iÑ0°Ñ3°JÑ?Ðä*Ð+=¸tÓDˆÜØØ& wÑ/ô
ˆô $¨GÔ4ˆ
Ü z lÔ3Ð3ùò{ Høô^ ò 	Ü*ØBÀ1À#ÐFóð ûð	ús   …IÅ?A.I É	I)ÉI$É$I)r1   c              #   óž   K  — d}t        ||«      }t        dt        |«      |«      D ]"  }||||z    }t        t	        |¬«      ¬«      –— Œ$ y­w)zY
        Stream the output of the model in chunks to return ChatGenerationChunk.
        é2   r   )r1   rž   N)r>   ÚrangeÚlenr   r   )rb   r1   r8   Ú
chunk_sizeÚtruncated_contentÚiÚchunk_contents          r-   Ú_stream_contentz#ChatSnowflakeCortex._stream_content3  sU   è ø€ ð ˆ
Ü4°W¸dÓCÐä�qœ#Ð/Ó0°*Ö=ˆAØ-¨a°!°j±.ÐAˆMô &¬nÀ]Ô.SÔTÓTñ	 >ùs   ‚AAc           	   +   óÂ  K  — |D �cg c]  }t        |«      ‘Œ }}|D ]Ù  }t        |t        «      sŒt        |t        «      sŒ%d|j                  v sŒ4t        j                  |j                  «      }|j                  dg «      }	|	D ]%  }
|
j                  d«      }|
j                  di «      }Œ' | j                  v sŒž|j                  di «      } | j                  |   di |¤Ž}d|i}|j                  |«       ŒÛ t        j                  |«      }| j                  | j                  �| j                  nd| j                  �| j                  ndd	œ}t        j                  |«      }d
| j                  › d| j                  › d|› d|› d�	}	 | j                   j#                  d| j                   j%                  «       › d�«      j'                  «        | j                   j#                  |«      j'                  «       }|D ]@  }t        j                  |d   «      }|d   d   d   }| j)                  ||«      D ]  }|–— Œ ŒB yc c}w # t*        $ r}t-        d|› �«      ‚d}~ww xY w­w)zGStream the output of the model in chunks to return ChatGenerationChunk.r�   Úinvoke_toolsrŽ   r�   r�   Nr‘   r’   r“   r”   r•   r–   r—   z1')
            ) as llm_stream_response;
        r˜   r™   ÚLLM_STREAM_RESPONSEr›   r   rŠ   z7Error while making request to Snowflake Cortex stream: r+   )r6   r3   r¥   r   r1   r¡   r¢   r£   rB   r¤   r¦   rG   rI   rH   rF   rD   rC   r§   r¨   r©   r¿   r   r&   )rb   rŠ   r8   r‹   r^   rª   r«   r.   r¬   Ú	tool_listrc   rŽ   r­   Útool_resultÚadditional_contextr®   r¯   r°   r±   ÚresultÚrowr³   r´   Úchunkr�   s                            r-   Ú_streamzChatSnowflakeCortex._streamB  sX  è ø€ ñ ?GÓG¹h¸Ô1°!Õ4¸hˆÐGó  ˆGä˜7¤CÕ(Ü˜w¬Õ6Ø! W§_¡_Ò4ä ŸJ™J w§¡Ó7�	Ø%ŸM™M¨.¸"Ó=�	Û%�DØ $§¡¨Ó 5�IØ $§¡¨°Ó 4‘Ið &ð  §¡Ò/Ø )§¡¨f°bÓ 9�IØ"< $§/¡/°)Ñ"<Ñ"I¸yÑ"I�KØ*7¸Ð)EÐ&Ø!×(Ñ(Ø*õð!  ô* —z‘z -Ó0ˆà×+Ñ+Ø#'§:¡:Ð#9�T—Z’Z¸sØ-1¯_©_Ð-H˜$Ÿ/š/Èdñ
ˆô —z‘z 'Ó*ˆð%Ø%)×%9Ñ%9Ð$:ð ;Ø—*‘*�ð Ø)˜Nð +Ø)˜Nð +	ð	ˆð	à�L‰L×ÑØ  §¡×!CÑ!CÓ!EÐ FÀaÐHóç‰gŒiØ—\‘\×%Ñ% hÓ/×7Ñ7Ó9ˆFó �ÜŸ:™: cÐ*?Ñ&@ÓA�Ø%-¨iÑ%8¸Ñ%;¸JÑ%GÐ"ð "×1Ñ1Ð2DÀdÖK�EØ“Kñ Lñ ùòe Høôt ò 	Ü*ØIÈ!ÈÐMóð ûð	üsM   ‚I‡H;™I±IÁIÁA)IÂ;CIÆB3I  È:IÉ 	IÉ	IÉIÉI)r/   N)NN)4r'   r(   r)   r*   r   r    rB   r   r¥   r   r   r   r   r   Ú__annotations__rC   rD   rF   rG   ÚfloatrH   r	   ÚintrI   rM   rO   r   rQ   rS   rU   rW   rX   r
   r   Úboolrf   r    Úclassmethodrm   r‚   r‡   Úpropertyr‰   r   r   r   r   r¶   r   r   r¿   rÉ   r+   r,   r-   r@   r@   Y   s  … ññ  NSØôN€J��S˜%  S¨# X¡°°hÀÐ HÑIÐIÑJó ð €GˆSÓØ"à €Eˆ3Ó ðð &€O�SÓ%ð+ð €K�ÓØ<à $€J�˜‘Ó$Ø>à€Eˆ8�E‰?Óðñ ).°dÀ*Ô(MÐ˜ ™ÓMØSÙ.3¸DÈ
Ô.SÐ˜ Ñ+ÓSØSÙ',°TÀÔ'KÐ�x ‘}ÓKØRÙ(-°dÀ*Ô(MÐ˜ ™ÓMØSÙ&+°DÀÔ&IÐ�h˜s‘mÓIØQÙ).°tÀ;Ô)OÐ˜ #™ÓOØTÙ$)°$¸fÔ$E€N�H˜S‘MÓ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ód!ð ð0˜3ò 0ó ð0ð %)Ø:>ñ	D4à�{Ñ#ðD4ð �t˜C‘yÑ!ðD4ð Ð6Ñ7ð	D4ð
 ðD4ð 
óD4ðLUØðUØ"*¨4°©9Ñ"5ðUà	Ð%Ñ	&óUð$ %)Ø:>ñ	Eà�{Ñ#ðEð �t˜C‘yÑ!ðEð Ð6Ñ7ð	Eð
 ðEð 
Ð%Ñ	&ôEr,   r@   )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    r6   r>   r@   r+   r,   r-   Ú<module>rÚ      s¶   ðÜ ÷÷ ÷ õ FÝ 8÷÷ ÷ SÑ RÝ )÷ñ õ
 IÝ :ß 6Ñ 6ò€��c‘ó ô&˜yô &ð kð °dó ð6Ø
ðà
�4˜‘9Ñ
ðð 	óôn˜-õ nr,   