OpenAPI Specification Generation¶
dspy-cli serve automatically generates OpenAPI 3.1.0 specifications for DSPy programs.
Features¶
- Automatic generation on server start (enabled by default)
- Multiple formats: JSON and YAML
- Enhanced metadata from
dspy.config.yaml(app_id, description) - DSPy extensions with program and model information
- Always available at
/openapi.jsonendpoint
Usage¶
# JSON format (default)
dspy-cli serve
# YAML format
dspy-cli serve --openapi-format yaml
# Disable file generation (still available at /openapi.json)
dspy-cli serve --no-save-openapi
Generated Specification¶
Includes:
- Endpoints: All DSPy programs as POST endpoints
- Request/response schemas: From module
forward()signatures - Validation: Input/output validation via Pydantic
- Additional endpoints:
/programsfor listing programs
DSPy Extensions¶
Custom OpenAPI extensions (x-* fields):
{
"info": {
"title": "my-app-id",
"description": "Description from dspy.config.yaml",
"x-dspy-config": {
"default_model": "openai:gpt-4",
"programs_count": 3
},
"x-dspy-programs": [
{
"name": "CategorizerPredict",
"module_path": "my_app.modules.categorizer_predict",
"is_forward_typed": true
}
],
"x-dspy-program-models": {
"CategorizerPredict": "openai:gpt-4"
}
}
}
Configuration¶
Metadata from dspy.config.yaml:
Fallback defaults if not specified:
- title: "DSPy API"
- description: "Automatically generated API for DSPy programs"
- version: "0.1.0"
Accessing the Specification¶
As a file:
Via HTTP:
In code:
Integration¶
Interactive Documentation¶
FastAPI provides:
- Swagger UI:
http://localhost:8000/docs - ReDoc:
http://localhost:8000/redoc
Generate API Clients¶
# TypeScript
npx openapi-typescript openapi.json -o types.ts
# Python
openapi-generator-cli generate -i openapi.json -g python
Validation¶
Command Options¶
dspy-cli serve [OPTIONS]
Options:
--save-openapi / --no-save-openapi
Save OpenAPI spec to file on server start
(default: enabled)
--openapi-format [json|yaml] Format for OpenAPI spec file
(default: json)
Troubleshooting¶
Spec not generated:
- Verify
--no-save-openapiwasn't used - Check write permissions
- Check server logs
Missing program schemas:
- Ensure modules subclass
dspy.Module - Verify
forward()has type annotations - Check modules are in
src/<package>/modules/
Incorrect metadata:
- Check
app_idindspy.config.yaml - Verify
descriptionfield - Ensure config file is in project root
Implementation¶
- Utility:
src/dspy_cli/utils/openapi.py - Integration:
src/dspy_cli/server/app.py - Generation:
src/dspy_cli/server/runner.py - Uses: FastAPI's
app.openapi()method