Spaces:
Running
Running
// _ _ | |
// __ _____ __ ___ ___ __ _| |_ ___ | |
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ | |
// \ V V / __/ (_| |\ V /| | (_| | || __/ | |
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| | |
// | |
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. | |
// | |
// CONTACT: [email protected] | |
// | |
package test | |
import ( | |
"encoding/json" | |
"fmt" | |
"os" | |
"testing" | |
"github.com/stretchr/testify/assert" | |
"github.com/weaviate/weaviate/entities/models" | |
"github.com/weaviate/weaviate/test/helper" | |
graphqlhelper "github.com/weaviate/weaviate/test/helper/graphql" | |
"github.com/weaviate/weaviate/test/helper/sample-schema/books" | |
) | |
func Test_QnATransformers(t *testing.T) { | |
helper.SetupClient(os.Getenv(weaviateEndpoint)) | |
// Contextionary with QnA module config present | |
booksClass := books.ClassContextionaryVectorizerWithQnATransformers() | |
helper.CreateClass(t, booksClass) | |
defer helper.DeleteClass(t, booksClass.Class) | |
// Contextionary without QnA module config present | |
booksWithoutQnAConfig := "BooksWithoutConfig" | |
booksWithoutQnAConfigClass := books.ClassContextionaryVectorizerWithName(booksWithoutQnAConfig) | |
helper.CreateClass(t, booksWithoutQnAConfigClass) | |
defer helper.DeleteClass(t, booksWithoutQnAConfigClass.Class) | |
// Text2VecTransformers with QnA module config present | |
booksTransformers := "BooksTransformers" | |
booksTransformersClass := books.ClassTransformersVectorizerWithQnATransformersWithName(booksTransformers) | |
helper.CreateClass(t, booksTransformersClass) | |
defer helper.DeleteClass(t, booksTransformersClass.Class) | |
// Text2VecTransformers without QnA module config present | |
booksTransformersWithoutQnAConfig := "BooksTransformersWithoutConfig" | |
booksTransformersWithoutQnAConfigClass := books.ClassTransformersVectorizerWithName(booksTransformersWithoutQnAConfig) | |
helper.CreateClass(t, booksTransformersWithoutQnAConfigClass) | |
defer helper.DeleteClass(t, booksTransformersWithoutQnAConfigClass.Class) | |
t.Run("add data to Books schema", func(t *testing.T) { | |
bookObjects := []*models.Object{} | |
bookObjects = append(bookObjects, books.Objects()...) | |
bookObjects = append(bookObjects, books.ObjectsWithName(booksWithoutQnAConfig)...) | |
bookObjects = append(bookObjects, books.ObjectsWithName(booksTransformers)...) | |
bookObjects = append(bookObjects, books.ObjectsWithName(booksTransformersWithoutQnAConfig)...) | |
for _, book := range bookObjects { | |
helper.CreateObject(t, book) | |
helper.AssertGetObjectEventually(t, book.Class, book.ID) | |
} | |
}) | |
t.Run("ask", func(t *testing.T) { | |
for _, class := range []*models.Class{booksClass, booksWithoutQnAConfigClass, booksTransformersClass, booksTransformersWithoutQnAConfigClass} { | |
t.Run(class.Class, func(t *testing.T) { | |
query := ` | |
{ | |
Get { | |
%s( | |
ask: { | |
question: "Who is Dune's author?" | |
} | |
limit: 1 | |
){ | |
title | |
_additional { | |
answer { | |
hasAnswer | |
property | |
result | |
startPosition | |
endPosition | |
} | |
} | |
} | |
} | |
} | |
` | |
result := graphqlhelper.AssertGraphQL(t, helper.RootAuth, fmt.Sprintf(query, class.Class)) | |
books := result.Get("Get", class.Class).AsSlice() | |
expected := []interface{}{ | |
map[string]interface{}{ | |
"title": "Dune", | |
"_additional": map[string]interface{}{ | |
"answer": map[string]interface{}{ | |
"endPosition": json.Number("74"), | |
"hasAnswer": true, | |
"property": "description", | |
"result": "frank herbert", | |
"startPosition": json.Number("61"), | |
}, | |
}, | |
}, | |
} | |
assert.ElementsMatch(t, expected, books) | |
}) | |
} | |
}) | |
} | |