lllm3090.cli#
The lllm3090 command.
- lllm3090.cli.doctor() None[source]#
Check this machine can run the stack, and say precisely what is missing.
- lllm3090.cli.install_engine(force: bool = <typer.models.OptionInfo object>) None[source]#
Fetch and verify the pinned llama.cpp build.
- lllm3090.cli.bench(model: str = <typer.models.ArgumentInfo object>) None[source]#
Benchmark a model with llama-bench and print a profile contribution.
The catalogue’s speeds are measurements, never extrapolations, so a card other than the one they were taken on has no numbers until somebody runs this on it. The output is meant to be pasted into an issue.
- lllm3090.cli.start(model: str = <typer.models.ArgumentInfo object>, ctx: int = <typer.models.OptionInfo object>, parallel: int = <typer.models.OptionInfo object>) None[source]#
Start the engine on an installed model.
- lllm3090.cli.setup(yes: bool = <typer.models.OptionInfo object>, service: bool = <typer.models.OptionInfo object>) None[source]#
Prepare this machine: system packages, engine, and the panel service.
Everything
uv tool installcannot do for itself. Safe to re-run – each step is skipped when it is already done.
- lllm3090.cli.install_service(enable: bool = <typer.models.OptionInfo object>) None[source]#
Write the systemd user unit for the panel, and start it.
Lives here rather than in the installer so that installing from PyPI – where there is no checkout to copy a unit file out of – works identically.
- lllm3090.cli.panel(port: int = <typer.models.OptionInfo object>) None[source]#
Run the control panel.
- lllm3090.cli.tui(url: str = <typer.models.OptionInfo object>) None[source]#
The control panel on a text console, for a machine with no browser.
Drives the panel over HTTP when it is running, and falls back to this process for everything that has a local answer – which is all of it except downloading, since that is state the panel owns.
- lllm3090.cli.claude_env(model: str, window: int, slots: int | None = None) dict[str, str][source]#
The environment Claude Code is launched with, in one place.
Claude Code’s variables are not a versioned contract: a release can add one, rename one, or start reading one that is currently ignored. Nothing can be done about that from here – moving these strings into a data file would change where they are written, not whether they still match – so what this does instead is make the whole mapping one value that can be printed, diffed and tested.
lllm3090 claude --print-envprints exactly this, which is how you check it against a new Claude Code without running a session to find out.All three model slots point at the local model deliberately: switching with
/modelinside that session then stays local rather than falling back to the paid API.slotsis what the engine says it can hold at once, fromlllm3090.engine.served_slots().Nonemeans it would not say, and the pool this project starts by default is assumed.
- lllm3090.cli.CLAUDE_UNSET = 'ANTHROPIC_API_KEY'#
Removed rather than blanked when Claude Code is launched. An empty ANTHROPIC_API_KEY still counts as set, which makes Claude Code disable its claude.ai connectors and say so on every launch.
- lllm3090.cli.claude(ctx: Context, force: bool = <typer.models.OptionInfo object>, print_env: bool = <typer.models.OptionInfo object>) None[source]#
Launch Claude Code against the local engine.
Sets Anthropic environment variables for one subprocess only – nothing is written to ~/.claude/settings.json, so a plain
claudeelsewhere still reaches Anthropic on your normal account.