package embedding import ( "context" "crypto/sha256" "encoding/binary" "math" ) type FakeProvider struct { dims int model string } func NewFakeProvider(dims int, model string) *FakeProvider { if dims <= 0 { dims = 1536 } if model == "" { model = "fake" } return &FakeProvider{dims: dims, model: model} } func (p *FakeProvider) Dimensions() int { return p.dims } func (p *FakeProvider) Model() string { return p.model } func (p *FakeProvider) ProviderName() string { return "fake" } func (p *FakeProvider) Embed(ctx context.Context, input []string) ([]Vector, error) { out := make([]Vector, 0, len(input)) for _, text := range input { select { case <-ctx.Done(): return nil, ctx.Err() default: } v := make(Vector, p.dims) seed := sha256.Sum256([]byte(text)) var norm float64 for i := 0; i < p.dims; i++ { b := sha256.Sum256(append(seed[:], byte(i), byte(i>>8))) n := binary.BigEndian.Uint32(b[:4]) val := (float64(n%2000000)/1000000.0 - 1.0) v[i] = float32(val) norm += val * val } if norm > 0 { scale := float32(1 / math.Sqrt(norm)) for i := range v { v[i] *= scale } } out = append(out, v) } return out, nil }