Radau tiesą.
DORA Graph RAG prototypes
Two competing approaches over the same EU Regulation 2022/2554 (DORA) corpus — Graph RAG vs Jev-reranked RAG. Quick, shareable, no auth / no database.
One BM25 shortlist — two paths: Graph expand or Jev rerank.
Graph RAG
MiniSearch keyword recall, then 1-hop expansion over cites and covers edges. Shows why a hit appeared (matched terms + graph path). Fully offline in the browser.
Jev-reranked RAG
Same BM25/keyword recall, then TypeSafe Jev (typesafe/jev-1.13) scores each passage for relevance via OpenRouter Decisions and reorders/filters. Needs OPENROUTER_API_KEY.
Real-life test
Graph vs Jev on the broken OJ extract — baked tables for the six sample queries. Shows how bad prep work beats both retrieval tricks. Fully static.
Open /findings →Early Jev
Same six queries after cheap Jev title↔body validation while building the corpus. Art 5/6/45 unblocked; Art 4 no longer pollutes.
Open /early-jev →Why not both?
Graph finds the neighbourhood; Jev picks the lucky hit. Hybrid Graph→Jev vs either alone on the cleaned corpus — scoreboard + baked tables.
Open /why-not-both →How it works
Both prototypes share the same first step: MiniSearch runs a BM25-style keyword search over the DORA corpus and returns a short shortlist (about 12 passages for Graph, about 15 for Jev). That shared gatekeeper keeps recall cheap and offline. From there the paths diverge. Graph RAG expands the shortlist with a one-hop walk over a static cites / covers graph built once from the regulation (structure, not embeddings), adding up to eight neighbours (hard cap — early BM25 hits consume the quota first). Jev does not expand at all: it scores each shortlisted passage for relevance and reorders the same fifteen candidates (15 in → 15 out).
1. Sequence
2. Pipeline fork
3. Candidate volume (Sankey)
Illustrative volumes: Graph expands (12 seeds → up to ~20 with graph extras); Jev reorders only (15 → 15). The static graph contributes the extra Graph flow; Jev volume stays flat.
Quick comparison
| Aspect | Graph RAG | Jev-reranked RAG |
|---|---|---|
| Shared gatekeeper | MiniSearch BM25-style keyword recall | |
| Shortlist size | ~12 seeds | ~15 candidates |
| Next step | 1-hop expand on static cites/covers graph | Score + reorder via /api/rerank + Jev |
| Candidate volume | Grows (~12 + up to ~8 extras → ~20) | Flat (15 in → 15 out) |
| Graph / model | Static regulation structure (not embeddings) | TypeSafe Jev relevance scores |
| Runtime needs | Fully offline in the browser | API key (OpenRouter / AI Gateway) |
Sample queries
- What are the ICT risk management framework requirements?
- When must financial entities report major ICT-related incidents?
- What is TLPT and who must perform threat-led penetration testing?
- How should financial entities manage ICT third-party risk?
- What information must be shared on cyber threats?
- Which entities are in scope of DORA?
Chips on each prototype page also fire these queries.
Jev finding
Jev works well as a relevance reranker on DORA passages: structured score criteria (Irrelevant → Directly answers) give calibrated rankings without a generative LLM. Pair it with cheap keyword recall for a practical RAG stack.
Hosted at radau.tiesa.tech · tiesa.tech