KevinStephenson
Adding in weaviate code
b110593
raw
history blame
4.66 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package config
import (
"testing"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
"github.com/weaviate/weaviate/entities/moduletools"
)
func Test_classSettings_Validate(t *testing.T) {
tests := []struct {
name string
cfg moduletools.ClassConfig
wantApiEndpoint string
wantProjectID string
wantModelID string
wantTitle string
wantErr error
}{
{
name: "happy flow",
cfg: fakeClassConfig{
classConfig: map[string]interface{}{
"projectId": "projectId",
},
},
wantApiEndpoint: "us-central1-aiplatform.googleapis.com",
wantProjectID: "projectId",
wantModelID: "textembedding-gecko@001",
wantErr: nil,
},
{
name: "custom values",
cfg: fakeClassConfig{
classConfig: map[string]interface{}{
"apiEndpoint": "google.com",
"projectId": "projectId",
"titleProperty": "title",
},
},
wantApiEndpoint: "google.com",
wantProjectID: "projectId",
wantModelID: "textembedding-gecko@001",
wantTitle: "title",
wantErr: nil,
},
{
name: "empty projectId",
cfg: fakeClassConfig{
classConfig: map[string]interface{}{
"projectId": "",
},
},
wantErr: errors.Errorf("projectId cannot be empty"),
},
{
name: "wrong modelId",
cfg: fakeClassConfig{
classConfig: map[string]interface{}{
"projectId": "projectId",
"modelId": "wrong-model",
},
},
wantErr: errors.Errorf("wrong modelId available model names are: " +
"[textembedding-gecko@001 textembedding-gecko@latest " +
"textembedding-gecko-multilingual@latest textembedding-gecko@003 " +
"textembedding-gecko@002 textembedding-gecko-multilingual@001 textembedding-gecko@001]"),
},
{
name: "all wrong",
cfg: fakeClassConfig{
classConfig: map[string]interface{}{
"projectId": "",
"modelId": "wrong-model",
},
},
wantErr: errors.Errorf("projectId cannot be empty, " +
"wrong modelId available model names are: " +
"[textembedding-gecko@001 textembedding-gecko@latest " +
"textembedding-gecko-multilingual@latest textembedding-gecko@003 " +
"textembedding-gecko@002 textembedding-gecko-multilingual@001 textembedding-gecko@001]"),
},
{
name: "Generative AI",
cfg: fakeClassConfig{
classConfig: map[string]interface{}{
"apiEndpoint": "generativelanguage.googleapis.com",
},
},
wantApiEndpoint: "generativelanguage.googleapis.com",
wantProjectID: "",
wantModelID: "embedding-gecko-001",
wantErr: nil,
},
{
name: "Generative AI with model",
cfg: fakeClassConfig{
classConfig: map[string]interface{}{
"apiEndpoint": "generativelanguage.googleapis.com",
"modelId": "embedding-gecko-001",
},
},
wantApiEndpoint: "generativelanguage.googleapis.com",
wantProjectID: "",
wantModelID: "embedding-gecko-001",
wantErr: nil,
},
{
name: "Generative AI with wrong model",
cfg: fakeClassConfig{
classConfig: map[string]interface{}{
"apiEndpoint": "generativelanguage.googleapis.com",
"modelId": "textembedding-gecko@001",
},
},
wantErr: errors.Errorf("wrong modelId available Generative AI model names are: [embedding-gecko-001]"),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ic := NewClassSettings(tt.cfg)
if tt.wantErr != nil {
assert.EqualError(t, ic.Validate(nil), tt.wantErr.Error())
} else {
assert.Equal(t, tt.wantApiEndpoint, ic.ApiEndpoint())
assert.Equal(t, tt.wantProjectID, ic.ProjectID())
assert.Equal(t, tt.wantModelID, ic.ModelID())
assert.Equal(t, tt.wantTitle, ic.TitleProperty())
}
})
}
}
type fakeClassConfig struct {
classConfig map[string]interface{}
}
func (f fakeClassConfig) Class() map[string]interface{} {
return f.classConfig
}
func (f fakeClassConfig) Tenant() string {
return ""
}
func (f fakeClassConfig) ClassByModuleName(moduleName string) map[string]interface{} {
return f.classConfig
}
func (f fakeClassConfig) Property(propName string) map[string]interface{} {
return nil
}