SOC-env / models.py
ApoorvaBadoni's picture
Updated models.py
566441c
# 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 SOC Incident Response Environment."""
from typing import Any, Dict, List, Literal, Optional
from openenv.core.env_server.types import Action, Observation
from pydantic import Field
SOCDecision = Literal[
"ignore", # False positive — take no action
"monitor", # Keep watching but don't act yet
"investigate", # Pull SIEM logs, review endpoint telemetry
"query_logs", # Deep SIEM query — firewall, proxy, DNS logs
"check_threat_intel", # Query VirusTotal, Shodan, MISP, Mandiant
"run_sandbox", # Detonate suspicious file in sandbox
"block_ip", # Block offending IP at perimeter firewall
"block_account", # Disable the user account
"isolate_device", # Quarantine the endpoint from network
"escalate", # Hand off to Tier-2 / Incident Commander
"request_mfa", # Force re-authentication with MFA
"patch_system", # Apply patch / remove malicious package
"collect_forensics", # Preserve evidence for forensic analysis
]
class SOCAction(Action):
"""Action taken by the SOC analyst agent."""
decision: SOCDecision = Field(
...,
description="The analyst's response decision"
)
reasoning: Optional[str] = Field(
default=None,
description="Optional free-text reasoning (used for LLM agents)"
)
class SOCObservation(Observation):
"""What the SOC analyst sees at each step."""
alert_type: str = Field(default="", description="Type of security alert")
severity: str = Field(default="low", description="Alert severity: low/medium/high/critical")
signals: List[str] = Field(default_factory=list, description="Observable threat indicators")
context: Dict[str, Any] = Field(default_factory=dict, description="Contextual info gathered so far")
available_actions: List[str] = Field(default_factory=list, description="Valid actions at this step")
phase: str = Field(default="detection", description="Incident lifecycle phase")
feedback: str = Field(default="", description="Feedback on the last action")
score: float = Field(default=0.0, description="Cumulative reward so far")
step: int = Field(default=0, description="Current step")
max_steps: int = Field(default=10, description="Max steps before done")