| Crates.io | praxis-persist |
| lib.rs | praxis-persist |
| version | 0.2.0 |
| created_at | 2025-11-09 00:21:25.681902+00 |
| updated_at | 2025-11-11 00:40:58.996547+00 |
| description | MongoDB persistence layer for AI agent conversations with context management |
| homepage | https://github.com/matheussilva/praxis |
| repository | https://github.com/matheussilva/praxis |
| max_upload_size | |
| id | 1923427 |
| size | 120,504 |
MongoDB persistence layer for AI agent conversations with intelligent context management.
This crate provides a complete persistence solution for AI agent conversations:
[dependencies]
praxis-persist = "0.1"
use praxis_persist::PersistClient;
// Connect to MongoDB
let client = PersistClient::connect("mongodb://localhost:27017")
.await?;
// Create new thread
let thread = client.create_thread(
"user123",
Some("Weather Discussion")
).await?;
println!("Thread ID: {}", thread.thread_id);
// List user's threads
let threads = client.list_threads("user123", None, None).await?;
// Delete thread
client.delete_thread(&thread.thread_id, "user123").await?;
use praxis_persist::Message;
// Store user message
let message = client.store_message(
&thread_id,
"user123",
"user",
"What's the weather in SF?"
).await?;
// Store assistant message
let response = client.store_message(
&thread_id,
"user123",
"assistant",
"The weather in San Francisco is sunny, 72°F."
).await?;
// List thread messages
let messages = client.list_messages(&thread_id, "user123").await?;
for msg in messages {
println!("{}: {}", msg.role, msg.content);
}
use praxis_persist::ContextManager;
// Get context-aware message history
let context = client.get_context(
&thread_id,
"user123",
4000 // max tokens
).await?;
// Returns messages that fit within token limit
// Automatically summarizes old messages if needed
Convert streaming events into persisted messages:
use praxis_persist::MessageAccumulator;
use praxis_graph::StreamEvent;
let mut accumulator = MessageAccumulator::new();
// Process streaming events
while let Some(event) = stream.next().await {
if let Some(message) = accumulator.process(event?) {
// Complete message ready to persist
client.store_message(
&thread_id,
&user_id,
&message.role,
&message.content
).await?;
}
}
The context manager uses a token-aware approach:
This ensures:
This crate is part of the Praxis AI Agent Framework:
MIT