Install
$ agentstack add skill-omidzamani-dspy-skills-dspy-production-deployment ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
DSPy Production Deployment
Goal
Prepare a DSPy program for repeatable, observable, scalable, and safer production execution.
Cache Hardening
DSPy enables memory and disk caches by default. Disk cache deserialization uses pickle unless restricted. Enable the allowlist mode in production:
import dspy
dspy.configure_cache(restrict_pickle=True)
Register trusted custom cache types only when needed:
dspy.configure_cache(
restrict_pickle=True,
safe_types=[MyResult, Metadata],
)
Disable a cache layer explicitly when a deployment cannot persist data or requires fresh model responses:
dspy.configure_cache(
enable_disk_cache=False,
enable_memory_cache=True,
)
Save and Load
Prefer state-only JSON for readable, safer artifacts:
compiled.save("./artifacts/program.json", save_program=False)
loaded = MyProgram()
loaded.load("./artifacts/program.json")
Use whole-program save only for trusted artifacts. It uses cloudpickle:
compiled.save("./artifacts/program/", save_program=True)
loaded = dspy.load("./artifacts/program/")
Keep the DSPy major version compatible when loading saved programs.
Usage Tracking
dspy.configure(
lm=dspy.LM("openai/gpt-4o-mini"),
track_usage=True,
)
prediction = program(question="What is DSPy?")
print(prediction.get_lm_usage())
Cached calls return no new token usage.
Async Execution
Most built-in modules support acall():
import asyncio
async def main():
prediction = await program.acall(question="What is DSPy?")
print(prediction.answer)
asyncio.run(main())
Implement aforward() for custom async modules. Use dspy.asyncify(program) only when adapting a synchronous callable is the right boundary.
Streaming
import asyncio
import dspy
stream_program = dspy.streamify(
dspy.Predict("question -> answer"),
stream_listeners=[
dspy.streaming.StreamListener(signature_field_name="answer"),
],
)
async def main():
async for chunk in stream_program(question="Explain DSPy briefly."):
print(chunk)
asyncio.run(main())
For looped modules such as ReAct, set allow_reuse=True on listeners for repeated fields. Cache hits yield the final Prediction without replaying token chunks.
Production Checklist
- Pin the stable DSPy series.
- Use state-only JSON unless whole-program pickle is necessary and trusted.
- Enable
restrict_pickle=True. - Record usage, latency, errors, and traces.
- Load-test async and streaming paths separately.
- Use [dspy-debugging-observability](../dspy-debugging-observability/SKILL.md) for MLflow and callbacks.
Official Documentation
- Production guide: https://dspy.ai/production/
- Cache tutorial: https://dspy.ai/tutorials/cache/
- Saving tutorial: https://dspy.ai/tutorials/saving/
- Async tutorial: https://dspy.ai/tutorials/async/
- Streaming tutorial: https://dspy.ai/tutorials/streaming/
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: OmidZamani
- Source: OmidZamani/dspy-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.