Documentation
¶
Overview ¶
Package memory provides memory systems for agent conversation history.
This package defines interfaces and implementations for storing and retrieving agent conversation history, enabling context management beyond raw message lists.
Design principles:
- Minimal: Only essential methods
- Flexible: Support multiple storage backends
- Composable: Combine with strategies
- Production-ready: Built for real-world use
Implementations:
- InMemoryMemory: Simple in-memory storage with LRU eviction
- RedisMemory: Redis-backed with TTL and pub/sub
- VectorMemory: Vector database for semantic retrieval
- EndlessMemory: Integration with endless project for infinite context
Index ¶
- type EmbeddingProvider
- type EndlessClient
- type EndlessMemory
- func (e *EndlessMemory) Capabilities() []string
- func (e *EndlessMemory) Clear(ctx context.Context, sessionID string) error
- func (e *EndlessMemory) Retrieve(ctx context.Context, sessionID string, opts RetrieveOptions) ([]agenkit.Message, error)
- func (e *EndlessMemory) Store(ctx context.Context, sessionID string, message agenkit.Message, ...) error
- func (e *EndlessMemory) Summarize(ctx context.Context, sessionID string, opts SummarizeOptions) (agenkit.Message, error)
- type HierarchyConfig
- type HierarchyMemory
- func (h *HierarchyMemory) Capabilities() []string
- func (h *HierarchyMemory) Clear(ctx context.Context, sessionID string) error
- func (h *HierarchyMemory) GetStats() map[string]interface{}
- func (h *HierarchyMemory) Retrieve(ctx context.Context, sessionID string, opts RetrieveOptions) ([]agenkit.Message, error)
- func (h *HierarchyMemory) Store(ctx context.Context, sessionID string, message agenkit.Message, ...) error
- func (h *HierarchyMemory) Summarize(ctx context.Context, sessionID string, opts SummarizeOptions) (agenkit.Message, error)
- type InMemoryMemory
- func (m *InMemoryMemory) Capabilities() []string
- func (m *InMemoryMemory) Clear(ctx context.Context, sessionID string) error
- func (m *InMemoryMemory) GetAllSessions() []string
- func (m *InMemoryMemory) GetMemoryUsage() map[string]interface{}
- func (m *InMemoryMemory) GetSessionCount(sessionID string) int
- func (m *InMemoryMemory) Retrieve(ctx context.Context, sessionID string, opts RetrieveOptions) ([]agenkit.Message, error)
- func (m *InMemoryMemory) Store(ctx context.Context, sessionID string, message agenkit.Message, ...) error
- func (m *InMemoryMemory) Summarize(ctx context.Context, sessionID string, opts SummarizeOptions) (agenkit.Message, error)
- type InMemoryVectorStore
- func (s *InMemoryVectorStore) Add(ctx context.Context, sessionID, messageID string, embedding []float64, ...) error
- func (s *InMemoryVectorStore) Clear(ctx context.Context, sessionID string) error
- func (s *InMemoryVectorStore) GetRecent(ctx context.Context, sessionID string, limit int, opts RetrieveOptions) ([]MessageWithMetadata, error)
- func (s *InMemoryVectorStore) Search(ctx context.Context, sessionID string, queryEmbedding []float64, limit int, ...) ([]MessageSearchResult, error)
- type Memory
- type MessageSearchResult
- type MessageWithMetadata
- type RedisMemory
- func (r *RedisMemory) Capabilities() []string
- func (r *RedisMemory) Clear(ctx context.Context, sessionID string) error
- func (r *RedisMemory) Close() error
- func (r *RedisMemory) GetAllSessions(ctx context.Context) ([]string, error)
- func (r *RedisMemory) GetMemoryUsage(ctx context.Context) (map[string]interface{}, error)
- func (r *RedisMemory) GetSessionCount(ctx context.Context, sessionID string) (int64, error)
- func (r *RedisMemory) Retrieve(ctx context.Context, sessionID string, opts RetrieveOptions) ([]agenkit.Message, error)
- func (r *RedisMemory) Store(ctx context.Context, sessionID string, message agenkit.Message, ...) error
- func (r *RedisMemory) Summarize(ctx context.Context, sessionID string, opts SummarizeOptions) (agenkit.Message, error)
- type RetrieveOptions
- type SummarizeOptions
- type TimeRange
- type VectorMemory
- func (v *VectorMemory) Capabilities() []string
- func (v *VectorMemory) Clear(ctx context.Context, sessionID string) error
- func (v *VectorMemory) Retrieve(ctx context.Context, sessionID string, opts RetrieveOptions) ([]agenkit.Message, error)
- func (v *VectorMemory) RetrieveWithScores(ctx context.Context, sessionID string, query string, limit *int) ([]MessageSearchResult, error)
- func (v *VectorMemory) Store(ctx context.Context, sessionID string, message agenkit.Message, ...) error
- func (v *VectorMemory) Summarize(ctx context.Context, sessionID string, opts SummarizeOptions) (agenkit.Message, error)
- type VectorStore
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type EmbeddingProvider ¶
type EmbeddingProvider interface {
// Embed generates an embedding for text.
Embed(ctx context.Context, text string) ([]float64, error)
// Dimension returns the embedding dimension.
Dimension() int
}
EmbeddingProvider is the interface for embedding providers.
type EndlessClient ¶
type EndlessClient interface {
// StoreContext stores messages in endless compressed context.
StoreContext(ctx context.Context, sessionID string, messages []map[string]interface{}, metadata map[string]interface{}) error
// RetrieveContext retrieves compressed context from endless.
RetrieveContext(ctx context.Context, sessionID string, query string, limit int) ([]map[string]interface{}, error)
// SummarizeContext gets summary of compressed context.
SummarizeContext(ctx context.Context, sessionID string) (string, error)
// ClearContext clears context for session.
ClearContext(ctx context.Context, sessionID string) error
}
EndlessClient is the interface for endless project clients.
Users must provide a client implementing this interface. See: https://github.com/jxnl/endless (user installs separately)
type EndlessMemory ¶
type EndlessMemory struct {
// contains filtered or unexported fields
}
EndlessMemory provides integration with endless project for infinite context.
Features:
- Infinite context through compression
- Semantic retrieval from compressed context
- Automatic context management
- Cross-session knowledge accumulation
Limitations:
- Requires endless client (user provides)
- Compression may lose some details
- Additional latency for compression/decompression
Use cases:
- Very long conversations (> 200K tokens)
- Knowledge accumulation over time
- Multi-session knowledge sharing
- 30-hour autonomous agents
Example:
// User installs endless separately
import "github.com/jxnl/endless"
endlessClient := endless.NewClient("api-key")
memory := NewEndlessMemory(endlessClient)
err := memory.Store(ctx, "session-123", message, nil)
messages, err := memory.Retrieve(ctx, "session-123",
RetrieveOptions{Query: "pricing discussion"})
func NewEndlessMemory ¶
func NewEndlessMemory(endlessClient EndlessClient) *EndlessMemory
NewEndlessMemory creates a new EndlessMemory instance.
Args:
endlessClient: Client implementing EndlessClient interface
(user installs endless separately)
Example:
import "github.com/jxnl/endless"
client := endless.NewClient("sk-...")
memory := NewEndlessMemory(client)
func (*EndlessMemory) Capabilities ¶
func (e *EndlessMemory) Capabilities() []string
Capabilities returns the memory capabilities.
func (*EndlessMemory) Clear ¶
func (e *EndlessMemory) Clear(ctx context.Context, sessionID string) error
Clear removes endless context for session.
Args:
ctx: Context for cancellation sessionID: Session identifier
func (*EndlessMemory) Retrieve ¶
func (e *EndlessMemory) Retrieve(ctx context.Context, sessionID string, opts RetrieveOptions) ([]agenkit.Message, error)
Retrieve fetches messages from endless compressed context.
Supports semantic retrieval via query parameter.
Args:
ctx: Context for cancellation sessionID: Session identifier opts: Retrieval options
Returns:
List of messages from compressed context
func (*EndlessMemory) Store ¶
func (e *EndlessMemory) Store(ctx context.Context, sessionID string, message agenkit.Message, metadata map[string]interface{}) error
Store saves a message in endless compressed context.
Args:
ctx: Context for cancellation sessionID: Session identifier message: Message to store metadata: Optional metadata (importance, tags, etc.)
func (*EndlessMemory) Summarize ¶
func (e *EndlessMemory) Summarize(ctx context.Context, sessionID string, opts SummarizeOptions) (agenkit.Message, error)
Summarize gets summary of compressed context from endless.
Args:
ctx: Context for cancellation sessionID: Session identifier opts: Summarization options
Returns:
Message containing summary
type HierarchyConfig ¶
type HierarchyConfig struct {
// WorkingCapacity is the max messages in working memory (default: 10).
// Increase for longer context windows.
WorkingCapacity int
// ShortTermCapacity is the max messages in short-term memory (default: 100).
// Increase for longer session history.
ShortTermCapacity int
// ShortTermTTLSeconds is time-to-live for short-term entries (default: 3600 = 1 hour).
// Increase to retain history longer.
ShortTermTTLSeconds int
// LongTermMinImportance is minimum importance for long-term storage (default: 0.7).
// Lower to store more, higher for only critical info.
LongTermMinImportance float64
// EnableLongTerm enables long-term memory (default: true).
// Disable for testing or simple use cases.
EnableLongTerm bool
}
HierarchyConfig contains configuration for HierarchyMemory.
func DefaultHierarchyConfig ¶
func DefaultHierarchyConfig() HierarchyConfig
DefaultHierarchyConfig returns the default hierarchy configuration.
type HierarchyMemory ¶
type HierarchyMemory struct {
// contains filtered or unexported fields
}
HierarchyMemory is a backward-compatible adapter wrapping MemoryHierarchy.
Implements the session-based Memory interface while using the 3-tier hierarchy internally for improved performance and scalability.
Benefits over InMemoryMemory:
- Automatic importance-based tier routing
- FIFO/LRU/TTL eviction strategies
- Better memory management for long sessions
- Semantic retrieval across tiers
- Proven architecture (used in Rust/C++/Zig/Python)
Architecture:
- Working Memory: Current conversation (FIFO, 10-20 msgs)
- Short-Term Memory: Recent sessions (LRU+TTL, 100-1000 msgs)
- Long-Term Memory: Important facts (importance threshold, unlimited)
Example:
memory, err := NewHierarchyMemory(HierarchyConfig{
WorkingCapacity: 10,
ShortTermCapacity: 100,
ShortTermTTLSeconds: 3600,
LongTermMinImportance: 0.7,
})
err = memory.Store(ctx, "session-123", message, nil)
limit := 10
messages, err := memory.Retrieve(ctx, "session-123", RetrieveOptions{Limit: &limit})
func NewDefaultHierarchyMemory ¶
func NewDefaultHierarchyMemory() (*HierarchyMemory, error)
NewDefaultHierarchyMemory creates a HierarchyMemory with default configuration.
func NewHierarchyMemory ¶
func NewHierarchyMemory(config HierarchyConfig) (*HierarchyMemory, error)
NewHierarchyMemory creates a new HierarchyMemory with the given configuration.
func (*HierarchyMemory) Capabilities ¶
func (h *HierarchyMemory) Capabilities() []string
Capabilities returns the memory capabilities.
func (*HierarchyMemory) Clear ¶
func (h *HierarchyMemory) Clear(ctx context.Context, sessionID string) error
Clear removes all messages for a session from all tiers.
Note: Deletion is permanent and cannot be undone.
func (*HierarchyMemory) GetStats ¶
func (h *HierarchyMemory) GetStats() map[string]interface{}
GetStats returns memory usage statistics from hierarchy.
func (*HierarchyMemory) Retrieve ¶
func (h *HierarchyMemory) Retrieve( ctx context.Context, sessionID string, opts RetrieveOptions, ) ([]agenkit.Message, error)
Retrieve retrieves messages from hierarchy filtered by session.
Note: Unlike InMemoryMemory, this searches semantically across all tiers when query is provided. For chronological order, use query="".
func (*HierarchyMemory) Store ¶
func (h *HierarchyMemory) Store( ctx context.Context, sessionID string, message agenkit.Message, metadata map[string]interface{}, ) error
Store stores a message in the hierarchy with session association.
Importance Routing:
- System messages: 0.3 (working + short-term only)
- User messages: 0.5 (working + short-term, possibly long-term)
- Assistant messages: 0.4 (working + short-term only)
- High importance (0.7+): Stored in long-term memory
To control routing, pass importance in metadata:
metadata := map[string]interface{}{"importance": 0.9}
err := memory.Store(ctx, "session-123", message, metadata)
func (*HierarchyMemory) Summarize ¶
func (h *HierarchyMemory) Summarize( ctx context.Context, sessionID string, opts SummarizeOptions, ) (agenkit.Message, error)
Summarize creates a summary of conversation history for session.
Note: This is a simple implementation using concatenation. Production use should use LLM-based summarization.
type InMemoryMemory ¶
type InMemoryMemory struct {
// contains filtered or unexported fields
}
InMemoryMemory provides simple in-memory storage with LRU eviction.
Features:
- Fast access (no I/O)
- LRU eviction when max_size reached
- Per-session storage
- Optional metadata support
Limitations:
- No persistence (data lost on restart)
- No semantic search
- Memory limited
Use cases:
- Testing
- Simple applications
- Prototypes
- When persistence not needed
Example:
memory := NewInMemoryMemory(1000)
err := memory.Store(ctx, "session-123", message, nil)
limit := 10
messages, err := memory.Retrieve(ctx, "session-123", RetrieveOptions{Limit: &limit})
func NewInMemoryMemory ¶
func NewInMemoryMemory(maxSize int) *InMemoryMemory
NewInMemoryMemory creates a new in-memory memory instance.
Args:
maxSize: Maximum number of messages to store per session before LRU eviction
Example:
memory := NewInMemoryMemory(1000)
func (*InMemoryMemory) Capabilities ¶
func (m *InMemoryMemory) Capabilities() []string
Capabilities returns the memory capabilities.
func (*InMemoryMemory) Clear ¶
func (m *InMemoryMemory) Clear(ctx context.Context, sessionID string) error
Clear removes all memory for a session.
func (*InMemoryMemory) GetAllSessions ¶
func (m *InMemoryMemory) GetAllSessions() []string
GetAllSessions returns a list of all session IDs.
func (*InMemoryMemory) GetMemoryUsage ¶
func (m *InMemoryMemory) GetMemoryUsage() map[string]interface{}
GetMemoryUsage returns memory usage statistics.
func (*InMemoryMemory) GetSessionCount ¶
func (m *InMemoryMemory) GetSessionCount(sessionID string) int
GetSessionCount returns the number of messages stored for a session.
func (*InMemoryMemory) Retrieve ¶
func (m *InMemoryMemory) Retrieve(ctx context.Context, sessionID string, opts RetrieveOptions) ([]agenkit.Message, error)
Retrieve fetches messages from memory.
Supports filtering by:
- TimeRange: Filter by time range
- ImportanceThreshold: Filter by importance score (requires metadata with "importance")
- Tags: Filter by tags (requires metadata with "tags")
func (*InMemoryMemory) Store ¶
func (m *InMemoryMemory) Store(ctx context.Context, sessionID string, message agenkit.Message, metadata map[string]interface{}) error
Store saves a message to memory with optional metadata.
func (*InMemoryMemory) Summarize ¶
func (m *InMemoryMemory) Summarize(ctx context.Context, sessionID string, opts SummarizeOptions) (agenkit.Message, error)
Summarize creates a summary of conversation history.
Simple implementation: Returns a message with concatenated content. Production use should use LLM-based summarization.
type InMemoryVectorStore ¶
type InMemoryVectorStore struct {
// contains filtered or unexported fields
}
InMemoryVectorStore is a simple in-memory vector store using cosine similarity.
Good for testing and small datasets. For production, use specialized vector databases (Pinecone, Weaviate, Qdrant, etc.).
func NewInMemoryVectorStore ¶
func NewInMemoryVectorStore() *InMemoryVectorStore
NewInMemoryVectorStore creates a new in-memory vector store.
func (*InMemoryVectorStore) Add ¶
func (s *InMemoryVectorStore) Add(ctx context.Context, sessionID, messageID string, embedding []float64, message agenkit.Message, metadata map[string]interface{}, timestamp float64) error
Add adds a message with embedding to the store.
func (*InMemoryVectorStore) Clear ¶
func (s *InMemoryVectorStore) Clear(ctx context.Context, sessionID string) error
Clear clears all messages for a session.
func (*InMemoryVectorStore) GetRecent ¶
func (s *InMemoryVectorStore) GetRecent(ctx context.Context, sessionID string, limit int, opts RetrieveOptions) ([]MessageWithMetadata, error)
GetRecent gets recent messages without search.
func (*InMemoryVectorStore) Search ¶
func (s *InMemoryVectorStore) Search(ctx context.Context, sessionID string, queryEmbedding []float64, limit int, opts RetrieveOptions) ([]MessageSearchResult, error)
Search searches for similar messages using cosine similarity.
type Memory ¶
type Memory interface {
// Store saves a message to memory with optional metadata.
//
// Args:
// ctx: Context for cancellation
// sessionID: Unique session identifier
// message: Message to store
// metadata: Optional metadata (importance score, tags, etc.)
//
// Example:
// err := memory.Store(ctx, "session-123",
// Message{Role: "user", Content: "Hello"},
// map[string]interface{}{"importance": 0.8, "tags": []string{"greeting"}})
Store(ctx context.Context, sessionID string, message agenkit.Message, metadata map[string]interface{}) error
// Retrieve fetches messages from memory.
//
// Args:
// ctx: Context for cancellation
// sessionID: Session identifier
// opts: Retrieval options (query, limit, filters)
//
// Returns:
// List of messages (most recent first by default)
//
// Example:
// // Basic retrieval (most recent)
// // Basic retrieval with limit
// limit := 10
// messages, err := memory.Retrieve(ctx, "session-123", RetrieveOptions{Limit: &limit})
//
// // Use default limit (10) by passing nil
// messages, err := memory.Retrieve(ctx, "session-123", RetrieveOptions{})
//
// // Semantic retrieval (if supported)
// limit = 5
// messages, err := memory.Retrieve(ctx, "session-123",
// RetrieveOptions{Query: "What did we discuss about pricing?", Limit: &limit})
//
// // Time-filtered retrieval
// limit = 20
// messages, err := memory.Retrieve(ctx, "session-123",
// RetrieveOptions{TimeRange: &TimeRange{Start: start, End: end}, Limit: &limit})
Retrieve(ctx context.Context, sessionID string, opts RetrieveOptions) ([]agenkit.Message, error)
// Summarize creates a summary of conversation history.
//
// Args:
// ctx: Context for cancellation
// sessionID: Session identifier
// opts: Summarization options
//
// Returns:
// Message containing summary
//
// Example:
// summary, err := memory.Summarize(ctx, "session-123", SummarizeOptions{})
// fmt.Println(summary.Content) // "Discussed pricing strategy, decided on $50/month tier..."
Summarize(ctx context.Context, sessionID string, opts SummarizeOptions) (agenkit.Message, error)
// Clear removes all memory for a session.
//
// Args:
// ctx: Context for cancellation
// sessionID: Session identifier
//
// Example:
// err := memory.Clear(ctx, "session-123")
Clear(ctx context.Context, sessionID string) error
// Capabilities returns the memory capabilities.
//
// Possible capabilities:
// - "basic_retrieval": Supports simple Retrieve()
// - "semantic_search": Supports query-based retrieval
// - "summarization": Supports Summarize()
// - "persistence": Data survives restarts
// - "ttl": Supports automatic expiry
// - "importance_weighting": Supports importance-based retrieval
// - "time_travel": Supports point-in-time queries
//
// Example:
// caps := memory.Capabilities()
// // []string{"basic_retrieval", "persistence", "ttl"}
Capabilities() []string
}
Memory is the minimal interface for agent memory systems.
Memory systems store and retrieve agent conversation history, enabling context management beyond raw message lists. Different implementations support various storage backends and retrieval strategies.
Example:
memory := NewInMemoryMemory(1000)
err := memory.Store(ctx, "session-123", message, nil)
messages, err := memory.Retrieve(ctx, "session-123", RetrieveOptions{Limit: 10})
type MessageSearchResult ¶
type MessageSearchResult struct {
Message agenkit.Message
Metadata map[string]interface{}
Score float64
}
MessageSearchResult represents a search result with score.
type MessageWithMetadata ¶
type MessageWithMetadata struct {
Timestamp float64 // Unix timestamp with microsecond precision
Message agenkit.Message // The message
Metadata map[string]interface{} // Associated metadata
}
MessageWithMetadata wraps a message with its timestamp and metadata.
type RedisMemory ¶
type RedisMemory struct {
// contains filtered or unexported fields
}
RedisMemory provides Redis-backed memory with TTL and pub/sub.
Features:
- Persistent storage (survives restarts)
- TTL support (automatic expiry)
- Multi-instance agents (shared memory)
- Fast access (in-memory Redis)
- Scalable (Redis cluster support)
Use cases:
- Production deployments
- Multi-instance agents
- When persistence needed
- Shared memory across agents
Example:
memory := NewRedisMemory("redis://localhost:6379", 86400, "agenkit:memory")
err := memory.Store(ctx, "session-123", message, nil)
limit := 10
messages, err := memory.Retrieve(ctx, "session-123", RetrieveOptions{Limit: &limit})
Redis Data Structure:
- Key: "agenkit:memory:{session_id}:messages"
- Type: Sorted Set (ZSET)
- Score: Timestamp (for ordering)
- Value: JSON(message, metadata)
func NewRedisMemory ¶
func NewRedisMemory(redisURL string, ttlSeconds int, keyPrefix string) (*RedisMemory, error)
NewRedisMemory creates a new Redis-backed memory instance.
Args:
redisURL: Redis connection URL ttlSeconds: Time-to-live in seconds (0 = no expiry) keyPrefix: Prefix for Redis keys
Example:
memory := NewRedisMemory("redis://localhost:6379", 86400, "agenkit:memory")
func (*RedisMemory) Capabilities ¶
func (r *RedisMemory) Capabilities() []string
Capabilities returns the memory capabilities.
func (*RedisMemory) Clear ¶
func (r *RedisMemory) Clear(ctx context.Context, sessionID string) error
Clear removes all memory for a session.
func (*RedisMemory) GetAllSessions ¶
func (r *RedisMemory) GetAllSessions(ctx context.Context) ([]string, error)
GetAllSessions returns a list of all session IDs.
func (*RedisMemory) GetMemoryUsage ¶
func (r *RedisMemory) GetMemoryUsage(ctx context.Context) (map[string]interface{}, error)
GetMemoryUsage returns memory usage statistics.
func (*RedisMemory) GetSessionCount ¶
GetSessionCount returns the number of messages stored for a session.
func (*RedisMemory) Retrieve ¶
func (r *RedisMemory) Retrieve(ctx context.Context, sessionID string, opts RetrieveOptions) ([]agenkit.Message, error)
Retrieve fetches messages from Redis.
Supports filtering by:
- TimeRange: Filter by time range
- ImportanceThreshold: Filter by importance score
- Tags: Filter by tags
func (*RedisMemory) Store ¶
func (r *RedisMemory) Store(ctx context.Context, sessionID string, message agenkit.Message, metadata map[string]interface{}) error
Store saves a message to Redis with optional metadata.
func (*RedisMemory) Summarize ¶
func (r *RedisMemory) Summarize(ctx context.Context, sessionID string, opts SummarizeOptions) (agenkit.Message, error)
Summarize creates a summary of conversation history.
Simple implementation: Returns a message with concatenated content. Production use should use LLM-based summarization.
type RetrieveOptions ¶
type RetrieveOptions struct {
// Query is an optional semantic query for retrieval (if supported)
Query string
// Limit is the maximum number of messages to return (nil = default of 10)
Limit *int
// TimeRange filters messages by time (optional)
TimeRange *TimeRange
// ImportanceThreshold filters messages by importance score (optional)
ImportanceThreshold *float64
// Tags filters messages that have any of these tags (optional)
Tags []string
}
RetrieveOptions specifies options for retrieving messages.
type SummarizeOptions ¶
type SummarizeOptions struct {
// MaxLength is the maximum length of the summary (optional)
MaxLength int
// Style is the summary style: "brief" or "detailed" (optional)
Style string
}
SummarizeOptions specifies options for summarization.
type TimeRange ¶
type TimeRange struct {
Start int64 // Unix timestamp in seconds
End int64 // Unix timestamp in seconds
}
TimeRange represents a time range filter.
type VectorMemory ¶
type VectorMemory struct {
// contains filtered or unexported fields
}
VectorMemory provides vector database for semantic retrieval.
Features:
- Semantic search via embeddings
- Relevance-based retrieval
- Pluggable embedding providers
- Pluggable vector stores
Use cases:
- RAG (Retrieval-Augmented Generation)
- Semantic memory
- Large knowledge bases
- Context-aware agents
Example:
embeddings := NewOpenAIEmbeddings(client)
memory := NewVectorMemory(embeddings, nil)
err := memory.Store(ctx, "session-123", message, nil)
limit := 5
messages, err := memory.Retrieve(ctx, "session-123",
RetrieveOptions{Query: "What did we discuss about pricing?", Limit: &limit})
func NewVectorMemory ¶
func NewVectorMemory(embeddingProvider EmbeddingProvider, vectorStore VectorStore) *VectorMemory
NewVectorMemory creates a new vector memory instance.
Args:
embeddingProvider: Provider for generating embeddings vectorStore: Vector storage backend (defaults to in-memory)
Example:
embeddings := NewOpenAIEmbeddings(client) memory := NewVectorMemory(embeddings, nil)
func (*VectorMemory) Capabilities ¶
func (v *VectorMemory) Capabilities() []string
Capabilities returns the memory capabilities.
func (*VectorMemory) Clear ¶
func (v *VectorMemory) Clear(ctx context.Context, sessionID string) error
Clear removes all memory for a session.
func (*VectorMemory) Retrieve ¶
func (v *VectorMemory) Retrieve(ctx context.Context, sessionID string, opts RetrieveOptions) ([]agenkit.Message, error)
Retrieve fetches messages with semantic search.
If query provided, performs semantic search. Otherwise, returns most recent messages.
Supports filtering by:
- TimeRange: Filter by time range
- ImportanceThreshold: Filter by importance score
- Tags: Filter by tags
func (*VectorMemory) RetrieveWithScores ¶
func (v *VectorMemory) RetrieveWithScores(ctx context.Context, sessionID string, query string, limit *int) ([]MessageSearchResult, error)
RetrieveWithScores retrieves messages with similarity scores.
Args:
ctx: Context sessionID: Session identifier query: Search query limit: Maximum results to return (nil = default of 10)
Returns:
List of (message, score) tuples
func (*VectorMemory) Store ¶
func (v *VectorMemory) Store(ctx context.Context, sessionID string, message agenkit.Message, metadata map[string]interface{}) error
Store saves a message with embedding in vector store.
func (*VectorMemory) Summarize ¶
func (v *VectorMemory) Summarize(ctx context.Context, sessionID string, opts SummarizeOptions) (agenkit.Message, error)
Summarize creates a summary of conversation history.
For vector memory, we can use semantic search to find key messages and summarize those.
type VectorStore ¶
type VectorStore interface {
// Add adds a message with embedding to the store.
Add(ctx context.Context, sessionID, messageID string, embedding []float64, message agenkit.Message, metadata map[string]interface{}, timestamp float64) error
// Search searches for similar messages.
// Returns list of (message, metadata, score) tuples.
Search(ctx context.Context, sessionID string, queryEmbedding []float64, limit int, opts RetrieveOptions) ([]MessageSearchResult, error)
// GetRecent gets recent messages without search.
GetRecent(ctx context.Context, sessionID string, limit int, opts RetrieveOptions) ([]MessageWithMetadata, error)
// Clear clears all messages for a session.
Clear(ctx context.Context, sessionID string) error
}
VectorStore is the interface for vector stores.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package strategies provides memory selection strategies for context management.
|
Package strategies provides memory selection strategies for context management. |