OmniMemory Provider¶
mem0-go includes an OmniMemory provider, enabling vendor-neutral memory operations with automatic fallback support.
Overview¶
OmniMemory is a unified memory abstraction layer for Go that provides:
- Consistent interface across multiple memory backends
- Automatic failover between providers
- Multi-tenancy with tenant/subject isolation
- Semantic search capabilities
Installation¶
import (
"github.com/plexusone/omnimemory/core"
_ "github.com/plexusone/mem0-go/omnimemory" // Register mem0 provider
)
Configuration¶
The mem0 provider is registered automatically when imported. Configure via environment or options:
// Environment variables
// MEM0_API_KEY - API key for mem0.ai
// Or via ProviderConfig
config := core.ProviderConfig{
APIKey: "your-api-key",
Options: map[string]any{
"base_url": "https://api.mem0.ai/v1", // Optional custom URL
},
}
Usage with OmniMemory¶
package main
import (
"context"
"log"
"github.com/plexusone/omnimemory/core"
_ "github.com/plexusone/mem0-go/omnimemory"
)
func main() {
// Create provider from registry
provider, err := core.NewProvider("mem0", core.ProviderConfig{
APIKey: "your-api-key",
}, nil)
if err != nil {
log.Fatal(err)
}
defer provider.Close()
ctx := context.Background()
// Store a memory
memory, err := provider.Store(ctx, core.StoreRequest{
TenantID: "app-123",
SubjectID: "user-456",
Content: "User prefers dark mode",
Type: core.MemoryTypePreference,
Scope: core.ScopeUser,
})
if err != nil {
log.Fatal(err)
}
// Search memories
results, err := provider.Search(ctx, core.SearchRequest{
TenantID: "app-123",
SubjectID: "user-456",
Query: "theme preferences",
Limit: 10,
})
if err != nil {
log.Fatal(err)
}
for _, r := range results {
log.Printf("Memory: %s (score: %.2f)", r.Content, r.Score)
}
}
Tenant/Subject Mapping¶
The mem0 provider maps OmniMemory's multi-tenancy model:
| OmniMemory | mem0 |
|---|---|
| TenantID | app_id |
| SubjectID | user_id |
Memory Type and Scope¶
Memory type and scope are stored in mem0 metadata with prefixed keys:
omnimemory_type- Memory type (fact, preference, observation, etc.)omnimemory_scope- Memory scope (user, agent, tenant)
Provider Priority¶
The mem0 provider is registered with PriorityThick priority, indicating it uses an external service (as opposed to in-process providers).