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-rsHere'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- Implement core DSPy abstractions
-
Signaturetrait and basic implementations (file created:src/premitives/signature.rs) -
Moduletrait system (file created:src/premitives/module.rs) -
Exampletype (implemented insrc/data/example.rs) -
Predictiontype withLmUsagetracking (implemented insrc/data/prediction.rs) - Field types and validation (file created:
src/premitives/field.rs) - Serialization support (serde integration)
-
- Implement language model abstractions
- LM trait (file created:
src/premitives/lm.rs)
- LM trait (file created:
- Implement basic modules (files created but empty)
-
Predictmodule (src/programs/predict.rs) -
ChainOfThoughtmodule (src/programs/cot.rs)
-
- Litellm-like client[Going with open router]
- Basic data structures (
Example,Prediction) - Dataset loading and management
- Implement zero-copy parsing where possible[optim clean up]
- Rayon dependency added for parallel execution
- Batch processing for LM calls
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
