# The Training Data Generator Prompt

**For the cohort:** paste the prompt below into Claude or ChatGPT. Answer the voice DNA questions it asks. It will then generate your 100-example JSONL training set in chunks of 25.

---

## The Prompt (paste this)

```
You are helping me build a fine-tuning dataset for a brand voice model.

YOUR JOB: Generate exactly 100 high-quality training examples in JSONL format, locked to my brand's voice.

WE WORK IN 3 PHASES.

----- PHASE 1: INTERVIEW ME -----

Before generating anything, ask me these questions, one batch at a time, and wait for my answers:

Batch A (brand identity):
1. Brand name?
2. What does the brand sell? (1 sentence)
3. Who is the customer?

Batch B (voice DNA):
4. Describe the brand voice in 3-5 adjectives.
5. List 5 voice RULES (e.g., "all lowercase," "no exclamation marks," "sentence fragments dominate," "max 4 lines").
6. List 10 BANNED words or phrases (e.g., "exquisite," "introducing," "experience the," "premium," "delicious," "elevate," "unleash," "discover," "perfect," "ultimate").
7. List 10 SIGNATURE words or moves the brand uses (vocabulary, sensory specifics, cadence cues).

Batch C (samples + scope):
8. Paste 3-5 examples of on-brand copy you love (from this brand or one you want to sound like).
9. What CATEGORIES of copy do you want examples across? (e.g., product descriptions, customer emails, brew/usage guides, brand/website copy, event invitations)
10. Any tricky edge cases I should handle? (e.g., refund emails, press releases, holiday hours)

----- PHASE 2: PROPOSE A PLAN -----

Once I answer, propose:
- A distribution: how many examples per category (must sum to 100)
- 5 sample user prompts per category for my approval
- 2-3 fully-written sample assistant outputs in the voice, for me to react to

Wait for my approval before generating the full 100.

----- PHASE 3: GENERATE IN CHUNKS -----

Generate the 100 examples in 4 chunks of 25. After each chunk, stop and ask "ready for the next 25?" before continuing.

OUTPUT FORMAT (this is strict):
- One JSON object per line
- No markdown fences, no commentary between lines
- Each line must be valid JSON
- Format exactly:
{"messages": [{"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]}

QUALITY RULES (must hold for EVERY line, no exceptions):
- Assistant outputs follow ALL voice rules from Phase 1
- Zero banned words appear in assistant outputs
- User prompts are realistic things a marketing team would actually ask for
- No two user prompts are the same or near-duplicates
- Vary assistant length naturally (some 2 lines, some 4) but never exceed the line limit
- Variety inside each category (different products, different scenarios, different specifics)

Before each chunk, do a 5-second self-check: "Did I use any banned words? Did I break voice in any line?" If yes, regenerate that line.

Start with Phase 1.
```

---

## How To Use It (Cohort Instructions)

1. **Paste the prompt** into Claude (recommended — better at voice consistency) or ChatGPT
2. **Answer the interview honestly.** The output is only as good as the voice DNA you provide. If you can't articulate a voice, generation is going to drift.
3. **Approve or push back on the plan** before letting it generate. Push back is healthier than approve. If the sample outputs don't sound right, fix them now — not after 100 examples.
4. **Save each chunk to a `.jsonl` file** as it generates. Don't wait for all 100, you'll lose them in scroll.
5. **Sanity-check before training:**
   - Paste 5 random lines into a JSON validator (e.g., jsonlint.com) — every line must parse
   - Search the file for any of your banned words — should be zero hits
   - Read 10 random assistant outputs aloud. If even 1 breaks voice, send it back: *"line 47 broke the rule about exclamation marks, regenerate it"*

---

## Why It's Structured This Way

| Choice | Why |
|---|---|
| Interview first | Skips the #1 failure mode — a generic dataset because the user didn't articulate the voice |
| Banned-words list | Models are biased toward marketing tropes. Explicit bans break the bias. |
| Sample outputs before bulk | Catches voice drift in 2 examples before it happens in 100 |
| Chunks of 25 | Both Claude and ChatGPT hit output token limits around 30-40 JSON examples. Chunking is the only reliable path to 100. |
| Self-check between chunks | The model's own attention drifts after 20+ lines. A forced self-check catches drift before it compounds. |
| Strict JSONL format spec | Fireworks (and OpenAI-style training APIs) reject any line that isn't valid JSON. One broken line breaks the upload. |
