Checked, not fully reviewed
Finds the page that answers a question in a long PDF: Jev picks a section, then a page. Checked, not fully reviewed: needs PageIndex's cloud and two keys.
Good for
- Finding the page that answers a question in a PDF too long for one Jev request, with no embeddings or vector database
- A short, readable example of beam search down a tree with Jev's `Choice`, checked at the end with `Noul`
Watch out for
- `tree_search.py` uploads the whole PDF to PageIndex's cloud and sends page text to TypeSafe, so you need both keys
- If no page passes the `Noul` check, it still returns the best two, and the CLI does not print their scores
- Pins typesafe-sdk 0.7.2 and the model `jev-1.13.0`
Tested Oct 21, 2026 at 7b1008c437c8 · python:3.12-slim in Docker on 2 CPU cores with no network, its pinned requirements (typesafe-sdk 0.7.2); both scripts against a local stand-in for /v1/systemone, and tree_search.py's search with a stand-in PageIndex client
Checked, not fully reviewed. We installed it in Docker with its pinned requirements and ran both
scripts against a local stand-in for Jev that scores pages by keyword. So the stand-in, not Jev, chose
the pages. We had no PageIndex key, so we did not upload a PDF or build a real tree: tree_search.py
searched a made-up 40-page tree from a fake PageIndex client. No Jev calls. The README’s results on
the NVIDIA and Citigroup 10-Ks are the author’s own.
It is published by VectifyAI, which also publishes PageIndex.
It is two scripts and a README tutorial. page_search.py asks one Choice, with one option per page, each described by
the page’s text. It refuses a PDF of more than 255 pages, or of more than about 30,000 tokens, before
sending anything. The README gives these as Jev’s limits. On our five-page handbook it sent one request
and printed the right page.
tree_search.py is for longer documents. PageIndex’s cloud turns the PDF into a tree of sections, each
with a title, a summary and a page range. A beam of three goes down the tree, one Choice per level.
A Choice over the pages of each final section follows, then one Noul per candidate page, up to 16.
Pages at 0.5 or above are kept. On our tree that was 20 requests: 8 choices and 12 yes/no checks. A
section of long pages was split into windows that fit, and a section whose first subsection started a
page late got its own “opening pages” option. A server error was retried five times, then raised a
clear exception.
Two things to know. If no page passes the check, it keeps the best two anyway, and the command
line prints only the page numbers. In our no-match run it returned two pages that scored 0.1. And the
text leaves your machine twice: the whole PDF goes to PageIndex, and page text goes to TypeSafe. Our
deliberately long 40-page test sent about 640 KB to the stand-in for one question. tiktoken also
downloads its tokenizer from OpenAI’s servers on first run.
Apache-2.0. 155 stars.
See how it compares with other tools in Best Jev tools, tested hands-on.
Review updated Oct 21, 2026. Numbers quoted from the project are its author's own; we don't publish our own measurements of Jev.