RapidOrc121's picture
Upload folder using huggingface_hub
db43ea1 verified
Raw
History Blame Contribute Delete
2.58 kB
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
"""
Data models for the Incident Response Env Environment.
The incident_response_env environment is a simple test environment that echoes back messages.
"""
from openenv.core.env_server.types import Action, Observation, State
from pydantic import Field
from typing import Dict, Any, List, Literal, Optional
Role = Literal["attacker", "defender"]
class IncidentResponseAction(Action):
"""Action for the Duel environment - an attack or defense command."""
command: str = Field(
...,
description="Action chosen by the agent (e.g., 'ATTACK: PHISH' or 'DEFEND: MFA')",
)
role: Role = Field(
"defender",
description="Role of the agent (attacker or defender)",
)
class IncidentResponseObservation(Observation):
"""Observation from the Duel environment - prompt for the next actor."""
prompt: str = Field(default="", description="The text prompt presented to the agent")
health: float = Field(default=1.0, description="Current health of the system")
status: str = Field(default="STABLE", description="Status of the system")
next_role: str = Field(
default="attacker",
description="The role that must act next (attacker, defender, or done)",
)
done: bool = Field(default=False, description="Whether the episode is complete")
reward: float = Field(default=0.0, description="Reward for the last action")
history: List[Dict[str, Any]] = Field(
default_factory=list,
description="Turn-by-turn history: attacker/defender moves and breach outcome",
)
breached: Optional[bool] = Field(
default=None,
description="Whether the last defender resolution resulted in a breach",
)
damage: Optional[float] = Field(
default=None,
description="Damage applied to health on the last resolution (if any)",
)
last_attack: Optional[str] = Field(default=None, description="Last resolved attack move")
last_defense: Optional[str] = Field(default=None, description="Last resolved defense move")
metadata: Dict[str, Any] = Field(default_factory=dict, description="Additional context and metrics")
class IncidentResponseState(State):
episode_id: str = ""
step_count: int = 0
health: float = 1.0
status: str = "STABLE"
scenario_id: str = ""
history: List[tuple] = Field(default_factory=list)