# 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.
