Skip to content

Configuration Reference

Every aistack environment variable, organised by feature domain. The Default column shows the value applied when the variable is unset (or set to a value the parser cannot decode). The Effect column is the inline comment from the source dataclass field — concise by design; for design rationale (why the default is what it is, when to deviate), see the configuration narrative.

aistack reads configuration once at process start. Changing an env variable after the worker is up requires a restart. The three observability toggles (metrics / access_log / payload) are the only exception — they can also be flipped live from the /admin dashboard, but that is session-only and not persisted.

Idle eviction policy for the global model cache.

Env variableTypeDefaultEffect
AISTACK_MODEL_KEEP_ALIVE_SECfloat300.0idle seconds before a loaded model is unloaded
AISTACK_MODEL_SCAN_INTERVAL_SECfloat60.0how often the eviction sweeper runs

Source: aistack/config.pyModelCacheConfig.from_env() (line 76)

Attention mode + long-audio chunking knobs for Parakeet TDT.

Env variableTypeDefaultEffect
AISTACK_PARAKEET_ATTENTION_MODEstring"local"’local’ = O(N) memory; ‘full’ = O(N²), OOMs on 8 GB cards past ~2-3 min
AISTACK_PARAKEET_ATT_CONTEXT_SIZEstring"256,256"local-attention left/right context, ’,’ frames at 80 ms each
AISTACK_PARAKEET_CHUNK_DISABLEboolfalseset true to feed audio whole — useful on big GPUs that don’t need chunking
AISTACK_PARAKEET_CHUNK_WINDOW_SECfloat720.0length of each chunk in seconds (default 720 = 12 min)
AISTACK_PARAKEET_CHUNK_OVERLAP_SECfloat120.0seconds shared between adjacent chunks (default 120 = 2 min)
AISTACK_PARAKEET_CHUNK_MIN_LAST_SECfloat300.0if the natural last chunk is shorter than this, merge it into the previous

Source: aistack/config.pyParakeetConfig.from_env() (line 92)

Where local LLM / TTS daemons live.

Env variableTypeDefaultEffect
AISTACK_OLLAMA_URLstring"http://127.0.0.1:11434"base URL of the local Ollama daemon for /v1/chat/completions
AISTACK_QWEN3_TTS_UPSTREAMstring"http://127.0.0.1:17860"base URL of the vLLM-Omni Qwen3-TTS container for /v1/audio/*

Source: aistack/config.pyBackendsConfig.from_env() (line 116)

Static observability config — paths and budgets.

Boot-time defaults for the three runtime-mutable toggles (metrics / access_log / payload) live here too; the actual mutable state is in aistack.observability.config because admin POST flips it at runtime.

Env variableTypeDefaultEffect
AISTACK_OBS_METRICSbooltrueboot-time default for the metrics toggle (rolling histograms; ~5 µs/req)
AISTACK_OBS_ACCESS_LOGbooltrueboot-time default for the access_log toggle (one JSONL line per request)
AISTACK_OBS_PAYLOADboolfalseboot-time default for the payload toggle (request/response bytes to disk; off by default — bytes are large + may be sensitive)
AISTACK_OBS_PAYLOAD_MAX_GBfloat5.0total disk budget for payload capture (oldest-first sweep when exceeded)
AISTACK_OBS_PAYLOAD_MAX_DAYSint7age budget for payload capture in days (older trees deleted)
AISTACK_OBS_PAYLOAD_RESP_MAX_MBfloat50.0per-response cap for streaming bodies; over-cap responses save metadata only
AISTACK_OBS_METRICS_WINDOW_MINint60rolling window the metrics percentiles cover (in seconds)

Source: aistack/config.pyObservabilityConfig.from_env() (line 146)

These env vars are read inside helper functions in aistack/config.py, not directly inside a from_env classmethod, because their default behaviour cascades over multiple env vars. The Default column shows the literal default; the Resolver column points at the helper function that decides the cascade order.

Env variableTypeDefaultResolver
AISTACK_OBS_PAYLOAD_DIRstring<see _default_payload_dir>_default_payload_dir
HF_HOMEstring<see _default_payload_dir>_default_payload_dir
AISTACK_OBS_LOG_DIRstring"./logs"_default_log_dir