Documentation
¶
Index ¶
- Variables
- type Pipeline
- func NewPipeline(store domain.VectorStore, llm domain.LLMProvider, embedder domain.Embedder) (*Pipeline, error)
- func NewPipelineWithChunker(store domain.VectorStore, llm domain.LLMProvider, embedder domain.Embedder, ...) (*Pipeline, error)
- func NewPipelineWithConfig(store domain.VectorStore, llm domain.LLMProvider, embedder domain.Embedder, ...) (*Pipeline, error)
- func (p *Pipeline) Answer(ctx context.Context, question string, topK int) (string, error)
- func (p *Pipeline) AnswerHyDE(ctx context.Context, question string, topK int) (string, error)
- func (p *Pipeline) AnswerHyDEStream(ctx context.Context, question string, topK int) (<-chan string, error)
- func (p *Pipeline) AnswerHyDEStreamWithInlineCitations(ctx context.Context, question string, topK int) (<-chan string, domain.RetrievalResult, []domain.InlineCitation, error)
- func (p *Pipeline) AnswerHyDEStreamWithSources(ctx context.Context, question string, topK int) (<-chan string, domain.RetrievalResult, error)
- func (p *Pipeline) AnswerHyDEWithCitations(ctx context.Context, question string, topK int) (string, domain.RetrievalResult, error)
- func (p *Pipeline) AnswerHyDEWithInlineCitations(ctx context.Context, question string, topK int) (string, domain.RetrievalResult, []domain.InlineCitation, error)
- func (p *Pipeline) AnswerHybrid(ctx context.Context, question string, topK int, config domain.HybridConfig) (string, error)
- func (p *Pipeline) AnswerHybridStream(ctx context.Context, question string, topK int, cfg domain.HybridConfig) (<-chan string, error)
- func (p *Pipeline) AnswerHybridStreamWithInlineCitations(ctx context.Context, question string, topK int, cfg domain.HybridConfig) (<-chan string, domain.RetrievalResult, []domain.InlineCitation, error)
- func (p *Pipeline) AnswerHybridStreamWithSources(ctx context.Context, question string, topK int, cfg domain.HybridConfig) (<-chan string, domain.RetrievalResult, error)
- func (p *Pipeline) AnswerHybridWithCitations(ctx context.Context, question string, topK int, cfg domain.HybridConfig) (string, domain.RetrievalResult, error)
- func (p *Pipeline) AnswerHybridWithInlineCitations(ctx context.Context, question string, topK int, cfg domain.HybridConfig) (string, domain.RetrievalResult, []domain.InlineCitation, error)
- func (p *Pipeline) AnswerMulti(ctx context.Context, question string, n, topK int) (string, error)
- func (p *Pipeline) AnswerMultiStream(ctx context.Context, question string, n, topK int) (<-chan string, error)
- func (p *Pipeline) AnswerMultiStreamWithInlineCitations(ctx context.Context, question string, n, topK int) (<-chan string, domain.RetrievalResult, []domain.InlineCitation, error)
- func (p *Pipeline) AnswerMultiStreamWithSources(ctx context.Context, question string, n, topK int) (<-chan string, domain.RetrievalResult, error)
- func (p *Pipeline) AnswerMultiWithCitations(ctx context.Context, question string, n, topK int) (string, domain.RetrievalResult, error)
- func (p *Pipeline) AnswerMultiWithInlineCitations(ctx context.Context, question string, n, topK int) (string, domain.RetrievalResult, []domain.InlineCitation, error)
- func (p *Pipeline) AnswerStream(ctx context.Context, question string, topK int) (<-chan string, error)
- func (p *Pipeline) AnswerStreamWithInlineCitations(ctx context.Context, question string, topK int) (<-chan string, domain.RetrievalResult, []domain.InlineCitation, error)
- func (p *Pipeline) AnswerStreamWithMetadataFilter(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (<-chan string, error)
- func (p *Pipeline) AnswerStreamWithMetadataFilterWithInlineCitations(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (<-chan string, domain.RetrievalResult, []domain.InlineCitation, error)
- func (p *Pipeline) AnswerStreamWithMetadataFilterWithSources(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (<-chan string, domain.RetrievalResult, error)
- func (p *Pipeline) AnswerStreamWithParentIDs(ctx context.Context, question string, topK int, parentIDs []string) (<-chan string, error)
- func (p *Pipeline) AnswerStreamWithParentIDsWithInlineCitations(ctx context.Context, question string, topK int, parentIDs []string) (<-chan string, domain.RetrievalResult, []domain.InlineCitation, error)
- func (p *Pipeline) AnswerStreamWithParentIDsWithSources(ctx context.Context, question string, topK int, parentIDs []string) (<-chan string, domain.RetrievalResult, error)
- func (p *Pipeline) AnswerStreamWithSources(ctx context.Context, question string, topK int) (<-chan string, domain.RetrievalResult, error)
- func (p *Pipeline) AnswerWithCitations(ctx context.Context, question string, topK int) (string, domain.RetrievalResult, error)
- func (p *Pipeline) AnswerWithCitationsWithMetadataFilter(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (string, domain.RetrievalResult, error)
- func (p *Pipeline) AnswerWithCitationsWithParentIDs(ctx context.Context, question string, topK int, parentIDs []string) (string, domain.RetrievalResult, error)
- func (p *Pipeline) AnswerWithInlineCitations(ctx context.Context, question string, topK int) (string, domain.RetrievalResult, []domain.InlineCitation, error)
- func (p *Pipeline) AnswerWithInlineCitationsWithMetadataFilter(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (string, domain.RetrievalResult, []domain.InlineCitation, error)
- func (p *Pipeline) AnswerWithInlineCitationsWithParentIDs(ctx context.Context, question string, topK int, parentIDs []string) (string, domain.RetrievalResult, []domain.InlineCitation, error)
- func (p *Pipeline) AnswerWithMetadataFilter(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (string, error)
- func (p *Pipeline) AnswerWithParentIDs(ctx context.Context, question string, topK int, parentIDs []string) (string, error)
- func (p *Pipeline) DeleteDocument(ctx context.Context, docID string) error
- func (p *Pipeline) Index(ctx context.Context, docs []domain.Document) error
- func (p *Pipeline) IndexBatch(ctx context.Context, docs []domain.Document, batchSize int) (*domain.IndexBatchResult, error)
- func (p *Pipeline) Query(ctx context.Context, question string, topK int) (domain.RetrievalResult, error)
- func (p *Pipeline) QueryHyDE(ctx context.Context, question string, topK int) (domain.RetrievalResult, error)
- func (p *Pipeline) QueryHybrid(ctx context.Context, question string, topK int, config domain.HybridConfig) (domain.RetrievalResult, error)
- func (p *Pipeline) QueryMulti(ctx context.Context, question string, n, topK int) (domain.RetrievalResult, error)
- func (p *Pipeline) QueryWithMetadataFilter(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (domain.RetrievalResult, error)
- func (p *Pipeline) QueryWithParentIDs(ctx context.Context, question string, topK int, parentIDs []string) (domain.RetrievalResult, error)
- func (p *Pipeline) UpdateDocument(ctx context.Context, doc domain.Document) error
- type PipelineOptions
Constants ¶
This section is empty.
Variables ¶
var ( ErrFiltersNotSupported = errors.New("vector store does not support filters") ErrStreamingNotSupported = errors.New("LLM provider does not support streaming") ErrDeleteNotSupported = errors.New("vector store does not support DeleteByParentID") )
Sentinel errors returned by Pipeline operations.
var ErrHybridNotSupported = errors.New("vector store does not support hybrid search")
ErrHybridNotSupported is returned when a hybrid search method is called but the underlying VectorStore does not implement HybridSearcher.
Functions ¶
This section is empty.
Types ¶
type Pipeline ¶
type Pipeline struct {
// contains filtered or unexported fields
}
Pipeline is the core RAG pipeline coordinating store, LLM, and embedder.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func NewPipeline ¶
func NewPipeline(store domain.VectorStore, llm domain.LLMProvider, embedder domain.Embedder) (*Pipeline, error)
NewPipeline creates a Pipeline with required dependencies.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task arch-quality-pass#T2.1: error return вместо panic для конфигурации (AC-002)
func NewPipelineWithChunker ¶
func NewPipelineWithChunker( store domain.VectorStore, llm domain.LLMProvider, embedder domain.Embedder, chunker domain.Chunker, ) (*Pipeline, error)
NewPipelineWithChunker creates a Pipeline with an optional chunker.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task arch-quality-pass#T2.1: error return вместо panic для конфигурации (AC-002)
func NewPipelineWithConfig ¶
func NewPipelineWithConfig( store domain.VectorStore, llm domain.LLMProvider, embedder domain.Embedder, cfg PipelineOptions, ) (*Pipeline, error)
NewPipelineWithConfig creates a Pipeline with the given configuration.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task arch-quality-pass#T2.1: error return вместо panic для конфигурации (AC-002) @sk-task arch-quality-pass#T3.2: принимает PipelineOptions вместо PipelineConfig (AC-004)
func (*Pipeline) Answer ¶
Answer выполняет полный RAG-цикл: retrieval (Embed+Search) → prompt → LLM.Generate.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task api-consistency-pass#T2.1: wrapped domain.ErrEmptyQueryText/ErrInvalidQueryTopK в validation (RQ-003, AC-003)
func (*Pipeline) AnswerHyDE ¶
AnswerHyDE генерирует ответ, используя HyDE для retrieval.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerHyDEStream ¶
func (p *Pipeline) AnswerHyDEStream(ctx context.Context, question string, topK int) (<-chan string, error)
AnswerHyDEStream выполняет HyDE retrieval и streaming генерацию.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerHyDEStreamWithInlineCitations ¶
func (p *Pipeline) AnswerHyDEStreamWithInlineCitations(ctx context.Context, question string, topK int) (<-chan string, domain.RetrievalResult, []domain.InlineCitation, error)
AnswerHyDEStreamWithInlineCitations выполняет HyDE retrieval с streaming и inline-цитатами.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerHyDEStreamWithSources ¶
func (p *Pipeline) AnswerHyDEStreamWithSources(ctx context.Context, question string, topK int) (<-chan string, domain.RetrievalResult, error)
AnswerHyDEStreamWithSources выполняет HyDE retrieval с streaming и возвращает источники.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerHyDEWithCitations ¶
func (p *Pipeline) AnswerHyDEWithCitations(ctx context.Context, question string, topK int) (string, domain.RetrievalResult, error)
AnswerHyDEWithCitations выполняет HyDE retrieval и генерирует ответ с цитатами.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerHyDEWithInlineCitations ¶
func (p *Pipeline) AnswerHyDEWithInlineCitations(ctx context.Context, question string, topK int) (string, domain.RetrievalResult, []domain.InlineCitation, error)
AnswerHyDEWithInlineCitations выполняет HyDE retrieval и генерирует ответ с inline-цитатами.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerHybrid ¶
func (p *Pipeline) AnswerHybrid(ctx context.Context, question string, topK int, config domain.HybridConfig) (string, error)
AnswerHybrid выполняет гибридный поиск (BM25 + semantic) и генерирует ответ.
Если store не реализует HybridSearcher — возвращает ErrHybridNotSupported.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task api-consistency-pass#T2.1: wrapped domain.ErrEmptyQueryText/ErrInvalidQueryTopK в validation (RQ-003, AC-003)
func (*Pipeline) AnswerHybridStream ¶
func (p *Pipeline) AnswerHybridStream(ctx context.Context, question string, topK int, cfg domain.HybridConfig) (<-chan string, error)
AnswerHybridStream выполняет Hybrid retrieval и streaming генерацию.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerHybridStreamWithInlineCitations ¶
func (p *Pipeline) AnswerHybridStreamWithInlineCitations(ctx context.Context, question string, topK int, cfg domain.HybridConfig) (<-chan string, domain.RetrievalResult, []domain.InlineCitation, error)
AnswerHybridStreamWithInlineCitations выполняет Hybrid retrieval с streaming и inline-цитатами.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerHybridStreamWithSources ¶
func (p *Pipeline) AnswerHybridStreamWithSources(ctx context.Context, question string, topK int, cfg domain.HybridConfig) (<-chan string, domain.RetrievalResult, error)
AnswerHybridStreamWithSources выполняет Hybrid retrieval с streaming и возвращает источники.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerHybridWithCitations ¶
func (p *Pipeline) AnswerHybridWithCitations(ctx context.Context, question string, topK int, cfg domain.HybridConfig) (string, domain.RetrievalResult, error)
AnswerHybridWithCitations выполняет Hybrid retrieval и генерирует ответ с цитатами.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerHybridWithInlineCitations ¶
func (p *Pipeline) AnswerHybridWithInlineCitations(ctx context.Context, question string, topK int, cfg domain.HybridConfig) (string, domain.RetrievalResult, []domain.InlineCitation, error)
AnswerHybridWithInlineCitations выполняет Hybrid retrieval и генерирует ответ с inline-цитатами.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerMulti ¶
AnswerMulti генерирует ответ используя multi-query retrieval.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerMultiStream ¶
func (p *Pipeline) AnswerMultiStream(ctx context.Context, question string, n, topK int) (<-chan string, error)
AnswerMultiStream выполняет MultiQuery retrieval и streaming генерацию.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerMultiStreamWithInlineCitations ¶
func (p *Pipeline) AnswerMultiStreamWithInlineCitations(ctx context.Context, question string, n, topK int) (<-chan string, domain.RetrievalResult, []domain.InlineCitation, error)
AnswerMultiStreamWithInlineCitations выполняет MultiQuery retrieval с streaming и inline-цитатами.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerMultiStreamWithSources ¶
func (p *Pipeline) AnswerMultiStreamWithSources(ctx context.Context, question string, n, topK int) (<-chan string, domain.RetrievalResult, error)
AnswerMultiStreamWithSources выполняет MultiQuery retrieval с streaming и возвращает источники.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerMultiWithCitations ¶
func (p *Pipeline) AnswerMultiWithCitations(ctx context.Context, question string, n, topK int) (string, domain.RetrievalResult, error)
AnswerMultiWithCitations выполняет MultiQuery retrieval и генерирует ответ с цитатами.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerMultiWithInlineCitations ¶
func (p *Pipeline) AnswerMultiWithInlineCitations(ctx context.Context, question string, n, topK int) (string, domain.RetrievalResult, []domain.InlineCitation, error)
AnswerMultiWithInlineCitations выполняет MultiQuery retrieval и генерирует ответ с inline-цитатами.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerStream ¶
func (p *Pipeline) AnswerStream( ctx context.Context, question string, topK int, ) (<-chan string, error)
AnswerStream выполняет RAG-цикл с streaming генерацией ответа. Возвращает канал для чтения текстовых чанков; канал закрывается при завершении или ошибке. Retrieval выполняется синхронно перед началом streaming'а.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task api-consistency-pass#T2.1: wrapped domain.ErrEmptyQueryText/ErrInvalidQueryTopK в validation (RQ-003, AC-003) @ds-task T2.3: Реализовать AnswerStream в application Pipeline (AC-001, DEC-003)
func (*Pipeline) AnswerStreamWithInlineCitations ¶
func (p *Pipeline) AnswerStreamWithInlineCitations( ctx context.Context, question string, topK int, ) (<-chan string, domain.RetrievalResult, []domain.InlineCitation, error)
AnswerStreamWithInlineCitations выполняет RAG-цикл с streaming генерацией и inline-цитатами. Возвращает канал для чтения текстовых чанков и слайс цитат (заполняется синхронно перед streaming'ом).
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task api-consistency-pass#T2.1: wrapped domain.ErrEmptyQueryText/ErrInvalidQueryTopK в validation (RQ-003, AC-003) @ds-task T2.4: Реализовать AnswerStreamWithInlineCitations в application Pipeline (AC-002)
func (*Pipeline) AnswerStreamWithMetadataFilter ¶
func (p *Pipeline) AnswerStreamWithMetadataFilter(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (<-chan string, error)
AnswerStreamWithMetadataFilter выполняет retrieval с фильтром по метаданным и streaming генерацию.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerStreamWithMetadataFilterWithInlineCitations ¶
func (p *Pipeline) AnswerStreamWithMetadataFilterWithInlineCitations(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (<-chan string, domain.RetrievalResult, []domain.InlineCitation, error)
AnswerStreamWithMetadataFilterWithInlineCitations выполняет retrieval с фильтром по метаданным с streaming и inline-цитатами.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerStreamWithMetadataFilterWithSources ¶
func (p *Pipeline) AnswerStreamWithMetadataFilterWithSources(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (<-chan string, domain.RetrievalResult, error)
AnswerStreamWithMetadataFilterWithSources выполняет retrieval с фильтром по метаданным с streaming и возвращает источники.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerStreamWithParentIDs ¶
func (p *Pipeline) AnswerStreamWithParentIDs(ctx context.Context, question string, topK int, parentIDs []string) (<-chan string, error)
AnswerStreamWithParentIDs выполняет retrieval с фильтром по ParentIDs и streaming генерацию.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerStreamWithParentIDsWithInlineCitations ¶
func (p *Pipeline) AnswerStreamWithParentIDsWithInlineCitations(ctx context.Context, question string, topK int, parentIDs []string) (<-chan string, domain.RetrievalResult, []domain.InlineCitation, error)
AnswerStreamWithParentIDsWithInlineCitations выполняет retrieval с фильтром по ParentIDs с streaming и inline-цитатами.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerStreamWithParentIDsWithSources ¶
func (p *Pipeline) AnswerStreamWithParentIDsWithSources(ctx context.Context, question string, topK int, parentIDs []string) (<-chan string, domain.RetrievalResult, error)
AnswerStreamWithParentIDsWithSources выполняет retrieval с фильтром по ParentIDs с streaming и возвращает источники.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerStreamWithSources ¶
func (p *Pipeline) AnswerStreamWithSources(ctx context.Context, question string, topK int) (<-chan string, domain.RetrievalResult, error)
AnswerStreamWithSources выполняет RAG-цикл с streaming и возвращает источники.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerWithCitations ¶
func (p *Pipeline) AnswerWithCitations(ctx context.Context, question string, topK int) (string, domain.RetrievalResult, error)
AnswerWithCitations выполняет полный RAG-цикл и возвращает retrieval evidence вместе с ответом.
Если retrieval уже выполнен, а Generate вернул ошибку, метод возвращает retrieval результат (partial) и ошибку, чтобы упростить диагностику и отображение источников.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task api-consistency-pass#T2.1: wrapped domain.ErrEmptyQueryText/ErrInvalidQueryTopK в validation (RQ-003, AC-003)
func (*Pipeline) AnswerWithCitationsWithMetadataFilter ¶
func (p *Pipeline) AnswerWithCitationsWithMetadataFilter(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (string, domain.RetrievalResult, error)
AnswerWithCitationsWithMetadataFilter выполняет retrieval с фильтром по метаданным и генерирует ответ с цитатами.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerWithCitationsWithParentIDs ¶
func (p *Pipeline) AnswerWithCitationsWithParentIDs( ctx context.Context, question string, topK int, parentIDs []string, ) (string, domain.RetrievalResult, error)
AnswerWithCitationsWithParentIDs выполняет RAG-цикл с фильтром по ParentIDs и возвращает retrieval evidence.
Если parentIDs пустой — эквивалентно AnswerWithCitations.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task api-consistency-pass#T2.1: wrapped domain.ErrEmptyQueryText/ErrInvalidQueryTopK в validation (RQ-003, AC-003)
func (*Pipeline) AnswerWithInlineCitations ¶
func (p *Pipeline) AnswerWithInlineCitations( ctx context.Context, question string, topK int, ) (string, domain.RetrievalResult, []domain.InlineCitation, error)
AnswerWithInlineCitations выполняет полный RAG-цикл и возвращает ответ с inline-цитатами `[n]`, а также retrieval evidence и детерминированный маппинг `n -> chunk`.
Если retrieval уже выполнен, а Generate вернул ошибку, метод возвращает retrieval результат (partial), массив citations и ошибку.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task api-consistency-pass#T2.1: wrapped domain.ErrEmptyQueryText/ErrInvalidQueryTopK в validation (RQ-003, AC-003)
func (*Pipeline) AnswerWithInlineCitationsWithMetadataFilter ¶
func (p *Pipeline) AnswerWithInlineCitationsWithMetadataFilter(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (string, domain.RetrievalResult, []domain.InlineCitation, error)
AnswerWithInlineCitationsWithMetadataFilter выполняет retrieval с фильтром по метаданным и генерирует ответ с inline-цитатами.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerWithInlineCitationsWithParentIDs ¶
func (p *Pipeline) AnswerWithInlineCitationsWithParentIDs(ctx context.Context, question string, topK int, parentIDs []string) (string, domain.RetrievalResult, []domain.InlineCitation, error)
AnswerWithInlineCitationsWithParentIDs выполняет retrieval с фильтром по ParentIDs и генерирует ответ с inline-цитатами.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) AnswerWithMetadataFilter ¶
func (p *Pipeline) AnswerWithMetadataFilter(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (string, error)
AnswerWithMetadataFilter выполняет retrieval с фильтром по метаданным и генерирует ответ.
Если filter.Fields пустой — эквивалентно Answer. Если store не реализует VectorStoreWithFilters — возвращает ErrFiltersNotSupported.
@ds-task T3.1: Добавить AnswerWithMetadataFilter в application.Pipeline (RQ-006, AC-003, DEC-003) @sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task api-consistency-pass#T2.1: wrapped domain.ErrEmptyQueryText/ErrInvalidQueryTopK в validation (RQ-003, AC-003)
func (*Pipeline) AnswerWithParentIDs ¶
func (p *Pipeline) AnswerWithParentIDs(ctx context.Context, question string, topK int, parentIDs []string) (string, error)
AnswerWithParentIDs выполняет retrieval с фильтром по ParentIDs и генерирует ответ.
Если parentIDs пустой — эквивалентно Answer.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) DeleteDocument ¶
DeleteDocument deletes all chunks belonging to a document by its ID.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003)
func (*Pipeline) Index ¶
Index индексирует набор документов параллельно с ограничением
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task api-consistency-pass#T3.1: параллельная обработка Index через processDocsConcurrently (DEC-004, RQ-004, AC-006)
Index индексирует набор документов параллельно с ограничением p.indexConcurrency и rateLimit p.indexBatchRateLimit.
Семантика fail-fast: при первой ошибке обработки cancel-ит in-flight siblings и возвращает оригинальную ошибку (не context.Canceled). Документы, не прошедшие Validate, также прерывают выполнение и возвращают первую такую ошибку.
Параллелизм: реализовано через processDocsConcurrently (T1.2). На каждую документную goroutine — отдельный семафор слот и общий rate-limiter.
func (*Pipeline) IndexBatch ¶
func (p *Pipeline) IndexBatch(ctx context.Context, docs []domain.Document, batchSize int) (*domain.IndexBatchResult, error)
IndexBatch индексирует набор документов параллельно и возвращает aggregate результат (успешные + ошибки по документам). batchSize интерпретируется как желаемая concurrency: при batchSize <= 0 используется p.indexConcurrency.
Семантика: best-effort — не отменяет siblings при ошибке отдельного документа. Это отличие от Index, который fail-fast.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task api-consistency-pass#T1.2: рефактор — IndexBatch как тонкая обёртка над processDocsConcurrently (DEC-004, RQ-004) @sk-task api-consistency-pass#T3.1: shared processDocumentOp между Index и IndexBatch (DEC-004, RQ-004, AC-006)
func (*Pipeline) Query ¶
func (p *Pipeline) Query(ctx context.Context, question string, topK int) (domain.RetrievalResult, error)
Query выполняет поиск по вопросу и возвращает RetrievalResult.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task api-consistency-pass#T2.1: wrapped domain.ErrEmptyQueryText/ErrInvalidQueryTopK в validation (RQ-003, AC-003)
func (*Pipeline) QueryHyDE ¶
func (p *Pipeline) QueryHyDE(ctx context.Context, question string, topK int) (domain.RetrievalResult, error)
QueryHyDE выполняет поиск с использованием Hypothetical Document Embeddings.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) Сначала LLM генерирует гипотетический ответ на вопрос, затем ищем по его embedding.
func (*Pipeline) QueryHybrid ¶
func (p *Pipeline) QueryHybrid(ctx context.Context, question string, topK int, config domain.HybridConfig) (domain.RetrievalResult, error)
QueryHybrid выполняет гибридный поиск (BM25 + semantic) по вопросу.
Если store не реализует HybridSearcher — возвращает ErrHybridNotSupported.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task api-consistency-pass#T2.1: wrapped domain.ErrEmptyQueryText/ErrInvalidQueryTopK в validation (RQ-003, AC-003)
func (*Pipeline) QueryMulti ¶
func (p *Pipeline) QueryMulti(ctx context.Context, question string, n, topK int) (domain.RetrievalResult, error)
QueryMulti выполняет multi-query retrieval: генерирует n перефразировок вопроса,
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) выполняет поиск по каждой, объединяет результаты через Reciprocal Rank Fusion.
func (*Pipeline) QueryWithMetadataFilter ¶
func (p *Pipeline) QueryWithMetadataFilter(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (domain.RetrievalResult, error)
QueryWithMetadataFilter выполняет поиск по вопросу с фильтром по метаданным документа.
Если filter.Fields пустой — эквивалентно Query. Если store не реализует VectorStoreWithFilters — возвращает ErrFiltersNotSupported.
@ds-task T3.1: Добавить QueryWithMetadataFilter в application.Pipeline (RQ-005, AC-003, DEC-003) @sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task api-consistency-pass#T2.1: wrapped domain.ErrEmptyQueryText/ErrInvalidQueryTopK в validation (RQ-003, AC-003)
func (*Pipeline) QueryWithParentIDs ¶
func (p *Pipeline) QueryWithParentIDs(ctx context.Context, question string, topK int, parentIDs []string) (domain.RetrievalResult, error)
QueryWithParentIDs выполняет поиск по вопросу с фильтром по ParentIDs.
Если parentIDs пустой — эквивалентно Query.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task api-consistency-pass#T2.1: wrapped domain.ErrEmptyQueryText/ErrInvalidQueryTopK в validation (RQ-003, AC-003)
func (*Pipeline) UpdateDocument ¶
UpdateDocument выполняет атомарное обновление документа через
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task api-consistency-pass#T3.2: делегирует в updateDocumentAtomic (DEC-005, RQ-005, AC-008, AC-009)
UpdateDocument выполняет атомарное обновление документа через updateDocumentAtomic, который выбирает transactional или best-effort путь в зависимости от capability underlying store.
type PipelineOptions ¶ added in v0.2.0
type PipelineOptions struct {
SystemPrompt string
Chunker domain.Chunker
MaxContextChars int
MaxContextChunks int
DedupByParentID bool
MMREnabled bool
MMRLambda float64
MMRCandidatePool int
Hooks domain.Hooks
IndexConcurrency int
IndexBatchRateLimit int
IndexBatchRateLimitPerWorker bool
StreamBufferSize int
Reranker domain.Reranker
}
PipelineOptions configures a Pipeline behaviour.
@sk-task hardening-2026q2#T1.1: Разделить pipeline.go на модули (AC-001, AC-003) @sk-task arch-quality-pass#T3.2: единый struct конфигурации (AC-004)