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