strategy

package
v1.9.21 Latest Latest
Warning

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

Go to latest
Published: Nov 21, 2025 License: Apache-2.0 Imports: 24 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func EmitEvent

func EmitEvent(events chan<- Event, event Event, strategyName string)

EmitEvent sends an event to the events channel using non-blocking send This prevents strategies from hanging if the event channel is full or not ready Automatically sets the StrategyName field in the event

func GetParam

func GetParam[T any](params map[string]any, key string, defaultValue T) T

GetParam gets a parameter from the config Params map. It includes numeric coercion so YAML numbers (which may be decoded as int, int64, uint64 or float64) can be safely read as either int or float64 without callers needing to worry about the concrete type.

func GetParamPtr

func GetParamPtr[T any](params map[string]any, key string) *T

GetParamPtr gets a parameter pointer from the config Params map

func MergeDocPaths

func MergeDocPaths(sharedDocs, strategyDocs []string, parentDir string) []string

MergeDocPaths merges shared docs with strategy-specific docs and makes them absolute

func ResolveDatabasePath

func ResolveDatabasePath(dbCfg latest.RAGDatabaseConfig, parentDir, defaultName string) (string, error)

ResolveDatabasePath resolves database configuration to a path

Types

type BM25Database

type BM25Database struct {
	// contains filtered or unexported fields
}

BM25Database implements a simple database for BM25 strategy (no vectors needed)

func NewBM25Database

func NewBM25Database(dbPath string) (*BM25Database, error)

NewBM25Database creates a new SQLite database for BM25 strategy

func (*BM25Database) AddDocument

func (d *BM25Database) AddDocument(ctx context.Context, doc database.Document) error

AddDocument adds or updates a document (no embedding needed)

func (*BM25Database) Close

func (d *BM25Database) Close() error

Close closes the database connection

func (*BM25Database) DeleteDocumentsByPath

func (d *BM25Database) DeleteDocumentsByPath(ctx context.Context, sourcePath string) error

DeleteDocumentsByPath deletes all documents from a specific source file

func (*BM25Database) DeleteFileMetadata

func (d *BM25Database) DeleteFileMetadata(ctx context.Context, sourcePath string) error

DeleteFileMetadata deletes metadata for a specific source file

func (*BM25Database) GetAllFileMetadata

func (d *BM25Database) GetAllFileMetadata(ctx context.Context) ([]database.FileMetadata, error)

GetAllFileMetadata retrieves metadata for all indexed files

func (*BM25Database) GetDocumentsByPath

func (d *BM25Database) GetDocumentsByPath(ctx context.Context, sourcePath string) ([]database.Document, error)

GetDocumentsByPath retrieves all documents from a specific source file

func (*BM25Database) GetFileMetadata

func (d *BM25Database) GetFileMetadata(ctx context.Context, sourcePath string) (*database.FileMetadata, error)

GetFileMetadata retrieves metadata for a specific source file

func (*BM25Database) SearchSimilar

func (d *BM25Database) SearchSimilar(ctx context.Context, _ []float64, limit int) ([]database.SearchResult, error)

SearchSimilar is not used by BM25 (it does its own scoring) This just returns all documents for BM25 to score

func (*BM25Database) SetFileMetadata

func (d *BM25Database) SetFileMetadata(ctx context.Context, metadata database.FileMetadata) error

SetFileMetadata stores or updates metadata for a source file

type BM25Strategy

type BM25Strategy struct {
	// contains filtered or unexported fields
}

BM25Strategy implements BM25 keyword-based retrieval BM25 is a ranking function that uses term frequency and inverse document frequency

func NewBM25Strategy

func NewBM25Strategy(name string, db database.Database, events chan<- Event, k1, b float64) *BM25Strategy

NewBM25Strategy creates a new BM25-based retrieval strategy

func (*BM25Strategy) CheckAndReindexChangedFiles

func (s *BM25Strategy) CheckAndReindexChangedFiles(ctx context.Context, docPaths []string, chunkSize, chunkOverlap int, respectWordBoundaries bool) error

CheckAndReindexChangedFiles checks for file changes and re-indexes if needed

func (*BM25Strategy) Close

func (s *BM25Strategy) Close() error

Close releases resources

func (*BM25Strategy) Initialize

func (s *BM25Strategy) Initialize(ctx context.Context, docPaths []string, chunkSize, chunkOverlap int, respectWordBoundaries bool) error

Initialize indexes all documents for BM25 retrieval

func (*BM25Strategy) Query

func (s *BM25Strategy) Query(ctx context.Context, query string, numResults int, threshold float64) ([]database.SearchResult, error)

Query searches for relevant documents using BM25 scoring

func (*BM25Strategy) StartFileWatcher

func (s *BM25Strategy) StartFileWatcher(ctx context.Context, docPaths []string, chunkSize, chunkOverlap int, respectWordBoundaries bool) error

StartFileWatcher starts monitoring files for changes

type BuildContext

type BuildContext struct {
	RAGName       string
	ParentDir     string
	SharedDocs    []string
	Models        map[string]latest.ModelConfig
	Env           environment.Provider
	ModelsGateway string
}

BuildContext contains everything needed to build a strategy

type Config

type Config struct {
	Name                  string
	Strategy              Strategy
	Docs                  []string // Merged document paths (shared + strategy-specific)
	Limit                 int      // Max results for this strategy
	Threshold             float64  // Score threshold
	ChunkSize             int      // Chunk size for this strategy
	ChunkOverlap          int      // Chunk overlap for this strategy
	RespectWordBoundaries bool     // Whether to chunk on word boundaries
}

Config contains a strategy and its runtime configuration.

func BuildStrategy

func BuildStrategy(ctx context.Context, cfg latest.RAGStrategyConfig, buildCtx BuildContext, events chan<- Event) (*Config, error)

BuildStrategy builds a strategy from config Explicitly dispatches to the appropriate constructor based on type

func NewBM25FromConfig

func NewBM25FromConfig(ctx context.Context, cfg latest.RAGStrategyConfig, buildCtx BuildContext, events chan<- Event) (*Config, error)

NewBM25FromConfig creates a BM25 strategy from configuration

func NewChunkedEmbeddingsFromConfig

func NewChunkedEmbeddingsFromConfig(ctx context.Context, cfg latest.RAGStrategyConfig, buildCtx BuildContext, events chan<- Event) (*Config, error)

NewChunkedEmbeddingsFromConfig creates a chunked-embeddings strategy from configuration

type Event

type Event struct {
	Type         string
	StrategyName string // Name of the strategy emitting the event
	Message      string
	Progress     *Progress
	Error        error
	TotalTokens  int     // For usage events
	Cost         float64 // For usage events
}

Event represents a strategy lifecycle event. It is the canonical RAG event type used by strategies, the RAG manager, and the runtime.

type Progress

type Progress struct {
	Current int
	Total   int
}

Progress represents progress within a multi-step operation (e.g., indexing).

type Strategy

type Strategy interface {
	// Initialize indexes all documents from the given paths.
	Initialize(ctx context.Context, docPaths []string, chunkSize, chunkOverlap int, respectWordBoundaries bool) error

	// Query searches for relevant documents using the strategy's retrieval method.
	// numResults is the maximum number of candidates to retrieve (before fusion).
	Query(ctx context.Context, query string, numResults int, threshold float64) ([]database.SearchResult, error)

	// CheckAndReindexChangedFiles checks for file changes and re-indexes if needed.
	CheckAndReindexChangedFiles(ctx context.Context, docPaths []string, chunkSize, chunkOverlap int, respectWordBoundaries bool) error

	// StartFileWatcher starts monitoring files for changes.
	StartFileWatcher(ctx context.Context, docPaths []string, chunkSize, chunkOverlap int, respectWordBoundaries bool) error

	// Close releases resources held by the strategy.
	Close() error
}

Strategy defines the interface for different retrieval strategies. This is the canonical definition used by both the strategies and rag packages.

type VectorDatabase

type VectorDatabase struct {
	// contains filtered or unexported fields
}

VectorDatabase implements a SQLite database for vector embeddings storage

func NewVectorDatabase

func NewVectorDatabase(dbPath string, vectorDimensions int) (*VectorDatabase, error)

NewVectorDatabase creates a new SQLite database for vector embeddings

func (*VectorDatabase) AddDocument

func (d *VectorDatabase) AddDocument(ctx context.Context, doc database.Document) error

AddDocument adds or updates a document with its vector embedding

func (*VectorDatabase) Close

func (d *VectorDatabase) Close() error

Close closes the database connection

func (*VectorDatabase) DeleteDocumentsByPath

func (d *VectorDatabase) DeleteDocumentsByPath(ctx context.Context, sourcePath string) error

DeleteDocumentsByPath deletes all documents from a specific source file

func (*VectorDatabase) DeleteFileMetadata

func (d *VectorDatabase) DeleteFileMetadata(ctx context.Context, sourcePath string) error

DeleteFileMetadata deletes metadata for a specific source file

func (*VectorDatabase) GetAllFileMetadata

func (d *VectorDatabase) GetAllFileMetadata(ctx context.Context) ([]database.FileMetadata, error)

GetAllFileMetadata retrieves metadata for all indexed files

func (*VectorDatabase) GetDocumentsByPath

func (d *VectorDatabase) GetDocumentsByPath(ctx context.Context, sourcePath string) ([]database.Document, error)

GetDocumentsByPath retrieves all documents from a specific source file

func (*VectorDatabase) GetFileMetadata

func (d *VectorDatabase) GetFileMetadata(ctx context.Context, sourcePath string) (*database.FileMetadata, error)

GetFileMetadata retrieves metadata for a specific source file

func (*VectorDatabase) SearchSimilar

func (d *VectorDatabase) SearchSimilar(ctx context.Context, queryEmbedding []float64, limit int) ([]database.SearchResult, error)

SearchSimilar finds documents similar to the query embedding using cosine similarity

func (*VectorDatabase) SetFileMetadata

func (d *VectorDatabase) SetFileMetadata(ctx context.Context, metadata database.FileMetadata) error

SetFileMetadata stores or updates metadata for a source file

type VectorStrategy

type VectorStrategy struct {
	// contains filtered or unexported fields
}

VectorStrategy implements retrieval using vector embeddings and similarity search

func NewVectorStrategy

func NewVectorStrategy(name string, embedModel provider.Provider, db database.Database, events chan<- Event, similarityMetric string, batchSize, maxConcurrency int, modelID string, modelsStore modelStore) *VectorStrategy

NewVectorStrategy creates a new vector-based retrieval strategy with models.dev pricing

func (*VectorStrategy) CheckAndReindexChangedFiles

func (s *VectorStrategy) CheckAndReindexChangedFiles(ctx context.Context, docPaths []string, chunkSize, chunkOverlap int, respectWordBoundaries bool) error

CheckAndReindexChangedFiles checks for file changes and re-indexes if needed

func (*VectorStrategy) Close

func (s *VectorStrategy) Close() error

Close releases resources

func (*VectorStrategy) GetIndexingUsage

func (s *VectorStrategy) GetIndexingUsage() (tokens int, cost float64)

GetIndexingUsage returns usage statistics from indexing

func (*VectorStrategy) Initialize

func (s *VectorStrategy) Initialize(ctx context.Context, docPaths []string, chunkSize, chunkOverlap int, respectWordBoundaries bool) error

Initialize indexes all documents

func (*VectorStrategy) Query

func (s *VectorStrategy) Query(ctx context.Context, query string, numResults int, threshold float64) ([]database.SearchResult, error)

Query searches for relevant documents using vector similarity

func (*VectorStrategy) StartFileWatcher

func (s *VectorStrategy) StartFileWatcher(ctx context.Context, docPaths []string, chunkSize, chunkOverlap int, respectWordBoundaries bool) error

StartFileWatcher starts monitoring files for changes

Jump to

Keyboard shortcuts

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