summykai/chemistry-sft-ultra
Chemistry SFT Ultra Modern chemistry fine-tuning data built from multiple curated upstream datasets, merged into a single English corpus with reproducible processing and analysis. Dataset Summary This repository merges several instruction/QA-style sources into a single, cleaned, deduplicated, English-only training corpus in chat format. The final corpus contains 1,370,322 rows. Each row is: messages: a list of {role, content} message dicts (chat/SFT format)… See the full description on the dataset page: https://huggingface.co/datasets/summykai/chemistry-sft-ultra.
Chemistry SFT Ultra
Modern chemistry fine-tuning data built from multiple curated upstream datasets, merged into a single English corpus with reproducible processing and analysis.
Dataset Summary
This repository merges several instruction/QA-style sources into a single, cleaned, deduplicated, English-only training corpus in chat format.
The final corpus contains 1,370,322 rows. Each row is:
messages: a list of{role, content}message dicts (chat/SFT format)metadata: a structured dict containing provenance + task fields (and, when available, chemistry fields like SMILES)
Source Datasets
This dataset is assembled from multiple upstream sources (see metadata.source / metadata.original_source per row). The high-level intended sources include:
- SMolInstruct
- OmniChem
- MoleculeQA
- ChemRxiv-Train
- Tulu-3 SFT Mixture
- NuminaMath-CoT
- TextbookReasoning
Note: Because the dataset is merged, the most reliable “source of truth” for provenance is the per-row metadata fields.Dataset Structure
Top-level columns (verified)
Your structure analyzer notebook confirms the dataset has exactly two top-level columns:
messagesmetadata
messages schema (verified)
messages is a list of dicts with:
role(string): one ofsystem,user,assistant,tool(most rows areuser+assistant)content(string): the message text
In the sampled rows from the notebook run, conversations are typically 2 turns (p50=2, p90=2).
metadata schema (verified)
metadata is a struct with the following fields:
source(string)split(string)task(string)language(string)licence(string)chemistry(bool)cid(string)question_id(string)answer_letter(string)category(string)seq_type(string)smiles(string)original_source(string)id(string)problem(string)subject(string)reference_answer(string)
Some fields may be empty depending on which upstream source produced the row.
Example record
{
"messages": [
{"role": "user", "content": "What is the SMILES for aspirin?"},
{"role": "assistant", "content": "CC(=O)OC1=CC=CC=C1C(=O)O"}
],
"metadata": {
"source": "SMolInstruct",
"split": "train",
"task": "smiles_conversion",
"language": "en",
"licence": "MIT",
"chemistry": True,
"cid": "",
"question_id": "",
"answer_letter": "",
"category": "conversion",
"seq_type": "qa",
"smiles": "CC(=O)OC1=CC=CC=C1C(=O)O",
"original_source": "smolininstruct",
"id": "",
"problem": "",
"subject": "",
"reference_answer": ""
}
}Dataset Analysis (from your notebook runs)
From your sanity-check and schema analyzer outputs:
- Schema normalization:
messageswere normalizable in sampled rows (no schema errors observed) - Assistant supervision present: sampled rows include assistant responses
- Sequence length profile (audit sample): median in the hundreds of tokens with a small tail beyond 2048, indicating some long examples
- LoRA smoke test: successful 4-bit load + LoRA injection + a few training steps using sampled real rows
Usage
from datasets import load_dataset
ds = load_dataset("summykai/chemistry-sft-ultra", split="train")
ex = ds[0]
messages = ex["messages"]
meta = ex["metadata"]
# Example: filter for rows that provide a SMILES in metadata
smiles_rows = ds.filter(lambda x: (x["metadata"]["smiles"] is not None) and (x["metadata"]["smiles"] != ""))
# Example: filter by task
retrosynth = ds.filter(lambda x: x["metadata"]["task"] == "retrosynthesis")Considerations for Use
- This is a merged dataset; licensing is per-source. Use
metadata.licenceandmetadata.original_sourceto audit before redistribution. - Most examples are short 2-turn chat pairs, but there is a long-context tail.
- The dataset is English-focused (
language: en), but you should still validate per-row language if you require strict guarantees.
License
Because this dataset aggregates multiple upstream datasets, it does not have a single uniform license. See:
metadata.licencefor the row-level license string (when provided)metadata.original_source/metadata.sourcefor provenance
If you need a stricter story (e.g., “MIT-only”), you should filter the dataset by licence/source and publish a derived subset.
Citation
If you use this dataset in your research, cite the dataset repo:
@dataset{chemistry_sft_ultra,
title = {Chemistry SFT Ultra: A Curated Chemistry Instruction Tuning Dataset},
author = {summykai},
year = {2025},
publisher = {Hugging Face},
howpublished = {Hugging Face Datasets},
}