Spaces:
Running
Running
// _ _ | |
// __ _____ __ ___ ___ __ _| |_ ___ | |
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ | |
// \ V V / __/ (_| |\ V /| | (_| | || __/ | |
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| | |
// | |
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. | |
// | |
// CONTACT: [email protected] | |
// | |
package vectorizer | |
import ( | |
"testing" | |
"github.com/stretchr/testify/assert" | |
"github.com/weaviate/weaviate/entities/models" | |
"github.com/weaviate/weaviate/usecases/modules" | |
) | |
func TestClassSettings(t *testing.T) { | |
t.Run("with all defaults", func(t *testing.T) { | |
class := &models.Class{ | |
Class: "MyClass", | |
Properties: []*models.Property{{ | |
Name: "someProp", | |
}}, | |
} | |
cfg := modules.NewClassBasedModuleConfig(class, "my-module", "tenant") | |
ic := NewClassSettings(cfg) | |
assert.True(t, ic.PropertyIndexed("someProp")) | |
assert.False(t, ic.VectorizePropertyName("someProp")) | |
assert.True(t, ic.VectorizeClassName()) | |
assert.Equal(t, ic.PoolingStrategy(), "masked_mean") | |
}) | |
t.Run("with a nil config", func(t *testing.T) { | |
// this is the case if we were running in a situation such as a | |
// cross-class vectorization of search time, as is the case with Explore | |
// {}, we then expect all default values | |
ic := NewClassSettings(nil) | |
assert.True(t, ic.PropertyIndexed("someProp")) | |
assert.False(t, ic.VectorizePropertyName("someProp")) | |
assert.True(t, ic.VectorizeClassName()) | |
assert.Equal(t, ic.PoolingStrategy(), "masked_mean") | |
}) | |
t.Run("with all explicit config matching the defaults", func(t *testing.T) { | |
class := &models.Class{ | |
Class: "MyClass", | |
ModuleConfig: map[string]interface{}{ | |
"my-module": map[string]interface{}{ | |
"vectorizeClassName": true, | |
"poolingStrategy": "masked_mean", | |
}, | |
}, | |
Properties: []*models.Property{{ | |
Name: "someProp", | |
ModuleConfig: map[string]interface{}{ | |
"my-module": map[string]interface{}{ | |
"skip": false, | |
"vectorizePropertyName": false, | |
}, | |
}, | |
}}, | |
} | |
cfg := modules.NewClassBasedModuleConfig(class, "my-module", "tenant") | |
ic := NewClassSettings(cfg) | |
assert.True(t, ic.PropertyIndexed("someProp")) | |
assert.False(t, ic.VectorizePropertyName("someProp")) | |
assert.True(t, ic.VectorizeClassName()) | |
assert.Equal(t, ic.PoolingStrategy(), "masked_mean") | |
}) | |
t.Run("with all explicit config using non-default values", func(t *testing.T) { | |
class := &models.Class{ | |
Class: "MyClass", | |
ModuleConfig: map[string]interface{}{ | |
"my-module": map[string]interface{}{ | |
"vectorizeClassName": false, | |
"poolingStrategy": "cls", | |
}, | |
}, | |
Properties: []*models.Property{{ | |
Name: "someProp", | |
ModuleConfig: map[string]interface{}{ | |
"my-module": map[string]interface{}{ | |
"skip": true, | |
"vectorizePropertyName": true, | |
}, | |
}, | |
}}, | |
} | |
cfg := modules.NewClassBasedModuleConfig(class, "my-module", "tenant") | |
ic := NewClassSettings(cfg) | |
assert.False(t, ic.PropertyIndexed("someProp")) | |
assert.True(t, ic.VectorizePropertyName("someProp")) | |
assert.False(t, ic.VectorizeClassName()) | |
assert.Equal(t, ic.PoolingStrategy(), "cls") | |
}) | |
} | |