Two research questions, both answered against primary sources and the live host, both of which found the vault pointing the wrong way.
1. Can the TTS engine run on the Strix Halo NPU? No — and the answer generalises: XDNA2 executes only vendor-precompiled AIE partition programs, which is exactly why the qwentts graph was declined. But halogen ships such programs, on other architectures.
2. Then give the fleet the embedding endpoint it lacks.open-notebook fails every note save with No embedding model configured because nothing in the fleet serves /v1/embeddings. Frank's recollection of an embeddinggemma-2 NPU model checks out — docs/NPU.md lists it — but it lands in 0.18.3 and we run 0.16.2. Better: qwen3-embedding-0.6b is already in the catalog of the pinned image (/opt/halogen/npu/models.txt in the running container, docs/NPU.md at tag v0.16.2), so /v1/embeddings needs no runtime bump.
What changes (docs only)
Page
Change
LLM/frank-dragoon.md
response_format law corrected (it is supported, greedy only) + new The NPU lane section with the four prerequisites this host census says we do not meet
Dankclaw/Open Notebook.md
scriptwriter probe verdict; embedding gap now names its door
Dankclaw/Frank TTS.md
"the NPU is not a door at all" narrowed to "not a door for a model nobody compiled"
LLM/Dankclaw System Specs.md
NPU runtime row = the distro XRT actually installed; stale "zealot serves 27B" payload line deleted
Evidence
Greedy-only schemas (live probe of :7770): json_schema and json_object → HTTP 200 with schema-valid 4-turn JSON at temperature: 0; → 400 "...decodes greedy in this release: send temperature 0 (or omit it). Sampling under a schema is not implemented yet" at 0.7, and also when temperature is omitted, because the sampler default is server-side. The same prompt with no response_format returned parseable JSON sampled, so prompt-only JSON is the escape hatch that keeps sampling.
The 400 is a landmine, not a降级 signal: is_json_schema_unsupported_error matches not implemented, so _SchemaFallbackModel downgrades to json_object, draws the same 400, and the run dies — esperanto's drop-response_format rescue only fires on 'response_format.type' must be 'json_schema'.
No per-row temperature: GET /openapi.json → ModelCreate = {credential, name, provider, type}. open-notebook cannot express greedy, so frank-archon stays the scriptwriter rather than adding a body-rewriting proxy to the path.
Host census for the NPU lane: amdxdna 0.7.0 in-tree bound, /dev/accel/accel0 present, iommu=pt, firmware 1.1.2.65, distro XRT libxrt2/libxrt-npu2 1:2.21.75 with libxrt_driver_xdna.so.2 — and no /opt/xilinx/xrt, so the distro mount form applies. Container today: no devices, pp_dpm_fclk unheld (levels 400–2000 MHz, none forced), /models mounted :ro (the first-boot HALOGEN_DOWNLOAD needs a writable /models/npu).
The hard prerequisite is the fabric clock. halogen refuses to start unless the GPU fabric clock is held, and the engine can only hold it itself when running as root with /sys mounted — frank-dragoon is a rootless podman run, so the vendor's root host unit is the path. That is precisely the pp_dpm_fclk pin deferred in dankclaw-iommu-translation-off with "it goes in when an NPU endpoint actually exists".
After merge
Nothing deploys (docs-only). Enabling the NPU lane is a separate, windowed change on a live endpoint and needs your go-ahead: it adds the accel device and XRT mount to frank-dragoon, installs a root host unit that pins the iGPU fabric clock, and takes a few GB of the RAM the n-gram table currently uses.
Tests: ./tests/run.sh → 455 passed. Branch head is the docs commit on top of main; no code, no config, no deploy.
## Why
Two research questions, both answered against primary sources and the live host, both of which found the vault pointing the wrong way.
**1. Can the TTS engine run on the Strix Halo NPU?** No — and the answer generalises: XDNA2 executes only vendor-precompiled AIE partition programs, which is exactly why the qwentts graph was declined. But halogen ships such programs, on other architectures.
**2. Then give the fleet the embedding endpoint it lacks.** `open-notebook` fails every note save with `No embedding model configured` because nothing in the fleet serves `/v1/embeddings`. Frank's recollection of an `embeddinggemma-2` NPU model checks out — `docs/NPU.md` lists it — but it lands in **0.18.3** and we run 0.16.2. Better: **`qwen3-embedding-0.6b` is already in the catalog of the pinned image** (`/opt/halogen/npu/models.txt` in the running container, `docs/NPU.md` at tag `v0.16.2`), so `/v1/embeddings` needs no runtime bump.
## What changes (docs only)
| Page | Change |
|---|---|
| `LLM/frank-dragoon.md` | `response_format` law corrected (it *is* supported, greedy only) + new *The NPU lane* section with the four prerequisites this host census says we do not meet |
| `Dankclaw/Open Notebook.md` | scriptwriter probe verdict; embedding gap now names its door |
| `Dankclaw/Frank TTS.md` | "the NPU is not a door at all" narrowed to "not a door for a model nobody compiled" |
| `LLM/Dankclaw System Specs.md` | NPU runtime row = the distro XRT actually installed; stale "zealot serves 27B" payload line deleted |
## Evidence
- **Greedy-only schemas** (live probe of `:7770`): `json_schema` and `json_object` → HTTP 200 with schema-valid 4-turn JSON at `temperature: 0`; → 400 `"...decodes greedy in this release: send temperature 0 (or omit it). Sampling under a schema is not implemented yet"` at 0.7, and also when `temperature` is omitted, because the sampler default is server-side. The same prompt with no `response_format` returned parseable JSON sampled, so prompt-only JSON is the escape hatch that keeps sampling.
- **The 400 is a landmine, not a降级 signal**: `is_json_schema_unsupported_error` matches `not implemented`, so `_SchemaFallbackModel` downgrades to `json_object`, draws the same 400, and the run dies — esperanto's drop-`response_format` rescue only fires on `'response_format.type' must be 'json_schema'`.
- **No per-row temperature**: `GET /openapi.json` → `ModelCreate = {credential, name, provider, type}`. open-notebook cannot express greedy, so **frank-archon stays the scriptwriter** rather than adding a body-rewriting proxy to the path.
- **Host census for the NPU lane**: `amdxdna 0.7.0` in-tree bound, `/dev/accel/accel0` present, `iommu=pt`, firmware 1.1.2.65, distro XRT `libxrt2`/`libxrt-npu2` 1:2.21.75 with `libxrt_driver_xdna.so.2` — and **no `/opt/xilinx/xrt`**, so the distro mount form applies. Container today: no devices, `pp_dpm_fclk` unheld (levels 400–2000 MHz, none forced), `/models` mounted `:ro` (the first-boot `HALOGEN_DOWNLOAD` needs a writable `/models/npu`).
- **The hard prerequisite is the fabric clock.** halogen refuses to start unless the GPU fabric clock is held, and the engine can only hold it itself when running as root with `/sys` mounted — `frank-dragoon` is a rootless `podman run`, so the vendor's root host unit is the path. That is precisely the `pp_dpm_fclk` pin deferred in `dankclaw-iommu-translation-off` with "it goes in when an NPU endpoint actually exists".
## After merge
Nothing deploys (docs-only). Enabling the NPU lane is a separate, windowed change on a live endpoint and needs your go-ahead: it adds the accel device and XRT mount to `frank-dragoon`, installs a root host unit that pins the iGPU fabric clock, and takes a few GB of the RAM the n-gram table currently uses.
Tests: `./tests/run.sh` → 455 passed. Branch head is the docs commit on top of `main`; no code, no config, no deploy.
---
cwd: /home/blank/.omp/wt/wt-20261019-020309-6d1fc1f · session: 01a15366-7601-7175-bb69-c62186c3f8b5
- frank-dragoon: measured the response_format contract. json_schema and json_object answer
schema-valid JSON at temperature 0 and draw a 400 at any sampled temperature, and because
the sampler default is server-side an absent temperature is sampled. The page claimed
"response_format is unsupported", which sends the next agent past a working feature.
- frank-dragoon: new "The NPU lane" section. The pinned 0.16.2 image already ships the
five-program AIE catalog including qwen3-embedding-0.6b, so /v1/embeddings is one env var
plus the accel device, the distro-XRT mount and the fabric-clock hold; embeddinggemma-2
needs 0.18.3+, the stock-kernel-driver memory-budget fix 0.18.8+. Host census recorded:
no /opt/xilinx/xrt, distro XRT 1:2.21.75 with libxrt_driver_xdna, clocks unheld.
- Open Notebook: scriptwriter probe verdict — greedy-only, and open-notebook's model record
is {credential, name, provider, type} with no per-row config, so it cannot ask for greedy;
frank-archon stays the writer. The embedding gap now has a named door instead of "build a
new llama.cpp slot".
- Frank TTS: "the NPU is not a door at all" was too broad. It is not a door for the TTS
family; halogen's precompiled catalog is a door on the same device.
- System Specs: NPU runtime row corrected to the distro XRT actually installed, and the
stale "frank-zealot serves 27B" line retired in favour of [[frank-zealot]] as sole owner.
Tests: ./tests/run.sh, 455 passed.
dank
merged commit fa093e617d into main2026-10-19 21:14:53 -07:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Why
Two research questions, both answered against primary sources and the live host, both of which found the vault pointing the wrong way.
1. Can the TTS engine run on the Strix Halo NPU? No — and the answer generalises: XDNA2 executes only vendor-precompiled AIE partition programs, which is exactly why the qwentts graph was declined. But halogen ships such programs, on other architectures.
2. Then give the fleet the embedding endpoint it lacks.
open-notebookfails every note save withNo embedding model configuredbecause nothing in the fleet serves/v1/embeddings. Frank's recollection of anembeddinggemma-2NPU model checks out —docs/NPU.mdlists it — but it lands in 0.18.3 and we run 0.16.2. Better:qwen3-embedding-0.6bis already in the catalog of the pinned image (/opt/halogen/npu/models.txtin the running container,docs/NPU.mdat tagv0.16.2), so/v1/embeddingsneeds no runtime bump.What changes (docs only)
LLM/frank-dragoon.mdresponse_formatlaw corrected (it is supported, greedy only) + new The NPU lane section with the four prerequisites this host census says we do not meetDankclaw/Open Notebook.mdDankclaw/Frank TTS.mdLLM/Dankclaw System Specs.mdEvidence
:7770):json_schemaandjson_object→ HTTP 200 with schema-valid 4-turn JSON attemperature: 0; → 400"...decodes greedy in this release: send temperature 0 (or omit it). Sampling under a schema is not implemented yet"at 0.7, and also whentemperatureis omitted, because the sampler default is server-side. The same prompt with noresponse_formatreturned parseable JSON sampled, so prompt-only JSON is the escape hatch that keeps sampling.is_json_schema_unsupported_errormatchesnot implemented, so_SchemaFallbackModeldowngrades tojson_object, draws the same 400, and the run dies — esperanto's drop-response_formatrescue only fires on'response_format.type' must be 'json_schema'.GET /openapi.json→ModelCreate = {credential, name, provider, type}. open-notebook cannot express greedy, so frank-archon stays the scriptwriter rather than adding a body-rewriting proxy to the path.amdxdna 0.7.0in-tree bound,/dev/accel/accel0present,iommu=pt, firmware 1.1.2.65, distro XRTlibxrt2/libxrt-npu21:2.21.75 withlibxrt_driver_xdna.so.2— and no/opt/xilinx/xrt, so the distro mount form applies. Container today: no devices,pp_dpm_fclkunheld (levels 400–2000 MHz, none forced),/modelsmounted:ro(the first-bootHALOGEN_DOWNLOADneeds a writable/models/npu)./sysmounted —frank-dragoonis a rootlesspodman run, so the vendor's root host unit is the path. That is precisely thepp_dpm_fclkpin deferred indankclaw-iommu-translation-offwith "it goes in when an NPU endpoint actually exists".After merge
Nothing deploys (docs-only). Enabling the NPU lane is a separate, windowed change on a live endpoint and needs your go-ahead: it adds the accel device and XRT mount to
frank-dragoon, installs a root host unit that pins the iGPU fabric clock, and takes a few GB of the RAM the n-gram table currently uses.Tests:
./tests/run.sh→ 455 passed. Branch head is the docs commit on top ofmain; no code, no config, no deploy.cwd: /home/blank/.omp/wt/wt-20261019-020309-6d1fc1f · session: 01a15366-7601-7175-bb69-c62186c3f8b5
- frank-dragoon: measured the response_format contract. json_schema and json_object answer schema-valid JSON at temperature 0 and draw a 400 at any sampled temperature, and because the sampler default is server-side an absent temperature is sampled. The page claimed "response_format is unsupported", which sends the next agent past a working feature. - frank-dragoon: new "The NPU lane" section. The pinned 0.16.2 image already ships the five-program AIE catalog including qwen3-embedding-0.6b, so /v1/embeddings is one env var plus the accel device, the distro-XRT mount and the fabric-clock hold; embeddinggemma-2 needs 0.18.3+, the stock-kernel-driver memory-budget fix 0.18.8+. Host census recorded: no /opt/xilinx/xrt, distro XRT 1:2.21.75 with libxrt_driver_xdna, clocks unheld. - Open Notebook: scriptwriter probe verdict — greedy-only, and open-notebook's model record is {credential, name, provider, type} with no per-row config, so it cannot ask for greedy; frank-archon stays the writer. The embedding gap now has a named door instead of "build a new llama.cpp slot". - Frank TTS: "the NPU is not a door at all" was too broad. It is not a door for the TTS family; halogen's precompiled catalog is a door on the same device. - System Specs: NPU runtime row corrected to the distro XRT actually installed, and the stale "frank-zealot serves 27B" line retired in favour of [[frank-zealot]] as sole owner. Tests: ./tests/run.sh, 455 passed.