Releases: assafelovic/gpt-researcher
Release list
Major fixes
What's Changed
- fix: restore main, add CI, and land 97 queued PRs by @assafelovic in #2074
- fix(readme): restore broken star history chart by @Dessalines39394 in #2066
- docs: document scholarly retriever configuration by @pikaqiu2333 in #1863
- chore(deps): update python-pptx requirement from >=1.0.0 to >=1.0.2 by @dependabot[bot] in #1927
- chore: remove the dead poetry dependency block, test the declared Python floor by @assafelovic in #2075
- Add agent observability with Monocle by @imohammedansari in #1873
- fix: make the empty-source-urls notification reachable (#1978) by @assafelovic in #2076
- fix(scraper): keep extracted content when web_base_loader enrichment fetch fails by @AmirF194 in #2078
- feat(retrievers): declare whether results need scraping, instead of guessing by @assafelovic in #2079
New Contributors
- @Dessalines39394 made their first contribution in #2066
- @pikaqiu2333 made their first contribution in #1863
- @imohammedansari made their first contribution in #1873
- @AmirF194 made their first contribution in #2078
Full Changelog: v3.6.0...v3.6.1
v3.6.0
Introducing a super stable version with enhanced improvements across security, stability and performance. We're also introducing a collaboration with Langchain with the latest deep agents framework here - https://github.com/assafelovic/gpt-researcher/tree/main/deep_agents
Thank you and welcome to all the new contributors!
What's Changed
- security: sanitize untrusted content, add SECURITY.md, pin brotli by @assafelovic in #1820
- Fix silently dropped token limits, real usage-based cost tracking, and research pipeline robustness by @assafelovic in #1861
- Add Deep Agents example: GPT Researcher as the research engine in a LangChain deep agent by @assafelovic in #1857
- Resolve post-merge conflicts: 4 retriever/context fixes (supersedes #1895-1898) by @assafelovic in #1906
- Retriever hardening: 20 guard fixes against malformed results (supersedes #1837…#1890) by @assafelovic in #1907
- Scraper robustness: 6 fixes (title/PDF-detection/temp-file/dimensions) (supersedes #1824…#1842) by @assafelovic in #1908
- Multi-agent robustness: bound revision loops + exact sentinels (supersedes #1883/#1885/#1886) by @assafelovic in #1909
- Core/misc hardening: 11 fixes (costs/query/llm/agent/mcp/config) (supersedes #1822…#1902) by @assafelovic in #1910
- Reconcile master→main: GetXAPI retriever, Claude 4.x temp fix, MiniMax M3, curate_sources fixes by @assafelovic in #1911
- feat: add Nebius Token Factory as LLM and embedding provider by @teionarr in #1891
- chore(multi_agents): nest AG2 variant under multi_agents/ag2 by @assafelovic in #1912
- docs(skill): fix drift in .claude reference docs (retrievers, multi-agents, api) by @assafelovic in #1913
New Contributors
Full Changelog: v3.5.1...v3.6.0
v3.5.1
What's Changed
- fix: add MAX_REVISIONS guard to prevent infinite revision loop by @varshiniml7 in #1783
- Improve SimpleQA eval observability with structured logging and latency metadata by @SeanHe727 in #1790
- feat(retrievers): add Brave Search support by @agbocsardi in #1793
- Abstain instead of fabricating a report when no content was gathered by @aaravanmay in #1799
- fix(deep-research): keep oversized context from collapsing to empty by @XiaojuCH in #1802
- feat(retrievers): add fastCRW search retriever by @us in #1806
- feat: Add FactChecker and Visualizer Agents to Multi-Agent Workflow by @KasraBashirioskooei in #1809
- Add GroundRoute retriever (multi-engine search, cached) by @jp0xz in #1812
- feat: add Atlas Cloud as an OpenAI-compatible LLM provider by @lucaszhu-hue in #1813
- Update web_scraping.py by @Joly0 in #1816
- Fix Azure blob loader path handling by @konnisan in #1817
New Contributors
- @varshiniml7 made their first contribution in #1783
- @SeanHe727 made their first contribution in #1790
- @agbocsardi made their first contribution in #1793
- @aaravanmay made their first contribution in #1799
- @XiaojuCH made their first contribution in #1802
- @us made their first contribution in #1806
- @KasraBashirioskooei made their first contribution in #1809
- @jp0xz made their first contribution in #1812
- @lucaszhu-hue made their first contribution in #1813
- @konnisan made their first contribution in #1817
Full Changelog: v3.5.0...v3.5.1
v3.5.0
Massive update across the stack with critical bug fixes and performance improvements including addition to new models and retrievers. Thanks to the amazing community for pushing this!
What's Changed
- feat: add ModelsLab image generation provider by @adhikjoshi in #1647
- fix: NameError when STRATEGIC_LLM lacks colon separator (#1673) by @sudabg in #1679
- fix: properly resolve report_type imports in websocket_manager and re… by @varadfromeast in #1740
- Fix: resolve unhashable dict error in detailed report context deduplication by @3mk4yl in #1700
- Add Codex CLI plugin manifest by @internet-dot in #1721
- fix: eliminate process-level env pollution from MCP retriever setup by @octo-patch in #1742
- feat(cli): generate filename from LLM and add YAML frontmatter for re… by @VVjwell in #1743
- feat: add OpenAlex retriever by @CuiweiG in #1748
- feat(server): add Agent Discovery Protocol manifest endpoint by @zhao0112 in #1749
- fix: truncate document content to prevent embedding token limit errors by @octo-patch in #1750
- fix: support MISTRAL_BASE_URL env var for custom Mistral-compatible endpoints by @octo-patch in #1754
- Add LLM cost change analysis to CI by @Jwrede in #1761
- chore: fix some typos across codebase by @box4wangjing in #1768
- Limit multi-agent human plan revisions by @CalibratedGhosts in #1769
- fix(deep_research): parse LLM output with json_repair + regex fallback by @RomainROCH in #1773
- fix(llm): raise max_tokens cap from 32k to 200k for modern long-output models by @RomainROCH in #1775
- Fix incorrect config file path in Chinese README by @wesssI in #1779
- fix(retrieval): send Brave snippets to scraper by @RomainROCH in #1780
- feat(cost): track Anthropic usage from native metadata by @RomainROCH in #1781
New Contributors
- @adhikjoshi made their first contribution in #1647
- @sudabg made their first contribution in #1679
- @varadfromeast made their first contribution in #1740
- @3mk4yl made their first contribution in #1700
- @internet-dot made their first contribution in #1721
- @VVjwell made their first contribution in #1743
- @CuiweiG made their first contribution in #1748
- @zhao0112 made their first contribution in #1749
- @Jwrede made their first contribution in #1761
- @box4wangjing made their first contribution in #1768
- @CalibratedGhosts made their first contribution in #1769
- @RomainROCH made their first contribution in #1773
- @wesssI made their first contribution in #1779
Full Changelog: v3.4.4...v3.5.0
v3.4.4
What's Changed
- #1673: Fixed the reference error in code. by @parth3083 in #1674
- fix potential data parsing issue in web scraping by @Carton in #1607
- Fix: Add context normalization for dict and string formats by @GeorgelPreput in #1668
- feat: add MiniMax as a native LLM and embedding provider (M2.7) by @octo-patch in #1677
- Update dependencies and add missing os import by @mparker404 in #1680
- fix: PubMed Central retriever returns no results by @antek-eth in #1686
- Fix missing os import in websocket manager by @sztoplover-bit in #1697
- Bug fix/pdf report by @test23techvv in #1720
- Fix issue 1712 by @test23techvv in #1717
- fix: skip empty LLM streaming chunks and flush stdout by @kiranvk-2011 in #1737
- feat: add Xquik X/Twitter search retriever by @kriptoburak in #1734
New Contributors
- @parth3083 made their first contribution in #1674
- @Carton made their first contribution in #1607
- @octo-patch made their first contribution in #1677
- @mparker404 made their first contribution in #1680
- @antek-eth made their first contribution in #1686
- @sztoplover-bit made their first contribution in #1697
- @test23techvv made their first contribution in #1720
- @kiranvk-2011 made their first contribution in #1737
- @kriptoburak made their first contribution in #1734
Full Changelog: v3.4.3...v3.4.4
v3.4.3
Huge release with major fixes and performance improvements. Welcome to all the incredible new contributors and shoutout to @Br1an67 with major contributions!
What's Changed
- fix: Read all pages in PyMuPDFScraper instead of just first page by @MattBenesch in #1623
- docs: fix invalid Discord invite link in LLM docs by @Br1an67 in #1649
- fix: invalidate import caches after runtime package install by @Br1an67 in #1650
- fix: fallback to OPENAI_API_VERSION for Azure embeddings by @Br1an67 in #1651
- fix: increase PyMuPDF download timeout and add SSL fallback by @Br1an67 in #1652
- fix: use all configured retrievers in deep research planning by @Br1an67 in #1653
- fix: add table styles to FastAPI frontend report container by @Br1an67 in #1654
- feat: track cost per step in research process by @Br1an67 in #1655
- feat: add scrape count option to FastAPI frontend by @Br1an67 in #1656
- feat: add pondering questions section to FastAPI frontend by @Br1an67 in #1657
- fix: dynamically retrieve agent role if missing in ReportGenerator by @kiwabb in #1658
- fix docs links and add ag2 pipeline diagram by @qingyun-wu in #1662
- fix: improve retry handling in create_chat_completion by @jhyz in #1664
- Add support for connection headers in MCP client/server config by @GeorgelPreput in #1665
New Contributors
- @MattBenesch made their first contribution in #1623
- @Br1an67 made their first contribution in #1649
- @kiwabb made their first contribution in #1658
- @qingyun-wu made their first contribution in #1662
- @jhyz made their first contribution in #1664
Full Changelog: v3.4.2...v3.4.3
v3.4.2
This release is packed with performance and quality improvements! Welcome to the new and amazing contributors, such a pleasure as always!
What's Changed
- Update FireCrawl setup instructions for self hosted instance by @technot80 in #1639
- fix(server): resolve multi-agent run_research_task NameError by @AlexanderCGO2 in #1640
- perf: optimize context compression with smart fast-path for small documents by @maanavagrawal in #1641
- perf: add URL deduplication to prevent redundant scraping by @maanavagrawal in #1642
- fix: replace 9 bare except clauses with except Exception by @haosenwang1018 in #1643
- fix: nodriver scraper Docker compatibility and browser pool deadlock by @mareurs in #1645
- feat: add Avian as LLM provider by @avianion in #1646
New Contributors
- @AlexanderCGO2 made their first contribution in #1640
- @maanavagrawal made their first contribution in #1641
- @haosenwang1018 made their first contribution in #1643
- @mareurs made their first contribution in #1645
- @avianion made their first contribution in #1646
Full Changelog: v3.4.1...v3.4.2
v3.4.1
Huge release packed with incredible improvements and welcome to all the new contributors! See details below:
What's Changed
- Update server_utils.py - fixed file name via hash by @MaxAkaAltmer in #1611
- add bocha search tool by @weijintaocode in #1618
- Add openrouter embeddings support by @Joly0 in #1620
- Claude/analyze project structure md q kw by @aiiscoding in #1621
- feat: Add Forge LLM provider support by @Yiiii0 in #1626
- Added AG2 based example by @VasiliyRad in #1627
- Attempt to load config path from env var if no path provided at runtime by @GeorgelPreput in #1630
- fix: handle list context in deep research to prevent AttributeError by @technot80 in #1637
New Contributors
- @MaxAkaAltmer made their first contribution in #1611
- @weijintaocode made their first contribution in #1618
- @Joly0 made their first contribution in #1620
- @aiiscoding made their first contribution in #1621
- @Yiiii0 made their first contribution in #1626
- @VasiliyRad made their first contribution in #1627
- @GeorgelPreput made their first contribution in #1630
- @technot80 made their first contribution in #1637
Full Changelog: v3.4.0...v3.4.1
v3.4.0
Such an exciting release with powerful new features.
🖼️ Inline Image Generation
GPT Researcher can now automatically generate and embed AI-created illustrations directly in your research reports using Google's Gemini models.
Key features:
- Pre-generation flow - Images are generated during research, not after, for seamless UX
- Context-aware - LLM analyzes your research to identify the best visualization opportunities
- Dark mode styling - Generated images match the app's aesthetic by default
- Fully configurable - Control max images, style (dark/light/auto), and model
Quick setup:
IMAGE_GENERATION_ENABLED=true
GOOGLE_API_KEY=your_key
IMAGE_GENERATION_MODEL=models/gemini-2.5-flash-image
IMAGE_GENERATION_STYLE=dark📖 Image Generation Documentation
🔍 LangSmith Integration
Added native support for LangSmith tracing and observability. Monitor your research workflows, debug LLM calls, and analyze performance with full visibility into the research pipeline.
Quick setup:
LANGCHAIN_TRACING_V2=true
LANGCHAIN_API_KEY=your_langsmith_key
LANGCHAIN_PROJECT=gpt-researcherWhat you can track:
- LLM calls and token usage
- Research planning and sub-query generation
- Report generation steps
- Cost analysis per research task
📖 LangSmith Logs Documentation
🤖 Claude Code Skills Integration
Added comprehensive .claude/skills/ directory that enables Claude Code to understand, use, and extend GPT Researcher effectively.
What's included:
SKILL.md(1,500+ lines) - Complete architecture, workflows, method signatures, data flow diagrams, and the 8-step feature pattern for adding new featuresREFERENCE.md- Quick lookup for all config vars, API endpoints, and WebSocket events- Real case studies including the Image Generation implementation as a reference
Benefits:
- Faster contributor onboarding with AI assistance
- Consistent code patterns across contributions
- End-to-end feature development following established patterns
📖 AI-Assisted Development Documentation
📚 Documentation Updates
- ✨ New: Image Generation guide
- ✨ New: AI-Assisted Development guide for Claude Code users
- 📝 Updated README with new features section
Installation
pip install --upgrade gpt-researcherOr with Docker:
docker pull gptresearcher/gpt-researcher:latestFull Changelog: v0.14.5...v0.14.6
What's Changed
- Add aggregated summary flag to quick_search by @TheSpaceGod in #1604
- feat: enable LangSmith tracing for enhanced observability by @tiandee in #1599
- added image generation with nano banana by @assafelovic in #1608
Full Changelog: v3.3.9...v3.4.0
Performance improvements
What's Changed
- Fix CORS defaults: remove wildcard origins when allow_credentials=true by @PriscaAmajuoyi in #1595
- docs: add docstrings to memory and context compression modules by @kga245 in #1589
- refactor: Implement ECR and GitHub Actions Terraform setup with necessary configurations and outputs by @huytran-gg in #1590
- feat: Implement WebSocket chat command handling & make Tavily optional by @tiandee in #1593
- Persist /api/reports history to local JSON store (enables Next.js history sync) by @PriscaAmajuoyi in #1594
- Remove hardcoded authentication token by @E-G-C in #1596
New Contributors
- @huytran-gg made their first contribution in #1590
- @tiandee made their first contribution in #1593
- @E-G-C made their first contribution in #1596
Full Changelog: v.3.3.8...v3.3.9