# elovic-gpt-researcher-context-filter-jev-2026-09-26

## Veille

Technical documentation page from **GPT Researcher**, *"Context Filter"*, rewritten on **September 26, 2026** by **Assaf Elovic**, the project's creator, the day he made **Jev** (a model from **TypeSafe**) the default context filter. About **2,200 words**, including a reproducible benchmark. **(A)** The design thesis: the context filter is *"the biggest lever on report quality after the research itself"*: *"what it discards, the writer never sees"*. **(B)** The mechanism: each scraped page is split into **1,000-character** chunks. Jev scores each chunk on a four-level usefulness scale (0 to 3), and only chunks at **≥ 1.5** are kept, ten at most. Without an API key, a local **BM25** fallback with a relative threshold takes over. **(C)** The benchmark: 28 tasks replayed on the same pages. **73%** relevant passages for Jev versus **46%** for embeddings, **15-10-3** in head-to-head, at the same cost (~$0.115 per report). **(D)** The most transferable finding: *"the threshold matters more than the ranking"*. Without a threshold, Jev drops back to 50%. The gain comes from less noise, not more content. Extends, on the web-search side, the comparison of retrieval strategies from [[comparethemarket-context-retrieval-ai-code-review-gkg-rag-2026-03-06]].

## Titre Article

Context Filter

## Date

2026-09-26

## URL

https://docs.gptr.dev/docs/gpt-researcher/gptr/context-filter

## Keywords

context filter, context filter, passage selection, GPT Researcher, Jev, TypeSafe, System One, usefulness score, calibrated probabilities, selection threshold, BM25, lexical search, embeddings, cosine similarity, chunk splitting, chunking, fallback, fallback mode, replayed benchmark, precision, pairwise comparison, LLM judge, SimpleQA, deep research, cost per report, contextual noise, context engineering

## Authors

Assaf Elovic, créateur de GPT Researcher, auteur de la page (documentation officielle docs.gptr.dev, non signée).

## Ton

**Profile**: reference documentation for an open-source project, written by its lead maintainer on the very day of the default-behavior change. The page serves both as a manual (modes, environment variables, fallback chain) and as a measurement-based justification for that choice.

**Style**: sober, dense, engineer-oriented. ASCII pipeline diagram, full HTTP request, results tables, numeric parameters (k1 = 1.5, b = 0.75, 64 concurrent calls). The claims are short and evidentiary (*"a calibrated usefulness score can say 'nothing else on this page is worth including'; a similarity score can't"*).

**Epistemic stance**: more cautious than the average product page. Protocol published, scripts and metrics committed, significance test given (p ≈ 0.008 for Jev, p ≈ 0.12 for the BM25 fallback, labeled *"directional"*). A caveats section precedes the reproduction: 28 tasks, a single writer model, a single report type, writing and judging by the same family (gpt-5.4). The default choice benefits a third-party provider (TypeSafe), and the page says nothing about the relationship between the two projects. The free fallback, however, is documented and measured as at least equivalent to embeddings.

## Pense-betes

- **Where the filter sits.** Query → sub-queries → for each: search, scraping, **filter**, passages. The passages from all sub-queries are joined then sent to the writer. Page capped at **50,000 characters**, split into **1,000-character** chunks with 100 of overlap. Chat on a finished report goes through the same `select_context()` function, with the report treated as a single page.
- **Five modes** (`CONTEXT_FILTER`): `auto` (Jev if key present, otherwise keyword), `jev`, `keyword` (BM25), `embeddings`, `none`. Any Jev failure (missing key, network issue, 429/529 after three attempts, malformed response) falls back to keyword. No setting leaves a run without context. Under **8,000 characters** total, everything passes through without filtering.
- **Jev, a "System One model"**: it doesn't generate text, it answers typed questions with calibrated probabilities. Four-level scale: unrelated / same topic but not useful / partially answers / directly answers. The score is the weighted average (0 to 3). Threshold `JEV_MIN_SCORE` = 1.5. Cost: **$0.042 per million input tokens**, output free, i.e. ~half a cent per report.
- ⭐ **The threshold drives the gain, not the model.** Jev forced to fill 10 slots with no threshold: 73% → **50%**, barely better than embeddings. Raw top-10 BM25: 40%, loses to embeddings; the same BM25 with a relative threshold (≥ 50% of the top chunk): 51%, beats them. A metric that can say "nothing else deserves to get in" beats a ranking that always fills the budget.
- **Less noise, not more content.** Jev sends **4.5k tokens** against 7.6k for embeddings, for a near-identical amount of relevant text (~3.3k against 3.5k). The difference is about what the writer has to ignore. Echoes the *context rot* diagnosis, seen from the input side.
- **Not filtering at all** wins on open-ended questions (8-0 against embeddings), but costs **+65%** per report (+83% on open-ended) and sends up to 108k tokens. On factual questions, no gain. The gap widens in *deep research*, which multiplies sub-queries.
- **Reusable protocol**: record the pages actually seen by the filter, replay them with each filter, writer held constant, then judge from three angles (passage precision, blind head-to-head in both orders, SimpleQA accuracy). Search and scraping, the noisiest steps, are neutralized.
- **SimpleQA is saturated**: 18 to 20 out of 20 for every filter. A factual benchmark doesn't distinguish between context strategies.
- ⚠️ **The page's own caveats**: 28 tasks, standard report only, writing and judging by the same model family. Benchmark cost: ~$41 for writing and filtering, plus $8 to $15 for judging.

## RésuméDe400mots

The GPT Researcher documentation page "Context Filter," rewritten on September 26, 2026 by its creator Assaf Elovic, describes the step that chooses, among the scraped pages, the passages the writer model will actually read. It presents this as the main lever on report quality after the research itself.

For each sub-query, pages are capped at 50,000 characters and split into 1,000-character chunks. The filter keeps at most ten chunks (twenty-five in keyword mode), then the sub-queries' contexts are joined and passed to the writer. Chat on an existing report reuses the same function.

Five modes are available. By default, GPT Researcher uses Jev, a TypeSafe model that doesn't generate text but answers typed questions with calibrated probabilities. Each chunk receives a usefulness score from 0 to 3 on a four-level scale; only chunks at 1.5 or above are kept. Calls go out in parallel, sixty-four at a time, for about 1.7 seconds of median filtering time and half a cent per report. Without a TypeSafe key, or on error, the system falls back to a pure-Python, dependency-free BM25 ranking that keeps chunks reaching half the top chunk's score. No setting leaves a run without context.

The benchmark replays 28 real tasks, 20 SimpleQA questions and 8 open-ended questions, on exactly the pages that were recorded, with the same writer model. Only the filter varies. Jev reaches 73% relevant passages against 46% for embeddings, and wins 15 head-to-heads against 3, with 10 ties, at the same cost. The BM25 fallback reaches 51% and wins 14 against 6, a result judged only directional. Without a filter, open-ended reports gain in scope, but cost 65% more on average.

Two findings structure the page. First, the threshold matters more than the ranking: without a threshold, Jev drops to 50% and BM25 loses to embeddings. Second, the gain is a noise reduction: Jev sends 4.5k tokens instead of 7.6k, for an equivalent amount of relevant text. SimpleQA, saturated at 18-20 out of 20, doesn't discriminate at all.

The page lists its limitations: 28 tasks, a single report type, writing and judging by the same model family. Collection, replay, and judging scripts are published, along with per-run metrics, so anyone can redo the measurement.

## GrapheDeConnaissance

- Assaf Elovic —a_créé→ GPT Researcher (TECHNOLOGIE, 0.95)
- Assaf Elovic —publie→ page Context Filter (DOCUMENT, 0.9)
- GPT Researcher —utilise→ Jev (TECHNOLOGIE, 0.97)
- TypeSafe —a_créé→ Jev (TECHNOLOGIE, 0.97)
- GPT Researcher —utilise→ BM25 (CONCEPT, 0.95)
- GPT Researcher —utilise→ filtre de contexte (METHODOLOGIE, 0.97)
- filtre de contexte —améliore→ la qualité des rapports de recherche, principal levier après la recherche elle-même (AFFIRMATION, 0.92)
- Jev —est_instance_de→ modèle System One (CONCEPT, 0.93)
- modèle System One —permet→ des réponses à des questions typées sous forme de probabilités calibrées, sans génération de texte (AFFIRMATION, 0.92)
- Jev —surpasse→ embeddings (TECHNOLOGIE, 0.9)
- Jev —mesure→ 73 % de passages pertinents contre 46 % pour les embeddings, 15 victoires, 10 égalités, 3 défaites, sur 28 tâches (MESURE, 0.93)
- BM25 —mesure→ 51 % de passages pertinents et 14-8-6 contre les embeddings avec seuil relatif, 40 % en top-10 brut (MESURE, 0.9)
- page Context Filter —affirme_que→ le seuil de sélection compte plus que le classement : sans seuil, la précision de Jev tombe de 73 % à 50 % (AFFIRMATION, 0.94)
- filtre de contexte —réduit→ le bruit transmis au rédacteur, 4,5 k tokens contre 7,6 k pour une quantité de texte pertinent équivalente (MESURE, 0.9)
- page Context Filter —affirme_que→ ne pas filtrer élargit les rapports ouverts mais coûte 65 % de plus par rapport, sans gain sur les questions factuelles (AFFIRMATION, 0.9)
- page Context Filter —affirme_que→ SimpleQA est saturé, 18 à 20 sur 20 pour tous les filtres, et ne départage pas les stratégies de contexte (AFFIRMATION, 0.9)
- page Context Filter —est_basé_sur→ benchmark rejoué à pages constantes, jugé par gpt-5.4 et gpt-5.4-mini (AFFIRMATION, 0.88)
- page Context Filter —affirme_que→ "A calibrated usefulness score can say 'nothing else on this page is worth including'; a similarity score can't." (CITATION, 0.93)
- filtre de contexte —fait_partie_de→ context engineering (METHODOLOGIE, 0.8)

---
Canonical: https://www.thekb.eu/en/fiches/elovic-gpt-researcher-context-filter-jev-2026-09-26/
