rag

package
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Jan 8, 2026 License: GPL-3.0 Imports: 13 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

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

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

func (m *MilvusStore) Query(ctx context.Context, episodeIDs []string) (map[string]bool, error)

Query checks which episode IDs exist in the store

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

type OpenAIEmbedder struct {
	Model     string
	Dimension int
	// contains filtered or unexported fields
}

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

Jump to

Keyboard shortcuts

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