Sre-Validation / env /scenario.py
abdur0001's picture
feat: initial push with env and 3 tasks
5fe9036
"""
Scenario schema — shared dataclasses used by all task definitions.
"""
from dataclasses import dataclass, field
from typing import Any, Dict, List, Optional
from models import RootCauseCategory, ServiceStatus
@dataclass
class ServiceConfig:
"""Configuration for a single service in the simulated architecture."""
status: ServiceStatus
deps: List[str] = field(default_factory=list)
version: str = ""
replicas: int = 1
is_root_cause: bool = False
fault_type: Optional[str] = None
@dataclass
class RequiredFix:
"""A fix that the agent must apply to resolve the incident."""
action: str # "restart_service", "rollback_deploy", "scale_up"
service: str
target_version: Optional[str] = None
replicas: Optional[int] = None
@dataclass
class IncidentScenario:
"""
A self-contained incident scenario definition.
To create a new task, create a new Python file in tasks/ that instantiates
this dataclass and assigns it to a module-level variable named SCENARIO.
"""
task_id: str
name: str
difficulty: str # "easy", "medium", "hard"
max_steps: int
incident_summary: str
# Service architecture
services: Dict[str, ServiceConfig] = field(default_factory=dict)
# Pre-written data per service
logs: Dict[str, List[str]] = field(default_factory=dict)
metrics: Dict[str, List[Dict[str, Any]]] = field(default_factory=dict)
traces: Dict[str, List[str]] = field(default_factory=dict)
deploy_history: Dict[str, List[str]] = field(default_factory=dict)
runbooks: Dict[str, str] = field(default_factory=dict)
configs: Dict[str, Dict[str, str]] = field(default_factory=dict)
dependencies: Dict[str, List[str]] = field(default_factory=dict)
# Initial alerts
initial_alerts: List[str] = field(default_factory=list)
# Ground truth for grading
root_cause_services: List[str] = field(default_factory=list)
root_cause_categories: List[RootCauseCategory] = field(default_factory=list)
required_fixes: List[RequiredFix] = field(default_factory=list)
diagnosis_keywords: List[str] = field(default_factory=list)
# Grading weights
weights: Dict[str, float] = field(default_factory=dict)