Repository navigation
Closed
Labels
effort/sSmall: expected under 2 hours of workSmall: expected under 2 hours of workkind/featureNew feature or capability requestNew feature or capability requestmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)Ordinary priority (the default)status:in-review
Description
Ask
Qwen / local-model usage should be one documented config knob per surface (mcpx and OpenCode) instead of scattered, hardcoded model entries across provider blocks and config files.
Interim state (2026-10-29, Drew's order)
A disable pass parked the Qwen/Llama surface area for now:
- OpenCode (
.opencode/opencode.jsonc): Qwen model entries under the still-activecline-passandcommandcodeproviders are commented out (definitions retained in place, per the fleet config rule: disable = park, never delete). Qwen/Llama entries undercloudflare-ai-gatewayandgroqwere already inert — both providers sit indisabled_providers, and the Cloudflare Workers AI block was already commented out. OpenChamber's copies (settings.json/preferences.json) already carry every Qwen/Llama model inhiddenModels, and no OpenChamber default, routing category, or favorite points at one. - mcpx (
.mcpx.json): no Qwen/Llama servers or models exist there today; the same pass parked thecodedbserver under a top-leveldisabledMcpServerskey (definition retained).
The daily sync-models timer re-syncs provider model lists, so commented-out entries may drift back — another reason the durable fix is a knob, not edits.
Acceptance
- One documented on/off config switch per surface (mcpx, OpenCode) governing Qwen/local-model availability, defaulting off.
- Flipping the switch restores the parked definitions without re-editing model lists; definitions are never deleted.
- OpenChamber inherits the OpenCode-side state (no separate per-model hiding pass needed).
Out of scope: the atlas Qwen embedding pass (embed_pass3.py) — a separate, explicitly kept workload.
Acceptance criteria
- mcpx exposes Qwen/local-model selection as one documented config knob (named in the mcpx docs/config), and OpenCode exposes the equivalent single knob in its config — no scattered per-provider model entries need editing to switch or disable Qwen.
- Toggling the knob off reproduces the current parked state (no Qwen/Llama models offered on either surface); toggling it on restores the model entries without hand-editing provider blocks.
- The interim parked definitions from the 2026-10-29 disable pass are either consumed by the knob or removed with the knob's landing noted here.
Metadata
Metadata
Assignees
Labels
effort/sSmall: expected under 2 hours of workSmall: expected under 2 hours of workkind/featureNew feature or capability requestNew feature or capability requestmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)Ordinary priority (the default)status:in-review
Activity
developing-today commentedon Oct 29, 2026
CODE-1096
dezren39 commentedon Oct 29, 2026
Local-model feature audit — what "configurable" has to cover (2026-10-29)
Drew's correction checked against source: there ARE code features using llama/qwen models in all three systems, and none of them read the provider model listings PR #2220 parked. Full inventory:
research_notes/local-model-features-20261029/findings.md(opencode @ 388f652999, openchamber-fork @ 719cc8f01, code @ ce5c72b).Verdict on tonight's pass first: it risked nothing. The parked entries (cline-pass qwen3.8-max/3.7-max/3.7-plus, commandcode
qwen/*) are hosted-API chat-model listings. Every real feature sources its local model independently — pinned constants in source, or its own settings:llama-serverprocesses).packages/core/src/messaging/embedding.ts: tiers hardcoded in source (tiny=MiniLM, default=Qwen3-Embedding-0.6B, step-up=4B, top=8B) with pinned HuggingFace URLs; spawns llama.cpp b11669 per server process (hence two: standing server + OpenChamber's managed instance). The index it feeds is semantic/hybrid search over messages and session transcripts (messaging_vectortable, vectors computed lazily during search) — used by the Messaging service, the agent messaging tool, and plugins via the host. Unavailable → hybrid degrades to fuzzy FTS with a user-visible note. Its knob ismessaging.embedding(tier /"off"/ remote endpoint / autostart, default on) plus envOPENCODE_DISABLE_EMBEDDING. The fleet config sets nomessagingkey at all — so the one Qwen that runs 24/7 is governed by a config surface this issue hasn't named yet. It should: "configurable" here means a documentedmessaging.embeddingsetting in the fleet config (even if the setting is "leave the default on, deliberately"), not just listing hygiene.route-local-model.js: Qwen2.5-1.5B-Instruct GGUF (pinned commit+sha256), run via node-llama-cpp to turn one natural-language sentence about model pools into routing overrides, between a no-model keyword stage and the external classification provider. Opt-in download via Settings; not currently downloaded on the laptop, so the stage is inert. Config surface = Settings download + stage toggles, plus the messaging-config bridge (messaging-config.js) it exposes for its instances.pkgs/mcpx/internal/catalog/embeddings.go): a cascade — remote endpoint → WASM transformer → pure-Go subword embedder that needs no model at all; noembeddings.*settings are configured, so mcpx runs on the no-model floor today by design. (2) The prompt/consumer provider (internal/scripting/provider.go): natural-language intent → tool calls, with provider types includingollama/qwenmeaning a local endpoint, resolved from mcpx settings/env. "Qwen configurable on mcpx" therefore means these settings having documented, deliberate values — there is no mcpx model listing to flip.Acceptance implication for this issue: a per-surface knob table that names (a) OpenCode provider listings (done, PR #2220), (b) OpenCode
messaging.embedding, (c) OpenChamber interpreter local stage, (d) mcpxembeddings.*+ prompt-provider settings — each with its current deliberate value, including where the deliberate value is "on" (messaging embeddings) or "absent by design" (mcpx subword floor).Related follow-ups filed from the same audit: #2225 (codedb — one shared instance or an effective replacement; its park in PR #2220 is the only config change with functional surface) and dezren39/hatch-personal#3 (Atlas source-code indexing — the corpus side if #2225's replacement path lands on a fleet index).
dezren39 commentedon Oct 29, 2026
Intake review
meta/enrichedadded. A triage task (queue task 3385) was enqueued by this same monitor run under Duty 1 — the issue carriedqueue/queuedwith no live task behind it..opencode/opencode.jsoncand OpenChamberhiddenModels(named in the body).2 remaining items
dezren39 commentedon Nov 1, 2026
🤖 Agent note · picked up
dezren39 commentedon Nov 1, 2026
🤖 Agent note · done (PR opened)