docs(openwebui): frank-dragoon enabled in the picker beside frank-zealot
Live DB trio applied on Dankclaw (enable idx 0, model row + global access_grant, restart); verified /api/models as admin and role=user, chat answers pong. Battery rewritten to gate on /api/models — /api/v1/models/list lists only workspace models on 0.6.x.
This commit is contained in:
@@ -24,7 +24,7 @@ https://github.com/open-webui/open-webui
|
||||
| Upstream latest | 0.11.4 (2026-09-21) — security/access-control advisory; `:main` is the rolling image, not a stable pin. Imagegen endpoint is `POST /api/v1/images/generations` (the `comfyui` engine is still upstream). |
|
||||
| Port | 3005 (host) → 8080 (container). Port 3000 is Gitea's HTTP, so it is not usable. |
|
||||
| Data volume | `/home/dank/Containers/open-webui/data` → `/app/backend/data` |
|
||||
| Backends | Picker exposes exactly one model — `frank-secondary` (host.containers.internal:7771). The `frank-large` and `frank-primary` connections remain configured in the DB, disabled (2026-10-07) — see [The LLM backends](#the-llm-backends) |
|
||||
| Backends | Picker exposes two models — `frank-zealot` (host.containers.internal:7771) and `frank-dragoon` (host.containers.internal:7770, added 2026-10-09). The `frank-archon` (Dankserver) connection remains configured in the DB, disabled — see [The LLM backends](#the-llm-backends) |
|
||||
| Network | Pinned bridge `systemd-open-webui` (`10.89.3.0/24`, gateway `10.89.3.1`) — see [History](#history) |
|
||||
| Persistence | Quadlet unit `open-webui.service`; `[Install] WantedBy=default.target` |
|
||||
| Deploy | `scripts/deploy-open-webui-quadlet.sh dankclaw` |
|
||||
@@ -34,17 +34,20 @@ https://github.com/open-webui/open-webui
|
||||
The picker is built from the `model` table in `webui.db` (one row per model)
|
||||
plus the `model_ids` of each **enabled** OpenAI connection, NOT from live
|
||||
connection discovery — so the picker shows exactly what is seeded there.
|
||||
As of 2026-10-07 the picker exposes **exactly one model: `frank-secondary`**.
|
||||
As of 2026-10-09 the picker exposes **two models: `frank-zealot` and
|
||||
`frank-dragoon`**.
|
||||
|
||||
| Connection (`openai.api_configs` idx) | URL | Enabled | `model_ids` | Runtime | Host |
|
||||
|---|---|---|---|---|---|
|
||||
| 0 | `http://host.containers.internal:7770/v1` | no (2026-10-07) | `frank-large` | halogen flash-server (Strix Halo iGPU) | Dankclaw |
|
||||
| 1 | `http://192.168.0.235:7770/v1` | no (2026-10-07) | `frank-primary` | radiance TP=2 (2× R9700) | Dankserver |
|
||||
| 2 | `http://host.containers.internal:7771/v1` | yes | `frank-secondary` | llama.cpp CUDA (RTX 3090, 2×200,704) | Dankclaw |
|
||||
| 0 | `http://host.containers.internal:7770/v1` | yes (2026-10-09) | `frank-dragoon` | halogen flash-server (Strix Halo iGPU) | Dankclaw |
|
||||
| 1 | `http://192.168.0.235:7770/v1` | no (2026-10-07) | `frank-archon` | radiance TP=2 (2× R9700) | Dankserver |
|
||||
| 2 | `http://host.containers.internal:7771/v1` | yes | `frank-zealot` | llama.cpp CUDA (RTX 3090, 2×200,704) | Dankclaw |
|
||||
|
||||
The `model` table carries exactly one decoration row, `frank-secondary`
|
||||
(context length 200,704 = the per-slot window; description: Qwen3.5-9B
|
||||
Q6_K + BF16 vision mmproj).
|
||||
The `model` table carries one decoration row per picker model:
|
||||
`frank-zealot` (context length 200,704 = the per-slot window; description:
|
||||
Qwen3.5-9B Q6_K + BF16 vision mmproj) and `frank-dragoon` (context length
|
||||
262,144 = the per-slot `HALOGEN_CTX`; description: Swift1.5 v2 abliterated,
|
||||
MTP, vision ON).
|
||||
|
||||
A third gate sits *after* the table, and it is the one that bites family
|
||||
accounts (2026-10-07): a model row is only visible to a non-admin user when
|
||||
@@ -112,8 +115,11 @@ The Ollama connection is disabled (`ollama.enable=false`).
|
||||
|
||||
## Verification battery
|
||||
|
||||
1. `GET /api/v1/models/list?limit=100` → returns EXACTLY the intended
|
||||
models. Response key is `items`, not `data`.
|
||||
1. `GET /api/models` (the picker endpoint; response key `data`) → lists
|
||||
EXACTLY the intended models, **as an admin AND as a `role='user'` token**.
|
||||
Do NOT gate on `GET /api/v1/models/list` (the Admin Panel → Models page):
|
||||
on the 0.6.x image it returns `items: []` for connection-backed models
|
||||
(workspace-list only; measured 2026-10-09 on both picker ids).
|
||||
2. `POST /api/chat/completions` per model with a trivial prompt ("Reply
|
||||
with exactly one word: pong") → each returns content `pong`. Reasoning
|
||||
models need a generous budget: frank-secondary (Qwen3.5 template) returns
|
||||
@@ -191,9 +197,9 @@ browser-driven and only touches the two exempt vhosts (`ai.` and `auth.`).
|
||||
run with host `python3` over ssh against
|
||||
`/home/dank/Containers/open-webui/data/webui.db` (no `sqlite3` CLI on
|
||||
Dankclaw; table is `user`, singular; no `active` column). No per-user model
|
||||
grant is needed: the picker model `frank-secondary` carries the global
|
||||
`access_grant` row `(model, frank-secondary, user, *, read)`, so any
|
||||
`role='user'` account sees it. Flip on FIRST-LOGIN SIGHTING — the row does
|
||||
grant is needed: both picker models (`frank-zealot`, `frank-dragoon`) carry
|
||||
the global `access_grant` row `(model, <id>, user, *, read)`, so any
|
||||
`role='user'` account sees them. Flip on FIRST-LOGIN SIGHTING — the row does
|
||||
not exist until the account signs in (2026-10-09: five provisioned accounts
|
||||
had no row).
|
||||
- **IdP reachability:** the container is on its own bridge (10.89.3.0/24) and
|
||||
@@ -308,6 +314,21 @@ on large sizes ⇒ check ComfyUI resources; 401 ⇒ the token is bad.
|
||||
name: /selected model/i })`) and the welcome text "How can I help you
|
||||
today?"; that snapshot is also the cheapest proof the picker is populated.
|
||||
|
||||
- **2026-10-09 — `frank-dragoon` added to the picker.** Per Frank: expose the
|
||||
halogen endpoint (service `frank-large`, `host.containers.internal:7770`)
|
||||
beside `frank-zealot`. Three id-keyed writes (the trio the 10-07 rebuild
|
||||
proved): `openai.api_configs` idx 0 `enable: true` (its `model_ids` already
|
||||
carried `frank-dragoon` from the wire rename), a `model` row (`id`/`name`
|
||||
`frank-dragoon`, `params.context.length` 262144 = the per-slot
|
||||
`HALOGEN_CTX`, description of the v2 abliterated payload), and the global
|
||||
`access_grant` `(model, frank-dragoon, user, *, read)`. Snapshot
|
||||
`webui.db.bak-20261009b`, apply with host `python3` over ssh, then
|
||||
`systemctl --user restart open-webui.service`. Verified: `/api/models`
|
||||
lists `frank-dragoon` as admin AND as the QA `role='user'` account, and
|
||||
`POST /api/chat/completions` through the app answers `pong` at
|
||||
`max_tokens 1500`. Halogen's `/v1/models` is OpenAI-shaped, so discovery
|
||||
would have worked too — `model_ids` stays authoritative.
|
||||
|
||||
## See Also
|
||||
|
||||
- [[Dankclaw Stack]]
|
||||
|
||||
@@ -1562,3 +1562,26 @@ every restart since the cutover.
|
||||
so the honest claim is ~184 s of inductor/AOT build recovered per restart —
|
||||
not a proportional boot cut.
|
||||
|
||||
## 2026-10-09 — OpenWebUI picker: `frank-dragoon` enabled beside `frank-zealot`
|
||||
|
||||
- Per Frank: make `frank-dragoon` (service `frank-large`, halogen
|
||||
flash-server, `host.containers.internal:7770`) selectable in OpenWebUI. The
|
||||
connection (idx 0) already carried `model_ids: ["frank-dragoon"]` from the
|
||||
wire rename; it lacked the other two legs of the trio: `enable: false`, no
|
||||
`model` row, no `access_grant`.
|
||||
- Applied on the live DB (snapshot `webui.db.bak-20261009b`): idx 0
|
||||
`enable: true`; `model` row `frank-dragoon` with
|
||||
`params.context.length = 262144` (per-slot `HALOGEN_CTX`) and the v2
|
||||
abliterated description; `access_grant`
|
||||
`(model, frank-dragoon, user, *, read)`. Then
|
||||
`systemctl --user restart open-webui.service` (drops cached model list;
|
||||
browser JWTs die with it — expect one SSO re-round-trip per tab).
|
||||
- Verified: `/api/models` lists `frank-dragoon` as admin AND as the QA
|
||||
`role='user'` account (picker truth, key `data`); `POST
|
||||
/api/chat/completions` through the app answers `pong` at `max_tokens
|
||||
1500`. `/api/v1/models/list` reads `items: []` for connection-backed
|
||||
models on this 0.6.x image (pre-existing for `frank-zealot` too) — the
|
||||
battery in [[OpenWebUI]] is rewritten to gate on `/api/models`.
|
||||
- Docs: [[OpenWebUI]] Facts/LLM-backends/battery/history updated;
|
||||
`frank-archon` (idx 1, Dankserver) intentionally stays disabled.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user