lllm3090.panel#
The control panel: a loopback-only web UI for starting, stopping and downloading models.
Binds 127.0.0.1 by design. These endpoints start processes and write to disk
with no authentication, so reach it remotely with an SSH tunnel
(ssh -L 8080:127.0.0.1:8080 host) rather than by binding a LAN address.
- lllm3090.panel.lifespan(_: FastAPI)[source]#
Pick up anything a previous panel process left half-downloaded.
- async lllm3090.panel.start(model: str, ctx: int | None = None, parallel: int | None = None)[source]#
- async lllm3090.panel.select_engine(engine_id: str | None = None)[source]#
Choose which backend serves from the next start onwards.
Deliberately not a restart. A running engine has its binary open and goes on serving from it whatever this writes, so switching and reloading are two decisions: the second costs minutes of load time and the VRAM of whatever is answering right now. The response says which one is still needed.
- lllm3090.panel.clear_logs()[source]#
Empty the engine log, leaving the engine writing to it alone.
Truncated rather than rotated or deleted. The engine holds this file open for the life of the process, so a rename would send its output to a file nothing is reading, and an unlink would send it nowhere at all.
lllm3090.engine.start()opens the logO_APPENDfor the same reason – the next line the engine writes lands at the beginning of the emptied file rather than at the offset it had reached.The tailer notices the file has shrunk and emits
rotated, which is already what tells the browser to clear the pane it is showing.