This commit is contained in:
64
docs/snippets/go/plugins/embedding_backend.md
Normal file
64
docs/snippets/go/plugins/embedding_backend.md
Normal file
@@ -0,0 +1,64 @@
|
||||
```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))
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user