Sector F Logo

Sector F Labs

Reservoir

Abstract

Reservoir is a CLI-first memory store for conversational messages. It stores messages in a Neo4j graph database, computes embeddings, and links semantically related messages (synapses) to enable search and thread context.

Reservoir

Problem Statement

Most chat systems are stateless. Each request must include complete conversation history to maintain context, which leads to problems like:

  1. Manual conversation state management
  2. Token limit constraints as conversations grow
  3. Inability to reference semantically related conversations
  4. No persistent storage of conversation data

Solution

Reservoir provides a CLI workflow that:

Architecture

sequenceDiagram
    participant Producer
    participant Reservoir CLI
    participant Neo4j

    Producer->>Reservoir CLI: Ingest message (stdin/CLI)
    Reservoir CLI->>Reservoir CLI: Compute embedding + synapse
    Reservoir CLI->>Neo4j: Store message + embedding
    Producer->>Reservoir CLI: Search / Thread query
    Reservoir CLI->>Neo4j: Query messages + synapses
    Reservoir CLI-->>Producer: Results

Data Model

Conversations are stored as a graph structure:

Semantic Relationships

Reservoir creates synapses between messages when cosine similarity exceeds 0.85. This enables:

Conversation Graph View

Usage

Ingest a message from stdin:

echo "Hello world" | cargo run -- ingest --partition myapp --instance chat1 --role user --trace-id trace-123

Search by keyword:

cargo run -- search "neo4j" --partition myapp --instance chat1

Semantic search:

cargo run -- search "neo4j configuration" --semantic --partition myapp --instance chat1

Thread context (synapse-connected + recent):

cargo run -- thread --partition myapp --instance chat1 --count 20

Export/Import:

cargo run -- export > messages.json
cargo run -- import messages.json

The system organizes conversations using a partition/instance hierarchy for multi-tenant isolation.

Implementation

Run the CLI:

cargo run -- --help

Reservoir reads Neo4j connection settings from reservoir.toml (under your config directory) or environment variables (NEO4J_URI, NEO4J_USER, NEO4J_PASSWORD).

Documentation

Technical documentation is available at sectorflabs.com/reservoir.

Local documentation can be built with:

make book

Reference Implementation

A reference talk demonstrating the system architecture: Rust Relationships and Reservoir

License

BSD 3-Clause License

Source

https://github.com/divanvisagie/reservoir