Skip to content

Configuration Reference

Complete EdgeQuake Configuration Options

EdgeQuake is configured through environment variables and a models.toml file. This reference covers all available options.


┌─────────────────────────────────────────────────────────────────┐
│ CONFIGURATION PRIORITY │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 1. Environment Variables (highest priority) │
│ │ │
│ 2. models.toml (for LLM/embedding configuration) │
│ │ - EDGEQUAKE_MODELS_CONFIG env var path │
│ │ - ./models.toml (current directory) │
│ │ - ~/.edgequake/models.toml │
│ │ - Built-in defaults │
│ │ │
│ 3. Compile-time defaults (lowest priority) │
│ │
└─────────────────────────────────────────────────────────────────┘

VariableTypeDefaultDescription
HOSTString0.0.0.0Server bind address
PORTInteger8080Server port
RUST_LOGStringedgequake=debugLog level filter
WORKER_THREADSIntegerCPU countBackground task workers
VariableTypeDefaultDescription
DATABASE_URLStringNonePostgreSQL connection string

Connection String Format:

postgresql://user:password@host:port/database?sslmode=require

Examples:

Terminal window
# Local development
DATABASE_URL="postgresql://edgequake:edgequake_secret@localhost:5432/edgequake"
# Production with SSL
DATABASE_URL="postgresql://edgequake:pass@db.example.com:5432/edgequake?sslmode=require"
# With connection pooling
DATABASE_URL="postgresql://edgequake:pass@pgbouncer:6432/edgequake"
VariableTypeDefaultDescription
OPENAI_API_KEYStringNoneOpenAI API key (required for OpenAI)
OPENAI_BASE_URLStringhttps://api.openai.com/v1API endpoint
OPENAI_ORG_IDStringNoneOrganization ID (optional)
VariableTypeDefaultDescription
OLLAMA_HOSTStringhttp://localhost:11434Ollama server URL
OLLAMA_MODELStringgemma3:latestDefault LLM model
OLLAMA_EMBEDDING_MODELStringnomic-embed-textDefault embedding model
VariableTypeDefaultDescription
LM_STUDIO_BASE_URLStringhttp://localhost:1234LM Studio server URL
VariableTypeDefaultDescription
ANTHROPIC_API_KEYStringNoneAnthropic API key (required)
ANTHROPIC_BASE_URLStringhttps://api.anthropic.comAPI endpoint
VariableTypeDefaultDescription
GEMINI_API_KEYStringNoneGoogle AI API key
GEMINI_BASE_URLStringhttps://generativelanguage.googleapis.comAPI endpoint
VariableTypeDefaultDescription
XAI_API_KEYStringNonexAI API key
XAI_BASE_URLStringhttps://api.x.ai/v1API endpoint
VariableTypeDefaultDescription
OPENROUTER_API_KEYStringNoneOpenRouter API key (required)
OPENROUTER_BASE_URLStringhttps://openrouter.ai/apiAPI endpoint
VariableTypeDefaultDescription
AZURE_OPENAI_API_KEYStringNoneAzure OpenAI key (required)
AZURE_OPENAI_ENDPOINTStringNoneAzure resource endpoint
AZURE_OPENAI_API_VERSIONString2024-02-15-previewAPI version
VariableTypeDefaultDescription
EDGEQUAKE_MODELS_CONFIGStringNonePath to custom models.toml
EDGEQUAKE_LLM_PROVIDERStringollamaDefault LLM provider
EDGEQUAKE_EMBEDDING_PROVIDERStringollamaDefault embedding provider

The models.toml file configures LLM providers and model cards.

  1. EDGEQUAKE_MODELS_CONFIG environment variable
  2. ./models.toml (current working directory)
  3. ~/.edgequake/models.toml (user home)
  4. Built-in defaults
# Default provider selection
[defaults]
llm_provider = "ollama" # or "openai", "lm_studio"
llm_model = "gemma3:12b"
embedding_provider = "ollama"
embedding_model = "embeddinggemma"
# Provider definitions
[[providers]]
name = "openai"
display_name = "OpenAI"
type = "openai"
api_base = "https://api.openai.com/v1"
api_key_env = "OPENAI_API_KEY"
enabled = true
priority = 10
description = "OpenAI GPT models"
# Model definitions within provider
[[providers.models]]
name = "gpt-4o-mini"
display_name = "GPT-4o Mini"
model_type = "llm" # or "embedding"
description = "Cost-effective model"
deprecated = false
tags = ["recommended", "fast"]
[providers.models.capabilities]
context_length = 128000
max_output_tokens = 16384
supports_vision = true
supports_function_calling = true
supports_json_mode = true
supports_streaming = true
supports_system_message = true
embedding_dimension = 0 # 0 for LLMs, >0 for embeddings
[providers.models.cost]
input_per_1k = 0.00015
output_per_1k = 0.0006
embedding_per_1k = 0.0
image_per_unit = 0.0
TypeDescriptionAPI Key Variable
openaiOpenAI API compatibleOPENAI_API_KEY
anthropicAnthropic Claude modelsANTHROPIC_API_KEY
geminiGoogle Gemini modelsGEMINI_API_KEY
xaixAI Grok modelsXAI_API_KEY
openrouterOpenRouter aggregatorOPENROUTER_API_KEY
azureAzure OpenAIAZURE_OPENAI_API_KEY
ollamaOllama local modelsNone (local)
lm_studioLM Studio localNone (local)
mockTesting without costsNone
TypePurposeKey Capability
llmText generationcontext_length, max_output_tokens
embeddingVector embeddingsembedding_dimension

[[providers]]
name = "openai"
display_name = "OpenAI"
type = "openai"
api_base = "https://api.openai.com/v1"
api_key_env = "OPENAI_API_KEY"
enabled = true
priority = 10
[[providers.models]]
name = "gpt-4o-mini"
display_name = "GPT-4o Mini"
model_type = "llm"
tags = ["recommended"]
[providers.models.capabilities]
context_length = 128000
max_output_tokens = 16384
supports_vision = true
supports_function_calling = true
supports_json_mode = true
supports_streaming = true
[[providers.models]]
name = "text-embedding-3-small"
display_name = "Text Embedding 3 Small"
model_type = "embedding"
tags = ["recommended"]
[providers.models.capabilities]
context_length = 8191
embedding_dimension = 1536
[[providers]]
name = "ollama"
display_name = "Ollama"
type = "ollama"
api_base = "http://localhost:11434"
enabled = true
priority = 20
[[providers.models]]
name = "gemma3:12b"
display_name = "Gemma 3 12B"
model_type = "llm"
tags = ["recommended", "local"]
[providers.models.capabilities]
context_length = 128000
max_output_tokens = 8192
supports_vision = true
supports_streaming = true
[[providers.models]]
name = "nomic-embed-text"
display_name = "Nomic Embed Text"
model_type = "embedding"
[providers.models.capabilities]
context_length = 8192
embedding_dimension = 768
[[providers]]
name = "azure-openai"
display_name = "Azure OpenAI"
type = "openai" # Uses OpenAI-compatible API
api_base = "https://your-resource.openai.azure.com"
api_key_env = "AZURE_OPENAI_API_KEY"
enabled = true
priority = 5
[[providers.models]]
name = "gpt-4o-mini" # Your deployment name
display_name = "Azure GPT-4o Mini"
model_type = "llm"
[providers.models.capabilities]
context_length = 128000
max_output_tokens = 16384
supports_function_calling = true
supports_json_mode = true
supports_streaming = true
[[providers]]
name = "anthropic"
display_name = "Anthropic"
type = "anthropic"
api_base = "https://api.anthropic.com"
api_key_env = "ANTHROPIC_API_KEY"
enabled = true
priority = 8
[[providers.models]]
name = "claude-sonnet-4-5-20250929"
display_name = "Claude Sonnet 4.5"
model_type = "llm"
tags = ["recommended", "fast"]
[providers.models.capabilities]
context_length = 200000
max_output_tokens = 128000
supports_vision = true
supports_streaming = true
supports_system_message = true
[providers.models.cost]
input_per_1k = 0.003
output_per_1k = 0.015
[[providers]]
name = "gemini"
display_name = "Google Gemini"
type = "gemini"
api_base = "https://generativelanguage.googleapis.com"
api_key_env = "GEMINI_API_KEY"
enabled = true
priority = 9
[[providers.models]]
name = "gemini-2.5-flash"
display_name = "Gemini 2.5 Flash"
model_type = "llm"
tags = ["recommended", "fast", "thinking"]
[providers.models.capabilities]
context_length = 1000000
max_output_tokens = 8192
supports_vision = true
supports_streaming = true
[providers.models.cost]
input_per_1k = 0.00015
output_per_1k = 0.0006
[[providers.models]]
name = "gemini-embedding-001"
display_name = "Gemini Embedding"
model_type = "embedding"
[providers.models.capabilities]
context_length = 10000
embedding_dimension = 3072
[providers.models.cost]
input_per_1k = 0.00015
[[providers]]
name = "xai"
display_name = "xAI"
type = "xai"
api_base = "https://api.x.ai/v1"
api_key_env = "XAI_API_KEY"
enabled = true
priority = 7
[[providers.models]]
name = "grok-4-1-fast"
display_name = "Grok 4.1 Fast"
model_type = "llm"
tags = ["recommended", "fast", "large-context"]
[providers.models.capabilities]
context_length = 2000000
max_output_tokens = 16384
supports_vision = false
supports_streaming = true
[providers.models.cost]
input_per_1k = 0.0002
output_per_1k = 0.0005
[[providers]]
name = "openrouter"
display_name = "OpenRouter"
type = "openrouter"
api_base = "https://openrouter.ai/api"
api_key_env = "OPENROUTER_API_KEY"
enabled = true
priority = 6
[[providers.models]]
name = "openai/gpt-4o-mini"
display_name = "OpenRouter GPT-4o Mini"
model_type = "llm"
tags = ["recommended"]
[providers.models.capabilities]
context_length = 128000
max_output_tokens = 16384
supports_vision = true
supports_streaming = true
[providers.models.cost]
input_per_1k = 0.00015
output_per_1k = 0.0006

EdgeQuake supports switching providers at runtime via API:

Terminal window
# Get current providers
curl http://localhost:8080/api/v1/providers
# Get available models for a provider
curl http://localhost:8080/api/v1/providers/openai/models
# Query with specific provider (per-request)
curl -X POST http://localhost:8080/api/v1/query \
-H "Content-Type: application/json" \
-d '{
"query": "What is quantum computing?",
"mode": "hybrid",
"llm_provider": "openai",
"llm_model": "gpt-4o-mini"
}'

Each workspace can have its own LLM/embedding configuration:

Terminal window
# Create workspace with custom providers
curl -X POST http://localhost:8080/api/v1/workspaces \
-H "Content-Type: application/json" \
-d '{
"name": "Production Workspace",
"llm_provider": "openai",
"llm_model": "gpt-4o",
"embedding_provider": "openai",
"embedding_model": "text-embedding-3-large"
}'

Workspace configuration overrides server defaults for all operations within that workspace.


The RUST_LOG environment variable controls logging:

Terminal window
# Debug all EdgeQuake components
RUST_LOG="edgequake=debug"
# Production logging
RUST_LOG="edgequake=info,tower_http=info"
# Verbose debugging
RUST_LOG="edgequake=trace,sqlx=debug,tower_http=debug"
# Specific component debugging
RUST_LOG="edgequake_pipeline=debug,edgequake_query=debug"
LevelUse Case
errorErrors only
warnErrors + warnings
infoStandard production
debugDevelopment debugging
traceDetailed tracing

Terminal window
# Set worker count (default: CPU count)
WORKER_THREADS=8

Workers handle background document processing. More workers = faster ingestion but higher memory.

Connection pooling is built into SQLx. For high-load scenarios, use an external pooler:

Terminal window
# Use PgBouncer
DATABASE_URL="postgresql://user:pass@pgbouncer:6432/edgequake?application_name=edgequake"
SettingVia APIDefaultDescription
max_chunksPer query10Max chunks retrieved
max_entitiesPer query20Max entities retrieved
temperaturePer query0.7LLM temperature
max_tokensPer query4096Max response tokens

Terminal window
# Just run with defaults (in-memory, mock LLM if no key)
cargo run
Terminal window
export OLLAMA_HOST="http://localhost:11434"
export OLLAMA_MODEL="gemma3:12b"
cargo run
Terminal window
export DATABASE_URL="postgresql://edgequake:edgequake_secret@localhost:5432/edgequake"
export OPENAI_API_KEY="sk-..."
cargo run
Terminal window
export DATABASE_URL="postgresql://edgequake:$DB_PASS@db.example.com:5432/edgequake?sslmode=require"
export OPENAI_API_KEY="$OPENAI_KEY"
export RUST_LOG="edgequake=info,tower_http=info"
export HOST="0.0.0.0"
export PORT="8080"
export WORKER_THREADS="8"
./edgequake

EdgeQuake validates configuration at startup:

╔══════════════════════════════════════════════════════════════╗
║ ║
║ ⚡ EdgeQuake v0.1.0 ║
║ ║
║ 🐘 Storage: POSTGRESQL (persistent)
║ 🌐 Server: http://0.0.0.0:8080
║ 📚 Swagger: http://0.0.0.0:8080/swagger-ui/
║ ║
╚══════════════════════════════════════════════════════════════╝

Validation errors are logged with actionable messages:

ERROR: DATABASE_URL is invalid: invalid connection string
HINT: Format: postgresql://user:password@host:port/database