omnimemory

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 28, 2026 License: MIT Imports: 1 Imported by: 0

README

OmniMemory

Go CI Go Lint Go SAST Go Report Card Docs Docs Visualization License

Vendor-neutral memory abstraction layer for Go. Store and retrieve semantic memories across multiple backends with a unified API.

Features

  • 🔌 Multi-Provider Support: PostgreSQL+pgvector, In-memory, KVS, Twilio Memory API
  • 🎯 Unified API: Same interface across all providers
  • 🔍 Semantic Search: Vector similarity search with configurable embeddings
  • 🏢 Multi-Tenancy: Built-in tenant and subject isolation
  • 📍 Memory Scopes: User, agent, tenant, team, session, domain
  • 🏷️ Memory Types: Observation, fact, preference, summary, trait, relationship
  • 🔄 Fallback Support: Automatic failover to backup providers
  • Conformance Tests: Validate provider implementations

Installation

go get github.com/plexusone/omnimemory

Quick Start

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/plexusone/omnimemory"
    "github.com/plexusone/omnimemory/core"
    _ "github.com/plexusone/omnimemory/provider/memory" // Register provider
)

func main() {
    client, err := omnimemory.NewClient(core.ClientConfig{
        Providers: []core.ProviderConfig{
            {Name: core.ProviderNameMemory},
        },
    })
    if err != nil {
        log.Fatal(err)
    }
    defer client.Close()

    ctx := context.Background()

    // Add a memory
    memory, err := client.Add(ctx, &core.AddRequest{
        Context: core.Context{
            TenantID:  "tenant-123",
            SubjectID: "user-456",
        },
        Type:    core.MemoryTypeObservation,
        Content: "User prefers dark mode interfaces",
    })
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("Added memory: %s\n", memory.ID)

    // Recall memories
    recalled, err := client.Recall(ctx, &core.RecallRequest{
        Context: core.Context{
            TenantID:  "tenant-123",
            SubjectID: "user-456",
        },
        Query: "user interface preferences",
    })
    if err != nil {
        log.Fatal(err)
    }

    for _, mem := range recalled.Memories {
        fmt.Printf("- %s\n", mem.Content)
    }
}

Providers

Provider Package Use Case
In-Memory provider/memory Testing, development
KVS + SQLite provider/kvs Local persistence, no server
KVS + Redis provider/kvs Distributed, shared state
PostgreSQL provider/postgres Production with pgvector
AWS DynamoDB omni-aws Serverless, auto-scaling
mem0 mem0-go mem0 hosted API
Twilio omni-twilio Twilio Memory API
SQLite (Local Persistence)

Single-file database, no server required. Recommended for local development with persistence.

import (
    "github.com/plexusone/omnimemory"
    "github.com/plexusone/omnimemory/core"
    _ "github.com/plexusone/omnimemory/provider/kvs"
    "github.com/plexusone/omnistorage-core/kvs/backend/sqlite"
)

store, _ := sqlite.New(sqlite.Config{Path: "memories.db"})

client, _ := omnimemory.NewClient(core.ClientConfig{
    Providers: []core.ProviderConfig{
        {Name: core.ProviderNameKVS, Options: map[string]any{
            "store": store,
        }},
    },
})
Redis (Distributed)

Shared state across multiple instances. Good for horizontally scaled applications.

import (
    "github.com/plexusone/omnimemory"
    "github.com/plexusone/omnimemory/core"
    _ "github.com/plexusone/omnimemory/provider/kvs"
    "github.com/plexusone/omnistorage-core/kvs/backend/redis"
)

store, _ := redis.New(redis.Config{Addr: "localhost:6379"})

client, _ := omnimemory.NewClient(core.ClientConfig{
    Providers: []core.ProviderConfig{
        {Name: core.ProviderNameKVS, Options: map[string]any{
            "store": store,
        }},
    },
})
PostgreSQL + pgvector (Production)

Full vector similarity search with HNSW indexing. Recommended for production.

import _ "github.com/plexusone/omnimemory/provider/postgres"

client, _ := omnimemory.NewClient(core.ClientConfig{
    Providers: []core.ProviderConfig{
        {Name: core.ProviderNamePostgres, Options: map[string]any{
            "connection_string": os.Getenv("DATABASE_URL"),
        }},
    },
})
AWS DynamoDB (Serverless)

Fully managed, serverless with automatic scaling and TTL support.

import _ "github.com/plexusone/omni-aws/omnimemory/dynamodb"

client, _ := omnimemory.NewClient(core.ClientConfig{
    Providers: []core.ProviderConfig{
        {Name: core.ProviderNameAWSDynamoDB, Options: map[string]any{
            "table_name":   "omnimemory",
            "region":       "us-east-1",
            "create_table": true, // Auto-create for development
        }},
    },
})
mem0 (Hosted API)

Managed memory service with automatic fact extraction.

import _ "github.com/plexusone/mem0-go/omnimemory"

client, _ := omnimemory.NewClient(core.ClientConfig{
    Providers: []core.ProviderConfig{
        {Name: core.ProviderNameMem0, APIKey: os.Getenv("MEM0_API_KEY")},
    },
})
Multi-Provider with Fallback
client, _ := omnimemory.NewClient(core.ClientConfig{
    Providers: []core.ProviderConfig{
        // Primary: PostgreSQL
        {Name: core.ProviderNamePostgres, Options: map[string]any{
            "connection_string": os.Getenv("DATABASE_URL"),
        }},
        // Fallback: SQLite
        {Name: core.ProviderNameKVS, Options: map[string]any{
            "store": sqliteStore,
        }},
    },
})

Memory Types

Type Description
observation Observed behaviors or interactions
fact Verified pieces of information
preference User preferences
summary Summarized information
trait Personality traits
relationship Relationships between entities

Memory Scopes

Scope Description
user Personal to one user
agent What an agent has learned
tenant Organization-wide shared
team Project/group level
session Single conversation
domain Domain-specific (support, sales)

Documentation

License

MIT License - see LICENSE for details.

Documentation

Overview

Package omnimemory provides a vendor-neutral memory abstraction layer for multiple memory backends (PostgreSQL+pgvector, Mem0, Graphiti, Twilio Memory).

Overview

OmniMemory provides a stable API for storing and retrieving memories with semantic search capabilities. It supports multiple backends through a provider interface, allowing you to switch between implementations without changing application code.

Quick Start

import (
    "github.com/plexusone/omnimemory"
    "github.com/plexusone/omnimemory/core"
    _ "github.com/plexusone/omnimemory/provider/memory"   // Register in-memory provider
    _ "github.com/plexusone/omnimemory/provider/postgres" // Register PostgreSQL provider
)

func main() {
    // Create a client with in-memory provider (for testing)
    client, err := omnimemory.NewClient(core.ClientConfig{
        Providers: []core.ProviderConfig{
            {Name: core.ProviderNameMemory},
        },
    })
    if err != nil {
        log.Fatal(err)
    }
    defer client.Close()

    // Add a memory
    memory, err := client.Add(ctx, &core.AddRequest{
        Context: core.Context{
            TenantID:  "tenant-1",
            SubjectID: "user-123",
        },
        Type:    core.MemoryTypeFact,
        Content: "User prefers dark mode",
    })

    // Search memories
    results, err := client.Search(ctx, &core.SearchRequest{
        Context: core.Context{
            TenantID:  "tenant-1",
            SubjectID: "user-123",
        },
        Query: "user interface preferences",
        Limit: 10,
    })
}

Memory Types

OmniMemory supports different types of memories:

  • Observation: Observed behavior or interaction
  • Fact: Verified piece of information
  • Preference: User preference
  • Summary: Summarized conversation or topic
  • Trait: Personality trait or characteristic
  • Relationship: Relationship between entities

Memory Scopes

Memories can be scoped at different levels:

  • User: Personal to one user
  • Agent: What an agent has learned
  • Tenant: Org-level shared memories
  • Team: Group/project level memories
  • Session: Short-lived conversation memories
  • Domain: Domain-specific memories (support, sales, etc.)

Providers

Available providers:

  • memory: In-memory provider for testing
  • postgres: PostgreSQL+pgvector for production
  • mem0: Mem0 adapter (future)
  • graphiti: Graphiti temporal knowledge graph (future)
  • twilio: Twilio Memory API (future)

Index

Constants

View Source
const (
	MemoryTypeObservation  = core.MemoryTypeObservation
	MemoryTypeFact         = core.MemoryTypeFact
	MemoryTypePreference   = core.MemoryTypePreference
	MemoryTypeSummary      = core.MemoryTypeSummary
	MemoryTypeTrait        = core.MemoryTypeTrait
	MemoryTypeRelationship = core.MemoryTypeRelationship
)

Re-export memory types.

View Source
const (
	ScopeUser    = core.ScopeUser
	ScopeAgent   = core.ScopeAgent
	ScopeTenant  = core.ScopeTenant
	ScopeTeam    = core.ScopeTeam
	ScopeSession = core.ScopeSession
	ScopeDomain  = core.ScopeDomain
)

Re-export scopes.

View Source
const (
	ProviderNameMemory   = core.ProviderNameMemory
	ProviderNamePostgres = core.ProviderNamePostgres
	ProviderNameMem0     = core.ProviderNameMem0
	ProviderNameGraphiti = core.ProviderNameGraphiti
	ProviderNameTwilio   = core.ProviderNameTwilio
)

Re-export provider names.

View Source
const (
	PriorityThin  = core.PriorityThin
	PriorityThick = core.PriorityThick
)

Re-export priority constants.

Variables

View Source
var (
	ErrNotFound         = core.ErrNotFound
	ErrInvalidInput     = core.ErrInvalidInput
	ErrProviderNotFound = core.ErrProviderNotFound
	ErrNoProviders      = core.ErrNoProviders
	ErrEmbeddingFailed  = core.ErrEmbeddingFailed
	ErrTenantRequired   = core.ErrTenantRequired
	ErrSubjectRequired  = core.ErrSubjectRequired
	ErrContentRequired  = core.ErrContentRequired
)

Re-export errors.

Functions

func CosineSimilarity

func CosineSimilarity(a, b []float64) float64

CosineSimilarity computes the cosine similarity between two vectors.

func EuclideanDistance

func EuclideanDistance(a, b []float64) float64

EuclideanDistance computes the Euclidean distance between two vectors.

func RegisterProvider

func RegisterProvider(name ProviderName, factory core.ProviderFactory, priority int)

RegisterProvider registers a provider factory with the global registry.

Types

type AddRequest

type AddRequest = core.AddRequest

AddRequest is the request for adding a new memory.

type Client

type Client = core.Client

Client is a multi-provider memory client with fallback support.

func NewClient

func NewClient(config ClientConfig) (*Client, error)

NewClient creates a new multi-provider memory client.

type ClientConfig

type ClientConfig = core.ClientConfig

ClientConfig is the configuration for creating a Client.

type Context

type Context = core.Context

Context provides multi-tenancy context for all operations.

type DeleteRequest

type DeleteRequest = core.DeleteRequest

DeleteRequest is the request for deleting a memory.

type Embedder

type Embedder = core.Embedder

Embedder generates embeddings for text.

type Fact

type Fact = core.Fact

Fact represents a verified piece of information.

type GetRequest

type GetRequest = core.GetRequest

GetRequest is the request for getting a memory by ID.

type ListRequest

type ListRequest = core.ListRequest

ListRequest is the request for listing memories.

type ListResponse

type ListResponse = core.ListResponse

ListResponse is the response for listing memories.

type Memory

type Memory = core.Memory

Memory is the primary storage unit.

type MemoryType

type MemoryType = core.MemoryType

MemoryType defines the category of memory content.

type Observation

type Observation = core.Observation

Observation represents an observed behavior or interaction.

type Provider

type Provider = core.Provider

Provider is the interface that all memory providers must implement.

func GetProvider

func GetProvider(name ProviderName, config ProviderConfig, embedder Embedder) (Provider, error)

GetProvider creates a provider instance from the global registry.

type ProviderConfig

type ProviderConfig = core.ProviderConfig

ProviderConfig is the configuration for initializing a provider.

type ProviderName

type ProviderName = core.ProviderName

ProviderName identifies a provider type.

func ListProviders

func ListProviders() []ProviderName

ListProviders returns all registered provider names.

type RecallRequest

type RecallRequest = core.RecallRequest

RecallRequest is the request for recalling relevant memories.

type RecallResponse

type RecallResponse = core.RecallResponse

RecallResponse is the response for recalling memories.

type Scope

type Scope = core.Scope

Scope defines the visibility and ownership level of a memory.

type SearchRequest

type SearchRequest = core.SearchRequest

SearchRequest is the request for semantic search.

type SearchResponse

type SearchResponse = core.SearchResponse

SearchResponse is the response for semantic search.

type SearchResult

type SearchResult = core.SearchResult

SearchResult is a single search result with similarity score.

type UpdateRequest

type UpdateRequest = core.UpdateRequest

UpdateRequest is the request for updating a memory.

Directories

Path Synopsis
Package core provides the core types and interfaces for omnimemory.
Package core provides the core types and interfaces for omnimemory.
providertest
Package providertest provides conformance tests for memory provider implementations.
Package providertest provides conformance tests for memory provider implementations.
ent
Package ent provides the generated Ent ORM code.
Package ent provides the generated Ent ORM code.
provider
graphiti
Package graphiti provides a Graphiti Provider implementation (future).
Package graphiti provides a Graphiti Provider implementation (future).
kvs
Package kvs provides a KVS-backed Provider implementation using omnistorage-core.
Package kvs provides a KVS-backed Provider implementation using omnistorage-core.
mem0
Package mem0 is a placeholder for the mem0 provider.
Package mem0 is a placeholder for the mem0 provider.
memory
Package memory provides an in-memory Provider implementation for testing.
Package memory provides an in-memory Provider implementation for testing.
postgres
Package postgres provides a PostgreSQL+pgvector Provider implementation via Ent.
Package postgres provides a PostgreSQL+pgvector Provider implementation via Ent.
twilio
Package twilio is a placeholder for the Twilio Memory provider.
Package twilio is a placeholder for the Twilio Memory provider.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL