| Crates.io | mantr-sdk |
| lib.rs | mantr-sdk |
| version | 1.0.0 |
| created_at | 2026-01-13 23:31:27.853513+00 |
| updated_at | 2026-01-13 23:31:27.853513+00 |
| description | Official Rust SDK for Mantr - Deterministic Semantic Memory |
| homepage | |
| repository | https://github.com/Mantrnet/rust-sdk |
| max_upload_size | |
| id | 2041727 |
| size | 50,679 |
High-Performance Deterministic Memory for Rust
[dependencies]
mantr-sdk = "1.0"
tokio = { version = "1", features = ["full"] }
use mantr_sdk::{MantrClient, WalkRequest};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = MantrClient::new("vak_live_...")?;
let result = client.walk(WalkRequest {
phonemes: vec!["dharma".into(), "karma".into()],
pod: None,
depth: Some(3),
limit: Some(100),
}).await?;
println!("Found {} paths", result.paths.len());
Ok(())
}
use axum::{Router, extract::State, Json};
use mantr_sdk::MantrClient;
use serde::{Deserialize, Serialize};
use std::sync::Arc;
#[derive(Clone)]
struct AppState {
mantr: Arc<MantrClient>,
}
#[derive(Deserialize)]
struct QueryRequest {
question: String,
}
#[derive(Serialize)]
struct QueryResponse {
answer: String,
context: Vec<String>,
}
async fn rag_handler(
State(state): State<AppState>,
Json(req): Json<QueryRequest>,
) -> Json<QueryResponse> {
// Get context from Mantr
let context = state.mantr.walk(WalkRequest {
phonemes: extract_concepts(&req.question),
depth: Some(4),
limit: Some(20),
..Default::default()
}).await.unwrap();
// Format paths
let paths: Vec<String> = context.paths
.iter()
.map(|p| p.nodes.join(" → "))
.collect();
// Generate answer with LLM (using context)
let answer = generate_with_llm(&req.question, &paths).await;
Json(QueryResponse { answer, context: paths })
}
#[tokio::main]
async fn main() {
let state = AppState {
mantr: Arc::new(MantrClient::new("vak_live_...").unwrap()),
};
let app = Router::new()
.route("/query", post(rag_handler))
.with_state(state);
axum::Server::bind(&"0.0.0.0:3000".parse().unwrap())
.serve(app.into_make_service())
.await
.unwrap();
}
use mantr_sdk::MantrClient;
use rayon::prelude::*;
async fn batch_walk(concepts: Vec<Vec<String>>) -> Vec<WalkResponse> {
let client = Arc::new(MantrClient::new("vak_live_...").unwrap());
let handles: Vec<_> = concepts
.into_par_iter()
.map(|phonemes| {
let client = client.clone();
tokio::spawn(async move {
client.walk(WalkRequest {
phonemes,
..Default::default()
}).await
})
})
.collect();
// Wait for all
let mut results = vec![];
for handle in handles {
if let Ok(Ok(result)) = handle.await {
results.push(result);
}
}
results
}
use actix::prelude::*;
use mantr_sdk::{MantrClient, WalkRequest};
struct MantrActor {
client: MantrClient,
}
impl Actor for MantrActor {
type Context = Context<Self>;
}
#[derive(Message)]
#[rtype(result = "Result<WalkResponse, MantrError>")]
struct WalkMessage {
phonemes: Vec<String>,
}
impl Handler<WalkMessage> for MantrActor {
type Result = ResponseFuture<Result<WalkResponse, MantrError>>;
fn handle(&mut self, msg: WalkMessage, _: &mut Self::Context) -> Self::Result {
let client = self.client.clone();
Box::pin(async move {
client.walk(WalkRequest {
phonemes: msg.phonemes,
..Default::default()
}).await
})
}
}
// Usage
let actor = MantrActor {
client: MantrClient::new("vak_live_...").unwrap()
}.start();
let result = actor.send(WalkMessage {
phonemes: vec!["test".into()]
}).await;
use tower::{Service, ServiceBuilder};
use futures::stream::{Stream, StreamExt};
struct MantrService {
client: MantrClient,
}
impl Service<Vec<String>> for MantrService {
type Response = WalkResponse;
type Error = MantrError;
type Future = Pin<Box<dyn Future<Output = Result<Self::Response, Self::Error>>>>;
fn call(&mut self, phonemes: Vec<String>) -> Self::Future {
let client = self.client.clone();
Box::pin(async move {
client.walk(WalkRequest {
phonemes,
..Default::default()
}).await
})
}
}
use mantr_sdk::{MantrClient, WalkRequest, WalkResponse};
// Initialize
let client = MantrClient::new("vak_live_...")?;
// Walk
let result = client.walk(WalkRequest {
phonemes: vec!["concept".into()],
pod: None,
depth: Some(3),
limit: Some(100),
}).await?;
// Response
pub struct WalkResponse {
pub paths: Vec<PathResult>,
pub latency_us: u64,
pub credits_used: u32,
}
pub struct PathResult {
pub nodes: Vec<String>,
pub score: f64,
pub depth: u32,
}
MIT