3.0.4
stanfordnlp/dspy3.0.4Nov 10, 2025by chenmoneygithub
AI Summary
A maintenance release focusing on GEPA improvements, Anthropic Citation API support, and various bug fixes for streaming, type handling, and caching.
Key Highlights
- Enhanced GEPA with custom instruction_proposer and MLFlow support.
- Added Anthropic Citation API support.
- Fixed streaming buffer loss and response format handling.
- Added ToolCall.execute for smoother execution.
New Features
- Custom instruction_proposer support for GEPA.
- Anthropic Citation API support.
- ToolCall.execute method.
- Save/load functionality for Embeddings.
Full Release Notes
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.execute` for 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 `temperature` and `max_tokens` to `None` (#8908, @isaacbmiller) - fix(MIPROv2): select between `task_model` and `prompt_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/example` Example 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 `ArborReinforceJob` to use `urljoin` (#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 https://github.com/stanfordnlp/dspy/pull/8725 * @Navanit-git made their first contribution in https://github.com/stanfordnlp/dspy/pull/8722 * @smec-cgint made their first contribution in https://github.com/stanfordnlp/dspy/pull/8739 * @suman-subash-infinitusai made their first contribution in https://github.com/stanfordnlp/dspy/pull/8708 * @andressrg made their first contribution in https://github.com/stanfordnlp/dspy/pull/8737 * @tomsanbear made their first contribution in https://github.com/stanfordnlp/dspy/pull/8776 * @Lucas-Fernandes-Martins made their first contribution in https://github.com/stanfordnlp/dspy/pull/8777 * @aberoham made their first contribution in https://github.com/stanfordnlp/dspy/pull/8562 * @PoeAudits made their first contribution in https://github.com/stanfordnlp/dspy/pull/8812 * @sontanon made their first contribution in https://github.com/stanfordnlp/dspy/pull/8805 * @enitrat made their first contribution in https://github.com/stanfordnlp/dspy/pull/8890 * @Davshiv20 made their first contribution in https://github.com/stanfordnlp/dspy/pull/8949 * @gnetsanet made their first contribution in https://github.com/stanfordnlp/dspy/pull/8945 **Full Changelog**: https://github.com/stanfordnlp/dspy/compare/3.0.3...3.0.4