Documentation
¶
Index ¶
- Variables
- func IndexEpisodes(ctx context.Context, episodes []EpisodeSummary, embedder Embedder, ...) error
- type ContextChunk
- type Embedder
- type EmbeddingRecord
- type EpisodeRecord
- type EpisodeSummary
- type IndexOptions
- type MilvusConfig
- type MilvusStore
- func (m *MilvusStore) Close() error
- func (m *MilvusStore) Delete(ctx context.Context, episodeIDs []string) error
- func (m *MilvusStore) Flush(ctx context.Context) error
- func (m *MilvusStore) GetStats(ctx context.Context) (map[string]interface{}, error)
- func (m *MilvusStore) Insert(ctx context.Context, episodes []EpisodeRecord) error
- func (m *MilvusStore) Query(ctx context.Context, episodeIDs []string) (map[string]bool, error)
- func (m *MilvusStore) Search(ctx context.Context, queryVector []float32, topK int, opts *SearchOptions) ([]ContextChunk, error)
- type OpenAIEmbedder
- type Retriever
- func (r *Retriever) RetrieveContextForEpisode(ctx context.Context, episodeID string, topK int, opts *SearchOptions) ([]ContextChunk, error)
- func (r *Retriever) RetrieveContextForQuery(ctx context.Context, query string, topK int, opts *SearchOptions) ([]ContextChunk, error)
- func (r *Retriever) RetrieveContextForQueryWithFilters(ctx context.Context, query string, topK int, episodeIDs []string, ...) ([]ContextChunk, error)
- func (r *Retriever) RetrieveMultipleEpisodes(ctx context.Context, episodeIDs []string, topK int, opts *SearchOptions) (map[string][]ContextChunk, error)
- type SearchOptions
- type VectorStore
Constants ¶
This section is empty.
Variables ¶
var ( ErrEmptyTexts = errors.New("no texts provided for embedding") ErrMissingAPIKey = errors.New("OPENAI_API_KEY environment variable not set") ErrEmbeddingFailed = errors.New("embedding generation failed") )
Common errors for embedding operations
var ( ErrInvalidDimension = errors.New("invalid vector dimension") ErrEmptyRecords = errors.New("no records provided for insertion") ErrConnectionFailed = errors.New("failed to connect to Milvus") ErrInsertFailed = errors.New("failed to insert records") ErrSearchFailed = errors.New("failed to search vectors") ErrMissingMetadata = errors.New("required metadata fields missing") )
Common errors for Milvus operations
Functions ¶
func IndexEpisodes ¶
func IndexEpisodes( ctx context.Context, episodes []EpisodeSummary, embedder Embedder, vectorStore VectorStore, opts IndexOptions, ) error
IndexEpisodes processes episode summaries and stores their embeddings in the vector store This function: 1. Converts each episode summary to text 2. Generates embeddings in batches 3. Stores embeddings with metadata in Milvus 4. Supports re-indexing options (skip existing, force reindex)
Types ¶
type ContextChunk ¶
type ContextChunk struct {
EpisodeID string `json:"episode_id"`
Text string `json:"text"`
Score float32 `json:"score"` // Similarity score (cosine distance)
StartDate time.Time `json:"start_date"`
EndDate time.Time `json:"end_date"`
Authors []string `json:"authors"`
CommitCount int `json:"commit_count"`
FileCount int `json:"file_count"`
Metadata map[string]interface{} `json:"metadata,omitempty"`
}
ContextChunk represents a retrieved context with similarity score Used for RAG to provide relevant episode context to LLMs
type Embedder ¶
type Embedder interface {
// Embed generates embeddings for the provided texts
Embed(ctx context.Context, texts []string) ([]EmbeddingRecord, error)
}
Embedder defines the interface for generating text embeddings
type EmbeddingRecord ¶
type EmbeddingRecord struct {
Text string `json:"text"`
Embedding []float32 `json:"embedding"`
Index int `json:"index"`
Model string `json:"model"`
}
EmbeddingRecord represents a single text embedding with metadata
type EpisodeRecord ¶
type EpisodeRecord struct {
EpisodeID string
Text string
Embedding []float32
StartDate time.Time
EndDate time.Time
Authors []string
CommitCount int
FileCount int
}
EpisodeRecord represents an episode with its embedding and metadata for batch insertion
type EpisodeSummary ¶
type EpisodeSummary struct {
EpisodeID string `json:"episode_id"`
Title string `json:"title,omitempty"`
Summary string `json:"summary"`
StartDate time.Time `json:"start_date,omitempty"`
EndDate time.Time `json:"end_date,omitempty"`
Authors []string `json:"authors,omitempty"`
CommitCount int `json:"commit_count"`
FileCount int `json:"file_count"`
}
EpisodeSummary aggregates metrics and narrative for a cluster episode.
func BuildEpisodeSummary ¶
func BuildEpisodeSummary(episode *cluster.Episode) EpisodeSummary
Transform episodes into EpisodeSummary objects
type IndexOptions ¶
type IndexOptions struct {
// BatchSize determines how many episodes to embed at once
BatchSize int
// ForceReindex will delete and re-insert episodes even if they exist
ForceReindex bool
// SkipExisting will check if episode already exists and skip if present
SkipExisting bool
}
IndexOptions provides configuration for episode indexing
func DefaultIndexOptions ¶
func DefaultIndexOptions() IndexOptions
DefaultIndexOptions returns sensible defaults for indexing
type MilvusConfig ¶
type MilvusConfig struct {
Address string // Milvus server address (e.g., "localhost:19530")
CollectionName string // Name of the collection
Dimension int // Vector dimension (e.g., 3072 for text-embedding-3-large)
IndexType string // Index type (default: "HNSW")
MetricType string // Similarity metric (default: "COSINE")
// HNSW index parameters
M int // HNSW M parameter (default: 16)
EfConstruction int // HNSW efConstruction (default: 256)
}
MilvusConfig holds configuration for Milvus connection and collection
func DefaultMilvusConfig ¶
func DefaultMilvusConfig() MilvusConfig
DefaultMilvusConfig returns default configuration from environment variables
type MilvusStore ¶
type MilvusStore struct {
// contains filtered or unexported fields
}
MilvusStore implements VectorStore interface using Milvus
func NewMilvusStore ¶
func NewMilvusStore(ctx context.Context, config MilvusConfig) (*MilvusStore, error)
NewMilvusStore creates a new Milvus vector store instance Connects to Milvus and ensures the collection exists with proper schema
func (*MilvusStore) Close ¶
func (m *MilvusStore) Close() error
Close releases resources and closes the Milvus connection
func (*MilvusStore) Delete ¶
func (m *MilvusStore) Delete(ctx context.Context, episodeIDs []string) error
Delete removes records by episode IDs
func (*MilvusStore) Flush ¶
func (m *MilvusStore) Flush(ctx context.Context) error
Flush ensures all pending data is persisted to Milvus Call this after a batch of Insert operations
func (*MilvusStore) GetStats ¶
func (m *MilvusStore) GetStats(ctx context.Context) (map[string]interface{}, error)
GetStats returns collection statistics
func (*MilvusStore) Insert ¶
func (m *MilvusStore) Insert(ctx context.Context, episodes []EpisodeRecord) error
Insert efficiently inserts multiple episodes in a single Milvus operation This is much faster than calling Insert multiple times
func (*MilvusStore) Search ¶
func (m *MilvusStore) Search(ctx context.Context, queryVector []float32, topK int, opts *SearchOptions) ([]ContextChunk, error)
Search performs top-K similarity search with optional filtering
type OpenAIEmbedder ¶
OpenAIEmbedder implements the Embedder interface using OpenAI's API
func NewOpenAIEmbedder ¶
func NewOpenAIEmbedder(model string, dimension int) (*OpenAIEmbedder, error)
NewOpenAIEmbedder creates a new OpenAI embedder instance
func (*OpenAIEmbedder) Embed ¶
func (e *OpenAIEmbedder) Embed(ctx context.Context, texts []string) ([]EmbeddingRecord, error)
Embed generates embeddings for the provided texts using OpenAI's API
type Retriever ¶
type Retriever struct {
// contains filtered or unexported fields
}
Retriever provides high-level semantic retrieval for episode embeddings.
func NewRetriever ¶
func NewRetriever(embedder Embedder, vectorStore VectorStore) (*Retriever, error)
NewRetriever creates a new Retriever instance.
func (*Retriever) RetrieveContextForEpisode ¶
func (r *Retriever) RetrieveContextForEpisode( ctx context.Context, episodeID string, topK int, opts *SearchOptions, ) ([]ContextChunk, error)
RetrieveContextForEpisode retrieves topK similar episodes based on a given episode ID.
func (*Retriever) RetrieveContextForQuery ¶
func (r *Retriever) RetrieveContextForQuery( ctx context.Context, query string, topK int, opts *SearchOptions, ) ([]ContextChunk, error)
RetrieveContextForQuery performs semantic search using a free-text query.
func (*Retriever) RetrieveContextForQueryWithFilters ¶
func (r *Retriever) RetrieveContextForQueryWithFilters( ctx context.Context, query string, topK int, episodeIDs []string, repository string, ) ([]ContextChunk, error)
RetrieveContextForQueryWithFilters is a convenience function for semantic search with explicit filter parameters.
func (*Retriever) RetrieveMultipleEpisodes ¶
func (r *Retriever) RetrieveMultipleEpisodes( ctx context.Context, episodeIDs []string, topK int, opts *SearchOptions, ) (map[string][]ContextChunk, error)
RetrieveMultipleEpisodes retrieves context for multiple episode IDs efficiently.
type SearchOptions ¶
type SearchOptions struct {
EpisodeIDs []string `json:"episode_ids,omitempty"` // Filter by specific episode IDs
Repository string `json:"repository,omitempty"` // Filter by repository name
Metadata map[string]interface{} `json:"metadata,omitempty"` // Additional metadata filters
}
SearchOptions provides filtering options for vector search
type VectorStore ¶
type VectorStore interface {
// Insert efficiently inserts multiple episodes in a single operation
Insert(ctx context.Context, episodes []EpisodeRecord) error
// Flush ensures all pending data is persisted
Flush(ctx context.Context) error
// Search performs top-K similarity search with optional filtering
Search(ctx context.Context, queryVector []float32, topK int, opts *SearchOptions) ([]ContextChunk, error)
// Query checks which episode IDs exist in the store
// Returns a map where keys are episode IDs and values indicate existence
Query(ctx context.Context, episodeIDs []string) (map[string]bool, error)
// Delete removes records by episode IDs
Delete(ctx context.Context, episodeIDs []string) error
// GetStats returns collection statistics (record count, index status, etc.)
GetStats(ctx context.Context) (map[string]interface{}, error)
// Close releases resources and closes connections
Close() error
}
VectorStore defines the interface for vector storage and similarity search Implementations should support episode embeddings for RAG pipelines