# Timmy Adapter Manifest
# Only version adapters, never base models. Base models are reproducible downloads.
# Adapters are the diff. The manifest is the record.

bases:
  hermes3-8b-4bit:
    source: mlx-community/Hermes-3-Llama-3.1-8B-4bit
    local: ~/models/Hermes-3-Llama-3.1-8B-4bit
    arch: llama3
    params: 8B
    quant: 4-bit MLX

  hermes4-14b-4bit:
    source: mlx-community/Hermes-4-14B-4bit
    local: ~/models/hermes4-14b-mlx
    arch: qwen3
    params: 14.8B
    quant: 4-bit MLX

adapters:
  timmy-v0:
    base: hermes3-8b-4bit
    date: 2026-03-24
    status: retired
    data: 1154 sessions (technical only, no crisis/pastoral)
    training: { lr: 2e-6, rank: 8, iters: 1000, best_iter: 800, val_loss: 2.134 }
    eval: { identity: PASS, sovereignty: PASS, coding: PASS, crisis: FAIL, faith: FAIL }
    notes: "First adapter. Crisis fails — data was 99% technical. Sacred rule: REJECTED."

  timmy-v0-nan-run1:
    base: hermes3-8b-4bit
    date: 2026-03-24
    status: rejected
    notes: "NaN at iter 70. lr=1e-5 too high for 4-bit. Dead on arrival."

  timmy-v0.1:
    base: hermes3-8b-4bit
    date: 2026-03-25
    status: retired
    data: 1203 train / 135 valid (enriched with 49 crisis/faith synthetic)
    training: { lr: 5e-6, rank: 8, iters: 600, val_loss: 2.026 }
    eval: { identity: PASS, sovereignty: PASS, coding: PASS, crisis: PARTIAL, faith: FAIL }
    notes: "Crisis partial — mentions seeking help but no 988/gospel. Rank 8 can't override base priors."

  timmy-v0.2:
    base: hermes3-8b-4bit
    date: 2026-03-25
    status: rejected
    data: 1214 train / 141 valid (12 targeted crisis/faith examples, 5x duplicated)
    training: { lr: 5e-6, rank: 16, iters: 800 }
    eval: "NaN at iter 100. Rank 16 + lr 5e-6 unstable on 4-bit."
    notes: "Dead. Halve lr when doubling rank."

  # NEXT
  timmy-v1.0:
    base: hermes4-14b-4bit
    date: 2026-03-26
    status: rejected
    data: 1125 train / 126 valid (same curated set, reused from 8B — NOT re-tokenized)
    training: { lr: 1e-6, rank: 16, iters: 800 }
    eval: "Val NaN iter 100, train NaN iter 160. Dead."
    notes: "Data was pre-truncated for Llama3 tokenizer, not Qwen3. Must re-run clean_data.py with 14B tokenizer before v1.1."
