KevinStephenson
Adding in weaviate code
b110593
raw
history blame
2.18 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package common
import (
"encoding/json"
"math"
"strconv"
"github.com/pkg/errors"
)
const (
DistanceCosine = "cosine"
DistanceDot = "dot"
DistanceL2Squared = "l2-squared"
DistanceManhattan = "manhattan"
DistanceHamming = "hamming"
// Set these defaults if the user leaves them blank
DefaultVectorCacheMaxObjects = 1e12
DefaultDistanceMetric = DistanceCosine
)
// Tries to parse the int value from the map, if it overflows math.MaxInt64, it
// uses math.MaxInt64 instead. This is to protect from rounding errors from
// json marshalling where the type may be assumed as float64
func OptionalIntFromMap(in map[string]interface{}, name string,
setFn func(v int),
) error {
value, ok := in[name]
if !ok {
return nil
}
var asInt64 int64
var err error
// depending on whether we get the results from disk or from the REST API,
// numbers may be represented slightly differently
switch typed := value.(type) {
case json.Number:
asInt64, err = typed.Int64()
case float64:
asInt64 = int64(typed)
}
if err != nil {
// try to recover from error
if errors.Is(err, strconv.ErrRange) {
setFn(int(math.MaxInt64))
return nil
}
return errors.Wrapf(err, "json.Number to int64 for %q", name)
}
setFn(int(asInt64))
return nil
}
func OptionalBoolFromMap(in map[string]interface{}, name string,
setFn func(v bool),
) error {
value, ok := in[name]
if !ok {
return nil
}
asBool, ok := value.(bool)
if !ok {
return nil
}
setFn(asBool)
return nil
}
func OptionalStringFromMap(in map[string]interface{}, name string,
setFn func(v string),
) error {
value, ok := in[name]
if !ok {
return nil
}
asString, ok := value.(string)
if !ok {
return nil
}
setFn(asString)
return nil
}