GPT Researcher shipped v3.7.0 on 2026-09-26 (PyPI gpt-researcher 0.16.x). The context filter now defaults to TypeSafe Jev, scoring passage usefulness for each sub-query instead of embedding similarity. On a 28-task replay with identical sources, kept-passage relevance is 73% for Jev vs 46% for embeddings (~59% relative lift). Without TYPESAFE_API_KEY it falls back to local BM25—no embedding provider required. Also requires Python 3.12+ and adds a retriever plugin entry point.
Key Takeaways
- ✓Shipped: v3.7.0 / PyPI 0.16.1 — pip install -U gpt-researcher
- ✓Official 28-task replay: Jev kept-passage relevance 73% vs embeddings 46% (~+59%) at similar cost
- ✓CONTEXT_FILTER=auto uses Jev with TYPESAFE_API_KEY else BM25; Jev failures fall back to keyword
- ✓Chunking: 50k page cap, 1k/100 overlap; keep ≤10 chunks (Jev/embeddings) or ≤25 (keyword) per sub-query
- ✓Requires Python 3.12+; retrievers via gpt_researcher.retrievers entry points
Project Links & Resources
Direct AccessIn-Depth Technical Analysis
Core Background & Industry Pain Points
Autonomous research agents scrape dozens of pages per run, but writers only need a few useful passages. Embedding similarity conflates “looks alike” with “helps answer,” so noise reaches the writer and every pipeline must budget for an embedding provider.
Architecture Highlights & Internals
v3.7.0 / PyPI 0.16.x routes scraping through Context Filter in select_context(): 50k page cap, 1k/100 chunks, then Jev usefulness scoring when TYPESAFE_API_KEY is set, else local BM25. Jev failures fall back to keyword; report chat reuses the same filter. Retrievers can ship via the gpt_researcher.retrievers entry point.
Authoritative Benchmarks & Measured Scores
On an official 28-task replay with identical sources, Jev kept-passage relevance is 73% vs embeddings 46% (~59% relative lift) at similar cost. Keyword matched or beat embeddings without a cloud key. Reproduce via evals/context_filter/.
Developer Hands-on Guide
Requires Python 3.12+. pip install -U gpt-researcher. Set TYPESAFE_API_KEY for Jev (CONTEXT_FILTER=auto|jev); use CONTEXT_FILTER=embeddings for the old path. See the docs and release notes.
Discussion & Comments
0Sign in to join the discussion
Connect with AI developers to exchange benchmark insights.