cel-memory-duckdb 0.1.0

DuckDB embedded memory backend for AI agents, implementing cel-memory.
Documentation

cel-memory-duckdb

crates.io docs.rs CI

DuckDB embedded memory backend for AI agents. Implements cel-memory's MemoryProvider trait with hybrid vector + lexical retrieval in a single analytics-friendly file.

Status: v0.1.0 starter — Phase 0–1: open/migrate, write/get, hybrid retrieve (array_cosine_distance + ILIKE), sessions, stats. Summarization, aging, export, and bulk mutations return NotImplemented until later phases.

Purpose

Use cel-memory-duckdb when you want local, embeddable memory with DuckDB's columnar engine — analytics-heavy agents, notebooks, or workloads that already use DuckDB/Parquet nearby. Swap it in wherever code holds Arc<dyn MemoryProvider>.

Requirements

  • Embedding width 384 (matches MockEmbedder / bge-small)
  • DuckDB bundled via the duckdb crate (no separate install)

Example

use std::sync::Arc;
use cel_memory_duckdb::{DuckdbMemoryProvider, MockEmbedder};

let provider = DuckdbMemoryProvider::open(
    "memory.duckdb",
    Arc::new(MockEmbedder::new()),
).await?;
// Use as cel_memory::MemoryProvider — same trait as BasicMemoryProvider.

Run the complete example:

cargo run --example basic

What's included (Phase 0–1)

  • DuckdbMemoryProvider::open / open_in_memory — embedded migrations
  • write / get / write_batch
  • Hybrid retrieve — cosine distance on FLOAT[384] + ILIKE keyword match, fused with RRF
  • Session lifecycle — open_session, close_session, rename_session, get_session, list_sessions
  • stats

Roadmap

Phase Methods
2 pin, delete, purge_all, run_aging_sweep, export, …
3 summarize_session, rollup_day, rollup_rule_week
4 re_embed_all, DuckDB VSS HNSW indexes, richer FTS

License

Apache-2.0