The flavor probe gains a third answer: the wrapper names itself on /health, so behind OLLAMA_HOST tatlock now distinguishes boilerroom, a bare llama-server, and Ollama. Through the wrapper each pipeline phase is a named session with the decided eviction ranking — tatlock-steward/-orchestrate/-synthesize at 40, librarian at 30, lower parks sooner (webber will sit at 20; Open WebUI stays session-less and can never evict anyone). Against a bare llama-server the raw id_slot pins survive unchanged, Ollama gets neither, and an unprobed flavor sends nothing rather than guessing — the backend stays swappable by env alone. tool_choice through the wrapper follows the llama-server rule, since that is who answers. The wrapper's balancing and compaction-due signals are read everywhere: an httpx response hook on the provider covers every PydanticAI call, streams included, and the steward's raw call reads the body extras. Acting on compaction_due is a future ticket — the signal just must not pass silently. Verified end to end against the live wrapper: the dev server probed flavor=boilerroom, a full pipeline turn answered in 5.7 s, and GET /sessions showed all three phase sessions resident at rank 40 with engine-reported occupancies. The demonstration also filled the production slot map — session-less prod delegations would have 503d — cleared by a wrapper restart and filed as boilerroom T-11 (sessions need an exit). A latent test flaw surfaced too: the ollama tool_choice test relied on the dev backend probing as ollama; it now pins the flavor it claims to test. 27 selector tests (9 new), 677 total green; three mutations shown to fail their tests (librarian rank, the wrapper branch, the no-nudge set); the new wrapper contract class runs 10/10 against the live boundary. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
69 lines
2.1 KiB
Bash
69 lines
2.1 KiB
Bash
# Application Configuration
|
|
APP_NAME="OpenAI-Compatible API"
|
|
ENVIRONMENT=development
|
|
DEBUG=false
|
|
|
|
# API Configuration
|
|
API_HOST=0.0.0.0
|
|
API_PORT=8000
|
|
API_PREFIX=/v1
|
|
|
|
# Local backend (primary). The var name is legacy: any OpenAI-compatible
|
|
# server works — Ollama, a bare llama-server, or the boilerroom wrapper
|
|
# (http://127.0.0.1:8602 on tower-of-joy). The flavor is probed at
|
|
# startup; through the wrapper, BACKEND_SLOT_PINNING=true sends named
|
|
# sessions with the T-4 eviction ranking instead of raw slot pins.
|
|
OLLAMA_HOST=http://localhost:11434
|
|
OLLAMA_DEFAULT_MODEL=gemma4:e2b
|
|
OLLAMA_TIMEOUT=120
|
|
STEWARD_TIMEOUT=60
|
|
BACKEND_SLOT_PINNING=false
|
|
|
|
# Anthropic Configuration (Claude - cloud fallback)
|
|
# Set ANTHROPIC_API_KEY to keep the Claude fallback available: it is used
|
|
# automatically when Ollama is down, or exclusively when PREFER_CLOUD_BACKEND=true
|
|
# Without an API key, Tatlock uses Ollama only
|
|
# ANTHROPIC_API_KEY=sk-ant-api03-your-key-here
|
|
ANTHROPIC_MODEL=claude-sonnet-5
|
|
PREFER_CLOUD_BACKEND=false
|
|
|
|
# SearXNG Configuration
|
|
SEARXNG_HOST=http://localhost:8087
|
|
SEARXNG_TIMEOUT=30
|
|
|
|
# Redis Configuration
|
|
REDIS_HOST=localhost
|
|
REDIS_PORT=6379
|
|
REDIS_MEMORY_DB=1
|
|
REDIS_TIMEOUT=5
|
|
|
|
# Qdrant Configuration
|
|
QDRANT_HOST=localhost
|
|
QDRANT_PORT=6333
|
|
|
|
# Logging
|
|
# LOG_LEVEL is auto-selected based on ENVIRONMENT if not set:
|
|
# - development: DEBUG (maximum verbosity)
|
|
# - production: WARNING (minimal noise)
|
|
# Uncomment to override: LOG_LEVEL=INFO
|
|
# Note: Log format is auto-selected based on ENVIRONMENT (console for dev, json for production)
|
|
|
|
# User Configuration
|
|
# DEFAULT_USER is auto-selected based on ENVIRONMENT if not set:
|
|
# - development/testing: llm_tester (isolated test scope)
|
|
# - production: jpmschweitzer (real user)
|
|
# Uncomment to override: DEFAULT_USER=your_username
|
|
|
|
# Library-Desk Configuration (The Librarian backend)
|
|
# LIBRARY_DESK_HOST=http://localhost:8089
|
|
# LIBRARY_DESK_API_KEY=your-library-desk-api-key
|
|
# LIBRARY_DESK_TIMEOUT=60
|
|
|
|
# Core-API Configuration (The Housekeeper backend)
|
|
# CORE_API_HOST=http://localhost:8090
|
|
# CORE_API_KEY=your-core-api-key
|
|
# CORE_API_TIMEOUT=30
|
|
|
|
# CORS (comma-separated list)
|
|
CORS_ORIGINS=["*"]
|