o
    )i                     @   s   d Z ddlZddlmZmZmZ ddlmZmZm	Z	m
Z
mZ dZG dd deZG dd	 d	ZG d
d dZejejddejejddiZdS )z+SageMaker-specific configuration constants.    N)AnyDictOptional)	BaseModel
ConfigDictFieldfield_validatormodel_validator
SAGEMAKER_c                   @   s   e Zd ZU dZeddZedddZee	d< edd	d
dZ
ee	d< edddZee e	d< edddZeddededeeef fddZedddededefddZedddededefddZdS )SageMakerConfiga  Pydantic model for SageMaker configuration.

    Automatically loads configuration from environment variables with SAGEMAKER_ prefix.
    Example: SAGEMAKER_ENABLE_STATEFUL_SESSIONS=true -> enable_stateful_sessions=True

    Only fields defined in this model are loaded. Other SAGEMAKER_* env vars
    (like SAGEMAKER_MODEL_PATH) are ignored.

    Usage:
        # Create from environment variables
        config = SagemakerConfig.from_env()

        # Or just instantiate (automatically loads from env)
        config = SagemakerConfig()

        # Override specific values
        config = SagemakerConfig(enable_stateful_sessions=True)
    ignore)extraFz,Enable stateful sessions for the applicationdefaultdescriptionenable_stateful_sessionsi  z"Session expiration time in secondsr   )r   r   gtsessions_expirationNz>Custom path for session storage (defaults to /dev/shm or temp)sessions_pathreturnc                 C   s   |  S )zCreate SagemakerConfig from environment variables.

        Returns:
            SagemakerConfig instance with values loaded from SAGEMAKER_* env vars
         )clsr   r   o/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/model_hosting_container_standards/sagemaker/config.pyfrom_env/   s   zSageMakerConfig.from_envbefore)modedatac                 C   s.   dd t j D }t|tri ||S |S )a%  Load configuration from environment variables.

        Extracts SAGEMAKER_* environment variables and merges with any provided data.
        Provided data takes precedence over environment variables.
        Unknown SAGEMAKER_* variables are ignored (only defined fields are loaded).
        c                 S   s0   i | ]\}}| tr|ttd   |qS )N)
startswithSAGEMAKER_ENV_VAR_PREFIXlenlower).0keyvalr   r   r   
<dictcomp>B   s    z6SageMakerConfig.load_from_env_vars.<locals>.<dictcomp>)osenvironitems
isinstancedict)r   r   
env_configr   r   r   load_from_env_vars8   s   

z"SageMakerConfig.load_from_env_varsvc                 C   s,   t |tr|S t |tr| dv S t|S )z/Convert string values from env vars to boolean.)true1)r(   boolstrr    r   r,   r   r   r   parse_bool_stringM   s
   

z!SageMakerConfig.parse_bool_stringc                 C   s(   t |tr|S t |trt|S t|S )z/Convert string values from env vars to integer.)r(   intr0   r1   r   r   r   parse_int_stringW   s
   

z SageMakerConfig.parse_int_string)r   r   )__name__
__module____qualname____doc__r   model_configr   r   r/   __annotations__r   r3   r   r   r0   classmethodr   r	   r   r   r+   r   r2   r4   r   r   r   r   r      s4   
 


r   c                   @      e Zd ZdZdZdZdS )SageMakerEnvVarsz%SageMaker environment variable names.CUSTOM_SCRIPT_FILENAMESAGEMAKER_MODEL_PATHN)r5   r6   r7   r8   r>   r?   r   r   r   r   r=   b       r=   c                   @   r<   )SageMakerDefaultszSageMaker default values.zmodel.pyz/opt/ml/model/N)r5   r6   r7   r8   SCRIPT_FILENAMESCRIPT_PATHr   r   r   r   rA   i   r@   rA   z2Custom script filename to load (default: model.py)r   z8SageMaker model path directory (default: /opt/ml/model/))r8   r%   typingr   r   r   pydanticr   r   r   r   r	   r   r   r=   rA   r>   rB   r?   rC   SAGEMAKER_ENV_CONFIGr   r   r   r   <module>   s"    W	