openmeter / pkg /models /annotation.go
Leon4gr45's picture
Upload folder using huggingface_hub (part 9)
fea99b3 verified
Raw
History Blame Contribute Delete
1.96 kB
package models
import (
"math"
"reflect"
"github.com/brunoga/deep"
)
type Annotations map[string]interface{}
func (a Annotations) GetBool(key string) bool {
if len(a) == 0 {
return false
}
val, ok := a[key]
if !ok {
return false
}
boolVal, ok := val.(bool)
if !ok {
return false
}
return boolVal
}
func (a Annotations) GetString(key string) (string, bool) {
if len(a) == 0 {
return "", false
}
val, ok := a[key]
if !ok {
return "", false
}
strVal, ok := val.(string)
if !ok {
return "", false
}
return strVal, true
}
func (a Annotations) GetInt(key string) (int, bool) {
if len(a) == 0 {
return 0, false
}
val, ok := a[key]
if !ok {
return 0, false
}
switch t := val.(type) {
case int:
return t, true
case float32:
f := float64(t)
if f != math.Trunc(f) || float64(math.MaxInt) < f || f < float64(math.MinInt) {
return 0, false
}
return int(t), true
case float64:
if t != math.Trunc(t) || float64(math.MaxInt) < t || t < float64(math.MinInt) {
return 0, false
}
return int(t), true
default:
return 0, false
}
}
func (a Annotations) Reset() {
for k := range a {
delete(a, k)
}
}
func (a Annotations) Clone() (Annotations, error) {
if a == nil {
return nil, nil
}
return deep.Copy[Annotations](a)
}
func (a Annotations) Merge(m Annotations) (Annotations, error) {
if a == nil {
return m, nil
}
result, err := a.Clone()
if err != nil {
return nil, err
}
if len(m) == 0 {
return result, nil
}
for k, v := range m {
vv, err := deep.Copy(v)
if err != nil {
return nil, err
}
result[k] = vv
}
return result, nil
}
func (a Annotations) Equal(other Annotations) bool {
if a == nil || other == nil {
return a == nil && other == nil
}
if len(a) != len(other) {
return false
}
for k, v := range a {
otherV, ok := other[k]
if !ok {
return false
}
if !reflect.DeepEqual(v, otherV) {
return false
}
}
return true
}