Skip to content
Agents tracked: 258 Downloads (7d): 219M up 6.1% GitHub stars: 5.5M VS Code installs: 148M Releases (7d): 293 Agent status: 2 with issues Updated Oct 7, 2026
Release GitHub Releases

DSPy 3.4.0 released

Public OpenAI-style lm(messages=[...]) calls, including SDK message objects. Use explicit requests as above.; Custom BaseLM.forward() and aforward() integrations. Implement the engine interface.; LegacyEngine, AsyncLegacyEngine, and custom completelegacy()…

What changed

  • Public OpenAI-style lm(messages=[...]) calls, including SDK message objects. Use explicit requests as above.
  • Custom BaseLM.forward() and aforward() integrations. Implement the engine interface.
  • LegacyEngine, AsyncLegacyEngine, and custom completelegacy() shortcuts. These are transition tools, not permanent escape hatches.
  • Native n answers use separate sequential requests, potentially billing input tokens more than once. Use engine="litellm" for that backend's native n behavior.
  • Custom engine objects own their connection. Put apikey, apibase, timeout, and related client settings on the engine itself; DSPy rejects them on LM construction, copying, and calls with custom…
  • Custom engines need importable classes and JSON-compatible dumpstate()/loadstate() implementations to save and restore. Restoring them requires allowunsafelmstate=True; only enable it for trusted…
  • Native timeouts bound individual transport waits, not total generation time. An httpx.Timeout component set to None selects LiteLLM under auto or raises under forced lm15, rather than silently…
  • A stream is not retried after emitting a chunk. Incomplete responses are not cached as successful results. Rate-limit errors preserve retry hints, request IDs, and rate-limit headers when available.

Generated from AgentGid's daily data on public sources. How we collect it.

The agent in this story