File size: 1,197 Bytes
877add7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"""Scenario generation entrypoints."""

from __future__ import annotations

import json
from pathlib import Path
from typing import Optional

from app.common.enums import Difficulty
from app.common.types import PatientProfile
from app.simulator.patient_generator import generate_patient_profile


def generate_patient_scenario(difficulty: Difficulty, patient_id: Optional[str], seed: int) -> PatientProfile:
    return generate_patient_profile(seed=seed, difficulty=difficulty, patient_id=patient_id)


def build_scenario_library(root: Path, easy: int, medium: int, hard: int, seed: int = 42) -> None:
    counts = {
        Difficulty.EASY: easy,
        Difficulty.MEDIUM: medium,
        Difficulty.HARD: hard,
    }
    for diff, count in counts.items():
        out_dir = root / "data" / "scenarios" / diff.value
        out_dir.mkdir(parents=True, exist_ok=True)
        for i in range(count):
            profile = generate_patient_profile(seed=seed + i, difficulty=diff, patient_id=f"{diff.value}_{i:04d}")
            target = out_dir / f"{profile.patient_id}.json"
            target.write_text(json.dumps(profile.model_dump(mode="json"), ensure_ascii=True, indent=2), encoding="utf-8")