Spaces:
Sleeping
Sleeping
| """Task definitions for LogSentinel v2.""" | |
| from models import DifficultyLevel, ScenarioConfig, TaskDefinition | |
| TASKS: dict = { | |
| # ------------------------------------------------------------------ | |
| # Legacy tasks (backward-compatible) | |
| # ------------------------------------------------------------------ | |
| "log_classification": TaskDefinition( | |
| name="log_classification", | |
| description=( | |
| "Classify 10 log entries by severity and type from a single source. " | |
| "Each log should be classified as: normal, warning, error, critical, or security. " | |
| "Submit a final report when done." | |
| ), | |
| difficulty="easy", | |
| max_steps=15, | |
| num_logs=10, | |
| num_sources=1, | |
| num_incidents=0, | |
| ), | |
| "incident_detection": TaskDefinition( | |
| name="incident_detection", | |
| description=( | |
| "Analyze 20 log entries from 3 different sources. Classify each log, " | |
| "detect 2 incidents by correlating related logs across sources, " | |
| "and assign correct severity (P1-P4) to each incident. " | |
| "Submit a structured incident report when done." | |
| ), | |
| difficulty="medium", | |
| max_steps=25, | |
| num_logs=20, | |
| num_sources=3, | |
| num_incidents=2, | |
| ), | |
| "full_triage": TaskDefinition( | |
| name="full_triage", | |
| description=( | |
| "Full incident triage with 30+ log entries from 5 sources including noise. " | |
| "Classify all logs, detect 3 incidents (one is a subtle security issue), " | |
| "correlate logs across sources, assign severity, recommend remediation " | |
| "for each incident, and submit a comprehensive incident report. " | |
| "Includes red herrings and ambiguous logs." | |
| ), | |
| difficulty="hard", | |
| max_steps=35, | |
| num_logs=34, | |
| num_sources=5, | |
| num_incidents=3, | |
| ), | |
| # ------------------------------------------------------------------ | |
| # Phase-2 Multi-Agent SOC War-Room tasks | |
| # ------------------------------------------------------------------ | |
| "soc_warroom_easy": TaskDefinition( | |
| name="soc_warroom_easy", | |
| description=( | |
| "Multi-agent SOC scenario: detect and triage 1 incident across 4 roles " | |
| "(incident_commander, app_sre, db_sre, security_analyst). " | |
| "Each role sees only role-relevant logs. Use handoffs and shared board to collaborate. " | |
| "Episode phases: detect → triage → mitigate → verify → final_report." | |
| ), | |
| difficulty="easy", | |
| max_steps=30, | |
| num_logs=20, | |
| num_sources=4, | |
| num_incidents=1, | |
| multi_agent=True, | |
| scenario_config=ScenarioConfig( | |
| num_incidents=1, | |
| difficulty=DifficultyLevel.EASY, | |
| attack_subtlety=0.2, | |
| observability_quality=0.95, | |
| confounding_noise_ratio=0.25, | |
| seed=100, | |
| ), | |
| ), | |
| "soc_warroom_medium": TaskDefinition( | |
| name="soc_warroom_medium", | |
| description=( | |
| "Multi-agent SOC scenario: detect and triage 2 overlapping incidents. " | |
| "Partial observability, telemetry delays, and confounding noise. " | |
| "Roles must negotiate severity and share evidence via handoffs." | |
| ), | |
| difficulty="medium", | |
| max_steps=45, | |
| num_logs=35, | |
| num_sources=5, | |
| num_incidents=2, | |
| multi_agent=True, | |
| scenario_config=ScenarioConfig( | |
| num_incidents=2, | |
| difficulty=DifficultyLevel.MEDIUM, | |
| attack_subtlety=0.5, | |
| observability_quality=0.85, | |
| confounding_noise_ratio=0.35, | |
| seed=200, | |
| ), | |
| ), | |
| "soc_warroom_hard": TaskDefinition( | |
| name="soc_warroom_hard", | |
| description=( | |
| "Multi-agent SOC scenario: 3 simultaneous incidents including a subtle APT. " | |
| "High noise, low observability quality, telemetry delays. " | |
| "Requires careful evidence collection, cross-role handoffs, and coordinated mitigation." | |
| ), | |
| difficulty="hard", | |
| max_steps=60, | |
| num_logs=50, | |
| num_sources=5, | |
| num_incidents=3, | |
| multi_agent=True, | |
| scenario_config=ScenarioConfig( | |
| num_incidents=3, | |
| difficulty=DifficultyLevel.HARD, | |
| attack_subtlety=0.8, | |
| observability_quality=0.70, | |
| confounding_noise_ratio=0.50, | |
| seed=300, | |
| ), | |
| ), | |
| "adaptive_curriculum": TaskDefinition( | |
| name="adaptive_curriculum", | |
| description=( | |
| "Adaptive difficulty task that auto-adjusts based on rolling success rate. " | |
| "Starts at easy, promotes to medium/hard when avg success > 70%, " | |
| "demotes when avg success < 35%." | |
| ), | |
| difficulty="adaptive", | |
| max_steps=45, | |
| num_logs=35, | |
| num_sources=5, | |
| num_incidents=2, | |
| multi_agent=True, | |
| scenario_config=ScenarioConfig( | |
| num_incidents=2, | |
| difficulty=DifficultyLevel.EASY, | |
| seed=None, # randomised per episode | |
| ), | |
| ), | |
| } | |
| TASK_LIST = list(TASKS.keys()) | |