draftrag

package
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Jul 14, 2026 License: Apache-2.0 Imports: 34 Imported by: 0

Documentation

Overview

Package draftrag — публичный API для сборки RAG pipeline.

Example
package main

import (
	"context"
	"fmt"

	"github.com/bzdvdn/draftrag/pkg/draftrag"
)

type mockLLM struct{}

func (m *mockLLM) Health(_ context.Context) error { return nil }
func (m *mockLLM) Generate(_ context.Context, _, _ string) (string, error) {
	return "The capital of France is Paris.", nil
}

type mockEmbedder struct{}

func (m *mockEmbedder) Health(_ context.Context) error { return nil }
func (m *mockEmbedder) Embed(_ context.Context, _ string) ([]float64, error) {
	return []float64{0.1, 0.2, 0.3}, nil
}

func main() {
	ctx := context.Background()
	store := draftrag.NewInMemoryStore()
	llm := &mockLLM{}
	embedder := &mockEmbedder{}

	pipeline, err := draftrag.NewPipeline(store, llm, embedder)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer pipeline.Close() //nolint:errcheck

	pipeline.Index(ctx, []draftrag.Document{ //nolint:errcheck
		{ID: "paris", Content: "Paris is the capital of France."},
	})

	answer, err := pipeline.Answer(ctx, "What is the capital of France?")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println(answer)
}
Output:
The capital of France is Paris.

Index

Examples

Constants

View Source
const (
	LogLevelDebug = domain.LogLevelDebug
	LogLevelInfo  = domain.LogLevelInfo
	LogLevelWarn  = domain.LogLevelWarn
	LogLevelError = domain.LogLevelError
)

Уровни логирования.

View Source
const (
	// HookStageChunking — разбиение документа на чанки (только при наличии Chunker).
	HookStageChunking = domain.HookStageChunking
	// HookStageEmbed — генерация embedding для текста.
	HookStageEmbed = domain.HookStageEmbed
	// HookStageSearch — поиск в VectorStore.
	HookStageSearch = domain.HookStageSearch
	// HookStageGenerate — генерация ответа LLM.
	HookStageGenerate = domain.HookStageGenerate
)
View Source
const (
	// CircuitClosed — нормальная работа.
	CircuitClosed = resilience.CircuitClosed
	// CircuitOpen — блокировка запросов.
	CircuitOpen = resilience.CircuitOpen
	// CircuitHalfOpen — пробное восстановление.
	CircuitHalfOpen = resilience.CircuitHalfOpen
)

Variables

View Source
var (
	// ErrEmptyDocument возвращается, если документ нельзя проиндексировать из-за пустого содержимого.
	ErrEmptyDocument = domain.ErrEmptyDocumentContent
	// ErrEmptyQuery возвращается, если Pipeline.Query* вызывается с пустым вопросом.
	ErrEmptyQuery = domain.ErrEmptyQueryText
	// ErrInvalidTopK возвращается, если topK <= 0.
	ErrInvalidTopK = domain.ErrInvalidQueryTopK
	// ErrInvalidEmbedderConfig возвращается при невалидной конфигурации Embedder.
	// Ошибка предназначена для проверок через errors.Is.
	ErrInvalidEmbedderConfig = errors.New("invalid embedder config")
	// ErrInvalidLLMConfig возвращается при невалидной конфигурации LLMProvider.
	// Ошибка предназначена для проверок через errors.Is.
	ErrInvalidLLMConfig = errors.New("invalid llm config")
	// ErrInvalidChunkerConfig возвращается при невалидной конфигурации Chunker.
	// Ошибка предназначена для проверок через errors.Is.
	ErrInvalidChunkerConfig = errors.New("invalid chunker config")

	// ErrEmbeddingDimensionMismatch возвращается, если размерность embedding-вектора не соответствует ожидаемой.
	//
	// Ошибка предназначена для проверок через errors.Is.
	ErrEmbeddingDimensionMismatch = domain.ErrEmbeddingDimensionMismatch

	// ErrUpdateNotAtomic возвращается, если UpdateDocument завершился частично:
	// старые чанки удалены, а новые не удалось проиндексировать.
	// Vector store не поддерживает транзакции — рекомендуется re-Index.
	//
	// Ошибка предназначена для проверок через errors.Is.
	ErrUpdateNotAtomic = domain.ErrUpdateNotAtomic

	// ErrFiltersNotSupported возвращается, если pipeline-метод с фильтрами вызван,
	// но используемый VectorStore не поддерживает filters capability.
	ErrFiltersNotSupported = errors.New("filters not supported")

	// ErrInvalidVectorStoreConfig возвращается при невалидной конфигурации VectorStore.
	// Ошибка предназначена для проверок через errors.Is.
	ErrInvalidVectorStoreConfig = errors.New("invalid vector store config")

	// ErrNilContext возвращается, если публичный метод вызван с nil context.
	//
	// @sk-task arch-generics#T1.1: sentinel для nil context guard (AC-002)
	ErrNilContext = errors.New("nil context")

	// @sk-task config-management#T1.2: sentinel для неизвестного YAML-ключа (RQ-004, AC-003)
	ErrUnknownConfigKey = errors.New("unknown config key")

	// @sk-task config-management#T1.2: sentinel для отсутствующего обязательного поля (RQ-005, AC-004)
	ErrMissingRequiredField = errors.New("missing required config field")

	// @sk-task sub-query-decomposition#T1.1: sentinel для SubDecompose без decomposer (AC-001, AC-006)
	ErrSubDecomposeNotSupported = errors.New("sub-query decomposition not supported: no QueryDecomposer configured")

	// @sk-task arch-issues#T1.2: sentinel для streaming c tools (AC-004)
	ErrToolsNotSupportedInStream = errors.New("tool calling is not supported in streaming mode")
)

Sentinel errors returned by the public API.

@sk-task hardening-2026q2#T3.1: Переэкспорт sentinel-ошибок в public API (AC-009)

View Source
var DefaultHybridConfig = domain.DefaultHybridConfig

DefaultHybridConfig возвращает конфигурацию гибридного поиска по умолчанию.

View Source
var Diff = domain.Diff

Diff возвращает разницу между двумя снапшотами CostSnapshot.

@sk-task cost-tracking: re-export Diff (AC-007, RQ-007)

View Source
var ErrAllProvidersFailed = resilience.ErrAllProvidersFailed

@sk-task graceful-degradation#T4.1: re-export ErrAllProvidersFailed (RQ-012, AC-003)

View Source
var ErrCircuitOpen = resilience.ErrCircuitOpen

ErrCircuitOpen возвращается, когда circuit breaker в состоянии open.

View Source
var ErrDeleteNotSupported = errors.New("vector store does not support DeleteByParentID")

ErrDeleteNotSupported возвращается, если DeleteDocument вызван, но underlying VectorStore не реализует DocumentStore capability.

View Source
var ErrEmptyDocumentID = errors.New("document ID must not be empty")

ErrEmptyDocumentID возвращается, если передан пустой ID документа.

View Source
var ErrHybridNotSupported = errors.New("vector store does not support hybrid search")

ErrHybridNotSupported возвращается, если метод гибридного поиска вызван, но underlying VectorStore не поддерживает HybridSearcher capability.

View Source
var ErrStreamingNotSupported = errors.New("LLM provider does not support streaming")

ErrStreamingNotSupported возвращается, если streaming-метод вызван, но underlying LLMProvider не поддерживает StreamingLLMProvider capability.

View Source
var IsRetryable = resilience.IsRetryable

IsRetryable проверяет, является ли ошибка retryable. Context cancellation ошибки всегда non-retryable. Ошибки без явного флага считаются retryable (безопасный default для transient errors).

View Source
var WrapNonRetryable = resilience.WrapNonRetryable

WrapNonRetryable помечает ошибку как non-retryable (не будет повторяться).

View Source
var WrapRetryable = resilience.WrapRetryable

WrapRetryable помечает ошибку как retryable.

Functions

func ChromaCollectionExists

func ChromaCollectionExists(ctx context.Context, opts ChromaDBOptions) (bool, error)

ChromaCollectionExists проверяет существование коллекции в ChromaDB.

Использует GET /api/v1/collections/{name}. Возвращает true при статусе 200, false при 404.

func CollectionExists

func CollectionExists(ctx context.Context, opts QdrantOptions) (bool, error)

CollectionExists проверяет существование коллекции в Qdrant.

@ds-task T2.4: Проверка существования коллекции

func CreateChromaCollection

func CreateChromaCollection(ctx context.Context, opts ChromaDBOptions) (string, error)

CreateChromaCollection создаёт коллекцию в ChromaDB и возвращает её UUID.

Использует POST /api/v1/collections с указанным именем и размерностью.

func CreateCollection

func CreateCollection(ctx context.Context, opts QdrantOptions) error

CreateCollection создаёт коллекцию в Qdrant с указанной размерностью.

@ds-task T2.4: Миграция CreateCollection (AC-005)

func CreateWeaviateCollection

func CreateWeaviateCollection(ctx context.Context, opts WeaviateOptions) error

CreateWeaviateCollection создаёт коллекцию (Weaviate class) со схемой для хранения чанков. Если коллекция уже существует — не возвращает ошибку (идемпотентно через 422).

@ds-task T3.1: CreateWeaviateCollection → POST /v1/schema (RQ-007)

func DeleteChromaCollection

func DeleteChromaCollection(ctx context.Context, opts ChromaDBOptions) error

DeleteChromaCollection удаляет коллекцию из ChromaDB.

Использует DELETE /api/v1/collections/{name}. 404 считается успехом (идемпотентность).

func DeleteCollection

func DeleteCollection(ctx context.Context, opts QdrantOptions) error

DeleteCollection удаляет коллекцию из Qdrant.

@ds-task T2.4: Миграция DeleteCollection (AC-005)

func DeleteWeaviateCollection

func DeleteWeaviateCollection(ctx context.Context, opts WeaviateOptions) error

DeleteWeaviateCollection удаляет коллекцию из Weaviate. 404 считается успехом (идемпотентность).

@ds-task T3.1: DeleteWeaviateCollection → DELETE /v1/schema/{class}

func GetChromaCollectionUUID added in v0.2.0

func GetChromaCollectionUUID(ctx context.Context, opts ChromaDBOptions) (string, error)

GetChromaCollectionUUID возвращает UUID коллекции по её имени через GET /api/v1/collections.

func LivenessHandler added in v1.0.0

func LivenessHandler() http.HandlerFunc

LivenessHandler возвращает http.HandlerFunc, который всегда отвечает 200 OK. Не проверяет зависимости — только процесс жив.

func MigratePGVector

func MigratePGVector(ctx context.Context, db *sql.DB, opts PGVectorMigrateOptions) error

MigratePGVector применяет версионированные миграции схемы pgvector-хранилища.

Миграции идемпотентны и безопасны при повторном запуске.

Источник истины DDL — SQL-миграции, встроенные в бинарь через `go:embed` (см. `pkg/draftrag/migrations/pgvector/` и `pkg/draftrag/pgvector_migrations.md`). @sk-task arch-generics#T4.1: nil context guard вместо panic (AC-002)

func ReadinessHandler added in v1.0.0

func ReadinessHandler(hc *HealthChecker) http.HandlerFunc

ReadinessHandler возвращает http.HandlerFunc, который проверяет компоненты через HealthChecker. 200 OK если все здоровы, 503 Service Unavailable + JSON с ошибками если нет.

func SetupPGVector

func SetupPGVector(ctx context.Context, db *sql.DB, opts PGVectorOptions) error

SetupPGVector — backward-compatible alias для MigratePGVector.

Примечание (production): рекомендуется запускать миграции отдельным шагом деплоя (deploy job / init container), т.к. DDL может требовать повышенных прав и занимать заметное время.

Рекомендуемый подход:

  • для production: применять SQL-миграции из `pkg/draftrag/migrations/pgvector/` отдельным шагом деплоя (см. `pkg/draftrag/pgvector_migrations.md`);
  • при необходимости — вызывать SetupPGVector/MigratePGVector явно в deploy job, но не “на старте сервиса”.

Смена IndexMethod или параметров индекса приводит к стратегии drop+create для embedding-индекса (без CONCURRENTLY).

func StartupHandler added in v1.0.0

func StartupHandler(hc *HealthChecker) http.HandlerFunc

StartupHandler возвращает http.HandlerFunc, идентичный ReadinessHandler. Разделение Startup/Readiness позволяет пользователю настроить разную частоту проверок в K8s.

func WeaviateCollectionExists

func WeaviateCollectionExists(ctx context.Context, opts WeaviateOptions) (bool, error)

WeaviateCollectionExists проверяет существование коллекции в Weaviate. Возвращает true при статусе 200, false при 404.

@ds-task T3.1: WeaviateCollectionExists → GET /v1/schema/{class}

Types

type AnthropicLLMConfig added in v1.0.0

type AnthropicLLMConfig struct {
	BaseURL          string   `yaml:"base_url"`
	APIKey           string   `yaml:"api_key"`
	Model            string   `yaml:"model"`
	AnthropicVersion string   `yaml:"anthropic_version"`
	Temperature      *float64 `yaml:"temperature,omitempty"`
	MaxTokens        *int     `yaml:"max_tokens,omitempty"`
}

AnthropicLLMConfig — настройки Anthropic LLM.

type AnthropicLLMOptions

type AnthropicLLMOptions struct {
	// BaseURL — базовый URL Anthropic API (например, "https://api.anthropic.com").
	BaseURL string
	// APIKey — ключ доступа. Передаётся в заголовке X-API-Key.
	APIKey string
	// Model — имя модели. Если пустая строка, используется claude-3-haiku-20240307.
	Model string
	// AnthropicVersion — версия API. Если пустая строка, используется "2023-06-01".
	AnthropicVersion string

	// Temperature — параметр генерации; если nil, параметр не передаётся в запросе.
	Temperature *float64
	// MaxTokens — лимит выходных токенов; если nil, используется дефолт (1024).
	MaxTokens *int

	// HTTPClient — опциональный клиент; если nil, используется http.DefaultClient.
	HTTPClient *http.Client
	// Timeout — опциональный таймаут на один вызов Generate (не применяется к GenerateStream).
	Timeout time.Duration
}

AnthropicLLMOptions задаёт параметры для Anthropic (Claude) LLMProvider.

type BasicChunkerConfig added in v1.0.0

type BasicChunkerConfig struct {
	ChunkSize    int `yaml:"chunk_size"`
	ChunkOverlap int `yaml:"chunk_overlap"`
}

BasicChunkerConfig — настройки BasicChunker.

type BasicChunkerOptions

type BasicChunkerOptions struct {
	// ChunkSize — целевой размер чанка в рунах (обязательно > 0).
	ChunkSize int
	// Overlap — перекрытие между чанками в рунах (обязательно >= 0 и < ChunkSize).
	Overlap int
	// MaxChunks — максимальное количество возвращаемых чанков (>= 0). 0 означает “без лимита”.
	//
	// Если MaxChunks > 0, чанкер возвращает префикс первых MaxChunks чанков (best-effort, без ошибки).
	MaxChunks int
}

BasicChunkerOptions задаёт параметры для базового Chunker.

type BatchReranker added in v1.0.0

type BatchReranker = domain.BatchReranker

BatchReranker — опциональное расширение Reranker для batch-режима.

@sk-task reranker-cross-encoder#T1.1: re-export BatchReranker (AC-008)

type CacheOptions

type CacheOptions struct {
	// MaxSize — максимальное количество записей в LRU-кэше.
	// 0 → 1000.
	MaxSize int

	// Redis — опциональный Redis L2 кэш.
	Redis RedisCacheOptions

	// Logger — опциональный структурированный логгер для событий кэша.
	// nil означает no-op.
	Logger Logger
}

CacheOptions задаёт параметры кэширующего embedder'а.

type CachedEmbedder

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

CachedEmbedder оборачивает Embedder двухуровневым LRU-кэшем. Повторные запросы для одного текста не идут в API. Реализует Embedder.

func NewCachedEmbedder

func NewCachedEmbedder(e Embedder, opts CacheOptions) (*CachedEmbedder, error)

NewCachedEmbedder создаёт кэширующий embedder с in-memory LRU.

embedder := draftrag.NewCachedEmbedder(
    draftrag.NewOpenAICompatibleEmbedder(...),
    draftrag.CacheOptions{MaxSize: 5000},
)
pipeline := draftrag.NewPipeline(store, llm, embedder)

func NewRedisCache added in v0.2.0

func NewRedisCache(ctx context.Context, e Embedder, client RedisClient, ttl time.Duration) (*CachedEmbedder, error)

NewRedisCache creates a CachedEmbedder backed by Redis for embedding cache.

@sk-task hardening-2026q2#T2.1: Публичный wrapper Redis cache с type-alias (AC-005)

func (*CachedEmbedder) Embed

func (c *CachedEmbedder) Embed(ctx context.Context, text string) ([]float64, error)

Embed реализует Embedder.

func (*CachedEmbedder) Health added in v1.0.0

func (c *CachedEmbedder) Health(ctx context.Context) error

@sk-task health-check-interface#T3.5: Health на CachedEmbedder (RQ-005)

func (*CachedEmbedder) Stats

func (c *CachedEmbedder) Stats() EmbedCacheStats

Stats возвращает текущую статистику кэша (попадания, промахи, вытеснения).

type ChromaDBOptions

type ChromaDBOptions struct {
	// BaseURL — базовый URL ChromaDB HTTP API. Если пустая строка, используется http://localhost:8000.
	BaseURL string
	// Collection — имя коллекции (обязательно).
	Collection string
	// CollectionUUID — UUID коллекции (заполняется после CreateChromaCollection,
	// т.к. ChromaDB 0.5+ требует UUID в URL).
	CollectionUUID string
	// Dimension — фиксированная размерность embedding-векторов (обязательно > 0).
	Dimension int
	// HTTP таймаут (по умолчанию: 10s)
	Timeout time.Duration
}

ChromaDBOptions задаёт параметры для ChromaDB VectorStore.

func (ChromaDBOptions) Validate

func (o ChromaDBOptions) Validate() error

Validate проверяет корректность опций.

type ChromaDBStoreConfig added in v1.0.0

type ChromaDBStoreConfig struct {
	BaseURL    string `yaml:"base_url"`
	Collection string `yaml:"collection"`
	Dimension  int    `yaml:"dimension"`
	AuthToken  string `yaml:"auth_token,omitempty"`
}

ChromaDBStoreConfig — настройки ChromaDB.

type Chunk

type Chunk = domain.Chunk

Chunk представляет фрагмент документа.

type Chunker

type Chunker = domain.Chunker

Chunker определяет интерфейс для разбиения документа на чанки.

func NewBasicChunker

func NewBasicChunker(opts BasicChunkerOptions) Chunker

NewBasicChunker создаёт базовую реализацию Chunker.

Реализация детерминированно разбивает Document.Content на чанки фиксированного размера по рунам, поддерживает overlap и ограничение MaxChunks, уважает context отмену.

Ошибки конфигурации возвращаются из Chunk и сопоставимы через errors.Is с ErrInvalidChunkerConfig.

func NewContextualChunker added in v1.0.0

func NewContextualChunker(opts ContextualChunkerOptions) (Chunker, error)

@sk-task contextual-chunking#T1.2: NewContextualChunker constructor + validation (RQ-005)

func NewSemanticChunker added in v1.0.0

func NewSemanticChunker(opts SemanticChunkerOptions) (Chunker, error)

NewSemanticChunker создаёт SemanticChunker. @sk-task chunker-semantic#T2.2: public constructor + validation (AC-007)

type ChunkerConfig added in v1.0.0

type ChunkerConfig struct {
	Type     string                 `yaml:"type"`
	Basic    *BasicChunkerConfig    `yaml:"basic,omitempty"`
	Semantic *SemanticChunkerConfig `yaml:"semantic,omitempty"`
}

ChunkerConfig — настройки чанкера.

type CircuitBreakerConfig added in v1.0.0

type CircuitBreakerConfig struct {
	MaxFailures int           `yaml:"max_failures"`
	ResetAfter  time.Duration `yaml:"reset_after"`
}

CircuitBreakerConfig — настройки circuit breaker.

type CircuitBreakerStats

type CircuitBreakerStats = resilience.Stats

CircuitBreakerStats — статистика circuit breaker.

type CircuitState

type CircuitState = resilience.CircuitState

CircuitState — состояние circuit breaker.

type Closer added in v1.0.0

type Closer = domain.Closer

Closer — опциональная capability для освобождения ресурсов (HTTP-клиенты, соединения).

type ComponentHealth added in v1.0.0

type ComponentHealth struct {
	Name   string
	Health HealthCheckFunc
}

ComponentHealth описывает компонент с именем и функцией проверки.

type Config added in v1.0.0

type Config struct {
	Pipeline     PipelineConfig     `yaml:"pipeline"`
	Store        StoreConfig        `yaml:"store"`
	Embedder     EmbedderConfig     `yaml:"embedder"`
	LLM          LLMConfig          `yaml:"llm"`
	Chunker      ChunkerConfig      `yaml:"chunker,omitempty"`
	Reranker     RerankerConfig     `yaml:"reranker,omitempty"`
	Resilience   ResilienceConfig   `yaml:"resilience,omitempty"`
	CostTracking CostTrackingConfig `yaml:"cost_tracking,omitempty"`
}

Config — единая конфигурация для создания Pipeline.

func LoadConfig added in v1.0.0

func LoadConfig(path string) (Config, error)

LoadConfig загружает конфигурацию из YAML-файла и применяет env-оверрайды. При пустом path Config заполяется только из переменных окружения.

func LoadConfigFromEnv added in v1.0.0

func LoadConfigFromEnv() (Config, error)

LoadConfigFromEnv загружает конфигурацию только из переменных окружения.

type ContextualChunkerOptions added in v1.0.0

type ContextualChunkerOptions struct {
	// Base — базовый Chunker, чьи чанки будут обогащены контекстом (обязательно).
	Base Chunker
	// ContextKey — ключ в Document.Metadata, откуда берётся контекст (обязательно).
	ContextKey string
	// Template — шаблон, содержащий {context} и {content} плейсхолдеры (обязательно).
	Template string
}

ContextualChunkerOptions задаёт параметры контекстного чанкера.

type CostSnapshot added in v1.0.0

type CostSnapshot = domain.CostSnapshot

CostSnapshot — атомарный срез накопленной статистики cost tracker'а.

@sk-task cost-tracking: re-export CostSnapshot (AC-003, RQ-003)

type CostTracker added in v1.0.0

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

CostTracker — прозрачная обёртка над LLMProvider, накапливающая статистику токенов и стоимости LLM-вызовов.

@sk-task cost-tracking: публичный CostTracker (AC-001..004, 006, 007, RQ-001..005, 007)

func NewCostTracker added in v1.0.0

func NewCostTracker(llm LLMProvider, pricing map[string]ModelPricing) *CostTracker

NewCostTracker создаёт CostTracker, оборачивающий llm. Если pricing == nil, расчёт стоимости не производится.

@sk-task cost-tracking: конструктор CostTracker (AC-001, RQ-001)

func (*CostTracker) Checkpoint added in v1.0.0

func (ct *CostTracker) Checkpoint() CostSnapshot

Checkpoint фиксирует текущий absolute срез для последующего расчёта дельты.

@sk-task cost-tracking: Checkpoint (AC-007, RQ-007)

func (*CostTracker) Generate added in v1.0.0

func (ct *CostTracker) Generate(ctx context.Context, systemPrompt, userMessage string) (string, error)

Generate генерирует ответ, подсчитывая токены и стоимость.

@sk-task cost-tracking: Generate (AC-001, RQ-001)

func (*CostTracker) GenerateStream added in v1.0.0

func (ct *CostTracker) GenerateStream(ctx context.Context, systemPrompt, userMessage string) (<-chan string, error)

GenerateStream делегирует вызов underlying StreamingLLMProvider. Подсчитывает вызов (callsCount++), token usage из streaming не извлекается.

@sk-task cost-tracking: GenerateStream (AC-005, T3.4)

func (*CostTracker) Health added in v1.0.0

func (ct *CostTracker) Health(ctx context.Context) error

Health проверяет доступность underlying LLM провайдера.

func (*CostTracker) Reset added in v1.0.0

func (ct *CostTracker) Reset()

Reset сбрасывает все счётчики в ноль.

@sk-task cost-tracking: Reset (AC-004, RQ-004)

func (*CostTracker) SetDefaultModel added in v1.0.0

func (ct *CostTracker) SetDefaultModel(model string)

SetDefaultModel устанавливает имя модели по умолчанию для расчёта стоимости.

func (*CostTracker) Snapshot added in v1.0.0

func (ct *CostTracker) Snapshot() CostSnapshot

Snapshot возвращает текущую накопленную статистику.

@sk-task cost-tracking: Snapshot (AC-003, RQ-003)

type CostTrackingConfig added in v1.0.0

type CostTrackingConfig struct {
	Enabled bool `yaml:"enabled"`
}

CostTrackingConfig — настройки отслеживания стоимости.

type DeepSeekLLMConfig added in v1.0.0

type DeepSeekLLMConfig struct {
	BaseURL string        `yaml:"base_url"`
	APIKey  string        `yaml:"api_key"`
	Model   string        `yaml:"model"`
	Timeout time.Duration `yaml:"timeout"`
}

DeepSeekLLMConfig — настройки DeepSeek LLM.

type DeepSeekLLMOptions added in v0.2.0

type DeepSeekLLMOptions struct {
	// BaseURL — базовый URL DeepSeek API. Если пустая строка, используется https://api.deepseek.com.
	BaseURL string
	// APIKey — ключ доступа. Передаётся в заголовке Authorization: Bearer.
	APIKey string
	// Model — имя модели. Если пустая строка, используется deepseek-chat.
	Model string

	Temperature *float64
	MaxTokens   *int

	HTTPClient *http.Client
	Timeout    time.Duration
}

DeepSeekLLMOptions задаёт параметры для DeepSeek LLMProvider (Chat Completions API). @sk-task llm-providers-mistral-deepseek#T2.2: DeepSeekLLMOptions (AC-002, AC-006)

type Document

type Document = domain.Document

Document представляет документ для индексации в RAG-системе.

type DocumentStore

type DocumentStore = domain.DocumentStore

DocumentStore — опциональная capability VectorStore для удаления по ParentID.

type EmbedCacheStats

type EmbedCacheStats = cache.Stats

EmbedCacheStats — статистика LRU-кэша embedder'а.

type Embedder

type Embedder = domain.Embedder

Embedder определяет интерфейс для преобразования текста в векторное представление.

func NewMistralEmbedder added in v0.2.0

func NewMistralEmbedder(opts MistralEmbedderOptions) Embedder

NewMistralEmbedder создаёт Mistral реализацию Embedder через OpenAI‑совместимый embeddings endpoint.

Ошибки конфигурации возвращаются из Embed и сопоставимы через errors.Is с ErrInvalidEmbedderConfig.

func NewOllamaEmbedder

func NewOllamaEmbedder(opts OllamaEmbedderOptions) Embedder

NewOllamaEmbedder создаёт Ollama реализацию Embedder.

Ошибки конфигурации возвращаются из Embed и сопоставимы через errors.Is с ErrInvalidEmbedderConfig.

func NewOpenAICompatibleEmbedder

func NewOpenAICompatibleEmbedder(opts OpenAICompatibleEmbedderOptions) Embedder

NewOpenAICompatibleEmbedder создаёт OpenAI-compatible реализацию Embedder.

Ошибки конфигурации возвращаются из Embed и сопоставимы через errors.Is с ErrInvalidEmbedderConfig.

func NewTokenBucketEmbedder added in v1.0.0

func NewTokenBucketEmbedder(emb Embedder, opts TokenBucketOptions) (Embedder, error)

@sk-task rate-limiting-llm#T2.2: NewTokenBucketEmbedder (AC-004, RQ-004)

type EmbedderConfig added in v1.0.0

type EmbedderConfig struct {
	Type             string                          `yaml:"type"`
	Ollama           *OllamaEmbedderConfig           `yaml:"ollama,omitempty"`
	OpenAICompatible *OpenAICompatibleEmbedderConfig `yaml:"openai_compatible,omitempty"`
	Mistral          *MistralEmbedderConfig          `yaml:"mistral,omitempty"`
}

EmbedderConfig — настройки эмбеддера.

type ExternalDeps added in v1.0.0

type ExternalDeps struct {
	DB         *sql.DB
	HTTPClient *http.Client
}

ExternalDeps содержит runtime-зависимости, которые не могут быть сериализованы в YAML.

type FallbackLLMProvider added in v1.0.0

type FallbackLLMProvider struct {
	*resilience.FallbackLLMProvider
}

@sk-task graceful-degradation#T4.1: FallbackLLMProvider public wrapper (RQ-008, AC-001)

func NewFallbackLLMProvider added in v1.0.0

func NewFallbackLLMProvider(providers []LLMProvider, logger Logger, hooks Hooks) (*FallbackLLMProvider, error)

@sk-task graceful-degradation#T4.1: NewFallbackLLMProvider public constructor (RQ-008, AC-001)

type FallbackStats added in v1.0.0

type FallbackStats = resilience.FallbackStats

@sk-task graceful-degradation#T4.1: re-export FallbackStats (RQ-011, AC-008)

type FallbackStreamingLLMProvider added in v1.0.0

type FallbackStreamingLLMProvider struct {
	*resilience.FallbackStreamingLLMProvider
}

@sk-task graceful-degradation#T4.1: FallbackStreamingLLMProvider public wrapper (RQ-009, AC-006)

func NewFallbackStreamingLLMProvider added in v1.0.0

func NewFallbackStreamingLLMProvider(providers []StreamingLLMProvider, logger Logger, hooks Hooks) (*FallbackStreamingLLMProvider, error)

@sk-task graceful-degradation#T4.1: NewFallbackStreamingLLMProvider public constructor (RQ-009, AC-006)

type FallbackUsageAwareLLMProvider added in v1.0.0

type FallbackUsageAwareLLMProvider struct {
	*resilience.FallbackUsageAwareLLMProvider
}

@sk-task graceful-degradation#T4.1: FallbackUsageAwareLLMProvider public wrapper (RQ-010, AC-007)

func NewFallbackUsageAwareLLMProvider added in v1.0.0

func NewFallbackUsageAwareLLMProvider(providers []UsageAwareLLMProvider, logger Logger, hooks Hooks) (*FallbackUsageAwareLLMProvider, error)

@sk-task graceful-degradation#T4.1: NewFallbackUsageAwareLLMProvider public constructor (RQ-010, AC-007)

type Handler added in v1.0.0

type Handler = domain.Handler

@sk-task middleware-chain#T2.5: Handler type alias (AC-001, AC-004) Handler — обработчик стадии pipeline в middleware-цепочке.

type HealthCheckFunc added in v1.0.0

type HealthCheckFunc func(context.Context) error

HealthCheckFunc — функция проверки здоровья компонента.

type HealthChecker added in v1.0.0

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

HealthChecker проверяет доступность зарегистрированных компонентов.

func NewHealthChecker added in v1.0.0

func NewHealthChecker(components ...ComponentHealth) *HealthChecker

NewHealthChecker создаёт HealthChecker с указанными компонентами. Паникует при nil *HealthChecker — programmer error.

func (*HealthChecker) Check added in v1.0.0

Check проверяет все зарегистрированные компоненты. Если хотя бы один компонент вернул ошибку — возвращает aggregated error с именами проблемных компонентов. Если контекст истёк — возвращает context.DeadlineExceeded / context.Canceled. Если компонентов нет (nil/empty slice) — всегда nil.

func (*HealthChecker) Register added in v1.0.0

func (hc *HealthChecker) Register(component ComponentHealth)

Register добавляет компонент для проверки.

type HealthCheckerResult added in v1.0.0

type HealthCheckerResult struct {
	Name    string `json:"name"`
	Healthy bool   `json:"healthy"`
	Error   string `json:"error,omitempty"`
}

HealthCheckerResult содержит результат проверки одного компонента.

type HookStage

type HookStage = domain.HookStage

HookStage описывает стадию выполнения pipeline, которую можно наблюдать через Hooks.

type Hooks

type Hooks = domain.Hooks

Hooks — опциональные хуки наблюдаемости для стадий pipeline.

type HybridConfig

type HybridConfig = domain.HybridConfig

HybridConfig задаёт параметры гибридного поиска (BM25 + semantic).

type HybridSearcher

type HybridSearcher = domain.HybridSearcher

HybridSearcher — опциональная capability интерфейса VectorStore, поддерживающая гибридный поиск (BM25 + semantic).

type IndexBatchError

type IndexBatchError = domain.IndexBatchError

IndexBatchError представляет ошибку индексации конкретного документа при batch-индексации.

type IndexBatchResult

type IndexBatchResult = domain.IndexBatchResult

IndexBatchResult содержит результат batch-индексации документов.

type InlineCitation

type InlineCitation = domain.InlineCitation

InlineCitation задаёт соответствие номера цитаты `[n]` и retrieval-источника (чанка).

type LLMConfig added in v1.0.0

type LLMConfig struct {
	Type             string                     `yaml:"type"`
	Ollama           *OllamaLLMConfig           `yaml:"ollama,omitempty"`
	OpenAICompatible *OpenAICompatibleLLMConfig `yaml:"openai_compatible,omitempty"`
	Anthropic        *AnthropicLLMConfig        `yaml:"anthropic,omitempty"`
	DeepSeek         *DeepSeekLLMConfig         `yaml:"deepseek,omitempty"`
	Mistral          *MistralLLMConfig          `yaml:"mistral,omitempty"`
}

LLMConfig — настройки LLM-провайдера.

type LLMProvider

type LLMProvider = domain.LLMProvider

LLMProvider определяет интерфейс для генерации текста через LLM.

func NewAnthropicLLM

func NewAnthropicLLM(opts AnthropicLLMOptions) LLMProvider

NewAnthropicLLM создаёт Anthropic (Claude) реализацию LLMProvider.

Возвращаемый тип реализует также StreamingLLMProvider — используйте type assertion для streaming. Ошибки конфигурации возвращаются из Generate/GenerateStream и сопоставимы через errors.Is с ErrInvalidLLMConfig.

func NewDeepSeekLLM added in v0.2.0

func NewDeepSeekLLM(opts DeepSeekLLMOptions) LLMProvider

NewDeepSeekLLM создаёт DeepSeek реализацию LLMProvider (Chat Completions API).

Возвращаемый тип реализует также StreamingLLMProvider — используйте type assertion для streaming. Ошибки конфигурации возвращаются из Generate/GenerateStream и сопоставимы через errors.Is с ErrInvalidLLMConfig.

func NewMistralLLM added in v0.2.0

func NewMistralLLM(opts MistralLLMOptions) LLMProvider

NewMistralLLM создаёт Mistral реализацию LLMProvider (Chat Completions API).

Возвращаемый тип реализует также StreamingLLMProvider — используйте type assertion для streaming. Ошибки конфигурации возвращаются из Generate/GenerateStream и сопоставимы через errors.Is с ErrInvalidLLMConfig.

func NewOllamaLLM

func NewOllamaLLM(opts OllamaLLMOptions) LLMProvider

NewOllamaLLM создаёт Ollama реализацию LLMProvider.

Ошибки конфигурации возвращаются из Generate и сопоставимы через errors.Is с ErrInvalidLLMConfig.

func NewOpenAICompatibleLLM

func NewOpenAICompatibleLLM(opts OpenAICompatibleLLMOptions) LLMProvider

NewOpenAICompatibleLLM создаёт OpenAI-compatible реализацию LLMProvider (Responses API).

Возвращаемый тип реализует также StreamingLLMProvider — используйте type assertion для streaming. Ошибки конфигурации возвращаются из Generate/GenerateStream и сопоставимы через errors.Is с ErrInvalidLLMConfig.

func NewTokenBucketLLMProvider added in v1.0.0

func NewTokenBucketLLMProvider(llm LLMProvider, opts TokenBucketOptions) (LLMProvider, error)

@sk-task rate-limiting-llm#T1.2: NewTokenBucketLLMProvider (AC-003, RQ-006)

type LLMReranker added in v1.0.0

type LLMReranker = reranker.LLMReranker

LLMReranker — публичный тип, обёртка над internal reranker.

func NewLLMReranker added in v1.0.0

func NewLLMReranker(llm LLMProvider, opts ...LLMRerankerOption) (*LLMReranker, error)

NewLLMReranker создаёт LLM-as-judge reranker. @sk-task reranker-llm-based#T1.2: публичный конструктор с опциями (AC-001, AC-002) llm — обязательный LLMProvider для скоринга чанков. Опции: WithBatchSize, WithPromptTemplate, WithMaxRetries.

Пример:

rr, err := draftrag.NewLLMReranker(llm,
    draftrag.WithBatchSize(5),
    draftrag.WithPromptTemplate("Rate relevance 0-10..."),
)
pipeline, err := draftrag.NewPipelineWithOptions(store, llm, embedder, PipelineOptions{
    Reranker: rr,
})

type LLMRerankerConfig added in v1.0.0

type LLMRerankerConfig struct {
	BatchSize  int `yaml:"batch_size"`
	MaxRetries int `yaml:"max_retries"`
}

LLMRerankerConfig — настройки LLM-реранкера.

type LLMRerankerOption added in v1.0.0

type LLMRerankerOption interface {
	// contains filtered or unexported methods
}

LLMRerankerOption — функциональная опция для NewLLMReranker.

func WithBatchSize added in v1.0.0

func WithBatchSize(n int) LLMRerankerOption

WithBatchSize задаёт количество чанков в одном LLM-вызове (default: 10).

func WithMaxRetries added in v1.0.0

func WithMaxRetries(n int) LLMRerankerOption

WithMaxRetries задаёт количество повторных попыток при ошибке LLM (default: 1).

func WithPromptTemplate added in v1.0.0

func WithPromptTemplate(tmpl string) LLMRerankerOption

WithPromptTemplate задаёт кастомный system prompt для judge.

type LogField

type LogField = domain.LogField

LogField — структурированное поле лог-события.

type LogLevel

type LogLevel = domain.LogLevel

LogLevel — уровень логирования.

type Logger

type Logger = domain.Logger

Logger — опциональный структурированный логгер для инфраструктурных событий (кэш, retry). nil означает no-op.

type MemoryStoreConfig added in v1.0.0

type MemoryStoreConfig struct{}

MemoryStoreConfig — настройки in-memory хранилища.

type MetadataFilter

type MetadataFilter = domain.MetadataFilter

MetadataFilter задаёт условие точного совпадения по полям метаданных документа при поиске. Пустой Fields (nil или len==0) означает «без фильтра». Все условия применяются как AND: все пары ключ-значение из Fields должны совпасть.

@ds-task T3.2: Переэкспортировать MetadataFilter из domain в публичный API (RQ-005, RQ-006, AC-003)

type Middleware added in v1.0.0

type Middleware = domain.Middleware

@sk-task middleware-chain#T2.5: Middleware type alias (AC-001, AC-004) Middleware — функциональный тип для обёртки Handler в middleware-цепочке.

func NewLoggingMiddleware added in v1.0.0

func NewLoggingMiddleware() Middleware

NewLoggingMiddleware создаёт middleware, которая логирует каждую стадию pipeline. Использует стандартный log пакет.

func NewPIIDetectorMiddleware added in v1.0.0

func NewPIIDetectorMiddleware(detector PIIDetector) Middleware

NewPIIDetectorMiddleware создаёт middleware, которая применяет PII redaction к содержимому документов и запросов на каждой стадии pipeline. detector — обязательный детектор PII (см. NewDefaultPIIDetector).

type MilvusStoreConfig added in v1.0.0

type MilvusStoreConfig struct {
	Address    string `yaml:"address"`
	Collection string `yaml:"collection"`
	Dimension  int    `yaml:"dimension"`
	User       string `yaml:"user,omitempty"`
	Password   string `yaml:"password,omitempty"`
}

MilvusStoreConfig — настройки Milvus.

type MistralEmbedderConfig added in v1.0.0

type MistralEmbedderConfig struct {
	APIKey  string        `yaml:"api_key"`
	Model   string        `yaml:"model"`
	Timeout time.Duration `yaml:"timeout"`
}

MistralEmbedderConfig — настройки Mistral embedder.

type MistralEmbedderOptions added in v0.2.0

type MistralEmbedderOptions struct {
	// BaseURL — базовый URL Mistral API. Если пустая строка, используется https://api.mistral.ai.
	BaseURL string
	// APIKey — ключ доступа. Передаётся в заголовке Authorization: Bearer.
	APIKey string
	// Model — имя embeddings модели. Если пустая строка, используется mistral-embed.
	Model string

	// HTTPClient — опциональный клиент; если nil, используется http.DefaultClient.
	HTTPClient *http.Client
	// Timeout — опциональный таймаут на один вызов Embed.
	Timeout time.Duration
}

MistralEmbedderOptions задаёт параметры для Mistral Embedder (embeddings endpoint).

@sk-task llm-providers-mistral-deepseek#T2.3: MistralEmbedderOptions + NewMistralEmbedder (AC-008, AC-011)

type MistralLLMConfig added in v1.0.0

type MistralLLMConfig struct {
	BaseURL string        `yaml:"base_url"`
	APIKey  string        `yaml:"api_key"`
	Model   string        `yaml:"model"`
	Timeout time.Duration `yaml:"timeout"`
}

MistralLLMConfig — настройки Mistral LLM.

type MistralLLMOptions added in v0.2.0

type MistralLLMOptions struct {
	// BaseURL — базовый URL Mistral API. Если пустая строка, используется https://api.mistral.ai.
	BaseURL string
	// APIKey — ключ доступа. Передаётся в заголовке Authorization: Bearer.
	APIKey string
	// Model — имя модели. Если пустая строка, используется mistral-large-latest.
	Model string

	Temperature *float64
	MaxTokens   *int

	HTTPClient *http.Client
	Timeout    time.Duration
}

MistralLLMOptions задаёт параметры для Mistral LLMProvider (Chat Completions API). @sk-task llm-providers-mistral-deepseek#T2.1: MistralLLMOptions (AC-001, AC-006)

type ModelPricing added in v1.0.0

type ModelPricing = domain.ModelPricing

ModelPricing задаёт цены за 1K токенов для модели.

@sk-task cost-tracking: re-export ModelPricing (AC-002, RQ-002)

type OllamaEmbedderConfig added in v1.0.0

type OllamaEmbedderConfig struct {
	BaseURL string        `yaml:"base_url"`
	Model   string        `yaml:"model"`
	APIKey  string        `yaml:"api_key"`
	Timeout time.Duration `yaml:"timeout"`
}

OllamaEmbedderConfig — настройки Ollama embedder.

type OllamaEmbedderOptions

type OllamaEmbedderOptions struct {
	// BaseURL — базовый URL Ollama API. Если пустая строка, используется http://localhost:11434.
	BaseURL string
	// Model — имя модели эмбеддингов (обязательно).
	Model string
	// APIKey — опциональный ключ доступа (для кастомных инстансов с авторизацией).
	APIKey string

	// HTTPClient — опциональный клиент; если nil, используется http.DefaultClient.
	HTTPClient *http.Client
	// Timeout — опциональный таймаут на один вызов Embed.
	Timeout time.Duration
}

OllamaEmbedderOptions задаёт параметры для Ollama Embedder.

type OllamaLLMConfig added in v1.0.0

type OllamaLLMConfig struct {
	BaseURL string        `yaml:"base_url"`
	Model   string        `yaml:"model"`
	APIKey  string        `yaml:"api_key"`
	Timeout time.Duration `yaml:"timeout"`
}

OllamaLLMConfig — настройки Ollama LLM.

type OllamaLLMOptions

type OllamaLLMOptions struct {
	// BaseURL — базовый URL Ollama API. Если пустая строка, используется http://localhost:11434.
	BaseURL string
	// Model — имя модели (обязательно).
	Model string
	// APIKey — опциональный ключ доступа (для кастомных инстансов с авторизацией).
	APIKey string

	// Temperature — параметр генерации; если nil, параметр не передаётся в запросе.
	Temperature *float64
	// MaxTokens — лимит выходных токенов; если nil, параметр не передаётся в запросе.
	MaxTokens *int

	// HTTPClient — опциональный клиент; если nil, используется http.DefaultClient.
	HTTPClient *http.Client
	// Timeout — опциональный таймаут на один вызов Generate.
	Timeout time.Duration
}

OllamaLLMOptions задаёт параметры для Ollama LLMProvider.

type OpenAICompatibleEmbedderConfig added in v1.0.0

type OpenAICompatibleEmbedderConfig struct {
	BaseURL string        `yaml:"base_url"`
	Model   string        `yaml:"model"`
	APIKey  string        `yaml:"api_key"`
	Timeout time.Duration `yaml:"timeout"`
}

OpenAICompatibleEmbedderConfig — настройки OpenAI-совместимого embedder.

type OpenAICompatibleEmbedderOptions

type OpenAICompatibleEmbedderOptions struct {
	// BaseURL — базовый URL провайдера (например, "https://api.openai.com").
	BaseURL string
	// APIKey — ключ доступа. Передаётся в заголовке Authorization: Bearer.
	APIKey string
	// Model — имя embeddings модели.
	Model string

	// HTTPClient — опциональный клиент; если nil, используется http.DefaultClient.
	HTTPClient *http.Client
	// Timeout — опциональный таймаут на один вызов Embed.
	Timeout time.Duration
}

OpenAICompatibleEmbedderOptions задаёт параметры для OpenAI-compatible Embedder.

type OpenAICompatibleLLMConfig added in v1.0.0

type OpenAICompatibleLLMConfig struct {
	BaseURL string        `yaml:"base_url"`
	Model   string        `yaml:"model"`
	APIKey  string        `yaml:"api_key"`
	Timeout time.Duration `yaml:"timeout"`
}

OpenAICompatibleLLMConfig — настройки OpenAI-совместимого LLM.

type OpenAICompatibleLLMOptions

type OpenAICompatibleLLMOptions struct {
	// BaseURL — базовый URL провайдера (например, "https://api.openai.com").
	BaseURL string
	// APIKey — ключ доступа. Передаётся в заголовке Authorization: Bearer.
	APIKey string
	// Model — имя модели.
	Model string

	// Temperature — параметр генерации; если nil, параметр не передаётся в запросе.
	Temperature *float64
	// MaxOutputTokens — лимит выходных токенов; если nil, параметр не передаётся в запросе.
	MaxOutputTokens *int

	// HTTPClient — опциональный клиент; если nil, используется http.DefaultClient.
	HTTPClient *http.Client
	// Timeout — опциональный таймаут на один вызов Generate.
	Timeout time.Duration
}

OpenAICompatibleLLMOptions задаёт параметры для OpenAI-compatible LLMProvider (Responses API).

type PGVectorMigrateOptions

type PGVectorMigrateOptions struct {
	PGVectorOptions

	// DDLTimeout — дефолтный таймаут для миграций, если у ctx нет deadline.
	// Если 0 — используется 30s.
	DDLTimeout time.Duration
}

PGVectorMigrateOptions задаёт параметры миграций схемы pgvector-хранилища.

type PGVectorOptions

type PGVectorOptions struct {
	// TableName — имя таблицы для хранения чанков.
	// В v1 поддерживается только простой идентификатор без схемы (например, "draftrag_chunks").
	TableName string

	// EmbeddingDimension — фиксированная размерность embedding-векторов.
	// При несоответствии размерности операции store возвращают ErrEmbeddingDimensionMismatch (errors.Is).
	EmbeddingDimension int

	// CreateExtension включает попытку выполнить `CREATE EXTENSION IF NOT EXISTS vector`.
	// Часто требует повышенных прав; при отсутствии прав будет возвращена ошибка.
	CreateExtension bool

	// IndexMethod — метод индекса: "ivfflat" (по умолчанию) или "hnsw".
	IndexMethod string

	// Lists — параметр ivfflat индекса (WITH (lists = N)).
	Lists int
}

PGVectorOptions задаёт параметры подключения pgvector-backed VectorStore.

type PGVectorRuntimeOptions

type PGVectorRuntimeOptions struct {
	// SearchTimeout — дефолтный таймаут для Search*, если у ctx нет deadline.
	SearchTimeout time.Duration
	// UpsertTimeout — дефолтный таймаут для Upsert, если у ctx нет deadline.
	UpsertTimeout time.Duration
	// DeleteTimeout — дефолтный таймаут для Delete, если у ctx нет deadline.
	DeleteTimeout time.Duration

	// MaxTopK ограничивает topK в Search*. 0 означает “без лимита”.
	MaxTopK int
	// MaxParentIDs ограничивает количество ParentIDs в фильтре. 0 означает “без лимита”.
	MaxParentIDs int
	// MaxContentBytes ограничивает размер chunk.Content в байтах. 0 означает “без лимита”.
	MaxContentBytes int
}

PGVectorRuntimeOptions задаёт лимиты и таймауты выполнения операций VectorStore.

type PGVectorStoreOptions

type PGVectorStoreOptions struct {
	PGVectorOptions
	Runtime PGVectorRuntimeOptions
}

PGVectorStoreOptions — единый контейнер опций для NewPGVectorStore*.

Объединяет параметры подключения/схемы (PGVectorOptions) и runtime ограничения (PGVectorRuntimeOptions), чтобы публичный API следовал единому options pattern.

type PIICategories added in v1.0.0

type PIICategories = piidetector.PIICategories

@sk-task pii-guardrails#T2.1: re-export PIICategories (RQ-006, AC-004) PIICategories задаёт набор категорий PII для встроенного детектора.

type PIIDetector added in v1.0.0

type PIIDetector = domain.PIIDetector

@sk-task pii-guardrails#T2.1: re-export PIIDetector (RQ-004, AC-005) PIIDetector — интерфейс для обнаружения и цензурирования PII в тексте.

func NewCompositePIIDetector added in v1.0.0

func NewCompositePIIDetector(detectors ...PIIDetector) PIIDetector

NewCompositePIIDetector создаёт PII-детектор, последовательно применяющий переданные детекторы. Полезно для комбинации встроенных и кастомных детекторов.

func NewDefaultPIIDetector added in v1.0.0

func NewDefaultPIIDetector(cats PIICategories) PIIDetector

NewDefaultPIIDetector создаёт составной PII-детектор из встроенных pattern-детекторов согласно включённым категориям.

type ParentDocumentStore added in v1.0.0

type ParentDocumentStore = domain.ParentDocumentStore

@sk-task hierarchical-indices#T4.1: ParentDocumentStore re-export (AC-004, DM-002)

ParentDocumentStore — опциональная capability интерфейса VectorStore для хранения и загрузки родительских документов (parent-сущностей) отдельно от чанков.

type ParentIDFilter

type ParentIDFilter = domain.ParentIDFilter

ParentIDFilter задаёт фильтрацию retrieval по ParentID.

type PgvectorStoreConfig added in v1.0.0

type PgvectorStoreConfig struct {
	TableName          string `yaml:"table_name"`
	EmbeddingDimension int    `yaml:"embedding_dimension"`
	CreateExtension    bool   `yaml:"create_extension"`
	IndexMethod        string `yaml:"index_method"`
	Lists              int    `yaml:"lists"`
}

PgvectorStoreConfig — настройки pgvector.

type PineconeOptions added in v1.0.0

type PineconeOptions struct {
	// APIKey — API ключ Pinecone (обязательно).
	APIKey string
	// Environment — окружение Pinecone (например, "us-east-1-aws").
	Environment string
	// ProjectID — ID проекта в Pinecone.
	ProjectID string
	// IndexName — имя индекса (обязательно).
	IndexName string
	// Dimension — размерность векторов (обязательно, > 0).
	Dimension int
	// Cloud — облачный провайдер (по умолчанию: "aws").
	Cloud string
	// Region — регион облака (по умолчанию: "us-west-2").
	Region string
	// Timeout — HTTP таймаут (по умолчанию: 30s).
	Timeout time.Duration
}

PineconeOptions задаёт опции для подключения к Pinecone.

func (PineconeOptions) Validate added in v1.0.0

func (o PineconeOptions) Validate() error

Validate проверяет корректность опций.

type Pipeline

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

Pipeline — публичный API для композиции core-компонентов draftRAG. Валидация входных данных выполняется здесь (см. errors.go). @sk-task query-rewriting#T2.1: добавлено поле queryRewriter (AC-002) @sk-task pii-guardrails#T2.1: добавлено поле piidetector (RQ-001, RQ-002) @sk-task sub-query-decomposition#T1.2: добавлено поле queryDecomposer (AC-001, AC-006)

func NewPipeline

func NewPipeline(store VectorStore, llm LLMProvider, embedder Embedder) (*Pipeline, error)

NewPipeline создаёт pipeline из зависимостей: VectorStore, LLMProvider и Embedder.

@sk-task arch-quality-pass#T2.2: error return вместо panic (AC-002)

func NewPipelineFromConfig added in v1.0.0

func NewPipelineFromConfig(_ context.Context, cfg Config, deps ...ExternalDeps) (*Pipeline, error)

NewPipelineFromConfig создаёт Pipeline из Config. deps — опциональные runtime-зависимости для store-типов, требующих внешнего подключения (pgvector).

func NewPipelineWithChunker

func NewPipelineWithChunker(store VectorStore, llm LLMProvider, embedder Embedder, chunker Chunker) (*Pipeline, error)

NewPipelineWithChunker создаёт pipeline из зависимостей: VectorStore, LLMProvider, Embedder и Chunker.

При наличии Chunker метод Index будет индексировать чанки (Chunker.Chunk → Embed → Upsert).

@sk-task arch-quality-pass#T2.2: error return вместо panic (AC-002)

func NewPipelineWithOptions

func NewPipelineWithOptions(store VectorStore, llm LLMProvider, embedder Embedder, opts PipelineOptions) (*Pipeline, error)

NewPipelineWithOptions создаёт pipeline из зависимостей: VectorStore, LLMProvider и Embedder, применяя конфигурацию из PipelineOptions.

@sk-task arch-quality-pass#T2.2: error return вместо panic (AC-002)

func (*Pipeline) Answer

func (p *Pipeline) Answer(ctx context.Context, question string) (string, error)

Answer генерирует ответ с topK по умолчанию (PipelineOptions.DefaultTopK или 5). Для расширенных параметров используйте Search builder. @sk-task arch-generics#T2.2: nil context guard + checkCtx вместо panic (AC-002)

func (*Pipeline) Close added in v1.0.0

func (p *Pipeline) Close() error

@sk-task arch-issues#T3.2: Close facade (AC-008)

Example
package main

import (
	"context"
	"fmt"

	"github.com/bzdvdn/draftrag/pkg/draftrag"
)

type mockLLM struct{}

func (m *mockLLM) Health(_ context.Context) error { return nil }
func (m *mockLLM) Generate(_ context.Context, _, _ string) (string, error) {
	return "The capital of France is Paris.", nil
}

type mockEmbedder struct{}

func (m *mockEmbedder) Health(_ context.Context) error { return nil }
func (m *mockEmbedder) Embed(_ context.Context, _ string) ([]float64, error) {
	return []float64{0.1, 0.2, 0.3}, nil
}

func main() {
	ctx := context.Background()
	store := draftrag.NewInMemoryStore()
	llm := &mockLLM{}
	embedder := &mockEmbedder{}

	pipeline, _ := draftrag.NewPipeline(store, llm, embedder)
	pipeline.Index(ctx, []draftrag.Document{{ID: "doc1", Content: "test"}}) //nolint:errcheck

	if err := pipeline.Close(); err != nil {
		fmt.Println("Close error:", err)
		return
	}
	fmt.Println("pipeline closed")
}
Output:
pipeline closed

func (*Pipeline) DeleteDocument

func (p *Pipeline) DeleteDocument(ctx context.Context, docID string) error

DeleteDocument удаляет документ и все его чанки по ID документа (ParentID). Требует, чтобы VectorStore реализовывал DocumentStore capability. Если store не поддерживает — возвращает ErrDeleteNotSupported. @sk-task arch-generics#T2.2: nil context guard + checkCtx вместо panic (AC-002)

func (*Pipeline) Health added in v1.0.0

func (p *Pipeline) Health(ctx context.Context) error

@sk-task arch-issues#T3.2: Health facade (AC-008)

func (*Pipeline) Index

func (p *Pipeline) Index(ctx context.Context, docs []Document) error

Index индексирует документы. @sk-task arch-generics#T2.2: nil context guard + checkCtx вместо panic (AC-002) @sk-task pii-guardrails#T2.2: PII redaction в Index (AC-001, RQ-001)

func (*Pipeline) IndexBatch

func (p *Pipeline) IndexBatch(ctx context.Context, docs []Document, batchSize int) (*IndexBatchResult, error)

IndexBatch индексирует документы параллельно с ограничением concurrency. @sk-task arch-generics#T2.2: nil context guard + checkCtx вместо panic (AC-002)

В отличие от Index, IndexBatch обрабатывает документы конкурентно (batchSize workers) и возвращает partial results: успешно проиндексированные документы и ошибки отдельно. Ошибка одного документа не прерывает обработку остальных.

batchSize — количество параллельных workers (0 → значение по умолчанию 4). Для управления concurrency и rate limiting используйте PipelineOptions.IndexConcurrency, PipelineOptions.IndexBatchRateLimit и PipelineOptions.IndexBatchRateLimitPerWorker при создании Pipeline.

func (*Pipeline) Query

func (p *Pipeline) Query(ctx context.Context, question string) (RetrievalResult, error)

Query выполняет поиск с topK по умолчанию (PipelineOptions.DefaultTopK или 5). Для расширенных параметров используйте Search builder. @sk-task arch-generics#T2.2: nil context guard + checkCtx вместо panic (AC-002) @sk-task pii-guardrails#T2.3: PII redaction в Query (AC-002, RQ-002)

func (*Pipeline) Retrieve

func (p *Pipeline) Retrieve(ctx context.Context, question string, topK int) (RetrievalResult, error)

Retrieve выполняет поиск по вопросу с заданным topK и возвращает RetrievalResult. Удобен для прямой передачи в eval.Run (реализует eval.RetrievalRunner). Для цепочки с фильтрами, hybrid и другими параметрами используйте Search builder.

func (*Pipeline) Search

func (p *Pipeline) Search(question string) *SearchBuilder

Search создаёт SearchBuilder для заданного вопроса. По умолчанию TopK берётся из PipelineOptions.DefaultTopK (или 5). Pipeline-level QueryRewriter передаётся в SearchBuilder, но может быть переопределён через Rewriter().

func (*Pipeline) UpdateDocument

func (p *Pipeline) UpdateDocument(ctx context.Context, doc Document) error

UpdateDocument удаляет все чанки документа и переиндексирует его. Атомарности нет: при ошибке переиндексации старые чанки уже удалены. Требует DocumentStore capability. @sk-task arch-generics#T2.2: nil context guard + checkCtx вместо panic (AC-002)

type PipelineConfig added in v1.0.0

type PipelineConfig struct {
	DefaultTopK                  int     `yaml:"default_top_k"`
	SystemPrompt                 string  `yaml:"system_prompt"`
	MaxContextChars              int     `yaml:"max_context_chars"`
	MaxContextChunks             int     `yaml:"max_context_chunks"`
	DedupByParentID              bool    `yaml:"dedup_by_parent_id"`
	MMREnabled                   bool    `yaml:"mmr_enabled"`
	MMRLambda                    float64 `yaml:"mmr_lambda"`
	MMRCandidatePool             int     `yaml:"mmr_candidate_pool"`
	IndexConcurrency             int     `yaml:"index_concurrency"`
	IndexBatchRateLimit          int     `yaml:"index_batch_rate_limit"`
	IndexBatchRateLimitPerWorker bool    `yaml:"index_batch_rate_limit_per_worker"`
	StreamBufferSize             int     `yaml:"stream_buffer_size"`
}

PipelineConfig — общие настройки Pipeline.

type PipelineOptions

type PipelineOptions struct {
	// DefaultTopK — значение topK по умолчанию для Query/Answer.
	// Если 0, используется значение по умолчанию (5).
	// Если < 0, это считается ошибкой конфигурации (panic).
	DefaultTopK int
	// SystemPrompt — переопределение system prompt для Answer*. Пустая строка означает дефолт v1.
	SystemPrompt string
	// Chunker — опциональный чанкер; если не nil, Index индексирует чанки (Chunk→Embed→Upsert).
	Chunker Chunker
	// Hooks — опциональные хуки наблюдаемости для стадий pipeline (chunking/embed/search/generate).
	// nil означает no-op.
	Hooks Hooks

	// MaxContextChars — лимит размера секции “Контекст:” в prompt для Answer* (в символах).
	// 0 означает “без лимита”.
	MaxContextChars int
	// MaxContextChunks — лимит количества чанков, попадающих в секцию “Контекст:” в prompt для Answer*.
	// 0 означает “без лимита”.
	MaxContextChunks int

	// DedupByParentID включает дедупликацию retrieval sources по ParentID.
	// По умолчанию выключено (backward compatibility).
	DedupByParentID bool

	// MMREnabled включает MMR rerank/selection для retrieval sources (диверсификация контекста).
	// По умолчанию выключено (backward compatibility).
	MMREnabled bool
	// MMRLambda задаёт баланс релевантность/разнообразие в диапазоне [0..1].
	// Если 0 и MMR включён — используется значение по умолчанию (0.5).
	MMRLambda float64
	// MMRCandidatePool задаёт сколько кандидатов запросить у VectorStore до отбора.
	// Если 0 — используется topK запроса.
	MMRCandidatePool int

	// IndexConcurrency задаёт количество workers для параллельной индексации в IndexBatch.
	// Если 0 — используется значение по умолчанию (4).
	IndexConcurrency int
	// IndexBatchRateLimit задаёт максимальное количество вызовов Embed в секунду в IndexBatch.
	// Если 0 — без ограничений.
	IndexBatchRateLimit int
	// IndexBatchRateLimitPerWorker включает per-worker rate-limiter: каждый worker
	// индексирует документы с частотой IndexBatchRateLimit per second (а не весь
	// пул суммарно). Используется, когда у каждого worker'а свой внешний квотный
	// лимит (например, несколько подов с независимыми rate-limits в API-ключе).
	//
	// По умолчанию false (backward-compat): один общий ticker на пул.
	// При IndexBatchRateLimit=10 и IndexConcurrency=4:
	//   - false: 10 embed/sec суммарно на пул.
	//   - true:  10 embed/sec на каждого worker'а, т.е. 40 embed/sec суммарно.
	IndexBatchRateLimitPerWorker bool

	// StreamBufferSize задаёт ёмкость буфера канала streaming-вывода в Answer*.
	// 0 — unbuffered (backward-compat, OQ-2: токен передаётся синхронно).
	// N > 0 — producer (LLM-стрим) может обгонять consumer на N токенов
	// без блокировки; при заполнении буфера producer блокируется на send.
	// Используется для bounded backpressure между LLM и consuming кодом.
	StreamBufferSize int

	// Reranker — опциональный reranker, применяется после retrieval.
	// nil означает "без reranking".
	Reranker Reranker

	// QueryRewriter — опциональный rewriter для переписывания запроса перед retrieval.
	// Поддерживает 1:1 и 1:N режимы. nil означает "без переписывания".
	// При установке per-request Rewriter через SearchBuilder.Rewriter имеет приоритет.
	QueryRewriter QueryRewriter

	// @sk-task pii-guardrails#T2.1: PIIDetector опция (RQ-001, RQ-002)
	// PIIDetector — опциональный детектор PII.
	// Если установлен, содержимое документов и результатов retrieval
	// проходит через детектор для цензурирования PII.
	// nil означает "без обработки" (backward compatible).
	PIIDetector PIIDetector

	// @sk-task sub-query-decomposition#T1.2: QueryDecomposer опция (AC-001, AC-006)
	// QueryDecomposer — опциональный decomposer для разбиения запроса на под-вопросы.
	// Если установлен, Search(...).SubDecompose() включает декомпозицию.
	// nil означает "декомпозиция отключена".
	QueryDecomposer QueryDecomposer

	// @sk-task hierarchical-indices#T4.1: ParentContextEnabled опция (AC-004, RQ-004)
	// ParentContextEnabled включает сохранение parent-документа при индексации
	// и загрузку parent-контекста при retrieval. nil означает "default (true)".
	// При false pipeline пропускает как сохранение parent-сущности при индексации,
	// так и загрузку parent-контента при retrieval (AC-004).
	ParentContextEnabled *bool

	// @sk-task middleware-chain#T2.5: Middleware опция (AC-001, AC-004)
	// Middleware — опциональная цепочка middleware для стадий pipeline.
	// nil или пустой срез означает "без middleware" (backward compatible).
	Middleware []Middleware
}

PipelineOptions задаёт конфигурацию Pipeline.

type QdrantOptions

type QdrantOptions struct {
	// URL адрес Qdrant сервера (по умолчанию: http://localhost:6333)
	URL string
	// Имя коллекции для хранения чанков
	Collection string
	// Размерность векторов (обязательно)
	Dimension int
	// HTTP таймаут (по умолчанию: 10s)
	Timeout time.Duration
}

QdrantOptions задаёт опции для подключения к Qdrant.

@ds-task T2.4: Опции подключения к Qdrant (RQ-003)

func (QdrantOptions) Validate

func (o QdrantOptions) Validate() error

Validate проверяет корректность опций.

type QdrantStoreConfig added in v1.0.0

type QdrantStoreConfig struct {
	URL        string        `yaml:"url"`
	Collection string        `yaml:"collection"`
	Dimension  int           `yaml:"dimension"`
	Timeout    time.Duration `yaml:"timeout"`
}

QdrantStoreConfig — настройки Qdrant.

type QueryDecomposer added in v1.0.0

type QueryDecomposer = domain.QueryDecomposer

@sk-task sub-query-decomposition#T1.2: re-export QueryDecomposer (AC-001, AC-006) QueryDecomposer — опциональный компонент для разбиения запроса на под-вопросы.

func NewLLMQueryDecomposer added in v1.0.0

func NewLLMQueryDecomposer(llm LLMProvider, promptTemplate string) (QueryDecomposer, error)

NewLLMQueryDecomposer создаёт LLM-based реализацию QueryDecomposer. llm — обязательный LLMProvider для генерации под-вопросов. promptTemplate — опциональный system prompt (пустая строка = дефолтный промпт).

func NewRuleQueryDecomposer added in v1.0.0

func NewRuleQueryDecomposer() QueryDecomposer

NewRuleQueryDecomposer создаёт rule-based реализацию QueryDecomposer, разбивающую запрос на под-вопросы по союзам "и", "или" и запятым.

type QueryHistory added in v1.0.0

type QueryHistory = domain.QueryHistory

@sk-task query-rewriting#T2.1: re-export QueryHistory (AC-002) QueryHistory содержит историю предыдущих сообщений диалога.

type QueryRewriter added in v1.0.0

type QueryRewriter = domain.QueryRewriter

@sk-task query-rewriting#T2.1: re-export QueryRewriter (AC-002) QueryRewriter — опциональный компонент для переписывания запроса перед retrieval.

func NewLLMRewriter added in v1.0.0

func NewLLMRewriter(llm LLMProvider, promptTemplate string) (QueryRewriter, error)

NewLLMRewriter создаёт LLM-based реализацию QueryRewriter. llm — обязательный LLMProvider. promptTemplate — опциональный system prompt (пустая строка = дефолтный промпт для однократного переписывания запроса).

Пример:

rw, err := draftrag.NewLLMRewriter(llm, "")
result, err := pipeline.Search("question").Rewriter(rw).Retrieve(ctx)

type RedisCacheClient

type RedisCacheClient interface {
	GetBytes(ctx context.Context, key string) ([]byte, error)
	SetBytes(ctx context.Context, key string, value []byte, ttl time.Duration) error
}

RedisCacheClient — адаптер-интерфейс Redis клиента для кэша эмбеддингов.

Контракт: - GetBytes: если ключ отсутствует, должен возвращать (nil, nil). - ttl == 0 означает запись без TTL.

type RedisCacheOptions

type RedisCacheOptions struct {
	// Client — Redis клиент; nil отключает Redis кэш.
	Client RedisCacheClient

	// TTL — время жизни записей в Redis (0 → без TTL).
	TTL time.Duration

	// KeyPrefix — префикс ключей в Redis ("" → дефолт `draftrag:embedder:`).
	KeyPrefix string
}

RedisCacheOptions задаёт параметры Redis second-level cache.

type RedisClient added in v0.2.0

type RedisClient = cache.RedisClient

RedisClient is a type alias for cache.RedisClient.

type Reranker

type Reranker = domain.Reranker

Reranker — опциональный интерфейс для переранжирования результатов retrieval.

type RerankerConfig added in v1.0.0

type RerankerConfig struct {
	Type string             `yaml:"type"`
	LLM  *LLMRerankerConfig `yaml:"llm,omitempty"`
}

RerankerConfig — настройки reranker.

type ResilienceConfig added in v1.0.0

type ResilienceConfig struct {
	Retry          *RetryConfig          `yaml:"retry,omitempty"`
	CircuitBreaker *CircuitBreakerConfig `yaml:"circuit_breaker,omitempty"`
}

ResilienceConfig — настройки resilience (retry, circuit breaker).

type RetrievalResult

type RetrievalResult = domain.RetrievalResult

RetrievalResult содержит результаты поиска.

type RetryConfig added in v1.0.0

type RetryConfig struct {
	MaxAttempts int           `yaml:"max_attempts"`
	BaseDelay   time.Duration `yaml:"base_delay"`
	MaxDelay    time.Duration `yaml:"max_delay"`
}

RetryConfig — настройки retry.

type RetryEmbedder

type RetryEmbedder struct {
	*resilience.RetryEmbedder
}

RetryEmbedder — обёртка для Embedder с retry и circuit breaker. Реализует Embedder. Дополнительно предоставляет CircuitBreakerState() и CircuitBreakerStats().

func NewRetryEmbedder

func NewRetryEmbedder(e Embedder, opts RetryOptions) *RetryEmbedder

NewRetryEmbedder оборачивает embedder с retry и circuit breaker. Нулевые поля RetryOptions используют defaults (MaxRetries=3, CBThreshold=5).

Для использования в Pipeline передайте как Embedder:

re := draftrag.NewRetryEmbedder(embedder, draftrag.RetryOptions{})
pipeline := draftrag.NewPipeline(store, llm, re)

Для доступа к состоянию circuit breaker используйте type assertion:

if re, ok := embedder.(*draftrag.RetryEmbedder); ok {
    fmt.Println(re.CircuitBreakerState())
}

type RetryLLMProvider

type RetryLLMProvider struct {
	*resilience.RetryLLMProvider
}

RetryLLMProvider — обёртка для LLMProvider с retry и circuit breaker. Реализует LLMProvider. Дополнительно предоставляет CircuitBreakerState() и CircuitBreakerStats().

func NewRetryLLMProvider

func NewRetryLLMProvider(l LLMProvider, opts RetryOptions) *RetryLLMProvider

NewRetryLLMProvider оборачивает LLM провайдер с retry и circuit breaker. Нулевые поля RetryOptions используют defaults (MaxRetries=3, CBThreshold=5).

Для использования в Pipeline передайте как LLMProvider:

rl := draftrag.NewRetryLLMProvider(llm, draftrag.RetryOptions{})
pipeline := draftrag.NewPipeline(store, rl, embedder)

type RetryOptions

type RetryOptions struct {
	// MaxRetries — максимальное количество повторных попыток (0 → 3).
	MaxRetries int

	// BaseDelay — начальная задержка перед первым retry (0 → 100ms).
	BaseDelay time.Duration

	// MaxDelay — максимальная задержка (0 → 10s).
	MaxDelay time.Duration

	// Multiplier — множитель exponential backoff (0 → 2.0).
	Multiplier float64

	// JitterFactor — доля случайной составляющей (0 → 0.25).
	JitterFactor float64

	// CBThreshold — порог ошибок для перехода circuit breaker в open (0 → 5).
	CBThreshold int

	// CBTimeout — время восстановления circuit breaker (0 → 30s).
	CBTimeout time.Duration

	// Logger — опциональный структурированный логгер для retry/CB событий.
	// nil означает no-op.
	Logger Logger
}

RetryOptions объединяет настройки retry и circuit breaker. Нулевые значения используют безопасные defaults.

type RewrittenQuery added in v1.0.0

type RewrittenQuery = domain.RewrittenQuery

@sk-task query-rewriting#T2.1: re-export RewrittenQuery (AC-002) RewrittenQuery представляет результат переформулировки запроса.

type SearchBuilder

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

SearchBuilder накапливает параметры поиска и позволяет выполнить поисковый или генеративный запрос через цепочку вызовов. Создаётся через Pipeline.Search.

Пример:

// Поиск
result, err := pipeline.Search("вопрос").TopK(5).Retrieve(ctx)

// Ответ с фильтром
answer, err := pipeline.Search("вопрос").TopK(5).Filter(f).Answer(ctx)

// Inline цитаты
answer, sources, cits, err := pipeline.Search("вопрос").TopK(5).InlineCite(ctx)

// Streaming
tokens, err := pipeline.Search("вопрос").TopK(5).Stream(ctx)

// С кастомным rewriter
result, err := pipeline.Search("вопрос").Rewriter(myRewriter).Retrieve(ctx)

// С multi-turn историей
history := QueryHistory{Entries: []Message{{Role: "user", Content: "..."}}}
result, err := pipeline.Search("вопрос").Rewriter(rw).History(history).Retrieve(ctx)

@sk-task query-rewriting#T2.1: добавлены поля rewriter и history (AC-002) @sk-task sub-query-decomposition#T1.2: добавлены поля subDecompose и decomposer (AC-001, AC-006) @sk-task arch-issues#T4.4: добавлено поле tools (AC-004)

func (*SearchBuilder) Answer

func (b *SearchBuilder) Answer(ctx context.Context) (string, error)

Answer выполняет RAG-ответ и возвращает строку. Routing делегирован в runAnswer.

@sk-task arch-generics#T2.2: nil context guard + routing delegate через router.execute (AC-001, AC-002)

func (*SearchBuilder) Cite

Cite выполняет RAG-ответ и возвращает ответ + источники (чанки со score). Routing делегирован в runCite.

@sk-task arch-generics#T2.2: nil context guard + routing delegate через router.execute (AC-001, AC-002) @sk-task pii-guardrails#T2.3: PII redaction в Cite (RQ-002)

func (*SearchBuilder) Filter

Filter задаёт AND-фильтр по полям метаданных документа. Совместим только с хранилищами, реализующими VectorStoreWithFilters.

func (*SearchBuilder) History added in v1.0.0

func (b *SearchBuilder) History(h QueryHistory) *SearchBuilder

@sk-task query-rewriting#T2.1: History — multi-turn контекст (AC-004) History задаёт историю диалога для multi-turn переписывания.

func (*SearchBuilder) HyDE

func (b *SearchBuilder) HyDE() *SearchBuilder

HyDE включает Hypothetical Document Embeddings. LLM генерирует гипотетический ответ на вопрос, который используется для embedding-поиска. Улучшает recall для сложных вопросов. Не совместим с Hybrid.

func (*SearchBuilder) Hybrid

func (b *SearchBuilder) Hybrid(cfg HybridConfig) *SearchBuilder

Hybrid включает гибридный поиск (BM25 + semantic) с заданной конфигурацией. Совместим только с хранилищами, реализующими HybridSearcher.

func (*SearchBuilder) InlineCite

InlineCite выполняет RAG-ответ с inline-цитатами `[n]`. LLM расставляет ссылки в тексте; citations содержит только использованные источники. Routing делегирован в runInlineCite.

@sk-task arch-generics#T2.2: nil context guard + routing delegate через router.execute (AC-001, AC-002) @sk-task pii-guardrails#T2.3: PII redaction в InlineCite (RQ-002)

func (*SearchBuilder) MultiQuery

func (b *SearchBuilder) MultiQuery(n int) *SearchBuilder

MultiQuery включает multi-query retrieval: LLM генерирует n перефразировок вопроса, результаты каждого поиска объединяются через Reciprocal Rank Fusion. n=0 → использует дефолт (3).

func (*SearchBuilder) ParentIDs

func (b *SearchBuilder) ParentIDs(ids ...string) *SearchBuilder

ParentIDs ограничивает поиск чанками из указанных документов.

func (*SearchBuilder) Retrieve

func (b *SearchBuilder) Retrieve(ctx context.Context) (RetrievalResult, error)

Retrieve выполняет поиск и возвращает RetrievalResult. Routing (HyDE > MultiQuery > Hybrid > ParentIDs > Filter > basic) делегирован в runRetrieve.

@sk-task arch-generics#T2.2: nil context guard + routing delegate через router.execute (AC-001, AC-002) @sk-task pii-guardrails#T2.3: PII redaction в SearchBuilder.Retrieve (AC-002, RQ-002)

func (*SearchBuilder) Rewriter added in v1.0.0

func (b *SearchBuilder) Rewriter(r QueryRewriter) *SearchBuilder

@sk-task query-rewriting#T2.1: Rewriter — per-request override (AC-002) Rewriter задаёт per-request rewriter, который имеет приоритет над pipeline-level.

func (*SearchBuilder) Stream

func (b *SearchBuilder) Stream(ctx context.Context) (<-chan string, error)

Stream выполняет RAG-ответ через streaming (токен за токеном). Если LLM не поддерживает streaming — возвращает ErrStreamingNotSupported. Routing делегирован в runStream.

@sk-task arch-generics#T2.2: nil context guard + routing delegate через router.execute (AC-001, AC-002)

func (*SearchBuilder) StreamCite

func (b *SearchBuilder) StreamCite(ctx context.Context) (<-chan string, RetrievalResult, []InlineCitation, error)

StreamCite выполняет RAG-ответ через streaming с inline-цитатами. sources и citations готовы сразу (поиск синхронный); токены — асинхронно. Routing делегирован в runStreamInline.

@sk-task arch-generics#T2.2: nil context guard + routing delegate через router.execute (AC-001, AC-002)

func (*SearchBuilder) StreamSources

func (b *SearchBuilder) StreamSources(ctx context.Context) (<-chan string, RetrievalResult, error)

StreamSources выполняет RAG-ответ через streaming с синхронно готовым списком источников. sources готов сразу (поиск синхронный); токены — асинхронно через канал. Routing делегирован в runStreamSources.

@sk-task arch-generics#T2.2: nil context guard + routing delegate через router.execute (AC-001, AC-002)

func (*SearchBuilder) SubDecompose added in v1.0.0

func (b *SearchBuilder) SubDecompose() *SearchBuilder

@sk-task sub-query-decomposition#T1.2: SubDecompose — включает декомпозицию (AC-001, AC-006) SubDecompose включает разбиение запроса на под-вопросы для улучшения recall. Требует настроенного QueryDecomposer на уровне Pipeline или per-request. Если decomposer не настроен, вызов Retrieve/Answer вернёт ErrSubDecomposeNotSupported.

func (*SearchBuilder) ToolHandler added in v1.0.0

func (b *SearchBuilder) ToolHandler(h func(ToolCall) ToolResult) *SearchBuilder

@sk-task arch-issues#T4.4: ToolHandler регистрирует executor для инструментов (AC-004)

func (*SearchBuilder) Tools added in v1.0.0

func (b *SearchBuilder) Tools(tools []ToolDefinition) *SearchBuilder

@sk-task arch-issues#T4.4: Tools добавляет инструменты для LLM tool calling (AC-004)

func (*SearchBuilder) TopK

func (b *SearchBuilder) TopK(n int) *SearchBuilder

TopK задаёт количество возвращаемых чанков.

type SemanticChunkerConfig added in v1.0.0

type SemanticChunkerConfig struct {
	SimilarityThreshold float64 `yaml:"threshold"`
	MinChunkSize        int     `yaml:"min_chunk_size"`
	MaxChunkSize        int     `yaml:"max_chunk_size"`
}

SemanticChunkerConfig — YAML config для SemanticChunker. @sk-task chunker-semantic#T3.1: YAML semantic chunker config (AC-009)

type SemanticChunkerOptions added in v1.0.0

type SemanticChunkerOptions struct {
	// Embedder — интерфейс для вычисления эмбеддингов (обязательно).
	Embedder Embedder
	// SimilarityThreshold — порог косинусного сходства [0.0–1.0].
	// При сходстве ниже порога начинается новый чанк.
	SimilarityThreshold float64
	// MinChunkSize — минимальный размер чанка в символах (>= 0).
	// 0 означает без минимума.
	MinChunkSize int
	// MaxChunkSize — максимальный размер чанка в символах (> MinChunkSize или 0).
	// 0 означает без максимума.
	MaxChunkSize int
}

SemanticChunkerOptions задаёт параметры семантического чанкера.

type StageData added in v1.0.0

type StageData = domain.StageData

@sk-task middleware-chain#T2.5: StageData type alias (AC-001, AC-003) StageData — единая структура данных для всех стадий pipeline.

type StageEndEvent

type StageEndEvent = domain.StageEndEvent

StageEndEvent — событие завершения стадии pipeline.

type StageStartEvent

type StageStartEvent = domain.StageStartEvent

StageStartEvent — событие начала стадии pipeline.

type StoreConfig added in v1.0.0

type StoreConfig struct {
	Type     string               `yaml:"type"`
	Memory   *MemoryStoreConfig   `yaml:"memory,omitempty"`
	Pgvector *PgvectorStoreConfig `yaml:"pgvector,omitempty"`
	Qdrant   *QdrantStoreConfig   `yaml:"qdrant,omitempty"`
	ChromaDB *ChromaDBStoreConfig `yaml:"chromadb,omitempty"`
	Weaviate *WeaviateStoreConfig `yaml:"weaviate,omitempty"`
	Milvus   *MilvusStoreConfig   `yaml:"milvus,omitempty"`
}

StoreConfig — настройки векторного хранилища.

type StreamingLLMProvider

type StreamingLLMProvider = domain.StreamingLLMProvider

StreamingLLMProvider — опциональная capability интерфейса LLMProvider, поддерживающая streaming.

func NewTokenBucketStreamingLLMProvider added in v1.0.0

func NewTokenBucketStreamingLLMProvider(llm StreamingLLMProvider, opts TokenBucketOptions) (StreamingLLMProvider, error)

@sk-task prod-issues#T1.3: NewTokenBucketStreamingLLMProvider (AC-012, RQ-029)

type TokenBucketOptions added in v1.0.0

type TokenBucketOptions struct {
	// TokensPerSecond — максимальное количество запросов в секунду.
	// 0 отключает rate limiting.
	TokensPerSecond float64

	// BurstSize — максимальный burst (пиковый размер очереди токенов).
	// Если 0, используется значение TokensPerSecond.
	BurstSize float64
}

TokenBucketOptions содержит настройки token bucket rate limiter. Нулевые значения (TokensPerSecond=0) отключают rate limiting.

type TokenUsage added in v1.0.0

type TokenUsage = domain.TokenUsage

TokenUsage содержит количество токенов, использованных в одном LLM-вызове.

@sk-task cost-tracking: re-export TokenUsage (AC-001, RQ-001)

type ToolCall added in v1.0.0

type ToolCall = domain.ToolCall

@sk-task arch-issues#T4.4: re-export ToolCall (AC-004)

type ToolCallingLLMProvider added in v1.0.0

type ToolCallingLLMProvider = domain.ToolCallingLLMProvider

@sk-task arch-issues#T4.4: re-export ToolCallingLLMProvider (AC-004)

type ToolDefinition added in v1.0.0

type ToolDefinition = domain.ToolDefinition

@sk-task arch-issues#T4.4: re-export ToolDefinition (AC-004)

type ToolResult added in v1.0.0

type ToolResult = domain.ToolResult

@sk-task arch-issues#T4.4: re-export ToolResult (AC-004)

type TransactionalDocumentStore added in v0.2.0

type TransactionalDocumentStore = domain.TransactionalDocumentStore

TransactionalDocumentStore — опциональная capability VectorStore, поддерживающая транзакционные операции для атомарного UpdateDocument.

@sk-task api-consistency-pass#T1.1: re-export для публичного API (RQ-005, AC-008)

type TransactionalTx added in v0.2.0

type TransactionalTx = domain.TransactionalTx

TransactionalTx — транзакция в транзакционном vector store.

@sk-task api-consistency-pass#T1.1: re-export для публичного API (RQ-005, AC-008)

type UsageAwareLLMProvider added in v1.0.0

type UsageAwareLLMProvider = domain.UsageAwareLLMProvider

UsageAwareLLMProvider — опциональная capability для LLMProvider, возвращающих token usage в API-ответе.

@sk-task cost-tracking: re-export UsageAwareLLMProvider (AC-001, RQ-001)

type UsageAwareStreamingLLMProvider added in v1.0.0

type UsageAwareStreamingLLMProvider = domain.UsageAwareStreamingLLMProvider

UsageAwareStreamingLLMProvider — опциональная capability для StreamingLLMProvider, возвращающих token usage из финального chunk SSE-потока.

@sk-task cost-tracking: re-export UsageAwareStreamingLLMProvider (AC-005, RQ-006, T3.4)

type VectorStore

type VectorStore = domain.VectorStore

VectorStore определяет интерфейс для работы с векторным хранилищем.

func NewChromaDBStore

func NewChromaDBStore(opts ChromaDBOptions) (VectorStore, error)

NewChromaDBStore создаёт ChromaDB-backed реализацию VectorStore.

Коллекция должна быть создана заранее. Для управления коллекциями используйте CreateChromaCollection.

func NewInMemoryStore

func NewInMemoryStore() VectorStore

NewInMemoryStore создаёт in-memory реализацию VectorStore.

Подходит для прототипирования и тестирования — данные хранятся только в памяти и не сохраняются между перезапусками процесса.

func NewPGVectorStore

func NewPGVectorStore(db *sql.DB, opts PGVectorOptions) (VectorStore, error)

NewPGVectorStore создаёт pgvector-backed реализацию VectorStore.

Схема БД не создаётся автоматически: перед использованием примените миграции через MigratePGVector (или SetupPGVector как backward-compatible alias).

Если у ctx нет deadline, операции store используют дефолтные таймауты (см. PGVectorRuntimeOptions). @sk-task arch-generics#T4.1: замена panic на error return

func NewPGVectorStoreWithOptions

func NewPGVectorStoreWithOptions(db *sql.DB, opts PGVectorStoreOptions) (VectorStore, error)

NewPGVectorStoreWithOptions создаёт pgvector-backed реализацию VectorStore (канонический options pattern).

Схема БД не создаётся автоматически: перед использованием примените миграции через MigratePGVector (или SetupPGVector как backward-compatible alias).

Если у ctx нет deadline, операции store используют дефолтные таймауты (см. PGVectorRuntimeOptions). @sk-task arch-generics#T4.1: замена panic на error return (nil db/options/runtime)

func NewPGVectorStoreWithRuntimeOptions deprecated

func NewPGVectorStoreWithRuntimeOptions(db *sql.DB, opts PGVectorOptions, runtime PGVectorRuntimeOptions) (VectorStore, error)

NewPGVectorStoreWithRuntimeOptions создаёт pgvector-backed реализацию VectorStore с runtime ограничениями.

Deprecated: используйте NewPGVectorStoreWithOptions (PGVectorStoreOptions.Runtime). @sk-task arch-generics#T4.1: замена panic на error return

func NewPineconeStore added in v1.0.0

func NewPineconeStore(opts PineconeOptions) (VectorStore, error)

NewPineconeStore создаёт новый VectorStore на базе Pinecone.

func NewQdrantStore

func NewQdrantStore(opts QdrantOptions) (VectorStore, error)

NewQdrantStore создаёт новый VectorStore на базе Qdrant.

@ds-task T2.4: Фабрика NewQdrantStore (RQ-003)

func NewWeaviateStore

func NewWeaviateStore(opts WeaviateOptions) (VectorStore, error)

NewWeaviateStore создаёт Weaviate-backed реализацию VectorStore. При пустом opts.Host возвращает ErrInvalidVectorStoreConfig.

@ds-task T3.1: NewWeaviateStore с валидацией и ErrInvalidVectorStoreConfig (AC-005, RQ-001)

type VectorStoreWithFilters

type VectorStoreWithFilters = domain.VectorStoreWithFilters

VectorStoreWithFilters — опциональная capability интерфейса VectorStore, поддерживающая фильтры.

type WeaviateOptions

type WeaviateOptions struct {
	// Host — адрес Weaviate, например "localhost:8080" (обязательно).
	Host string
	// Scheme — протокол: "http" или "https". По умолчанию "http".
	Scheme string
	// Collection — имя коллекции (Weaviate class, обязательно).
	Collection string
	// APIKey — API ключ для Weaviate Cloud (опционально).
	APIKey string
	// Timeout — HTTP таймаут (по умолчанию 10s).
	Timeout time.Duration
}

WeaviateOptions задаёт параметры подключения к Weaviate.

@ds-task T3.1: Публичный API WeaviateOptions (AC-005, RQ-001)

func (WeaviateOptions) Validate

func (o WeaviateOptions) Validate() error

Validate проверяет корректность опций.

type WeaviateStoreConfig added in v1.0.0

type WeaviateStoreConfig struct {
	Host       string `yaml:"host"`
	Scheme     string `yaml:"scheme"`
	Collection string `yaml:"collection"`
	APIKey     string `yaml:"api_key"`
}

WeaviateStoreConfig — настройки Weaviate.

Directories

Path Synopsis
Package eval provides a small evaluation harness for measuring retrieval quality (Hit@K, MRR, etc).
Package eval provides a small evaluation harness for measuring retrieval quality (Hit@K, MRR, etc).
Package otel содержит готовые OpenTelemetry-хуки для draftRAG pipeline.
Package otel содержит готовые OpenTelemetry-хуки для draftRAG pipeline.
Package reranker provides reranking implementations for improving retrieval quality.
Package reranker provides reranking implementations for improving retrieval quality.
Command routergen generates route handler maps for SearchBuilder.
Command routergen generates route handler maps for SearchBuilder.
Package slogadapter предоставляет адаптер log/slog для domain.Logger.
Package slogadapter предоставляет адаптер log/slog для domain.Logger.

Jump to

Keyboard shortcuts

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