diff --git a/crates/meilisearch/tests/dumps/mod.rs b/crates/meilisearch/tests/dumps/mod.rs index 62f871cba..ff0b027cb 100644 --- a/crates/meilisearch/tests/dumps/mod.rs +++ b/crates/meilisearch/tests/dumps/mod.rs @@ -2132,7 +2132,8 @@ async fn import_dump_v6_containing_experimental_features() { "editDocumentsByFunction": false, "containsFilter": false, "network": false, - "getTaskDocumentsRoute": false + "getTaskDocumentsRoute": false, + "compositeEmbedders": false } "###); @@ -2254,7 +2255,8 @@ async fn import_dump_v6_containing_batches_and_enqueued_tasks() { "editDocumentsByFunction": false, "containsFilter": false, "network": false, - "getTaskDocumentsRoute": false + "getTaskDocumentsRoute": false, + "compositeEmbedders": false } "###); @@ -2358,7 +2360,8 @@ async fn generate_and_import_dump_containing_vectors() { "editDocumentsByFunction": false, "containsFilter": false, "network": false, - "getTaskDocumentsRoute": false + "getTaskDocumentsRoute": false, + "compositeEmbedders": false } "###); diff --git a/crates/meilisearch/tests/features/mod.rs b/crates/meilisearch/tests/features/mod.rs index d417efa4c..ea11738cc 100644 --- a/crates/meilisearch/tests/features/mod.rs +++ b/crates/meilisearch/tests/features/mod.rs @@ -23,7 +23,8 @@ async fn experimental_features() { "editDocumentsByFunction": false, "containsFilter": false, "network": false, - "getTaskDocumentsRoute": false + "getTaskDocumentsRoute": false, + "compositeEmbedders": false } "###); @@ -37,7 +38,8 @@ async fn experimental_features() { "editDocumentsByFunction": false, "containsFilter": false, "network": false, - "getTaskDocumentsRoute": false + "getTaskDocumentsRoute": false, + "compositeEmbedders": false } "###); @@ -51,7 +53,8 @@ async fn experimental_features() { "editDocumentsByFunction": false, "containsFilter": false, "network": false, - "getTaskDocumentsRoute": false + "getTaskDocumentsRoute": false, + "compositeEmbedders": false } "###); @@ -66,7 +69,8 @@ async fn experimental_features() { "editDocumentsByFunction": false, "containsFilter": false, "network": false, - "getTaskDocumentsRoute": false + "getTaskDocumentsRoute": false, + "compositeEmbedders": false } "###); @@ -81,7 +85,8 @@ async fn experimental_features() { "editDocumentsByFunction": false, "containsFilter": false, "network": false, - "getTaskDocumentsRoute": false + "getTaskDocumentsRoute": false, + "compositeEmbedders": false } "###); } @@ -103,7 +108,8 @@ async fn experimental_feature_metrics() { "editDocumentsByFunction": false, "containsFilter": false, "network": false, - "getTaskDocumentsRoute": false + "getTaskDocumentsRoute": false, + "compositeEmbedders": false } "###); @@ -158,7 +164,7 @@ async fn errors() { meili_snap::snapshot!(code, @"400 Bad Request"); meili_snap::snapshot!(meili_snap::json_string!(response), @r###" { - "message": "Unknown field `NotAFeature`: expected one of `metrics`, `logsRoute`, `editDocumentsByFunction`, `containsFilter`, `network`, `getTaskDocumentsRoute`", + "message": "Unknown field `NotAFeature`: expected one of `metrics`, `logsRoute`, `editDocumentsByFunction`, `containsFilter`, `network`, `getTaskDocumentsRoute`, `compositeEmbedders`", "code": "bad_request", "type": "invalid_request", "link": "https://docs.meilisearch.com/errors#bad_request" diff --git a/crates/meilisearch/tests/vector/settings.rs b/crates/meilisearch/tests/vector/settings.rs index 9fed808b0..50253f930 100644 --- a/crates/meilisearch/tests/vector/settings.rs +++ b/crates/meilisearch/tests/vector/settings.rs @@ -412,6 +412,117 @@ async fn ollama_url_checks() { async fn composite_checks() { let server = Server::new().await; let index = server.index("test"); + // feature not enabled, using source + let (response, _code) = index + .update_settings(json!({ + "embedders": { + "test": null + } + })) + .await; + server.wait_task(response.uid()).await; + + let (response, code) = index + .update_settings(json!({ + "embedders": { + "test": { + "source": "composite", + "searchEmbedder": { + "source": "huggingFace", + "model": "sentence-transformers/all-MiniLM-L6-v2", + "revision": "e4ce9877abf3edfe10b0d82785e83bdcb973e22e", + }, + "indexingEmbedder": { + "source": "huggingFace", + "model": "sentence-transformers/all-MiniLM-L6-v2", + "revision": "e4ce9877abf3edfe10b0d82785e83bdcb973e22e", + }, + } + } + })) + .await; + snapshot!(code, @"400 Bad Request"); + snapshot!(response, @r###" + { + "message": "using `\"composite\"` as source requires enabling the `composite embedders` experimental feature. See https://github.com/orgs/meilisearch/discussions/816", + "code": "feature_not_enabled", + "type": "invalid_request", + "link": "https://docs.meilisearch.com/errors#feature_not_enabled" + } + "###); + + // feature not enabled, using search embedder + let (response, _code) = index + .update_settings(json!({ + "embedders": { + "test": null + } + })) + .await; + server.wait_task(response.uid()).await; + + let (response, code) = index + .update_settings(json!({ + "embedders": { + "test": { + "source": "userProvided", + "searchEmbedder": { + "source": "huggingFace", + "model": "sentence-transformers/all-MiniLM-L6-v2", + "revision": "e4ce9877abf3edfe10b0d82785e83bdcb973e22e", + } + } + } + })) + .await; + snapshot!(code, @"400 Bad Request"); + snapshot!(response, @r###" + { + "message": "setting `searchEmbedder` requires enabling the `composite embedders` experimental feature. See https://github.com/orgs/meilisearch/discussions/816", + "code": "feature_not_enabled", + "type": "invalid_request", + "link": "https://docs.meilisearch.com/errors#feature_not_enabled" + } + "###); + + // feature not enabled, using indexing embedder + let (response, _code) = index + .update_settings(json!({ + "embedders": { + "test": null + } + })) + .await; + server.wait_task(response.uid()).await; + + let (response, code) = index + .update_settings(json!({ + "embedders": { + "test": { + "source": "userProvided", + "indexingEmbedder": { + "source": "huggingFace", + "model": "sentence-transformers/all-MiniLM-L6-v2", + "revision": "e4ce9877abf3edfe10b0d82785e83bdcb973e22e", + } + } + } + })) + .await; + snapshot!(code, @"400 Bad Request"); + snapshot!(response, @r###" + { + "message": "setting `indexingEmbedder` requires enabling the `composite embedders` experimental feature. See https://github.com/orgs/meilisearch/discussions/816", + "code": "feature_not_enabled", + "type": "invalid_request", + "link": "https://docs.meilisearch.com/errors#feature_not_enabled" + } + "###); + + // enable feature + let (_, code) = server.set_features(json!({"compositeEmbedders": true})).await; + snapshot!(code, @"200 OK"); + // inner distribution let (response, _code) = index .update_settings(json!({