Source code for protomotions.agents.supervised.masked_mimic_config

# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

"""MaskedMimic configs for the generic supervised agent."""

from dataclasses import dataclass, field
from enum import Enum
from protomotions.agents.base_agent.config import BaseModelConfig, OptimizerConfig
from protomotions.agents.common.config import ModuleContainerConfig
from protomotions.agents.common.supervision import SupervisionLossConfig
from protomotions.agents.supervised.config import SupervisedAgentConfig


[docs] @dataclass class KLDScheduleConfig: """KL coefficient schedule for the MaskedMimic VAE posterior loss.""" init_kld_coeff: float = field( default=0.0001, metadata={"help": "Initial KL divergence coefficient.", "min": 0.0}, ) end_kld_coeff: float = field( default=0.01, metadata={"help": "Final KL divergence coefficient.", "min": 0.0}, ) start_epoch: int = field( default=3000, metadata={"help": "Epoch to start KL coefficient annealing.", "min": 0}, ) end_epoch: int = field( default=6000, metadata={"help": "Epoch to end KL coefficient annealing.", "min": 0}, )
[docs] class VAENoiseType(Enum): """Noise distribution used for MaskedMimic latent sampling.""" NORMAL = "normal" UNIFORM = "uniform" ZEROS = "zeros"
[docs] @classmethod def from_str(cls, value: str) -> "VAENoiseType": """Create enum from a case-insensitive string.""" try: return next( member for member in cls if member.value.lower() == value.lower() ) except StopIteration: raise ValueError( f"'{value}' is not a valid {cls.__name__}. " f"Valid values are: {[e.value for e in cls]}" )
[docs] @dataclass class MaskedMimicVAEConfig: """VAE settings for the MaskedMimic learned-prior student.""" kld_schedule: KLDScheduleConfig = field( default_factory=KLDScheduleConfig, metadata={"help": "KL divergence annealing schedule."}, ) vae_latent_dim: int = field( default=64, metadata={"help": "Dimension of VAE latent space.", "min": 1}, ) vae_noise_type: VAENoiseType = field( default=VAENoiseType.NORMAL, metadata={"help": "Type of latent noise: normal, uniform, or zeros."}, )
[docs] @dataclass class MaskedMimicModelConfig(BaseModelConfig): """MaskedMimic VAE learned-prior model configuration.""" _target_: str = "protomotions.agents.supervised.masked_mimic_model.MaskedMimicModel" encoder: ModuleContainerConfig = field( default_factory=ModuleContainerConfig, metadata={"help": "Privileged encoder network."}, ) prior: ModuleContainerConfig = field( default_factory=ModuleContainerConfig, metadata={"help": "Deployable prior network."}, ) trunk: ModuleContainerConfig = field( default_factory=ModuleContainerConfig, metadata={"help": "Latent-to-action decoder trunk."}, ) vae: MaskedMimicVAEConfig = field( default_factory=MaskedMimicVAEConfig, metadata={"help": "MaskedMimic VAE settings."}, ) optimizer: OptimizerConfig = field( default_factory=lambda: OptimizerConfig(lr=2e-5), metadata={"help": "Optimizer settings for supervised training."}, )
[docs] @dataclass class MaskedMimicSupervisedAgentConfig(SupervisedAgentConfig): """MaskedMimic preset for ``SupervisedAgent``. The training loop is generic supervised imitation. The student is the MaskedMimic VAE learned-prior model, and the default supervision target is the privileged action produced by that model. """ model: MaskedMimicModelConfig = field( default_factory=MaskedMimicModelConfig, metadata={"help": "MaskedMimic model configuration."}, ) loss: SupervisionLossConfig = field( default_factory=lambda: SupervisionLossConfig( prediction_key="privileged_action", target_key="expert_actions", log_prefix="masked_mimic", ), metadata={"help": "Supervision loss over MaskedMimic outputs."}, )