EverOS/src/everos/config/default.toml

166 lines
6.7 KiB
TOML

# everos default configuration.
#
# Lookup order (later overrides earlier):
# 1. This file (shipped defaults; lowest priority)
# 2. <root>/everos.toml — user config (optional; root resolved by
# resolve_root(): EVEROS_ROOT env > ~/.everos)
# 3. Environment variables — EVEROS_<SECTION>__<KEY>
# e.g. EVEROS_SQLITE__BUSY_TIMEOUT_MS=10000
# 4. Programmatic init args (highest priority)
#
# `null` (omitted in TOML) means "use the Pydantic default declared in code".
[memory]
# Effective timezone for date buckets and timestamps. Drives
# component.utils.datetime; this is the SOLE source — OS `TZ` is not
# read. Override via `EVEROS_MEMORY__TIMEZONE` env var if needed.
timezone = "UTC"
[api]
# HTTP server bind for ``everos server start``. Default ``127.0.0.1``
# keeps the API on loopback only — EverOS ships no built-in auth (see
# SECURITY.md threat model). Only set ``host = "0.0.0.0"`` after you
# have placed your own gateway / auth layer in front of the server.
# Override via EVEROS_API__HOST and EVEROS_API__PORT.
host = "127.0.0.1"
port = 8000
[sqlite]
# PRAGMA journal_mode — WAL is the recommended high-concurrency mode.
journal_mode = "WAL"
# PRAGMA synchronous — NORMAL is safe under WAL and ~2x faster than FULL.
synchronous = "NORMAL"
# PRAGMA foreign_keys — must be explicitly enabled per connection.
foreign_keys = true
# PRAGMA temp_store — MEMORY keeps query intermediates in RAM (no IO impact
# on durability — only affects sort/group/temp-table calculation buffers).
temp_store = "MEMORY"
# PRAGMA busy_timeout — milliseconds to wait on a locked DB before erroring.
busy_timeout_ms = 5000
# PRAGMA journal_size_limit — cap WAL/journal at ~64 MB.
journal_size_limit_bytes = 67108864
# PRAGMA cache_size — KB of page cache (per connection).
cache_size_kb = 2048
[lancedb]
# Read consistency interval in seconds.
# omitted / null -> no consistency check (fastest reads)
# 0 -> strict (every read checks updates)
# >0 -> eventual (interval seconds between checks)
# Uncomment to override:
# read_consistency_seconds = 5.0
[llm]
# Provider-agnostic OpenAI-protocol client config. Override via env:
# EVEROS_LLM__MODEL, EVEROS_LLM__API_KEY, EVEROS_LLM__BASE_URL
# Or set the field directly in this file (<root>/everos.toml).
model = "openai/gpt-4.1-mini"
api_key = ""
base_url = "https://openrouter.ai/api/v1"
[multimodal]
# Independent LLM for multimodal parsing (everalgo-parser); must accept
# image / pdf / audio image_url parts. Override via env:
# EVEROS_MULTIMODAL__MODEL, EVEROS_MULTIMODAL__API_KEY, EVEROS_MULTIMODAL__BASE_URL
model = "google/gemini-3-flash-preview"
api_key = ""
base_url = "https://openrouter.ai/api/v1"
max_concurrency = 4
# file:// content-item support (read locally by EverOS, not everalgo).
# file_uri_allow_dirs: empty = allow any readable file (local-first default);
# list base dirs to confine reads when the API is exposed.
# file_uri_allow_dirs = ["/srv/uploads"]
# file_uri_max_bytes = 52428800 # 50 MiB cap per file:// asset
[embedding]
# OpenAI-compatible embedding endpoint. Override via env:
# EVEROS_EMBEDDING__MODEL, EVEROS_EMBEDDING__API_KEY, EVEROS_EMBEDDING__BASE_URL
# model and base_url ship with recommended defaults; api_key must be set.
model = "Qwen/Qwen3-Embedding-4B"
api_key = ""
base_url = "https://api.deepinfra.com/v1/openai"
timeout_seconds = 30.0
max_retries = 3
batch_size = 10
max_concurrent = 5
[rerank]
# Rerank provider. Override via env:
# EVEROS_RERANK__PROVIDER, EVEROS_RERANK__MODEL, EVEROS_RERANK__API_KEY,
# EVEROS_RERANK__BASE_URL
# `provider` picks the request-shape:
# - "deepinfra" -> POST {base_url}/{model} (DeepInfra inference API)
# - "vllm" -> POST {base_url}/rerank (OpenAI-compat rerank endpoint)
provider = "deepinfra"
model = "Qwen/Qwen3-Reranker-4B"
api_key = ""
base_url = "https://api.deepinfra.com/v1/inference"
timeout_seconds = 30.0
max_retries = 3
batch_size = 10
max_concurrent = 5
[boundary_detection]
# Passed through to ``everalgo.BoundaryDetector.adetect``.
hard_token_limit = 65536
hard_msg_limit = 500
[memorize]
# Conversation mode. Selects the boundary detector and which pipelines run:
# "chat" -> BoundaryDetector + user_memory only
# "agent" -> AgentBoundaryDetector + user_memory + agent_memory
# A single service process serves one mode at a time; switching mode
# requires a restart. Override via EVEROS_MEMORIZE__MODE.
mode = "agent"
[knowledge]
# Max bytes for an uploaded knowledge document (default 50 MiB). Oversized
# uploads are rejected with HTTP 422 before parsing/extraction. Note: the
# multipart body is still buffered by the server first, so set a reverse-proxy
# / gateway body-size limit for hard ingress protection.
# Override via EVEROS_KNOWLEDGE__MAX_UPLOAD_BYTES.
max_upload_bytes = 52_428_800 # 50 MiB
[knowledge.search]
recall_n = 200
rerank_n = 50
# "lambda" is a Python keyword — aliased as "lam" in Settings
lambda = 0.1
mass_top_m = 50
top_k_cap = 100
# Maximum wall-clock for one memorize() invocation while holding the
# per-session lock. On timeout the outer asyncio.timeout cancels the call
# and the lock auto-releases so subsequent concurrent /add on the same
# session aren't deadlocked. Covers boundary LLM + memcell writes +
# synchronous portion of pipeline dispatch.
# Override via EVEROS_MEMORIZE__SESSION_LOCK_TIMEOUT_SECONDS.
session_lock_timeout_seconds = 360.0
[clustering]
# Geometry-clustering: cosine similarity threshold and time window.
# Episodes older than ``time_window_days`` from the newest cluster
# member are excluded from merge consideration.
# Override via EVEROS_CLUSTERING__THRESHOLD, EVEROS_CLUSTERING__TIME_WINDOW_DAYS.
threshold = 0.65
time_window_days = 7.0
[observability]
# OpenTelemetry tracing export. Off by default; pure OTLP/HTTP, vendor-neutral
# (Langfuse, an OTel Collector, or any OTLP backend). EverOS ships no vendor SDK.
# Override via EVEROS_OBSERVABILITY__ENABLED, EVEROS_OBSERVABILITY__ENDPOINT, etc.
enabled = false
exporter = "otlp_http" # "otlp_http" | "none"
endpoint = "" # e.g. https://us.cloud.langfuse.com/api/public/otel/v1/traces
service_name = "everos"
sample_rate = 1.0 # 0.0 to 1.0
# Privacy: false (default) = metadata only; true also emits query / extracted
# memory / .md paths as span input/output (redacted + truncated).
capture_content = false
# Recall-quality scores pushed to Langfuse (Langfuse-specific REST, off the
# OTLP stream). Only fires when langfuse_public_key/secret_key/host are set
# (via everos.toml or EVEROS_OBSERVABILITY__LANGFUSE_* — secrets, not shipped here).
emit_recall_scores = true
recall_hit_threshold = 0.6 # only meaningful for calibrated methods