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 ¶
- Constants
- Variables
- func ChromaCollectionExists(ctx context.Context, opts ChromaDBOptions) (bool, error)
- func CollectionExists(ctx context.Context, opts QdrantOptions) (bool, error)
- func CreateChromaCollection(ctx context.Context, opts ChromaDBOptions) (string, error)
- func CreateCollection(ctx context.Context, opts QdrantOptions) error
- func CreateWeaviateCollection(ctx context.Context, opts WeaviateOptions) error
- func DeleteChromaCollection(ctx context.Context, opts ChromaDBOptions) error
- func DeleteCollection(ctx context.Context, opts QdrantOptions) error
- func DeleteWeaviateCollection(ctx context.Context, opts WeaviateOptions) error
- func GetChromaCollectionUUID(ctx context.Context, opts ChromaDBOptions) (string, error)
- func LivenessHandler() http.HandlerFunc
- func MigratePGVector(ctx context.Context, db *sql.DB, opts PGVectorMigrateOptions) error
- func ReadinessHandler(hc *HealthChecker) http.HandlerFunc
- func SetupPGVector(ctx context.Context, db *sql.DB, opts PGVectorOptions) error
- func StartupHandler(hc *HealthChecker) http.HandlerFunc
- func WeaviateCollectionExists(ctx context.Context, opts WeaviateOptions) (bool, error)
- type AnthropicLLMConfig
- type AnthropicLLMOptions
- type BasicChunkerConfig
- type BasicChunkerOptions
- type BatchReranker
- type CacheOptions
- type CachedEmbedder
- type ChromaDBOptions
- type ChromaDBStoreConfig
- type Chunk
- type Chunker
- type ChunkerConfig
- type CircuitBreakerConfig
- type CircuitBreakerStats
- type CircuitState
- type Closer
- type ComponentHealth
- type Config
- type ContextualChunkerOptions
- type CostSnapshot
- type CostTracker
- func (ct *CostTracker) Checkpoint() CostSnapshot
- func (ct *CostTracker) Generate(ctx context.Context, systemPrompt, userMessage string) (string, error)
- func (ct *CostTracker) GenerateStream(ctx context.Context, systemPrompt, userMessage string) (<-chan string, error)
- func (ct *CostTracker) Health(ctx context.Context) error
- func (ct *CostTracker) Reset()
- func (ct *CostTracker) SetDefaultModel(model string)
- func (ct *CostTracker) Snapshot() CostSnapshot
- type CostTrackingConfig
- type DeepSeekLLMConfig
- type DeepSeekLLMOptions
- type Document
- type DocumentStore
- type EmbedCacheStats
- type Embedder
- type EmbedderConfig
- type ExternalDeps
- type FallbackLLMProvider
- type FallbackStats
- type FallbackStreamingLLMProvider
- type FallbackUsageAwareLLMProvider
- type Handler
- type HealthCheckFunc
- type HealthChecker
- type HealthCheckerResult
- type HookStage
- type Hooks
- type HybridConfig
- type HybridSearcher
- type IndexBatchError
- type IndexBatchResult
- type InlineCitation
- type LLMConfig
- type LLMProvider
- func NewAnthropicLLM(opts AnthropicLLMOptions) LLMProvider
- func NewDeepSeekLLM(opts DeepSeekLLMOptions) LLMProvider
- func NewMistralLLM(opts MistralLLMOptions) LLMProvider
- func NewOllamaLLM(opts OllamaLLMOptions) LLMProvider
- func NewOpenAICompatibleLLM(opts OpenAICompatibleLLMOptions) LLMProvider
- func NewTokenBucketLLMProvider(llm LLMProvider, opts TokenBucketOptions) (LLMProvider, error)
- type LLMReranker
- type LLMRerankerConfig
- type LLMRerankerOption
- type LogField
- type LogLevel
- type Logger
- type MemoryStoreConfig
- type MetadataFilter
- type Middleware
- type MilvusStoreConfig
- type MistralEmbedderConfig
- type MistralEmbedderOptions
- type MistralLLMConfig
- type MistralLLMOptions
- type ModelPricing
- type OllamaEmbedderConfig
- type OllamaEmbedderOptions
- type OllamaLLMConfig
- type OllamaLLMOptions
- type OpenAICompatibleEmbedderConfig
- type OpenAICompatibleEmbedderOptions
- type OpenAICompatibleLLMConfig
- type OpenAICompatibleLLMOptions
- type PGVectorMigrateOptions
- type PGVectorOptions
- type PGVectorRuntimeOptions
- type PGVectorStoreOptions
- type PIICategories
- type PIIDetector
- type ParentDocumentStore
- type ParentIDFilter
- type PgvectorStoreConfig
- type PineconeOptions
- type Pipeline
- func NewPipeline(store VectorStore, llm LLMProvider, embedder Embedder) (*Pipeline, error)
- func NewPipelineFromConfig(_ context.Context, cfg Config, deps ...ExternalDeps) (*Pipeline, error)
- func NewPipelineWithChunker(store VectorStore, llm LLMProvider, embedder Embedder, chunker Chunker) (*Pipeline, error)
- func NewPipelineWithOptions(store VectorStore, llm LLMProvider, embedder Embedder, opts PipelineOptions) (*Pipeline, error)
- func (p *Pipeline) Answer(ctx context.Context, question string) (string, error)
- func (p *Pipeline) Close() error
- func (p *Pipeline) DeleteDocument(ctx context.Context, docID string) error
- func (p *Pipeline) Health(ctx context.Context) error
- func (p *Pipeline) Index(ctx context.Context, docs []Document) error
- func (p *Pipeline) IndexBatch(ctx context.Context, docs []Document, batchSize int) (*IndexBatchResult, error)
- func (p *Pipeline) Query(ctx context.Context, question string) (RetrievalResult, error)
- func (p *Pipeline) Retrieve(ctx context.Context, question string, topK int) (RetrievalResult, error)
- func (p *Pipeline) Search(question string) *SearchBuilder
- func (p *Pipeline) UpdateDocument(ctx context.Context, doc Document) error
- type PipelineConfig
- type PipelineOptions
- type QdrantOptions
- type QdrantStoreConfig
- type QueryDecomposer
- type QueryHistory
- type QueryRewriter
- type RedisCacheClient
- type RedisCacheOptions
- type RedisClient
- type Reranker
- type RerankerConfig
- type ResilienceConfig
- type RetrievalResult
- type RetryConfig
- type RetryEmbedder
- type RetryLLMProvider
- type RetryOptions
- type RewrittenQuery
- type SearchBuilder
- func (b *SearchBuilder) Answer(ctx context.Context) (string, error)
- func (b *SearchBuilder) Cite(ctx context.Context) (string, RetrievalResult, error)
- func (b *SearchBuilder) Filter(f MetadataFilter) *SearchBuilder
- func (b *SearchBuilder) History(h QueryHistory) *SearchBuilder
- func (b *SearchBuilder) HyDE() *SearchBuilder
- func (b *SearchBuilder) Hybrid(cfg HybridConfig) *SearchBuilder
- func (b *SearchBuilder) InlineCite(ctx context.Context) (string, RetrievalResult, []InlineCitation, error)
- func (b *SearchBuilder) MultiQuery(n int) *SearchBuilder
- func (b *SearchBuilder) ParentIDs(ids ...string) *SearchBuilder
- func (b *SearchBuilder) Retrieve(ctx context.Context) (RetrievalResult, error)
- func (b *SearchBuilder) Rewriter(r QueryRewriter) *SearchBuilder
- func (b *SearchBuilder) Stream(ctx context.Context) (<-chan string, error)
- func (b *SearchBuilder) StreamCite(ctx context.Context) (<-chan string, RetrievalResult, []InlineCitation, error)
- func (b *SearchBuilder) StreamSources(ctx context.Context) (<-chan string, RetrievalResult, error)
- func (b *SearchBuilder) SubDecompose() *SearchBuilder
- func (b *SearchBuilder) ToolHandler(h func(ToolCall) ToolResult) *SearchBuilder
- func (b *SearchBuilder) Tools(tools []ToolDefinition) *SearchBuilder
- func (b *SearchBuilder) TopK(n int) *SearchBuilder
- type SemanticChunkerConfig
- type SemanticChunkerOptions
- type StageData
- type StageEndEvent
- type StageStartEvent
- type StoreConfig
- type StreamingLLMProvider
- type TokenBucketOptions
- type TokenUsage
- type ToolCall
- type ToolCallingLLMProvider
- type ToolDefinition
- type ToolResult
- type TransactionalDocumentStore
- type TransactionalTx
- type UsageAwareLLMProvider
- type UsageAwareStreamingLLMProvider
- type VectorStore
- func NewChromaDBStore(opts ChromaDBOptions) (VectorStore, error)
- func NewInMemoryStore() VectorStore
- func NewPGVectorStore(db *sql.DB, opts PGVectorOptions) (VectorStore, error)
- func NewPGVectorStoreWithOptions(db *sql.DB, opts PGVectorStoreOptions) (VectorStore, error)
- func NewPGVectorStoreWithRuntimeOptions(db *sql.DB, opts PGVectorOptions, runtime PGVectorRuntimeOptions) (VectorStore, error)deprecated
- func NewPineconeStore(opts PineconeOptions) (VectorStore, error)
- func NewQdrantStore(opts QdrantOptions) (VectorStore, error)
- func NewWeaviateStore(opts WeaviateOptions) (VectorStore, error)
- type VectorStoreWithFilters
- type WeaviateOptions
- type WeaviateStoreConfig
Examples ¶
Constants ¶
const ( LogLevelDebug = domain.LogLevelDebug LogLevelInfo = domain.LogLevelInfo LogLevelWarn = domain.LogLevelWarn LogLevelError = domain.LogLevelError )
Уровни логирования.
const ( // HookStageChunking — разбиение документа на чанки (только при наличии Chunker). HookStageChunking = domain.HookStageChunking // HookStageEmbed — генерация embedding для текста. HookStageEmbed = domain.HookStageEmbed // HookStageSearch — поиск в VectorStore. HookStageSearch = domain.HookStageSearch // HookStageGenerate — генерация ответа LLM. HookStageGenerate = domain.HookStageGenerate )
const ( // CircuitClosed — нормальная работа. CircuitClosed = resilience.CircuitClosed // CircuitOpen — блокировка запросов. CircuitOpen = resilience.CircuitOpen // CircuitHalfOpen — пробное восстановление. CircuitHalfOpen = resilience.CircuitHalfOpen )
Variables ¶
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)
var DefaultHybridConfig = domain.DefaultHybridConfig
DefaultHybridConfig возвращает конфигурацию гибридного поиска по умолчанию.
var Diff = domain.Diff
Diff возвращает разницу между двумя снапшотами CostSnapshot.
@sk-task cost-tracking: re-export Diff (AC-007, RQ-007)
var ErrAllProvidersFailed = resilience.ErrAllProvidersFailed
@sk-task graceful-degradation#T4.1: re-export ErrAllProvidersFailed (RQ-012, AC-003)
var ErrCircuitOpen = resilience.ErrCircuitOpen
ErrCircuitOpen возвращается, когда circuit breaker в состоянии open.
var ErrDeleteNotSupported = errors.New("vector store does not support DeleteByParentID")
ErrDeleteNotSupported возвращается, если DeleteDocument вызван, но underlying VectorStore не реализует DocumentStore capability.
var ErrEmptyDocumentID = errors.New("document ID must not be empty")
ErrEmptyDocumentID возвращается, если передан пустой ID документа.
var ErrHybridNotSupported = errors.New("vector store does not support hybrid search")
ErrHybridNotSupported возвращается, если метод гибридного поиска вызван, но underlying VectorStore не поддерживает HybridSearcher capability.
var ErrStreamingNotSupported = errors.New("LLM provider does not support streaming")
ErrStreamingNotSupported возвращается, если streaming-метод вызван, но underlying LLMProvider не поддерживает StreamingLLMProvider capability.
var IsRetryable = resilience.IsRetryable
IsRetryable проверяет, является ли ошибка retryable. Context cancellation ошибки всегда non-retryable. Ошибки без явного флага считаются retryable (безопасный default для transient errors).
var WrapNonRetryable = resilience.WrapNonRetryable
WrapNonRetryable помечает ошибку как non-retryable (не будет повторяться).
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 ¶
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 ¶
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) 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 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
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
LoadConfig загружает конфигурацию из YAML-файла и применяет env-оверрайды. При пустом path Config заполяется только из переменных окружения.
func LoadConfigFromEnv ¶ added in v1.0.0
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 DocumentStore ¶
type DocumentStore = domain.DocumentStore
DocumentStore — опциональная capability VectorStore для удаления по ParentID.
type EmbedCacheStats ¶
EmbedCacheStats — статистика LRU-кэша embedder'а.
type 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
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
@sk-task middleware-chain#T2.5: Handler type alias (AC-001, AC-004) Handler — обработчик стадии pipeline в middleware-цепочке.
type HealthCheckFunc ¶ added in v1.0.0
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
func (hc *HealthChecker) Check(ctx context.Context) *HealthCheckerResult
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 ¶
HookStage описывает стадию выполнения pipeline, которую можно наблюдать через Hooks.
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 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
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 ¶
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
@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 ¶
DeleteDocument удаляет документ и все его чанки по ID документа (ParentID). Требует, чтобы VectorStore реализовывал DocumentStore capability. Если store не поддерживает — возвращает ErrDeleteNotSupported. @sk-task arch-generics#T2.2: nil context guard + checkCtx вместо panic (AC-002)
func (*Pipeline) Index ¶
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 ¶
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 ¶
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 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 ¶
func (b *SearchBuilder) Cite(ctx context.Context) (string, RetrievalResult, error)
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 ¶
func (b *SearchBuilder) Filter(f MetadataFilter) *SearchBuilder
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 ¶
func (b *SearchBuilder) InlineCite(ctx context.Context) (string, RetrievalResult, []InlineCitation, error)
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
@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 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 проверяет корректность опций.
Source Files
¶
- anthropic_llm.go
- basic_chunker.go
- cached_embedder.go
- cached_embedder_redis.go
- chromadb.go
- config.go
- contextual_chunker.go
- costtracker.go
- decomposer.go
- deepseek_llm.go
- doc.go
- draftrag.go
- errors.go
- fallback.go
- gen.go
- health.go
- hooks.go
- http_collection_helpers.go
- memory.go
- middleware.go
- mistral_embedder.go
- mistral_llm.go
- ollama_embedder.go
- ollama_llm.go
- openai_compatible_embedder.go
- openai_compatible_llm.go
- pgvector.go
- pgvector_migrate.go
- pgvector_migrations_assets.go
- pii.go
- pinecone.go
- qdrant.go
- ratelimit.go
- reranker_llm.go
- resilience.go
- rewriter.go
- search.go
- search_router.go
- search_routes_gen.go
- search_routing.go
- semantic_chunker.go
- weaviate.go
- wrapper_helpers.go
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. |