Part VI, Reference
29Environment and configuration reference
TandemLLM reads four families of settings. Engine switches are QWEN38_* variables, read through one registry. Server settings are command-line flags (Chapter 28); ops/start.sh builds them from ops/serve.env, and a few QSE_* variables set flags’ defaults or serve the scripts. The proxy, the collector and the plugins read TANDEM_* variables. And the conductor’s behaviour lives in its versioned documents, which the dashboard edits.
29.1 The served profile
ops/serve.env is the served configuration. On an installed engine it is ~/TandemLLM/run/ops/serve.env, rewritten by every run of the installer, and local.env beside it is read last for your own values.
| Key | Value | Kind |
|---|---|---|
HOME_ | (a path) | read by ops/start.sh |
REPO | (a path) | read by ops/start.sh |
PY | (a path) | read by ops/start.sh |
PYTHONPATH | (a path) | read by ops/start.sh |
HOST | 0.0.0.0 | read by ops/start.sh |
PORT | 8000 | read by ops/start.sh |
SERVED_ | qwen38- | read by ops/start.sh |
NV | (a path) | read by ops/start.sh |
HEAD | (a path) | read by ops/start.sh |
CKPT8 | (a path) | read by ops/start.sh |
CKPT16 | (a path) | read by ops/start.sh |
CORPUS | (a path) | read by ops/start.sh |
MAX_ | 262144 | read by ops/start.sh |
DEFAULT_ | 32768 | read by ops/start.sh |
PATTERN_ | (empty) | read by ops/start.sh |
CONDUCTOR | on | read by ops/start.sh |
REASONING_ | tags | read by ops/start.sh |
REASONING_ | medium | read by ops/start.sh |
LEN_ | 0 | read by ops/start.sh |
LEN_ | 1 | read by ops/start.sh |
BUDGET | 16 | read by ops/start.sh |
MEM_ | 70 | read by ops/start.sh |
MEM_ | 77 | read by ops/start.sh |
RESERVE_ | 2 | read by ops/start.sh |
RESIDENT_ | 2.5 | read by ops/start.sh |
RESIDENT_ | 1.0 | read by ops/start.sh |
RESIDENT_ | 8192 | read by ops/start.sh |
RESIDENT_ | 4.0 | read by ops/start.sh |
RESIDENT_ | 4 | read by ops/start.sh |
CACHE_ | 2 | read by ops/start.sh |
STORE_ | 1 | read by ops/start.sh |
NARROW_ | 1 | read by ops/start.sh |
END_ | on | read by ops/start.sh |
END_ | on | read by ops/start.sh |
DROP_ | 1 | read by ops/start.sh |
REQUEST_ | 3600 | read by ops/start.sh |
MAX_ | 8 | read by ops/start.sh |
QUEUE_ | 240 | read by ops/start.sh |
FUSE_ | 0 | read by ops/start.sh |
QWEN38_ | nodes | engine switch |
QWEN38_ | 0 | engine switch |
DROP_ | 1 | read by ops/start.sh |
QWEN38_ | 0.3 | engine switch |
SAMPLED_ | det | read by ops/start.sh |
QWEN38_ | 1 | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | 1025 | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | (a path) | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | 16 | engine switch |
QWEN38_ | 8: | engine switch |
QWEN38_ | 32 | engine switch |
QWEN38_ | (a path) | engine switch |
QWEN38_ | 24 | engine switch |
QWEN38_ | 32 | engine switch |
QWEN38_ | 32 | engine switch |
QWEN38_ | 2 | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | wide | engine switch |
QWEN38_ | (a path) | engine switch |
QWEN38_ | (a path) | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | 1 | engine switch |
QSE_ | (a path) | server setting |
QSE_ | (a path) | server setting |
QSE_ | (empty) | server setting |
QSE_ | 1 | server setting |
QSE_ | 65536 | server setting |
QSE_ | 15 | server setting |
QWEN38_ | 32 | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | 1 | engine switch |
QWEN38_ | 16 | engine switch |
QWEN38_ | 16 | engine switch |
QWEN38_ | 16 | engine switch |
LIVE_ | on | read by ops/start.sh |
QSE_ | off | server setting |
ROLES_ | (empty) | read by ops/start.sh |
QWEN38_ | (empty) | engine switch |
QWEN38_ | (a path) | engine switch |
QWEN38_ | (empty) | engine switch |
QWEN38_ | (empty) | engine switch |
QWEN38_ | (empty) | engine switch |
QWEN38_ | (empty) | engine switch |
QWEN38_ | 4 | engine switch |
QWEN38_ | 512 | engine switch |
QWEN38_ | auto | engine switch |
QWEN38_ | 20 | engine switch |
QWEN38_ | off | engine switch |
QWEN38_ | (a path) | engine switch |
QSE_ | (a path) | server setting |
SESSION_ | on | read by ops/start.sh |
SESSION_ | 64 | read by ops/start.sh |
SESSION_ | zstd | read by ops/start.sh |
DISK_ | 200 | read by ops/start.sh |
VISION | on | read by ops/start.sh |
RESPONSE_ | off | read by ops/start.sh |
QSE_ | (empty) | server setting |
QSE_ | (a path) | server setting |
QSE_ | (a path) | server setting |
29.2 Engine switches
engine/settings.py lists every engine switch with its default and the module that reads it; tests/test_settings.py fails when a module reads one another way. The table shows each switch, its code default, and the value the served profile sets when it sets one.
| Variable | Code default | Served value • read in |
|---|---|---|
QWEN38_ | 1 | tools/ |
QWEN38_ | 0 | server/ |
QWEN38_ | note | server/ |
QWEN38_ | *= | server/ |
QWEN38_ | 0 | 1 • engine/ |
QWEN38_ | model | server/ |
QWEN38_ | none | engine/ |
QWEN38_ | call | server/ |
QWEN38_ | auto | server/ |
QWEN38_ | ~/ | (a path) • server/ |
QWEN38_ | 64 | server/ |
QWEN38_ | 256 | server/ |
QWEN38_ | none | server/ |
QWEN38_ | 2 | server/ |
QWEN38_ | 0 | 1 • engine/ |
QWEN38_ | 0 | 32 • server/ |
QWEN38_ | 2 | 2 • server/ |
QWEN38_ | 1.0 | engine/ |
QWEN38_ | paths | nodes • engine/ |
QWEN38_ | none | engine/ |
QWEN38_ | none | engine/ |
QWEN38_ | 0 | 1 • engine/ |
QWEN38_ | 0 | 1 • engine/ |
QWEN38_ | none | engine/ |
QWEN38_ | none | engine/ |
QWEN38_ | 0 | engine/ |
QWEN38_ | 0 | 1 • engine/ |
QWEN38_ | 1.0 | 0.3 • engine/ |
QWEN38_ | none | engine/ |
QWEN38_ | none | engine/ |
QWEN38_ | on | server/ |
QWEN38_ | on | server/ |
QWEN38_ | none | engine/ |
QWEN38_ | 128 | tools/ |
QWEN38_ | 1 | engine/ |
QWEN38_ | 1 | tools/ |
QWEN38_ | 1 | tools/ |
QWEN38_ | 0 | tools/ |
QWEN38_ | 3 | tools/ |
QWEN38_ | none | tools/ |
QWEN38_ | 0 | engine/ |
QWEN38_ | 32768 | engine/ |
QWEN38_ | 1 | engine/ |
QWEN38_ | 1 | engine/ |
QWEN38_ | 1 | tools/ |
QWEN38_ | 0 | engine/ |
QWEN38_ | int8 | engine/ |
QWEN38_ | 3 | tools/ |
QWEN38_ | 4 | tools/ |
QWEN38_ | 1 | tools/ |
QWEN38_ | kernels | engine/ |
QWEN38_ | 4096 | engine/ |
QWEN38_ | fp32 | tools/ |
QWEN38_ | warm | engine/ |
QWEN38_ | 2 | engine/ |
QWEN38_ | 1 | engine/ |
QWEN38_ | none | engine/ |
QWEN38_ | none | tools/ |
QWEN38_ | 0 | 1 • engine/ |
QWEN38_ | 0 | engine/ |
QWEN38_ | 0 | engine/ |
QWEN38_ | 0 | 1 • engine/ |
QWEN38_ | 1 | engine/ |
QWEN38_ | 1 | engine/ |
QWEN38_ | 1 | engine/ |
QWEN38_ | 0 | 1 • engine/ |
QWEN38_ | 1 | engine/ |
QWEN38_ | 0 | 1 • engine/ |
QWEN38_ | 1 | engine/ |
QWEN38_ | 1 | engine/ |
QWEN38_ | 0 | tools/ |
QWEN38_ | 16 | tools/ |
QWEN38_ | 256 | 32 • tools/ |
QWEN38_ | 4 | 1 • tools/ |
QWEN38_ | 0 | 1 • tools/ |
QWEN38_ | 0 | tools/ |
QWEN38_ | 4 | tools/ |
QWEN38_ | 0 | 1 • tools/ |
QWEN38_ | 32 | 16 • tools/ |
QWEN38_ | 0 | 1 • tools/ |
QWEN38_ | 32 | 16 • tools/ |
QWEN38_ | 0 | tools/ |
QWEN38_ | 32 | 16 • tools/ |
QWEN38_ | 0 | engine/ |
QWEN38_ | 64 | engine/ |
QWEN38_ | fp32 | engine/ |
QWEN38_ | 64 | engine/ |
QWEN38_ | 32 | tools/ |
QWEN38_ | 0 | engine/ |
QWEN38_ | bf16x3 | tools/ |
QWEN38_ | tf32 | tools/ |
QWEN38_ | none | tools/ |
QWEN38_ | 0 | tools/ |
QWEN38_ | 1 | tools/ |
QWEN38_ | 8 | tools/ |
QWEN38_ | 8 | tools/ |
QWEN38_ | 64 | engine/ |
QWEN38_ | 32768 | engine/ |
QWEN38_ | none | tools/ |
QWEN38_ | 0 | engine/ |
QWEN38_ | 0 | 1 • engine/ |
QWEN38_ | 0 | engine/ |
QWEN38_ | 0 | engine/ |
QWEN38_ | 0 | server/ |
QWEN38_ | none | wide • engine/ |
QWEN38_ | 0 | 1 • engine/ |
QWEN38_ | 64 | engine/ |
QWEN38_ | none | server/ |
QWEN38_ | none | server/ |
QWEN38_ | none | engine/ |
QWEN38_ | none | server/ |
QWEN38_ | auto | server/ |
QWEN38_ | none | server/ |
QWEN38_ | none | server/ |
QWEN38_ | on | server/ |
QWEN38_ | parts | server/ |
QWEN38_ | none | engine/ |
QWEN38_ | 0 | tools/ |
QWEN38_ | 512 | tools/ |
QWEN38_ | 0 | 1 • tools/ |
QWEN38_ | 1024 | 1025 • tools/ |
QWEN38_ | 0 | 1 • tools/ |
QWEN38_ | 0 | tools/ |
QWEN38_ | 1 | tools/ |
QWEN38_ | 0 | tools/ |
QWEN38_ | 1 | tools/ |
QWEN38_ | 32 | tools/ |
QWEN38_ | 1 | tools/ |
QWEN38_ | 0 | tools/ |
QWEN38_ | 0 | tools/ |
QWEN38_ | 1 | engine/ |
QWEN38_ | 8192 | engine/ |
QWEN38_ | 32768 | engine/ |
QWEN38_ | 100 | server/ |
QWEN38_ | ~/ | (a path) • server/ |
QWEN38_ | 1024 | server/ |
QWEN38_ | off | off • server/ |
QWEN38_ | 1 | engine/ |
QWEN38_ | sample | server/ |
QWEN38_ | 0.7 | server/ |
QWEN38_ | 20 | server/ |
QWEN38_ | 0.95 | server/ |
QWEN38_ | 8192 | server/ |
QWEN38_ | 0 | engine/ |
QWEN38_ | 1 | engine/ |
QWEN38_ | 1 | engine/ |
QWEN38_ | 1024 | engine/ |
QWEN38_ | weight | tools/ |
QWEN38_ | on | server/ |
QWEN38_ | none | server/ |
QWEN38_ | none | auto • server/ |
QWEN38_ | 20 | 20 • server/ |
QWEN38_ | 4 | 4 • server/ |
QWEN38_ | 512 | 512 • server/ |
QWEN38_ | none | server/ |
QWEN38_ | 2 | server/ |
QWEN38_ | on | server/ |
QWEN38_ | view | server/ |
QWEN38_ | on | server/ |
QWEN38_ | read | server/ |
QWEN38_ | on | server/ |
QWEN38_ | 10 | server/ |
QWEN38_ | 16384 | server/ |
QWEN38_ | on | server/ |
QWEN38_ | 20 | server/ |
QWEN38_ | 0.5 | server/ |
QWEN38_ | 3 | server/ |
QWEN38_ | 1.0 | server/ |
QWEN38_ | 0 | tools/ |
QWEN38_ | 0 | tools/ |
QWEN38_ | 0 | 1 • tools/ |
QWEN38_ | 0 | tools/ |
QWEN38_ | none | (a path) • tools/ |
QWEN38_ | none | tools/ |
QWEN38_ | none | tools/ |
QWEN38_ | none | (a path) • tools/ |
QWEN38_ | none | tools/ |
QWEN38_ | 0 | tools/ |
QWEN38_ | on | engine/ |
QWEN38_ | none | engine/ |
QWEN38_ | none | (a path) • engine/ |
QWEN38_ | 0 | 1 • engine/ |
QWEN38_ | none | (a path) • engine/ |
QWEN38_ | open- | server/ |
QWEN38_ | ~/ | server/ |
QWEN38_ | none | server/ |
QWEN38_ | none | server/ |
QWEN38_ | on | server/ |
QWEN38_ | 0 | 0 • engine/ |
QWEN38_ | 1 | engine/ |
QWEN38_ | 0 | 1 • engine/ |
QWEN38_ | none | 8: • engine/ |
QWEN38_ | 0 | 24 • engine/ |
QWEN38_ | 0 | 16 • engine/ |
QWEN38_ | 0 | 32 • engine/ |
QWEN38_ | 0 | engine/ |
QWEN38_ | 1 | engine/ |
QWEN38_ | 0 | 1 • engine/ |
QWEN38_ | 16 | 32 • engine/ |
QWEN38_ | 1 | tools/ |
QWEN38_ | 2600 | server/ |
QWEN38_ | 8 | tools/ |
QWEN38_ | 32 | tools/ |
QWEN38_ | 0 | tools/ |
QWEN38_ | ieee | tools/ |
QWEN38_ | 4 | tools/ |
QWEN38_ | 4 | tools/ |
29.3 Server variables
| Variable | Read in |
|---|---|
QSE_ | ops/ |
QSE_ | server/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | server/ |
QSE_ | server/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | server/ |
QSE_ | server/ |
QSE_ | server/ |
QSE_ | server/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | server/ |
QSE_ | ops/ |
QSE_ | server/ |
QSE_ | engine/ |
QSE_ | engine/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | server/ |
QSE_ | server/ |
QSE_ | server/ |
QSE_ | engine/ |
QSE_ | server/ |
QSE_ | server/ |
QSE_ | server/ |
QSE_ | server/ |
QSE_ | server/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | server/ |
QSE_ | server/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | install.sh, |
QSE_ | server/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | server/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | proxy/ |
QSE_ | server/ |
QSE_ | install.sh, |
QSE_ | engine/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | ops/ |
QSE_ | server/ |
The most used: QSE_CONDUCTOR_CONFIG, QSE_USAGE_LEDGER, QSE_DISK_CACHE and QSE_BACKENDS name the conductor’s directory, the ledger, the disk tier’s directory and the proxy’s config database; ops/start.sh passes them to the service only, so a benchmark server started with serve.env exported never writes them. QSE_DASHBOARD_LOGIN turns the dashboard login on. QSE_ADMIN_TOKEN and QSE_METRICS_TOKEN live in secrets.env, which ops/make-secrets.sh writes.
29.4 Proxy, collector and plugin variables
| Variable | Example | What it sets |
|---|---|---|
TANDEM_ | deepseek, | the backends the environment declares |
TANDEM_ | deepseek | generic | tandemllm | vllm | sglang | openai | deepseek |
TANDEM_ | https: | |
TANDEM_ | (a key) | held in memory, never stored |
TANDEM_ | DeepSeek | |
TANDEM_ | deepseek- | |
TANDEM_ | discover | discover (GET /models, plus MODELS) | list |
TANDEM_ | openrouter | backends tried after this one, in order |
TANDEM_ | none | requests at once, past it a fallback or a 503; none (the default): no limit from the proxy, the backend takes what it accepts |
TANDEM_ | 1 | |
TANDEM_ | 1 | ask a stream for its usage frame |
TANDEM_ | off | off | shadow | on |
TANDEM_ | coding | the conductor profile of its requests |
TANDEM_ | auto | the background memory writer on this backend (proxy/memwriter.py): auto (on, off for a paid cloud model) | off | shadow | on |
TANDEM_ | 0.25 | its spend cap a day on a paid model |
TANDEM_ | 48 | its runs a day |
TANDEM_ | 32000 | its prompt at most (older messages dropped) |
TANDEM_ | 10 | seconds; also _TIMEOUT_FIRST_BYTE, _TIMEOUT_IDLE |
TANDEM_ | auto | where the System view reads the backend’s machine: auto (this machine when the URL is), same, collector, exporter, off |
TANDEM_ | (a URL) | the remote collector (python -m proxy.hostcollect), or a node_exporter page |
TANDEM_ | (a URL) | a DCGM exporter page (mode exporter) |
TANDEM_ | ... | the remote collectors’ bearer token, in memory only (proxy/hostcollect.py) |
TANDEM_ | gpt- | routing rules, ordered by n |
TANDEM_ | deepseek/ | USD per million: input, cached input, output, and optionally cache write |
TANDEM_ | 0.15, | the same model outside the provider’s peak hours (DeepSeek) |
TANDEM_ | (a key) | the proxy’s own keys, in memory only |
TANDEM_ | <base64 | of 32 bytes> the master key (proxy/secrets.py) |
TANDEM_ | read in ops/ | |
TANDEM_ | read in ops/ | |
TANDEM_ | read in ops/ | |
TANDEM_ | read in ops/ | |
TANDEM_ | read in ops/ | |
TANDEM_ | read in ops/ | |
TANDEM_ | read in ops/ | |
TANDEM_ | read in ops/ | |
TANDEM_ | read in ops/ | |
TANDEM_ | read in ops/ | |
TANDEM_ | read in ops/ | |
TANDEM_ | read in ops/ | |
TANDEM_ | read in proxy/ | |
TANDEM_ | read in proxy/ | |
TANDEM_ | read in plugins/ | |
TANDEM_ | read in plugins/ | |
TANDEM_ | read in proxy/ | |
TANDEM_ | read in ops/ | |
TANDEM_ | read in ops/ | |
TANDEM_ | read in install.sh | |
TANDEM_ | read in install.sh | |
TANDEM_ | read in install.sh, | |
TANDEM_ | read in install.sh | |
TANDEM_ | read in install.sh | |
TANDEM_ | read in server/ | |
TANDEM_ | read in install.sh, | |
TANDEM_ | read in ops/ | |
TANDEM_ | read in ops/ | |
TANDEM_ | read in install.sh | |
TANDEM_ | read in install.sh | |
TANDEM_ | read in ops/ | |
TANDEM_ | read in server/ | |
TANDEM_ | read in install.sh | |
TANDEM_ | read in server/ | |
TANDEM_ | read in ops/ |
29.5 The conductor’s documents
| document | what it holds | edited on |
|---|---|---|
profiles | one document per profile: mode, decisions, task modes and caps, thinking, ui, outcomes, library, memory, shadow | Profiles |
router | the classes and their policy, the classifier stages and thresholds, the structural rules, side shapes, outcomes, library | Routing |
packages | every package: source, switch, limits, flags | Packages |
roles | every role’s contract | Profiles, Roles |
settings | the default profile, transcripts, the disk tier, memory notes and the writer | Memory, Profiles |
deciders | the decision models, their questions, Laya for scripts | Deciders |
residency | the floor, the margin, the settle time, the load order, the claims | Profiles, Residency |
monitor | the session monitor’s policy (version 0 is ops/supervisor.yaml) | Monitor |
harness | the harness’s settings per backend, behind the proxy | Backends |
A document is JSON, checked against the conductor’s schema (GET /v1/conductor/meta serves it, and docs/contract/conductor-v1/ holds a copy). A version stored by an older release loads with defaults for every field it lacks, and the journal says so once.