Fine-Tune Training Data Builder (BYO Key)

Generate JSONL training pairs for fine-tuning your own LLM

Describe your task and desired behaviour and the tool calls your own OpenAI or Anthropic key to generate diverse prompt/completion pairs, formatted as OpenAI chat fine-tuning JSONL. Fully client-side — your key stays in your browser. It runs free in your browser on Gera Tools, with nothing uploaded.

Last updated Source: Gera Tools

What JSONL format does it produce?

It follows OpenAI's chat fine-tuning schema — one JSON object per line with a messages array containing optional system, user, and assistant turns. You can paste it into a .jsonl file and upload it to the OpenAI fine-tuning API.

Fine-tuning lives or dies on its dataset, and assembling one by hand is slow. This tool bootstraps a dataset — describe the behaviour you want to teach and it generates diverse prompt/completion pairs formatted as OpenAI chat fine-tuning JSONL, using your own OpenAI or Anthropic key, entirely in your browser.

How it works

Choose a provider and model, paste your API key, describe the task, and optionally add a reference example, a system prompt for the eventual fine-tuned model, and the number of pairs you want. The tool asks the model to produce diverse, realistic examples — varying phrasing, length, and edge cases — and to return strict JSON. The response is parsed and shape-checked in the browser, then assembled into JSONL where each line is {"messages":[{system},{user},{assistant}]}. It is one direct request to the provider.

For Anthropic, the request includes the official direct-browser-access header so it works straight from the page.

The JSONL format explained

OpenAI’s chat fine-tuning format expects one JSON object per line. Each object has a single key, messages, containing an array of message turns. A typical training pair looks like this (conceptually):

{"messages": [
  {"role": "system", "content": "You are a helpful customer support agent for..."},
  {"role": "user", "content": "How do I reset my password?"},
  {"role": "assistant", "content": "To reset your password, go to..."}
]}

The system turn is optional but strongly recommended: it teaches the model the persona and constraints it should apply at inference time. If you will always call the fine-tuned model with a specific system prompt, include that exact text here so the training data matches the production call.

What makes a good synthetic dataset

Diversity of phrasing is the most important property. If every “user” turn asks the same question with the same words, the fine-tuned model learns to respond to that exact phrasing and fails on paraphrases. The tool instructs the model to vary sentence structure, vocabulary, and question format across examples.

Difficulty spread. Include easy, direct questions alongside ambiguous or edge-case ones. A dataset with only clean examples produces a model that works well on clean inputs and fails on anything slightly unusual.

Coverage of your error cases. If you know your base model makes a specific mistake — over-hedging, wrong format, missing a key piece of information — include pairs that show the correct behaviour in exactly those situations.

Building a real dataset

  • Reference examples anchor the style — even one good pair raises quality sharply.
  • System prompt is baked into every JSONL line so training matches how you will actually call the model.
  • Batch and curate — generate small batches, delete the weak pairs, and stack the good ones.

Tips

  • Always read every pair before training; synthetic data introduces subtle errors that fine-tuning will faithfully memorise.
  • Mix in real, hand-written examples for the cases that matter most.
  • Keep the system prompt here identical to the one you will use at inference time, or the fine-tune will be mismatched.
  • Do not treat output count as a proxy for quality — twenty well-reviewed pairs outperform two hundred unreviewed synthetic ones in most fine-tuning experiments.