11# Copy to .env and fill in secrets/configs. This file is a template and should never be committed with real credentials.
22
33# --- Discord Bot ---
4+ # Discord bot token (keep secret!)
45APP_DISCORD_TOKEN =
6+ # Bot presence text shown in Discord
57APP_BOT_STATUS = " OneLiteFeather RAG"
8+ # Optional allowlist; JSON array of guild IDs. Empty = global commands
69APP_GUILD_IDS = []
10+ # Enable Message Content Intent (required for replies/mentions parsing)
711APP_ENABLE_MESSAGE_CONTENT_INTENT = false
812
913# Role-based admin control (optional, works in addition to Discord administrators)
1014APP_ADMIN_ROLE_IDS = []
1115APP_ADMIN_ROLE_NAMES = []
1216
1317# --- AI provider selection ---
14- APP_AI_PROVIDER = openai # openai | ollama | vllm
18+ # Choose the LLM/embedding provider: openai | ollama | vllm
19+ APP_AI_PROVIDER = openai
20+ # Chat completion model (provider-specific name)
1521APP_LLM_MODEL = gpt-4.1-mini
22+ # Embedding model and backend
1623APP_EMBED_MODEL = text-embedding-3-small
24+ APP_EMBED_PROVIDER = openai # openai|ollama|vllm
25+ # Sampling temperature for LLM
1726APP_TEMPERATURE = 0.1
18- APP_EMBED_PROVIDER = openai
27+ # Optional base system prompt (leave empty to manage prompts in DB per scope)
1928APP_LLM_SYSTEM_PROMPT =
2029
21- # Optional: override provider endpoints
30+ # Optional: override provider endpoints/keys
2231APP_OLLAMA_BASE_URL = http://localhost:11434
2332APP_VLLM_BASE_URL = http://localhost:8000/v1
2433APP_VLLM_API_KEY =
2534OPENAI_API_KEY =
2635
2736# --- GitHub API (used by orgs/issues/listing) ---
37+ # Optional; improves rate limits for GitHub ingestion
2838GITHUB_TOKEN =
2939
3040# --- Postgres / pgvector ---
@@ -35,41 +45,51 @@ APP_PG_PASSWORD=postgres
3545APP_PG_DATABASE = postgres
3646
3747# --- RAG table & behavior ---
48+ # Vector table name and embedding dimension
3849APP_TABLE_NAME = rag_chunks
3950APP_EMBED_DIM = 1536
4051APP_TOP_K = 6
52+ # Behavior: fall back to plain LLM if no vectors exist
4153APP_RAG_FALLBACK_TO_LLM = true
54+ # Optionally mix a plain LLM answer into the RAG answer
4255APP_RAG_MIX_LLM_WITH_RAG = false
4356APP_RAG_MIX_THRESHOLD =
44- APP_RAG_SCORE_KIND = similarity
45- APP_RAG_MODE = auto
46- APP_RAG_GATE_STRATEGY = llm
57+ APP_RAG_SCORE_KIND = similarity # similarity|distance
58+ # Gating (when to use RAG):
59+ APP_RAG_MODE = auto # auto|rag|llm
60+ APP_RAG_GATE_STRATEGY = llm # llm|heuristic|hybrid
4761APP_RAG_GATE_THRESHOLD =
62+ # Minimum input length (characters) to consider answering
4863APP_RAG_MIN_QUESTION_LEN = 12
4964
5065# --- UI/messages (user-facing text; customizable) ---
51- # Optional extra style appended to the system prompt (e.g. sarcasm , emoji usage)
66+ # Extra style appended to the system prompt (e.g., tone , emoji usage). Prefer DB prompts for scope overrides.
5267APP_CHAT_STYLE_APPEND =
53- # Placeholder message shown while answering
54- APP_REPLY_PLACEHOLDER_TEXT = " 🧠 Einen kleinen Moment – ich suche passende Informationen und schreibe die Antwort …"
55- # Language hint template appended when language is detected; {lang} placeholder is replaced
56- APP_LANGUAGE_HINT_TEMPLATE = " Antwortsprache : {lang}"
68+ # Placeholder message shown while processing
69+ APP_REPLY_PLACEHOLDER_TEXT = " 🧠 Please wait — finding relevant context and preparing the answer …"
70+ # Language hint template when language is detected; {lang} will be replaced
71+ APP_LANGUAGE_HINT_TEMPLATE = " Response language : {lang}"
5772# Headings/prefixes used in responses
5873APP_SOURCES_HEADING = " Sources:"
5974APP_REPLY_CONTEXT_LABEL = " Context (previous bot message):"
60- APP_MEMORY_SUMMARY_HEADING = " Nutzerprofil (Zusammenfassung ):"
61- APP_MEMORY_RECENT_HEADING = " Letzte Unterhaltungsschritte :"
75+ APP_MEMORY_SUMMARY_HEADING = " User profile (summary ):"
76+ APP_MEMORY_RECENT_HEADING = " Recent conversation steps :"
6277APP_MEMORY_USER_PREFIX = " User"
6378APP_MEMORY_BOT_PREFIX = " Bot"
6479
6580# --- Ingestion defaults ---
6681APP_INGEST_EXTS = [".md", ".py", ".yml", ".yaml", ".toml", ".json", ".txt", ".java"]
6782
6883# --- Queue + ETL ---
69- APP_JOB_BACKEND = rabbitmq # postgres (local) or rabbitmq (recommended for scale)
84+ # Job backend: postgres (local) or rabbitmq (recommended for scale)
85+ APP_JOB_BACKEND = rabbitmq
86+ # RabbitMQ AMQP URL when using rabbitmq (e.g., amqp://user:pass@localhost:5672/)
7087APP_RABBITMQ_URL =
88+ # Default queue name; can be specialized per job type
7189APP_RABBITMQ_QUEUE = rag_jobs
90+ # Worker poll interval (seconds)
7291APP_QUEUE_WATCH_POLL_SEC = 5.0
92+ # ETL staging (for manifests): backend + local dir or S3 settings
7393APP_ETL_STAGING_BACKEND = s3 # local | s3
7494APP_ETL_STAGING_DIR = .staging
7595APP_S3_STAGING_BUCKET =
@@ -80,10 +100,11 @@ APP_S3_ACCESS_KEY_ID=
80100APP_S3_SECRET_ACCESS_KEY =
81101
82102# --- Health & metrics ---
103+ # Expose /healthz, /readyz, /metrics via the internal HTTP server
83104APP_HEALTH_HTTP_PORT = 8080
84105
85106# --- Credits & Budgeting ---
86- # Enable credits /budget enforcement
107+ # Enable credit /budget enforcement (false disables all checks)
87108APP_CREDIT_ENABLED = false
88109# Global monthly cap across all users (credits per month)
89110APP_CREDIT_GLOBAL_CAP = 100000
@@ -95,12 +116,12 @@ APP_CREDIT_RANK_LIMITS={}
95116APP_CREDIT_ROLE_RANKS_BY_NAME = {}
96117# Map role ID (string) to rank as JSON, e.g.: {"123456": "gold"}
97118APP_CREDIT_ROLE_RANKS_BY_ID = {}
98- # Roles treated as unlimited (still respects global cap)
119+ # Roles treated as unlimited (per-user); global cap still applies
99120APP_CREDIT_UNLIMITED_ROLE_NAMES = []
100121APP_CREDIT_UNLIMITED_ROLE_IDS = []
101- # Estimation parameters
122+ # Estimation parameters for pre-authorization
102123APP_CREDIT_TOKENS_PER_CHAR = 0.25
103124APP_CREDIT_EST_OUTPUT_TOKENS = 600
104125APP_CREDIT_PER_1K_TOKENS = 1.0
105- # Label when mixing LLM response into RAG answer (optional)
126+ # Label when mixing LLM response into a RAG answer (optional)
106127APP_RAG_MIX_LABEL =
0 commit comments