Configuration

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:

DECIDEALOT_MCP_ALLOWED_HOSTS=127.0.0.1,127.0.0.1:*,localhost,localhost:*,[::1],[::1]:*,decidealot,decidealot:*
DECIDEALOT_MCP_ALLOWED_ORIGINS=http://127.0.0.1:*,http://localhost:*,http://[::1]:*

Local providers and lifecycle

Variable Default Meaning
DECIDEALOT_LAYA_ENABLED true Download and expose Laya selectors.
DECIDEALOT_VON_ENABLED true Download and expose Von selectors.
DECIDEALOT_PROVIDER_IDLE_UNLOAD_SECONDS 600 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.