# ============================================================================= # Wiki-LLM configuration example # ----------------------------------------------------------------------------- # Copy this file to ".env" and adjust the values. Every variable has a sane # default, so the out-of-the-box setup (ChromaDB + local embeddings, no auth) # works without editing anything except installing the optional `local` extra. # ============================================================================= # ----------------------------------------------------------------------------- # HTTP server # ----------------------------------------------------------------------------- APP_HOST=0.0.0.0 APP_PORT=8000 # ----------------------------------------------------------------------------- # Authentication (OPTIONAL, DISABLED BY DEFAULT) # ----------------------------------------------------------------------------- # Leave API_KEY empty to keep all endpoints open. When set, every REST endpoint # and the MCP HTTP/SSE endpoint require either: # Authorization: Bearer or X-API-Key: # API_KEY=change-me-super-secret # ----------------------------------------------------------------------------- # Logging # ----------------------------------------------------------------------------- # Logs always go to stderr (never stdout, which is reserved for the MCP stdio # JSON-RPC framing). Set LOG_FILE to also/instead write to a file. LOG_LEVEL=INFO # LOG_FILE=data/wikillm.log # ----------------------------------------------------------------------------- # Storage # ----------------------------------------------------------------------------- DATA_DIR=data COLLECTION_NAME=wikillm # Optional: ingest this file/directory once at stdio startup (before serving). # INGEST_ON_START=/data # INGEST_ON_START_RECURSIVE=true # Vector backend: "chroma" (default, embedded) or "qdrant". VECTOR_BACKEND=chroma # --- ChromaDB --- CHROMA_PATH=data/chroma # --- Qdrant --- # Use either a local embedded path OR a remote server URL (URL wins if set). QDRANT_PATH=data/qdrant # QDRANT_URL=http://localhost:6333 # QDRANT_API_KEY= # ----------------------------------------------------------------------------- # Chunking # ----------------------------------------------------------------------------- CHUNK_SIZE=1000 CHUNK_OVERLAP=150 # ----------------------------------------------------------------------------- # Embeddings — single provider mode # ----------------------------------------------------------------------------- # EMBEDDING_PROVIDER one of: # local | openai_compatible | openrouter | groq | gemini | cloudflare | # cerebras | mistral | nvidia | puter EMBEDDING_PROVIDER=local # Local provider (sentence-transformers). Requires the "local" extra: # pip install sentence-transformers EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v2 # Remote providers use an OpenAI-compatible /embeddings endpoint. # EMBEDDING_API_KEY is the bearer token for the chosen provider. # EMBEDDING_BASE_URL overrides the provider's built-in default base URL. # EMBEDDING_API_KEY= # EMBEDDING_BASE_URL= # Example (Mistral remote embeddings): # EMBEDDING_PROVIDER=mistral # EMBEDDING_MODEL=mistral-embed # EMBEDDING_API_KEY=your-mistral-key # # Example (OpenRouter): # EMBEDDING_PROVIDER=openrouter # EMBEDDING_MODEL=openai/text-embedding-3-small # EMBEDDING_API_KEY=your-openrouter-key # # Example (Cloudflare Workers AI — base URL must include the account id): # EMBEDDING_PROVIDER=cloudflare # EMBEDDING_MODEL=@cf/baai/bge-base-en-v1.5 # EMBEDDING_BASE_URL=https://api.cloudflare.com/client/v4/accounts//ai/v1 # EMBEDDING_API_KEY=your-cloudflare-token # ----------------------------------------------------------------------------- # Embeddings — rotation mode (OPTIONAL) # ----------------------------------------------------------------------------- # When configured, calls are spread across several providers/keys using a # round-robin strategy with automatic failover on errors / 429 rate limits. # All members MUST produce vectors of the same dimension. # # Strategy: round_robin (default) or random. EMBEDDING_ROTATION_STRATEGY=round_robin # Seconds a failed member is put on cooldown before being retried. EMBEDDING_ROTATION_COOLDOWN=30 # Option A — JSON list (most explicit, recommended): # EMBEDDING_ROTATION=[ # {"provider":"groq","model":"text-embedding-3-small","api_key":"key1"}, # {"provider":"mistral","model":"mistral-embed","api_key":"key2"}, # {"provider":"openrouter","model":"openai/text-embedding-3-small","api_key":"key3"} # ] # Option B — parallel comma-separated lists (api_keys/models/base_urls are # aligned by index with providers; shorter lists reuse the single-mode value): # EMBEDDING_PROVIDERS=mistral,mistral,mistral # EMBEDDING_API_KEYS=key1,key2,key3 # EMBEDDING_MODELS=mistral-embed # EMBEDDING_BASE_URLS= # ----------------------------------------------------------------------------- # MCP HTTP/SSE # ----------------------------------------------------------------------------- # Path where the MCP SSE transport is mounted on the HTTP server. MCP_SSE_PATH=/mcp