00:00 / 00:00

Eidolon

Changelog

Sep 19, 2026

  • New retrieval gate: every turn first asks TypeSafe's Jev decision model whether it needs a memory at all, and chit-chat turns skip the embedding and rerank on both LanceDB tables, saving roughly 4–5 seconds
  • The gate races the search and only cancels it, never delays it: a timeout or an error counts as retrieve, so a Jev outage never makes a turn slower
  • RETRIEVAL_GATE_ENABLED=false restores searching on every turn, and RETRIEVAL_GATE_MODEL pins a Jev version

Sep 18, 2026

  • New selfies: when a visitor asks for a photo, the take_selfie tool redraws a reference image through an image model, and the result is pushed to the frontend as GET /api/selfie/<id>.png over an RTVI server-message, appearing mid-call
  • References are organized as outfits/ (exactly one per render, day or night picked by the clock) and friends/ (file names become the with_friends enum, and naming anyone moves the scene outdoors)
  • New offline command laplace-generate-image, sharing the bot's generation path and references

Sep 9, 2026

  • Stream recall: a new broadcast catalog, stream_catalog.json (built by laplace-build-stream-catalog), paired with a recall_streams tool that answers whole-broadcast questions such as "what did you stream last week"; dates and periods are resolved in Chinese and English against PERSONA_TIMEZONE, at most twice per user turn
  • Stream archive now runs before persona facts in the voice pipeline, and recap questions read the catalog directly, skipping embedding, reranking, and persona-fact retrieval
  • laplace-search --recall --today replays the same recall path against a fixed clock
  • Fish Audio TTS is no longer cut off when its first audio packet is slow

Sep 8, 2026

  • Mem0 is now self-hosted: vectors live in Qdrant and the engine runs embedded in the bot process, with no dependency on Mem0's cloud service
  • New laplace-export-mem0 / laplace-import-mem0 dump a cloud account to JSON and load it into Qdrant, idempotently and resumably
  • With TURN configured, the server gathers relay candidates only, so the origin's public IP never reaches a viewer's SDP; the relay runs over TCP, and unroutable remote candidates are dropped

Sep 7, 2026

  • Cross-encoder reranking now runs through OpenRouter (cohere/rerank-4-fast) on the same OPENROUTER_API_KEY and is on by default; RERANK_ENABLED=false turns it off, and RERANK_BASE_URL still points back at Cohere directly
  • Reranking retries immediately on a 429 and falls back quietly on failure, no longer affecting the turn's retrieval
  • The MCP service moved to the official SDK 2.0
  • Default models unified: LLM ~google/gemini-flash-latest, TTS s2.1-pro, refinement ~google/gemini-pro-latest
  • Pipecat's bundled demo UI is off by default; set EIDOLON_PIPECAT_DEMO_ENABLED=true to serve it at / and /client

Jun 17, 2026

  • The Soniox realtime transcription default moved to stt-rt-v5

Jun 12, 2026

  • Added a Soniox transcription glossary, soniox_context.toml, improving recognition of proper nouns and names
  • The offline transcription default moved to stt-async-v5
  • Transcription polling uses a longer HTTP timeout and tolerates transient errors

May 31, 2026

  • Public MCP retrieval service: a read-only Streamable HTTP endpoint at /mcp exposing two tools, search_persona_facts and search_streams, with tiered rate limits by client IP / Bilibili UID

May 19, 2026

  • Transcription supports automatic chunking, breaking past the Soniox per-file duration limit
  • laplace-ingest-facts accepts ISO date formats alongside Chinese dates
  • Facts ingest detects and strips Tieba floor markers (第NNN楼:) from raw fact lines

May 15, 2026

  • Per-viewer Mem0 management endpoints: GET /api/memories to list, POST /api/memories/forget to clear, both authenticated with loginSyncToken and isolated by Bilibili UID
  • Fish Audio TTS switches voices at runtime, triggered by voice commands such as "be gentler" or "be more upbeat"
  • LaplaceMem0MemoryService filters out tool-call messages, keeping them from polluting long-term memory

May 14, 2026

  • Hybrid retrieval upgrade: vector + Chinese BM25 (jieba-tokenized FTS), with optional Cohere rerank-v4.0-fast cross-encoder reranking
  • New laplace-eval-retrieval evaluation tool, quantifying retrieval recall@k / MRR
  • Opus bitrate chosen per session based on the frontend audio quality
  • Caching and colloquial phrasing for recent stream dates

May 13, 2026

  • Cloudflare Realtime TURN integration, with credentials minted on demand and rotated automatically
  • Viewer identity is verified with a LAPLACE Login Sync token, and signed-in users skip the anonymous rate limit
  • Added PERSONA_TIMEZONE to inject a timezone-aware system prompt prefix
  • LanceDB indexes are tracked with Git LFS and bundled into the CI image

May 11, 2026

  • Project renamed to laplace-eidolon
  • Added Docker and docker-compose self-hosting configuration
  • The server injects WebRTC ICE servers, so it works behind NAT

May 10, 2026

  • Stream Archive: a LanceDB-backed RAG service over past stream segments
  • Persona Facts: a LanceDB-backed RAG service over persona facts
  • First offline toolchain: a full pipeline for download, transcription, refinement, and ingestion

May 6, 2026

Repository initialized

Last updated on September 20, 2026

Tech otakus destroy the world