import json
from pathlib import Path
from typing import Any
DATA_DIR = Path(__file__).resolve().parent.parent / "data"
def load_attack_samples() -> dict[str, Any]:
with open(DATA_DIR / "attack_samples.json", encoding="utf-8") as f:
return json.load(f)
def load_fake_secrets() -> dict[str, Any]:
with open(DATA_DIR / "fake_secrets.json", encoding="utf-8") as f:
return json.load(f)
def get_scenario(scenario_id: str) -> dict[str, Any] | None:
samples = load_attack_samples()
return samples.get(scenario_id)
def get_sample(scenario_id: str, sample_id: str) -> dict[str, Any] | None:
scenario = get_scenario(scenario_id)
if not scenario:
return None
for sample in scenario.get("samples", []):
if sample["id"] == sample_id:
return sample
return None
def resolve_attack_meta(scenario_id: str, sample_id: str | None) -> dict[str, Any]:
scenario = get_scenario(scenario_id) or {}
meta: dict[str, Any] = {
"scenario": scenario_id,
"scenario_name": scenario.get("name", scenario_id),
"sample_id": sample_id,
"sample_name": None,
"intent": None,
"expected_consequences": [],
}
if sample_id:
sample = get_sample(scenario_id, sample_id)
if sample:
meta["sample_name"] = sample.get("name")
meta["intent"] = sample.get("intent")
meta["expected_consequences"] = sample.get("consequences", [])
return meta