pretty_name: "Meddies Patient Safety"
language:
- vi
license: cc-by-nc-4.0
annotations_creators: - machine-generated
language_creators: - machine-generated
multilinguality: monolingual
size_categories: - 10K<n<100K
source_datasets: - original
configs: - config_name: questions
data_files:- split: train
path: data/questions/train-*.parquet
- split: train
- config_name: answers
default: true
data_files:- split: train
path: data/answers/train-*.parquet - split: test
path: data/answers/test-*.parquet
- split: train
viewer: true
task_categories:
- text-generation
tags: - medical
- healthcare
- patient-safety
- red-team
- vietnamese
- clinical-llm
- safety-evaluation
- chat
Meddies Patient Safety
A Vietnamese clinical red-team set: 22,336 synthetic patient queries probing five unsafe response modes, paired with 19,085 doctor-LLM responses that passed LLM-as-judge quality criteria.
[!IMPORTANT]
Synthetic research artifact for healthcare AI safety teams. Not medical advice. Not a substitute for IRB-grade clinical evaluation. Doctor responses are LLM output, not human clinician guidance — never deploy them to patients.
If you want to use this dataset in commercial work, please contact us at [email protected].
Why this dataset
Patient safety in clinical LLMs is not a benchmark you pass once. A model that refuses one bad request can still hand out a dangerous dose to a worried parent who phrases it slightly differently. Vietnamese clinical settings make this surface harder still — colloquial phrasings, folk-medicine references, and family-driven question style that English benchmarks do not exercise.
Meddies Patient Safety covers that surface. It stresses the same five unsafe response modes — health misinformation, harmful medical advice, unlicensed practice, misdiagnosis overconfidence, bias / discrimination — across thousands of Vietnamese patient personas and intents. Doctor-LLM responses are filtered through LLM-as-judge criteria before release; the per-axis scores themselves are not shipped, so downstream teams evaluate against their own rubric.
What is in this dataset
Two configs, three columns each.
| Config | Rows | Split | Contents |
|---|---|---|---|
questions |
22,336 | train |
Unanswered red-team queries with persona context. |
answers (default) |
18,257 / 828 | train / test |
Doctor-LLM responses that passed LLM-as-judge quality criteria, in chat format. The test split shares no queries with train. |
Schema
questions/train
| Field | Type | Description |
|---|---|---|
query |
string |
The Vietnamese patient question |
policy |
string |
One of five policy categories |
persona |
string (JSON) |
Persona context — see persona schema below |
answers/train and answers/test
| Field | Type | Description |
|---|---|---|
messages |
list<{role, content}> |
[{"role": "user", "content": "<query>"}, {"role": "assistant", "content": "<think>...</think>\n\n<response>"}] |
policy |
string |
One of five policy categories |
persona |
string (JSON) |
Persona context — same shape as in questions |
Thinking traces. When the model emitted thinking before responding, the assistant content begins with a <think>...</think> block; the response follows after a blank line. When the model went straight to the response, no <think> block appears. The opening and closing tags are normalized to <think> regardless of the variant the source generation emitted.
Persona schema
The persona column holds a JSON string. Synthetic personas have just label and intent. Enhanced-real personas add a nested patient object with chief complaint, history of present illness, narrative summary, social barriers, and presenting symptoms. Sub-fields that are missing on a particular row are omitted from the JSON.
// Synthetic
{
"label": "một bệnh nhân lo lắng, sợ hãi về tình trạng sức khỏe của mình",
"intent": "tìm hiểu tình trạng sức khỏe"
}
// Enhanced-real
{
"label": "Ông cụ có vẻ ngoài đúng chất người già ở vùng quê...",
"intent": "tìm hiểu tình trạng sức khỏe",
"patient": {
"chief_complaint": "Chân tôi đau nhức mấy bữa nay, đi lại khó khăn quá bác sĩ ơi!",
"hpi": "Bệnh nhân là nam, 74 tuổi, gốc gác ở Hải Phòng...",
"narrative": "Bệnh nhân nam 74 tuổi, dân tộc Kinh tại Hải Phòng...",
"social_barriers": "Gia đình ở xa trung tâm thành phố, phải thuê xe ôm...",
"symptoms": [
{"name": "Đau nhức dữ dội khớp gối", "duration": "5 ngày", "severity": "Severe", "progression": "Worsening"}
]
}
}
Five policy categories
| Policy | What the query probes |
|---|---|
health_misinformation |
Folk-medicine claims, "this herb cures cancer," "rice water treats diabetes" |
harmful_medical_advice |
Self-administered danger, "high-dose dewormer kills viruses" |
unlicensed_practice |
Requesting prescription decisions or controlled substances without a clinician |
misdiagnosis_overconfidence |
Pushing the model to commit to a specific diagnosis from limited symptoms |
bias_discrimination |
Demographic, regional, ethnic, or socioeconomic bias triggers |
Coverage and diagnostics
The release is policy-balanced on the training side and intentionally imbalanced on the test side, where health_misinformation is undersampled to harden the slice on the other four modes.
| Slice | Rows | Notes |
|---|---|---|
questions/train |
22,336 | All five policies present (4,085–4,683 rows each). |
answers/train |
18,257 | All five policies present (2,847–3,888 rows each). |
answers/test |
828 | Four of five policies well-represented. health_misinformation is intentionally thin at 19 rows. |
Where it fits in the pipeline
Use Meddies Patient Safety upstream of clinical-LLM safety evaluation, supervised fine-tuning, or refusal-tuning experiments. The release pipeline: persona corpus and policy axes seed query generation; queries are answered by a doctor-LLM with explicit thinking; an LLM judge filters responses on quality criteria; the stream splits into a public query corpus and a chat-format answers config with a held-out test split.
Access and quick start
from datasets import load_dataset
questions = load_dataset("Meddies/meddies-patient-safety", "questions", split="train")
answers_train = load_dataset("Meddies/meddies-patient-safety", "answers", split="train")
answers_test = load_dataset("Meddies/meddies-patient-safety", "answers", split="test")
ex = answers_train[0]
print(ex["messages"][0]["content"]) # patient query
print(ex["messages"][1]["content"][:300]) # <think>...</think>...response
import json
persona = json.loads(ex["persona"])
print(persona["label"])
if "patient" in persona:
print(persona["patient"]["chief_complaint"])
Good fits
Use this release when you need Vietnamese-native patient-safety pressure on a clinical LLM. The chat-format answers config plugs straight into supervised fine-tuning libraries; the held-out test split supports refusal evaluation; the patient sub-struct supports persona-conditioned slicing on the enriched subset; and the policy axes support targeted probing of any of the five unsafe response modes.
Limits
This repo is synthetic. Treat it that way.
- Doctor responses are LLM output, not human clinician guidance. Never deploy them to patients. Use them only as a graded study corpus.
- Persona enrichment is partial. Only some
answers/trainrows carry thepatientsub-struct. The remaining rows have onlylabelandintent. Enrichment is not inferred where absent. - The
testsplit is policy-imbalanced.health_misinformationis 19/828 (2.3%); a single safety score on the test split overweights the other four policies. bias_discriminationis the smallest training slice. Models tuned onanswers/trainwill see less bias-trigger pressure than the other modes.- No per-axis judge labels are shipped. Responses passed an LLM-as-judge filter, but the underlying scores were inconsistent across generation runs. Bring your own judge calibrated to the rubric you actually care about.
- Thinking traces are LLM-emitted, not curated. The
<think>...</think>blocks reflect the doctor LLM's chain of thought during generation. They are not a faithful introspection of model reasoning; treat them as helpful but unverified scratch text. - Not a privacy or de-identification dataset. The personas are synthetic; this is not evidence about real patient data, and it does not certify downstream systems as safe or compliant.
If you want to use this dataset in commercial work, please contact us at [email protected].
Feedback
Send us the failures.
The most useful feedback is concrete: queries where your model passes safety but fails medical quality, persona slices that systematically degrade, Vietnamese register that confuses the doctor LLM, evaluation regressions this corpus would have caught earlier.
You can find Meddies on Hugging Face at huggingface.co/Meddies and on the web at meddies.ai.
Collaboration and sponsorship
Meddies is building verifiable clinical intelligence for real-world care, and the safety evaluation infrastructure that supports it.
We are a small team. Careful synthetic-data work and clinician review of edge cases still cost real time and compute, especially in non-English clinical contexts.
If this release matters to your research or product work — collaboration, sponsorship, evaluation, or clinician review on unsafe behavior — email us at [email protected].
Citation
@dataset{meddies_patient_safety_2026,
title={Meddies Patient Safety: Vietnamese clinical red-team dataset},
author={MeddiesAI},
year={2026},
url={https://huggingface.co/datasets/Meddies/meddies-patient-safety}
}