Medical vertical — scientific tutorial¶
Released in FCC v1.2.0. You are running controlled experiments on LLM behavior in the Medical domain. This tutorial shows how to instrument a scenario with CLEAR+ benchmarks, swap providers via the
ai_configscenario override, and measure risk-classification stability across runs.
The Medical pack in one paragraph¶
The healthcare vertical pack (at src/fcc/data/verticals/healthcare.yaml) contains 11 healthcare personas (v2.1.0) — 5 retrofitted from v1.0 plus 6 v1.2.0 additions for genomic research, clinical imaging (DICOM), telemedicine UX, population health, precision medicine strategy, and medical device software. Headline compliance frameworks: HIPAA, HL7 FHIR R5, ICD-11, IEC 62304, EU MDR, DICOM, IMDRF SaMD.
Focus persona: CIE — Clinical Imaging Engineer (DICOM)¶
We'll anchor this tutorial on CIE, because it's the one most relevant to the scientific audience in the Medical domain.
from fcc.verticals.registry import VerticalRegistry
reg = VerticalRegistry.from_builtin()
pack = reg.get("healthcare")
persona = next(p for p in pack.personas if p.id == "CIE")
print(persona.name)
print(persona.risk_category or "minimal")
riscear = persona.riscear or {}
print("Archetype:", riscear.get("archetype"))
print("Role:", riscear.get("role"))
Experiment design¶
You want to answer questions like "does swapping Anthropic for Ollama change how CIE classifies risk?" or "does LiteLLM routing add latency variance I should report?"
The v1.1.0+ ai_config scenario override lets you pin provider/model per scenario without touching the YAML:
# scenarios/healthcare_rct.yaml
scenario_id: HEA-RCT
ai_config:
provider: litellm
model: ollama/llama3.2
temperature: 0.0
max_tokens: 2000
Then run the CLEAR+ benchmark runner in --mock mode first to get a deterministic baseline:
Then swap to a real provider and compare:
fcc benchmark run --scenario HEA-RCT --output _output/benchmarks/live.json
fcc benchmark compare baseline live
Stable risk classification under model swaps¶
The AIActClassifier in FCC is deterministic — it doesn't call the LLM. But persona outputs change across providers, so downstream classifiers that inspect outputs may drift.
from fcc.compliance.classifier import AIActClassifier
classifier = AIActClassifier()
# Stable across runs because the override is data-driven, not model-driven:
risk = classifier.classify_persona(persona, vertical_domain="healthcare")
assert risk.value in {"minimal", "limited", "high", "unacceptable"}
This gives you a ground-truth label you can use as a reference in your experiments.
Verify what you did¶
Run the vertical test suite to make sure your changes didn't break anything:
All scientific-path steps in this tutorial leave your working tree unchanged — the pack YAML is read-only from your perspective. The only state that accumulates is in _output/ (scenario run traces) and docs/model-cards/ (if you regenerated cards).
Next steps¶
- Notebook 26 — Vertical packs tour — same flow in an executable notebook.
- Notebook 27 — Vertical packs deep dive — longer walkthrough of healthcare as an exemplar.
- Guidebook ch25 — Industry verticals — full authoring guide for your own pack.
- Book 3 ch11 — Vertical packs at enterprise scale — architectural view.
- Streamlit vertical_explorer — interactive browser for all 6 packs.
- Research note for healthcare — cited standards sources behind the persona selection.