memory

package
v0.80.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 1, 2026 License: MIT Imports: 10 Imported by: 0

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

Constants

This section is empty.

Variables

View Source
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

func (l *LongTermMemory) ListActiveUserIDs(ctx context.Context, lookbackDays int) ([]int32, error)

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

func (m *MockMemoryService) AddMessage(ctx context.Context, sessionID string, msg Message) error

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

func NewService(s *store.Store, maxShortTermMessages int) *Service

maxShortTermMessages: maximum messages per session (default 10).

func (*Service) ActiveSessionCount

func (s *Service) ActiveSessionCount() int

ActiveSessionCount returns the number of active sessions.

func (*Service) AddMessage

func (s *Service) AddMessage(ctx context.Context, sessionID string, msg Message) error

AddMessage adds a message to a session.

func (*Service) ClearSession

func (s *Service) ClearSession(sessionID string)

ClearSession removes all short-term messages from a session.

func (*Service) Close

func (s *Service) Close()

Close releases resources held by the service.

func (*Service) GetPreferences

func (s *Service) GetPreferences(ctx context.Context, userID int32) (*UserPreferences, error)

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

func (s *Service) HasLongTermMemory() bool

HasLongTermMemory returns true if long-term memory is configured.

func (*Service) ListActiveUserIDs

func (s *Service) ListActiveUserIDs(ctx context.Context, lookbackDays int) ([]int32, error)

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).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL