A dataset is a promise

8 min readArticle
A dataset is a promise

What you put in a fine-tuning dataset is what you are promising the model will become. Formats, realistic sizes, and how to read the quality report before you waste a single epoch on messy data.

Nobody's fine-tune failed because they picked the wrong dropout. Plenty failed because their dataset was twenty near-identical samples and one forty-thousand-character novella. This is the short, opinionated version of what we learned building the Dataset block and its quality report — and the mental model that keeps it all straight: a dataset is a promise. Every sample tells the model “answer like this.” If the samples disagree with each other, or with what you actually want, the model will faithfully keep that broken promise.

Three formats, three intentions

  • Chat{"messages":[{"role":"user","content":"..."},{"role":"assistant","content":"..."}]}. The recommended default. Only the assistant turns are trained, so the model learns answers, not questions.
  • Prompt / completion{"prompt":"...","completion":"..."}. For transformation tasks: fix this text, classify this, expand this abbreviation.
  • Free text{"text":"..."} or any plain line. For style transfer on raw writing. No structure is imposed; consistency is entirely your job.

The format is not a technicality — it decides what kind of promise you are making. Chat samples teach a model how to respond to someone. Prompt/completion teaches it how to perform a specific transformation. Free text teaches it how to sound. Mixed carelessly in one dataset, they blur into a promise the model cannot keep, which is why the quality report shows the format mix before you train.

How big? Smaller than you think

The internet implies you need thousands of samples. With LoRA, that is simply not true. Twenty to a few hundred well-chosen samples can move tone and format dramatically — that is the entire appeal of the method. Our demo dataset is thirty-six chat samples of a fictional internet provider's support agent, and by the end of training the model signed every reply with the same sign-off and answered in the same clipped, friendly voice. What matters is not volume. Consistency: samples that agree about who is talking. Coverage: the situations you want handled. Honesty: replies that represent what you actually want, not what you wish you said.

Reading the quality report

Press Check quality and the report gives you the facts; four of them deserve your first look.

  • Duplicates — the fastest route to a model that says one thing, perfectly, always. Deduplicate before training.
  • Length histogram — samples beyond maxlen get truncated. If your data lives at the far end of the chart, raise maxlen or split the samples.
  • Language mix — detected languages, Persian and emoji included. A surprise language usually means a paste error.
  • Format mix — what parsed as chat, what as prompt/completion, what fell back to free text. Silent fallbacks are where training surprises come from.

The eval split: keep a promise to yourself

Set eval_pct between 10 and 20, and the cleanest samples become your evidence. The comparison screen measures perplexity on data the model never trained on, which is the only honest way to know the tune took. Zero eval split sounds tempting — more data! — but it leaves you trusting a feeling. The whole point of the exercise is replacing feelings with numbers, and this is the cheapest number on the menu.

One rule if you remember nothing else: every sample in the dataset should be an answer you would accept from the finished model. If you would not, it does not belong in the file.
#datasets#quality#guide