Releases: stanfordnlp/dspy
3.1.3
What's Changed
RLMs
- fix(interpreter): Fix enable_read_paths with multiple files by @missing-piece in #9256
- fix: handle dict response in RLM for reasoning models by @darinkishore in #9219
- feat(CodeInterpreter): Convert messaging format to JSONRPC by @isaacbmiller in #9226
- feat(RLMs): Fix code fence parsing by @isaacbmiller in #9231
- fix(RLM): large variable injection by @isaacbmiller in #9233
- fix(RLM): no longer get stuck on imports by @isaacbmiller in #9234
- fix(RLM): Refactor tools to take list instead of dict and properly serialize None/null values by @isaacbmiller in #9247
GEPA
- Update gepa[dspy] dependency to version 0.0.26 adding support for cached evals in GEPA expected to reduce metric calls, fix MLFlow logging, and bug fixes by @LakshyAAAgrawal in #9238
- Update gepa[dspy] version to 0.0.25 adding python==3.14 support by @LakshyAAAgrawal in #9224
- Temporarily remove the GEPA tool optimization doc by @chenmoneygithub in #9220
- fix(gepa): Remove enable_tool_optimization feature by @Ju-usc in #9223
Maintenance
- Stabilize real LM tests with deterministic temperature by @okhat in #9218
- fix: handle error responses from ColBERTv2 server by @emmanuel-ferdman in #9227
- Fix format by @chenmoneygithub in #9249
- Fix the request header in streaming mode by @chenmoneygithub in #9248
- feat(docs): add community ports page by @isaacbmiller in #9222
Deferred to a later release (added then reverted before cutting this release):
- Allow DSPy to use the native reasoning from models by @chenmoneygithub in #8822
- Revert ChainOfThought to pre-dspy.Reasoning (#8822) behavior by @okhat in #9258
New Contributors
- @missing-piece made their first contribution in #9256
Full Changelog: 3.1.2...3.1.3
3.1.2
What's Changed
Maintenance
- ci: install Deno in release workflow by @okhat in #9217
- Fix download bug in RAG tutorial by @togimoto in #9156
- Update DSpy settings save / load methods by @WeichenXu123 in #9215
- Expose timeout and straggler_limit params in Parallel by @halfprice06 in #9199
- Fix JSON parsing: Removing initial regex extraction. by @blightzero in #9182
New Contributors
- @halfprice06 made their first contribution in #9199
- @blightzero made their first contribution in #9182
Full Changelog: 3.1.1...3.1.2
3.1.1
What's Changed
RLMs
- feat(rlm): Add RLM Module and improve PythonInterpreter by @isaacbmiller in #9193
- Use
languagein system instructions fordspy.Codefields by @mariusarvinte in #9106 - Update dspy.RLM to improve reliability and avoid pydantic warnings by @okhat in #9210
- fix(RLM): Change FinalAnswerResult to FinalOutput and remove RLM call by @isaacbmiller in #9212
GEPA
- Fix GEPAFeedbackMetric Protocol missing 'self' parameter by @Copilot in #9111
- feat(gepa): add tool description optimization for multi-agent systems by @Ju-usc in #8928
- Update pyproject.toml to update gepa from 0.0.22 -> 0.0.24 by @LakshyAAAgrawal in #9161
- Patch
dspy.gepato handlelist[dict]output from adspy.LMby @mariusarvinte in #9169
Adapters
- Upgrade json_repair to fix parsing issue of underscore-style float number by @chenmoneygithub in #9088
- Properly yield the last chunk in streaming by @chenmoneygithub in #9089
- Avoid unwanted exception chaining when running async tool in sync context by @stevapple in #9092
- Enhance StreamListener to support generic type annotations for output by @TomeHirata in #9112
- FIX: streamify was appending StatusStreamingCallback directly to the shared settings.callbacks list by @glesperance in #9073
- fix(BAMLAdapter): Use docstrings to describe BaseModels by @BenMcH in #9125
- Fix Responses API structured outputs by @Olocool17 in #9130
Maintenance
- Fix UsageTracker AttributeError when using ParallelExecutor with dspy.context by @Copilot in #9095
- Update uv.lock dspy version to match the latest release by @chenmoneygithub in #9067
- [docs] Add Google-style docstrings for dspy/adapters/chat_adapter.py ChatAdapter class #9063 by @azai91 in #9072
- Fix ContextWindowExceededError after 3 retries in react loop by @Copilot in #9110
- fix: skip merging when both usage entry values are None by @chizukicn in #9121
- Fix: enforce positive
memory_max_entriesfor in-memory cache by @mshr-h in #9128 - Add typing to
dspy.datasets.datasetby @max-muoto in #9143 - Increase max_iters for dspy.ReAct by @chenmoneygithub in #9162
- fix(dspy): prevent argument injection in LocalProvider subprocess calls by @Copilot in #9160
- fix(dspy): populate InputField default values in Predict by @ritsuki1227 in #9167
- fix(PythonInterpreter): Remove overly permissive read permissions and add strict allow by @isaacbmiller in #9081
- Add save / load methods for DSpy settings by @WeichenXu123 in #9165
Docs
- [doc] Correct conversation history tutorial example by @zhiyanliu in #9071
- fix: Resolve broken hover-nlp/hover dataset by @vincentkoc in #9069
- Fix missing Real-World Examples and Experimental RL Optimization sections on tutorials page by @0xRaduan in #8982
- Refactor ReflectiveExample TypedDict documentation by @LakshyAAAgrawal in #9133
- [Automatic] Update api reference by @chenmoneygithub in #9135
- Replace ujson with orjson in docs by @togimoto in #9148
New Contributors
- @zhiyanliu made their first contribution in #9071
- @azai91 made their first contribution in #9072
- @0xRaduan made their first contribution in #8982
- @Ju-usc made their first contribution in #8928
- @mariusarvinte made their first contribution in #9106
- @Olocool17 made their first contribution in #9130
- @chizukicn made their first contribution in #9121
- @mshr-h made their first contribution in #9128
- @max-muoto made their first contribution in #9143
- @togimoto made their first contribution in #9148
- @ritsuki1227 made their first contribution in #9167
- @WeichenXu123 made their first contribution in #9165
Full Changelog: 3.1.0...3.1.1
3.1.0
What's Changed
This is a 3.1.0 official release. We are making the beta release 3.1.0beta1 official.
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.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