Roadmap¶
Plán dalšího vývoje. Phase D-core je dokončené (4/2026); zbývá Phase D-memory + Phase E + production readiness items.
Stav 30.4.2026
Phase A + B + C + D-core jsou dokončené a běží v produkci. 21 reportů s chunks, 290 chunks, 2.81 Kč total ingestion cost. Smoke test 5/5 PASSED na produkci. Spine + expand + observability + chat RAG injection hotové.
Phase D-core — Chat s RAG injection (✅ HOTOVO 30.4.2026)¶
Detail viz Phase D — Chat s RAG injection. Krátké shrnutí:
/chatinterně voláretrieve_service.retrieve()(folder scope, top_k=6)- History-aware standalone rewrite (follow-up dotazy se rozšíří přes LLM rewrite z last 3 párů)
- Pydantic AI
message_historycontinuity přes ModelRequest/ModelResponse - Soft-fail na full markdown pro reporty bez chunks (
mode=full_fallback) - Per-turn audit v
messages.meta(retrieval_log_id, chunks_used, mode, rewritten_query) - Headers
X-Chat-Mode+X-Retrieval-Log-Idpro frontend / debugging
Co D-core deferovala (= další iteration cykly):
- Multi-report cross-folder RAG (
compare_report_ids ≥ 2zatím na full-text concat) - Section scope retrieval (
/retrievescope.type='section'je 501) - Figure binary delivery v RAG mode (chunks figures mají AI annotation v
content, text stačí) - Pre-stream
event: retrievalSSE pro frontend UX progress indicator - Sources UI badge / debug mode
?debug=1 - Admin retrieval quality dashboard (top queries, latency p50/p95, feedback correlation)
Phase D-memory — Cognee + Neo4j + chat message vector index¶
Estimated: 3-5 dnů implementace + iterace na real chat datech Priority: HIGH (klíčové pro multi-session UX) Dependencies: real chat data z D-core production runs (validation patterns pro entity extraction)
Cíl¶
Plnohodnotná chat memory: kompletní historie chatu uživatele dohledatelná přes vektory + entity graph pro cross-session continuity.
Co D-memory přidá nad D-core¶
D-core má last-N-páry-v-promptu jako transitional přístup. To stačí pro follow-up rozpoznání během jedné konverzace, ale neřeší:
- Plný history retrieval — uživatel se vrací po týdnu, chce „co jsme řešili minule o té povodňové zóně?"
- Cross-conversation entity tracking — stejná nemovitost ve 2 konverzacích, různí stakeholdeři
- Temporální fakta (Graphiti pattern v Cognee)
- Selektivní embedding — Cognee orchestrator decidne co jde do vector / graph storage
Architektura¶
[Chat user input]
↓
Cognee orchestrator (Python lib)
├─→ Pgvector (Supabase) — chunks Phase C HOTOVÉ + chat messages D-memory NEW
└─→ Neo4j + Graphiti — entity graph + temporální fakta (D-memory NEW)
↓
Hybrid memory context → LLM
Komponenty¶
Backend:
- cognee Python lib (orchestrator)
- app/memory/ modul (entity tasks, episode model, hybrid retrieval)
- DB metoda async batch worker pro existing messages backfill
Infra:
- Neo4j Sliplane Docker service (4. service: backend + redis + worker + neo4j)
- ENV NEO4J_URI / NEO4J_USER / NEO4J_PASSWORD
Schema (additivní, nerozbije D-core):
- nemoreport.messages migrace: embedding_status text + embedded_at timestamptz
- Možná separate nemoreport.message_chunks (= same shape jako chunks, jen FK na messages)
Open questions D-memory (rozhodnout v separate session)¶
- Episode model: 1 conversation = 1 episode? per-turn? mix?
- Co embedovat: každou message? jen user queries? jen "informational" (filter triviálních)?
- Vector dim pro messages: stejné
halfvec(1536)jako reports, nebo full 3072? - Entity types: parcely, adresy, sekce, rizika, kontakty?
- Retrieval policy: kdy vector vs graph vs hybrid?
- TTL pro messages embeddings: indefinite? per-tenant policy?
Phase E — Nette integration¶
Estimated: 1 týden implementace + integration testing Priority: HIGH (gate Nette tým ready) Dependencies: Nette tým musí poskytnout RS256 JWT signing infra
Cíl¶
Embed chat do Nette aplikace přes iframe + JWT bridge.
Plánovaný flow¶
Nette user logged in
→ Nette signs RS256 JWT { sub, email, aud="nemoreport-ai", iss="nemoreport.cz", exp=15min }
→ postMessage { type: "nemoreport-ai:init", authToken: "<JWT>" } pro iframe
↓
Chat iframe (https://review.algaweb.cz/chat?id=...)
→ POST /auth/nette-exchange { jwt }
↓
Backend
→ verify_nette_jwt(token) — RS256 přes NETTE_JWT_PUBLIC_KEY
→ lookup nebo create Supabase user via auth.identities(provider='nette')
→ generate Supabase session přes admin API → return { access_token, refresh_token }
↓
Frontend uses Supabase session, chatuje bez druhého loginu
Komponenty TBD¶
Backend:
- POST /auth/nette-exchange endpoint
- ENV NETTE_JWT_PUBLIC_KEY, NETTE_AUDIENCE, NETTE_ISSUER
- auth.identities linkage (Supabase native multi-provider support)
Frontend:
- iframe child listener pro postMessage event
- apiFetch Nette JWT exchange pri prvním requestu
- CORS / origins update pro Nette domain
Infra:
- DNS cutover NemoReport AI → review.algaweb.cz (custom doména)
- CF Workers route bind
- auth.algaweb.cz Resend domain verification
Pre-requirement¶
Nette tým musí dodat: 1. RS256 private key pro JWT signing (na jejich straně) 2. RS256 public key (pro NETTE_JWT_PUBLIC_KEY env) 3. Nette user_id pro lookup/create v Supabase 4. Test environment pro integration testing
Production readiness¶
Před production rollout (mimo individual phases):
Infrastructure¶
- Supabase Pro upgrade ($25/mo) — PITR essential
- Cohere production key (mimo trial 1000/mo)
- Resend domain verification (
auth.algaweb.cz) - Vertex AI tier místo Gemini Developer API (data privacy)
- Custom doména
app.nemoreport.cz(mimo workers.dev) - Monitoring + alerts (Sentry pro error tracking, Datadog/Grafana pro metrics)
- Backup strategy týdenní DB dump → CF R2 (offsite)
- Cost alerts (Stripe / billing thresholds)
Quality gates¶
- Phase C.12 — Golden set v1 + eval harness (recall@10 ≥ 0.85)
- Pen test od third-party
- Load test — 100 concurrent uploads, 1000 retrievals/min
- Component tests Frontend (RTL)
- E2E tests Playwright pro klíčové flows
- CI/CD (GitHub Actions) — auto pgTAP + pytest + Vitest
Compliance¶
- GDPR review — data retention policy, right to erasure flow
- Terms of Service + Privacy Policy hosted
- Cookie consent banner (EU)
- AI disclosure UI — user vidí "tato odpověď je AI-generovaná"
- Audit log rozšířit (
user_eventstable) — login/logout, admin ops, exports
Optimalizace (post-pilot)¶
Phase C.9 — Multimodal image resize¶
Aktuálně raw figure bytes → multimodal embed. Pro produkci optimalizace:
- Pillow + 1568 long-edge resize + JPEG q=88 (per Google Gemini-2 doc)
- Sníží payload size, faster Gemini call
- Plánovaný overhead: ~20 řádek + Pillow dep
Phase C.12 — Formal eval harness¶
- Golden set v1 (40-60 anotovaných queries nad 13 MHTML reportů)
- Eval metrics: recall@10, MRR, faithfulness (Ragas), p95 latency
- A/B testing infrastructure pro variant comparison
- CI gate: blok PR pokud regresí
Multi-report scope retrieval¶
Aktuálně scope.type='folder' jen. Plánované:
scope.type='multi_report', report_ids=[...]- HNSW with
WHERE report_id IN (...)— pgvector iterative_scan='relaxed_order' - Use case: "porovnej tyto 3 nemovitosti"
Per-section scope¶
scope.type='section', report_id, section_slug- Use case: "co je v sekci povodně tohoto reportu"
- Nutí semantic search na úzký context
/admin/retrieval/* endpointy¶
retrieval_log (Phase C.11) data je ready, jen chybí UI:
GET /admin/retrieval/recent?days=N— recent queriesGET /admin/retrieval/by-tenant/{id}— per-tenant analyticsGET /admin/retrieval/variants— A/B variant comparisonGET /admin/retrieval/feedback— thumbs up/down breakdown (Phase D)
Token credit system (přeprodej, future)¶
User explicit (29.4): "tokeny jako platební systém — uživatelé kupují kredity, utrácejí na platformě".
Plánovaný redesign:
- Stripe integration — billing + token mint
tenants.token_balancecolumn (signed int)- Cost tracking rewrite z halířů na "tokens spent"
- Per-operation pricing:
- Upload report: ~50 tokens
- Chat turn: ~10 tokens
- Embed (background): hidden cost
- Frontend UI — balance display, top-up flow
- Admin section — token mint/refund, transaction log
Multi-tenant team workspaces¶
Aktuálně každý user má jen personal_tenant. Plánované:
- Team tenants (multi-user)
- Invite flow
- Per-tenant role (owner / member / viewer)
- Resource sharing (reports visible to team members)
tenant_members table už existuje, jen ne UI flow.
Mobile / PWA¶
Aktuálně desktop-first responsive. Pro mobile:
- PWA manifest + service worker (offline caching)
- Touch-optimized UI (drag-and-drop fallback na file picker)
- Push notifications pro async ingestion completion
Internationalization¶
Aktuálně CZ-only. Pro EU expansion:
- i18n framework (next-intl)
- Embedding model přejmenování (Gemini-2 multilingual už OK)
- Mistral OCR — multilingual support per language
- BM25 czech_unaccent → per-language tsvector configs
Long-term vision¶
AI-driven report generation¶
Aktuálně AI čte reporty. Future: AI píše reporty:
- Vstup: katastr data + adresa
- AI fetchne data z N veřejných zdrojů
- Generuje sections (povodně, územní plán, IS)
- Output: NemoReport-formátovaný PDF
To by konkurovalo Nette aplikaci, takže business decision.
Marketplace pro custom prompty¶
User-customizable prompts pro různé use cases: - Hypotéka risk assessment - Investment opportunity analyzer - Environmental compliance check - Insurance underwriting
Plugin / SDK pro real estate platforms¶
API pro 3rd-party integrace: - Zillow / Realo / etc. — embed report widget - ČSOB / KB hypotéka — analyzed properties stream - Realtors CRM — pre-evaluated leads
Sledování pokroku¶
Roadmap je living document. Update kdykoliv major decision/pivot.
CLAUDE.md (root level) má vždy aktuální stav "kde navázat" pro AI agent kontinuita. Tato dokumentace zachycuje historický kontext + plánovaný future.