Luminary.
Een voice-first deep-research-agent.
Praat met een van vier stemagents over wat je maar wilt — markten, bedrijven, wetenschap, geschiedenis. Luminary kiest een diepgang, draait een bronnengebaseerde research-pipeline en leest het resultaat voor. Desgewenst zet het er een podcast met twee presentatoren van.
Drie diepgangen, automatisch gekozen uit je stem.
Zeg iets tegen een van de vier stemagents (Maya, Barnaby, Consultant of Rutger). Luminary leidt de diepgang af uit hoe je het formuleert. "Quick look at" levert één onderzoeker op; "deep dive on" de volledige pipeline over meerdere studies, die hieronder staat beschreven.
| Diepgang | Stemtrigger | Pipeline | Budget |
|---|---|---|---|
| Quick | "quick look at X" · "brief on X" | Eén onderzoeker, geen vervolgvragen. | ~3 min |
| Standard | (standaard) | Deelvragen-fan-out → parallel onderzoek → vervolgvragen → synthese. | ~10 min |
| Deep | "deep dive on X" · "comprehensive analysis of X" | Iteratieve pipeline over meerdere studies: query-analyse → studieplanning → iteratief onderzoek → claimvalidatie → QA-anticipatie → strategische analyse → mastersynthese. | tot 60 min |
Een orchestrator, een deep pipeline en 24 met ADK gebouwde agents.
Een ElevenLabs-stemagent post naar een webhook (HMAC-geverifieerd). De research-orchestrator leidt de diepgang af, zet een plan/confirm-gate bij deep, injecteert geheugen en de knowledge graph, en geeft het door aan de deep pipeline. Studies waaieren parallel uit. Een synthese-evaluator loopt samen met een gap-analyzer rond totdat de bevindingen niet meer veranderen. Claimvalidatie vangt tegenstrijdigheden over studies heen op, QA-anticipatie beantwoordt alvast de voor de hand liggende vervolgvragen, en een mastersynthese schrijft het eindantwoord. Resultaten worden in GCS bewaard, aan de knowledge base van de agent gekoppeld voor de volgende stembeurt, en desgewenst geproduceerd als een podcast met twee presentatoren.
ElevenLabs voice agent ──▶ webhook /webhook/elevenlabs (HMAC-verified)
│
▼
┌──────────────────────────┐
│ research_orchestrator │
│ ─ depth detection │
│ ─ plan/confirm gate │
│ ─ memory + KG injection │
└──────────┬───────────────┘
▼
┌───────────────────────────────────────────────┐
│ deep_pipeline │
│ │
│ query_analyzer ─▶ study_planner ─▶ iterative│
│ ▼ │
│ parallel(researcher × N studies) │
│ ▼ │
│ synthesis_evaluator ─▶ gap_analyzer (loop) │
│ ▼ │
│ claim_validator ─▶ qa_anticipator │
│ ▼ │
│ strategic_analyst ─▶ master synthesis │
└───────────────────────┬───────────────────────┘
▼
GCS results · memory · knowledge graph
▼
agent KB attach → next voice turn
podcast_generator (optional, 2-host)
Observable dashboard (`/explore`)Elke fase het model dat past.
Geen enkel model paste bij elke fase, dus elke fase heeft een eigen standaard en een fallback chain. Alles is tijdens runtime te overrulen via env vars (GEMINI_MODEL, GEMINI_PRO_MODEL, OPENAI_REASONING_MODEL).
| Pipeline-fase | Standaardmodel |
|---|---|
| Query analysis | Gemini 2.5 Flash |
| Study planning | Gemini 2.5 Flash |
| Study research | Gemini 2.5 Flash (with google_search grounding) |
| Complex study research | Gemini Deep Research (autonomous agent) |
| Study synthesis | OpenAI o4-mini → Gemini Pro → Flash (fallback chain) |
| Master synthesis | OpenAI o4-mini → Gemini Pro → Flash |
| Claim validation | OpenAI o4-mini (contradiction detection) |
| Strategic analysis | Gemini 2.5 Pro |
| Verification | Gemini 2.5 Flash (with web_search tool) |
De niet voor de hand liggende keuzes die bepalen wat het kan.
- Plan/confirm-gate vóór deep runs
- Deep-modus heeft een budget van 60 minuten. Luminary bouwt eerst het studieplan, leest het via spraak terug ter bevestiging, en voert het pas daarna uit.
AUTO_PROCEED_*env vars stellen dit per diepgang af. - Annuleren is async-veilig
- Een door de gebruiker gestart annuleren werpt een
ResearchCancelledop moduleniveau op, die elke task-handler opnieuw doorgooit. Geen verweesde threads, geen zombie LLM-aanroepen. - Checkpoints naar GCS
- Lange deep runs bewaren tussenliggende staat in Google Cloud Storage. Een gecrashte run hervat in plaats van opnieuw te beginnen.
- Geheugen + knowledge graph
- Eerdere onderzoeksbevindingen worden opnieuw geïnjecteerd in verwante queries, en de knowledge graph houdt entiteiten over studies heen bij.
- KB-limiet per agent
- Elke ElevenLabs-stemagent heeft op enig moment hoogstens MAX_AGENT_KB_DOCS onderzoeksdocumenten gekoppeld (standaard 3). De oudste vervalt bij een nieuwe koppeling, zodat de agent met zijn meest recente onderzoek werkt.
- Podcast met twee presentatoren genereren
- Elke synthese kan opnieuw worden weergegeven als een podcast met twee presentatoren (Maya + Barnaby) via ElevenLabs TTS.
Wat er onder draait.
- Google ADK — het agent-framework. 24 op maat gebouwde agents (query_analyzer, study_planner, iterative_researcher, claim_validator, qa_anticipator, strategic_analyst, synthesis_evaluator, podcast_generator, watch_checker, memory_extractor, …).
- Gemini — 2.5 Flash voor analyse + bronnengebaseerd studieonderzoek, 2.5 Pro voor strategische analyse, Deep Research als autonome agent voor complexe studies.
- OpenAI o4-mini — synthese + claimvalidatie; de stap voor het opsporen van tegenstrijdigheden is hierop gebouwd en afgesteld.
- Grok — optionele secundaire provider voor specifieke fasen.
- ElevenLabs Conversational + TTS — vier inkomende stemagents en de uitgaande podcastgenerator.
- Flask + Gunicorn — Python-backend. Blueprints voor health, webhook, ui_api, explore.
- Observable Framework — het
/explore-dashboard. Visualiseert onderzoeksjobs, kosten, pipeline-traces, knowledge graph. Ingebouwd in de Docker-image. - Google Cloud Run + Secret Manager + GCS — serverless runtime, secrets, persistentie van resultaten. Multi-stage Dockerfile (Node 20 bouwt het dashboard, Python 3.11 draait de app).
Voor mij bleek spraak een betere ingang tot deep research dan typen. Een vraag in een chatvenster typen is een bottleneck — het meeste onderzoek dat ik wil doen, gebeurt terwijl ik loop, rijd, of tussen vergaderingen door zit. Luminary is de versie waarmee ik een vraag onderweg kan afgeven en er een bronnengebaseerd antwoord als audio voor terugkrijg. Dat het ook kan exporteren naar een podcast met twee presentatoren is de naad waar dit project en de podcasts van rutgertuit.nl samenkomen: dezelfde ElevenLabs-afkomst, dezelfde regel van prompten-en-dan-kiezen.