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
Scroll sideways to explore the full diagram on smaller screens.
2. Pipeline fork
Scroll sideways to explore the full diagram on smaller screens.
3. Candidate volume (Sankey)
Scroll sideways to explore the full diagram on smaller screens.
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. These are separate example runs, so Graph seeds and Jev candidates may overlap; the diagram is not a partition of unique passages.
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