Self-hosted knowledge management for SMEs: a split-screen Markdown editor whose sections an LLM refines while you write, and RAG question answering over the documents that result. FastAPI + Postgres/pgvector on the back, SvelteKit on the front, everything OpenAI-compatible and self-hostable. Squashed into a single commit; the development history stays local. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CA43ZJda8Rbp2hKXNy8f6b
73 lines
3.0 KiB
Bash
73 lines
3.0 KiB
Bash
# 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
|