internal/llm/fixed_width_embedder.go
Rama main · réplica de lectura del repositorio original.
package llm
import (
"context"
"fmt"
"github.com/yeomyeonggeori/blueprotocol/model/openaicompatible"
)
type fixedWidthEmbedder struct {
provider *openaicompatible.EmbeddingProvider
dimensions int
}
func (embedder fixedWidthEmbedder) EmbeddingModelName() string {
return embedder.provider.ModelName()
}
func (embedder fixedWidthEmbedder) EmbedQuery(ctx context.Context, text string) ([]float32, error) {
embedding, errorValue := embedder.provider.EmbedQuery(ctx, text)
return embedder.checked(embedding, errorValue)
}
func (embedder fixedWidthEmbedder) EmbedDocuments(ctx context.Context, texts []string) ([][]float32, error) {
embeddings, errorValue := embedder.provider.EmbedDocuments(ctx, texts)
if errorValue != nil {
return nil, errorValue
}
for _, embedding := range embeddings {
if _, errorValue := embedder.checked(embedding, nil); errorValue != nil {
return nil, errorValue
}
}
return embeddings, nil
}
func (embedder fixedWidthEmbedder) checked(embedding []float32, errorValue error) ([]float32, error) {
if errorValue != nil {
return nil, errorValue
}
if len(embedding) != embedder.dimensions {
return nil, fmt.Errorf("the embedding endpoint answered %d dimensions for model %s, but memory and skills are configured for %d", len(embedding), embedder.provider.ModelName(), embedder.dimensions)
}
return embedding, nil
}