Skip to content

Commit

Permalink
[Go] proposal: vector DB Inits return actions
Browse files Browse the repository at this point in the history
Vector DBs only register two actions: an indexer and a retriever.
Continue to allow users to look up these actions by name.
But also return them from Init.
  • Loading branch information
jba committed Jun 8, 2024
1 parent d896c4b commit 6bd00aa
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 17 deletions.
14 changes: 8 additions & 6 deletions go/plugins/localvec/localvec.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,29 +46,31 @@ type Config struct {
}

// Init initializes a new local vector database. This will register a new
// indexer and retriever with genkit.
// indexer and retriever with genkit, and return them.
// This retriever may only be used by a single goroutine at a time.
func Init(ctx context.Context, cfg Config) (err error) {
func Init(ctx context.Context, cfg Config) (_ *ai.IndexerAction, _ *ai.RetrieverAction, err error) {
defer func() {
if err != nil {
err = fmt.Errorf("localvec.Init: %w", err)
}
}()
ds, err := newDocStore(cfg.Dir, cfg.Name, cfg.Embedder, cfg.EmbedderOptions)
if err != nil {
return err
return nil, nil, err
}
ai.DefineIndexer(provider, cfg.Name, ds.index)
ai.DefineRetriever(provider, cfg.Name, ds.retrieve)
return nil
ia := ai.DefineIndexer(provider, cfg.Name, ds.index)
ra := ai.DefineRetriever(provider, cfg.Name, ds.retrieve)
return ia, ra, nil
}

// Indexer returns the indexer with the given name.
// The name must match the [Config.Name] value passed to [Init].
func Indexer(name string) *ai.IndexerAction {
return ai.LookupIndexer(provider, name)
}

// Retriever returns the retriever with the given name.
// The name must match the [Config.Name] value passed to [Init].
func Retriever(name string) *ai.RetrieverAction {
return ai.LookupRetriever(provider, name)
}
Expand Down
10 changes: 5 additions & 5 deletions go/samples/menu/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,14 +100,14 @@ func main() {
log.Fatal(err)
}

const localvecName = "go-menu-items"
if err := localvec.Init(ctx, localvec.Config{
Name: localvecName,
indexer, retriever, err := localvec.Init(ctx, localvec.Config{
Name: "go-menu-items",
Embedder: vertexai.Embedder(embeddingGecko),
}); err != nil {
})
if err != nil {
log.Fatal(err)
}
if err := setup04(ctx, localvec.Indexer(localvecName), localvec.Retriever(localvecName), model); err != nil {
if err := setup04(ctx, indexer, retriever, model); err != nil {
log.Fatal(err)
}

Expand Down
12 changes: 6 additions & 6 deletions go/samples/rag/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,11 +91,11 @@ func main() {
log.Fatal(err)
}

const localvecName = "simpleQa"
if err := localvec.Init(context.Background(), localvec.Config{
Name: localvecName,
indexer, retriever, err := localvec.Init(context.Background(), localvec.Config{
Name: "simpleQa",
Embedder: googleai.Embedder("embedding-001"),
}); err != nil {
})
if err != nil {
log.Fatal(err)
}

Expand All @@ -107,7 +107,7 @@ func main() {
indexerReq := &ai.IndexerRequest{
Documents: []*ai.Document{d1, d2, d3},
}
err := ai.Index(ctx, localvec.Indexer(localvecName), indexerReq)
err := ai.Index(ctx, indexer, indexerReq)
if err != nil {
return "", err
}
Expand All @@ -116,7 +116,7 @@ func main() {
retrieverReq := &ai.RetrieverRequest{
Document: dRequest,
}
response, err := ai.Retrieve(ctx, localvec.Retriever(localvecName), retrieverReq)
response, err := ai.Retrieve(ctx, retriever, retrieverReq)
if err != nil {
return "", err
}
Expand Down

0 comments on commit 6bd00aa

Please sign in to comment.