Documentation
¶
Overview ¶
Package memory provides the unified memory service interface for AI agents. This interface is consumed by Team B (Assistant+Schedule) and Team C (Memo Enhancement).
Index ¶
- Variables
- type EpisodicMemory
- type LongTermMemory
- func (l *LongTermMemory) GetPreferences(ctx context.Context, userID int32) (*UserPreferences, error)
- func (l *LongTermMemory) ListActiveUserIDs(ctx context.Context, lookbackDays int) ([]int32, error)
- func (l *LongTermMemory) SaveEpisode(ctx context.Context, episode EpisodicMemory) error
- func (l *LongTermMemory) SearchEpisodes(ctx context.Context, userID int32, query string, limit int) ([]EpisodicMemory, error)
- func (l *LongTermMemory) UpdatePreferences(ctx context.Context, userID int32, prefs *UserPreferences) error
- type MemoryService
- type Message
- type MockMemoryService
- func (m *MockMemoryService) AddMessage(ctx context.Context, sessionID string, msg Message) error
- func (m *MockMemoryService) GetPreferences(ctx context.Context, userID int32) (*UserPreferences, error)
- func (m *MockMemoryService) GetRecentMessages(ctx context.Context, sessionID string, limit int) ([]Message, error)
- func (m *MockMemoryService) ListActiveUserIDs(ctx context.Context, lookbackDays int) ([]int32, error)
- func (m *MockMemoryService) SaveEpisode(ctx context.Context, episode EpisodicMemory) error
- func (m *MockMemoryService) SearchEpisodes(ctx context.Context, userID int32, query string, limit int) ([]EpisodicMemory, error)
- func (m *MockMemoryService) UpdatePreferences(ctx context.Context, userID int32, prefs *UserPreferences) error
- type Service
- func (s *Service) ActiveSessionCount() int
- func (s *Service) AddMessage(ctx context.Context, sessionID string, msg Message) error
- func (s *Service) ClearSession(sessionID string)
- func (s *Service) Close()
- func (s *Service) GetPreferences(ctx context.Context, userID int32) (*UserPreferences, error)
- func (s *Service) GetRecentMessages(ctx context.Context, sessionID string, limit int) ([]Message, error)
- func (s *Service) HasLongTermMemory() bool
- func (s *Service) ListActiveUserIDs(ctx context.Context, lookbackDays int) ([]int32, error)
- func (s *Service) SaveEpisode(ctx context.Context, episode EpisodicMemory) error
- func (s *Service) SearchEpisodes(ctx context.Context, userID int32, query string, limit int) ([]EpisodicMemory, error)
- func (s *Service) UpdatePreferences(ctx context.Context, userID int32, prefs *UserPreferences) error
- type ShortTermMemory
- type UserPreferences
Constants ¶
This section is empty.
Variables ¶
var ErrLongTermNotConfigured = errors.New("long-term memory not configured (requires PostgreSQL)")
ErrLongTermNotConfigured is returned when long-term memory operations are attempted but the store is not configured (e.g., SQLite mode).
Functions ¶
This section is empty.
Types ¶
type EpisodicMemory ¶
type EpisodicMemory struct {
Timestamp time.Time `json:"timestamp"`
AgentType string `json:"agent_type"`
UserInput string `json:"user_input"`
Outcome string `json:"outcome"`
Summary string `json:"summary"`
ID int64 `json:"id"`
UserID int32 `json:"user_id"`
Importance float32 `json:"importance"`
}
EpisodicMemory represents an episodic memory record.
type LongTermMemory ¶
type LongTermMemory struct {
// contains filtered or unexported fields
}
LongTermMemory manages persistent episodic memories and user preferences.
func NewLongTermMemory ¶
func NewLongTermMemory(s *store.Store) *LongTermMemory
NewLongTermMemory creates a new long-term memory manager.
func (*LongTermMemory) GetPreferences ¶
func (l *LongTermMemory) GetPreferences(ctx context.Context, userID int32) (*UserPreferences, error)
GetPreferences retrieves user preferences.
func (*LongTermMemory) ListActiveUserIDs ¶
ListActiveUserIDs returns user IDs with recent episodic activity.
func (*LongTermMemory) SaveEpisode ¶
func (l *LongTermMemory) SaveEpisode(ctx context.Context, episode EpisodicMemory) error
SaveEpisode saves an episodic memory to persistent storage.
func (*LongTermMemory) SearchEpisodes ¶
func (l *LongTermMemory) SearchEpisodes(ctx context.Context, userID int32, query string, limit int) ([]EpisodicMemory, error)
SearchEpisodes searches episodic memories by query.
func (*LongTermMemory) UpdatePreferences ¶
func (l *LongTermMemory) UpdatePreferences(ctx context.Context, userID int32, prefs *UserPreferences) error
UpdatePreferences updates user preferences.
type MemoryService ¶
type MemoryService interface {
// GetRecentMessages retrieves recent messages from a session.
// limit: maximum number of messages to return, recommended 10
GetRecentMessages(ctx context.Context, sessionID string, limit int) ([]Message, error)
// AddMessage adds a message to a session.
AddMessage(ctx context.Context, sessionID string, msg Message) error
// SaveEpisode saves an episodic memory.
SaveEpisode(ctx context.Context, episode EpisodicMemory) error
// SearchEpisodes searches episodic memories for a specific user.
// userID: required, ensures multi-tenant data isolation
// query: search keywords, empty string returns most recent records
// limit: maximum number of results to return
SearchEpisodes(ctx context.Context, userID int32, query string, limit int) ([]EpisodicMemory, error)
// ListActiveUserIDs returns user IDs with recent episodic activity.
// lookbackDays: how many days to look back for activity
// Returns unique user IDs that have at least one episode within the lookback period.
ListActiveUserIDs(ctx context.Context, lookbackDays int) ([]int32, error)
// GetPreferences retrieves user preferences.
GetPreferences(ctx context.Context, userID int32) (*UserPreferences, error)
// UpdatePreferences updates user preferences.
UpdatePreferences(ctx context.Context, userID int32, prefs *UserPreferences) error
}
Consumers: Team B (Assistant+Schedule), Team C (Memo Enhancement).
type Message ¶
type Message struct {
Timestamp time.Time `json:"timestamp"`
Role string `json:"role"`
Content string `json:"content"`
}
Message represents a conversation message.
type MockMemoryService ¶
type MockMemoryService struct {
// contains filtered or unexported fields
}
MockMemoryService is a mock implementation of MemoryService for testing.
func NewMockMemoryService ¶
func NewMockMemoryService() *MockMemoryService
NewMockMemoryService creates a new MockMemoryService with sample data.
func (*MockMemoryService) AddMessage ¶
AddMessage adds a message to a session.
func (*MockMemoryService) GetPreferences ¶
func (m *MockMemoryService) GetPreferences(ctx context.Context, userID int32) (*UserPreferences, error)
GetPreferences retrieves user preferences.
func (*MockMemoryService) GetRecentMessages ¶
func (m *MockMemoryService) GetRecentMessages(ctx context.Context, sessionID string, limit int) ([]Message, error)
GetRecentMessages retrieves recent messages from a session.
func (*MockMemoryService) ListActiveUserIDs ¶
func (m *MockMemoryService) ListActiveUserIDs(ctx context.Context, lookbackDays int) ([]int32, error)
ListActiveUserIDs returns user IDs with recent activity.
func (*MockMemoryService) SaveEpisode ¶
func (m *MockMemoryService) SaveEpisode(ctx context.Context, episode EpisodicMemory) error
SaveEpisode saves an episodic memory.
func (*MockMemoryService) SearchEpisodes ¶
func (m *MockMemoryService) SearchEpisodes(ctx context.Context, userID int32, query string, limit int) ([]EpisodicMemory, error)
SearchEpisodes searches episodic memories for a specific user.
func (*MockMemoryService) UpdatePreferences ¶
func (m *MockMemoryService) UpdatePreferences(ctx context.Context, userID int32, prefs *UserPreferences) error
UpdatePreferences updates user preferences. prefs must not be nil.
type Service ¶
type Service struct {
// contains filtered or unexported fields
}
- Long-term: PostgreSQL for episodic memories and user preferences.
func NewService ¶
maxShortTermMessages: maximum messages per session (default 10).
func (*Service) ActiveSessionCount ¶
ActiveSessionCount returns the number of active sessions.
func (*Service) AddMessage ¶
AddMessage adds a message to a session.
func (*Service) ClearSession ¶
ClearSession removes all short-term messages from a session.
func (*Service) GetPreferences ¶
GetPreferences retrieves user preferences. Returns default preferences if long-term memory is not available.
func (*Service) GetRecentMessages ¶
func (s *Service) GetRecentMessages(ctx context.Context, sessionID string, limit int) ([]Message, error)
GetRecentMessages retrieves recent messages from a session.
func (*Service) HasLongTermMemory ¶
HasLongTermMemory returns true if long-term memory is configured.
func (*Service) ListActiveUserIDs ¶
ListActiveUserIDs returns user IDs with recent episodic activity. Returns ErrLongTermNotConfigured if long-term memory is not available.
func (*Service) SaveEpisode ¶
func (s *Service) SaveEpisode(ctx context.Context, episode EpisodicMemory) error
SaveEpisode saves an episodic memory. Returns ErrLongTermNotConfigured if long-term memory is not available.
func (*Service) SearchEpisodes ¶
func (s *Service) SearchEpisodes(ctx context.Context, userID int32, query string, limit int) ([]EpisodicMemory, error)
SearchEpisodes searches episodic memories for a specific user. Returns ErrLongTermNotConfigured if long-term memory is not available.
func (*Service) UpdatePreferences ¶
func (s *Service) UpdatePreferences(ctx context.Context, userID int32, prefs *UserPreferences) error
UpdatePreferences updates user preferences. Returns ErrLongTermNotConfigured if long-term memory is not available.
type ShortTermMemory ¶
type ShortTermMemory struct {
// contains filtered or unexported fields
}
ShortTermMemory manages in-memory session messages with a sliding window. Thread-safe for concurrent access.
func NewShortTermMemory ¶
func NewShortTermMemory(maxSize int) *ShortTermMemory
NewShortTermMemory creates a new short-term memory store. maxSize specifies the maximum number of messages to keep per session (default 10).
func (*ShortTermMemory) AddMessage ¶
func (s *ShortTermMemory) AddMessage(sessionID string, msg Message)
AddMessage adds a message to a session.
func (*ShortTermMemory) ClearSession ¶
func (s *ShortTermMemory) ClearSession(sessionID string)
ClearSession removes all messages from a session.
func (*ShortTermMemory) Close ¶
func (s *ShortTermMemory) Close()
Close stops the cleanup goroutine and releases resources. Should be called when the ShortTermMemory is no longer needed.
func (*ShortTermMemory) GetMessages ¶
func (s *ShortTermMemory) GetMessages(sessionID string, limit int) []Message
GetMessages retrieves recent messages from a session. This also updates the session's lastAccess time.
func (*ShortTermMemory) SessionCount ¶
func (s *ShortTermMemory) SessionCount() int
SessionCount returns the number of active sessions.
type UserPreferences ¶
type UserPreferences struct {
CustomSettings map[string]any `json:"custom_settings"`
Timezone string `json:"timezone"`
CommunicationStyle string `json:"communication_style"`
PreferredTimes []string `json:"preferred_times"`
FrequentLocations []string `json:"frequent_locations"`
TagPreferences []string `json:"tag_preferences"`
DefaultDuration int `json:"default_duration"`
}
UserPreferences represents user preferences.
func DefaultPreferences ¶
func DefaultPreferences() *UserPreferences
DefaultPreferences returns default user preferences. Exported to allow single source of truth (Issue #6 fix).