11 KiB
Opus Candid V3 — Training Methodology
Background
Opus Candid is a series of conversational fine-tunes designed to produce AI that communicates like a thoughtful person — direct, opinionated when warranted, and calibrated to match response depth with question complexity. The models are distilled from Claude Opus 4.6 onto open-weight Qwen architectures.
V3 is the third generation, built from the ground up to address specific failure modes observed in V1 and V2.1.
Failure Analysis: Why V3 Was Necessary
V1 (8B)
Had personality but produced monotone output. The model would maintain a consistent tone regardless of context — the same analytical voice whether someone asked about cooking dinner or processing grief. The training data lacked register diversity.
V2.1 (27B Dense)
Significantly better personality transfer, but stress testing revealed three critical issues:
-
Degenerate repetition loops. The model would restate the same point 2–4 times in different words within a single response. Root cause: a 22:1 verbose-to-brief training ratio. The model learned that longer responses were the default and had no examples of when to stop.
-
Uniform response length. 88% of training conversations were medium length (6–10 turns). The model had almost no examples of tight 2–4 turn exchanges or extended 20+ turn deep dives. Every conversation converged to the same depth regardless of topic weight.
-
Factual hallucination under pressure. In adversarial exchanges, the model would fabricate specifics (NATO treaty articles, geopolitical scenarios) rather than acknowledge uncertainty. The adversarial training data was too sparse and too combative — the model learned to fight rather than to hold a position honestly.
V3 Design: The 4D Training Tensor
V3 treats the training dataset as a 4-dimensional space. Every conversation sits at a specific coordinate across four axes, and the distribution across each axis follows real-world frequency patterns.
Dimension 1: Topic Distribution (Zipf-weighted, s ≈ 0.7)
25 topics distributed across 5 frequency tiers, weighted by how often these topics actually come up in human conversation.
Research basis:
- Pew Research Center (2024): 69% of people discuss personal life regularly, 46% work, 44% pop culture, declining through politics and religion at 20%.
- OpenAI/NBER study (2025): 80% of ChatGPT usage is practical guidance, information seeking, and writing assistance. Coding represents only 4.2%.
- Academic conversation research: Hobbies rank #1 in casual conversation, followed by family and travel. 60% of conversations are self-referential.
- Zipf's law: Confirmed at the pragmatic/utterance level in dialogue corpora, not just word frequency.
The Zipf exponent (s ≈ 0.7) was chosen to be slightly flatter than pure Zipf (s = 1.0) to ensure lower-frequency topics still have enough examples for the model to learn from, while maintaining the heavy-head distribution that matches reality.
| Tier | Topics | Share | Examples |
|---|---|---|---|
| 1 (Daily) | 5 topics | 47.9% | Personal life, work, food, entertainment, relationships |
| 2 (Weekly) | 5 topics | 26.8% | Family, health, money, tech help, home |
| 3 (Regular) | 5 topics | 12.5% | Hobbies, travel, shopping, pets, weather |
| 4 (Less Common) | 5 topics | 7.5% | Education, career, cars, mental health, current events |
| 5 (Occasional) | 5 topics | 3.2% | Legal, identity/culture, science, philosophy, creative writing |
Dimension 2: Response Length
The target distribution deliberately overweights tight responses relative to what users might expect, because the V2.1 failure was caused by underweighting them.
| Length | Turns | Target | Actual |
|---|---|---|---|
| Tight | 2–4 | 40% | 42.0% |
| Medium | 6–10 | 35% | 33.4% |
| Deep | 12–18 | 20% | 19.5% |
| Extended | 20+ | 5% | 5.2% |
The tight-to-medium ratio is the single most important number in the dataset. V2.1's 88% medium distribution taught the model that every question deserved 6–10 turns of exploration. V3's 42% tight teaches the model that most questions deserve a direct answer and maybe one follow-up.
Dimension 3: Psychological Register
| Register | Target | Actual |
|---|---|---|
| Neutral/Analytical | 40% | 40.6% |
| Engaged/Conversational | 30% | 28.7% |
| Emotionally Loaded | 25% | 22.3% |
| Adversarial/Correction | 5% | 7.8% |
The adversarial percentage was deliberately kept low. V2.1's edge cases at 10–12% produced a model that was gratuitously combative. 5–8% teaches the model to hold positions firmly when warranted without making disagreement its default mode.
Dimension 4: Conversational Position
- Opening exchanges: 15%
- Mid-thread continuation: 50%
- Follow-up/clarification: 20%
- Wrap-up/conclusion: 15%
This ensures the model learns how to start, sustain, redirect, and conclude conversations — not just respond to isolated prompts.
Demographic Overlay
Layered on top of the topic distribution, not as a separate axis. Each conversation is written from the perspective of a specific demographic to ensure the model can adjust its communication style naturally.
| Demographic | Code | Target | Actual | Purpose |
|---|---|---|---|---|
| Young Adults (18–35) | YA | 40% | 40.4% | Tech-literate, casual tone, primary user base |
| Working Adults (30–55) | WA | 15% | 17.3% | Professional context, practical needs |
| Parents | P | 20% | 19.1% | Child-related, time-constrained, practical |
| Elders (60+) | E | 10% | 11.3% | Treated with dignity, not condescension |
| Bilingual (EN/ES) | B | 10% | 8.1% | Code-switching, same analytical voice in both languages |
| Adversarial/Edge | ADV | 5% | 3.7% | Disagreements, corrections, pushback |
The bilingual conversations specifically maintain the same personality in Spanish. Only the human side uses colloquial language, Spanglish, and code-switching. The model's Spanish responses keep the same analytical, direct voice as its English responses.
Anti-Sycophancy Enforcement
Applied at the data level during generation, not as a post-processing filter.
Banned patterns:
- "Great question!" / "That's a great question"
- "Absolutely!" as a conversation opener
- "I'd be happy to help with that"
- Any opening that validates the question before answering it
Replacement strategy: Sycophantic openers were replaced with natural conversational entries — "Yeah,", "Right,", "Makes sense.", "Look,", "So", "Honestly," — chosen to match the register of each conversation.
22 sycophancy instances were caught and replaced in the final audit pass.
Response Length Variance Injection
The audit pipeline flagged 252 conversations (20.7%) where assistant response lengths were suspiciously uniform within a conversation. The detector measured coefficient of variation in word counts across all assistant turns — conversations where every response was roughly the same length were flagged.
Fix: ~30% of mid-conversation assistant turns in flagged conversations were trimmed to 1–2 sentences. This teaches the model that not every turn in a conversation needs to be the same depth. A good conversationalist gives a long answer when the question warrants it and a short one when it doesn't, even within the same conversation.
Post-fix: uniform conversations dropped from 20.7% to 5.2%.
Generation Strategy
Hand-generated (free): 1,136 conversations
All tight (2–4 turn) and medium (6–10 turn) conversations were generated directly by Claude Opus 4.6 in large batches, organized by topic. 25 batches total, one per topic, generated in descending weight order.
Additionally, 219 deep (12–18 turn) conversations were hand-generated for the top 10 topics (batches 1–10) to provide high-quality anchor examples.
API-generated: 153 conversations
Deep conversations for topics 11–25 and all extended (20+) conversations were generated via the Anthropic API using Claude Opus 4.6 (claude-opus-4-6).
5 API keys running in parallel via ThreadPoolExecutor. Each conversation saved individually for crash safety. Total API spend: ~$10 of $50 budget.
Quality Audit
A 9-check automated audit pipeline scanned the full dataset:
- Sycophancy detection — scanned for "Great question", "Absolutely!", etc.
- Filler phrase detection — "In today's world", "It's worth noting", etc.
- Internal repetition — duplicate sentences within responses
- Response length uniformity — flagged conversations with low variance in response lengths
- Turn count validation — ensured conversations matched their length label
- Opener diversity — checked for over-represented first words/phrases
- Metadata integrity — valid topic, demographic, register codes
- Demographic authenticity — bilingual conversations must contain Spanish
- Bilingual quality — Spanish responses maintain analytical voice
Issues Found and Fixed
- 22 sycophantic openers replaced
- 14 mislabeled medium conversations (2–4 turns) relabeled to tight
- 28 fake bilingual conversations (tagged B but no Spanish) relabeled to YA
- 252 uniform response length conversations fixed via variance injection
- "That's" opener at 8.2% frequency — diversified ~50% to alternatives
Final Dataset Statistics
| Metric | Value |
|---|---|
| Total conversations | 1,508 |
| Total turns | 14,891 |
| Average turns per conversation | 9.9 |
| Estimated tokens | ~619,000 |
| File size | 3.9 MB |
| Format | ShareGPT JSON (ChatML template) |
Response Word Count Distribution
| Metric | Words |
|---|---|
| Mean | 46 |
| Median | 41 |
| P10 | 14 |
| P90 | 83 |
Training Configuration
All three models use the same dataset and the same general approach, adapted for model size.
| Parameter | 8B | 27B Dense | MoE (30B-A3B) |
|---|---|---|---|
| Base Model | Qwen/Qwen3-8B | Qwen/Qwen3.5-27B | Qwen/Qwen3-30B-A3B |
| Method | LoRA + rsLoRA | LoRA + rsLoRA | LoRA + rsLoRA |
| Rank | 64 | 32 | 32 |
| Epochs | 3 | 2 | 2 |
| Batch Size | 2 | 1 | 1 |
| Grad Accumulation | 8 | 16 | 16 |
| Effective Batch | 16 | 16 | 16 |
| Learning Rate | 2e-4 | 2e-4 | 1e-4 |
| Warmup | 5% | 5% | 8% |
| Precision | bf16 | bf16 | bf16 |
| Attention | SDPA | SDPA | SDPA |
| Optimizer | AdamW | AdamW | AdamW |
MoE-specific: Gate, router, and shared expert gate modules are excluded from LoRA adaptation. The routing logic learned during pre-training is preserved; only the expert FFN and attention layers receive fine-tuning.
Why not DoRA: DoRA (Weight-Decomposed Low-Rank Adaptation) was the original plan and was used successfully in V2.1. However, newer versions of the PEFT library introduced a bug where DoRA's magnitude vector gets stuck on the meta device during training with gradient checkpointing. Standard LoRA with rsLoRA (rank-stabilized scaling) and higher rank compensates effectively.
Hardware
All training runs on NVIDIA A100 SXM 80GB via RunPod.
Opus Candid V3 — March 2026 Built by Verdugie