Skip to content

launcher: pick a model and its settings in one window (experimental) - #1092

Closed
pipeob0 wants to merge 3 commits into
Niko1221:mainfrom
pipeob0:feature/launcher-newmain
Closed

pipeob0 wants to merge 3 commits into
Niko1221:mainfrom
pipeob0:feature/launcher-newmain

Conversation

@pipeob0

@pipeob0 pipeob0 commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Experimental - please read first

The launcher is experimental: it is a new surface over setup.py and serve/server.py, it has been run on one PC (Windows 11, RTX 5060 Ti 16 GB, Ryzen 7 5700X3D, 64 GB, engine 0.1.39; the suites below were run on top of the new main), and it will have bugs. What has not been exercised: Linux (./launcher.sh is written and marked executable but never run on a Linux box), AMD/ROCm, several GPUs on one model, WSL, and a preset saved by an older version of the page (the presets file has no schema version yet). Nothing it does goes outside this PC, and nothing it does is impossible for SETUP.bat / run-<model>.bat to do; the only files it writes of its own are in .strata-launcher/. Treat it as a preview, not as a replacement for the scripts.

Also AI-developed: written by an agent (pi) running on Strata's own local model (qwen3.8-flash-next-iq3_s), reviewed and tested by hand on the PC above - see the AI-developed: trailer on each commit.

This is #946 on the new main

#946 was closed by the history cleanup (force-pushed main), not by a review - see the maintainer's note. This branch is the same 3 commits cherry-picked onto the new main: no conflicts, 30 files, +3443/-14, launcher.sh executable.

#945 is yours and is in main, with your kv_streaming_wanted (the k8v4 change included). The launcher calls that function; it keeps no copy of the rule. Your k8v4 change caught one of our labels - the page said k8v4 "does not stream its KV cache", true of 0.1.39 and not of 0.1.40 (#711) - so the label follows setup and a test reads setup's rule for each KV precision and fails if a label claims a streaming setup does not write.

55 launcher tests + 44 setup tests green on top of the new main, with no GPU, no download and no display:

python -m unittest launcher.test_presets launcher.test_api      # 25 + 30
python -m unittest tools.test_setup_risk tools.test_setup_golden # 44

What it is

LAUNCHER.bat (Linux: ./launcher.sh) serves a page on 127.0.0.1 for the case START-HERE.bat is not meant for: "the Coder today with 32K, leaving 2 GB of VRAM for the game", without remembering flags. It shows the sizes setup offers and what each needs on this PC, the models this folder has and what their own strata-<model>.json says they run with, presets you save and reuse, and setup's --calibrate as a job you can watch and stop.

the launcher page: the models on this PC and the saved presets on the left, the preset's own fields in the middle, what the selected model runs with on the right

(The same file is in the PR at docs/media/launcher.png; docs/LAUNCHER.md shows it too.)

A front-end, not a second engine: every answer comes from tools/strata_mcp.py, the controller the MCP server already uses; installing, applying and starting run setup.py and serve/server.py the way SETUP.bat and run-<model>.bat do. No second config format, no second install path, no dependency beyond the standard library, and setup.py / START-HERE.bat do not change: if you never open the launcher, nothing about your install changes.

A preset is setup's own choices with a name: each field names the setup.py flag it writes, and a field left empty is not passed so this PC's default decides - that is what makes a preset portable to another machine. Starting a preset applies it first when the model's config differs, and that difference is compared with what setup's rules decide, not with the words: a preset saying auto, or saying what auto decides on this PC, is the model as it runs and never re-runs setup to change nothing.

If you want less of it

Say the word and I send the cut-down version: the model list plus presets only - the presets commit on its own is 3 files, +737 - no calibration job, no connect card, no install panel. The parts I would drop first are the calibration job and the connect card; the page's middle column is the launcher's reason for existing.

Relation to the open work

  • Gui settings #564 asked for a GUI for settings; it was closed with the Model settings card in the web app (0.1.39). The launcher overlaps that card on one setting only (--vram-reserve-mib): the web app exists once a model is running, the launcher is for choosing and installing before anything runs.
  • Different from Add optional unified Strata Manager #434 (which re-implemented config editing and a manager) and from Add a tiny zero-dependency terminal launcher for Strata #686 (a terminal launcher): this one reuses the MCP controller and adds no engine logic of its own.
  • One bug found while testing, and the test that keeps the class of it out: Backend offered auto, which setup's --backend never took, so it reached the user as argparse's own invalid choice. The field now uses setup's own words (the empty choice writes no flag, which is also what keeps a preset portable to a PC with another card), sycl was missing and is offered, and test_no_select_offers_a_choice_setup_does_not_take reads setup's own add_argument tables and fails if the page offers a value setup does not take, or writes a flag setup does not have.

Docs

docs/LAUNCHER.md (with the screenshot), plus one line in README (and in its six translations), AGENTS.md, AI_SETUP, INSTALL, MCP_SERVER and MODELS. .gitignore gains /strata-*.json.bak, which setup's settings card leaves behind.

Known rough edges

  • One model runs at a time: the page says which one and refuses to start a second.
  • A preset made from an older config can quietly lower a setting that config had; the plan lists the differences before anything runs, but that list is only as good as what setup reads back from a config.
  • The page polls (state every few seconds, the logs every 3 s): more file reads than the scripts do, on a slow disk.
  • The page itself is English only (the docs line is translated, the UI is not).
  • No uninstall step: removing it is deleting launcher/, LAUNCHER.bat, launcher.sh and .strata-launcher/.

pipeob0 and others added 3 commits October 6, 2026 12:33
A preset is what the page shows instead of a wall of flags: the family and size, the context, the KV precision,
images and the rest of the choices setup.py takes.  Nothing here invents a setting - every field names the setup.py
flag it writes, and a field left empty is not passed at all, so this PC's default decides; that is what makes a
preset portable to another machine.  The form stops at what a person actually changes: context scaling and the draft
token subset are not offered, because setup picks them for the context it is given, and a page that shows a flag
should be a page someone can decide about.  The built-ins are not stored either: they are derived from setup's
tables and its recommendation for this PC, so a repository that adds a size adds it to the page too.  Presets are
plain JSON in .strata-launcher/presets.json, written whole or not at all (like setup's configs, Niko1221#459), so a launcher
closed half-way never leaves an empty file behind.

Sizes are read the way setup reads them: a size that names no families in its table belongs to the original model
and to its fine-tunes (setup's own default), which is what Swift 1.5's IQ2_XS and IQ3_XXS are.

Tests: 22 without a GPU or a download - the choices a user cannot make are refused with the reason, a context past
the trained one is setup's to scale, and the flags a preset writes are the flags setup would be given.

Co-Authored-By: Strata qwen3.8-flash-next-iq3_s <strata@localhost>
AI-developed: written by an agent (pi) running on Strata's own local model, qwen3.8-flash-next-iq3_s; tested by hand on an RTX 5060 Ti 16 GB / Ryzen 7 5700X3D / 64 GB PC with engine 0.1.39
…ncher.sh)

One window over a Strata folder: the sizes setup offers and what each needs on this PC, the models this folder has
and what their own strata-<model>.json says they run with, presets you save and run again, and setup's calibration as
a job you can watch and stop.  It is a front-end, not a second engine: every answer comes from tools/strata_mcp.py,
the controller the MCP server uses, and installing, applying and starting run setup.py and serve/server.py the way
SETUP.bat and run-<model>.bat do.  Nothing is downloaded or started that those cannot do, and the only files the page
writes of its own are in .strata-launcher/.  It listens on 127.0.0.1 only, the same rule the model server follows;
closing the window leaves a started model running, exactly like the start scripts.

Next to the preset the page puts what the model is on this PC, not a speed number: its own config (which is what
starting it runs), the files it misses, what setup's calibration recorded for it, and which model the server is
serving now - the last one is what makes the Start button say "Running" instead of offering a second model.

A model runs what its own config says, so starting a preset that differs applies it first: setup rewrites the config
and the files already there are only checked again.  That difference is compared with what setup's rules decide, not
with the words - a preset saying "auto", or saying what auto decides on this PC, is the model as it runs and never
re-runs setup to change nothing.

Tests: 29 with the real Strata folder but a fixed fake PC, no port answering and the launcher's state in a temporary
folder - a preset is stored and comes back, a plan carries the preset's flags once each, starting or measuring
something that is not there says so plainly, and a path cannot escape the page's folder.

Co-Authored-By: Strata qwen3.8-flash-next-iq3_s <strata@localhost>
AI-developed: written by an agent (pi) running on Strata's own local model, qwen3.8-flash-next-iq3_s; tested by hand on an RTX 5060 Ti 16 GB / Ryzen 7 5700X3D / 64 GB PC with engine 0.1.39
…ADME translations, and the .bak setup leaves stays out of git

docs/LAUNCHER.md: what the page is, what each part shows, what a preset is and what it writes, what installing over
an installed model changes, what Start does when the preset and the config differ, the calibration, and where its own
files live.  README, AGENTS.md, AI_SETUP, INSTALL, MCP_SERVER and MODELS each get the one line that points here, and
the README line goes into its six translations as the other README changes do; AGENTS.md also says that launcher/ is
a front-end over tools/strata_mcp.py and how to run its tests, so the next change there starts from the same rule.

.gitignore: setup's Model settings card (Niko1221#564) keeps the config it replaces as strata-<model>.json.bak, and that is
not source.

Co-Authored-By: Strata qwen3.8-flash-next-iq3_s <strata@localhost>
AI-developed: written by an agent (pi) running on Strata's own local model, qwen3.8-flash-next-iq3_s; tested by hand on an RTX 5060 Ti 16 GB / Ryzen 7 5700X3D / 64 GB PC with engine 0.1.39
@Niko1221

Copy link
Copy Markdown
Owner

Thanks for the pull request.

We're resetting the tracker for 0.2.0-beta. There are more than 1,300 open issues and pull requests, too many for us to review properly, so we're closing everything that isn't being worked on right now. Closed here does not mean rejected.

To reopen it takes about two minutes:

  1. Rebase on main if it no longer applies, and re-run your checks on 0.2.0-beta.
  2. Start the title with its area: [Engine], [GUI], [TUI], [Benchmark], [Docs] or [Other].
  3. Fill in the pull request template: the problem and result, and the validation (what you ran, on which revision, what you saw).
  4. Comment /reopen. A check runs and either reopens the pull request or lists what is still missing.

The rules are in CONTRIBUTING.md.

@Niko1221 Niko1221 closed this Oct 19, 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.

2 participants