Skip to content

feat(setModel): remember selection; bump llama.cpp to b10450; refresh docs - #22

Merged
MattDHill merged 6 commits into
Start9Labs:masterfrom
aldum:feature/remember_custom_model
Aug 17, 2026
Merged

feat(setModel): remember selection; bump llama.cpp to b10450; refresh docs#22
MattDHill merged 6 commits into
Start9Labs:masterfrom
aldum:feature/remember_custom_model

Conversation

@aldum

@aldum aldum commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

What

Three things shipping as one release, 1.0.10438:01.0.10450:0:

  1. Set Model remembers your selection. The action records what the form last submitted and prefills from it, so re-opening Set Model shows your current configuration instead of resetting to the defaults.
  2. llama.cpp b10438 → b10450, 12 upstream builds. This was chore: bump llama.cpp to b10450; 1.0.10438:0 → 1.0.10450:0 #23, folded in here so the two don't collide on current.ts and so the change ships as one version rather than two.
  3. Documentation and housekeeping that had been sitting uncommitted: a README rewrite, an AGENTS.md refresh, the syncNext workflow, and a formatting fix.

Why

Useful when tweaking only context length, or checking what the configured custom model is. Previously the form always reopened on the smallest preset that fits the detected memory, whatever was actually running.

Set Model prefill

modelSelection in store.json holds the chosen selection plus a custom object carrying the custom variant's fields; picking a preset clears custom. Nothing reads it but the action's prefill — serveArgs remains the only thing the daemon sees, so the two can't drift into disagreement about what is running.

The field is additive and optional, so there is no migration: an install predating this simply sees the defaults until its next Set Model submit. It lives on the main volume, so it travels with backups like serveArgs does.

Upstream highlights (b10438…b10450)

  • Adds the Kimi-K3 text model family.
  • server: the yield_to_queue thread model was re-designed, improving behaviour under concurrent requests.
  • Vulkan: coopmat1 tuning for Intel Xe, plus fixed gating for a problematic Intel driver version.
  • Built-in chat UI: the API key field is masked so browsers stop offering to save it; MCP tool results now read structuredContent when content is empty.
  • GGUF parsing now checks array types before reading, so malformed metadata is rejected rather than misread.
  • --models-dir can load MTP assistant models.
  • Vendored cpp-httplib → 0.53.1 and BoringSSL → 0.20260813.0.

Full commit range: ggml-org/llama.cpp@b10438...b10450

All four image variants were confirmed published on GHCR before pinning (server-, server-cuda-, server-rocm-, server-vulkan- at b10450), with the expected arches — rocm x86-only, the rest amd64+arm64. The reference registry's latest is 1.0.10380:0, so 1.0.10450:0 is free.

Deprecation checked, no package change needed. Upstream deprecated --mmap / --no-mmap / --mlock / --direct-io in favour of -lm/--load-mode (ggml-org/llama.cpp#26934). They still parse and only emit a warning. This package builds its serve args from -hf, -hff, -c, -ngl, --host and --port only, so none of them are used by main.ts or the presets; the release notes mention it for users who pass them through Set Model's extra arguments. The presets in startos/actions/presets.ts were reviewed against the range — no flag renames or server-API changes affect them.

Documentation and housekeeping

  • README.md restructured around what an AI support or administering agent needs to answer questions about a running install: layout, file models, each action with its cost and repeat-safety, tasks, health checks, limits. modelSelection and the Set Model prefill are documented in that structure. It also corrects the preset default — models.find returns the first entry that fits and the list runs smallest-first, so the form defaults to the smallest preset that fits, not the largest.
  • AGENTS.md drops its "Inspecting a running install" section, which now lives in the shared packaging guide, and records the constraints an agent tends to get wrong here (the AMD allowlist, the hour-long health-check grace, the preset sizing convention).
  • UPDATING.md table alignment.
  • syncNext.yml added, matching the copy every other package in the registry carries.
  • The two i18n dictionaries were the only unformatted files under startos/prettier --check was red on master. Both are now byte-for-byte prettier --write output of what was committed, so no key text moved and no dictionary index shifted.
  • The scaffold's assets/README.md placeholder is replaced by a .gitkeep.

aldum and others added 2 commits August 16, 2026 15:11
…→ 1.0.10438:1

FileHelper.merge only overwrites keys present in the incoming object, so the
flat modelSelection shape left a stale hfRepo/ctx/ngl/extraArgs behind after
switching from Custom to a preset. Nesting them under `custom` clears the lot
in one key, and mirrors the union's own {selection, value} so the prefill maps
straight across instead of restating the input spec's defaults.

The `as 'llama-32-1b'` cast was unnecessary: allVariants is declared
`Record<AllVariantIds, { name: string; spec: any }>`, which widens the prefill
type to `{ selection: string; value: any }`.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@MattDHill

Copy link
Copy Markdown
Member

Thanks — the approach is right, and it holds up end to end: getInput's return lands as ActionInput.value, and FormService.getUnionObject prefers a selection that exists in spec.variants over the spec's default, so a saved choice does win. .const(effects) in this slot is effectively .once() (constRetry is only set for exportMetadata and init), so there's no watcher leak and no "write after const" clash with the merge in run. And since main.ts reads through a serveArgs map that dedupes on the mapped value, writing modelSelection alone doesn't restart the service.

I've pushed a commit to your branch rather than send it back — three things:

Version bump — this was the blocker. A wrapper-only change needs a downstream revision, so 1.0.10438:01.0.10438:1 with release notes in all five locales. Without it tagAndRelease either skips the release entirely (that version is already on the reference registry) or force-pushes v1.0.10438_0 onto a new commit and republishes different content under an already-released version.

Custom fields now nest under modelSelection.custom. FileHelper.merge goes through fileMerge, which only overwrites keys present in the incoming object — so the flat shape left a stale hfRepo/ctx/ngl/extraArgs on disk after switching from Custom to a preset. Inert in practice (the prefill only read them when selection was custom), but it made the new README line untrue of the actual file. One nested key clears the lot, and the type keeps custom non-optional so a field added later can't be forgotten. The shape now mirrors the union's own {selection, value}, which makes the prefill a direct mapping — that in turn let the per-field ?? 8192 / ?? 999 fallbacks go, since they restated defaults that already live in inputSpec a hundred lines up.

Dropped the as 'llama-32-1b' cast and its comment. allVariants is declared Record<AllVariantIds, { name: string; spec: any }>, which widens the prefill type to { selection: string; value: any } — not a discriminated union here, so selection: saved.selection type-checks on its own.

Also added a line to instructions.md, since this changes user-visible behaviour of a documented action.

tsc --noEmit and prettier are clean.

helix-nine and others added 2 commits August 16, 2026 21:57
Splits the notes into package and upstream sections now that the release carries
both, and localises the **Set Model** references that were left in English in
the es/de/pl/fr notes — the action name is translated in the UI.

Supersedes the standalone 1.0.10438:1 bump earlier in this branch: the upstream
version moved, so the downstream revision resets to :0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@MattDHill MattDHill changed the title feat(setModel): remember custom selection feat(setModel): remember selection; bump llama.cpp to b10450 Aug 17, 2026
@MattDHill

Copy link
Copy Markdown
Member

Folded #23 (the b10450 bump) in here — the two both rewrote current.ts, so they could not both land, and shipping them separately would have meant 1.0.10438:1 immediately followed by 1.0.10450:0 for one feature and one bump.

  • Cherry-picked helix's 92c6ce8 onto this branch, authorship preserved.
  • Version is now 1.0.10450:0 — the upstream version moved, so the downstream revision resets to :0 and the standalone :1 bump I pushed earlier is superseded (it stays in the history; the branch squashes on merge).
  • Release notes are split into a package section and a llama.cpp section, since the release now spans both. While in there I also localised the Set Model references that the es/de/pl/fr notes had left in English — the action name is translated in the UI (Establecer modelo, Modell festlegen, Ustaw model, Définir le modèle).
  • Retitled the PR and rewrote the description to cover both changes, since the squash-merge takes the title.

tsc --noEmit and prettier are clean on the combined tree.

MattDHill and others added 2 commits August 16, 2026 22:06
…UPDATING.md

Restructures the README around what an AI support or administering agent needs
to answer questions about a running install — layout, file models, actions with
their cost and repeat-safety, tasks, limits — and documents `modelSelection` and
the Set Model prefill in that structure.

Corrects the preset default while in there: `models.find` returns the first
entry that fits and the list runs smallest-first, so the form defaults to the
smallest preset that fits, not the largest.

AGENTS.md drops the "Inspecting a running install" section, which now lives in
the shared packaging guide.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… placeholders

The two i18n files were the only unformatted files in `startos` — `prettier --check`
was red on master. Both are now byte-for-byte `prettier --write` output of what
was committed, so no key text moved and no dictionary index shifted.

syncNext.yml matches the copy every other package in the registry carries.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@MattDHill MattDHill changed the title feat(setModel): remember selection; bump llama.cpp to b10450 feat(setModel): remember selection; bump llama.cpp to b10450; refresh docs Aug 17, 2026
@MattDHill

Copy link
Copy Markdown
Member

Pushed the maintainer-side docs and housekeeping that had been sitting uncommitted, so this PR carries the whole release.

  • README rewritten as a technical reference for an AI support or administering agent — layout, file models, actions with cost and repeat-safety, tasks, limits. modelSelection and the Set Model prefill are documented in that structure rather than as an appended paragraph. It also corrects a claim that predates this PR: models.find returns the first preset that fits and the list runs smallest-first, so the form's fallback default is the smallest preset that fits, not the largest.
  • AGENTS.md / UPDATING.md refreshed; syncNext.yml added to match the rest of the registry.
  • The two i18n dictionaries are now formatted. They were the only unformatted files under startos/prettier --check was red on master before this. Both are byte-for-byte prettier --write output of what was already committed, verified so that no key text moved and no dictionary index shifted out from under translations.ts.

tsc --noEmit is green and prettier --check is now clean across startos/ and the markdown, which it was not on master.

@MattDHill
MattDHill merged commit 581c95f into Start9Labs:master Aug 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants