Etapa 1 — Router
Router-ul (Claude Sonnet 4.5) primește întrebarea utilizatorului și produce un JSON cu trei câmpuri: intent (una din 11 clase predefinite), specialists (până la 4 din 5 disponibili), confidence (0-1). Latență mediană: ~250ms. De ce Sonnet și nu Haiku: decizia de routing influențează întreaga calitate a răspunsului. Greșeala aici se cascadează.
Etapa 2 — Specialiști în paralel
Specialiștii aleși de Router (knowledge, sales, technical, case-studies, lead-collector) rulează simultan prin Promise.allSettled cu timeout 12s per agent. Fiecare are propriul system prompt și schema Zod de output (summary + evidence + confidence). Modelul: Claude Haiku 4.5 (rapid, ieftin, suficient pentru output structurat).
Knowledge Specialist primește chunks-uri RAG (pgvector cosine, top 5 cu similarity ≥ 0.50) și le filtrează pentru relevanță contextuală. Sales primește tier pricing context, returnează recomandare normalizată. Technical răspunde factual; refuză să inventeze servicii care nu există în stack. Case-studies recunoaște onest când nu există studii (faza pilot).
Etapa 3 — Synthesizer Felix
Felix primește toate output-urile specialiștilor și le combină într-un singur răspuns coerent, în vocea brandului tău (configurabilă: formal/casual, "tu" vs "dumneavoastră", emoji on/off). Streaming SSE token-by-token către UI; utilizatorul vede răspunsul apărând incremental cu caret blinking. Modelul: Claude Sonnet 4.5 (vocea de brand cere model puternic).
Rule-uri Synthesizer non-negociabile: foloseste cifre/prețuri/nume exact cum apar în evidence (nu paraphraza "€399" ca "~400 euro"); nu inventa provideri tehnici care nu sunt explicit menționați; pentru off_topic, redirect general fără să citeze cuvinte cheie din subiectul interzis.
Etapa 4 — Reviewer
După Synthesizer termină, Reviewer (Haiku) verifică răspunsul final împotriva evidence-urilor specialiștilor + listă fact-check (prețuri canonice, domeniu .md, stack Neon Postgres). Dacă găsește mismatch sau halucinație, marchează cu flag și orchestrator-ul reia Synthesizer-ul cu corrections injectate. Maximum 1 retry — evităm loop-urile.
Persistență trace
Fiecare TraceEvent (router.start, specialist.complete, synthesizer.token, etc.) e persistat în Postgres pentru audit. Permite debug post-hoc, măsurare cost real, tracking calitate per intent. Date stocate exclusiv în UE (Neon Frankfurt). PII redactat din log-uri.