weijianzhg/email-triage-action-seed
Email Triage Action Seed A small, fully-synthetic seed dataset for fine-tuning small (3–5B) language models on action-oriented email triage — classifying an inbox message into a category, priority, and the actionable decision a triage assistant should take. The schema goes beyond classification: it asks the model to choose what to do with each email, not just what bucket it falls into. Schema Every row is one labelled email with five core fields: Field… See the full description on the dataset page: https://huggingface.co/datasets/weijianzhg/email-triage-action-seed.
Email Triage Action Seed
A small, fully-synthetic seed dataset for fine-tuning small (3–5B) language models on action-oriented email triage — classifying an inbox message into a category, priority, and the actionable decision a triage assistant should take.
The schema goes beyond classification: it asks the model to choose what to do with each email, not just what bucket it falls into.
Schema
Every row is one labelled email with five core fields:
Plus source_round (provenance: which generation batch the row came from).
Why this exists
No public email dataset I could find carries action labels — most existing email datasets are spam/ham, phishing/safe, or multi-class category. Real triage requires a downstream decision (reply this? forward this? flag this for follow-up?), and getting that signal into training data normally requires hand-labelling.
This dataset is action-aware by construction: each row was generated by Claude Opus 4.6 with a target (category, priority, action) triple, so the labels are tight by design. It's intended as a seed that downstream users combine with their own (heuristically-labelled or human-labelled) email data.
Source & methodology
All 3,905 rows were generated synthetically using Claude Opus 4.6 via OpenRouter, prompted to produce realistic emails for a target (category, priority, action) triple. Generation was done across 10 (category, action) cells with a target of ~500 rows per cell (some cells were generated in two rounds).
No human emails appear in this dataset. No PII, no public-corpus content. Every email is freshly generated.
The full pipeline that produced this data — including the prompts, the validation logic, and how to combine this seed with public email datasets to build a full training set — is open source.
Usage
Direct SFT (OpenAI-style messages format)
from datasets import load_dataset
ds = load_dataset("weijianzhg/email-triage-action-seed", split="train")
def to_messages(row):
return {
"messages": [
{"role": "system", "content": "You are an email triage assistant..."},
{"role": "user", "content": f"Subject: {row['subject']}\nBody: {row['body']}"},
{"role": "assistant", "content": json.dumps({
"category": row["category"],
"priority": row["priority"],
"action": row["action"],
})},
]
}
sft_ds = ds.map(to_messages)A pre-formatted messages.jsonl file is also provided in this repo for convenience.
Combine with public sources for a larger training set
This is a seed, not a full dataset. To build a production-scale email-triage fine-tune, combine it with mapped versions of public email datasets such as:
- SetFit/enron_spam — spam/ham
- zefang-liu/phishing-email-dataset — phishing/safe
- imnim/multiclass-email-classification — multi-class categories
- Dc-4nderson/email-importance — important/not-important
The recipe (label-mapping rules, dedup, stratified split, content filters, generation prompts) is in the companion repo: email-data-processing (link to be added).
Splits
This release contains a single train split. Downstream users are expected to make their own splits, typically combined with other source data.
Action distribution
The synthetic generation deliberately targeted under-represented (category, action) cells, so the action distribution is more balanced than what comes out of mapping public datasets:
Exact counts vary slightly by generation round.
Limitations & honest caveats
- All synthetic. Single LLM (Claude Opus 4.6) generated every row. Stylistic homogeneity is real — a model trained on this alone will pick up Claude's writing patterns. Combine with real-email sources.
- English only. No multilingual coverage.
- Modern professional context. The synthetic emails skew toward white-collar SaaS-era patterns. Domains like personal correspondence, transactional retail, or legal/medical are underrepresented.
- Labels are author-defined, not consensus. A given email could plausibly map to multiple
(category, priority, action)triples. The label is the one the generation prompt requested, not a post-hoc judgement. - Small. 3,905 rows is a seed, not a full training corpus. Don't fine-tune on this alone and expect production quality.
License
Apache 2.0. Generated by Claude Opus 4.6 via OpenRouter; published under permissive terms.
If you train a model on this data, attribution to this dataset is appreciated but not required.
Citation
@misc{email_triage_action_seed,
author = {Weijian Zhang},
title = {Email Triage Action Seed},
year = {2026},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/datasets/weijianzhg/email-triage-action-seed}},
note = {Synthetic email triage dataset generated by Claude Opus 4.6},
}