hypernoa-astrum / models.py
ABNaidu's picture
Upload folder using huggingface_hub
73ba12d verified
"""Action and Observation types for the Astrum environment (OpenEnv compatible)."""
from __future__ import annotations
from typing import Any, Dict, List
from pydantic import Field
try:
from openenv.core.env_server.types import Action, Observation
except ImportError:
from pydantic import BaseModel
class Action(BaseModel):
metadata: dict = Field(default_factory=dict)
class Observation(BaseModel):
done: bool = False
reward: float | None = None
metadata: dict = Field(default_factory=dict)
class AstrumAction(Action):
"""High-level command issued by the agent."""
action_type: str = Field(
...,
description=(
"allocate_resources | resolve_conflict | enforce_rule | "
"adapt_policy | investigate | self_restrain | noop"
),
)
params: Dict[str, Any] = Field(
default_factory=dict,
description="Action parameters interpreted by the environment.",
)
class AstrumObservation(Observation):
"""Aggregated view of the world state and reward breakdown."""
message: str = Field("", description="Human-readable summary of the last step.")
episode_id: str = Field("", description="Opaque episode identifier.")
step_count: int = Field(0, description="Steps taken so far.")
stakeholders: Dict[str, Dict[str, Any]] = Field(
default_factory=dict,
description="Per-stakeholder view: {id: {satisfaction, influence, values_profile}}.",
)
resources: Dict[str, float] = Field(
default_factory=dict,
description="Available shared resources: {resource_name: amount}.",
)
active_conflicts: List[Dict[str, Any]] = Field(
default_factory=list,
description="Currently unresolved conflicts between stakeholders.",
)
rules: List[str] = Field(
default_factory=list,
description="Active rules and constraints the agent must respect.",
)
alerts: List[str] = Field(
default_factory=list,
description="Events and signals from the current step.",
)
alignment_traps_exposed: int = Field(
0, description="Count of alignment traps the agent has encountered so far.",
)
reward_breakdown: Dict[str, float] = Field(
default_factory=dict,
description="Named components: effectiveness, fairness, alignment, adaptability.",
)