Ornith-9B-CORTEX-GGUF

Ornith-1.5-9B with the CORTEX protocol fine-tuned into the weights (QLoRA → merged → GGUF Q4_K_M), built per docs/CUSTOM-MODEL-BUILD-PLAN.md in Johnny5b/portable-ai-runner.

Files:

  • Ornith-9B-CORTEX-v3-Q4_K_M.gguf — current, recommended (5.63 GB, sha256 ca2803a2b9510e3d4cb5a51e5e244e8d616c5ec8d1df7193005364834a7d7b93). Passes the full behavior bar: model-emitted patch applied by the harness, no fallback, correct §S:REPAIR state (see evidence below). Trained on the v3 corpus: identity examples + in-scope Q&A for the expanded knowledge-vault domains + repair-patch completion.
  • Ornith-9B-CORTEX-v2-Q4_K_M.gguf — v2 (5.6 GB), kept for provenance. Passed the same behavior bar with the §S:AWAKE state nit.
  • Ornith-9B-CORTEX-Q4_K_M.gguf — v1 (5.6 GB), kept for provenance. Learned the trace header + RST scaffold but not patch-JSON emission.

Upstream: ornith-ai/Ornith-1.5-9B, MIT license. Attribution: Ornith-1.5 by ornith-ai.

Speed

GPU (A10G-large 24 GB, llama.cpp server-cuda, -ngl 99, ctx 2048, max_tokens 512):

Model Gen tok/s Job
Base Ornith-1.5-9B Q4_K_M 76.60 / 76.71 6aad81ec51992417dfcc794a
v1 CORTEX Q4_K_M 77.18 / 77.20 6ab0994751992417dfcce80f
v2 CORTEX Q4_K_M 77.19 / 77.16 6ab0b80c52d0dbd7f1d773b1

v3 CPU same-box A/B (cpu-upgrade, llama-bench b11175, -p 29 -n 64 -r 1; GPU flavors were unavailable at verify time, absolute numbers are contention-dominated — read the RELATIVE column):

Model pp29 t/s tg64 t/s Job
v2 CORTEX Q4_K_M 3.01 0.27 6ab5ee1652d0dbd7f1d8e12e
v3 CORTEX Q4_K_M 1.95 0.30 6ab5ee1652d0dbd7f1d8e12e

Generation throughput parity confirmed (0.27 vs 0.30 — v3 ≥ v2). The pp29 gap is single-rep noise on a heavily contended box (the same box measured v2 at 2.58 pp29 an hour earlier, and v3 at 18.16 pp29 on its conversion load-gate). Structurally the files are identical for compute: same architecture, 427 tensors, same quant types, both 5.23 GiB. Behavioral corroboration: the v3 trial generated its full protocol answer in 411 s vs v2's 810.7 s on the same flavor.

Live trial evidence chain (scripts/cortex_live_trial.py, CPU)

Run Gen cap Patch extractor Model output Gate carried by Job
v1 @ stock harness 300 stock header + RST ✓, patch JSON never emitted AST fallback 6ab09ef851992417dfcce887
v2 @ stock harness 300 stock truncated preamble (budget) AST fallback 6ab0b80c51992417dfcceac4
v2 corrected harness 800 fixed full protocol + valid patch JSON model patch ✓ 6ab0c48f51992417dfccebaf
v3 corrected harness 800 fixed full protocol, correct §S:REPAIR, valid patch JSON model patch ✓ 6ab5e36a52d0dbd7f1d8df53

The v3 run verbatim (2026-09-25):

[TRACE: §R:§EVO_AST:PYGGI | §T:repair_run | §S:REPAIR]
Diagnosis: the function divides by len(nums) with no empty-input guard, so avg([]) raises
ZeroDivisionError instead of ValueError.
{"find": "    return sum(nums) / len(nums)", "replace": "    if not nums:\n        raise ValueError('empty input')\n    return sum(nums) / len(nums)"}
===== REPAIR - model patch applied =====
===== REPAIR - pytest gate =====  3 passed in 0.01s
TRIAL PASSED   TRIAL_EXIT_CODE=0

v3 fixes v2's residual state nit (§S:REPAIR is now emitted, not §S:AWAKE) and completes the protocol in half the generation time (411 s vs 810.7 s).

The two harness fixes (required for the corrected-harness runs)

  1. Generation cap 300 → 800 in chat() — the stock cap was sized for a non-reasoning 0.6B; a reasoning-style 9B spends >300 tokens thinking and the patch JSON never emits (measured, twice).
  2. Patch extractor — parse the last line starting with {, no .replace("'", '"') quote mangling (it broke valid patches containing ValueError('empty input')).

A ready-to-run patcher that applies exactly these two fixes (byte-verified, with backup and audit-ledger line) ships at tools/apply_harness_fixes.py in Johnny5b/cortex-knowledge-vault.

Training

  • Adapter v3 (Johnny5b/Ornith-9B-CORTEX-LoRA-v3): same QLoRA recipe as v2 (r=16, α=32, TRL 1.13.0, 2 epochs, lr 2e-4 cosine, eff. batch 8, bf16/nf4) on the 404-example v3 corpus. 102/102 steps, final train_loss 0.434, token accuracy 0.917. Jobs: train 6ab355f252d0dbd7f1d825ad, merge/quant 6ab5db5e6b030d633f69024c, publish 6ab5f11052d0dbd7f1d8e1b4.
  • Adapters v2 / v1: see the LoRA-v2 / LoRA repos for their recipes (identical except corpus).
  • Data: Johnny5b/cortex-sft-300 — data/cortex_sft.jsonl (v1: 304), data/cortex_sft_v2.jsonl (v2: 356), data/cortex_sft_v3.jsonl (v3: 404 = v2 + identity block + vault-domain Q&A). Anti-contamination invariant held: no example contains the trial's avg fixture — the trial remains a transfer test.
  • Dashboard: ornith-9b-cortex-qlora-v3-trackio.

GGUF conversion note (qwen35 MTP metadata)

llama.cpp's converter derives qwen35.nextn_predict_layers from the HF config's mtp_num_hidden_layers, but the merged model carries no MTP tensors — the runtime then rejects the file. v3 (and future builds) convert with --no-mtp. The staged artifact additionally passed a load gate (llama-bench executed against the quantized file) before publishing, after the sha256 assertion. Conversion job: 6ab5db5e6b030d633f69024c.

Honesty ledger

  • Fine-tune deltas are measured ONLY by the tests above. Everything else is UNMEASURED — including the v3 identity examples ("I'm Ornith…"): trained, but no identity probe was run in the verification harness. The model may still self-identify as Qwen (its pretraining).
  • Both behavior passes required the two harness fixes; against the stock trial script the AST fallback still carries the gate. Harness limitation, documented, not hidden.
  • v3 residual nits: (a) thinking residue still leaks into the raw reply before the trace header at the 800-token budget; (b) the header's rule field rendered as §R:§EVO_AST:PYGGI (double-§ formatting quirk) though the state and patch were correct.
  • The v3 speed gate is a CPU same-box A/B, not the GPU number: GPU flavors were unavailable platform-wide at verify time. Relative parity only; absolute GPU tok/s for v3 is unmeasured.
  • Architecture correction to the source plan: Ornith-1.5-9B is a dense hybrid (3:1 linear:full attention, no MoE routers) — the "small active fraction" label in the source BENCHMARKS.md does not match this config.

Usage

llama.cpp / llama-cpp-python ≥ 0.3.35 (arch qwen35). Reasoning-style model: allow ≥800 tokens generation budget — at 300 the thinking budget eats the reply (measured, three times).

Downloads last month
366
GGUF
Model size
9B params
Architecture
qwen35
Hardware compatibility
Log In to add your hardware

4-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Johnny5b/Ornith-9B-CORTEX-GGUF

Quantized
(97)
this model