o
    ưi                     @   s|   d dl 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 er+d dlmZ eZneZG dd deZG dd	 d	Zd
S )    )TYPE_CHECKINGAnyListOptionalTupleget_secret_str)AllMessageValues)BaseLLMException)Loggingc                   @   s   e Zd ZdZdS )SnowflakeExceptionz/Snowflake AI Endpoints exception handling classN)__name__
__module____qualname____doc__ r   r   S/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/snowflake/utils.pyr      s    r   c                   @   s   e Zd Zdedee fddZdededededef
dd	Zd
d Z			ddededee
 dededee dee defddZdee dee deee ee f fddZdS )SnowflakeBaseConfigmodelreturnc                 C   s   g dS )N)ZtemperatureZ
max_tokensZtop_pZresponse_formatZtoolsZtool_choicer   )selfr   r   r   r   get_supported_openai_params   s   z/SnowflakeBaseConfig.get_supported_openai_paramsnon_default_paramsoptional_paramsdrop_paramsc                 C   s0   |  |}| D ]\}}||v r|||< q	|S )a  
        If any supported_openai_params are in non_default_params, add them to optional_params, so they are used in API call

        Args:
            non_default_params (dict): Non-default parameters to filter.
            optional_params (dict): Optional parameters to update.
            model (str): Model name for parameter support check.

        Returns:
            dict: Updated optional_params with supported non-default parameters.
        )r   items)r   r   r   r   r   Zsupported_openai_paramsparamvaluer   r   r   map_openai_params    s   
z%SnowflakeBaseConfig.map_openai_paramsc                 C   s\   |sd|v r| d}ntd}|d u rtdd| d}|d}|ds,|d7 }|S )N
account_idZSNOWFLAKE_ACCOUNT_IDzMissing snowflake account_idzhttps://z.snowflakecomputing.com/api/v2/z/api/v2)popr   
ValueErrorrstripendswith)r   api_baser   r   r   r   r   _get_api_base8   s   

z!SnowflakeBaseConfig._get_api_baseNheadersmessageslitellm_paramsapi_keyr%   c           
      C   sR   d}|du r
t dd}	||	r|t|	d }d}|ddd| |d |S )	a  
        Return headers to use for Snowflake completion request

        Snowflake REST API Ref: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-llm-rest-api#api-reference
        Expected headers:
        {
            "Content-Type": "application/json",
            "Accept": "application/json",
            "Authorization": "Bearer " + <JWT>,
            "X-Snowflake-Authorization-Token-Type": "KEYPAIR_JWT"
        }
        ZKEYPAIR_JWTNzMissing Snowflake JWT keyzpat/ZPROGRAMMATIC_ACCESS_TOKENzapplication/jsonzBearer )zContent-TypeAcceptAuthorizationz$X-Snowflake-Authorization-Token-Type)r"   
startswithlenupdate)
r   r'   r   r(   r   r)   r*   r%   Z	auth_typeZpat_key_prefixr   r   r   validate_environmentG   s   
z(SnowflakeBaseConfig.validate_environmentc                 C   s   |pt d}||fS )NZSNOWFLAKE_JWTr   )r   r%   r*   Zdynamic_api_keyr   r   r   $_get_openai_compatible_provider_infor   s   z8SnowflakeBaseConfig._get_openai_compatible_provider_info)NN)r   r   r   strr   r   dictboolr   r&   r	   r   r0   r   r1   r   r   r   r   r      sP    

	
+r   N)typingr   r   r   r   r   Zlitellm.secret_managers.mainr   Zlitellm.types.llms.openair	   Z)litellm.llms.base_llm.chat.transformationr
   Z*litellm.litellm_core_utils.litellm_loggingr   Z_LiteLLMLoggingObjZLiteLLMLoggingObjr   r   r   r   r   r   <module>   s    