Decidealot reads its configuration once, at startup, from DECIDEALOT_* environment variables. Pass them with --env, --env-file or your container manager; a change needs a container restart. An invalid value stops the service before it listens, with a message that names the variable (see Troubleshooting). .env.example lists the values the Compose file passes. Boolean variables accept true and false (also 1, 0, yes, no).
The container always stores local bundles under /models. Its only model storage setting is the host directory mounted there.
Access and limits
Variable
Default
Meaning
DECIDEALOT_API_KEY
empty
Optional Bearer token for every public HTTP API and MCP request except /health. Empty disables authentication.
DECIDEALOT_MAX_REQUEST_BYTES
1048576
Maximum request body size, from 1024 to 16777216. Larger bodies return 413.
DECIDEALOT_MAX_BATCH_REQUESTS
0
Optional batch item cap. 0 means no item-count cap; the body-size limit still applies. Larger batches return 422.
DECIDEALOT_MAX_BATCH_CONCURRENCY
0
Optional cap on simultaneous provider calls made by batches. 0 leaves only model and device scheduling limits.
DECIDEALOT_MCP_ALLOWED_HOSTS
loopback names and decidealot
Comma-separated Host values accepted by MCP. Add each reverse-proxy hostname here. Empty entries are refused.
DECIDEALOT_MCP_ALLOWED_ORIGINS
loopback HTTP origins
Comma-separated browser origins accepted by MCP. Add each public browser origin here. Empty entries are refused.
The MCP defaults, which a value you set replaces rather than extends:
Idle time before automatic unload, 0 to 86400. Set 0 to disable only timeout-based unloads.
DECIDEALOT_MAX_RESIDENT_LOCAL_PROVIDERS
1
Maximum resident local provider processes, from 1 to 3. CUDA inference remains serial regardless of this setting.
DECIDEALOT_PROVIDER_START_TIMEOUT_SECONDS
180
How long a starting local provider may take to answer its health check, above 0 and at most 1800.
DECIDEALOT_REQUEST_TIMEOUT_SECONDS
120
Timeout for one call to a local provider or to TypeSafe, above 0 and at most 600. A timeout returns 503.
CLM
Variable
Default
Meaning
DECIDEALOT_CLM_ENABLED
auto
Enable CLM when its embeddings URL is set. Use true to require it or false to skip it.
DECIDEALOT_CLM_EMBEDDINGS_URL
empty
Exact OpenAI-compatible /v1/embeddings URL used only by CLM. Required when CLM is enabled. Must be an absolute http or https URL without credentials, query or fragment.
DECIDEALOT_CLM_EMBEDDINGS_MODEL
qwen3-8b
Model selector sent to the embeddings endpoint. It must produce Qwen3-8B last-token vectors with width 4096.
DECIDEALOT_CLM_EMBEDDINGS_API_KEY
empty
Optional Bearer token sent only to the configured CLM embeddings endpoint.
DECIDEALOT_CLM_EMBEDDINGS_TIMEOUT_SECONDS
120
One CLM embeddings request timeout in seconds, above 0 and at most 600.
DECIDEALOT_CLM_CANDIDATE_CACHE_ENTRIES
1024
Candidate embedding LRU capacity, 0 to 4096. 0 disables caching.
DECIDEALOT_CLM_CANDIDATE_CACHE_TTL_SECONDS
600
Candidate vector lifetime, greater than 0 and at most 86400 seconds.
DECIDEALOT_CLM_MAX_TEXT_BYTES
8192
UTF-8 byte limit per rendered state plus instructions or candidate, 1 to 1048576. Over-limit CLM inputs return 422.
DECIDEALOT_CLM_PARALLEL_WITH_LOCAL_MODELS
false
Permit CLM and its Qwen encoder to overlap other local models. Keep false when they share this host’s resources.
Models explains the encoder requirements and the cache.
Hosted Jev
Variable
Default
Meaning
DECIDEALOT_TYPESAFE_API_KEY
empty
Private upstream Bearer key for TypeSafe’s hosted Jev API. Separate from the caller-facing DECIDEALOT_API_KEY.
DECIDEALOT_JEV_ENABLED
auto
Enable Jev when the upstream key is set. true requires a key; false hides Jev even with a key.
Logging
Variable
Default
Meaning
DECIDEALOT_LOG_LEVEL
INFO
DEBUG, INFO, WARNING or ERROR, case-insensitive.
DECIDEALOT_LOG_FILE
/tmp/decidealot.log
Absolute path of the rotating JSON log file (50 MB, five backups). Logs also go to stderr, which is what docker logs shows. In the documented read-only container, /tmp is a tmpfs.
Set by the image
The images set these, and the defaults below match them. Leave them alone unless you know why.
Variable
Image value
Meaning
DECIDEALOT_DEVICE
cpu or cuda
Torch device for local providers. Must match the image variant.
DECIDEALOT_IMAGE_VARIANT
cpu or cuda
Must match DECIDEALOT_DEVICE and the variant recorded in /etc/decidealot/image-variant.
DECIDEALOT_LISTEN_HOST
0.0.0.0
Address uvicorn binds inside the container. Docker port publishing decides where the service is reachable.
DECIDEALOT_LISTEN_PORT
8080
Port uvicorn binds, 1024 to 65535. The image healthcheck and every example assume 8080.
Compose values
docker-compose.yml reads three more variables that are not application settings:
Variable
Meaning
DECIDEALOT_MODEL_DIRECTORY
Host directory bind-mounted at /models. Required; Compose refuses to start without it.
DECIDEALOT_UID, DECIDEALOT_GID
Runtime user and group for the container process. make run passes your own id -u and id -g. Each missing value falls back to 1000.