DSRs (DSPy Rust) is a ground-up rewrite of the DSPy framework in Rust, designed for building robust, high-performance applications powered by Language Models. Unlike a simple port, DSRs leverages Rust's type system, memory safety, and concurrency features to provide a more efficient and reliable foundation for LLM applications.
Add DSRs to your Cargo.toml
:
[dependencies]
# Option 1: Use the shorter alias (recommended)
dsrs = { package = "dspy-rs", version = "0.0.2-beta" }
# Option 2: Use the full name
dspy-rs = "0.0.2-beta"
Or use cargo:
# Option 1: Add with alias (recommended)
cargo add dsrs --package dspy-rs
# Option 2: Add with full name
cargo add dspy-rs
Here's a simple example to get you started:
use dsrs::prelude::*;
use std::collections::HashMap;
use indexmap::IndexMap;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Define a signature for Q&A
let signature = Signature::builder()
.name("QASignature".to_string())
.instruction("Answer the question concisely and accurately.".to_string())
.input_fields(IndexMap::from([(
"question".to_string(),
Field::InputField {
prefix: "Question:".to_string(),
desc: "The question to answer".to_string(),
format: None,
output_type: "String".to_string(),
},
)]))
.output_fields(IndexMap::from([(
"answer".to_string(),
Field::OutputField {
prefix: "Answer:".to_string(),
desc: "The answer to the question".to_string(),
format: None,
output_type: "String".to_string(),
},
)]))
.build()?;
// Create a predictor
let predictor = Predict {
signature: &signature
};
// Prepare input
let inputs = HashMap::from([
("question".to_string(), "What is the capital of France?".to_string())
]);
// Execute prediction
let result = predictor.forward(inputs, None, None).await?;
println!("Answer: {}", result.get("answer", None));
Ok(())
}
Run the test suite:
# All tests
cargo test
# Specific test
cargo test test_predictors
# With output
cargo test -- --nocapture
- Metrics traits and Evaluators
- Signature Macros
- Structured Output Parsing
- Adding More Predictors
- dsrs.Refine
- dsrs.BestOfN
- dsrs.Retry
- Retriever Module Support
- Ability to use native provider keys for popular clients
- Example Macros
- Support for data loading from sources
- Batch processing for LM calls
- Batch Input support for Module
- Memory Analysis and Optimization
- Caching Support for Providers
- Performance benchmarking b/w DSPy and DSRs
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
- Inspired by the original DSPy framework
- Built with the amazing Rust ecosystem