Files
fil/docs/snippets/go/plugins/embedding_backend.md

65 lines
1.8 KiB
Markdown
Raw Normal View History

2026-06-01 23:40:55 +02:00
```go title="Go"
package main
import (
"log"
"github.com/kreuzberg-dev/kreuzberg/packages/go/v5"
)
// MyEmbedder wraps an already-loaded embedder so kreuzberg can call back into
// it during chunking and standalone embed requests. Implement the
// kreuzberg.EmbeddingBackend interface.
type MyEmbedder struct{}
func (e *MyEmbedder) Name() string { return "my-embedder" }
func (e *MyEmbedder) Version() string { return "1.0.0" }
func (e *MyEmbedder) Initialize() error {
// Optional warm-up; runs once at registration before Dimensions() is cached.
return nil
}
func (e *MyEmbedder) Shutdown() error { return nil }
// Captured once at registration; the dispatcher uses this for shape validation.
func (e *MyEmbedder) Dimensions() uint { return 768 }
func (e *MyEmbedder) Embed(texts []string) ([][]float32, error) {
// Delegate to the already-loaded host model.
out := make([][]float32, len(texts))
for i := range texts {
out[i] = make([]float32, 768)
}
return out, nil
}
func main() {
// Register once at startup.
if err := kreuzberg.RegisterEmbeddingBackend(&MyEmbedder{}); err != nil {
log.Fatalf("failed to register embedding backend: %v", err)
}
defer func() {
if err := kreuzberg.UnregisterEmbeddingBackend("my-embedder"); err != nil {
log.Printf("warning: failed to unregister embedding backend: %v", err)
}
}()
maxDuration := uint64(30)
embedderName := "my-embedder"
config := kreuzberg.EmbeddingConfig{
Model: kreuzberg.EmbeddingModelType{
Variant: "plugin",
Type: "plugin",
Name: &embedderName,
},
// Optional: bound the wait on a hung backend (default 60s; nil disables).
MaxEmbedDurationSecs: &maxDuration,
}
vectors, err := kreuzberg.EmbedTexts([]string{"Hello, world!", "Second text"}, config)
if err != nil {
log.Fatalf("embed failed: %v", err)
}
log.Printf("Generated %d vectors", len(vectors))
}
```