Skip to content

GraphReflex

It searches a Neo4j product graph with no LLM agent in the loop: Jev, a fast classifier, makes every search decision, and plain code and Neo4j queries do the fetching. On two public product-search tests it is at least as accurate as Claude Opus 5.5 with Neo4j MCP tools, and is at least 3× faster and 35× cheaper.

JEV
Drawer: a place to search in the Neo4j graphGauge: Jev's vote for it#1 product, correct in all three runsNow: “What's the best pogo stick for fun that can jump over 5 feet?”

Why we built this

Most companies sit on a lot of data, and very little of it is connected. Products are in one system, customers in another, orders and reviews somewhere else. Even a simple question can mean pulling all of it together by hand.

That's why a lot of teams have started putting their data into a graph database like Neo4j (opens in a new tab). In a graph, things are linked directly: a product to its brand, to its category, to the products people buy with it. Neo4j also does vector search (opens in a new tab), so you can find things by meaning, not just by exact words. And with Neo4j's MCP server (opens in a new tab), you can plug the whole graph into an AI agent and let it do the searching.

It works, but it's slow and it isn't cheap. The agent looks at how the graph is laid out, writes a query, runs it, reads what came back and decides what to do next, one tool call at a time. Every one of those steps is a round trip to a large language model.

So we tried something else. Jev (opens in a new tab), from TypeSafe AI, is a classifier: you give it a question and some options, and it gives back a probability for each option in well under a second, for a tiny fraction of a cent. It doesn't write anything. It only decides.

What if Jev made the search decisions, instead of an agent working them out through tool calls?

We put Jev in front of the search. It decides what each part of the question means, where to look in the graph, which products fit and when to stop, and plain code and Neo4j queries do the fetching. We called it GraphReflex.

Then we had to test it fairly. We gave GraphReflex and Claude Opus 5.5 (with Neo4j MCP tools) the same questions, the same graph and the same clock, and counted how often each one put a correct product first. Plain vector search ran too, as the usual baseline. The results are at the top of this page. You can watch them race on the same question, and the benchmark has every number.

The two tests

Both are product search: a shopper asks for something, and the system has to find the right products. Both come with answer keys made by people, so we don't decide what counts as correct.

STaRK-Amazon (opens in a new tab)

A benchmark from researchers at Stanford and Amazon for search over data that mixes text and links. We used its Amazon part: about a million nodes (products, brands, categories and colours, 1,035,542 in our graph) joined by links like “also bought”. The questions read like a shopper wrote them, and many need both the product descriptions and the links to answer well. We score the 81 questions whose correct products STaRK's authors checked by hand.

A real question from the test
“I bought a grip enhancer from Grip Rx, but am looking for something with more natural ingredients.”

Website (opens in a new tab)Paper (opens in a new tab)Data and code (opens in a new tab)Our results on STaRK-Amazon

WANDS (opens in a new tab)

Wayfair's public dataset for judging product search. It has 42,994 products and 480 real search queries from Wayfair shoppers, and people labelled 233,448 query and product pairs as Exact, Partial or Irrelevant. A product counts as correct when it was labelled Exact, and we score the 379 queries that have at least one.

A real query from the test
“48 in entry table with side by side drawer”

Data and paper (opens in a new tab)Our results on WANDS

The two sides

GraphReflex = Neo4j + Jev

  • Neo4j finds candidate products through the graph: categories, brands, bought-together links and meaning.
  • Jev, a fast classifier, makes every decision with a probability: what each phrase means, where to search, which candidates fit, when to stop.
  • No LLM decides anything, and every step is timed and priced.

Claude Opus 5.5 = MCP tools + playbook

  • Claude reads the graph schema, writes read-only Cypher and runs vector search through Neo4j MCP tools.
  • A written search playbook tells it how to look and when to submit its ranking.
  • It decides every step itself, one tool call at a time.

How GraphReflex answers a question

A real saved run, replayed step by step: the words Jev labels, the directions it searches, every candidate it judges, the loop, and the final ranking.

0 s8.00 s
0 mselapsed
$0cost

0 classifier calls

The question

Step 1 of 14

STaRK-Amazon · question syn-952 · 12 correct products in its answer key

What's100%fillerthe98%fillerbest48%usepogo99%typestick96%typefor82%usefun98%usethat58%fillercan78%usejump97%useover94%use599%usefeet?98%use
the task: find products that fit all of this

this step 0 msA shopper question from STaRK-Amazon, with a known answer key.

Example question

Times and costs are this run's real ones; the animation is slowed so you can read it.

Watch both systems race on the same question, or read every number behind the headlines.