LLM Workbench is a browser shell for local AI service consoles and workflow playgrounds.
The app has two kinds of surfaces:
- stable consoles for local services such as
llm-pool,tts-pool,image-pool, andtranslation-services - playgrounds for designing and testing workflows before they become a service or a permanent console
The backend is a FastAPI app. It serves the frontend from static/, proxies
service APIs on the same origin, and owns temporary workbench session state.
- Workbench Areas
- Repository Role
- Related Services
- Code Map
- Backend Contract
- Runtime Model
- Configuration
- Development
- Verification
- License
These surfaces are expected to stay. Their UI can change.
LLM Pool
Modelslists, loads, unloads, and inspectsllm-poolmodels.Text generationruns one-off prompts against loaded models.Chatruns multi-turn chat when the selected model supports it. Models without multi-turn support use a flattened prompt fallback.
TTS Pool
Modelslists, loads, unloads, and inspectstts-poolmodels.
Image Pool
Modelslists, loads, unloads, and inspectsimage-poolmodels.Image generationruns image generation and image edit requests.Trainmanages image datasets, captions images, configures LoRA training, starts training runs, and monitors progress.
Translation Services
Image translationsubmits image translation requests and inspects artifacts.Prompt Librarymanages prompts used by translation services.Regression testingcaptures and re-runs image translation fixtures.
The same pattern can host later service consoles. One likely example is TTS Services for shared voice libraries and stable generated voices.
These surfaces are useful, but may move or be extracted.
Realtime Translation / Replay & Translatereplays.pctranscript streams and inspects translation behavior.Realtime TTS / Replay & Speakreplays committed transcript segments throughtts-pool.
Icons / Colorsis an internal helper for comparing icon and color options.
This repo owns:
- the FastAPI workbench app
- the same-origin frontend shell
- service proxy routes for local AI services
- workflow UI modules under
static/src/workflows/ - replay session orchestration for current playgrounds
- prompt-library storage used by the realtime translation playground
- workbench-side image training dataset management
This repo does not own:
- LLM inference or model lifecycle internals;
llm-poolowns those - image model inference and training execution;
image-poolowns those - TTS model inference;
tts-poolowns that - image translation execution;
translation-servicesowns that - reusable realtime translation engine behavior;
realtime-translation-engineowns that
- llm-pool provides text model inference and runtime model administration.
- image-pool provides image generation, image editing, image model administration, and LoRA training execution.
tts-poolprovides TTS model inference and runtime model administration.translation-servicesprovides image translation, prompt storage, artifacts, and regression fixtures.- realtime-translation-engine provides reusable translation state and dispatch behavior.
- omniscripta
can produce
.pcreplay files from realtime transcript streams.
app/main.pycreates the FastAPI app, mounts/api, exposes websocket routes, and serves the frontend.app/router.pywires backend route groups.app/llm_pool/proxiesllm-poolmodel and admin APIs.app/tts_pool/proxiestts-poolmodel and admin APIs.app/image_pool/proxiesimage-poolmodel, LoRA, generation, editing, and training APIs. It also manages workbench-side training datasets.app/translation_services/proxies thetranslation-servicesAPI.app/prompt_testing/implements text generation and chat requests throughllm-pool.app/realtime_translation/contains the replay playground and prompt-library endpoints.app/realtime_tts/contains the TTS replay playground.promptlib/contains prompt-library storage helpers.
static/index.htmlis the browser entrypoint.static/app.jsregisters sidebar groups and workflow views.static/foundation/spa-foundation/contains the shared shell, routing, modal, and sidebar helpers.static/src/api-client.jscontains same-origin API helpers and replay websocket clients.static/src/workflows/contains the workflow views.static/css/contains shared application styling.
config/settings.jsoncontains committed defaults.config/local.jsonis ignored and can override local settings.data/realtime_translation/sample/contains sample.pcreplay files.docs/contains design notes and working observations.deploy/systemd/contains example local service wiring.tests/contains backend tests.
The frontend calls the workbench backend on the same origin. The workbench then calls the configured local service.
Main endpoint families:
| Endpoint family | Role |
|---|---|
/api/models* |
llm-pool models, admin state, load/unload, and GPU memory. |
/api/text-generation/run |
Single-turn text generation through llm-pool. |
/api/chat/run |
Chat through llm-pool. |
/api/prompts/test-translation |
Prompt rendering and test translation for the replay playground. |
/api/tts-pool/models* |
tts-pool models, admin state, load/unload, and GPU memory. |
/api/image-pool/models* |
image-pool models, admin state, load/unload, and GPU memory. |
/api/image-pool/images/* |
Image generation and image edit requests through image-pool. |
/api/image-pool/loras |
LoRA discovery for image generation. |
/api/image-pool/training/* |
Dataset management, captioning, training start/stop, and training status. |
/api/translation/* |
translation-services requests, prompts, artifacts, and regression fixtures. |
/api/replay* |
Realtime translation replay sessions. |
/api/realtime-tts/replay* |
Realtime TTS replay sessions and audio artifacts. |
/ws/replay/{session_id} |
Translation replay websocket updates. |
/ws/replay-speak/{session_id} |
TTS replay websocket updates. |
The workbench is a single FastAPI process with a static frontend.
The backend owns workbench state while a session is active. Replay state lives
in memory. Image training datasets and generated training artifacts live under
data/image_pool/, which is ignored by git.
The backend does not load AI models directly. Model inference and model lifecycle are delegated to local pool or service processes.
The sidebar is currently registered in static/app.js. Service base URLs are
already configurable. The intended direction is to move enabled sidebar groups
into settings while keeping view implementations in the frontend registry. That
would allow an installation to expose only the consoles it needs, such as an
LLM Pool-only workbench.
Committed defaults live in:
config/settings.json
Machine-local overrides can be placed in:
config/local.json
config/local.json is ignored by git.
Configured service connections:
| Settings key | Default |
|---|---|
llm_pool.base_url |
http://127.0.0.1:8011 |
tts_pool.base_url |
http://127.0.0.1:8020 |
image_pool.base_url |
http://127.0.0.1:8013 |
translation_services.base_url |
http://127.0.0.1:8030 |
Environment overrides:
| Variable | Overrides |
|---|---|
LLM_RESPONSES_API_BASE_URL |
llm_pool.base_url |
TTS_POOL_API_BASE_URL |
tts_pool.base_url |
IMAGE_POOL_API_BASE_URL |
image_pool.base_url |
TRANSLATION_SERVICES_API_BASE_URL |
translation_services.base_url |
Replay defaults also live under replay in config/settings.json.
Create an environment and install the workbench:
python3 -m venv .venv
./.venv/bin/python -m pip install -e .Install the realtime translation engine when working on replay translation:
./.venv/bin/python -m pip install -e ../realtime-translation-engineInstall test tooling if the environment does not already have it:
./.venv/bin/python -m pip install pytestRun the backend:
./.venv/bin/python -m uvicorn app.main:app --host 127.0.0.1 --port 8000Open:
http://127.0.0.1:8000/
The CLI entrypoint is also available:
./.venv/bin/python -m appRun the Python tests:
./.venv/bin/python -m pytest testsThe tests are mostly unittest-style tests and can also be run with:
./.venv/bin/python -m unittest discover -s testsThere is no JavaScript build step. If Node is installed, individual ES modules
can be syntax-checked with node --input-type=module --check, but Node is not a
declared project dependency.
Licensed under the Apache License, Version 2.0. See LICENSE.