By default, SoAI stores its active Core configuration in data/config/config.yaml, relative to the
install root. SOAI_CONFIG_PATH selects another path when set; a relative value is resolved from the
install root. Model parameters live in the
database. Each plugin keeps its own
plugins/<name>.soaiplugin.yaml sidecar, so neither belongs to the Core reference below.
Change settings in the SoAI WebUI
- Select the Settings button at the right of the header, then choose Settings.
- Select Advanced in the page header.
- Choose the tab for the first path segment, edit the field, and select Save.
- If SoAI shows a restart notice, select Restart SoAI when you are ready to apply the pending values.
The WebUI renders path segments as sentence-case labels: SYSTEM appears as the System tab and
API appears as Api. Middle segments name groups, and the last segment names the field. For
example, SYSTEM.IPC.MAX_MESSAGE_BYTES is under System, then IPC, as Max message bytes.
Search settings... finds a field by that final label or by the configuration key itself.
Searching SYSTEM.IPC.MAX_MESSAGE_BYTES filters the form down to that one field and opens the tab
holding it. Typing only the end of a key, or its segments spaced out instead of dotted, matches the same field.
The search in the header accepts those keys anywhere in the WebUI. It lists a matching key under
Configuration, and selecting the result opens Settings with that field already filtered.
Configuration keys appear in these results only for administrators with the
Configuration changes (CONFIG_PATCH) permission.
You need an administrator account with the Configuration changes (CONFIG_PATCH) permission. Fix any field
errors shown in the form before selecting Save. The WebUI sends the changed values to the Core
configuration endpoint.
The Advanced form does not display settings whose value is an empty object. Edit these four entries in
config.yaml when you need them:
API.OPENAI.RATE_LIMITING.ROUTERSMODELS.ROUTING.OWNER_RUNNING_LIMITS.PER_OWNER_TYPEMODELS.ROUTING.HEALTH_CHECKS.MAX_CONCURRENT_TASKS_PER_PLUGIN.PER_PLUGINTOOLS.MCP.BROWSER.PROFILES
What config.default.yaml contains
data/config/config.default.yaml is a generated snapshot of the current code-first V1 schema. SoAI
creates or replaces it when the file is missing or no longer matches that schema. The file records factory
defaults for comparison and startup recovery. During stage-zero startup, SoAI copies this file when the active
configuration is missing. Full bootstrap can also rebuild the active file from the same code schema. Do not edit
config.default.yaml; SoAI replaces changes that do not match the current schema.
Reset configuration
Select the Settings button at the right of the header, choose Settings,
select Reset, find Configuration, then select Reset to discard the active Core configuration and restart with factory defaults.
This action requires an administrator account with the Configuration changes (CONFIG_PATCH) permission. It
preserves users, conversations, files, models, plugins, backups, and user preferences. The WebUI reset accepts
only managed configuration files inside the installation. If SOAI_CONFIG_PATH points outside the
installation, host system actions are disabled, or the WebUI cannot load, follow the manual procedure in
Reset.
Direct editing and alternate paths
Stop SoAI before editing config.yaml by hand, then start it after saving the file. Set
SOAI_CONFIG_PATH before launch if the active file must live elsewhere. Relative values are resolved
from the install root. On startup,
SoAI validates the YAML and reconciles it with the current V1 schema. Use the WebUI for routine changes so
field errors are shown before you save.
Configuration reference
This reference lists every terminal setting supported by the current Core V1 configuration, including empty configurable objects. The defaults below are factory values, not values read from the local active configuration. Requires restart reports whether a change must wait for a SoAI process restart before it is fully applied. Configuration links elsewhere in the documentation open the matching row.
SYSTEM
| Setting | Type | Description | Factory default | Requires restart |
|---|---|---|---|---|
SYSTEM.PATHS.BASE |
String | Base directory used to resolve SoAI's relative data paths. An empty value uses the installation directory. | "" |
Yes |
SYSTEM.PATHS.SYSTEM_DATA |
String | Directory for SoAI-managed application data, resolved under the configured base path. | "data" |
Yes |
SYSTEM.PATHS.TEMP |
String | Directory for temporary files created by SoAI, resolved under the system data directory. | "temp" |
Yes |
SYSTEM.PATHS.LOCKS |
String | Directory for process and resource lock files, resolved under the system data directory. | "locks" |
Yes |
SYSTEM.PATHS.SYSTEM_ENCRYPTION_KEY |
String | Key file used to encrypt protected values, resolved under the system data directory. | "secret.key" |
Yes |
SYSTEM.RUNTIME.STAY_OFFLINE |
Boolean | Keeps SoAI from using network-dependent startup and runtime features when enabled. | false |
No |
SYSTEM.RUNTIME.HOST_SYSTEM_ACTIONS_DISABLED |
Boolean | Prevents SoAI from issuing host shutdown, restart, and similar system actions. | false |
No |
SYSTEM.RUNTIME.HARDWARE_MUTATION_DISABLED |
Boolean | Makes hardware controls read-only, including GPU power, clock, and fan changes. | false |
No |
SYSTEM.RUNTIME.STARTUP_BEEP |
Boolean | Plays two short tones after SoAI finishes starting: through the PC speaker on Linux (requires the pcspkr driver and root or CAP_SYS_TTY_CONFIG) and at low volume through the default audio device on Windows. |
true |
Yes |
SYSTEM.SECURITY.BLOCK_PRIVATE_NETWORK_EGRESS |
Boolean | Blocks protected outbound requests whose resolved destination is a private network address. | false |
Yes |
SYSTEM.SECURITY.DNS_VALIDATION_TIMEOUT_SEC |
Number | A security-related DNS lookup must finish within this many seconds. | 3.0 |
Yes |
SYSTEM.SECURITY.DNS_OVERRIDE_SERVERS |
String | Comma-separated DNS servers used by guarded outbound requests. Empty uses the host resolver. | "" |
Yes |
SYSTEM.CONFIG.POLLING_INTERVAL_MS |
Integer | Interval, in milliseconds, between checks for changes to the active configuration file. | 60000 |
Yes |
SYSTEM.IPC.MAX_MESSAGE_BYTES |
Integer | SoAI rejects an internal process communication message larger than this many bytes. | 268435456 |
Yes |
SYSTEM.SHUTDOWN.QUIESCE_PERIOD_SEC |
Integer | Graceful shutdown pauses for this many seconds while new work stops arriving. | 3 |
Yes |
SYSTEM.SHUTDOWN.SERVER_DRAIN_TIMEOUT_SEC |
Integer | Active server requests have this many seconds to finish during shutdown. | 10 |
Yes |
SYSTEM.SHUTDOWN.COMPONENT_TIMEOUT_SEC |
Integer | Default shutdown deadline, in seconds, for components without a more specific limit. | 20 |
Yes |
SYSTEM.SHUTDOWN.TASK_REGISTRY_TIMEOUT_SEC |
Integer | Registered background tasks have this many seconds to finish during shutdown. | 150 |
Yes |
SYSTEM.SHUTDOWN.ORCHESTRATOR_TIMEOUT_SEC |
Integer | During shutdown, SoAI waits this many seconds for the model orchestrator to stop. | 75 |
Yes |
SYSTEM.SHUTDOWN.MCP_TIMEOUT_SEC |
Integer | During shutdown, SoAI waits this many seconds for the MCP runtime to stop. | 60 |
Yes |
SYSTEM.SHUTDOWN.FINALIZER_TIMEOUT_SEC |
Integer | Final shutdown callbacks must complete within this many seconds. | 10 |
Yes |
SYSTEM.SHUTDOWN.FORCE_CLEANUP_TIMEOUT_SEC |
Integer | After normal shutdown deadlines expire, forced cleanup may run for this many seconds. | 5 |
Yes |
SYSTEM.SHUTDOWN.WATCHDOG_TIMEOUT_SEC |
Integer | If shutdown exceeds this many seconds, the watchdog treats it as stuck. | 1050 |
Yes |
SYSTEM.UPDATER.TIMEOUT_SEC |
Integer | Connection and routine request timeout, in seconds, used by the software updater. | 10 |
Yes |
SYSTEM.UPDATER.API_TIMEOUT_SEC |
Integer | The updater stops waiting for release information after this many seconds. | 30 |
Yes |
SYSTEM.UPDATER.DOWNLOAD_TIMEOUT_SEC |
Integer | An update archive download must finish within this many seconds. | 3600 |
Yes |
SYSTEM.UPDATER.STREAM_TIMEOUT_SEC |
Integer | A long-running updater stream must finish within this many seconds. | 7200 |
Yes |
SYSTEM.UPDATER.POST_UPDATE_HOOK_TIMEOUT_SEC |
Integer | Post-update installation hooks get this many seconds to finish. | 7200 |
Yes |
SYSTEM.UPDATER.MAX_ARCHIVE_MB |
Integer | The updater rejects an update archive larger than this many megabytes. | 2048 |
Yes |
SYSTEM.HARDWARE.ENABLED |
Boolean | Enables hardware discovery, monitoring, history, and supported device controls. | true |
Yes |
SYSTEM.HARDWARE.GPU_SETTINGS_SLOTS_PATH |
String | File for reusable GPU settings slots, resolved under the system data directory. | "gpu/gpu_settings_slots.json" |
Yes |
SYSTEM.HARDWARE.DISK_FREE_SPACE_TOLERANCE_MB |
Integer | Safety margin, in megabytes, retained when SoAI evaluates available disk space. | 750 |
Yes |
SYSTEM.HARDWARE.DISK_RESERVATION_LOCK_TIMEOUT_SEC |
Number | A disk reservation waits this many seconds to acquire its lock. | 10.0 |
Yes |
SYSTEM.HARDWARE.MONITORING_INTERVAL_MS |
Integer | Interval, in milliseconds, between live hardware metric samples. | 3000 |
Yes |
SYSTEM.HARDWARE.HARDWARE_CACHE_TTL |
Integer | SoAI reuses a general hardware snapshot for this many seconds before refreshing it. | 2 |
Yes |
SYSTEM.HARDWARE.DETAILED_GPU_INFO |
Boolean | Collects detailed GPU properties in addition to basic utilization and memory data. | true |
Yes |
SYSTEM.HARDWARE.HARDWARE_HISTORY_ENABLED |
Boolean | Stores hardware metric samples for historical charts and queries. | true |
Yes |
SYSTEM.HARDWARE.DB_RETENTION_HOURS |
Integer | Number of hours hardware history remains in the database. | 168 |
Yes |
SYSTEM.HARDWARE.VARIANT_SPEED_TEMPLATES_REQUIRE_MEASUREMENTS |
Boolean | Requires measured performance data before generating model variant speed templates. | true |
Yes |
SYSTEM.HARDWARE.GPU_INFO_CACHE_TTL_SEC |
Integer | SoAI caches detailed GPU information for this many seconds. | 1 |
Yes |
SYSTEM.HARDWARE.NETWORK_SPEED_CACHE_TTL_SEC |
Integer | SoAI caches measured network speed for this many seconds. | 5 |
Yes |
SYSTEM.HARDWARE.GPU_VENDOR_CACHE_TTL_SEC |
Integer | SoAI caches the detected GPU vendor for this many seconds. | 60 |
Yes |
SYSTEM.HARDWARE.MINIMUM_SPECS_WARNING_ENABLED |
Boolean | Shows a warning when the host falls below SoAI's minimum hardware guidance. | true |
Yes |
SYSTEM.TASKS.CANCELLATION_HISTORY_LIMIT |
Integer | The in-memory history keeps this many recent task cancellation records. | 2048 |
Yes |
SYSTEM.TASKS.CANCELLATION_LISTENER_QUEUE_SIZE |
Integer | Capacity of each task cancellation listener queue. | 1 |
Yes |
SYSTEM.TASKS.DEFAULT_TTL_SECONDS |
Integer | Default lifetime, in seconds, assigned to tasks without an explicit expiry. | 3600 |
Yes |
SYSTEM.TASKS.CLEANUP_INTERVAL_SECONDS |
Integer | Interval, in seconds, between task registry cleanup passes. | 300 |
Yes |
SYSTEM.TASKS.MEMORY_CACHE_MAX_SIZE |
Integer | The in-memory cache keeps up to this many task records. | 10000 |
Yes |
SYSTEM.TASKS.TERMINAL_CACHE_GRACE_SECONDS |
Integer | The fast cache keeps a completed, failed, or cancelled task for this many seconds. | 60 |
Yes |
SYSTEM.TASKS.STUCK_TASK_TIMEOUT_SECONDS |
Integer | SoAI marks a running task as stuck if it has not finished after this many seconds. | 3600 |
Yes |
SYSTEM.TASKS.MAX_CONCURRENT_PER_OWNER |
Integer | One task owner may have this many active tasks. | 100 |
Yes |
SYSTEM.TASKS.MAX_CONCURRENT_PER_HTTP_REQUEST |
Integer | One HTTP request may have this many active tasks. | 100 |
Yes |
SYSTEM.TASKS.MAX_CONCURRENT_PER_SYSTEM |
Integer | One system operation may have this many active tasks. | 100 |
Yes |
SYSTEM.TASKS.MAX_CONCURRENT_PER_CONVERSATION |
Integer | One conversation may have this many active tasks. | 100 |
Yes |
SYSTEM.TASKS.TASK_LIST_MAX_LIMIT |
Integer | A task-list query may request at most this many tasks per page. | 1000 |
Yes |
SYSTEM.TASKS.TASK_LIST_MAX_OFFSET |
Integer | Task-list pagination accepts offsets up to this value. | 10000 |
Yes |
SYSTEM.TASKS.ACTIVE_TASKS_LIMIT |
Integer | A task status snapshot returns up to this many active task records. | 1000 |
Yes |
SYSTEM.EVENT_BUS.QUEUE_SIZE |
Integer | The in-memory event bus queue holds up to this many waiting events. | 10000 |
Yes |
SYSTEM.EVENT_BUS.NUM_WORKERS |
Integer | Number of workers that dispatch queued in-memory events. | 8 |
Yes |
SYSTEM.EVENT_BUS.PUBLISH_TIMEOUT_SEC |
Number | A publisher waits this many seconds to place an event on a full queue. | 0.25 |
Yes |
SYSTEM.EVENT_BUS.BACKPRESSURE_WARNING_DEPTH |
Boolean | Queue depth that triggers a backpressure warning. False disables the warning threshold. | false |
Yes |
SYSTEM.EVENT_BUS.DISPATCH_TIMEOUT_SEC |
Number | Overall deadline, in seconds, for dispatching one event to its subscribers. | 30.0 |
Yes |
SYSTEM.EVENT_BUS.PER_CALLBACK_TIMEOUT_SEC |
Number | Each in-memory event subscriber callback gets this many seconds to finish. | 5.0 |
Yes |
SYSTEM.EVENT_BUS.SHUTDOWN_TIMEOUT_SEC |
Number | Event bus workers get this many seconds to stop during shutdown. | 10.0 |
Yes |
SYSTEM.EVENT_BUS.DOMAIN.OUTBOX.POLL_INTERVAL_SEC |
Number | Interval, in seconds, between durable domain-event outbox polls. | 0.25 |
Yes |
SYSTEM.EVENT_BUS.DOMAIN.OUTBOX.BATCH_LIMIT |
Integer | One poll claims up to this many domain events from the durable outbox. | 100 |
Yes |
SYSTEM.EVENT_BUS.DOMAIN.OUTBOX.PROCESSING_TIMEOUT_SEC |
Number | A worker gets this many seconds to process one claimed outbox batch. | 10.0 |
Yes |
SYSTEM.EVENT_BUS.DOMAIN.OUTBOX.QUARANTINE_DELAY_SEC |
Integer | Delay, in seconds, before quarantined domain events become eligible for another attempt. | 86400 |
Yes |
SYSTEM.EVENT_BUS.DOMAIN.OUTBOX.SUPERVISOR_RESTART_INITIAL_SEC |
Number | Initial delay, in seconds, before restarting a failed outbox worker. | 0.5 |
Yes |
SYSTEM.EVENT_BUS.DOMAIN.OUTBOX.SUPERVISOR_RESTART_MAX_SEC |
Number | Repeated outbox worker failures increase the restart delay up to this many seconds. | 30.0 |
Yes |
SYSTEM.EVENT_BUS.DOMAIN.OUTBOX.SUPERVISOR_RESTART_JITTER_SEC |
Number | Outbox worker restart delays receive up to this many seconds of random jitter. | 0.5 |
Yes |
SYSTEM.EVENT_BUS.DOMAIN.DELIVERY.DEFAULT_TIMEOUT_SEC |
Number | Default durable event delivery deadline in seconds. Zero leaves delivery without an overall deadline. | 0.0 |
Yes |
SYSTEM.EVENT_BUS.DOMAIN.DELIVERY.PER_CALLBACK_TIMEOUT_SEC |
Number | Each durable domain-event subscriber callback gets this many seconds to finish. | 30.0 |
Yes |
SYSTEM.INACTIVITY.CHECK_INTERVAL_SEC |
Integer | Interval, in seconds, between checks for system and model inactivity. | 15 |
Yes |
SYSTEM.INACTIVITY.SYSTEM.ENABLED |
Boolean | Enables the configured host action after system-wide inactivity. | false |
Yes |
SYSTEM.INACTIVITY.SYSTEM.TIMEOUT_MINUTES |
Integer | Minutes without qualifying activity before the configured system action runs. | 30 |
Yes |
SYSTEM.INACTIVITY.SYSTEM.ACTION |
String | Action performed after system inactivity. Accepted values are shutdown and unload_models. |
"shutdown" |
Yes |
SYSTEM.INACTIVITY.MODELS.ENABLED |
Boolean | Enables automatic unloading of models that remain inactive. | false |
Yes |
SYSTEM.INACTIVITY.MODELS.TIMEOUT_MINUTES |
Integer | Minutes a loaded model may remain unused before SoAI unloads it. | 10 |
Yes |
SERVER
API
| Setting | Type | Description | Factory default | Requires restart |
|---|---|---|---|---|
API.OPENAI.DEFAULT_IMAGE_MODEL_DALLE |
String | Model name used when an OpenAI image request targets the DALL-E generation path without naming a model. | "" |
Yes |
API.OPENAI.DEFAULT_IMAGE_MODEL_GPT |
String | Model name used when an OpenAI image request targets the GPT image path without naming a model. | "" |
Yes |
API.OPENAI.MAX_FILE_UPLOAD_MB |
Integer | OpenAI-compatible upload endpoints reject a file larger than this many megabytes. | 250 |
Yes |
API.OPENAI.TOKEN_COUNTING.APPROXIMATE_SAFETY_RATIO |
Number | Fraction of an estimated context window considered safe when exact token counting is unavailable. | 0.85 |
Yes |
API.OPENAI.AGENTIC.COMPACTION.CONTEXT_MARGIN_RATIO |
Number | Fraction of the context window kept free before an agentic conversation is compacted. | 0.1 |
Yes |
API.OPENAI.AGENTIC.COMPACTION.POST_COMPACT_MARGIN_RATIO |
Number | Fraction of the context window targeted as free space after compaction. | 0.35 |
Yes |
API.OPENAI.AGENTIC.COMPACTION.RESERVED_OUTPUT_TOKENS |
Integer | Tokens held back for the next model reply when compaction budgets the input context. | 2048 |
Yes |
API.OPENAI.AGENTIC.COMPACTION.SUMMARY_MAX_TOKENS |
Integer | Maximum output tokens for a conversation compaction summary. The effective limit is also capped at one eighth of the configured context window, leaving room for the summary input. | 4096 |
Yes |
API.OPENAI.AGENTIC.MAX_OUTPUT_TOKENS |
Integer | Upper output-token limit applied to agentic model calls. | 32768 |
Yes |
API.OPENAI.AGENTIC.DEFAULT_CONTEXT_WINDOW_TOKENS |
Integer | Context window assumed when a selected model does not report one. | 65536 |
Yes |
API.OPENAI.AGENTIC.EMPTY_OUTPUT_MAX_RETRIES |
Integer | SoAI makes this many additional attempts after a model returns no usable assistant output. | 3 |
Yes |
API.OPENAI.AGENTIC.EMPTY_OUTPUT_SILENT_MAX_RETRIES |
Integer | Number of empty-output retries made without a corrective prompt before later retries ask the model for visible output. | 2 |
Yes |
API.OPENAI.AGENTIC.TOOL_RESULT_PROMPT_MAX_CHARS |
Integer | SoAI returns up to this many characters from one tool result to the model. | 20000 |
Yes |
API.OPENAI.AGENTIC.TOOL_RESULT_PROMPT_MAX_TOTAL_CHARS_PER_TOOL_BLOCK |
Integer | One contiguous tool-result block contributes up to this many combined characters to the model prompt. | 60000 |
Yes |
API.OPENAI.AGENTIC.TOOL_RESULT_PROMPT_MAX_DEPTH |
Integer | Tool-result serialization descends through this many nested object or array levels. | 6 |
Yes |
API.OPENAI.AGENTIC.TOOL_RESULT_PROMPT_MAX_ITEMS |
Integer | Tool-result serialization keeps up to this many items from each array. | 200 |
Yes |
API.OPENAI.AGENTIC.TOOL_RESULT_PROMPT_MAX_KEYS |
Integer | Tool-result serialization keeps up to this many keys from each object. | 200 |
Yes |
API.OPENAI.AGENTIC.TOOL_RESULT_IMAGE_RELAY_MAX_ENCODED_CHARS |
Integer | SoAI relays at most this many encoded tool-result image characters into a model request. | 134217728 |
Yes |
API.OPENAI.AGENTIC.TOOL_RESULT_IMAGE_RELAY_MAX_PIXELS |
Integer | Image relay reduces a tool-result image until it contains no more than this many pixels. | 4000000 |
Yes |
API.OPENAI.PROMPTS.SOAI_SYSTEM_PROMPT_MODE |
String | Controls SoAI system-prompt injection for eligible SoAI-managed requests: auto follows the conversation toggle, enabled injects regardless of that toggle, and disabled never injects; direct OpenAI-compatible API requests are excluded. | "auto" |
Yes |
API.OPENAI.PROMPTS.MESSAGE_COMPATIBILITY_MODE |
String | Selects chat-template role handling: auto, system, system_strict, or user_strict. |
"auto" |
Yes |
API.OPENAI.RESPONSES.BACKGROUND_MONITOR_MAX_SEC |
Number | SoAI monitors a provider-side background Responses API job for up to this many seconds. | 3600.0 |
Yes |
API.OPENAI.KEY_QUOTAS.DEFAULT_COMPLETION_RESERVATION_TOKENS |
Integer | Tokens reserved against an API key quota when the request has no explicit output limit. | 512 |
Yes |
API.OPENAI.KEY_QUOTAS.MAX_COMPLETION_RESERVATION_TOKENS |
Integer | SoAI reserves at most this many completion tokens before an API request runs. | 32768 |
Yes |
API.OPENAI.KEY_QUOTAS.MIN_TOKEN_RESERVATION_UNITS |
Integer | Smallest billable reservation unit used when converting estimated tokens to quota usage. | 1 |
Yes |
API.OPENAI.KEY_QUOTAS.STREAMING_OVERAGE_TOKENS |
Integer | Extra tokens reserved to cover usage that arrives after a streaming quota boundary. | 64 |
Yes |
API.OPENAI.KEY_QUOTAS.MAX_HOURLY_WINDOW_HOURS |
Integer | An API key's rolling hourly quota window may span at most this many hours. | 720 |
Yes |
API.OPENAI.KEY_QUOTAS.RESERVATION_TTL_SEC |
Integer | Reconciliation expires an unfinished API key quota reservation after this many seconds. | 3600 |
Yes |
API.OPENAI.KEY_QUOTAS.RECONCILE_INTERVAL_SEC |
Integer | Interval, in seconds, between cleanup passes for stale quota reservations. | 60 |
Yes |
API.OPENAI.KEY_QUOTAS.RECONCILE_BATCH_LIMIT |
Integer | One cleanup pass reconciles up to this many stale quota reservations. | 200 |
Yes |
API.OPENAI.RATE_LIMITING.ENABLED |
Boolean | Applies configured request rate limits to registered API routes, including native, MCP, OpenAI-compatible, and Anthropic-compatible routes. | false |
No |
API.OPENAI.RATE_LIMITING.DEFAULT_LIMIT |
String | Default rules for registered API routes not classified as streaming, written as amount/unit; an empty string disables this default. | "600/minute" |
No |
API.OPENAI.RATE_LIMITING.STREAM_LIMIT |
String | Default rules for registered streaming API routes, written as amount/unit; an empty string disables this default. | "60/minute" |
No |
API.OPENAI.RATE_LIMITING.ROUTERS |
Object | Object keyed by registered router name; each router may define DEFAULT_LIMIT, STREAM_LIMIT, PATHS, and STREAM_PATHS overrides. |
{} |
No |
API.OPENAI.SECURITY.AUTH_FAILURE_RATELIMIT.WINDOW_SECONDS |
Integer | Rolling window, in seconds, used to count failed public-inference API authentication attempts. | 60 |
Yes |
API.OPENAI.SECURITY.AUTH_FAILURE_RATELIMIT.MAX_FAILURES |
Integer | Failed public-inference API authentication attempts allowed in one rate-limit window. | 5 |
Yes |
API.OPENAI.SECURITY.KEY_EXPIRATION.DEFAULT_TTL_DAYS |
Integer | Default lifetime, in days, assigned to newly created API keys. | 90 |
Yes |
API.OPENAI.SECURITY.KEY_EXPIRATION.ROTATION_REMINDER_DAYS |
Integer | Age, in days, at which SoAI reminds an owner to rotate an API key. | 75 |
Yes |
MODELS
| Setting | Type | Description | Factory default | Requires restart |
|---|---|---|---|---|
MODELS.CREDENTIALS.GITHUB_TOKEN |
String | GitHub access token used for authenticated model and release downloads that require GitHub. | "" |
Yes |
MODELS.CREDENTIALS.HUGGINGFACE_TOKEN |
String | Hugging Face access token used to browse or download gated and private models. | "" |
Yes |
MODELS.ROUTING.MAX_CONCURRENT_PLUGINS |
Integer | The scheduler starts or prepares up to this many plugin backends at once for queued inference. | 2 |
No |
MODELS.ROUTING.TASK_QUEUE_MAX_SIZE |
Integer | The in-memory scheduling queue holds up to this many inference tasks. | 1000 |
No |
MODELS.ROUTING.SCHEDULER_SAFETY_NET_DELAY_SEC |
Number | The scheduler waits this many seconds before rechecking work that received no wake-up signal. | 0.5 |
No |
MODELS.ROUTING.DURABLE_QUEUE_LEASE_TTL_SEC |
Integer | Another worker may recover an inference task after its lease has gone unrenewed for this many seconds. | 30 |
No |
MODELS.ROUTING.DURABLE_QUEUE_RECOVERY_SWEEP_SEC |
Integer | Interval, in seconds, between checks for expired inference task leases. | 5 |
No |
MODELS.ROUTING.DURABLE_QUEUE_HARD_LIMIT_TASKS |
Integer | The durable queue accepts up to this many inference tasks. Zero removes the count limit. | 0 |
No |
MODELS.ROUTING.MIN_FREE_DISK_BYTES_FOR_ACCEPT |
Integer | Free disk space, in bytes, required before SoAI accepts another durable inference task. | 268435456 |
No |
MODELS.ROUTING.PLUGIN_PREFETCH_WINDOW_DEFAULT |
Integer | Default number of queued tasks a plugin dispatcher may claim ahead of execution. | 8 |
No |
MODELS.ROUTING.STANDARD_PRIORITY_AGING_SEC |
Integer | A waiting standard-priority task gains scheduling priority after this many seconds. | 25 |
No |
MODELS.ROUTING.FLEX_PRIORITY_AGING_SEC |
Integer | A waiting flex-priority task gains scheduling priority after this many seconds. | 120 |
No |
MODELS.ROUTING.CANCEL_ON_CLIENT_DISCONNECT |
Boolean | Cancels inference work when the client that submitted it disconnects. | false |
No |
MODELS.ROUTING.HTTP_ASYNC_ACCEPT_DEFAULT |
Boolean | Returns asynchronous acceptance by default for eligible HTTP inference requests. | false |
No |
MODELS.ROUTING.ACCEPTANCE_DB_BUSY_TIMEOUT_SEC |
Integer | Task acceptance waits this many seconds for a busy durable-queue database. | 30 |
No |
MODELS.ROUTING.INFERENCE_TASK_RETENTION_DAYS |
Integer | Days terminal inference task records remain in durable storage. | 180 |
No |
MODELS.ROUTING.OWNER_RUNNING_LIMITS.DEFAULT |
Integer | Default maximum running inference tasks for one owner. | 4 |
No |
MODELS.ROUTING.OWNER_RUNNING_LIMITS.PER_OWNER_TYPE |
Object | Object keyed by task owner type; each value sets its active-task limit and must be zero or greater. | {} |
No |
MODELS.ROUTING.DEDUPLICATION_ENABLED |
Boolean | Coalesces eligible identical inference requests according to the configured deduplication keys. | true |
No |
MODELS.ROUTING.PROMPT_QUEUING |
Boolean | Allows requests for a busy model to wait instead of failing immediately. | false |
No |
MODELS.ROUTING.FAIR_TASK_ROTATION |
Boolean | Rotates scheduled work across task owners to reduce queue monopolization. | false |
No |
MODELS.ROUTING.DEDUPLICATION_KEYS |
List | Request fields used to decide whether inference tasks are equivalent for deduplication. | [] |
No |
MODELS.ROUTING.FAILOVERS |
List | Failover rules that select alternate models or plugins after a routing failure. | [] |
No |
MODELS.ROUTING.VIRTUAL_MODELS |
List | Virtual model definitions that group concrete models for load balancing and failover. | [] |
No |
MODELS.ROUTING.HTTP_CLIENT_TRUST_ENV |
Boolean | Allows model-backend HTTP clients to use proxy and certificate settings from environment variables. | false |
Yes |
MODELS.ROUTING.HTTP_CLIENT_LIMITS.MAX_CONNECTIONS |
Integer | The HTTP client opens up to this many simultaneous connections to model backends. | 200 |
Yes |
MODELS.ROUTING.HTTP_CLIENT_LIMITS.MAX_KEEPALIVE_CONNECTIONS |
Integer | The HTTP client keeps up to this many idle model-backend connections open. | 50 |
Yes |
MODELS.ROUTING.HTTP_CLIENT_TIMEOUTS.CONNECT |
Number | The HTTP client stops trying to connect to a model backend after this many seconds. | 30.0 |
Yes |
MODELS.ROUTING.HTTP_CLIENT_TIMEOUTS.READ |
Number | The HTTP client stops if a model-backend response pauses for this many seconds between reads. | 300.0 |
Yes |
MODELS.ROUTING.HTTP_CLIENT_TIMEOUTS.WRITE |
Number | The HTTP client must send a model-backend request within this many seconds. | 60.0 |
Yes |
MODELS.ROUTING.HTTP_CLIENT_TIMEOUTS.POOL |
Number | A request waits this many seconds for an available model-backend connection slot. | 30.0 |
Yes |
MODELS.ROUTING.HEALTH_CHECKS.INTERVAL_SEC |
Integer | Base interval, in seconds, between model plugin health-check planning passes. | 20 |
No |
MODELS.ROUTING.HEALTH_CHECKS.JITTER_FRACTION |
Number | Random fraction added to health-check intervals to avoid synchronized checks. | 0.1 |
No |
MODELS.ROUTING.HEALTH_CHECKS.STREAMING_IDLE_TIMEOUT_SEC |
Number | A streaming inference attempt fails after this many seconds without a new chunk. | 300.0 |
No |
MODELS.ROUTING.HEALTH_CHECKS.NON_STREAMING_TIMEOUT_SEC |
Number | A non-streaming inference attempt must finish within this many seconds. | 300.0 |
No |
MODELS.ROUTING.HEALTH_CHECKS.STREAMING_PREFILL_MIN_TOKENS_PER_SEC |
Number | Assumed minimum prefill rate, in tokens per second, used to calculate a finite initial-output deadline for a long prompt. Lower values allow more time; an explicit shorter request limit still applies. | 8.0 |
No |
MODELS.ROUTING.HEALTH_CHECKS.STREAMING_PREFILL_OVERHEAD_SEC |
Number | Fixed seconds added to the calculated prefill time when deriving the first-chunk deadline. | 60.0 |
No |
MODELS.ROUTING.HEALTH_CHECKS.PING_TIMEOUT_SEC |
Integer | A lightweight plugin health ping must finish within this many seconds. | 15 |
No |
MODELS.ROUTING.HEALTH_CHECKS.STUCK_STATE_TIMEOUT_SEC |
Integer | Recovery begins when a plugin remains in a transitional state for this many seconds. | 900 |
No |
MODELS.ROUTING.HEALTH_CHECKS.FLAPPING_WINDOW_SEC |
Integer | Rolling seconds used to detect repeated plugin health-state changes. | 120 |
No |
MODELS.ROUTING.HEALTH_CHECKS.FLAPPING_MIN_TRANSITIONS |
Integer | State transitions within the flapping window required to classify a plugin as unstable. | 3 |
No |
MODELS.ROUTING.HEALTH_CHECKS.IDLE_PING_GRACE_PERIOD_SEC |
Integer | SoAI waits this many seconds before pinging a plugin that has just become idle. | 5 |
No |
MODELS.ROUTING.HEALTH_CHECKS.PENDING_STARTUP_TASK_TIMEOUT_SEC |
Integer | Recovery begins when a plugin startup task remains pending for this many seconds. | 300 |
No |
MODELS.ROUTING.HEALTH_CHECKS.FAILURE_THRESHOLD |
Integer | Consecutive qualifying health failures required before opening the plugin circuit breaker. | 3 |
No |
MODELS.ROUTING.HEALTH_CHECKS.RECOVERY_TIMEOUT_SEC |
Integer | A plugin recovery attempt must finish within this many seconds. | 1440 |
No |
MODELS.ROUTING.HEALTH_CHECKS.FAILURE_WINDOW_SEC |
Integer | Rolling seconds in which plugin health failures count toward recovery policy. | 1440 |
No |
MODELS.ROUTING.HEALTH_CHECKS.MAX_RECOVERY_ATTEMPTS |
Integer | Recovery attempts allowed within the failure window before quarantine. | 3 |
No |
MODELS.ROUTING.HEALTH_CHECKS.NUM_PLANNER_WORKERS |
Integer | Planner workers that take queued tasks from the priority queue and turn them into scheduling decisions. | 16 |
No |
MODELS.ROUTING.HEALTH_CHECKS.FAIR_DISPATCH_ENABLED |
Boolean | Stops a plugin that has reached its share from receiving further dispatches while other plugins wait for capacity. | true |
No |
MODELS.ROUTING.HEALTH_CHECKS.FAIR_DISPATCH_MAX_PER_PLUGIN |
Integer | Highest number of tasks one plugin may hold outstanding while fair dispatch is throttling, capped further by that plugin's own task limit. | 32 |
No |
MODELS.ROUTING.HEALTH_CHECKS.PLUGIN_QUEUE_BURST_FACTOR |
Integer | Multiplier that expands a plugin health queue during short bursts. | 4 |
No |
MODELS.ROUTING.HEALTH_CHECKS.PLUGIN_QUEUE_MIN_SIZE |
Integer | Minimum capacity assigned to each plugin health-check queue. | 16 |
No |
MODELS.ROUTING.HEALTH_CHECKS.PLUGIN_QUEUE_UNLIMITED_WORKERS |
Integer | Worker count used for plugins without an explicit task-concurrency limit. | 8 |
No |
MODELS.ROUTING.HEALTH_CHECKS.PLUGIN_QUEUE_MAX_WORKERS |
Integer | One plugin health-check queue receives up to this many workers. | 32 |
No |
MODELS.ROUTING.HEALTH_CHECKS.VIRTUAL_MODEL_FAILOVER_COOLDOWN_SEC |
Integer | The router avoids a failed virtual-model target for this many seconds before selecting it again. | 15 |
No |
MODELS.ROUTING.HEALTH_CHECKS.MAX_CONCURRENT_TASKS_PER_PLUGIN.DEFAULT |
Integer | Default maximum inference tasks allowed to run concurrently on one plugin. | 4 |
No |
MODELS.ROUTING.HEALTH_CHECKS.MAX_CONCURRENT_TASKS_PER_PLUGIN.PER_PLUGIN |
Object | Object keyed by plugin name; each value sets its task concurrency limit and must be zero or greater. | {} |
No |
MODELS.ROUTING.HEALTH_CHECKS.COMMAND_TIMEOUTS_SEC.PLUGIN_STOP |
Integer | A health-driven plugin stop command must finish within this many seconds. | 300 |
No |
MODELS.ROUTING.HEALTH_CHECKS.COMMAND_TIMEOUTS_SEC.PLUGIN_LOAD_MODEL |
Integer | A health-driven model load command must finish within this many seconds. | 7200 |
No |
MODELS.MANAGER.PATHS.MODELS |
String | Managed model directory, resolved under the system data directory. | "models" |
Yes |
MODELS.MANAGER.PARAMETERS.UPDATE_WORKERS |
Integer | Workers that persist model parameter updates from the manager queue. | 4 |
Yes |
MODELS.MANAGER.PARAMETERS.UPDATE_QUEUE_MAX_SIZE |
Integer | The manager queue holds up to this many pending model parameter updates. | 20000 |
Yes |
MODELS.MANAGER.PERFORMANCE.STARTUP_DISCOVERY_TIMEOUT_SEC |
Integer | Initial model discovery must finish within this many seconds during startup. | 3600 |
Yes |
MODELS.MANAGER.PERFORMANCE.BACKGROUND_REFRESH_INTERVAL_MS |
Integer | Interval, in milliseconds, between background model metadata refreshes. | 60000 |
Yes |
MODELS.MANAGER.CACHE.PARAMETER_MAX_SIZE |
Integer | The parameter cache keeps up to this many model parameter records. | 2000 |
Yes |
MODELS.MANAGER.CACHE.RESOLUTION_TTL_SEC |
Integer | SoAI caches a resolved model lookup for this many seconds. | 300 |
Yes |
MODELS.MANAGER.CACHE.RESOLUTION_MAX_SIZE |
Integer | The resolution cache keeps up to this many model lookups. | 5000 |
Yes |
PLUGINS
TOOLS
| Setting | Type | Description | Factory default | Requires restart |
|---|---|---|---|---|
TOOLS.MCP.ENABLED |
Boolean | Starts SoAI's MCP runtime and registered tool system. Disabling it makes all MCP-backed tools unavailable. | true |
Yes |
TOOLS.MCP.OAUTH.STATE_TOKEN_TTL_MS |
Integer | Lifetime, in milliseconds, of the signed state token used to validate an MCP OAuth callback. | 600000 |
Yes |
TOOLS.MCP.OAUTH.REFRESH_SKEW_MS |
Integer | Milliseconds before OAuth token expiry when SoAI begins refreshing the token. | 60000 |
Yes |
TOOLS.MCP.ELICITATION.WAIT_TIMEOUT_MS |
Integer | An MCP request waits this many milliseconds for a user's elicitation response. | 3600000 |
Yes |
TOOLS.MCP.SUBAGENT.OBSERVE_TIMEOUT_MS |
Integer | Default milliseconds that terminal-mode subagent observation waits for a terminal state before returning the latest snapshot. Zero waits indefinitely. | 0 |
Yes |
TOOLS.MCP.SECRET_PROMPT.HANDLE_STORE_MAX_TOTAL |
Integer | The secret-prompt store keeps up to this many unresolved handles across all users. | 5000 |
Yes |
TOOLS.MCP.SECRET_PROMPT.HANDLE_STORE_MAX_PER_USER |
Integer | The secret-prompt store keeps up to this many unresolved handles for one user. | 200 |
Yes |
TOOLS.MCP.SHELL.ENABLED |
Boolean | Makes the shell execution, output, search, and standard-input tools available. | true |
Yes |
TOOLS.MCP.SHELL.COMMAND_BLACKLIST |
List | Executable names the MCP shell tools refuse to launch. | [] |
Yes |
TOOLS.MCP.FILE_GUARD_READ_BEFORE_WRITE.ENABLED |
Boolean | Requires a tool session to read an existing file before replacing its contents. | true |
Yes |
TOOLS.MCP.BROWSER.ENABLED |
Boolean | Makes the browser navigation, interaction, inspection, and capture tools available. | true |
Yes |
TOOLS.MCP.BROWSER.HEADLESS |
Boolean | Runs managed browser sessions without a visible browser window. | true |
Yes |
TOOLS.MCP.BROWSER.AUTO_INSTALL |
Boolean | Downloads the managed Playwright browser runtime when it is missing. | true |
Yes |
TOOLS.MCP.BROWSER.AUTO_INSTALL_TIMEOUT_SEC |
Integer | Automatic browser runtime installation must finish within this many seconds. | 7200 |
Yes |
TOOLS.MCP.BROWSER.SESSION_SCOPE |
String | Browser session sharing boundary. Accepted values are conversation and user. | "conversation" |
Yes |
TOOLS.MCP.BROWSER.DEFAULT_PROFILE |
String | Named browser profile selected when a browser tool call does not request one. | "default" |
Yes |
TOOLS.MCP.BROWSER.PROFILES |
Object | Object keyed by profile name; profiles may set CDP URL, persistence, browser channel, locale, time zone, viewport, scale, and launch mode. | {} |
Yes |
TOOLS.MCP.BROWSER.CDP_CONNECT_TIMEOUT_MS |
Integer | A Chrome DevTools Protocol browser connection must open within this many milliseconds. | 30000 |
Yes |
TOOLS.MCP.BROWSER.JS_EVAL_ENABLED |
Boolean | Makes browser_eval available for running JavaScript in the active page. |
true |
Yes |
TOOLS.MCP.BROWSER.JS_EVAL_MAX_SCRIPT_CHARS |
Integer | browser_eval rejects JavaScript source longer than this many characters. |
10000 |
Yes |
TOOLS.MCP.BROWSER.JS_EVAL_TIMEOUT_MS |
Integer | One browser_eval script must finish within this many milliseconds. |
15000 |
Yes |
TOOLS.MCP.BROWSER.DEFAULT_NAV_TIMEOUT_SEC |
Integer | Default navigation deadline, in seconds, for browser page loads. | 30 |
Yes |
TOOLS.MCP.BROWSER.DEFAULT_ACTION_TIMEOUT_SEC |
Integer | Default deadline, in seconds, for browser clicks, typing, and other page actions. | 15 |
Yes |
TOOLS.MCP.BROWSER.TITLE_RETRY_ATTEMPTS |
Integer | Attempts made to read a page title after navigation while the document settles. | 3 |
Yes |
TOOLS.MCP.BROWSER.TITLE_RETRY_DELAY_MS |
Integer | Milliseconds between page-title read attempts. | 100 |
Yes |
TOOLS.MCP.BROWSER.MAX_WAIT_SEC |
Number | browser_wait_for accepts an explicit wait of at most this many seconds. |
300.0 |
Yes |
TOOLS.MCP.BROWSER.RENDER_STABILIZE_MS |
Integer | Milliseconds allowed for page rendering to settle before SoAI captures derived page state. | 250 |
Yes |
TOOLS.MCP.BROWSER.MAX_CONCURRENT_PAGES |
Integer | The browser runtime keeps up to this many managed pages active at the same time. | 10 |
Yes |
TOOLS.MCP.BROWSER.BLOCK_IMAGES |
Boolean | Blocks image network requests in managed browser pages. | false |
Yes |
TOOLS.MCP.BROWSER.BLOCK_FONTS |
Boolean | Blocks web-font network requests in managed browser pages. | true |
Yes |
TOOLS.MCP.BROWSER.BLOCK_MEDIA |
Boolean | Blocks audio and video network requests in managed browser pages. | true |
Yes |
TOOLS.MCP.BROWSER.BLOCK_ADS |
Boolean | Blocks network requests matched by the configured advertising filter list. | true |
Yes |
TOOLS.MCP.BROWSER.AD_BLOCK_LIST_URL |
String | URL of the filter list downloaded for browser ad blocking. | "https://easylist.to/easylist/easylist.txt" |
Yes |
TOOLS.MCP.BROWSER.DNS_TIMEOUT_SEC |
Number | A browser navigation fails if its safety check cannot resolve the host within this many seconds. | 5.0 |
Yes |
TOOLS.MCP.BROWSER.SNAPSHOT_MAX_CHARS |
Integer | One accessibility or DOM browser snapshot contains up to this many characters. | 20000 |
Yes |
TOOLS.MCP.BROWSER.LOG_MAX_ENTRIES |
Integer | Maximum retained console messages, network requests, and download records for each browser session; older records are discarded. | 500 |
Yes |
TOOLS.MCP.BROWSER.STORAGE_STATE_ENABLED |
Boolean | Persists browser cookies and origin storage between managed browser sessions. | true |
Yes |
TOOLS.MCP.BROWSER.STORAGE_STATE_DIR |
String | Browser storage-state directory, resolved under the system data directory. | "browser-storage-state" |
Yes |
TOOLS.MCP.BROWSER.STORAGE_STATE_AUTOSAVE_ON_MUTATION |
Boolean | Saves browser storage state after page actions that may change cookies or origin storage. | true |
Yes |
TOOLS.MCP.BROWSER.STORAGE_STATE_SAVE_THROTTLE_SEC |
Number | Minimum seconds between automatic saves of the same browser storage state. | 5.0 |
Yes |
TOOLS.MCP.BROWSER.STORAGE_STATE_SAVE_TIMEOUT_SEC |
Integer | Writing one browser storage-state snapshot must finish within this many seconds. | 10 |
Yes |
TOOLS.MCP.BROWSER.USER_DATA_DIR_BASE_DIR |
String | Persistent browser profile directory, resolved under the system data directory. | "browser-user-data" |
Yes |
TOOLS.MCP.BROWSER.USER_DATA_DIR_LOCK_TIMEOUT_SEC |
Integer | A browser session waits this many seconds to lock a persistent user-data directory. | 30 |
Yes |
TOOLS.MCP.BROWSER.PDF_MAX_INLINE_BYTES |
Integer | browser_pdf stores a PDF as a file instead of returning it inline when it exceeds this many bytes. |
1000000 |
Yes |
TOOLS.MCP.BROWSER.NETWORK_BODY_MAX_BYTES |
Integer | One browser network log entry captures up to this many response-body bytes. | 65536 |
Yes |
TOOLS.MCP.WEB_FETCH.BLOCK_PRIVATE_NETWORK_EGRESS |
Boolean | Rejects web_fetch destinations that resolve to private network addresses. |
true |
Yes |
TOOLS.MCP.WEB_FETCH.DNS_TIMEOUT_SEC |
Number | web_fetch fails if its safety check cannot resolve the destination within this many seconds. |
5.0 |
Yes |
TOOLS.MCP.WEB_FETCH.DEFAULT_MAX_CHARS |
Integer | Default maximum text characters returned by web_fetch. |
50000 |
Yes |
TOOLS.MCP.WEB_FETCH.MAX_CHARS_LIMIT |
Integer | A web_fetch caller may request at most this many text characters. |
100000 |
Yes |
TOOLS.MCP.HTTP_REQUEST.BLOCK_PRIVATE_NETWORK_EGRESS |
Boolean | Rejects http_request destinations that resolve to private network addresses. |
true |
Yes |
TOOLS.MCP.HTTP_REQUEST.DNS_TIMEOUT_SEC |
Number | http_request fails if its safety check cannot resolve the destination within this many seconds. |
5.0 |
Yes |
TOOLS.MCP.GENERATE_IMAGE.ENABLED |
Boolean | Makes generate_image available. Disabling it leaves other MCP tools running. |
true |
Yes |
TOOLS.MCP.GENERATE_IMAGE.ENGINE |
String | Image service used by generate_image. Accepted values are automatic1111, comfyui, and ai_horde. |
"automatic1111" |
Yes |
TOOLS.MCP.GENERATE_IMAGE.DEFAULT_WIDTH |
Integer | Image width, in pixels, used when a generate_image call omits width. |
704 |
Yes |
TOOLS.MCP.GENERATE_IMAGE.DEFAULT_HEIGHT |
Integer | Image height, in pixels, used when a generate_image call omits height. |
704 |
Yes |
TOOLS.MCP.GENERATE_IMAGE.DEFAULT_STEPS |
Integer | Diffusion sampling steps used when a generate_image call omits the step count. |
20 |
Yes |
TOOLS.MCP.GENERATE_IMAGE.DEFAULT_CFG_SCALE |
Number | Prompt guidance scale used when a generate_image call omits CFG scale. |
7.0 |
Yes |
TOOLS.MCP.GENERATE_IMAGE.NEGATIVE_PROMPT |
String | Fallback negative prompt used when a generate_image call omits negative_prompt. |
"" |
Yes |
TOOLS.MCP.GENERATE_IMAGE.TIMEOUT_SEC |
Integer | Overall deadline, in seconds, for one image generation request. | 3600 |
Yes |
TOOLS.MCP.GENERATE_IMAGE.POLL_INTERVAL_SEC |
Number | SoAI waits this many seconds between status polls for an asynchronous image generation job. | 1.0 |
Yes |
TOOLS.MCP.GENERATE_IMAGE.MAX_IMAGE_BYTES |
Integer | SoAI rejects an image-service response larger than this many bytes. | 134217728 |
Yes |
TOOLS.MCP.GENERATE_IMAGE.BLOCK_PRIVATE_NETWORK_EGRESS |
Boolean | Rejects configured image-service destinations on private networks, while allowing loopback URLs and HTTP endpoints that resolve locally. | true |
Yes |
TOOLS.MCP.GENERATE_IMAGE.DNS_TIMEOUT_SEC |
Number | Image generation fails if its safety check cannot resolve the service host within this many seconds. | 5.0 |
Yes |
TOOLS.MCP.GENERATE_IMAGE.AUTOMATIC1111.BASE_URL |
String | Base URL of the Automatic1111 Stable Diffusion WebUI API. | "http://127.0.0.1:7860" |
Yes |
TOOLS.MCP.GENERATE_IMAGE.AUTOMATIC1111.BASIC_AUTH |
String | HTTP Basic authorization value sent to Automatic1111. Empty sends no Basic credentials. | "" |
Yes |
TOOLS.MCP.GENERATE_IMAGE.AUTOMATIC1111.SAMPLER_NAME |
String | Automatic1111 sampler override. Empty lets the service use its configured default. | "" |
Yes |
TOOLS.MCP.GENERATE_IMAGE.AUTOMATIC1111.SCHEDULER |
String | Automatic1111 scheduler override. Empty lets the service use its configured default. | "" |
Yes |
TOOLS.MCP.GENERATE_IMAGE.AUTOMATIC1111.EXTRA_PARAMS_JSON |
String | JSON object merged into each Automatic1111 text-to-image request. | "{}" |
Yes |
TOOLS.MCP.GENERATE_IMAGE.COMFYUI.BASE_URL |
String | Base URL of the ComfyUI API. | "http://127.0.0.1:8188" |
Yes |
TOOLS.MCP.GENERATE_IMAGE.COMFYUI.API_KEY |
String | API key sent to ComfyUI when its endpoint requires authentication. | "" |
Yes |
TOOLS.MCP.GENERATE_IMAGE.COMFYUI.MODEL |
String | ComfyUI checkpoint name inserted into the configured workflow. | "" |
Yes |
TOOLS.MCP.GENERATE_IMAGE.COMFYUI.WORKFLOW_JSON |
String | ComfyUI API-format workflow submitted for image generation. | "{}" |
Yes |
TOOLS.MCP.GENERATE_IMAGE.COMFYUI.WORKFLOW_NODES |
List | Workflow node mappings that receive prompt, model, size, seed, and sampling values. | [] |
Yes |
TOOLS.MCP.GENERATE_IMAGE.COMFYUI.OUTPUT_NODE_IDS |
List | ComfyUI node IDs whose generated images are collected as tool output. | [] |
Yes |
TOOLS.MCP.GENERATE_IMAGE.AI_HORDE.BASE_URL |
String | Base URL of the AI Horde generation API. | "https://stablehorde.net" |
Yes |
TOOLS.MCP.GENERATE_IMAGE.AI_HORDE.API_KEY |
String | AI Horde API key used to submit generation jobs. | "" |
Yes |
TOOLS.MCP.GENERATE_IMAGE.AI_HORDE.MODEL |
String | AI Horde model sent with every generate_image request that uses the AI Horde engine. |
"stable_diffusion" |
Yes |
TOOLS.MCP.GENERATE_IMAGE.AI_HORDE.MAX_GENERATION_WAIT_SEC |
Integer | SoAI stops waiting for an AI Horde job after this many seconds. | 3600 |
Yes |
TOOLS.MCP.WEATHER.ENABLED |
Boolean | Makes the weather tool available. Disabling it leaves other MCP tools running. | true |
Yes |
TOOLS.MCP.WEATHER.GEOCODING_BASE_URL |
String | Base URL of the location search service used by the weather tool. | "https://geocoding-api.open-meteo.com" |
Yes |
TOOLS.MCP.WEATHER.FORECAST_BASE_URL |
String | Base URL of the forecast service used by the weather tool. | "https://api.open-meteo.com" |
Yes |
TOOLS.MCP.WEATHER.TIMEOUT_SEC |
Integer | The weather tool stops waiting for a service response after this many seconds. | 20 |
Yes |
TOOLS.MCP.WEATHER.MAX_RESPONSE_BYTES |
Integer | The weather tool rejects a service response larger than this many bytes. | 200000 |
Yes |
TOOLS.MCP.WEATHER.BLOCK_PRIVATE_NETWORK_EGRESS |
Boolean | Rejects weather-service destinations on private networks, while allowing loopback URLs and HTTP endpoints that resolve locally. | true |
Yes |
TOOLS.MCP.WEATHER.DNS_TIMEOUT_SEC |
Number | The weather tool fails if its safety check cannot resolve the service host within this many seconds. | 5.0 |
Yes |
TOOLS.MCP.NEWS.ENABLED |
Boolean | Makes the news search tool available. Disabling it leaves other MCP tools running. | true |
Yes |
TOOLS.MCP.NEWS.BASE_URL |
String | Base URL of the GDELT document search API used by the news tool. | "https://api.gdeltproject.org/api/v2/doc" |
Yes |
TOOLS.MCP.NEWS.TIMEOUT_SEC |
Integer | The news tool stops waiting for a service response after this many seconds. | 20 |
Yes |
TOOLS.MCP.NEWS.MAX_RESPONSE_BYTES |
Integer | The news tool rejects a service response larger than this many bytes. | 200000 |
Yes |
TOOLS.MCP.NEWS.BLOCK_PRIVATE_NETWORK_EGRESS |
Boolean | Rejects news service destinations that resolve to private networks. | true |
Yes |
TOOLS.MCP.NEWS.DNS_TIMEOUT_SEC |
Number | The news tool fails if its safety check cannot resolve the service host within this many seconds. | 5.0 |
Yes |
TOOLS.MCP.READ_IMAGE.MAX_SOURCE_BYTES |
Integer | read_image rejects a source image larger than this many bytes. |
134217728 |
Yes |
TOOLS.MCP.READ_IMAGE.MAX_ENCODED_CHARS |
Integer | read_image returns at most this many encoded image characters after processing. |
16777216 |
Yes |
TOOLS.MCP.READ_IMAGE.MAX_PIXELS |
Integer | read_image reduces a decoded image until it contains no more than this many pixels. |
4000000 |
Yes |
TOOLS.MCP.READ_IMAGE.JPEG_QUALITY |
Integer | JPEG quality used when read_image must resize or convert an image. |
85 |
Yes |
TOOLS.MCP.READ_VIDEO.DEFAULT_FRAMES_PER_SECOND |
Number | Frame sample rate used when read_video receives no explicit rate. |
1.0 |
Yes |
TOOLS.MCP.READ_VIDEO.MAX_FRAMES_PER_SECOND |
Number | read_video samples at most this many frames per second. |
1.0 |
Yes |
TOOLS.MCP.READ_VIDEO.FRAME_PAGE_SIZE |
Integer | One paginated read_video result returns up to this many extracted frames. |
60 |
Yes |
TOOLS.MCP.READ_VIDEO.MAX_FRAME_PIXELS |
Integer | read_video reduces each extracted frame to no more than this many pixels. |
2000000 |
Yes |
TOOLS.MCP.READ_VIDEO.JPEG_QUALITY |
Integer | JPEG quality used for extracted video frames. | 85 |
Yes |
TOOLS.MCP.READ_VIDEO.INCLUDE_AUDIO_DEFAULT |
Boolean | Extracts and transcribes video audio when a read_video call omits the audio option. |
true |
Yes |
TOOLS.MCP.READ_VIDEO.AUDIO_CHUNK_SECONDS |
Integer | Each audio segment sent for transcription spans up to this many seconds. | 300 |
Yes |
TOOLS.MCP.READ_VIDEO.JOB_RETENTION_HOURS |
Integer | Hours completed read_video jobs and their derived files remain available. |
168 |
Yes |
TOOLS.MCP.READ_VIDEO.MAX_ACTIVE_JOBS |
Integer | read_video runs up to this many extraction jobs at the same time. |
2 |
Yes |
TOOLS.MCP.READ_VIDEO.TEMP_RESERVATION_SAFETY_MULTIPLIER |
Integer | Multiplier applied when reserving temporary disk space for video extraction outputs. | 2 |
Yes |
TOOLS.MCP.READ_VIDEO.VIDEO_PREVIEW_SECONDS |
Integer | Duration, in seconds, of the lightweight video preview clip. | 8 |
Yes |
TOOLS.MCP.READ_VIDEO.VIDEO_PREVIEW_MAX_PIXELS |
Integer | Preview generation reduces each video frame to no more than this many pixels. | 307200 |
Yes |
TOOLS.MCP.READ_VIDEO.VIDEO_PREVIEW_CRF |
Integer | Constant Rate Factor used to control preview-video compression quality and size. | 28 |
Yes |
TOOLS.MCP.READ_VIDEO.VIDEO_PREVIEW_MAX_BYTES |
Integer | read_video keeps a generated preview only when it is no larger than this many bytes. |
8388608 |
Yes |
TOOLS.MCP.READ_VIDEO.PROBE_TIMEOUT_SEC |
Integer | The media probe must inspect a video's metadata within this many seconds. | 60 |
Yes |
TOOLS.MCP.READ_VIDEO.FRAME_EXTRACTION_TIMEOUT_SEC |
Integer | Requested video frames must finish extracting within this many seconds. | 900 |
Yes |
TOOLS.MCP.READ_VIDEO.AUDIO_EXTRACTION_TIMEOUT_SEC |
Integer | Video audio extraction and preparation must finish within this many seconds. | 900 |
Yes |
TOOLS.MCP.READ_VIDEO.PREVIEW_EXTRACTION_TIMEOUT_SEC |
Integer | A lightweight video preview must finish within this many seconds. | 300 |
Yes |
TOOLS.MCP.READ_VIDEO.LIVE_PROGRESS_MIN_INTERVAL_MS |
Integer | Minimum milliseconds between live progress updates from a read_video job. |
1000 |
Yes |
TOOLS.MCP.READ_VIDEO.WHISPER_MODEL |
String | Speech-to-text model for media transcripts: Auto, a Whisper size, or a concrete local model reference. Existing saved selections are preserved. | "auto" |
Yes |
TOOLS.MCP.HOST_MODE.ENABLED |
Boolean | Allows SoAI to act as an MCP client and connect to external MCP servers. | true |
Yes |
TOOLS.MCP.HOST_MODE.AUTO_CONNECT_ON_STARTUP |
Boolean | Reconnects saved external MCP servers when the MCP runtime starts. | true |
Yes |
TOOLS.MCP.HOST_MODE.RECONNECT_DELAY_SEC |
Integer | SoAI waits this many seconds between attempts to reconnect an external MCP server. | 5 |
Yes |
TOOLS.MCP.HOST_MODE.MAX_RECONNECT_ATTEMPTS |
Integer | Reconnect attempts made before an external MCP server remains disconnected. | 3 |
Yes |
TOOLS.MCP.HOST_MODE.ROOTS |
List | Filesystem roots SoAI advertises to connected MCP servers. | [] |
Yes |
TOOLS.MCP.HOST_MODE.ROOTS_LIST_CHANGED |
Boolean | Sends roots/list_changed notifications when the advertised root list changes. |
true |
Yes |
TOOLS.MCP.HOST_MODE.SAMPLING.ENABLED |
Boolean | Allows connected MCP servers to request model sampling through SoAI. | false |
Yes |
TOOLS.MCP.HOST_MODE.SAMPLING.DEFAULT_MODEL |
String | Model used for an MCP sampling request that does not specify one. | "" |
Yes |
TOOLS.MCP.HOST_MODE.SAMPLING.INFERENCE_TIMEOUT_SEC |
Integer | A server-requested model sampling call must finish within this many seconds. | 300 |
Yes |
TOOLS.MCP.HOST_MODE.ELICITATION.ENABLED |
Boolean | Allows connected MCP servers to request structured input from the user. | false |
Yes |
TOOLS.MCP.SERVER_MODE.ENABLED |
Boolean | Exposes SoAI's selected tools, resources, and prompts through its MCP HTTP server. | true |
Yes |
TOOLS.MCP.SERVER_MODE.EXPOSED_TOOLS |
List | Registered SoAI tool names visible to MCP server-mode clients. | ["web_fetch", "web_search_duckduckgo", "web_search_searxng", "web_search_brave", "web_search_tavily", "web_search_serper", "web_search_google", "calculator", "rss_read", "news", "weather", "datetime_current", "hardware_snapshot", "wait", "random_generate", "hash", "base64", "text_stats", "unit_convert"] |
Yes |
TOOLS.MCP.SERVER_MODE.EXPOSED_RESOURCES |
List | Registered SoAI resource names visible to MCP server-mode clients. | ["models", "plugins", "system_status"] |
Yes |
TOOLS.MCP.SERVER_MODE.EXPOSED_PROMPTS |
List | Registered SoAI prompt names visible to MCP server-mode clients. | ["system_overview", "model_selection", "plugin_info", "rag_document_summary", "rag_topic_extraction", "rag_question_answering", "rag_compare_sources"] |
Yes |
TOOLS.MCP.SERVER_MODE.ALLOWED_ORIGINS |
List | Browser origins allowed to call the MCP HTTP endpoint. Empty applies the server default. | [] |
Yes |
TOOLS.MCP.SERVER_MODE.LIST_CHANGED_NOTIFICATIONS |
Boolean | Notifies connected clients when exposed tool, resource, or prompt lists change. | false |
Yes |
TOOLS.MCP.SERVER_MODE.SSE_REPLAY_BUFFER_SIZE |
Integer | The MCP stream replay buffer keeps up to this many server notifications for reconnecting clients. | 256 |
Yes |
TOOLS.MCP.TASKS.ENABLED |
Boolean | Enables the MCP Tasks protocol for asynchronous tool execution. | false |
Yes |
TOOLS.MCP.TASKS.DEFAULT_TTL_SEC |
Integer | Default seconds an MCP task remains available after creation. | 3600 |
Yes |
TOOLS.MCP.TASKS.MAX_CONCURRENT_PER_CLIENT |
Integer | One connected client may run up to this many MCP tasks at the same time. | 100 |
Yes |
TOOLS.MCP.TASKS.PROXY_TIMEOUT_SEC |
Integer | SoAI stops proxying an unfinished MCP task after this many seconds. | 3600 |
Yes |
TOOLS.MCP.TASKS.TOOL_TIMEOUT_SEC |
Number | Tool execution owned by an MCP task must finish within this many seconds. | 600.0 |
Yes |
TOOLS.MCP.CLIENT_NOTIFICATION_QUEUE_SIZE |
Integer | One MCP client session buffers up to this many pending server notifications. | 1024 |
Yes |
TOOLS.MCP.SESSION_TTL_SEC |
Integer | SoAI expires an inactive MCP server-mode session after this many seconds. | 3600 |
Yes |
TOOLS.MCP.SESSION_SWEEP_INTERVAL_SEC |
Integer | Interval, in seconds, between removal passes for expired MCP sessions. | 300 |
Yes |
TOOLS.MEDIA_PARSING.VIDEO_OCR_FRAMES_PER_SECOND |
Number | Video frame sample rate used when extracting visible text with OCR. | 1.0 |
Yes |
TOOLS.MEDIA_PARSING.VIDEO_OCR_MAX_FRAMES |
Integer | OCR inspects up to this many sampled video frames during one parse. | 360 |
Yes |
TOOLS.MEDIA_PARSING.VIDEO_OCR_MAX_TEXT_CHARS |
Integer | One parsed video contributes up to this many OCR characters. | 250000 |
Yes |
TOOLS.MEDIA_PARSING.OCR_FRAME_TIMEOUT_SEC |
Integer | OCR on one sampled video frame must finish within this many seconds. | 60 |
Yes |
TOOLS.MEDIA_PARSING.PARSE_TIMEOUT_SEC |
Integer | Overall deadline, in seconds, for one document, audio, image, or video parse job. | 21600 |
Yes |
TOOLS.RAG.ENABLED |
Boolean | Starts the knowledge-base indexing, retrieval, and configured web-search capabilities. | true |
Yes |
TOOLS.RAG.CHROMA_PATH |
String | Chroma vector index directory, resolved under the system data directory. | "chroma_rag" |
Yes |
TOOLS.RAG.CHROMA_SHARD_COUNT |
Integer | Number of isolated Chroma worker shards used for vector index operations. | 1 |
Yes |
TOOLS.RAG.CHROMA_IPC_STARTUP_TIMEOUT_SEC |
Integer | Chroma worker IPC must become ready within this many seconds. | 300 |
Yes |
TOOLS.RAG.CHROMA_IPC_RETRY_COUNT |
Integer | Additional attempts made after a Chroma IPC operation fails transiently. | 1 |
Yes |
TOOLS.RAG.CHROMA_IPC_JOB_TTL_SEC |
Integer | A submitted Chroma IPC job remains recoverable for this many seconds before it expires. | 3600 |
Yes |
TOOLS.RAG.CHROMA_QUERY_TIMEOUT_SEC |
Integer | A Chroma vector similarity query must finish within this many seconds. | 30 |
Yes |
TOOLS.RAG.CHROMA_DELETE_TIMEOUT_SEC |
Integer | A Chroma vector deletion must finish within this many seconds. | 30 |
Yes |
TOOLS.RAG.CHROMA_ADD_TIMEOUT_SEC |
Integer | A Chroma vector insertion batch must finish within this many seconds. | 600 |
Yes |
TOOLS.RAG.CHROMA_ADD_CANCEL_WAIT_SEC |
Integer | SoAI waits this many seconds for a cancelled Chroma insertion to stop. | 2 |
Yes |
TOOLS.RAG.REINDEX_CHUNK_PAGE_SIZE |
Integer | Document chunks processed per page while rebuilding a knowledge index. | 256 |
Yes |
TOOLS.RAG.DEFAULT_EMBEDDING_MODEL |
String | Embedding model used for knowledge collections that do not select one. Auto resolves an available model. | "auto" |
Yes |
TOOLS.RAG.PROCESSING_WORKERS |
Integer | Workers that parse, chunk, embed, and index queued knowledge documents. | 3 |
Yes |
TOOLS.RAG.PROCESSING_QUEUE_SIZE |
Integer | The in-memory knowledge processing queue holds up to this many waiting jobs. | 1024 |
Yes |
TOOLS.RAG.PROCESSING_JOB_LEASE_TTL_SEC |
Integer | Recovery may claim a knowledge processing job after its lease has gone unrenewed for this many seconds. | 900 |
Yes |
TOOLS.RAG.EMBEDDING_TIMEOUT |
Integer | An embedding request must finish within this many seconds. | 300 |
Yes |
TOOLS.RAG.EMBEDDING_RETRY_ATTEMPTS |
Integer | SoAI makes this many attempts for an embedding batch that fails transiently. | 6 |
Yes |
TOOLS.RAG.EMBEDDING_BATCH_SIZE |
Integer | One embedding request contains up to this many text chunks. | 64 |
Yes |
TOOLS.RAG.EMBEDDING_MAX_BATCH_CHARS |
Integer | One embedding request contains up to this many combined source characters. | 24000 |
Yes |
TOOLS.RAG.CHROMA_ADD_BATCH_SIZE |
Integer | One Chroma insertion batch writes up to this many vector records. | 64 |
Yes |
TOOLS.RAG.SPARSE_INDEX_DIR |
String | Lexical sparse index directory, resolved under the system data directory. | "rag_sparse_index" |
Yes |
TOOLS.RAG.DEFAULT_CHUNK_SIZE |
Integer | Default target size of indexed text chunks, counted in tokens by the token based strategy and in characters by the others. | 500 |
Yes |
TOOLS.RAG.DEFAULT_CHUNK_OVERLAP |
Integer | Default overlap repeated between adjacent indexed chunks, in the unit its chunking strategy counts; paragraph ignores it and semantic converts it to whole sentences. | 100 |
Yes |
TOOLS.RAG.DEFAULT_TOP_K |
Integer | Default number of highest-scoring knowledge passages returned by a search. | 5 |
Yes |
TOOLS.RAG.DEFAULT_SIMILARITY_THRESHOLD |
Number | Default minimum vector similarity score required for a knowledge result. | 0.3 |
Yes |
TOOLS.RAG.BRAVE.DEFAULT_SEARCH_LANG |
String | Brave Search language code used when a web search omits language. | "en" |
Yes |
TOOLS.RAG.BRAVE.DEFAULT_COUNTRY |
String | Brave Search country code used when a web search omits country. | "US" |
Yes |
TOOLS.RAG.DUCKDUCKGO.BACKEND |
String | DuckDuckGo search implementation to use. Auto selects the supported backend. | "auto" |
Yes |
TOOLS.RAG.DUCKDUCKGO.PROXY |
String | Proxy URL passed to DuckDuckGo search requests. Empty connects without a DuckDuckGo proxy and does not use the shared web proxy settings. | "" |
Yes |
TOOLS.RAG.DUCKDUCKGO.TIMEOUT |
Integer | A DuckDuckGo search request must finish within this many seconds. | 10 |
Yes |
TOOLS.RAG.GOOGLE.DEFAULT_SAFE |
String | Google Programmable Search safe-search mode used when a call omits it. | "active" |
Yes |
TOOLS.RAG.GOOGLE.SEARCH_ENGINE_ID |
String | Google Programmable Search engine identifier paired with the configured Google API credential. | "" |
Yes |
TOOLS.RAG.SEARXNG.BASE_URL |
String | Base URL of the SearXNG instance used for web search. | "" |
Yes |
TOOLS.RAG.SEARXNG.DEFAULT_CATEGORIES |
List | SearXNG categories requested when a search does not specify categories. | ["general"] |
Yes |
TOOLS.RAG.SEARXNG.ENGINES |
List | SearXNG engines explicitly requested for each search. Empty lets the instance choose. | [] |
Yes |
TOOLS.RAG.SERPER.DEFAULT_GL |
String | Serper geographic country code used when a search omits gl. | "us" |
Yes |
TOOLS.RAG.SERPER.DEFAULT_HL |
String | Serper interface language code used when a search omits hl. | "en" |
Yes |
TOOLS.RAG.TAVILY.DEFAULT_SEARCH_DEPTH |
String | Tavily search-depth mode used when a search omits it. | "basic" |
Yes |
TOOLS.RAG.TAVILY.INCLUDE_ANSWER |
Boolean | Requests Tavily's generated answer in addition to the source search results. | false |
Yes |
TOOLS.RAG.WEB.ENABLED |
Boolean | Makes configured web search and knowledge web-fetch tools available. | true |
Yes |
TOOLS.RAG.WEB.DEFAULT_PROVIDER |
String | Search provider used when a web-search tool call does not name one. | "duckduckgo" |
Yes |
TOOLS.RAG.WEB.MAX_URL_SIZE_MB |
Integer | Knowledge web fetching rejects a remote document larger than this many megabytes. | 10 |
Yes |
TOOLS.RAG.WEB.REQUEST_TIMEOUT |
Integer | Default HTTP request deadline, in seconds, for search provider calls. | 30 |
Yes |
TOOLS.RAG.WEB.FETCH_TOTAL_TIMEOUT_SEC |
Integer | Overall deadline, in seconds, for a standard document fetch and parse. | 30 |
Yes |
TOOLS.RAG.WEB.FETCH_VARIANTS_TOTAL_TIMEOUT_SEC |
Integer | Overall deadline, in seconds, when a fetch tries alternate retrieval variants. | 35 |
Yes |
TOOLS.RAG.WEB.DNS_TIMEOUT_SEC |
Integer | A web search or fetch fails if its safety check cannot resolve the destination within this many seconds. | 5 |
Yes |
TOOLS.RAG.WEB.STREAM_CHUNK_SIZE |
Integer | Bytes read per streamed response chunk while fetching a remote document. | 65536 |
Yes |
TOOLS.RAG.WEB.HTML_PARSE_TIMEOUT |
Integer | Readable-content extraction from fetched HTML must finish within this many seconds. | 60 |
Yes |
TOOLS.RAG.WEB.PDF_PARSE_TIMEOUT |
Integer | Text extraction from a fetched PDF must finish within this many seconds. | 300 |
Yes |
TOOLS.RAG.WEB.CONTENT_MAX_CHARS |
Integer | SoAI keeps up to this many extracted characters from one fetched document. | 120000 |
Yes |
TOOLS.RAG.WEB.CONTENT_TRIM_MODE |
String | Method used at the fetched-text limit. sentence trims at a text boundary; hard cuts at the exact character count. | "sentence" |
Yes |
TOOLS.RAG.WEB.USER_AGENT |
String | Default HTTP User-Agent header sent when fetching web documents. | "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36" |
Yes |
TOOLS.RAG.WEB.ACCEPT_LANGUAGE |
String | HTTP Accept-Language header sent when fetching web documents. | "en-US,en;q=0.9" |
Yes |
TOOLS.RAG.WEB.ACCEPT_HEADER |
String | HTTP Accept header sent when fetching web documents. | "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" |
Yes |
TOOLS.RAG.WEB.FETCH_RETRY_ATTEMPTS |
Integer | Total number of web-fetch attempts for an eligible transient failure, including the first request. | 3 |
Yes |
TOOLS.RAG.WEB.FETCH_RETRY_DELAY |
Integer | Base delay, in seconds, between eligible web-fetch retries. | 2 |
Yes |
TOOLS.RAG.WEB.FETCH_CONTEXT.MAX_TOP_K |
Integer | Compact fetched context includes up to this many passages for the model. | 8 |
Yes |
TOOLS.RAG.WEB.FETCH_CONTEXT.MAX_PASSAGE_CHARS |
Integer | Compact fetched context keeps up to this many characters from one passage. | 700 |
Yes |
TOOLS.RAG.WEB.FETCH_CONTEXT.MAX_TOTAL_CHARS |
Integer | Compact fetched context contains up to this many combined characters. | 2048 |
Yes |
TOOLS.RAG.WEB.MARKDOWN.STRIP_LINK_URLS |
Boolean | Removes destination URLs while converting fetched pages to readable Markdown. | true |
Yes |
TOOLS.RAG.WEB.MARKDOWN.STRIP_IMAGES |
Boolean | Removes image references while converting fetched pages to readable Markdown. | true |
Yes |
TOOLS.RAG.WEB.URL_CACHE.ENABLED |
Boolean | Caches processed web documents by canonical URL. | true |
Yes |
TOOLS.RAG.WEB.URL_CACHE.TTL_SEC |
Integer | The URL cache keeps a processed web document valid for this many seconds. | 3600 |
Yes |
TOOLS.RAG.WEB.SEARCH_RETRY_ATTEMPTS |
Integer | Total number of search-provider attempts for an eligible transient failure, including the first request. | 3 |
Yes |
TOOLS.RAG.WEB.SEARCH_RETRY_DELAY |
Integer | Base delay, in seconds, between eligible search-provider retries. | 2 |
Yes |
TOOLS.RAG.WEB.USER_AGENT_ROTATION.ENABLED |
Boolean | Varies the User-Agent header across web document fetches. | true |
Yes |
TOOLS.RAG.WEB.USER_AGENT_ROTATION.MODE |
String | User-Agent selection policy. sequential rotates in order; any other value selects randomly. | "random" |
Yes |
TOOLS.RAG.WEB.USER_AGENT_ROTATION.CUSTOM_AGENTS |
List | Additional User-Agent strings available to the fetch rotation policy. | [] |
Yes |
TOOLS.RAG.WEB.PROXY.ENABLED |
Boolean | Routes eligible web search and document-fetch traffic through configured proxies. | false |
Yes |
TOOLS.RAG.WEB.PROXY.HTTP_PROXY |
String | HTTP proxy used when no rotation-list, SOCKS5, or HTTPS proxy is configured. | "" |
Yes |
TOOLS.RAG.WEB.PROXY.HTTPS_PROXY |
String | HTTPS proxy used for eligible web requests when no rotation-list or SOCKS5 proxy is configured; it takes precedence over HTTP_PROXY. |
"" |
Yes |
TOOLS.RAG.WEB.PROXY.SOCKS5_PROXY |
String | SOCKS5 proxy URL available for supported outbound web requests. | "" |
Yes |
TOOLS.RAG.WEB.PROXY.NO_PROXY |
String | Comma-separated hostnames that bypass configured web proxies. Matching is case-insensitive and exact; networks, suffixes, ports, and wildcards are not interpreted. | "localhost,127.0.0.1" |
Yes |
TOOLS.RAG.WEB.PROXY.ROTATION_ENABLED |
Boolean | Chooses among configured proxy-list entries across eligible requests. | false |
Yes |
TOOLS.RAG.WEB.PROXY.PROXY_LIST |
List | Additional proxy URLs available to the web proxy rotation policy. | [] |
Yes |
TOOLS.RAG.WEB.BROWSER_RENDER_ON_TIMEOUT_ENABLED |
Boolean | Retries a timed-out direct web fetch with a managed browser renderer. | true |
Yes |
TOOLS.RAG.WEB.BROWSER_RENDER_ON_HTTP_ERROR_ENABLED |
Boolean | Retries selected direct-fetch HTTP errors with a managed browser renderer. | true |
Yes |
TOOLS.RAG.WEB.BROWSER_RENDER_ON_HTTP_ERROR_STATUS_CODES |
List | HTTP status codes that may trigger a browser-rendered fetch retry. | [403, 429] |
Yes |
TOOLS.RAG.WEB.BROWSER_RENDER_HEADLESS |
Boolean | Runs the fallback web document renderer without a visible browser window. | true |
Yes |
TOOLS.RAG.WEB.BROWSER_RENDER_NAV_TIMEOUT_SEC |
Integer | Fallback browser navigation must finish within this many seconds. | 30 |
Yes |
TOOLS.RAG.WEB.BROWSER_RENDER_STABILIZE_MS |
Integer | Milliseconds the fallback renderer waits for page content to settle after navigation. | 750 |
Yes |
TOOLS.RAG.WEB.BROWSER_RENDER_MAX_CONCURRENT_PAGES |
Integer | The fallback renderer keeps up to this many pages active at the same time. | 2 |
Yes |
TOOLS.RAG.WEB.BROWSER_RENDER_BLOCK_IMAGES |
Boolean | Blocks image requests in fallback-renderer pages. | true |
Yes |
TOOLS.RAG.WEB.BROWSER_RENDER_BLOCK_FONTS |
Boolean | Blocks web-font requests in fallback-renderer pages. | true |
Yes |
TOOLS.RAG.WEB.BROWSER_RENDER_BLOCK_MEDIA |
Boolean | Blocks audio and video requests in fallback-renderer pages. | true |
Yes |
TOOLS.RAG.WEB.BROWSER_RENDER_BLOCK_ADS |
Boolean | Blocks advertising requests in fallback-renderer pages. | true |
Yes |
DATA
| Setting | Type | Description | Factory default | Requires restart |
|---|---|---|---|---|
DATA.DATABASE.PATHS.SYSTEM_DB |
String | Primary SQLite database path, resolved under the system data directory. | "database/soai.db" |
Yes |
DATA.DATABASE.SQLITE.CONNECT_TIMEOUT_SEC |
Integer | SQLite waits this many seconds for a locked database when opening a connection. | 10 |
Yes |
DATA.DATABASE.SQLITE.VACUUM_INTERVAL_HOURS |
Integer | Minimum hours since the last successful SQLite VACUUM before maintenance is considered at startup. Set to 0 to disable automatic VACUUM. | 720 |
Yes |
DATA.DATABASE.SQLITE.READ_POOL_MAX_SIZE |
Integer | The connection pool keeps up to this many read-only SQLite connections. | 8 |
Yes |
DATA.DATABASE.SQLITE.READ_MMAP_SIZE_MB |
Integer | Read connections use an SQLite memory-mapped I/O region of up to this many megabytes. | 4096 |
Yes |
DATA.DATABASE.SQLITE.WRITE_MMAP_SIZE_MB |
Integer | The writer connection uses an SQLite memory-mapped I/O region of up to this many megabytes. | 4096 |
Yes |
DATA.DATABASE.WRITER.INIT_TIMEOUT_SEC |
Integer | The serialized database writer must initialize within this many seconds. | 120 |
Yes |
DATA.DATABASE.WRITER.SHUTDOWN_TIMEOUT_SEC |
Integer | The database writer gets this many seconds to stop during shutdown. | 5 |
Yes |
DATA.DATABASE.WRITER.OPERATION_TIMEOUT_SEC |
Integer | A queued database write must finish within this many seconds. | 120 |
Yes |
DATA.DATABASE.METRICS.IO_LOGGING |
Boolean | Records sampled database read and write timing in diagnostic logs. | false |
Yes |
DATA.DATABASE.METRICS.IO_SAMPLE_INTERVAL_SEC |
Integer | Minimum seconds between database I/O diagnostic samples. | 1 |
Yes |
DATA.FILES.PATHS.FILES_STORAGE |
String | Managed files directory, resolved under the system data directory. | "files" |
Yes |
DATA.FILES.RECONCILIATION_CONCURRENCY |
Integer | SoAI reconciles up to this many file records with disk contents at the same time. | 32 |
Yes |
DATA.FILES.INITIAL_CLEANUP_ENABLED |
Boolean | Removes stale managed-file records and abandoned temporary files during startup reconciliation. | true |
Yes |
DATA.FILES.DIRECTORY_SCAN_TIMEOUT_SEC |
Number | A managed-files directory scan must finish within this many seconds. | 600.0 |
Yes |
DATA.FILE_EXPLORER.ENABLED |
Boolean | Makes the managed file explorer and its file operations available. | true |
Yes |
DATA.FILE_EXPLORER.ALLOW_SYMLINKS |
Boolean | Allows file explorer paths to traverse symbolic links within the managed file boundary. | false |
Yes |
DATA.FILE_EXPLORER.MAX_DOWNLOAD_ARCHIVE_SIZE_MB |
Integer | The file explorer rejects a generated directory-download archive larger than this many megabytes. | 4096 |
Yes |
DATA.FILE_EXPLORER.MAX_DOWNLOAD_ARCHIVE_MEMBERS |
Integer | One generated download archive contains up to this many files and directories. | 100000 |
Yes |
DATA.FILE_EXPLORER.TEXT_PREVIEW_LIMIT_KB |
Integer | An inline text preview reads up to this many kilobytes from a file. | 1024 |
Yes |
DATA.FILE_EXPLORER.LISTING_PAGINATION_LIMIT |
Integer | Default maximum entries returned in one file explorer directory page. | 100 |
Yes |
DATA.BACKUP.ENABLED |
Boolean | Enables manual and scheduled SoAI backups. | true |
Yes |
DATA.BACKUP.BACKUPS_PATH |
String | Managed backup directory, resolved under the system data directory. | "backups" |
Yes |
DATA.BACKUP.SQLITE_BACKUP_TIMEOUT_SECONDS |
Integer | Base deadline, in seconds, for copying the SQLite database into a backup. | 3600 |
Yes |
DATA.BACKUP.SQLITE_BACKUP_TIMEOUT_SECONDS_PER_GIB |
Integer | Additional database backup seconds allowed for each GiB of SQLite data. | 900 |
Yes |
DATA.BACKUP.CONFIG_LOCK_TIMEOUT_SECONDS |
Integer | A backup waits this many seconds to lock the Core configuration files. | 30 |
Yes |
DATA.BACKUP.PLUGIN_LOCK_TIMEOUT_SECONDS |
Integer | A backup waits this many seconds to lock plugin configuration files. | 15 |
Yes |
DATA.BACKUP.OPERATIONS_LOCK_TIMEOUT_SECONDS |
Integer | A backup or restore waits this many seconds for the global operations lock. | 300 |
Yes |
DATA.BACKUP.EXPORT_LOCK_TIMEOUT_SECONDS |
Integer | An archive export waits this many seconds for access to a completed backup. | 5 |
Yes |
DATA.BACKUP.RESTORE_COPY_TIMEOUT_SECONDS |
Integer | Restored files must finish copying into their managed locations within this many seconds. | 1800 |
Yes |
DATA.BACKUP.RESTORE_PROGRESS_INTERVAL_SECONDS |
Number | Minimum seconds between restore progress updates. | 2.0 |
Yes |
DATA.BACKUP.SCHEDULE.INTERVAL_HOURS |
Integer | Hours between recurring scheduled backup attempts. | 24 |
Yes |
DATA.BACKUP.SCHEDULE.RUN_ON_STARTUP |
Boolean | Queues a backup after SoAI finishes startup recovery. | false |
Yes |
DATA.BACKUP.SCHEDULE.ON_SHUTDOWN |
Boolean | Attempts a final managed backup during clean shutdown. | false |
Yes |
DATA.BACKUP.SCHEDULE.ON_SHUTDOWN_TIMEOUT_SEC |
Integer | A shutdown backup gets this many seconds to finish. | 120 |
Yes |
DATA.BACKUP.SCHEDULE.RETRY_BASE_SECONDS |
Integer | Initial delay, in seconds, before retrying a failed scheduled backup. | 60 |
Yes |
DATA.BACKUP.SCHEDULE.RETRY_MAX_SECONDS |
Integer | Repeated scheduled backup failures increase the retry delay up to this many seconds. | 1800 |
Yes |
DATA.BACKUP.RETENTION.MAX_BACKUPS |
Integer | A retention pass keeps up to this many completed backups. | 7 |
Yes |
DATA.BACKUP.RETENTION.MAX_AGE_HOURS |
Integer | Retention removes a completed backup after this many hours. | 720 |
Yes |
DATA.BACKUP.RETENTION.STALE_PART_THRESHOLD_HOURS |
Integer | Age, in hours, after which an incomplete backup part is considered stale. | 1 |
Yes |
DATA.BACKUP.RETENTION.ORPHAN_AGE_HOURS |
Integer | Age, in hours, after which untracked backup files are eligible for cleanup. | 168 |
Yes |
DATA.BACKUP.TARGETS.DATABASE |
Boolean | Includes the primary SoAI database in managed backups. | true |
Yes |
DATA.BACKUP.TARGETS.CONFIG |
Boolean | Includes the active and factory Core configuration files in managed backups. | true |
Yes |
DATA.BACKUP.TARGETS.ENCRYPTION_KEY |
Boolean | Includes the system encryption key needed to read protected restored values. | true |
Yes |
DATA.BACKUP.TARGETS.PLUGIN_CONFIGS |
Boolean | Includes installed plugin sidecar configuration files in managed backups. | true |
Yes |
DATA.BACKUP.TARGETS.USER_DATA |
Boolean | Includes user-managed files and other backed-up user data. | true |
Yes |
DATA.BACKUP.TARGETS.GPU_SETTINGS |
Boolean | Includes saved GPU settings slots in managed backups. | true |
Yes |
DATA.BACKUP.TARGETS.LOGS |
Boolean | Includes application and plugin log files in managed backups. | false |
Yes |
INTEGRATIONS
AUTOMATION
| Setting | Type | Description | Factory default | Requires restart |
|---|---|---|---|---|
AUTOMATION.SCHEDULER_TICK_SECONDS |
Number | Interval, in seconds, between checks for automation runs that are due. | 10.0 |
Yes |
AUTOMATION.DUE_BATCH_LIMIT |
Integer | One scheduler tick claims up to this many due automation runs. | 100 |
Yes |
AUTOMATION.MAX_CONCURRENT_RUNS |
Integer | SoAI runs up to this many automations at the same time across all users. | 2 |
Yes |
AUTOMATION.MAX_CONCURRENT_RUNS_PER_USER |
Integer | One user may have this many automation runs active at the same time. | 1 |
Yes |
AUTOMATION.DISALLOWED_UNQUALIFIED_TOOLS |
List | Automations may call these tool names only with a server-qualified name. | [] |
Yes |