diff --git a/test/search_test.dart b/test/search_test.dart index 6259465c..cd285622 100644 --- a/test/search_test.dart +++ b/test/search_test.dart @@ -7,6 +7,8 @@ import 'utils/client.dart'; import 'utils/wait_for.dart'; void main() { + final openAiKeyValue = openAiKey; + group('Search', () { setUpClient(); late String uid; @@ -545,44 +547,58 @@ void main() { setUpClient(); late String uid; late MeiliSearchIndex index; + late IndexSettings settings; + + setUpAll(() { + settings = IndexSettings(embedders: { + 'default': OpenAiEmbedder( + model: 'text-embedding-3-small', + apiKey: openAiKeyValue, + documentTemplate: "a book titled '{{ doc.title }}'", + ), + }); + }); + setUp(() async { uid = randomUid(); index = await createIndexWithData(uid: uid, data: vectorBooks); + // Configure embedder before running vector search + await index.updateSettings(settings).waitFor(client: client); }); test('vector search', () async { - final vector = [0, 1, 2]; + // Create a vector with 1536 dimensions (filled with zeros for test purposes) + final vector = List.filled(1536, 0.0); final res = await index .search( null, SearchQuery( vector: vector, + hybrid: HybridSearch( + embedder: 'default', + semanticRatio: 1.0, + ), ), ) .asSearchResult() .mapToContainer(); - expect(res.vector, vector); expect( res.hits, everyElement( isA>>() .having( - (p0) => p0.vectors, - 'vectors', - isNotNull, - ) - .having( - (p0) => p0.semanticScore, - 'semanticScore', + (p0) => p0.parsed, + 'parsed', isNotNull, ), ), ); }); - }); + }, skip: openAiKeyValue == null || openAiKeyValue.isEmpty + ? "Requires OPEN_AI_API_KEY environment variable" + : null); - final openAiKeyValue = openAiKey; group('Embedders', () { group( 'Unit test', diff --git a/test/utils/books_data.dart b/test/utils/books_data.dart index f9d00c39..1cd0e74e 100644 --- a/test/utils/books_data.dart +++ b/test/utils/books_data.dart @@ -60,23 +60,43 @@ final vectorBooks = [ { "id": 0, "title": "Across The Universe", - "_vectors": [0, 0.8, -0.2], + "_vectors": { + "default": { + "embeddings": [0, 0.8, -0.2], + "regenerate": false, + } + } }, { "id": 1, "title": "All Things Must Pass", - "_vectors": [1, -0.2, 0], + "_vectors": { + "default": { + "embeddings": [1, -0.2, 0], + "regenerate": false, + } + } }, { "id": 2, "title": "And Your Bird Can Sing", - "_vectors": [-0.2, 4, 6], + "_vectors": { + "default": { + "embeddings": [-0.2, 4, 6], + "regenerate": false, + } + } }, { "id": 3, "title": "The Matrix", - "_vectors": [5, -0.5, 0.3], - }, + "_vectors": { + "default": { + "embeddings": [5, -0.5, 0.3], + "regenerate": false, + } + }, + } ]; enum CSVHeaderTypes {