# Telegram MTProto credentials (get from https://my.telegram.org) TELEGRAM_API_ID= TELEGRAM_API_HASH= TELEGRAM_SESSION_STRING= TELEGRAM_PHONE= # OpenAI (LLM + embeddings) OPENAI_API_KEY= # Alert delivery EIDOLON_BOT_TOKEN= # Dedicated Eidolon bot (preferred) PANTHEON_BOT_TOKEN= # Fallback: shared Pantheon bot PANTHEON_CHAT_ID= # Owner's @username. Housing alerts are sent by the monitoring account itself into this DM # (report + the forwarded original); empty keeps housing on the bot path with a t.me link. OWNER_USERNAME= # Runtime paths WATCHERS_PATH=config/watchers.yml DB_PATH=data/eidolon.db CHROMA_PATH=data/chroma # AI pipeline EMBEDDING_MODEL=text-embedding-3-small EMBEDDING_SIMILARITY_THRESHOLD=0.42 EMBEDDING_NEGATIVE_MARGIN=-0.05 # Chosen from evals/data/relevance-holdout-v3 rather than by vendor tier: # luna scored recall 0.75 / f1 0.857 with 1 degraded case, against terra's # 0.45 / 0.621 with 9. Re-run the holdout before changing this. LLM_MODEL=gpt-5.6-luna EXTRACTION_MODEL=gpt-5.6-luna EXTRACTION_PACK_SIZE=20 # Dark rollout gates. The shadow FTS is built regardless; keep both false until # the live compatibility/calibration gates in TAXONOMY-NOTES.md pass. PLACE_EXPANDED_FTS_ENABLED=false PLACE_SEMANTIC_ENABLED=false PLACE_SEMANTIC_CUTOFF=0.55 # The 5.6 family reasons before answering; 15s was a gpt-4.1 budget. LLM_TIMEOUT_SECONDS=45 # `api` bills per token and answers in ~1.5s. `subscription` runs the same # structured calls through the Codex CLI on a ChatGPT plan: no money, ~12-17s, # and ~21.5k tokens of CLI context per call against a shared quota. Embeddings # are unaffected either way — no CLI exposes an embedding endpoint. LLM_ENGINE=api SUMMARY_ENABLED=true SUMMARY_HOUR_UTC=13 SUMMARY_MODEL=gpt-5.6-luna # Data minimization STORE_RAW_TELEGRAM_JSON=false RETENTION_DAYS=30 RETENTION_SWEEP_HOURS=24 # Processing PROCESSING_QUEUE_SIZE=500 PROCESSING_WORKERS=4 INGRESS_MAX_ATTEMPTS=3 INGRESS_RETRY_BASE_SECONDS=0.25 SHUTDOWN_TIMEOUT_SECONDS=30 OUTBOX_POLL_SECONDS=0.5 OUTBOX_BATCH_SIZE=50 OUTBOX_LEASE_SECONDS=180 OUTBOX_MAX_ATTEMPTS=5 RECOVERY_BATCH_SIZE=500