hawktalk@ai — models · tty5 ◉ owned weights · measured
the model catalogue

Every brain we built,
and what it's for.

HawkTalk owns its weights. This is the whole shelf — routers, workhorses, function-callers, speech, drafters and adapters — with what each one measured and which surface serves it. Numbers here come from run artifacts, not estimates. Where something is incomplete or dead, it says so.

How they're served

One gateway process, one model registry, several backends. The same model id resolves to whatever the node in front of you can actually run — NPU, Neuron, CPU, or WebGPU in a browser tab.

BackendRunsFormat
Hexagon NPU (Snapdragon 8 Elite)quick · dank · oakggml-hex, all layers resident on HTP
Qualcomm AI-100 (dl2q)quick · dank · miniQPC compiled via qeff, MXFP6 / FP16
AWS inf2 (Inferentia2)E2B and Qwen classesNeuron / TGI-Neuron, continuous batching
CPUouromega · sapling · sakurallama.cpp GGUF
Browser (WebGPU)feedseed · luxONNX fp16 via transformers.js

Selecting a model

Three ways, in increasing precedence. All of them accept a concrete registry id, a tier pin, or auto.

# 1. connection default
ws://host:8891/v1/realtime?model=auto

# 2. mid-session — takes effect on the next turn
{"type":"session.update","session":{"model":"tier:dank"}}

# 3. per-turn override — highest precedence
{"type":"response.create","response":{"model":"hawkalphaquick"}}

Tier vocabulary is ouro · quick · dank · think · cloud, with aliases (self, route, ouromega, live, specialist, t0t3). auto runs the router per utterance. GET /v1/models lists what a given node actually has, with availability and routing info — always trust that over this page.

Mid-session switching is real. session.update re-points a live socket at a different brain without dropping the call. Every conglomerate realtime API is one model per session.

Routers — the thing that decides

ouromegaGemma 3 · 270M + LoRA r16 · 18L / 640tier router

The flagship router and the piece the whole cost story rests on. Reads every turn and emits one of SELF · QUICK · DANK · CLOUD, then answers the SELF turns itself. Prompting a stock 270M for this scored 0/10 — the behaviour is distilled in, not prompted.

ship artifact GGUF Q4_K_M 253 MB routing accuracy 99.1% (109/110) valid format 100% (110/110) CPU decode ~104 tok/s CPU prompt ~500 tok/s decision p50 300.2 ms shipped

A vocab-trimmed variant (262144 → 32000, 242 MB) was built and rejected for ship: trimming remaps token ids and breaks token-space alignment with quick and dank, which is what makes cross-tier handoff free.

ouro-router4 siblings on the ouromega base · full · v2 · qr · distillmandate routing

A second routing family aimed at mandate-verb selection rather than tier selection. Measured and kept honest: v2 reached 83.5% on the 97-case set but only 47.3% held out, bleeding to web_search and NONE. It did not reach the ouromega bar and is not in the serving path.

v2 in-eval 83.5%v2 held-out 47.3%full held-out 45.1%research

Workhorses — the Gemma-4 ladder

All vocab-trimmed 262144 → 150554 (English trim). Same tokenizer across the ladder, which is why a turn can move tier mid-conversation without a re-encode.

hawkalphaquickGemma 4 E2B · 35L / 1536 · ctx 131072tier 1 · quick

The workhorse. Active listening, quick chat, multimodal audio in. This is what answers most turns and what tier:quick resolves to.

GGUF Q4_K_M 2.29 GBQ8_0 3.46 GBAI-100 QPC 4.51 GBNPU decode ~50 tok/s MXFP6TTFT 36–40 msshipped
hawkalphadankGemma 4 E4B · 42L / 2560tier 2 · specialist

The escalation target. Longer instructions, code, summaries — the turns quick shouldn't be guessing at. Also ships an FC-merged build for tool-heavy work.

GGUF Q4_0 3.69 GBf16 11.25 GBFC-merged 4.80 GBAI-100 compiled 24 GBshipped
hawkalphaquick-miniGemma 4 E2B, 5 layers of 35latency probe

A surgical depth cut of quick, kept because the numbers are instructive: on AI-100 MXFP6 it hits 9–14 ms TTFT and 205–215 tok/s decode. That is the ceiling the architecture can reach when depth stops being the constraint.

HF 2.03 GBQPC 1.89 GBprefill 499–1587 tok/sprobe

Function calling

Tool use is a fine-tune, not a prompt trick, so each surface gets a caller sized for its silicon.

fc-quickhawkalphaquick + FC-LoRA r32/α64server · npu

The main function-caller. Evaluated on 42 cases across 7 categories, greedy, against a frontier ceiling.

CategoryRawGrammar-constrainedCloud ceiling
simple100%100%100%
selection67%67%100%
parallel50%83%100%
ambiguous50%50%100%
grounding50%67%100%
negative100%100%100%
multiturn83%83%100%
overall71%79%100%
Two findings worth building on. Negative cases score 100% — it does not invent tool calls when no tool applies, which is the failure that actually costs money in production. And the gap to frontier is a format gap, not a brains gap: constraining the decode moved parallel calls from 50% to 83%. Run tools grammar-locked.
GGUF Q4_0 2.22 GBlaptop CPU 8.8–9.3 tok/sshipped
oakGemma 4 E2B · FC-mergednpu premium · teacher

The NPU premium function-caller, and the teacher the smaller callers are distilled from. Ships in two cuts: a full-vocab deploy build and a Lighthouse trim at vocab 181450. Trim gates all pass — token coverage 1.0, argmax agreement 1.0, max logit delta 1.05e-5.

Q4_K_M 3.18 GBf16 8.64 GBHexagon ~27 tok/sthe only model registered in Ollamashipped
feedseedGemma 3 270M · vocab 48k · distilled from oakbrowser · webgpu

Function calling in a browser tab with no install and no server. Ships as ONNX fp16 and boots through transformers.js — this is what the Hawknest widget loads.

ONNX fp16 310 MBtool-match A/B 25/25hiking eval 97.9%real-name backtest 74.5%shipped
Do not quantise it. At 4-bit the same model scores 4/25 — a 270M has no weight redundancy left for round-to-nearest. fp16 at 310 MB is mandatory, and the fallback below it is a deterministic rule parser, never a smaller model.
sakuraQwen 2.5 Instruct · 0.5B and 1.5B · Apache-2.0cpu · licence-clean

The correctness-first caller, and the only non-Gemma one — chosen for the Apache-2.0 licence and native tool-use training. Always run behind a GBNF grammar. Measurement killed the 0.5B: 33.3% exact against the 1.5B's 70.8%.

Metric0.5B1.5B
valid JSON100%100%
no hallucinated tool100%100%
right tool50.0%79.2%
exact (tool + args)33.3%70.8%
1.5B Q4_K_M 941 MB0.5B Q4_K_M 380 MBCPU / Vulkan onlyshipped
lux / deluxGemma 3 270M · native + webhawkchat

HawkChat's on-device caller — architecturally feedseed's twin, tuned for the companion app instead of the trail. Grammar-locked to a {"calls":[…]} contract. Ships inside the Android APK.

native Q4_0 241 MBweb ONNX fp16 313 MBin-APK lux.gguf 0.41 GBshipped

The Hawk Alpha family

Four models, one job — turn speech into grounded tool calls on whatever hardware the user already owns. This is the ladder that ships in OpenCairn and the Hawknest widget.

MemberBaseRuns onDistinguishing property
SaplingGemma 3 1BPhone CPUThe chat tier. Bandwidth-first vocab trim, because decode is memory-bound. Ships a full-vocab twin so the trim can be A/B'd honestly.
FeedseedGemma 3 270MBrowser, WebGPUThe floor. Runs in a tab with no install. fp16 only.
SakuraQwen 2.5 1.5BCPU / VulkanLicence-clean and correctness-first. Grammar-locked.
OakGemma 4 E2BHexagon NPUThe premium tier and the teacher the others learn from.

Speech

ModelRoleSizeNotes
Kokoro-82MTTS310 MB fp32 · 88 MB14 voice packs — af_heart default, plus af_bella, am_puck, bm_fable, bf_isabella. Returns visemes for lip-sync.
Whisper base.enSTT148 MBThe one to ship. Worth the memory over tiny.
Whisper tiny.enSTT78 MBMeasurably mishears domain phrases. Fallback only.
Sherpa-onnx zipformerSTT streaming43 MB int8 encoderFully on-device streaming for Android.
Piper lessac-mediumTTS fallback63 MBEngine fallback when Kokoro is unavailable.
Orpheus-3B + SNACTTS LLM + codecExpressive speech research lane. research
Silero VADvoice activity885 KBClient-side endpointing.

Embedding

embedder-ft-bgeBERT · 12L / 384 / vocab 30522 / ctx 512retrieval

A fine-tuned MiniLM/BGE-class encoder, wired into the live cache path and reachable as tier:embed. Used for retrieved-prefix grounding — the approach that measured a +40pp lever, as opposed to per-token blending, which did not.

size 120 MBshipped

Drafters & speculative decode

HawkReactQwen 3 · 1.7B teacher + 0.6B draft · vocab 94513spec decode

A family-native draft/target pair — same tokenizer on both sides, which the previous attempt got wrong by distilling a Qwen student from a Gemma teacher. Gated on real token-id acceptance alpha, not a proxy: it ships only above 0.65.

teacher 3.35 GBdraft 1.18 GBaccept gate α ≥ 0.65in training
elastic-depthself-speculative early exit on quicknegative result

Self-speculation with exit layers [19, 24, 29]. Measured token agreement at exit 19 was 0.168 against a draft cost fraction of 0.534 — it does not pay. Published because a measured negative is worth as much as a win.

does not pay

Persona & domain adapters

Hot-swappable LoRAs on the quick base, routed by keyword against one resident model — so a persona change costs an adapter swap, not a model load.

AdapterRankSizeFor
bookworm_v2r32 / α6490 MBLong-form reading and recall
storylord_v2r32 / α6490 MBNarrative generation
writer_v2r32 / α6490 MBDrafting and editing
adpt_affectr16 / α3290 MB GGUFEmotional register — feeds the affect lane
adpt_coder16 / α3290 MB GGUFCode paths

The same model, four silicons

One protocol, four backends, all measured. This is the platform claim, and it is the reason flat-rate pricing is possible rather than subsidised.

SiliconMeasured
Qualcomm AI-100 MXFP6TTFT 36–40 ms · prefill 174–392 tok/s · decode ~50 tok/s · 8-card aggregate 404.6 tok/s
Qualcomm AI-100 FP16TTFT 56–60 ms · decode ~24 tok/s — MXFP6 is ≈2× FP16 on decode
AWS inf2 Neuronwarm TTFB 0.346 s · ~22 tok/s streaming
Phone Hexagonall layers resident on HTP · on-NPU function calling 77.5% full-correct, 100% valid format over 1000 cases
Host CPUouromega decision p50 300.2 ms on an idle box

Voice-to-voice on one inf2 box, serial: STT 669.9 ms + chat 656.2 ms + TTS 1449.5 ms = 2775.6 ms. TTS is 52% of that budget, which is where the work is.

Incomplete, and dead

Kept on the page because a catalogue that only lists wins is a brochure.

ThingStateWhy
hawkalphathink (12B, tier 3)incompleteConfig declares the shape; weights were never built on this box. The ladder currently tops out at dank.
hawkalphalite (268M drafter)design onlyScripts and a feasibility verdict exist; no checkpoint.
268M FC-router distillkilledMemorises. 45.1% held out. The 268M keeps tier-routing only.
Per-token kNN-LM decode blendkilledFired 40×, corrected 0. Retrieved-prefix grounding is the +40pp lever that works.
Turbo layer-pruned modelskilledInstruction-following destroyed.
ouromega en32k trimrejectedSmaller, but remaps token ids and breaks cross-tier alignment.

Dead means dead. Reopening any of these requires new evidence, recorded.