Documentation
¶
Index ¶
- func ConvertJSONToProse(content string, resourceName string) string
- func FormatMemoryContext(memories []*Memory) string
- func IsJSON(content string) bool
- func PreprocessContent(content, mimeType, resourceName string) (string, bool)
- type Chunk
- type CohereEmbeddingProvider
- type CompletionRequest
- type CompletionResponse
- type DocumentChunker
- type EmbeddingProvider
- type EmbeddingRequest
- type EmbeddingResponse
- type ExtractResult
- type GeminiEmbeddingProvider
- type HuggingFaceEmbeddingProvider
- type IngestFileResult
- type JinaEmbeddingProvider
- type Memory
- type MemoryCandidate
- type MemoryManager
- func (m *MemoryManager) ClearAllMemories() error
- func (m *MemoryManager) DeleteFileMemories(fileID string) error
- func (m *MemoryManager) DeleteMCPResource(uri string) (int, error)
- func (m *MemoryManager) DeleteMemoriesBySourceID(sourceID string) (int, error)
- func (m *MemoryManager) DeleteMemory(id string) error
- func (m *MemoryManager) GetAllMemories(threadID string) ([]*Memory, error)
- func (m *MemoryManager) IngestFile(fileID, fileName, mimeType string, data []byte) (*IngestFileResult, error)
- func (m *MemoryManager) IngestMCPResource(serverID int, serverName, uri, name, content, mimeType, contentChecksum string) (*IngestFileResult, error)
- func (m *MemoryManager) LoadMCPChecksums() (map[string]string, error)
- func (m *MemoryManager) RetrieveRelevant(query string, threadID string, limit int) ([]*Memory, error)
- func (m *MemoryManager) ShouldRemember(messages []interface{}, threadID string) ([]MemoryCandidate, error)
- func (m *MemoryManager) ShouldRememberDifferential(messages []interface{}, threadID string) ([]MemoryCandidate, error)
- func (m *MemoryManager) StoreMemories(candidates []MemoryCandidate, threadID, messageID string) error
- type MemorySource
- type Message
- type OllamaEmbeddingProvider
- type OpenAIEmbeddingProvider
- type TextExtractor
- type VoyageEmbeddingProvider
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ConvertJSONToProse ¶
ConvertJSONToProse flattens ANY JSON to readable text lines Universal - works on any JSON structure without pattern matching
func FormatMemoryContext ¶
func PreprocessContent ¶
PreprocessContent converts JSON to plain text for chunking Returns the flattened text and true if conversion happened
Types ¶
type CohereEmbeddingProvider ¶ added in v1.33.41
type CohereEmbeddingProvider struct {
// contains filtered or unexported fields
}
CohereEmbeddingProvider uses Cohere's embedding API
func NewCohereEmbeddingProvider ¶ added in v1.33.41
func NewCohereEmbeddingProvider(model string) (*CohereEmbeddingProvider, error)
NewCohereEmbeddingProvider creates a new Cohere embedding provider
func (*CohereEmbeddingProvider) GenerateBatchEmbeddings ¶ added in v1.33.41
func (p *CohereEmbeddingProvider) GenerateBatchEmbeddings(ctx context.Context, texts []string) ([][]float32, error)
GenerateBatchEmbeddings uses Cohere's batch embedding endpoint
func (*CohereEmbeddingProvider) GenerateEmbedding ¶ added in v1.33.41
func (*CohereEmbeddingProvider) Name ¶ added in v1.33.41
func (p *CohereEmbeddingProvider) Name() string
type CompletionRequest ¶
type CompletionResponse ¶
type CompletionResponse struct {
Choices []struct {
Message struct {
Content string `json:"content"`
} `json:"message"`
} `json:"choices"`
}
type DocumentChunker ¶
type DocumentChunker struct {
MaxChunkSize int // Max characters per chunk
ChunkOverlap int // Overlap between chunks
MinChunkSize int // Minimum chunk size (skip smaller)
}
DocumentChunker splits documents into overlapping chunks for memory storage
func NewDocumentChunker ¶
func NewDocumentChunker(maxSize, overlap int) *DocumentChunker
NewDocumentChunker creates a new chunker with the given settings
func (*DocumentChunker) ChunkText ¶
func (dc *DocumentChunker) ChunkText(content string) []Chunk
ChunkText splits text into overlapping chunks Uses paragraph-aware splitting when possible
type EmbeddingProvider ¶
type EmbeddingProvider interface {
// GenerateEmbedding generates an embedding vector for the given text
GenerateEmbedding(ctx context.Context, text string) ([]float32, error)
// GenerateBatchEmbeddings generates embeddings for multiple texts at once
// Returns embeddings in the same order as input texts
GenerateBatchEmbeddings(ctx context.Context, texts []string) ([][]float32, error)
// Name returns the provider name
Name() string
}
EmbeddingProvider generates embeddings for text
func NewEmbeddingProvider ¶
func NewEmbeddingProvider(cfg *config.MemoryConfig) (EmbeddingProvider, error)
NewEmbeddingProvider creates an embedding provider based on config Supports: openai, gemini, jina, voyage, cohere, huggingface, ollama Provider MUST be explicitly configured - no auto-selection
type EmbeddingRequest ¶
OpenAI API structures
type EmbeddingResponse ¶
type EmbeddingResponse struct {
Data []struct {
Embedding []float32 `json:"embedding"`
} `json:"data"`
}
type ExtractResult ¶
type ExtractResult struct {
Content string // Extracted text content
Title string // Document title if detected
Metadata map[string]interface{} // Additional metadata
}
ExtractResult contains extracted text and metadata
type GeminiEmbeddingProvider ¶ added in v1.33.41
type GeminiEmbeddingProvider struct {
// contains filtered or unexported fields
}
GeminiEmbeddingProvider uses Google's Gemini embedding API
func NewGeminiEmbeddingProvider ¶ added in v1.33.41
func NewGeminiEmbeddingProvider(model string, dimensions int) (*GeminiEmbeddingProvider, error)
NewGeminiEmbeddingProvider creates a new Gemini embedding provider dimensions controls output_dimensionality (0 = use model default: 3072 for gemini-embedding-2)
func (*GeminiEmbeddingProvider) GenerateBatchEmbeddings ¶ added in v1.33.41
func (p *GeminiEmbeddingProvider) GenerateBatchEmbeddings(ctx context.Context, texts []string) ([][]float32, error)
GenerateBatchEmbeddings uses Gemini's batch embedding endpoint
func (*GeminiEmbeddingProvider) GenerateEmbedding ¶ added in v1.33.41
func (*GeminiEmbeddingProvider) Name ¶ added in v1.33.41
func (p *GeminiEmbeddingProvider) Name() string
type HuggingFaceEmbeddingProvider ¶ added in v1.33.41
type HuggingFaceEmbeddingProvider struct {
// contains filtered or unexported fields
}
HuggingFaceEmbeddingProvider uses HuggingFace's Inference API
func NewHuggingFaceEmbeddingProvider ¶ added in v1.33.41
func NewHuggingFaceEmbeddingProvider(model string) (*HuggingFaceEmbeddingProvider, error)
NewHuggingFaceEmbeddingProvider creates a new HuggingFace embedding provider
func (*HuggingFaceEmbeddingProvider) GenerateBatchEmbeddings ¶ added in v1.33.41
func (p *HuggingFaceEmbeddingProvider) GenerateBatchEmbeddings(ctx context.Context, texts []string) ([][]float32, error)
GenerateBatchEmbeddings generates embeddings using HuggingFace Inference API HuggingFace supports batch inputs as an array
func (*HuggingFaceEmbeddingProvider) GenerateEmbedding ¶ added in v1.33.41
func (*HuggingFaceEmbeddingProvider) Name ¶ added in v1.33.41
func (p *HuggingFaceEmbeddingProvider) Name() string
type IngestFileResult ¶
type IngestFileResult struct {
FileID string `json:"file_id"`
FileName string `json:"file_name"`
ChunksCount int `json:"chunks_count"`
ParentID string `json:"parent_id"`
}
IngestFileResult contains the result of file ingestion
type JinaEmbeddingProvider ¶ added in v1.33.41
type JinaEmbeddingProvider struct {
// contains filtered or unexported fields
}
JinaEmbeddingProvider uses Jina AI's embedding API
func NewJinaEmbeddingProvider ¶ added in v1.33.41
func NewJinaEmbeddingProvider(model string) (*JinaEmbeddingProvider, error)
NewJinaEmbeddingProvider creates a new Jina embedding provider
func (*JinaEmbeddingProvider) GenerateBatchEmbeddings ¶ added in v1.33.41
func (p *JinaEmbeddingProvider) GenerateBatchEmbeddings(ctx context.Context, texts []string) ([][]float32, error)
GenerateBatchEmbeddings uses Jina's batch embedding endpoint
func (*JinaEmbeddingProvider) GenerateEmbedding ¶ added in v1.33.41
func (*JinaEmbeddingProvider) Name ¶ added in v1.33.41
func (p *JinaEmbeddingProvider) Name() string
type Memory ¶
type Memory struct {
ID string `json:"id"`
Content string `json:"content"`
Summary string `json:"summary"`
Embedding []float32 `json:"-"` // Don't expose embeddings in JSON
ThreadID string `json:"thread_id"`
MessageID string `json:"message_id,omitempty"`
Importance float64 `json:"importance"`
Category string `json:"category"` // fact, preference, instruction, context, document
Metadata map[string]interface{} `json:"metadata,omitempty"`
CreatedAt time.Time `json:"created_at"`
LastAccessed *time.Time `json:"last_accessed,omitempty"`
AccessCount int `json:"access_count"`
// Source tracking for RAG
Source MemorySource `json:"source"` // chat, file, manual
SourceID string `json:"source_id,omitempty"` // file_id for file source
SourceName string `json:"source_name,omitempty"` // filename for attribution
// Chunking info for document memories
ParentID string `json:"parent_id,omitempty"` // Groups chunks from same document
ChunkIndex int `json:"chunk_index,omitempty"` // Position in document
TotalChunks int `json:"total_chunks,omitempty"` // Total chunks in document
// MCP resource tracking
MCPServerID int `json:"mcp_server_id,omitempty"`
MCPServerName string `json:"mcp_server_name,omitempty"`
ResourceURI string `json:"resource_uri,omitempty"`
}
type MemoryCandidate ¶
type MemoryManager ¶
type MemoryManager struct {
// contains filtered or unexported fields
}
func NewMemoryManager ¶
func NewMemoryManager(db *sql.DB, cfg *config.MemoryConfig, eventBus *events.EventBus) (*MemoryManager, error)
func (*MemoryManager) ClearAllMemories ¶
func (m *MemoryManager) ClearAllMemories() error
func (*MemoryManager) DeleteFileMemories ¶
func (m *MemoryManager) DeleteFileMemories(fileID string) error
DeleteFileMemories removes all memories associated with a file
func (*MemoryManager) DeleteMCPResource ¶
func (m *MemoryManager) DeleteMCPResource(uri string) (int, error)
DeleteMCPResource removes all memories associated with an MCP resource
func (*MemoryManager) DeleteMemoriesBySourceID ¶
func (m *MemoryManager) DeleteMemoriesBySourceID(sourceID string) (int, error)
DeleteMemoriesBySourceID deletes all memories associated with a source (e.g., file_id)
func (*MemoryManager) DeleteMemory ¶
func (m *MemoryManager) DeleteMemory(id string) error
func (*MemoryManager) GetAllMemories ¶
func (m *MemoryManager) GetAllMemories(threadID string) ([]*Memory, error)
func (*MemoryManager) IngestFile ¶
func (m *MemoryManager) IngestFile(fileID, fileName, mimeType string, data []byte) (*IngestFileResult, error)
IngestFile processes a file and stores its content as memories
func (*MemoryManager) IngestMCPResource ¶
func (m *MemoryManager) IngestMCPResource(serverID int, serverName, uri, name, content, mimeType, contentChecksum string) (*IngestFileResult, error)
IngestMCPResource processes an MCP resource and stores its content as memories
func (*MemoryManager) LoadMCPChecksums ¶
func (m *MemoryManager) LoadMCPChecksums() (map[string]string, error)
LoadMCPChecksums loads all MCP resource checksums from the database Returns a map of resource_uri -> content_checksum for efficient lookup
func (*MemoryManager) RetrieveRelevant ¶
func (*MemoryManager) ShouldRemember ¶
func (m *MemoryManager) ShouldRemember(messages []interface{}, threadID string) ([]MemoryCandidate, error)
func (*MemoryManager) ShouldRememberDifferential ¶ added in v1.33.41
func (m *MemoryManager) ShouldRememberDifferential(messages []interface{}, threadID string) ([]MemoryCandidate, error)
ShouldRememberDifferential uses pure RAG-based novelty detection without LLM calls It extracts sentences from messages and checks if they're novel compared to existing memories
func (*MemoryManager) StoreMemories ¶
func (m *MemoryManager) StoreMemories(candidates []MemoryCandidate, threadID, messageID string) error
type MemorySource ¶
type MemorySource string
MemorySource indicates where a memory originated from
const ( SourceChat MemorySource = "chat" // Extracted from conversations SourceFile MemorySource = "file" // Chunked from uploaded documents SourceManual MemorySource = "manual" // Explicitly added by user/agent SourceMCP MemorySource = "mcp" // Synced from MCP resources )
type OllamaEmbeddingProvider ¶
type OllamaEmbeddingProvider struct {
// contains filtered or unexported fields
}
OllamaEmbeddingProvider uses Ollama's embedding API
func NewOllamaEmbeddingProvider ¶
func NewOllamaEmbeddingProvider(baseURL, model string) *OllamaEmbeddingProvider
NewOllamaEmbeddingProvider creates a new Ollama embedding provider
func (*OllamaEmbeddingProvider) GenerateBatchEmbeddings ¶
func (p *OllamaEmbeddingProvider) GenerateBatchEmbeddings(ctx context.Context, texts []string) ([][]float32, error)
GenerateBatchEmbeddings for Ollama falls back to sequential calls since Ollama doesn't support batch embedding natively
func (*OllamaEmbeddingProvider) GenerateEmbedding ¶
func (*OllamaEmbeddingProvider) Name ¶
func (p *OllamaEmbeddingProvider) Name() string
type OpenAIEmbeddingProvider ¶
type OpenAIEmbeddingProvider struct {
// contains filtered or unexported fields
}
OpenAIEmbeddingProvider uses OpenAI's embedding API
func NewOpenAIEmbeddingProvider ¶
func NewOpenAIEmbeddingProvider(model string) (*OpenAIEmbeddingProvider, error)
NewOpenAIEmbeddingProvider creates a new OpenAI embedding provider
func (*OpenAIEmbeddingProvider) GenerateBatchEmbeddings ¶
func (p *OpenAIEmbeddingProvider) GenerateBatchEmbeddings(ctx context.Context, texts []string) ([][]float32, error)
GenerateBatchEmbeddings generates embeddings for multiple texts in a single API call OpenAI supports up to 2048 inputs per request, we use batches of 100 to be safe
func (*OpenAIEmbeddingProvider) GenerateEmbedding ¶
func (*OpenAIEmbeddingProvider) Name ¶
func (p *OpenAIEmbeddingProvider) Name() string
type TextExtractor ¶
type TextExtractor struct{}
TextExtractor extracts text content from various file formats
func NewTextExtractor ¶
func NewTextExtractor() *TextExtractor
NewTextExtractor creates a new text extractor
func (*TextExtractor) CanExtract ¶
func (te *TextExtractor) CanExtract(mimeType string) bool
CanExtract checks if a MIME type is supported for extraction
func (*TextExtractor) Extract ¶
func (te *TextExtractor) Extract(data []byte, mimeType string) (*ExtractResult, error)
Extract extracts text from file data based on MIME type
type VoyageEmbeddingProvider ¶ added in v1.33.41
type VoyageEmbeddingProvider struct {
// contains filtered or unexported fields
}
VoyageEmbeddingProvider uses Voyage AI's embedding API
func NewVoyageEmbeddingProvider ¶ added in v1.33.41
func NewVoyageEmbeddingProvider(model string) (*VoyageEmbeddingProvider, error)
NewVoyageEmbeddingProvider creates a new Voyage embedding provider
func (*VoyageEmbeddingProvider) GenerateBatchEmbeddings ¶ added in v1.33.41
func (p *VoyageEmbeddingProvider) GenerateBatchEmbeddings(ctx context.Context, texts []string) ([][]float32, error)
GenerateBatchEmbeddings uses Voyage's batch embedding endpoint
func (*VoyageEmbeddingProvider) GenerateEmbedding ¶ added in v1.33.41
func (*VoyageEmbeddingProvider) Name ¶ added in v1.33.41
func (p *VoyageEmbeddingProvider) Name() string