# Pablan configuration — copy to .env and adjust. # Read by docker compose (variable interpolation) and by the backend settings. # --- Environment --- # "development" or "production". The customer stack (docker-compose.yml) # defaults to production regardless of this file; native dev reads it as-is. # Seeding dev data is refused when set to production. PABLAN_ENV=development # Secure cookies require https. Dev access happens over plain http via # WireGuard IPs (not localhost), where browsers silently drop Secure cookies — # so dev sets false. NEVER set false in production (Caddy terminates https). PABLAN_COOKIE_SECURE=false # --- PostgreSQL --- POSTGRES_USER=pablan POSTGRES_PASSWORD=change-me POSTGRES_DB=pablan # Dev (make dev): Postgres runs in Docker on localhost:5432. # In the customer stack (docker-compose.yml) the backend gets this URL with # host "postgres" instead — set automatically, no need to change it there. PABLAN_DATABASE_URL=postgresql+asyncpg://pablan:change-me@localhost:5432/pablan # --- LLM load --- # How many requests Pablan lets ONE endpoint see at once. Match it to the # server's own parallelism (llama.cpp: --parallel); beyond it, requests wait # here rather than piling up where Pablan cannot bound them. PABLAN_LLM_MAX_PARALLEL=4 # How long a request waits for a free slot before the user is told the model # is busy, and how many may be waiting at all. PABLAN_LLM_QUEUE_WAIT_SECONDS=20 PABLAN_LLM_MAX_QUEUED=24 # --- LLM endpoints (OpenAI-compatible; three independent model roles) --- # chat: conversation turns — quality matters (Gemma-class 12B+ locally, cloud in prod) PABLAN_CHAT_BASE_URL=http://localhost:8001/v1 PABLAN_CHAT_API_KEY=none PABLAN_CHAT_MODEL=unsloth/gemma-4-26B-A4B-it-qat-GGUF:UD-Q4_K_XL # utility: bookkeeping, summarization, entity extraction — cheap + fast # (same local server as chat by default) PABLAN_UTILITY_BASE_URL=http://localhost:8001/v1 PABLAN_UTILITY_API_KEY=none PABLAN_UTILITY_MODEL=unsloth/gemma-4-26B-A4B-it-qat-GGUF:UD-Q4_K_XL # embedding: multilingual embeddings — German retrieval quality is first-class. # Expects an OpenAI-compatible server (e.g. llama.cpp with bge-m3) serving # /v1/embeddings at this base URL. PABLAN_EMBEDDING_BASE_URL=http://localhost:8002/v1 PABLAN_EMBEDDING_API_KEY=none PABLAN_EMBEDDING_MODEL=gpustack/bge-m3-GGUF:Q8_0 # --- Privacy / retention --- # Query-mode conversations are auto-deleted after this many days # (retention_cleanup job). PABLAN_QUERY_RETENTION_DAYS=90 # --- Logging --- # PABLAN_LOG_LEVEL=INFO # Content debug logging (prompts, LLM responses). NEVER enable in production — # logs must stay free of prompts, user messages and document text. # PABLAN_DEBUG_LOG_PROMPTS=false # --- Tuning (defaults are fine) --- # PABLAN_LLM_TIMEOUT_SECONDS=120 # PABLAN_JOB_POLL_SECONDS=1.0 # --- Enterprise (ee/) --- # PABLAN_EE_LICENSE_KEY= # --- Customer deployment (docker-compose.yml) --- # Domain Caddy serves with automatic TLS. Use "localhost" for a local smoke test. PABLAN_DOMAIN=pablan.example.com