Reflex Docs
Python SDK

Types and dataclasses

Public dataclasses you'll see in SDK signatures.

Every dataclass below is exported from reflex and is frozen (immutable).

Training

@dataclass(frozen=True)
class Datum:
    observation: dict
    actions: list[list[float]]
    loss_weights: list[float] | None = None
    metadata: dict | None = None

@dataclass(frozen=True)
class AdamParams:
    learning_rate: float
    beta1: float = 0.9
    beta2: float = 0.95
    eps: float = 1e-8
    weight_decay: float = 0.0
    max_grad_norm: float | None = None

@dataclass(frozen=True)
class ForwardBackwardResult:
    loss: float | None
    metrics: dict
    raw: dict

@dataclass(frozen=True)
class OptimStepResult:
    step: int | None
    metrics: dict
    raw: dict

@dataclass(frozen=True)
class AdapterHandle:
    lora: str
    name: str
    version: str
    adapter_id: str
    raw: dict

See Training for how these flow through LoraTrainingClient.

Connectors and cameras

Used when you implement a custom robot connector, camera source, or transport.

@dataclass
class Observation:
    state: list[float]
    cameras: dict = field(default_factory=dict)
    task: str = ""
    extra: dict = field(default_factory=dict)

@dataclass
class ActionChunk:
    actions: list[list[float]]
    metadata: dict = field(default_factory=dict)

@dataclass
class InferenceRequest:
    observation: Observation
    control_step: int = 0
    extra: dict = field(default_factory=dict)

Robot execution loop

Used by reflex.run_robot_execution_loop and the embedded reflex.connect_runner API.

@dataclass(frozen=True)
class RobotExecutionConfig:
    session_id: str
    deployment_id: str
    robot_id: str
    mode: str = "dry_run"
    task: str = ""
    config_hash: str = ""
    max_steps: int = 0
    control_period_s: float = 0.02
    observe_command: str = ""
    action_command: str = ""
    safe_stop_command: str = ""
    command_timeout_s: float = 2.0
    safe_stop_timeout_s: float = 5.0
    heartbeat: Callable[[dict], None] | None = None
    heartbeat_interval_s: float = 10.0
    stop_on_error: bool = True

@dataclass(frozen=True)
class RobotExecutionResult:
    steps: int
    applied_steps: int
    safe_stops: int
    last_action_chunk: dict | None = None
    errors: list[str] = field(default_factory=list)