Releases: stanfordnlp/dspy
3.1.0b1
What's Changed
This is a pre-release for 3.1.0.
Optimizers & Evaluation
- Add tutorial for dspy-trusted-monitor using GEPA by @ZachParent in #8938
- Update gepa[dspy] dependency version to 0.0.18 by @LakshyAAAgrawal in #8969
- fix(MIPROv2): zero shot not taking .compile parameters into account before determining if the program was zero shot by @isaacbmiller in #8909
- Update gepa[dspy] dependency version to 0.0.22 by @LakshyAAAgrawal in #9042
- [docs] Add GEPA gepa_kwargs documentation by @GabrielLoiseau in #8998
- Update optimizer overview to include the description of SIMBA by @TomeHirata in #9026
- Enable callback logging only for full eval on GEPA by @TomeHirata in #9050
- Update Arbor Tutorials by @Ziems in #9007
- Update RL Tutorial by @Ziems in #9008
Features & Enhancements
- Add Disable Fallback Option in ChatAdapter by @Ziems in #8984
- Add a method to extract system message based on adapter and signature by @chenmoneygithub in #9006
- feat(File): add File type for handling file data by @TomeHirata in #9014
- Allow stream listener to work on any type by @chenmoneygithub in #8833
- fix(audio): Normalize 'x-wav' audio format to 'wav' by @akshatvishu in #9017
- Support Python 3.14 by @TomeHirata in #9041
- Introduce dspy.Reasoning to capture native reasoning from reasoning models by @chenmoneygithub in #8986
Security & Serialization
- Add guards against loading pkl files by @isaacbmiller in #9048
- Add param to load_memory_cache to stop pkl files without explicit loading by @isaacbmiller in #9055
Bug Fixes & Type Handling
- Fix TypeError when tracking usage with Anthropic models returning Pydantic objects by @Copilot in #8978
- Update old Anthropic model names by @TomeHirata in #8992
- fix(XMLAdapter): Implement user message formatting by @BenMcH in #9003
- Fix content input conversion for OpenAI Responses API by @Copilot in #8993
- Refactor: update type hints for adapter and LM methods by @TomeHirata in #9025
- fix(dspy): exclude gpt-5-chat from reasoning model classification by @mindful-time in #9033
- fix(dspy): Example.toDict() fails to serialize dspy.History objects by @Copilot in #9047
- Some continuous format fix by @chenmoneygithub in #8987
Documentation & Tutorials
- Add documentation for provider-side prompt caching with Anthropic and OpenAI by @Copilot in #8970
- [docs] Add Google-style docstrings for dspy/evaluate/metrics.py by @eramis73 in #8954
- fix: broken PyPI downloads badge from pepy.tech in README and docs home page by @dushmanta05 in #8995
- Document ToolCall.execute() availability from dspy 3.0.4b2 by @Copilot in #9004
- fix(docs): add python language id to code block by @Ahmad8864 in #9023
- docs: add note on Python version for pre-commit by @akshatvishu in #9028
- chore(docs): update dspy.settings.configure and dspy.settings.context to dspy.configure and dspy.context by @isaacbmiller in #9060
- docs: add documentation for async tool usage and error handling by @TomeHirata in #9054
Minor Fixes, Maintenance & CI
- Remove unused notebook python file by @TomeHirata in #8971
- Cache Ollama to speed up CI by @TomeHirata in #8972
- Clean out unused deps by @isaacbmiller in #8968
- docs: add note on Python version for pre-commit by @akshatvishu in #9028
- Bump DSPy version by @chenmoneygithub in #9061
New Contributors
- @ZachParent made their first contribution in #8938
- @eramis73 made their first contribution in #8954
- @dushmanta05 made their first contribution in #8995
- @akshatvishu made their first contribution in #9017
- @mindful-time made their first contribution in #9033
- @GabrielLoiseau made their first contribution in #8998
- @Ahmad8864 made their first contribution in #9023
Full Changelog: 3.0.4...3.1.0b1
3.0.4
3.0.4b2 has been running for a while without seeing issue, so we are making it an official 3.0.4 release.
The release note is the combination of 3.0.4b1 and 3.0.4b2.
What's Changed
Optimizers
- Fix GEPA usage tracking with tuple outputs by @smec-cgint in #8739
- Add custom instruction_proposer support to GEPA with multimodal (dspy.Image) handling by @andressrg in #8737
- Enhance logging for valset usage in GEPA by @LakshyAAAgrawal in #8770
- [Feature] GEPA: Add custom component selection logic support by @andressrg in #8765
- Add MLFLow <> GEPA support by @TomeHirata in #8763
- Update optimization overview with data split guidance by @LakshyAAAgrawal in #8792
- docs: Add comprehensive instruction_proposer documentation and examples for GEPA by @andressrg in #8775
- Introduce gepa_kwargs for passing custom kwargs to gepa.optimize by @LakshyAAAgrawal in #8850
- Propagate callback metadata during GEPA minibatch eval by @TomeHirata in #8835
- Fix typo in GEPA warning by @TomeHirata in #8840
- Update gepa[dspy] dependency version to 0.0.17; Potential fix for load from state not working in GEPA by @LakshyAAAgrawal in #8859
- SIMBA Improvements by @klopsahlong in #8766
Features & Enhancements
- Add Anthropic Citation API support by @TomeHirata in #8721
- Add api reference for citations and document by @TomeHirata in #8801
- Allow custom type to be streamed and use native response by @TomeHirata in #8778
- Fix example code for Citations by @TomeHirata in #8868
- Add
ToolCall.executefor smoother tool execution (#8825, @TomeHirata) - Add DSPy User-Agent header (#8887, @TomeHirata)
- Update headers when specified (#8893, @TomeHirata)
- Arbor GRPO Sync Update (#8939, @Ziems)
- Deprecate Image from_* helpers in favor of flexible constructor by @isaacbmiller in #8771
- Cache Image.format for better throughput by @TomeHirata in #8842
- test(dspy.Image): Adds a test with ReAct that has an Image tool by @isaacbmiller in #8855
Bug Fixes & Type Handling
- Fix #8703 - fixing module and feedback mismatch by @Lucas-Fernandes-Martins in #8777
- Fix value parsing and add tests by @chenmoneygithub in #8774
- Parse doubly-encoded base type in json.parse by @TomeHirata in #8814
- Fix unexpected parsing of Optional[str] fields when string has brackets or braces by @sontanon in #8805
- Use mcp.ClientSession for type hint by @TomeHirata in #8826
- Fix type hint for callpreprocess by @TomeHirata in #8827
- fix: Allow DummyLM answers dict values to be of any type to work with a wider range of signatures by @BenMcH in #8803
- Fix the crash when usage tracker is enabled with non-prediction output by @TomeHirata in #8831
- Fallback to memory cache when disk is not available by @TomeHirata in #8718
- bug(lm): Avoid unnecessary cache key computation by @isaacbmiller in #8862
- Display metric=0 in eval table by @TomeHirata in #8817
- Add save/load to Embeddings by @TomeHirata in #8818
- Fix chunk loss in long streaming with native response field (#8881, @TomeHirata)
- Make the buffer condition more precise (#8907, @TomeHirata)
- fix: add fallback on missing end marker during streaming (#8890, @enitrat)
- fix(JSONAdapter): escape logic when JSON mode but no structured outputs (#8871, @isaacbmiller)
- fix: XML adapter markers (#8876, @enitrat)
- Fix
test_xml_adapter_full_prompt(#8904, @TomeHirata) - Fix responses API (#8880, @chenmoneygithub)
- Fix response_format handling for responses API (#8911, @TomeHirata)
- Fix error handling in dspy parallel (#8860, @TomeHirata)
- fix(LM): default
temperatureandmax_tokenstoNone(#8908, @isaacbmiller) - fix(MIPROv2): select between
task_modelandprompt_model(#8877, @isaacbmiller) - Exclude API keys from saved programs (#8941, @Copilot)
Documentation & Tutorials
- Minor document changes by @Navanit-git in #8722
- Add doc page to learn tool usage in DSPy by @TomeHirata in #8709
- Style fix for tool page by @TomeHirata in #8781
- Add tracing banner in new tutorials by @B-Step62 in #8772
- docs: fix link to the sglang installation/getting started page by @tomsanbear in #8776
- Guide on using native tool calling by @chenmoneygithub in #8788
- fix: removed duplicate cell from GEPA information extraction tutorial by @vacmar01 in #8806
- Remove EmailInsight class from email extraction tutorial by @TomeHirata in #8790
- Update documentation to include responses api by @chenmoneygithub in #8780
- [Feature] Add automatic llms.txt generation via mkdocs-llmstxt plugin by @aberoham in #8562
- Guide on using native tool calling by @chenmoneygithub in #8788
- Update HotPotQA in light of #8591 by @okhat in #8751
- Add Learn MCP page (#8903, @TomeHirata)
- Fix MIPRO paper link in RAG tutorial (#8937, @TomeHirata)
- [Docstring] Add docstring for Adapter (#8915, @chenmoneygithub)
- [Docs] Google-style docstrings for
dspy/primitives/exampleExample class (#8949, @Davshiv20) - [Docs] Google-style docstrings for
Signature.prepend/append/insert/delete(#8945, @gnetsanet) - Better tutorial sidebar—do not auto-expand all tutorials (#8912, @chenmoneygithub)
Minor Fixes & Maintenance
- Use developer role in response API by @TomeHirata in #8727
- 8688 csv output by @crawftv in #8725
- Add header link by @TomeHirata in #8773
- Add experimental annotation by @TomeHirata in #8712
- Update LICENSE error by @TomeHirata in #8783
- Fixed Spelling error in DatasetDescriptor Prompt by @PoeAudits in #8812
- Update API reference by @TomeHirata in #8844
- Expose EvaluationResult as dspy.evaluate.EvaluationResult by @TomeHirata in #8843
- Include built-in types in DSPy api references by @chenmoneygithub in #8810
- Change DummyLM to take an adapter at init by @isaacbmiller in #8802
- Infinitus AI agents by @suman-subash-infinitusai in #8708
- [WIP] Arbor Interface Update by @Ziems in #8837
- Refactor URL construction in
ArborReinforceJobto useurljoin(#8951, @Ziems) - Update type hint of
ClientSession(#8894, @TomeHirata) - Long line in function signature (style) (#8914, @chenmoneygithub)
- Fix lint of LM (#8884, @chenmoneygithub)
- Deflake the real LM test (#8924, @chenmoneygithub)
New Contributors
- @crawftv made their first contribution in #8725
- @Navanit-git made their first contribution in #8722
- @smec-cgint made their first contribution in #8739
- @suman-subash-infinitusai made their first contribution in #8708
- @andressrg made their first contribution in #8737
- @tomsanbear made their first contribution in #8776
- @Lucas-Fernandes-Martins made their first contribution in #8777
- @aberoham made their first contribution in #8562
- @PoeAudits made their first contribution in #8812
- @sontanon made their first contribution in #8805
- @enitrat made their first contribution in #8890
- @Davshiv20 made their first contribution in #8949
- @gnetsanet made their first contribution in #8945
Full Changelog: 3.0.3...3.0.4
3.0.4b2
What's Changed
Features & Enhancements
-
Tooling / APIs
- Add
ToolCall.executefor smoother tool execution (#8825, @TomeHirata)
- Add
-
Networking / Headers
- Add DSPy User-Agent header (#8887, @TomeHirata)
- Update headers when specified (#8893, @TomeHirata)
-
Arbor / RL
Bug Fixes & Reliability
-
Streaming / Buffers
- Fix chunk loss in long streaming with native response field (#8881, @TomeHirata)
- Make the buffer condition more precise (#8907, @TomeHirata)
- fix: add fallback on missing end marker during streaming (#8890, @enitrat)
-
Adapters
- fix(JSONAdapter): escape logic when JSON mode but no structured outputs (#8871, @isaacbmiller)
- fix: XML adapter markers (#8876, @enitrat)
- Fix
test_xml_adapter_full_prompt(#8904, @TomeHirata)
-
Responses / APIs
- Fix responses API (#8880, @chenmoneygithub)
- Fix response_format handling for responses API (#8911, @TomeHirata)
-
Core / LM
- Fix error handling in dspy parallel (#8860, @TomeHirata)
- fix(LM): default
temperatureandmax_tokenstoNone(#8908, @isaacbmiller)
-
MIPRO
- fix(MIPROv2): select between
task_modelandprompt_model(#8877, @isaacbmiller)
- fix(MIPROv2): select between
Security & Privacy
- Exclude API keys from saved programs (#8941, @Copilot)
Refactors & Maintenance
- Refactor URL construction in
ArborReinforceJobto useurljoin(#8951, @Ziems) - Update type hint of
ClientSession(#8894, @TomeHirata) - Long line in function signature (style) (#8914, @chenmoneygithub)
- Fix lint of LM (#8884, @chenmoneygithub)
Documentation
- Add Learn MCP page (#8903, @TomeHirata)
- Fix MIPRO paper link in RAG tutorial (#8937, @TomeHirata)
- [Docstring] Add docstring for Adapter (#8915, @chenmoneygithub)
- [Docs] Google-style docstrings for
dspy/primitives/exampleExample class (#8949, @Davshiv20) - [Docs] Google-style docstrings for
Signature.prepend/append/insert/delete(#8945, @gnetsanet) - Better tutorial sidebar—do not auto-expand all tutorials (#8912, @chenmoneygithub)
Tests & Stability
- Deflake the real LM test (#8924, @chenmoneygithub)
New Contributors
- @enitrat made their first contribution in #8890
- @Copilot made their first contribution in #8941
- @Davshiv20 made their first contribution in #8949
- @gnetsanet made their first contribution in #8945
Full Changelog: 3.0.4b1...3.0.4b2
3.0.4b1
What's Changed
GEPA + Other Optimizers
- Fix GEPA usage tracking with tuple outputs by @smec-cgint in #8739
- Add custom instruction_proposer support to GEPA with multimodal (dspy.Image) handling by @andressrg in #8737
- Enhance logging for valset usage in GEPA by @LakshyAAAgrawal in #8770
- [Feature] GEPA: Add custom component selection logic support by @andressrg in #8765
- Add MLFLow <> GEPA support by @TomeHirata in #8763
- Update optimization overview with data split guidance by @LakshyAAAgrawal in #8792
- docs: Add comprehensive instruction_proposer documentation and examples for GEPA by @andressrg in #8775
- Introduce gepa_kwargs for passing custom kwargs to gepa.optimize by @LakshyAAAgrawal in #8850
- Propagate callback metadata during GEPA minibatch eval by @TomeHirata in #8835
- Fix typo in GEPA warning by @TomeHirata in #8840
- Update gepa[dspy] dependency version to 0.0.17; Potential fix for load from state not working in GEPA by @LakshyAAAgrawal in #8859
- SIMBA Improvements by @klopsahlong in #8766
Custom Type
- Add Anthropic Citation API support by @TomeHirata in #8721
- Add api reference for citations and document by @TomeHirata in #8801
- Allow custom type to be streamed and use native response by @TomeHirata in #8778
- Fix example code for Citations by @TomeHirata in #8868
Image & Multimodal Support
- Deprecate Image from_* helpers in favor of flexible constructor by @isaacbmiller in #8771
- Cache Image.format for better throughput by @TomeHirata in #8842
- test(dspy.Image): Adds a test with ReAct that has an Image tool by @isaacbmiller in #8855
Bug Fixes & Type Handling
- Fix #8703 - fixing module and feedback mismatch by @Lucas-Fernandes-Martins in #8777
- Fix value parsing and add tests by @chenmoneygithub in #8774
- Parse doubly-encoded base type in json.parse by @TomeHirata in #8814
- Fix unexpected parsing of Optional[str] fields when string has brackets or braces by @sontanon in #8805
- Use mcp.ClientSession for type hint by @TomeHirata in #8826
- Fix type hint for callpreprocess by @TomeHirata in #8827
- fix: Allow DummyLM answers dict values to be of any type to work with a wider range of signatures by @BenMcH in #8803
- Fix the crash when usage tracker is enabled with non-prediction output by @TomeHirata in #8831
- Fallback to memory cache when disk is not available by @TomeHirata in #8718
- bug(lm): Avoid unnecessary cache key computation by @isaacbmiller in #8862
- Display metric=0 in eval table by @TomeHirata in #8817
- Add save/load to Embeddings by @TomeHirata in #8818
Documentation & Tutorials
- Minor document changes by @Navanit-git in #8722
- Add doc page to learn tool usage in DSPy by @TomeHirata in #8709
- Style fix for tool page by @TomeHirata in #8781
- Add tracing banner in new tutorials by @B-Step62 in #8772
- docs: fix link to the sglang installation/getting started page by @tomsanbear in #8776
- Guide on using native tool calling by @chenmoneygithub in #8788
- fix: removed duplicate cell from GEPA information extraction tutorial by @vacmar01 in #8806
- Remove EmailInsight class from email extraction tutorial by @TomeHirata in #8790
- Update documentation to include responses api by @chenmoneygithub in #8780
- [Feature] Add automatic llms.txt generation via mkdocs-llmstxt plugin by @aberoham in #8562
- Guide on using native tool calling by @chenmoneygithub in #8788
- Update HotPotQA in light of #8591 by @okhat in #8751
Minor Fixes & Maintenance
- Use developer role in response API by @TomeHirata in #8727
- 8688 csv output by @crawftv in #8725
- Add header link by @TomeHirata in #8773
- Add experimental annotation by @TomeHirata in #8712
- Update LICENSE error by @TomeHirata in #8783
- Fixed Spelling error in DatasetDescriptor Prompt by @PoeAudits in #8812
- Update API reference by @TomeHirata in #8844
- Expose EvaluationResult as dspy.evaluate.EvaluationResult by @TomeHirata in #8843
- Include built-in types in DSPy api references by @chenmoneygithub in #8810
- Change DummyLM to take an adapter at init by @isaacbmiller in #8802
- Infinitus AI agents by @suman-subash-infinitusai in #8708
- [WIP] Arbor Interface Update by @Ziems in #8837
New Contributors
- @crawftv made their first contribution in #8725
- @Navanit-git made their first contribution in #8722
- @smec-cgint made their first contribution in #8739
- @suman-subash-infinitusai made their first contribution in #8708
- @andressrg made their first contribution in #8737
- @tomsanbear made their first contribution in #8776
- @Lucas-Fernandes-Martins made their first contribution in #8777
- @aberoham made their first contribution in #8562
- @PoeAudits made their first contribution in #8812
- @sontanon made their first contribution in #8805
Full Changelog: 3.0.3...3.0.4b1
3.0.3
What's Changed
New Functionality
- Introduce
rollout_idfor bypassing LM cache in a namespaced way by @okhat in #8745 - Raise temperature when doing multiple rollouts (and warn otherwise) by @okhat in #8748
Optimizers
- Bump gepa version - Fix dependencies, Add progress bar, Ensure failing metrics do not continue running by @LakshyAAAgrawal in #8701
- Fix call to forward in dspy.GEPA tutorial by @LakshyAAAgrawal in #8719
Maintenance
- Replace ujson by orjson by @chenmoneygithub in #8655
- Change how
forwardis patched to avoid warning on explicitforwardcall by @chenmoneygithub in #8700 - Add type hints and fix doc string of SIMBA by @TomeHirata in #8707
- Remove deprecated LiteLLM caching from LM by @okhat in #8742
- Fix Predict config merging and document rollout_id usage by @okhat in #8746
- Lower max_tokens requirement for reasoning LMs by @okhat in #8750
Full Changelog: 3.0.2...3.0.3
3.0.2
What's Changed
Optimizers
- Validate GEPA metric signature by @okhat in #8697
- MIPROv2: Warn on deprecated requires_permission_to_run by @TomeHirata in #8635
- Fix mlflow<>gepa by @LakshyAAAgrawal @chenmoneygithub in #8691, #8696
LMs & Adapters
- Allow custom chunk type in stream by @chenmoneygithub in #8679
- Support OpenAI response api in LM by @TomeHirata in #8692
- Fix issues in BAMLAdapter by @chenmoneygithub in #8654
- Handle gpt-5-nano as reasoning model by @okhat in #8693
Maintenance
- Add test to ensure saving/loading backward compatibility by @chenmoneygithub in #8680
- Add type hints for Module.call and Module.acall to return Prediction by @jsummerfield in #8681
- chore: fix error message: gpt-5o -> gpt-5 by @Shangyint in #8686
New Contributors
- @RevanthGundala made their first contribution in #8669
- @jsummerfield made their first contribution in #8681
- @bikash119 made their first contribution in #8684
Full Changelog: 3.0.1...3.0.2
3.0.1
What's Changed
Optimizers
- Fix Evaluate call bug in GEPA by @LakshyAAAgrawal in #8647
- Lazy import of gepa package by @TomeHirata in #8638
LMs & Adapters
- Use pydantic's
ConfigDictfor config; filter litellm warnings by @kurtmckee in #8659 - Remove hardcoded model list from OpenAIProvider file by @chenmoneygithub in #8649
- Raise explicit error on not meeting reasoning model's requirement by @chenmoneygithub in #8650
- Flexible handling of
dspy.ToolCallsparsing by @chenmoneygithub in #8563
Maintenance
- fix(evaluate): Raise TypeError on return_outputs in evaluate kwargs by @isaacbmiller in #8644
- Add type hints for UsageTracker by @TomeHirata in #8636
New Contributors
- @bogireddytejareddy made their first contribution in #8646
Full Changelog: 3.0.0...3.0.1
3.0.0
DSPy 3.0.0
The work in the run up to DSPy 3.0 has focused on new powerful optimizers (RL: dspy.GRPO via our new Arbor library; and reflective prompt evolution: dspy.GEPA and dspy.SIMBA), extensibility (dspy.Adapter & dspy.Type), reliability/observability for production (tight integration with MLflow 3.0), and more. Much of this work incubated during late 2.6 and matured in 3.0.
✨ Highlights across 2.6 → 3.0
Adapters & Types (extensibility without prompt plumbing)
- Adapters: built-in
dspy.ChatAdapter,dspy.JSONAdapter,dspy.XMLAdapter,dspy.BAMLAdapter, token/status streaming, async paths, and intelligent fallback to native LLM structured outputs. - Types: multi-modal I/O via
dspy.Imageanddspy.Audio; composite types (e.g.,list[dspy.Image], Pydantic models); higher-level I/O likedspy.Historyanddspy.ToolCalls. Custom types now “just work” with adapters (dspy.Type). - Tooling integrations: MCP servers and LangChain tools supported out-of-the-box.
Modules, Runtime & DX
- Better scalability:
Module.batchwith thread-safe DSPy settings; native DSPy async; high-concurrency, configurable caches. - Smoother DX: intermediate status streaming, output streaming from any layer, usage tracking, per-module history, rich callbacks.
- Deployment/portability: stable save/load (including the program), and you can export the prompt management layer via Adapters.
- New/updated modules:
dspy.CodeAct,dspy.Refine, improvedReAct, a more reliablePythonInterpreter.
Observability & MLOps
- Native observability with MLflow 3.0: tracing, optimizer tracking, and improved deployment flows (plus docs/tutorials).
Optimizers
- MIPROv2: substantially more reliable with automatic hyperparameter selection and many fixes.
- GRPO (RL on DSPy programs): our new Arbor library for RL training of compound AI systems.
- SIMBA: powerful prompt optimizer that learns from custom feedback (great for agentic/long-horizon tasks).
- GEPA (Genetic-Pareto): a new optimizer that builds a Pareto tree of prompts, uses NL reflection to extract/validate lessons, and can produce shorter prompts while improving downstream performance. Early results show wins over MIPROv2 on several tasks and promising inference-time search behavior (see paper announcement for details).
Some of the above first landed in late 2.6 (e.g., early streaming, initial adapters/types improvements), and were consolidated/matured in 3.0.
💥 Breaking changes / notable removals
- Remove community retrievers (#8073). If you relied on unmaintained retriever integrations, migrate to custom code (or use Tool/MCP integrations).
- Drop Python 3.9 support. 3.10–3.13 are supported.
- Alias removed:
dspy.Program→ remove/replace (was cleaned up in 3.0 work). - Various deprecations promised in 2.5 were applied during the 2.6.0 release candidates (e.g., old
functional/,dsp/clients, legacy caches/examples/tests).
🆚 Changes since 3.0.0b4
Optimizers
- Add GEPA (Genetic-Pareto) optimizer (@LakshyAAAgrawal, #8624, #8628, #8633).
Maintenance
- Migrate GitHub Actions from
set-outputto$GITHUB_OUTPUT(@kurtmckee, #8557).
New contributor
- @LakshyAAAgrawal (first contribution in #8624).
Full Changelog: 3.0.0b4...3.0.0
📚 3.0.0 beta highlights (rollup)
- b4: MIPRO reliability fixes; updated Arbor GRPO integration; streaming end-marker; faster image JSON parsing; BAMLAdapter; mark gpt-5 as reasoning model; vendor a lighter internal hasher.
New contributors: @weklund, @vakinapalli, @tvdaptible, @jmhb0, @olesyash, @kurtmckee, @prrao87, @danielsparing, @apieum. - b3:
dspy.Code; PEP 604 unions in signatures; token streaming for XMLAdapter;dspy.syncifyfor running optimizers on async DSPy programs; Windows support for MIPROv2 confirm; real-LLM unit tests.
New contributors: @LukasMurdock, @ken-dwyer, @grisaitis, @vacmar01, @fswair, @nillwyc, @asad-aali, @niklovescoding, @MaximeRivest, @brenorb. - b2: Stream listener reuse; async paths for Chat/JSON adapters; error-message/QoL updates; drop Python 3.9; docs/tutorials; rename
BaseType→Type; removedspy.Programalias; many cleanups.
New contributors: @codingDuan, @Hangzhi, @poudro. - b1: 3.0 “heads-up” + remove unmaintained retrievers (#8073); XML adapter; standardize/style improvements; async settings merge; MLflow tracing guide.
New contributors: @brishin, @dmavrommatis.
👏 Contributors since 2.6
Thank you to everyone who contributed code, docs, reviews, issues, and testing!
🎉 = first-time contributor since 2.6.15
@AkeemMcLennon, @aliirz, @amas0, @apieum 🎉, @arnavsinghvi11, @asad-aali 🎉, @asparagus, @assadyousuf 🎉, @BenMcH 🎉, @bjsi, @brenorb 🎉, @brishin 🎉, @BTripp1986 🎉, @carsonkahn-external 🎉, @cezarc1, @chakravarthik27, @charviupreti 🎉, @chenmoneygithub, @codingDuan 🎉, @CyrusNuevoDia, @danielsparing 🎉, @dbczumar, @dilarasoylu, @dimroc, @Dyadd, @emmanuel-ferdman 🎉, @erandeutsch, @estsauver, @fswair 🎉, @GabeDottl, @glesperance, @grisaitis 🎉, @hmoazam, @Harryllh, @Hangzhi, @hung-phan, @isaacbmiller, @itay1542, @Jdogtherock, @JHMuir, @jjjjw, @jinnovation, @jmho, @jmhb0 🎉, @kanjurer, @kalanyuz, @ken-dwyer 🎉, keyuchen21, @klopsahlong, @koptagel 🎉, @kurtmckee 🎉, @LukasMurdock 🎉, @laitifranz, @LakshyAAAgrawal 🎉, @lxdlam, @MaximeRivest 🎉, @MaxwellSalmon, @Miyamura80 🎉, @myz96, @neilbhutada, @niklovescoding 🎉, @nillwyc 🎉, @okhat, @olesyash 🎉, @poudro 🎉, @prrao87 🎉, @patcher9, @rcanand, @rifolio 🎉, @Samoed, @SanjanShiv 🎉, @srowen 🎉, @Shangyint, @stevapple, @tvdaptible 🎉, @TomeHirata, @tikoehle 🎉, @Timtech4u, @thomasahle, @ulgens, @vakinapalli 🎉, @vacmar01 🎉, @veronicalyu320, @vincentkoc, @weklund 🎉, @willsmithDB, @xinyij-goo 🎉, @yuruofeifei, @Ziems, @zbambergerNLP, @gkorland, @yanmxa, @mikeedjones, @b-d055, @mikeweltevredem, @ItzAmirreza, @GangGreenTemperTatum, @shermansiu, @dmavrommatis, @iPersona, @Krishn1412, @Y-1huadb, @B-Step62, @tkellogg
First-time contributors called out since 2.6.15 (rollup):
@rifolio, @charviupreti, @BenMcH, @GangGreenTemperTatum, @koptagel, @Miyamura80, @tikoehle, @srowen, @assadyousuf, @xinyij-goo, @SanjanShiv, @emmanuel-ferdman, @Y-1huadb, @Krishn1412, @BTripp1986, @vincentkoc, @estsauver, @jmho, @JHMuir, @neilbhutada, @carsonkahn-external, @dimroc, @erandeutsch, @willsmithDB, @iPersona, @brishin, @dmavrommatis, @codingDuan, @Hangzhi, @poudro, @LukasMurdock, @ken-dwyer, @grisaitis, @vacmar01, @fswair, @nillwyc, @asad-aali, @niklovescoding, @MaximeRivest, @brenorb, @weklund, @vakinapalli, @tvdaptible, @jmhb0, @olesyash, @kurtmckee, @prrao87, @danielsparing, @apieum, @LakshyAAAgrawal.
🔗 Compare
- Full changes:
2.6.27...3.0.0b1,3.0.0b1...3.0.0b2,3.0.0b2...3.0.0b3,3.0.0b3...3.0.0b4,3.0.0b4...3.0.0.
3.0.0b4
What's Changed
Optimizers
- Fixes for MIPRO: Don't fail silently on bootstrapping! by @okhat in #8548
- skip unhashable module histories for mipro program proposer by @arnavsinghvi11 in #8572
- Update Arbor GRPO Integration by @Ziems in #8609
- Remove user confirmation from MiproV2 by @TomeHirata in #8552
Adapters & Tools
- fix(dspy): Fix MCP tool conversion when schema has no input params by @tvdaptible in #8566
- Explicitly mark the end of streaming by @chenmoneygithub in #8587
- faster json parsing for images in chatadapter by @jmhb0 in #8596
- Use json mode for serialization by @TomeHirata in #8605
- Custom BAMLAdapter to improve structured outputs by @prrao87 in #8614
LMs & Modules
- Mark gpt-5 as reasoning model by @olesyash in #8620
- Fix infinite growing trace and add tests by @chenmoneygithub in #8607
- Litellm logging management by @chenmoneygithub in #8619
- nit: fix "poorly-design" by @danielsparing in #8622
- remove history and callbacks from module saving by @arnavsinghvi11 in #8599
- update deduplicate by @apieum in #8623
Maintenance
- Increment python version for pre-commit by @TomeHirata in #8602
- Run the
typostool against the codebase by @kurtmckee in #8560 - Fix incorrect
build-systemrequirements by @kurtmckee in #8558 - Vendor Hasher class from datasets library in order to remove larger dependency by @BenMcH in #8621
New Contributors
- @weklund made their first contribution in #8554
- @vakinapalli made their first contribution in #8569
- @tvdaptible made their first contribution in #8566
- @jmhb0 made their first contribution in #8596
- @olesyash made their first contribution in #8620
- @kurtmckee made their first contribution in #8560
- @prrao87 made their first contribution in #8614
- @danielsparing made their first contribution in #8622
- @apieum made their first contribution in #8623
Full Changelog: 3.0.0b3...3.0.0b4
3.0.0b3
What's Changed
Key bugfix: The removal of datasets from the default dependencies in 3.0.0b1 meant that if the user didn't have datasets installed, the bootstrapping of MIPROv2 would fail silently, leading to worse optimization. Added datasets back in commit 8aa065945.
Signatures, Adapters, & Types
- add dspy.Code by @chenmoneygithub in #8511
- Provide language to dspy.Code by @chenmoneygithub in #8519
- Use collections for type hints by @TomeHirata in #8513
- Add testing for PEP604 union types by @erandeutsch in #8475
- Fix type annotation for ensure_signature by @grisaitis in #8496
- Use model_dump instead of dict by @TomeHirata in #8493
- Fix native function calling in adapters by @chenmoneygithub in #8479
- Rename dspy.BaseType to dspy.Type by @chenmoneygithub in #8510
- Resolve "$def" for nested tool arg type by @chenmoneygithub in #8534
- Add token streaming support for XMLAdapter by @chenmoneygithub in #8478
Modules
- Update python_interpreter.py by @nillwyc in #8501
- unwrap pyodide object correctly by @arnavsinghvi11 in #8466
- Provide a
dspy.syncifyso that users can run optimizer on async dspy programs by @chenmoneygithub in #8509 - fix UnicodeDecodeError: 'gbk' codec can't decode by @nillwyc in #8522
Other
- Support MIPROv2 user confirmation in windows by @TomeHirata in #8485
- Run unit tests with real LLM calls by @TomeHirata in #8486
New Contributors
- @LukasMurdock made their first contribution in #8477
- @ken-dwyer made their first contribution in #8474
- @grisaitis made their first contribution in #8496
- @vacmar01 made their first contribution in #8499
- @fswair made their first contribution in #8498
- @nillwyc made their first contribution in #8501
- @asad-aali made their first contribution in #8512
- @niklovescoding made their first contribution in #8515
- @MaximeRivest made their first contribution in #8527
- @brenorb made their first contribution in #8542
Full Changelog: 3.0.0b2...3.0.0b3