Module: FT03 — Base Model Selection Diagram count: 5 Tool: Mermaid (primary). Each diagram validated in Mermaid Live Editor.
Type: Weighted dimensions Purpose: The rubric itself. Five dimensions, weighted by use case, not ranked. Reading the diagram: Each dimension is a bar; the height is its typical weight. The annotation makes the point that the weights shift — a phone assistant weights hardware near 1.0; a HIPAA bot weights openness near 1.0.
flowchart LR
subgraph Rubric["THE FIVE-DIMENSION RUBRIC — weights shift by use case"]
direction LR
T["1. TASK\nCan the base already\nproduce the behavior?"]
H["2. HARDWARE\nCan you afford to load,\ntrain, serve it? (FT01)"]
L["3. LICENSE\nDoes the license permit\nyour deployment?"]
O["4. OPENNESS\nCan you audit what\nit saw? (FT02)"]
E["5. ECOSYSTEM\nDoes the toolchain\nsupport this base?"]
end
T -.sets capability floor.-> H
H -.sets size ceiling.-> L
L -.gate.-> O
O -.gate.-> E
style T fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style H fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style L fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style O fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style E fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
Type: Decision tree Purpose: Walk a use case through the five dimensions in order. Each gate can veto. Reading the diagram: Top-down. Task sets the floor; hardware sets the ceiling; license and openness are gates; ecosystem is the friction coefficient. A fail at any gate sends you back to re-shortlist.
flowchart TD
Start["New use case"]
Start --> Task{"1. TASK\nBase, with a perfect prompt,\ncould produce the behavior?"}
Task -->|"No — wrong kind of answer"| Rebase["Capability ceiling\n-> graduate to larger base\nor different family"]
Task -->|"Yes, unreliably / wrong format"| HW{"2. HARDWARE\nFits train + serve VRAM?\n(FT01 math)"}
HW -->|"No"| Rebase
HW -->|"Yes"| Lic{"3. LICENSE\nPermits deployment?\n(commercial / gov / HIPAA)"}
Lic -->|"No"| Rebase
Lic -->|"Yes"| Open{"4. OPENNESS\nAuditable required?\n(open-data vs open-weights, FT02)"}
Open -->|"Required, base fails"| Rebase
Open -->|"Not required OR base passes"| Eco{"5. ECOSYSTEM\nFirst-class transformers / TRL /\nUnsloth / vLLM support?"}
Eco -->|"Poor — high integration tax"| Rebase
Eco -->|"Good"| Pick["SELECT base"]
Rebase --> Task
style Start fill:#14141f,stroke:rgba(255,255,255,0.12),color:#e4e4e8
style Pick fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style Rebase fill:#14141f,stroke:rgba(240,168,104,0.6),color:#f0a868
style Task fill:#08080c,stroke:rgba(94,234,212,0.4),color:#e4e4e8
style HW fill:#08080c,stroke:rgba(94,234,212,0.4),color:#e4e4e8
style Lic fill:#08080c,stroke:rgba(94,234,212,0.4),color:#e4e4e8
style Open fill:#08080c,stroke:rgba(94,234,212,0.4),color:#e4e4e8
style Eco fill:#08080c,stroke:rgba(94,234,212,0.4),color:#e4e4e8
Type: 2D placement Purpose: Map the major families on two axes that matter for fine-tuning: parameter size (x) and openness (y). Reading the diagram: Left = smaller/faster (teaching, edge). Right = larger (production reasoning). Bottom = open-weights-only. Top = open-data. The open-data top-left quadrant is where the course lives.
flowchart LR
subgraph OD["OPEN-DATA (auditable — FT02)"]
Smol["SmolLM3 · OLMo · Tülu\n(fully open, reproducibility)"]
MCPM["MiniCPM5-1B / 3B / V 4.6 / o 4.5\ncourse default · Apache-2.0"]
end
subgraph OW["OPEN-WEIGHTS-ONLY"]
Mix["Mistral / Mixtral (MoE)\nDolphin home turf"]
Qwen["Qwen 2.5 / 3\nproduction workhorse"]
Llama["Llama 3.x / 3.2 / 3.3\ndominant ablation target"]
DS["DeepSeek V3 / R1 / R1-distills\nreasoning distillation"]
end
Smol -.small.-> MCPM
MCPM -.-> Mix
Mix -.-> Qwen
Qwen -.larger.-> Llama
Llama -.-> DS
style OD fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style OW fill:#14141f,stroke:rgba(255,255,255,0.12),color:#9494a0
style Smol fill:#08080c,stroke:rgba(94,234,212,0.5),color:#e4e4e8
style MCPM fill:#08080c,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style Mix fill:#08080c,stroke:rgba(255,255,255,0.12),color:#9494a0
style Qwen fill:#08080c,stroke:rgba(255,255,255,0.12),color:#9494a0
style Llama fill:#08080c,stroke:rgba(255,255,255,0.12),color:#9494a0
style DS fill:#08080c,stroke:rgba(255,255,255,0.12),color:#9494a0
Type: Decision flowchart Purpose: Decide which checkpoint to start fine-tuning from. Reading the diagram: Three branches. Default = instruct. Base when you build from scratch. Chat when you preserve alignment and steer narrowly.
flowchart TD
Start["You have chosen a base family"]
Start --> Q{"What do you want to steer?"}
Q -->|"Build instruction-following\nfrom a clean slate"| Base["BASE checkpoint\nraw pretrained weights\n-> your own SFT from scratch"]
Q -->|"Steer format / behavior\non top of working\ninstruction-following"| Instruct["INSTRUCT checkpoint\nbase + SFT pass\n-> DEFAULT for most work"]
Q -->|"Preserve existing chat alignment,\nsteer a narrow behavior\n(e.g. remove refusal)"| Chat["CHAT checkpoint\ninstruct + RLHF/DPO\n-> abliteration path (FT17)"]
style Start fill:#14141f,stroke:rgba(255,255,255,0.12),color:#e4e4e8
style Base fill:#14141f,stroke:rgba(94,234,212,0.5),color:#e4e4e8
style Instruct fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style Chat fill:#14141f,stroke:rgba(94,234,212,0.5),color:#e4e4e8
style Q fill:#08080c,stroke:rgba(94,234,212,0.4),color:#e4e4e8
Type: Progression Purpose: Why the course starts at 1B and the signals that tell you to graduate. Reading the diagram: Left to right. Start at MiniCPM5-1B for iteration speed. Graduate only when a signal fires — never just "because bigger."
flowchart LR
On["MiniCPM5-1B\n~1.08B · Apache-2.0 · open-data\niteration speed: minutes per LoRA"]
On -->|validate pipeline| Sig{"Graduation signal?"}
Sig -->|"Base, perfect prompt,\nproduces wrong KIND\nof answer"| Cap["Capability ceiling\n-> MiniCPM5-3B/4B or Qwen 3-7B"]
Sig -->|"Hard reasoning floor\nmisses before FT"| Cap
Sig -->|"Tokenizer / context\nmismatch for domain"| Cap
Sig -->|"None — task steers fine"| Stay["STAY on 1B\nship the adapter"]
Cap --> Prod["Production base\n~7-14B (Qwen3, R1-distill)\niteration speed: hours per LoRA"]
style On fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style Stay fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style Cap fill:#14141f,stroke:rgba(240,168,104,0.6),color:#f0a868
style Prod fill:#14141f,stroke:rgba(240,168,104,0.6),color:#f0a868
style Sig fill:#08080c,stroke:rgba(94,234,212,0.4),color:#e4e4e8
#14141f panel fill, #5eead4 accent for primary, rgba(255,255,255,0.12) for secondary borders, rgba(94,234,212,0.4) for decision nodes, #f0a868 (--warn) for graduation/re-base signals, #e4e4e8 / #9494a0 for text.flowchart, subgraph) supported in current Mermaid (v10.4+).# Diagrams — Module FT03: Base Model Selection
**Module**: FT03 — Base Model Selection
**Diagram count**: 5
**Tool**: Mermaid (primary). Each diagram validated in [Mermaid Live Editor](https://mermaid.live).
---
## Diagram 1 — The Five-Dimension Selection Rubric
**Type**: Weighted dimensions
**Purpose**: The rubric itself. Five dimensions, weighted by use case, not ranked.
**Reading the diagram**: Each dimension is a bar; the height is its *typical* weight. The annotation makes the point that the weights shift — a phone assistant weights hardware near 1.0; a HIPAA bot weights openness near 1.0.
```mermaid
flowchart LR
subgraph Rubric["THE FIVE-DIMENSION RUBRIC — weights shift by use case"]
direction LR
T["1. TASK\nCan the base already\nproduce the behavior?"]
H["2. HARDWARE\nCan you afford to load,\ntrain, serve it? (FT01)"]
L["3. LICENSE\nDoes the license permit\nyour deployment?"]
O["4. OPENNESS\nCan you audit what\nit saw? (FT02)"]
E["5. ECOSYSTEM\nDoes the toolchain\nsupport this base?"]
end
T -.sets capability floor.-> H
H -.sets size ceiling.-> L
L -.gate.-> O
O -.gate.-> E
style T fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style H fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style L fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style O fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style E fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
```
---
## Diagram 2 — The Base Selection Decision Tree
**Type**: Decision tree
**Purpose**: Walk a use case through the five dimensions in order. Each gate can veto.
**Reading the diagram**: Top-down. Task sets the floor; hardware sets the ceiling; license and openness are gates; ecosystem is the friction coefficient. A fail at any gate sends you back to re-shortlist.
```mermaid
flowchart TD
Start["New use case"]
Start --> Task{"1. TASK\nBase, with a perfect prompt,\ncould produce the behavior?"}
Task -->|"No — wrong kind of answer"| Rebase["Capability ceiling\n-> graduate to larger base\nor different family"]
Task -->|"Yes, unreliably / wrong format"| HW{"2. HARDWARE\nFits train + serve VRAM?\n(FT01 math)"}
HW -->|"No"| Rebase
HW -->|"Yes"| Lic{"3. LICENSE\nPermits deployment?\n(commercial / gov / HIPAA)"}
Lic -->|"No"| Rebase
Lic -->|"Yes"| Open{"4. OPENNESS\nAuditable required?\n(open-data vs open-weights, FT02)"}
Open -->|"Required, base fails"| Rebase
Open -->|"Not required OR base passes"| Eco{"5. ECOSYSTEM\nFirst-class transformers / TRL /\nUnsloth / vLLM support?"}
Eco -->|"Poor — high integration tax"| Rebase
Eco -->|"Good"| Pick["SELECT base"]
Rebase --> Task
style Start fill:#14141f,stroke:rgba(255,255,255,0.12),color:#e4e4e8
style Pick fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style Rebase fill:#14141f,stroke:rgba(240,168,104,0.6),color:#f0a868
style Task fill:#08080c,stroke:rgba(94,234,212,0.4),color:#e4e4e8
style HW fill:#08080c,stroke:rgba(94,234,212,0.4),color:#e4e4e8
style Lic fill:#08080c,stroke:rgba(94,234,212,0.4),color:#e4e4e8
style Open fill:#08080c,stroke:rgba(94,234,212,0.4),color:#e4e4e8
style Eco fill:#08080c,stroke:rgba(94,234,212,0.4),color:#e4e4e8
```
---
## Diagram 3 — Base Families on the Size × Openness Grid
**Type**: 2D placement
**Purpose**: Map the major families on two axes that matter for fine-tuning: parameter size (x) and openness (y).
**Reading the diagram**: Left = smaller/faster (teaching, edge). Right = larger (production reasoning). Bottom = open-weights-only. Top = open-data. The open-data top-left quadrant is where the course lives.
```mermaid
flowchart LR
subgraph OD["OPEN-DATA (auditable — FT02)"]
Smol["SmolLM3 · OLMo · Tülu\n(fully open, reproducibility)"]
MCPM["MiniCPM5-1B / 3B / V 4.6 / o 4.5\ncourse default · Apache-2.0"]
end
subgraph OW["OPEN-WEIGHTS-ONLY"]
Mix["Mistral / Mixtral (MoE)\nDolphin home turf"]
Qwen["Qwen 2.5 / 3\nproduction workhorse"]
Llama["Llama 3.x / 3.2 / 3.3\ndominant ablation target"]
DS["DeepSeek V3 / R1 / R1-distills\nreasoning distillation"]
end
Smol -.small.-> MCPM
MCPM -.-> Mix
Mix -.-> Qwen
Qwen -.larger.-> Llama
Llama -.-> DS
style OD fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style OW fill:#14141f,stroke:rgba(255,255,255,0.12),color:#9494a0
style Smol fill:#08080c,stroke:rgba(94,234,212,0.5),color:#e4e4e8
style MCPM fill:#08080c,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style Mix fill:#08080c,stroke:rgba(255,255,255,0.12),color:#9494a0
style Qwen fill:#08080c,stroke:rgba(255,255,255,0.12),color:#9494a0
style Llama fill:#08080c,stroke:rgba(255,255,255,0.12),color:#9494a0
style DS fill:#08080c,stroke:rgba(255,255,255,0.12),color:#9494a0
```
---
## Diagram 4 — Base vs Instruct vs Chat: Where to Start
**Type**: Decision flowchart
**Purpose**: Decide which checkpoint to start fine-tuning from.
**Reading the diagram**: Three branches. Default = instruct. Base when you build from scratch. Chat when you preserve alignment and steer narrowly.
```mermaid
flowchart TD
Start["You have chosen a base family"]
Start --> Q{"What do you want to steer?"}
Q -->|"Build instruction-following\nfrom a clean slate"| Base["BASE checkpoint\nraw pretrained weights\n-> your own SFT from scratch"]
Q -->|"Steer format / behavior\non top of working\ninstruction-following"| Instruct["INSTRUCT checkpoint\nbase + SFT pass\n-> DEFAULT for most work"]
Q -->|"Preserve existing chat alignment,\nsteer a narrow behavior\n(e.g. remove refusal)"| Chat["CHAT checkpoint\ninstruct + RLHF/DPO\n-> abliteration path (FT17)"]
style Start fill:#14141f,stroke:rgba(255,255,255,0.12),color:#e4e4e8
style Base fill:#14141f,stroke:rgba(94,234,212,0.5),color:#e4e4e8
style Instruct fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style Chat fill:#14141f,stroke:rgba(94,234,212,0.5),color:#e4e4e8
style Q fill:#08080c,stroke:rgba(94,234,212,0.4),color:#e4e4e8
```
---
## Diagram 5 — The On-Ramp: MiniCPM5-1B to Graduation
**Type**: Progression
**Purpose**: Why the course starts at 1B and the signals that tell you to graduate.
**Reading the diagram**: Left to right. Start at MiniCPM5-1B for iteration speed. Graduate only when a signal fires — never just "because bigger."
```mermaid
flowchart LR
On["MiniCPM5-1B\n~1.08B · Apache-2.0 · open-data\niteration speed: minutes per LoRA"]
On -->|validate pipeline| Sig{"Graduation signal?"}
Sig -->|"Base, perfect prompt,\nproduces wrong KIND\nof answer"| Cap["Capability ceiling\n-> MiniCPM5-3B/4B or Qwen 3-7B"]
Sig -->|"Hard reasoning floor\nmisses before FT"| Cap
Sig -->|"Tokenizer / context\nmismatch for domain"| Cap
Sig -->|"None — task steers fine"| Stay["STAY on 1B\nship the adapter"]
Cap --> Prod["Production base\n~7-14B (Qwen3, R1-distill)\niteration speed: hours per LoRA"]
style On fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style Stay fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#e4e4e8
style Cap fill:#14141f,stroke:rgba(240,168,104,0.6),color:#f0a868
style Prod fill:#14141f,stroke:rgba(240,168,104,0.6),color:#f0a868
style Sig fill:#08080c,stroke:rgba(94,234,212,0.4),color:#e4e4e8
```
---
## Validation notes
- All five diagrams use the course design system colors: `#14141f` panel fill, `#5eead4` accent for primary, `rgba(255,255,255,0.12)` for secondary borders, `rgba(94,234,212,0.4)` for decision nodes, `#f0a868` (`--warn`) for graduation/re-base signals, `#e4e4e8` / `#9494a0` for text.
- Paste each into [Mermaid Live Editor](https://mermaid.live) to render. All use stable Mermaid syntax (`flowchart`, `subgraph`) supported in current Mermaid (v10.4+).
- For the slide deck (artifact 03), these are rendered as static captures from Mermaid Live, inlined into reveal.js.