# dspy

> DSPy: The framework for programming—not prompting—language models

- **URL**: https://www.freshcrate.ai/projects/dspy
- **Author**: stanfordnlp
- **Category**: Frameworks
- **Latest version**: `3.2.1` (2026-05-05)
- **License**: MIT
- **Source**: https://github.com/stanfordnlp/dspy
- **Homepage**: https://dspy.ai
- **Language**: Python
- **GitHub**: 33,896 stars, 2,823 forks
- **Registry**: github
- **Tags**: `python`

## Description

DSPy: The framework for programming—not prompting—language models

## Recent releases

| Version | Date | Urgency | Changes |
| --- | --- | --- | --- |
| `3.2.1` | 2026-05-05 | High | # DSPy 3.2.1 Changelog  - Removed the upper bound on `litellm`. (#9687) - Usecase page has been updated! [https://dspy.ai/community/use-cases/](https://dspy.ai/community/use-cases/). To add your use-case, [open a PR](https://github.com/stanfordnlp/dspy/edit/main/docs/docs/community/use-cases.md)!  ## Bug fixes  - Fixed async streaming LM calls so custom headers are forwarded to LiteLLM streaming completions. (#9669) - Fixed `dspy.Embedder` so per-call `caching=False` is honored for both |
| `3.2.0` | 2026-04-21 | High | ## Highlights  ### BetterTogether Allows Chaining Optimizers — @dilarasoylu `BetterTogether` now accepts arbitrary optimizers as keyword arguments and chains them via strategy strings. For example, `BetterTogether(metric=m, p=GEPA(...), w=BootstrapFinetune(...))` with `strategy="p -> w -> p"` will prompt-optimize, fine-tune, then prompt-optimize again -- evaluating each step on a valset and returning the best program. (#9149)  There are many promising strategies that may come from running m |
| `3.1.3` | 2026-02-05 | Low | ## What's Changed  RLMs * fix(interpreter): Fix enable_read_paths with multiple files by @missing-piece in https://github.com/stanfordnlp/dspy/pull/9256 * fix: handle dict response in RLM for reasoning models by @darinkishore in https://github.com/stanfordnlp/dspy/pull/9219 * feat(CodeInterpreter): Convert messaging format to JSONRPC by @isaacbmiller in https://github.com/stanfordnlp/dspy/pull/9226 * feat(RLMs): Fix code fence parsing by @isaacbmiller in https://github.com/stanfordnlp/dspy |
| `3.1.2` | 2026-01-19 | Low | ## What's Changed  Maintenance * ci: install Deno in release workflow by @okhat in https://github.com/stanfordnlp/dspy/pull/9217 * Fix download bug in RAG tutorial by @togimoto in https://github.com/stanfordnlp/dspy/pull/9156 * Update DSpy settings save / load methods by @WeichenXu123 in https://github.com/stanfordnlp/dspy/pull/9215 * Expose timeout and straggler_limit params in Parallel by @halfprice06 in https://github.com/stanfordnlp/dspy/pull/9199 * Fix JSON parsing: Removing initial |
| `3.1.1` | 2026-01-19 | Low | ## What's Changed  RLMs * feat(rlm): Add RLM Module and improve PythonInterpreter by @isaacbmiller in https://github.com/stanfordnlp/dspy/pull/9193 * Use `language` in system instructions for `dspy.Code` fields by @mariusarvinte in https://github.com/stanfordnlp/dspy/pull/9106 * Update dspy.RLM to improve reliability and avoid pydantic warnings by @okhat in https://github.com/stanfordnlp/dspy/pull/9210 * fix(RLM): Change FinalAnswerResult to FinalOutput and remove RLM __call__ by @isaacbmi |
| `3.1.0` | 2026-01-06 | Low | ## 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 https://github.com/stanfordnlp/dspy/pull/8938 * Update gepa[dspy] dependency version to 0.0.18 by @LakshyAAAgrawal in https://github.com/stanfordnlp/dspy/pull/8969 * fix(MIPROv2): zero shot not taking .compile parameters into account before determining if the program was zero shot by @is |
| `3.1.0b1` | 2025-11-18 | Low | ## 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 https://github.com/stanfordnlp/dspy/pull/8938 * Update gepa[dspy] dependency version to 0.0.18 by @LakshyAAAgrawal in https://github.com/stanfordnlp/dspy/pull/8969 * fix(MIPROv2): zero shot not taking .compile parameters into account before determining if the program was zero shot by @isaacbmiller in https://github.com/stanfordnlp/dspy/pu |
| `3.0.4` | 2025-11-10 | Low | 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 com |
| `3.0.4b2` | 2025-10-21 | Low | ## What's Changed  ### Features & Enhancements  * **Tooling / APIs**    * Add `ToolCall.execute` for smoother tool execution (#8825, @TomeHirata) * **Networking / Headers**    * Add DSPy User-Agent header (#8887, @TomeHirata)   * Update headers when specified (#8893, @TomeHirata) * **Arbor / RL**    * Arbor GRPO Sync Update (#8939, @Ziems)  ### Bug Fixes & Reliability  * **Streaming / Buffers**    * Fix chunk loss in long streaming with native response field (#8881, @TomeHirat |
| `3.0.4b1` | 2025-09-29 | Low | ## 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 guida |

## Citation

- HTML: https://www.freshcrate.ai/projects/dspy
- Markdown: https://www.freshcrate.ai/projects/dspy.md
- Dependencies JSON: https://www.freshcrate.ai/api/projects/dspy/deps

_Generated by freshcrate.ai. Indexes github releases for AI-agent ecosystem packages._
