Ctrl K
ComunidadGuías…

internal/llm/fixed_width_embedder.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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
}