Search, chat and research over parliamentary speeches and documents
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

89 lines
4.5 KiB

# Copy to .env and fill in. .env is gitignored and must never be committed.
#
# Note: values are read with python-dotenv, which tolerates characters that a
# plain `source .env` in bash would choke on (parentheses, spaces). Don't assume
# shell scripts can source this file.
# ── Database ──────────────────────────────────────────────────────────────────
PG_HOST=localhost
PG_PORT=5432
PG_DB=plenum
PG_USER=plenum
PG_PASSWORD=
# Guardrails applied to every pooled connection. The defaults suit an interactive
# API; batch jobs may want a larger work_mem and no statement timeout.
PG_POOL_MINCONN=1
PG_POOL_MAXCONN=6
PG_APPLICATION_NAME=plenum
PG_WORK_MEM=32MB
PG_TEMP_FILE_LIMIT=1GB
PG_STATEMENT_TIMEOUT_MS=30000
PG_LOCK_TIMEOUT_MS=5000
PG_IDLE_IN_TRANSACTION_SESSION_TIMEOUT_MS=10000
# ── Chat model ────────────────────────────────────────────────────────────────
# Any OpenAI-compatible endpoint, including the /v1 suffix.
LLM_DIRECT_URL=http://localhost:8000/v1
# Bearer token for the endpoint above. Leave empty for an unauthenticated local server.
LLM_BEARER=
# The orchestrator and the final answer. Worth the strongest model you have.
LLM_MODEL_SMART=
# Summarising tool results and other mechanical work. A smaller model is fine.
LLM_MODEL_FAST=
# Fallback when neither of the above is set.
LLM_MODEL=
# ── Embeddings ────────────────────────────────────────────────────────────────
# Separate endpoint, because embedding usually runs on a different server than chat.
EMBEDDING_BASE_URL=http://localhost:8003/v1
EMBEDDING_API_KEY=
# Must produce vectors of the width declared as embeddings.dimension in
# parliament.yaml. Changing this requires re-embedding the whole corpus.
LLM_MODEL_EMBEDDING=
# ── Optional: additional providers ────────────────────────────────────────────
# Only needed for providers listed in providers.yaml with user_api_key: false.
# Keys that users supply in the browser are never stored server-side.
BERGET_API_KEY=
BERGET_BASE_URL=
BERGET_MODEL=
GOOGLE_GEMINI_KEY=
# ── Application ───────────────────────────────────────────────────────────────
# HMAC secret for the zero-knowledge login challenge. Generate with:
# python -c "import secrets; print(secrets.token_hex(32))"
AUTH_PRELOGIN_SECRET=
# Where downloaded corpora live. Defaults to ./data. Point this at an existing
# download to reuse it rather than fetching again.
PLENUM_DATA_DIR=
# Point these outside the repository and a deployment's own values never show up
# in a diff against upstream — config, prompts and site copy all overridable.
# PARLIAMENT_CONFIG=/etc/plenum/parliament.yaml
# PROMPTS_DIR=/etc/plenum/prompts
# CONTENT_DIR=/etc/plenum/content
# Re-read prompt files on every call. Development only.
# PROMPTS_RELOAD=1
# ── Deep research tuning ──────────────────────────────────────────────────────
# All optional; the defaults in backend/services/research/ are sensible. Listed
# here so they are discoverable rather than only findable by grep.
# RESEARCH_PROPOSAL_COUNT=6 # threads proposed after the scout pass
# RESEARCH_FOLLOWUP_COUNT=3 # follow-up threads suggested after a dig
# RESEARCH_MAX_THREADS=12 # hard cap per board
# RESEARCH_TARGET_DEPTH=2 # how many dig rounds a thread gets
# RESEARCH_SCOUT_ROUNDS=2
# RESEARCH_SCOUT_MATERIAL_CHARS=40000
# RESEARCH_TRIP_MAX_TURNS=14 # tool-call turns per thread before forcing an answer
# RESEARCH_TOOL_RESULT_CHARS=8000 # per-result truncation fed back to the model
# RESEARCH_ANSWER_MAX_TOKENS=1500
# RESEARCH_REPORT_MAX_TOKENS=4000
# RESEARCH_MAX_RUNNING_JOBS=3 # server-wide concurrency
# RESEARCH_MAX_BYO_JOBS_PER_OWNER=1 # concurrency for users on their own API key
# RESEARCH_MAX_JOB_RUNTIME_SECS=3600
# RESEARCH_HEARTBEAT_SECS=20
# RESEARCH_STALE_HEARTBEAT_SECS=180 # after this, a job is considered dead and reaped