Documentation
¶
Overview ¶
Package vector adapts core vector search to the rag Retriever contract. Search policy is fixed at construction, and RetrieverConfig.FilterFunc is the only source of a retrieval's metadata filter.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Encoder ¶
type Encoder struct {
// contains filtered or unexported fields
}
Encoder binds both halves of a compatible vector space. The Host identifies the deployed revisions and preprocessing; neither a model name nor a vector width is an adequate substitute for that binding.
func NewEncoder ¶
func NewEncoder(config EncoderConfig) (*Encoder, error)
func (*Encoder) EncodeDocuments ¶
func (*Encoder) EncodeQuery ¶
func (e *Encoder) EncodeQuery(ctx context.Context, text string, options vectorstore.SearchOptions) (*vectorstore.Query, error)
EncodeQuery returns coordinates that can be reused across compatible native indexes. Lexical text is retained only when the selected search requires it.
func (*Encoder) Space ¶
func (e *Encoder) Space() vectorstore.SpaceID
type EncoderConfig ¶
type EncoderConfig struct {
Space vectorstore.SpaceID
Documents embeddingclient.Config
Queries embeddingclient.Config
}
type Retriever ¶
type Retriever struct {
// contains filtered or unexported fields
}
func NewRetriever ¶
func NewRetriever(config RetrieverConfig) (*Retriever, error)
type RetrieverConfig ¶
type RetrieverConfig struct {
Encoder *Encoder
VectorStore Source
// TopK caps the number of returned documents. Zero uses
// [corevs.DefaultTopK]; negative values are invalid.
TopK int
// MinScore filters semantic matches below this relevance threshold. Hybrid
// mode requires zero because fusion scores are not portable across stores.
// Range [0.0, 1.0].
MinScore corevs.Score
// SearchMode selects semantic or native hybrid retrieval. The zero value is
// semantic; a store that cannot honor hybrid returns a typed error.
SearchMode corevs.SearchMode
// FilterFunc builds each retrieval's metadata filter from the query and is
// the filter's only source. Host policy such as tenant isolation is bound
// into it when the Retriever is built. Nil applies no filter; an error
// fails the retrieval before the store is searched.
FilterFunc func(ctx context.Context, query rag.Query) (filter.Predicate, error)
}
Example (FilterFunc) ¶
package main
import (
"context"
"fmt"
"github.com/Tangerg/scope/core/embedding"
"github.com/Tangerg/scope/core/embeddingclient"
corevs "github.com/Tangerg/scope/core/vectorstore"
"github.com/Tangerg/scope/core/vectorstore/filter"
"github.com/Tangerg/scope/rag"
ragvectorstore "github.com/Tangerg/scope/rag/vector"
)
type filterPrinter struct{}
func (filterPrinter) Query(_ context.Context, request *corevs.Query) (*corevs.SearchResponse, error) {
fmt.Println(request.Options.Filter)
return &corevs.SearchResponse{}, nil
}
func main() {
// The tenant is host authority, so it is bound when the retriever is
// built for that tenant rather than carried by the model-shaped query.
tenant := "acme"
retriever, err := ragvectorstore.NewRetriever(ragvectorstore.RetrieverConfig{
Encoder: demoEncoder(), VectorStore: filterPrinter{},
FilterFunc: func(context.Context, rag.Query) (filter.Predicate, error) {
return filter.EQ("tenant", tenant), nil
},
})
if err != nil {
panic(err)
}
query, err := rag.NewQuery("release notes")
if err != nil {
panic(err)
}
if _, err := retriever.Retrieve(context.Background(), query); err != nil {
panic(err)
}
}
func (filterPrinter) CheckQuery(context.Context, corevs.SpaceID, corevs.SearchOptions) error {
return nil
}
func demoEncoder() *ragvectorstore.Encoder {
model := embedding.ModelFunc(func(_ context.Context, request *embedding.Request) (*embedding.Response, error) {
return embedding.NewResponse([]*embedding.Output{{Embedding: []float64{1, 0}}}, nil)
})
binding := embeddingclient.Config{Model: model}
encoder, err := ragvectorstore.NewEncoder(ragvectorstore.EncoderConfig{Space: "example-v1", Documents: binding, Queries: binding})
if err != nil {
panic(err)
}
return encoder
}
Output: tenant == 'acme'
Click to show internal directories.
Click to hide internal directories.