adk-memory
Semantic memory and search for Rust Agent Development Kit (ADK-Rust) agents.
Overview
adk-memory provides long-term memory capabilities for the Rust Agent Development Kit (ADK-Rust):
- InMemoryMemoryService - Simple in-memory memory storage
- SqliteMemoryService - SQLite-backed persistence (
sqlite-memoryfeature) - PostgresMemoryService - PostgreSQL + pgvector persistence (
database-memoryfeature) - MongoMemoryService - MongoDB-backed persistence (
mongodb-memoryfeature) - Neo4jMemoryService - Neo4j-backed persistence (
neo4j-memoryfeature) - RedisMemoryService - Redis-backed persistence (
redis-memoryfeature) - MemoryService - Trait for custom storage backends
- Semantic Search - Query memories by content similarity
- Project-Scoped Isolation - Isolate memories by project within a user
- Schema Migrations - Versioned, forward-only migrations for all database backends
Installation
[]
= "0.8.0"
Or use the meta-crate:
[]
= { = "0.8.0", = ["memory"] }
Quick Start
use ;
use Content;
use Utc;
let service = new;
let entries = vec!;
service.add_session.await?;
let response = service.search.await?;
for memory in response.memories
Project-Scoped Memory
Memories can be scoped to a project within a user. The isolation key is (app_name, user_id, project_id?):
- Global entries (
project_id = None): visible in all project contexts and in global-only searches. - Project entries (
project_id = Some(id)): visible only when searching within that specific project. - Project search (
project_id = Some(id)): returns global entries + entries for that project. - Global search (
project_id = None): returns only global entries.
Writing project-scoped entries
use ;
use Content;
use Utc;
let service = new;
// Global entry (no project scope)
service.add_session.await?;
// Project-scoped entry
service.add_session_to_project.await?;
// Single entry to a project
service.add_entry_to_project.await?;
Searching with project scope
use SearchRequest;
// Global-only search — returns only global entries
let global = service.search.await?;
// Project search — returns global + project entries
let project = service.search.await?;
Project-scoped deletion
// Delete entries matching a query within a project only
service.delete_entries_in_project.await?;
// Delete ALL entries for a project
service.delete_project.await?;
// Global delete — only removes global entries
service.delete_entries.await?;
// GDPR delete_user — removes everything (global + all projects)
service.delete_user.await?;
MemoryServiceAdapter with project scope
use ;
use Memory;
use Arc;
let service = new;
// Adapter without project — operates on global entries
let global_adapter = new;
// Adapter with project — all operations scoped to the project
let project_adapter = new
.with_project_id;
// Core Memory trait methods for ad-hoc project access
global_adapter.search_in_project.await?;
global_adapter.add_to_project.await?;
Project ID validation
use validate_project_id;
validate_project_id?; // Ok
validate_project_id?; // Err: must not be empty
validate_project_id?; // Err: exceeds 256 chars
Feature Flags
| Feature | Backend | Description |
|---|---|---|
sqlite-memory |
SQLite | Single-node persistence via sqlx |
database-memory |
PostgreSQL | pgvector-backed semantic search |
redis-memory |
Redis | Low-latency in-memory persistence via fred |
mongodb-memory |
MongoDB | Document-oriented persistence |
neo4j-memory |
Neo4j | Graph database persistence |
# SQLite
= { = "0.8.0", = ["sqlite-memory"] }
# PostgreSQL + pgvector
= { = "0.8.0", = ["database-memory"] }
Schema Migrations
All database backends (SQLite, PostgreSQL, MongoDB, Neo4j) include a versioned migration system. Migrations are forward-only, idempotent, and tracked in a registry table.
| Version | Description |
|---|---|
| v1 | Initial schema (tables, indexes, FTS) |
| v2 | Add project_id column/index for project-scoped memory |
use SqliteMemoryService;
let service = new.await?;
// Run all pending migrations (v1 + v2)
service.migrate.await?;
// Check current schema version
let version = service.schema_version.await?;
println!;
MemoryService Trait
Related Crates
- adk-rust - Meta-crate with all components
- adk-core - Core
Memorytrait - adk-runner - Memory injection during execution
- adk-rag - RAG pipeline with vector stores
License
Apache-2.0
Part of ADK-Rust
This crate is part of the ADK-Rust framework for building AI agents in Rust.