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