Přeskočit obsah

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í:

  • /chat interně 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_history continuity 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-Id pro frontend / debugging

Co D-core deferovala (= další iteration cykly):

  • Multi-report cross-folder RAG (compare_report_ids ≥ 2 zatím na full-text concat)
  • Section scope retrieval (/retrieve scope.type='section' je 501)
  • Figure binary delivery v RAG mode (chunks figures mají AI annotation v content, text stačí)
  • Pre-stream event: retrieval SSE 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)

  1. Episode model: 1 conversation = 1 episode? per-turn? mix?
  2. Co embedovat: každou message? jen user queries? jen "informational" (filter triviálních)?
  3. Vector dim pro messages: stejné halfvec(1536) jako reports, nebo full 3072?
  4. Entity types: parcely, adresy, sekce, rizika, kontakty?
  5. Retrieval policy: kdy vector vs graph vs hybrid?
  6. 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_events table) — 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 queries
  • GET /admin/retrieval/by-tenant/{id} — per-tenant analytics
  • GET /admin/retrieval/variants — A/B variant comparison
  • GET /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:

  1. Stripe integration — billing + token mint
  2. tenants.token_balance column (signed int)
  3. Cost tracking rewrite z halířů na "tokens spent"
  4. Per-operation pricing:
  5. Upload report: ~50 tokens
  6. Chat turn: ~10 tokens
  7. Embed (background): hidden cost
  8. Frontend UI — balance display, top-up flow
  9. 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.