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 Config
- type HybridMemory
- func (hm *HybridMemory) AddMessage(ctx context.Context, msg Message) error
- func (hm *HybridMemory) ClearSession(ctx context.Context, sessionID string) error
- func (hm *HybridMemory) Close() 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) 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 Message
- type Metadata
- type SearchResult
- type Stats
- 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) 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 Config ¶
type Config struct { // Supabase Configuration (required for semantic memory) SupabaseURL string `json:"supabase_url"` SupabaseKey string `json:"supabase_key"` DatabaseURL string `json:"database_url"` // 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"` 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 }
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) ClearSession ¶
func (hm *HybridMemory) ClearSession(ctx context.Context, sessionID string) error
ClearSession clears messages from both Redis and Supabase
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) 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) 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 NewSupabaseMemory ¶
NewSupabaseMemory creates a new Supabase-based memory instance
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 Stats ¶
type Stats struct { SessionID string `json:"session_id"` TotalMessages int `json:"total_messages"` SessionMessages int `json:"session_messages"` TotalTokens int `json:"total_tokens"` OldestMessage time.Time `json:"oldest_message"` LatestMessage time.Time `json:"latest_message"` UniqueUsers int `json:"unique_users,omitempty"` StorageSize int64 `json:"storage_size,omitempty"` }
Stats provides memory usage statistics
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
Close closes database connections
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) 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