Source code for protomotions.agents.supervised.config

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

"""Configuration for generic supervised rollout training."""

from dataclasses import dataclass, field
from enum import Enum
from typing import Optional

from protomotions.agents.base_agent.config import BaseAgentConfig, BaseModelConfig
from protomotions.agents.common.supervision import SupervisionLossConfig


[docs] class RolloutActor(Enum): """Policy source used to step the environment during supervised rollout collection.""" STUDENT = "student" EXPERT = "expert"
[docs] @classmethod def from_str(cls, value: str) -> "RolloutActor": try: return next( member for member in cls if member.value.lower() == value.lower() ) except StopIteration: valid = [member.value for member in cls] raise ValueError( f"'{value}' is not a valid {cls.__name__}. Valid values are: {valid}" )
[docs] @dataclass class SupervisedAgentConfig(BaseAgentConfig): """Generic supervised imitation agent configuration. Experiment files choose the rollout actor, optional external expert checkpoint, and supervised loss keys. The agent loop stays independent of the specific student model. """ _target_: str = "protomotions.agents.supervised.agent.SupervisedAgent" model: BaseModelConfig = field( default_factory=BaseModelConfig, metadata={"help": "Model configuration."}, ) expert_model_path: Optional[str] = field( default=None, metadata={"help": "Optional checkpoint for an external expert policy."}, ) rollout_actor: RolloutActor = field( default=RolloutActor.STUDENT, metadata={ "help": "Policy used for collecting rollout actions." }, ) loss: SupervisionLossConfig = field( default_factory=SupervisionLossConfig, metadata={"help": "Supervised loss over model outputs and labels."}, )