Spaces:
Running
Running
File size: 1,189 Bytes
b110593 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package compressionhelpers
import (
"context"
"fmt"
)
type CompressionDistanceBag interface {
Load(ctx context.Context, id uint64) error
Distance(x, y uint64) (float32, error)
}
type quantizedDistanceBag[T byte | uint64] struct {
elements map[uint64][]T
compressor *quantizedVectorsCompressor[T]
}
func (bag *quantizedDistanceBag[T]) Load(ctx context.Context, id uint64) error {
var err error
bag.elements[id], err = bag.compressor.cache.Get(ctx, id)
return err
}
func (bag *quantizedDistanceBag[T]) Distance(x, y uint64) (float32, error) {
v1, found := bag.elements[x]
if !found {
return 0, fmt.Errorf("missing id in bag: %d", x)
}
v2, found := bag.elements[y]
if !found {
return 0, fmt.Errorf("missing id in bag: %d", y)
}
return bag.compressor.DistanceBetweenCompressedVectors(v1, v2)
}
|