jev-doc-search
Find the page that answers a question in a long PDF: PageIndex builds a tree, Jev Choice walks it, and Noul checks the pages.
Overview
jev-doc-search (github.com/VectifyAI/jev-doc-search) finds the page that answers a question in a long PDF. It uses Jev Choice. There is no vector database and no embeddings. VectifyAI, the team behind PageIndex (github.com/VectifyAI/PageIndex), turns the PDF into a tree of sections. Each section has a title, a summary, and a page range. tree_search.py walks that tree with one Choice per level. It keeps a beam of 3, picks candidate pages, then checks up to 16 pages with one Noul each. The model in page_search.py and tree_search.py is jev-1.13.0 through TypeSafeClient.system_one. Jevbox is the self-hosted library for many files. Its retrieval doc says it does not need PageIndex. This repo is the open recipe for one PDF.
Problem: A single Jev Choice can ask which page answers a question, until the PDF is longer than the request limit or the 255-option cap.
Built for: Engineers who need the page that answers a question in one long PDF, such as a 10-K, without standing up a vector database.
First indexed on Jev Directory: 2026-09-30
Creator and team
- Name
- VectifyAI
- Organization
- PageIndex
- Handle
- @VectifyAI
How Jev is used
- Role in the product flow
- Choice over PageIndex section menus, then Choice over page windows, then a Noul check on each candidate page
- Primitives
- ChoiceNoul
- State in
- The question, plus either a page's text (flat search and the Noul check) or a section title and summary (tree steps). See README and tree_search.py.
- Decision out
- A page id from Choice, then a yes probability from Noul. Pages at 0.5 or above are kept. If none clear 0.5, the best 2 are kept.
- Flat page search (page_search.py) is one Choice with one option per page. It stops when the request passes the token budget or 255 options.
- PageIndex builds a tree: title, summary, and start_index to end_index on each node.
- tree_search.py keeps a beam of 3 paths, scored by the geometric mean of the step probabilities.
- Long sections are split into windows. Up to 16 candidate pages each get one Noul: does this page state the answer?
Flat search is the short-document path. page_search.py puts every page's text in one Choice, and Jev returns a probability for each page. The README says that request must fit in 32,000 tokens, and a Choice takes at most 255 options. A 93-page NVIDIA 10-K is already about 76,000 tokens. A 318-page Citigroup 10-K is past the option cap. PageIndex (github.com/VectifyAI/PageIndex) replaces the flat menu with a tree. Each step is a small Choice whose options are 'title. summary'. The beam of 3 follows TypeSafe's hierarchical classification cookbook, which the README names. After the beam ends, page windows that fit in one request supply candidates, and a Noul with the page text in state decides what to keep. Choice probabilities always sum to 1, so a winner can exist even when no page answers. The Noul is the absolute check. Setup needs TYPESAFE_API_KEY and PAGEINDEX_API_KEY. Jevbox (extend-hq/jevbox) is a different product: a permission-aware document drive whose docs/retrieval.md says it does not require PageIndex or a vector store. DocJev classifies or splits one document from rules you write. jev-search plans web queries. This listing is the PageIndex team's script for tree search over one long PDF.
Sourced performance claims
- README: NVIDIA's fiscal 2026 10-K has 93 pages and about 76,000 tokens, past the 32,000 token request limit. Citigroup's 2025 10-K has 318 pages, past the 255-option Choice cap.Source: github.com/VectifyAI/jev-doc-search README
- README results table, both marked correct: NVIDIA fiscal 2026 revenue found on p37 and p51. Citigroup 2025 net income found on p12, p16, p134, and p135. The income-statement pages cited are NVIDIA p51 and Citigroup p134.Source: github.com/VectifyAI/jev-doc-search README
- tree_search.py sets MODEL to jev-1.13.0, BEAM to 3, MAX_CANDIDATES to 16, and VERIFY_MIN to 0.5. Kept pages are those at or above 0.5, or the best 2 if none qualify.Source: github.com/VectifyAI/jev-doc-search tree_search.py
- Public GitHub repo VectifyAI/jev-doc-search had 95 stars and 3 forks on 2026-10-05. VectifyAI is the team behind PageIndex (github.com/VectifyAI/PageIndex).Source: GitHub star counts, 2026-10-05
Features and stack
Features
- page_search.py for short PDFs: one Choice, one option per page
- tree_search.py for long PDFs: beam of 3, page windows, Noul check up to 16 pages
- Reuse a PageIndex doc_id so the same PDF is not uploaded again
- Apache-2.0. Python. Created 2026-09-30
- README worked example on the NVIDIA fiscal 2026 10-K and the Citigroup 2025 10-K
Stack
- Python
- typesafe_sdk
- jev-1.13.0
- PageIndex
- pypdf
Pricing: Apache-2.0 code. Runs need your TYPESAFE_API_KEY and PAGEINDEX_API_KEY. The README does not publish a price table.
Links
FAQ
- How do you search a long PDF with Jev without embeddings?
- PageIndex builds a tree of sections with a title, a summary, and a page range. tree_search.py asks Jev one Choice per level, keeps the 3 best paths, then checks candidate pages with Noul. The README states there is no vector database.
- Why does one Choice per page fail on a 10-K?
- The README gives 2 limits. State plus the Choice must fit in 32,000 tokens. NVIDIA's fiscal 2026 10-K is 93 pages and about 76,000 tokens. A Choice also takes at most 255 options. Citigroup's 2025 10-K is 318 pages.
- How is jev-doc-search different from Jevbox?
- Jevbox is Extend's self-hosted document library. Its docs/retrieval.md says search uses TypeSafe and does not require PageIndex or a vector store. jev-doc-search is VectifyAI's open recipe that does use PageIndex, for one PDF at a time.
- Which API keys does the script need?
- The README setup exports TYPESAFE_API_KEY (TypeSafe console) and PAGEINDEX_API_KEY (PageIndex dashboard). The client is TypeSafeClient with model jev-1.13.0.
Related learn guides
Original Jev guidance that pairs with this product pattern.
- System One model
The model family behind Jev: parallel typed questions, one forward pass, probabilities you can threshold.
- Jev use cases
The patterns builders actually search for: moderation, routing, triage, RAG verify, and agent gates.
Related products
Hand-picked neighbors with rich profiles or overlapping tags.