Documentation
ΒΆ
Overview ΒΆ
Package memory provides a modular conversation memory system for AI agents. It supports both short-term session memory (via Redis) and long-term semantic memory (via Supabase pgvector).
Index ΒΆ
- type CacheStats
- type Config
- type HybridMemory
- func (hm *HybridMemory) AddMessage(ctx context.Context, msg Message) error
- func (hm *HybridMemory) ClearCache(ctx context.Context, sessionID string) error
- func (hm *HybridMemory) ClearSession(ctx context.Context, sessionID string) error
- func (hm *HybridMemory) Close() error
- func (hm *HybridMemory) GetCacheStats(ctx context.Context) (*CacheStats, error)
- func (hm *HybridMemory) GetRecentMessages(ctx context.Context, sessionID string, limit int) ([]Message, error)
- func (hm *HybridMemory) GetStats(ctx context.Context, sessionID string) (*Stats, error)
- func (hm *HybridMemory) GetSummary(ctx context.Context, sessionID string) (*Summary, error)
- func (hm *HybridMemory) Search(ctx context.Context, query string, limit int, threshold float32) ([]SearchResult, error)
- func (hm *HybridMemory) SearchWithEmbedding(ctx context.Context, embedding []float32, limit int, threshold float32) ([]SearchResult, error)
- func (hm *HybridMemory) Store(ctx context.Context, msg Message) error
- func (hm *HybridMemory) Summarize(ctx context.Context, sessionID string, maxTokens int) (string, error)
- type Memory
- type MemoryMode
- type Message
- type Metadata
- type SearchResult
- type SessionOnlyMemory
- func (sm *SessionOnlyMemory) AddMessage(ctx context.Context, msg Message) error
- func (sm *SessionOnlyMemory) ClearSession(ctx context.Context, sessionID string) error
- func (sm *SessionOnlyMemory) Close() error
- func (sm *SessionOnlyMemory) GetRecentMessages(ctx context.Context, sessionID string, limit int) ([]Message, error)
- func (sm *SessionOnlyMemory) GetStats(ctx context.Context, sessionID string) (*Stats, error)
- func (sm *SessionOnlyMemory) GetSummary(ctx context.Context, sessionID string) (*Summary, error)
- func (sm *SessionOnlyMemory) Search(ctx context.Context, query string, limit int, threshold float32) ([]SearchResult, error)
- func (sm *SessionOnlyMemory) SearchWithEmbedding(ctx context.Context, embedding []float32, limit int, threshold float32) ([]SearchResult, error)
- func (sm *SessionOnlyMemory) Store(ctx context.Context, msg Message) error
- func (sm *SessionOnlyMemory) Summarize(ctx context.Context, sessionID string, maxTokens int) (string, error)
- type Stats
- type Summary
- type SupabaseMemory
- func (sm *SupabaseMemory) AddMessage(ctx context.Context, msg Message) error
- func (sm *SupabaseMemory) ClearSession(ctx context.Context, sessionID string) error
- func (sm *SupabaseMemory) Close() error
- func (sm *SupabaseMemory) GetRecentMessages(ctx context.Context, sessionID string, limit int) ([]Message, error)
- func (sm *SupabaseMemory) GetStats(ctx context.Context, sessionID string) (*Stats, error)
- func (sm *SupabaseMemory) GetSummary(ctx context.Context, sessionID string) (*Summary, error)
- func (sm *SupabaseMemory) Search(ctx context.Context, query string, limit int, threshold float32) ([]SearchResult, error)
- func (sm *SupabaseMemory) SearchWithEmbedding(ctx context.Context, embedding []float32, limit int, threshold float32) ([]SearchResult, error)
- func (sm *SupabaseMemory) Store(ctx context.Context, msg Message) error
- func (sm *SupabaseMemory) Summarize(ctx context.Context, sessionID string, maxTokens int) (string, error)
Constants ΒΆ
This section is empty.
Variables ΒΆ
This section is empty.
Functions ΒΆ
This section is empty.
Types ΒΆ
type CacheStats ΒΆ
CacheStats represents cache statistics
type Config ΒΆ
type Config struct { // Mode Selection Mode MemoryMode `json:"mode,omitempty"` // SESSION_ONLY, PERSISTENT, HYBRID // Feature Flags EnablePersistence bool `json:"enable_persistence,omitempty"` EnableSemanticSearch bool `json:"enable_semantic_search,omitempty"` EnableAutoSummarize bool `json:"enable_auto_summarize,omitempty"` // Database Configuration SupabaseURL string `json:"supabase_url,omitempty"` SupabaseKey string `json:"supabase_key,omitempty"` DatabaseURL string `json:"database_url,omitempty"` // Direct PostgreSQL connection // Redis Configuration (optional for fast session cache) RedisAddr string `json:"redis_addr,omitempty"` // e.g., "localhost:6379" RedisPassword string `json:"redis_password,omitempty"` RedisDB int `json:"redis_db,omitempty"` // OpenAI Configuration (for embeddings) OpenAIKey string `json:"openai_key,omitempty"` EmbeddingModel string `json:"embedding_model,omitempty"` // default: "text-embedding-3-small" // Memory Settings MaxSessionMessages int `json:"max_session_messages,omitempty"` // default: 50 SessionTTL time.Duration `json:"session_ttl,omitempty"` // default: 24h AutoSummarize bool `json:"auto_summarize,omitempty"` // auto-summarize old messages VectorDimension int `json:"vector_dimension,omitempty"` // default: 1536 // Summarization Settings SummarizeThreshold int `json:"summarize_threshold,omitempty"` // Messages before summarization SummarizeMaxTokens int `json:"summarize_max_tokens,omitempty"` // Target summary length SummarizeModel string `json:"summarize_model,omitempty"` // Model for summarization ArchiveOldMessages bool `json:"archive_old_messages,omitempty"` // Keep originals // Search Settings DefaultSearchLimit int `json:"default_search_limit,omitempty"` DefaultSearchThreshold float32 `json:"default_search_threshold,omitempty"` }
Config holds configuration for memory initialization
type HybridMemory ΒΆ
type HybridMemory struct {
// contains filtered or unexported fields
}
HybridMemory combines Redis for fast session memory and Supabase for semantic search
func (*HybridMemory) AddMessage ΒΆ
func (hm *HybridMemory) AddMessage(ctx context.Context, msg Message) error
AddMessage adds a message to both Redis (for fast access) and Supabase (for persistence)
func (*HybridMemory) ClearCache ΒΆ
func (hm *HybridMemory) ClearCache(ctx context.Context, sessionID string) error
ClearCache clears Redis cache for a specific session
func (*HybridMemory) ClearSession ΒΆ
func (hm *HybridMemory) ClearSession(ctx context.Context, sessionID string) error
ClearSession clears messages from both Redis and Supabase
func (*HybridMemory) GetCacheStats ΒΆ
func (hm *HybridMemory) GetCacheStats(ctx context.Context) (*CacheStats, error)
GetCacheStats returns Redis cache statistics
func (*HybridMemory) GetRecentMessages ΒΆ
func (hm *HybridMemory) GetRecentMessages(ctx context.Context, sessionID string, limit int) ([]Message, error)
GetRecentMessages retrieves recent messages from Redis first, falls back to Supabase
func (*HybridMemory) GetSummary ΒΆ
GetSummary retrieves a summary for the session (delegates to Supabase)
func (*HybridMemory) Search ΒΆ
func (hm *HybridMemory) Search(ctx context.Context, query string, limit int, threshold float32) ([]SearchResult, error)
Search performs semantic search (delegates to Supabase)
func (*HybridMemory) SearchWithEmbedding ΒΆ
func (hm *HybridMemory) SearchWithEmbedding(ctx context.Context, embedding []float32, limit int, threshold float32) ([]SearchResult, error)
SearchWithEmbedding searches using a pre-computed embedding (delegates to Supabase)
type Memory ΒΆ
type Memory interface { // Session Memory (fast, recent messages) AddMessage(ctx context.Context, msg Message) error GetRecentMessages(ctx context.Context, sessionID string, limit int) ([]Message, error) ClearSession(ctx context.Context, sessionID string) error // Semantic Memory (long-term, searchable) Store(ctx context.Context, msg Message) error Search(ctx context.Context, query string, limit int, threshold float32) ([]SearchResult, error) SearchWithEmbedding(ctx context.Context, embedding []float32, limit int, threshold float32) ([]SearchResult, error) // Management Summarize(ctx context.Context, sessionID string, maxTokens int) (string, error) GetSummary(ctx context.Context, sessionID string) (*Summary, error) GetStats(ctx context.Context, sessionID string) (*Stats, error) Close() error }
Memory interface defines the contract for memory implementations
func NewHybridMemory ΒΆ
NewHybridMemory creates a memory system with both Redis and Supabase
func NewSessionOnlyMemory ΒΆ
NewSessionOnlyMemory creates a new session-only memory instance
func NewSupabaseMemory ΒΆ
NewSupabaseMemory creates a new Supabase-based memory instance
func NewWithConfig ΒΆ
NewWithConfig creates a new memory instance with explicit configuration
type MemoryMode ΒΆ
type MemoryMode string
MemoryMode represents the type of memory implementation
const ( SESSION_ONLY MemoryMode = "session_only" // In-memory only, no persistence PERSISTENT MemoryMode = "persistent" // PostgreSQL only HYBRID MemoryMode = "hybrid" // Redis + PostgreSQL )
Memory mode constants
type Message ΒΆ
type Message struct { ID string `json:"id"` Role string `json:"role"` // "user", "assistant", "system" Content string `json:"content"` Metadata Metadata `json:"metadata"` Timestamp time.Time `json:"timestamp"` Embedding []float32 `json:"embedding,omitempty"` }
Message represents a single conversation message
type Metadata ΒΆ
type Metadata struct { SessionID string `json:"session_id"` UserID string `json:"user_id,omitempty"` TokenCount int `json:"token_count,omitempty"` Model string `json:"model,omitempty"` Temperature float64 `json:"temperature,omitempty"` Extra map[string]interface{} `json:"extra,omitempty"` }
Metadata contains additional message information
type SearchResult ΒΆ
type SearchResult struct { Message Message `json:"message"` Score float32 `json:"score"` Distance float32 `json:"distance"` }
SearchResult represents a semantic search result
type SessionOnlyMemory ΒΆ
type SessionOnlyMemory struct {
// contains filtered or unexported fields
}
SessionOnlyMemory implements in-memory session storage with no persistence
func (*SessionOnlyMemory) AddMessage ΒΆ
func (sm *SessionOnlyMemory) AddMessage(ctx context.Context, msg Message) error
AddMessage adds a message to the session
func (*SessionOnlyMemory) ClearSession ΒΆ
func (sm *SessionOnlyMemory) ClearSession(ctx context.Context, sessionID string) error
ClearSession removes all messages from a session
func (*SessionOnlyMemory) Close ΒΆ
func (sm *SessionOnlyMemory) Close() error
Close cleans up resources (no-op for session-only)
func (*SessionOnlyMemory) GetRecentMessages ΒΆ
func (sm *SessionOnlyMemory) GetRecentMessages(ctx context.Context, sessionID string, limit int) ([]Message, error)
GetRecentMessages retrieves recent messages from the session
func (*SessionOnlyMemory) GetSummary ΒΆ
GetSummary returns a basic summary structure
func (*SessionOnlyMemory) Search ΒΆ
func (sm *SessionOnlyMemory) Search(ctx context.Context, query string, limit int, threshold float32) ([]SearchResult, error)
Search performs basic text search (no semantic search in session-only mode)
func (*SessionOnlyMemory) SearchWithEmbedding ΒΆ
func (sm *SessionOnlyMemory) SearchWithEmbedding(ctx context.Context, embedding []float32, limit int, threshold float32) ([]SearchResult, error)
SearchWithEmbedding is not supported in session-only mode
type Stats ΒΆ
type Stats struct { SessionID string `json:"session_id"` TotalMessages int `json:"total_messages"` SessionMessages int `json:"session_messages"` TotalTokens int `json:"total_tokens"` ActiveTokens int `json:"active_tokens,omitempty"` // Tokens after summarization OldestMessage *time.Time `json:"oldest_message,omitempty"` LatestMessage *time.Time `json:"latest_message,omitempty"` UniqueUsers int `json:"unique_users,omitempty"` StorageSize int64 `json:"storage_size,omitempty"` HasSummary bool `json:"has_summary,omitempty"` // Whether session has summary }
Stats provides memory usage statistics
type Summary ΒΆ
type Summary struct { SessionID string `json:"session_id"` Content string `json:"content"` TokenCount int `json:"token_count"` MessageCount int `json:"message_count"` StartTime time.Time `json:"start_time"` EndTime time.Time `json:"end_time"` Created time.Time `json:"created"` }
Summary represents a conversation summary
type SupabaseMemory ΒΆ
type SupabaseMemory struct {
// contains filtered or unexported fields
}
SupabaseMemory implements Memory using Supabase PostgreSQL with pgvector
func (*SupabaseMemory) AddMessage ΒΆ
func (sm *SupabaseMemory) AddMessage(ctx context.Context, msg Message) error
AddMessage adds a message to session memory
func (*SupabaseMemory) ClearSession ΒΆ
func (sm *SupabaseMemory) ClearSession(ctx context.Context, sessionID string) error
ClearSession removes all messages for a session
func (*SupabaseMemory) Close ΒΆ
func (sm *SupabaseMemory) Close() error
func (*SupabaseMemory) GetRecentMessages ΒΆ
func (sm *SupabaseMemory) GetRecentMessages(ctx context.Context, sessionID string, limit int) ([]Message, error)
GetRecentMessages retrieves recent messages for a session
func (*SupabaseMemory) GetSummary ΒΆ
Close closes database connections GetSummary retrieves a summary for the session
func (*SupabaseMemory) Search ΒΆ
func (sm *SupabaseMemory) Search(ctx context.Context, query string, limit int, threshold float32) ([]SearchResult, error)
Search performs semantic search on messages
func (*SupabaseMemory) SearchWithEmbedding ΒΆ
func (sm *SupabaseMemory) SearchWithEmbedding(ctx context.Context, embedding []float32, limit int, threshold float32) ([]SearchResult, error)
SearchWithEmbedding searches using a pre-computed embedding
Directories
ΒΆ
Path | Synopsis |
---|---|
01-session-only
command
Session-Only Memory Example This example demonstrates the simplest memory configuration with no external dependencies.
|
Session-Only Memory Example This example demonstrates the simplest memory configuration with no external dependencies. |
02-persistent-basic
command
Persistent Basic Memory Example Demonstrates database persistence with PostgreSQL for long-term memory storage.
|
Persistent Basic Memory Example Demonstrates database persistence with PostgreSQL for long-term memory storage. |
03-hybrid-mode
command
Hybrid Mode Memory Example Combines Redis for fast session caching with PostgreSQL for persistence.
|
Hybrid Mode Memory Example Combines Redis for fast session caching with PostgreSQL for persistence. |
04-semantic-search
command
Semantic Search Memory Example Demonstrates vector embeddings and similarity search using OpenAI and pgvector.
|
Semantic Search Memory Example Demonstrates vector embeddings and similarity search using OpenAI and pgvector. |
05-auto-summarization
command
Auto-Summarization Memory Example Demonstrates automatic conversation compression to optimize token usage.
|
Auto-Summarization Memory Example Demonstrates automatic conversation compression to optimize token usage. |
06-event-streaming
command
Event Streaming Memory Example Demonstrates Redis Streams for event sourcing and audit trails.
|
Event Streaming Memory Example Demonstrates Redis Streams for event sourcing and audit trails. |
07-agent-integration
command
Complete Agent Integration Example Production-ready AI agent with configurable memory system.
|
Complete Agent Integration Example Production-ready AI agent with configurable memory system. |