CoolFace
Datasetpublic

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.

sourceHugging Faceapache-2.0updated 5mo agoView on Hugging Face
0likes99downloads
Dataset Card

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:

FieldAllowed values
subjectEmail subject (string, may be empty for some sources)
bodyEmail body (string, 50–4000 chars)
categorymeeting_request, customer_support, finance, travel, newsletter, promotion, spam, phishing, system_update, personal, unknown
priorityurgent, high, medium, low
actionreply, forward, archive, flag, mark_read, ignore

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)

python
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:

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:

actionrows
reply~1,400
forward~700
flag~700
ignore~700
mark_read(small)
archive(small)

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},
}