Deep-Dive: FTDD-02 — OLMo 2/3 + Tülu 3 (Ai2) Diagram count: 4 Tool: Mermaid (primary). Each diagram validated in Mermaid Live Editor.
Type: Linear pipeline Purpose: The single most important diagram in this deep-dive. Shows Tülu 3's three-stage post-training pipeline (SFT → DPO → RLVR) and maps each stage to the FT00 steering stack layer. This is what "open post-training recipe" looks like as a flow. Reading the diagram: Top = the OLMo base (Layer 1). Each downward step is a Layer-3 steer. The right column names the FT module that teaches each stage. Everything is released — data, code, configs.
flowchart TB
BASE["OLMO BASE MODEL\n(Layer 1 — pretrained weights)\nopen weights + data + code"]
SFT["[1] SFT — Supervised Fine-Tuning\non curated instruction data\n(format, instruction-following)"]
DPO["[2] DPO — Direct Preference Optimization\non preference pairs\n(preference alignment)"]
RLVR["[3] RLVR — Reinforcement Learning\non Verifiable Rewards\n(reasoning: math, code, logic)"]
RESULT["TÜLU 3 INSTRUCT MODEL\n(full post-training recipe, released)"]
BASE --> SFT --> DPO --> RLVR --> RESULT
style BASE fill:#14141f,stroke:rgba(255,255,255,0.12),color:#9494a0
style SFT fill:#14141f,stroke:rgba(94,234,212,0.6),color:#e4e4e8
style DPO fill:#14141f,stroke:rgba(94,234,212,0.6),color:#e4e4e8
style RLVR fill:#14141f,stroke:rgba(94,234,212,0.6),color:#e4e4e8
style RESULT fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#5eead4
Type: Branching from a shared base Purpose: Show why OLMo 3's base/instruct/think release is a pedagogical gift — the same base, three steers, directly comparable. Each variant is the base plus a Layer-3 steer (or none). Reading the diagram: Center = the shared OLMo 3 base. Three branches = the three variants. Each branch annotates what was added. Contrast with MiniCPM, whose variants differ by modality, not by steer.
flowchart TB
BASE["OLMO 3 BASE\n7B / 32B\n(Layer 1 — pretrained)"]
V1["base variant\n(no post-training)\n= Layer 1 only"]
V2["instruct variant\n+ SFT + DPO\n= Layer 3 (format + preference)"]
V3["think variant\n+ RLVR\n= Layer 3 (+ reasoning)"]
BASE --> V1
BASE --> V2
BASE --> V3
style BASE fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#5eead4
style V1 fill:#14141f,stroke:rgba(255,255,255,0.12),color:#9494a0
style V2 fill:#14141f,stroke:rgba(94,234,212,0.6),color:#e4e4e8
style V3 fill:#14141f,stroke:rgba(94,234,212,0.6),color:#e4e4e8
Type: Stack of components Purpose: Visualize what "fully-open" (the FT02 open-recipe tier, strictest end) actually delivers. Five components, each enabling a distinct property. This is the diagram that justifies why OLMo/Tülu satisfy air-gap/regulated requirements. Reading the diagram: Bottom = weights (the minimum). Each layer above adds a component. The right column names the property each component enables. Drop any layer and the property it enables is lost.
flowchart TB
W["WEIGHTS\nthe trained tensors"]
D["+ DATA\nthe actual training corpus"]
C["+ CODE\nthe training scripts & configs"]
K["+ CHECKPOINTS\nintermediate training states"]
E["+ EVAL\nthe evaluation suite"]
W --> D --> C --> K --> E
P1["use the model"]
P2["audit what it saw"]
P3["reproduce the run"]
P4["study training dynamics"]
P5["verify the benchmarks"]
W -.-> P1
D -.-> P2
C -.-> P3
K -.-> P4
E -.-> P5
style W fill:#14141f,stroke:rgba(255,255,255,0.12),color:#9494a0
style D fill:#14141f,stroke:rgba(94,234,212,0.5),color:#e4e4e8
style C fill:#14141f,stroke:rgba(94,234,212,0.6),color:#e4e4e8
style K fill:#14141f,stroke:rgba(94,234,212,0.6),color:#e4e4e8
style E fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#5eead4
style P1 fill:#08080c,stroke:rgba(255,255,255,0.08),color:#9494a0
style P2 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style P3 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style P4 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style P5 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
Type: Side-by-side comparison Purpose: The decision diagram for choosing between the two open families. Both are open-data/open-recipe, but their centers of gravity differ: MiniCPM is product/edge, OLMo/Tülu is research/audit. Reading the diagram: Left = OpenBMB/MiniCPM. Right = Ai2/OLMo+Tülu. The rows compare orientation, sizes, variants, and default use case. The summary line captures the heuristic.
flowchart LR
subgraph OPENBMB["OPENBMB / MiniCPM"]
O1["ORIENTATION: product / edge"]
O2["SIZES: 1B–4B + multimodal"]
O3["VARIANTS: modality axis\n(text / vision / omni)"]
O4["USE: ship a small model\non edge hardware"]
O1 --> O2 --> O3 --> O4
end
subgraph AI2["AI2 / OLMo + TÜLU"]
A1["ORIENTATION: research"]
A2["SIZES: 7B–405B, text-focused"]
A3["VARIANTS: steer axis\n(base / instruct / think)"]
A4["USE: reproduce, audit,\nresearch the stack"]
A1 --> A2 --> A3 --> A4
end
SUMMARY["SUMMARY:\nMiniCPM is what you SHIP.\nOLMo/Tülu is what you STUDY."]
OPENBMB --> SUMMARY
AI2 --> SUMMARY
style OPENBMB fill:#14141f,stroke:rgba(94,234,212,0.5),color:#e4e4e8
style AI2 fill:#14141f,stroke:rgba(94,234,212,0.5),color:#e4e4e8
style SUMMARY fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#5eead4
style O1 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style O2 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style O3 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style O4 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style A1 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style A2 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style A3 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style A4 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
#14141f panel fill, #5eead4 accent for primary, rgba(255,255,255,0.12) for secondary borders, #e4e4e8 / #9494a0 for text. The base variant and the weights component are deliberately dimmed (secondary border) to mark them as the un-steered / minimum tiers.flowchart TB/LR, subgraph) supported in current Mermaid (v10.4+).# Diagrams — Deep-Dive FTDD-02: OLMo 2/3 + Tülu 3 (Ai2)
**Deep-Dive**: FTDD-02 — OLMo 2/3 + Tülu 3 (Ai2)
**Diagram count**: 4
**Tool**: Mermaid (primary). Each diagram validated in [Mermaid Live Editor](https://mermaid.live).
---
## Diagram 1 — The Tülu 3 Post-Training Pipeline (three stages)
**Type**: Linear pipeline
**Purpose**: The single most important diagram in this deep-dive. Shows Tülu 3's three-stage post-training pipeline (SFT → DPO → RLVR) and maps each stage to the FT00 steering stack layer. This is what "open post-training recipe" looks like as a flow.
**Reading the diagram**: Top = the OLMo base (Layer 1). Each downward step is a Layer-3 steer. The right column names the FT module that teaches each stage. Everything is released — data, code, configs.
```mermaid
flowchart TB
BASE["OLMO BASE MODEL\n(Layer 1 — pretrained weights)\nopen weights + data + code"]
SFT["[1] SFT — Supervised Fine-Tuning\non curated instruction data\n(format, instruction-following)"]
DPO["[2] DPO — Direct Preference Optimization\non preference pairs\n(preference alignment)"]
RLVR["[3] RLVR — Reinforcement Learning\non Verifiable Rewards\n(reasoning: math, code, logic)"]
RESULT["TÜLU 3 INSTRUCT MODEL\n(full post-training recipe, released)"]
BASE --> SFT --> DPO --> RLVR --> RESULT
style BASE fill:#14141f,stroke:rgba(255,255,255,0.12),color:#9494a0
style SFT fill:#14141f,stroke:rgba(94,234,212,0.6),color:#e4e4e8
style DPO fill:#14141f,stroke:rgba(94,234,212,0.6),color:#e4e4e8
style RLVR fill:#14141f,stroke:rgba(94,234,212,0.6),color:#e4e4e8
style RESULT fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#5eead4
```
---
## Diagram 2 — OLMo 3's Three Variants (the steer axis)
**Type**: Branching from a shared base
**Purpose**: Show why OLMo 3's base/instruct/think release is a pedagogical gift — the same base, three steers, directly comparable. Each variant is the base plus a Layer-3 steer (or none).
**Reading the diagram**: Center = the shared OLMo 3 base. Three branches = the three variants. Each branch annotates what was added. Contrast with MiniCPM, whose variants differ by *modality*, not by *steer*.
```mermaid
flowchart TB
BASE["OLMO 3 BASE\n7B / 32B\n(Layer 1 — pretrained)"]
V1["base variant\n(no post-training)\n= Layer 1 only"]
V2["instruct variant\n+ SFT + DPO\n= Layer 3 (format + preference)"]
V3["think variant\n+ RLVR\n= Layer 3 (+ reasoning)"]
BASE --> V1
BASE --> V2
BASE --> V3
style BASE fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#5eead4
style V1 fill:#14141f,stroke:rgba(255,255,255,0.12),color:#9494a0
style V2 fill:#14141f,stroke:rgba(94,234,212,0.6),color:#e4e4e8
style V3 fill:#14141f,stroke:rgba(94,234,212,0.6),color:#e4e4e8
```
---
## Diagram 3 — Fully-Open: What You Get (the five components)
**Type**: Stack of components
**Purpose**: Visualize what "fully-open" (the FT02 open-recipe tier, strictest end) actually delivers. Five components, each enabling a distinct property. This is the diagram that justifies why OLMo/Tülu satisfy air-gap/regulated requirements.
**Reading the diagram**: Bottom = weights (the minimum). Each layer above adds a component. The right column names the property each component enables. Drop any layer and the property it enables is lost.
```mermaid
flowchart TB
W["WEIGHTS\nthe trained tensors"]
D["+ DATA\nthe actual training corpus"]
C["+ CODE\nthe training scripts & configs"]
K["+ CHECKPOINTS\nintermediate training states"]
E["+ EVAL\nthe evaluation suite"]
W --> D --> C --> K --> E
P1["use the model"]
P2["audit what it saw"]
P3["reproduce the run"]
P4["study training dynamics"]
P5["verify the benchmarks"]
W -.-> P1
D -.-> P2
C -.-> P3
K -.-> P4
E -.-> P5
style W fill:#14141f,stroke:rgba(255,255,255,0.12),color:#9494a0
style D fill:#14141f,stroke:rgba(94,234,212,0.5),color:#e4e4e8
style C fill:#14141f,stroke:rgba(94,234,212,0.6),color:#e4e4e8
style K fill:#14141f,stroke:rgba(94,234,212,0.6),color:#e4e4e8
style E fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#5eead4
style P1 fill:#08080c,stroke:rgba(255,255,255,0.08),color:#9494a0
style P2 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style P3 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style P4 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style P5 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
```
---
## Diagram 4 — OpenBMB vs Ai2 (two open philosophies)
**Type**: Side-by-side comparison
**Purpose**: The decision diagram for choosing between the two open families. Both are open-data/open-recipe, but their centers of gravity differ: MiniCPM is product/edge, OLMo/Tülu is research/audit.
**Reading the diagram**: Left = OpenBMB/MiniCPM. Right = Ai2/OLMo+Tülu. The rows compare orientation, sizes, variants, and default use case. The summary line captures the heuristic.
```mermaid
flowchart LR
subgraph OPENBMB["OPENBMB / MiniCPM"]
O1["ORIENTATION: product / edge"]
O2["SIZES: 1B–4B + multimodal"]
O3["VARIANTS: modality axis\n(text / vision / omni)"]
O4["USE: ship a small model\non edge hardware"]
O1 --> O2 --> O3 --> O4
end
subgraph AI2["AI2 / OLMo + TÜLU"]
A1["ORIENTATION: research"]
A2["SIZES: 7B–405B, text-focused"]
A3["VARIANTS: steer axis\n(base / instruct / think)"]
A4["USE: reproduce, audit,\nresearch the stack"]
A1 --> A2 --> A3 --> A4
end
SUMMARY["SUMMARY:\nMiniCPM is what you SHIP.\nOLMo/Tülu is what you STUDY."]
OPENBMB --> SUMMARY
AI2 --> SUMMARY
style OPENBMB fill:#14141f,stroke:rgba(94,234,212,0.5),color:#e4e4e8
style AI2 fill:#14141f,stroke:rgba(94,234,212,0.5),color:#e4e4e8
style SUMMARY fill:#14141f,stroke:#5eead4,stroke-width:1.5px,color:#5eead4
style O1 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style O2 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style O3 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style O4 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style A1 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style A2 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style A3 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
style A4 fill:#08080c,stroke:rgba(94,234,212,0.3),color:#e4e4e8
```
---
## Validation notes
- All four diagrams use the course design system colors: `#14141f` panel fill, `#5eead4` accent for primary, `rgba(255,255,255,0.12)` for secondary borders, `#e4e4e8` / `#9494a0` for text. The `base` variant and the `weights` component are deliberately dimmed (secondary border) to mark them as the un-steered / minimum tiers.
- Paste each into [Mermaid Live Editor](https://mermaid.live) to render. All use stable Mermaid syntax (`flowchart TB/LR`, `subgraph`) supported in current Mermaid (v10.4+).
- For the slide deck (artifact 03), these are rendered as static SVG/PNG captures from Mermaid Live, inlined into reveal.js.