From e544a88da88a361bd8cf125eeafd86e66a686b3b Mon Sep 17 00:00:00 2001 From: CaroFG Date: Thu, 1 Feb 2024 12:44:39 +0100 Subject: [PATCH 01/14] Add embedders classes --- meilisearch/models/index.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/meilisearch/models/index.py b/meilisearch/models/index.py index d9b97c3d..4dd60388 100644 --- a/meilisearch/models/index.py +++ b/meilisearch/models/index.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import Any, Dict, Iterator, List, Optional +from typing import Any, Dict, Iterator, List, Optional, Union from camel_converter import to_snake from camel_converter.pydantic_base import CamelBase @@ -46,3 +46,28 @@ class TypoTolerance(CamelBase): disable_on_attributes: Optional[List[str]] = None disable_on_words: Optional[List[str]] = None min_word_size_for_typos: Optional[MinWordSizeForTypos] = None + + +class OpenAiEmbedder(CamelBase): + source: str = 'openAi' + model: Optional[str] = None # Defaults to text-embedding-ada-002 + api_key: Optional[str] = None # Can be provided through a CLI option or environment variable + document_template: Optional[str] = None + + +class HuggingFaceEmbedder(CamelBase): + source: str = 'huggingFace' + model: Optional[str] = None # Defaults to BAAI/bge-base-en-v1.5 + revision: Optional[str] = None + document_template: Optional[str] = None + + +class UserProvidedEmbedder(CamelBase): + source: str = 'userProvided' + dimensions: int + + +class Embedders(CamelBase): + def __init__(self, embedders: Optional[Dict[str, Union[OpenAiEmbedder, HuggingFaceEmbedder, UserProvidedEmbedder]]] = None): + super().__init__() + self.embedders = embedders if embedders is not None else {} From fccdda62e58e977c68b51ea715226752ae6f95b2 Mon Sep 17 00:00:00 2001 From: CaroFG Date: Thu, 1 Feb 2024 12:45:23 +0100 Subject: [PATCH 02/14] Add embedders path --- meilisearch/config.py | 1 + 1 file changed, 1 insertion(+) diff --git a/meilisearch/config.py b/meilisearch/config.py index 0c862391..09cc5fad 100644 --- a/meilisearch/config.py +++ b/meilisearch/config.py @@ -38,6 +38,7 @@ class Paths: separator_tokens = "separator-tokens" non_separator_tokens = "non-separator-tokens" swap = "swap-indexes" + embedders = "embedders" def __init__( self, From 200b672e1a43052a2f9dcf1528e6830f9597e3e9 Mon Sep 17 00:00:00 2001 From: CaroFG Date: Thu, 1 Feb 2024 12:50:00 +0100 Subject: [PATCH 03/14] Add embedders subroutes --- meilisearch/index.py | 64 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/meilisearch/index.py b/meilisearch/index.py index 9446c8c6..7f80b0b0 100644 --- a/meilisearch/index.py +++ b/meilisearch/index.py @@ -10,7 +10,7 @@ from meilisearch.config import Config from meilisearch.errors import version_error_hint_message from meilisearch.models.document import Document, DocumentsResults -from meilisearch.models.index import Faceting, IndexStats, Pagination, TypoTolerance +from meilisearch.models.index import Faceting, IndexStats, Pagination, TypoTolerance, Embedders from meilisearch.models.task import Task, TaskInfo, TaskResults from meilisearch.task import TaskHandler @@ -1757,6 +1757,68 @@ def reset_non_separator_tokens(self) -> TaskInfo: return TaskInfo(**task) + # EMBEDDERS SUB-ROUTES + + def get_embedders(self) -> Embedders: + """Get embedders of the index. + + Returns + ------- + settings: + The embedders settings of the index. + + Raises + ------ + MeilisearchApiError + An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://www.meilisearch.com/docs/reference/errors/error_codes#meilisearch-errors + """ + embedders = self.http.get(self.__settings_url_for(self.config.paths.embedders)) + + return Embedders(**embedders) + + def update_embedders(self, body: Union[Mapping[str, Any], None]) -> TaskInfo: + """Update embedders of the index. + + Parameters + ---------- + body: dict + Dictionary containing the embedders. + + Returns + ------- + task_info: + TaskInfo instance containing information about a task to track the progress of an asynchronous process. + https://www.meilisearch.com/docs/reference/api/tasks#get-one-task + + Raises + ------ + MeilisearchApiError + An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://www.meilisearch.com/docs/reference/errors/error_codes#meilisearch-errors + """ + task = self.http.patch(self.__settings_url_for(self.config.paths.embedders), body) + + return TaskInfo(**task) + + def reset_embedders(self) -> TaskInfo: + """Reset embedders of the index to default values. + + Returns + ------- + task_info: + TaskInfo instance containing information about a task to track the progress of an asynchronous process. + https://www.meilisearch.com/docs/reference/api/tasks#get-one-task + + Raises + ------ + MeilisearchApiError + An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://www.meilisearch.com/docs/reference/errors/error_codes#meilisearch-errors + """ + task = self.http.delete( + self.__settings_url_for(self.config.paths.embedders), + ) + + return TaskInfo(**task) + @staticmethod def _batch( documents: Sequence[Mapping[str, Any]], batch_size: int From 0836ca37d54cf3019df5d1161eb8e2c696641eba Mon Sep 17 00:00:00 2001 From: CaroFG Date: Tue, 6 Feb 2024 15:15:32 +0100 Subject: [PATCH 04/14] Update get_embedders method --- meilisearch/index.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/meilisearch/index.py b/meilisearch/index.py index 7f80b0b0..e94f460a 100644 --- a/meilisearch/index.py +++ b/meilisearch/index.py @@ -1759,7 +1759,7 @@ def reset_non_separator_tokens(self) -> TaskInfo: # EMBEDDERS SUB-ROUTES - def get_embedders(self) -> Embedders: + def get_embedders(self) -> Embedders | None: """Get embedders of the index. Returns @@ -1772,9 +1772,12 @@ def get_embedders(self) -> Embedders: MeilisearchApiError An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://www.meilisearch.com/docs/reference/errors/error_codes#meilisearch-errors """ - embedders = self.http.get(self.__settings_url_for(self.config.paths.embedders)) + response = self.http.get(self.__settings_url_for(self.config.paths.embedders)) - return Embedders(**embedders) + if not response: + return None + + return Embedders(embedders=response) def update_embedders(self, body: Union[Mapping[str, Any], None]) -> TaskInfo: """Update embedders of the index. From 0c9a4082ed7b49c88459d3bcead5226010de3f4d Mon Sep 17 00:00:00 2001 From: CaroFG Date: Tue, 6 Feb 2024 15:16:03 +0100 Subject: [PATCH 05/14] Update embedders class --- meilisearch/models/index.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/meilisearch/models/index.py b/meilisearch/models/index.py index 4dd60388..485fd1b8 100644 --- a/meilisearch/models/index.py +++ b/meilisearch/models/index.py @@ -5,7 +5,6 @@ from camel_converter import to_snake from camel_converter.pydantic_base import CamelBase - class IndexStats: __dict: Dict @@ -68,6 +67,4 @@ class UserProvidedEmbedder(CamelBase): class Embedders(CamelBase): - def __init__(self, embedders: Optional[Dict[str, Union[OpenAiEmbedder, HuggingFaceEmbedder, UserProvidedEmbedder]]] = None): - super().__init__() - self.embedders = embedders if embedders is not None else {} + embedders: Dict[str, Union[OpenAiEmbedder, HuggingFaceEmbedder, UserProvidedEmbedder]] From ba98ef9587a036f6e976e4b27d30b4d0d759dd05 Mon Sep 17 00:00:00 2001 From: CaroFG Date: Tue, 6 Feb 2024 15:18:09 +0100 Subject: [PATCH 06/14] Add embedders settings tests --- tests/settings/test_settings_embedders.py | 53 +++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 tests/settings/test_settings_embedders.py diff --git a/tests/settings/test_settings_embedders.py b/tests/settings/test_settings_embedders.py new file mode 100644 index 00000000..e3de7ee6 --- /dev/null +++ b/tests/settings/test_settings_embedders.py @@ -0,0 +1,53 @@ +import pytest +from meilisearch.models.index import Embedders + +NEW_EMBEDDERS = { + "default": { + "source": 'userProvided', + "dimensions": 1, + } +} + +@pytest.mark.usefixtures("enable_vector_search") +def test_get_default_embedders(empty_index): + """Tests getting default embedders.""" + response = empty_index().get_embedders() + + assert response is None + +@pytest.mark.usefixtures("enable_vector_search") +def test_update_embedders_with_user_provided_source(empty_index): + """Tests updating embedders.""" + index = empty_index() + response_update = index.update_embedders(NEW_EMBEDDERS) + update = index.wait_for_task(response_update.task_uid) + response_get = index.get_embedders() + print(response_get) + assert update.status == "succeeded" + assert response_get == Embedders( + embedders=NEW_EMBEDDERS + ) + + +@pytest.mark.usefixtures("enable_vector_search") +def test_reset_embedders(empty_index): + """Tests resetting the typo_tolerance setting to its default value.""" + index = empty_index() + + # Update the settings + response_update = index.update_embedders(NEW_EMBEDDERS) + update1 = index.wait_for_task(response_update.task_uid) + # Get the setting after update + response_get = index.get_embedders() + # Reset the setting + response_reset = index.reset_embedders() + update2 = index.wait_for_task(response_reset.task_uid) + # Get the setting after reset + response_last = index.get_embedders() + + assert update1.status == "succeeded" + assert response_get == Embedders( + embedders=NEW_EMBEDDERS + ) + assert update2.status == "succeeded" + assert response_last is None From ede85a06dd0ee4554fbb9f3636f45652acb53b4f Mon Sep 17 00:00:00 2001 From: CaroFG Date: Tue, 6 Feb 2024 15:18:49 +0100 Subject: [PATCH 07/14] Update vector search tests --- tests/conftest.py | 15 ++++++++++++--- tests/index/test_index_search_meilisearch.py | 6 +----- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index cd6be2cb..3914fa4e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -129,12 +129,21 @@ def index_maker(index_uid=common.INDEX_UID, documents=small_movies): @fixture(scope="function") def index_with_documents_and_vectors(empty_index, small_movies): - small_movies[0]["_vectors"] = [0.1, 0.2] + small_movies[0]["_vectors"] = {"default": [0.1, 0.2]} def index_maker(index_uid=common.INDEX_UID, documents=small_movies): index = empty_index(index_uid) - task = index.add_documents(documents) - index.wait_for_task(task.task_uid) + settings_update_task = index.update_embedders( + { + "default": { + "source": 'userProvided', + "dimensions": 2, + } + } + ) + index.wait_for_task(settings_update_task.task_uid) + document_addition_task = index.add_documents(documents) + index.wait_for_task(document_addition_task.task_uid) return index return index_maker diff --git a/tests/index/test_index_search_meilisearch.py b/tests/index/test_index_search_meilisearch.py index ad4443e4..017652a7 100644 --- a/tests/index/test_index_search_meilisearch.py +++ b/tests/index/test_index_search_meilisearch.py @@ -459,13 +459,9 @@ def test_attributes_to_search_on_search_no_match(index_with_documents): assert response["hits"] == [] -@pytest.mark.xfail( - strict=True, reason="https://github.com/meilisearch/meilisearch-python/issues/901" -) @pytest.mark.usefixtures("enable_vector_search") def test_vector_search(index_with_documents_and_vectors): response = index_with_documents_and_vectors().search( - "How to Train Your Dragon", opt_params={"vector": [0.1, 0.2]} + "", opt_params={"vector":[0.1, 0.2], "hybrid": {"semanticRatio": 1.0}} ) - assert response["hits"][0]["id"] == "287947" assert response["vector"] == [0.1, 0.2] From 68c4004c33eaa48eb9e1c9211cec7ed1c35c71df Mon Sep 17 00:00:00 2001 From: CaroFG Date: Tue, 6 Feb 2024 15:24:55 +0100 Subject: [PATCH 08/14] Format code with Black and sort imports with iSort --- meilisearch/index.py | 2 +- meilisearch/models/index.py | 13 +++++++------ tests/conftest.py | 8 ++++---- tests/index/test_index_search_meilisearch.py | 2 +- tests/settings/test_settings_embedders.py | 13 ++++++------- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/meilisearch/index.py b/meilisearch/index.py index e94f460a..ddb68ab4 100644 --- a/meilisearch/index.py +++ b/meilisearch/index.py @@ -10,7 +10,7 @@ from meilisearch.config import Config from meilisearch.errors import version_error_hint_message from meilisearch.models.document import Document, DocumentsResults -from meilisearch.models.index import Faceting, IndexStats, Pagination, TypoTolerance, Embedders +from meilisearch.models.index import Embedders, Faceting, IndexStats, Pagination, TypoTolerance from meilisearch.models.task import Task, TaskInfo, TaskResults from meilisearch.task import TaskHandler diff --git a/meilisearch/models/index.py b/meilisearch/models/index.py index 485fd1b8..535d8e23 100644 --- a/meilisearch/models/index.py +++ b/meilisearch/models/index.py @@ -5,6 +5,7 @@ from camel_converter import to_snake from camel_converter.pydantic_base import CamelBase + class IndexStats: __dict: Dict @@ -48,21 +49,21 @@ class TypoTolerance(CamelBase): class OpenAiEmbedder(CamelBase): - source: str = 'openAi' - model: Optional[str] = None # Defaults to text-embedding-ada-002 - api_key: Optional[str] = None # Can be provided through a CLI option or environment variable + source: str = "openAi" + model: Optional[str] = None # Defaults to text-embedding-ada-002 + api_key: Optional[str] = None # Can be provided through a CLI option or environment variable document_template: Optional[str] = None class HuggingFaceEmbedder(CamelBase): - source: str = 'huggingFace' - model: Optional[str] = None # Defaults to BAAI/bge-base-en-v1.5 + source: str = "huggingFace" + model: Optional[str] = None # Defaults to BAAI/bge-base-en-v1.5 revision: Optional[str] = None document_template: Optional[str] = None class UserProvidedEmbedder(CamelBase): - source: str = 'userProvided' + source: str = "userProvided" dimensions: int diff --git a/tests/conftest.py b/tests/conftest.py index 3914fa4e..0d17010a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -135,10 +135,10 @@ def index_maker(index_uid=common.INDEX_UID, documents=small_movies): index = empty_index(index_uid) settings_update_task = index.update_embedders( { - "default": { - "source": 'userProvided', - "dimensions": 2, - } + "default": { + "source": "userProvided", + "dimensions": 2, + } } ) index.wait_for_task(settings_update_task.task_uid) diff --git a/tests/index/test_index_search_meilisearch.py b/tests/index/test_index_search_meilisearch.py index 017652a7..e5b045cd 100644 --- a/tests/index/test_index_search_meilisearch.py +++ b/tests/index/test_index_search_meilisearch.py @@ -462,6 +462,6 @@ def test_attributes_to_search_on_search_no_match(index_with_documents): @pytest.mark.usefixtures("enable_vector_search") def test_vector_search(index_with_documents_and_vectors): response = index_with_documents_and_vectors().search( - "", opt_params={"vector":[0.1, 0.2], "hybrid": {"semanticRatio": 1.0}} + "", opt_params={"vector": [0.1, 0.2], "hybrid": {"semanticRatio": 1.0}} ) assert response["vector"] == [0.1, 0.2] diff --git a/tests/settings/test_settings_embedders.py b/tests/settings/test_settings_embedders.py index e3de7ee6..b1c31b91 100644 --- a/tests/settings/test_settings_embedders.py +++ b/tests/settings/test_settings_embedders.py @@ -1,13 +1,15 @@ import pytest + from meilisearch.models.index import Embedders NEW_EMBEDDERS = { "default": { - "source": 'userProvided', + "source": "userProvided", "dimensions": 1, } } + @pytest.mark.usefixtures("enable_vector_search") def test_get_default_embedders(empty_index): """Tests getting default embedders.""" @@ -15,6 +17,7 @@ def test_get_default_embedders(empty_index): assert response is None + @pytest.mark.usefixtures("enable_vector_search") def test_update_embedders_with_user_provided_source(empty_index): """Tests updating embedders.""" @@ -24,9 +27,7 @@ def test_update_embedders_with_user_provided_source(empty_index): response_get = index.get_embedders() print(response_get) assert update.status == "succeeded" - assert response_get == Embedders( - embedders=NEW_EMBEDDERS - ) + assert response_get == Embedders(embedders=NEW_EMBEDDERS) @pytest.mark.usefixtures("enable_vector_search") @@ -46,8 +47,6 @@ def test_reset_embedders(empty_index): response_last = index.get_embedders() assert update1.status == "succeeded" - assert response_get == Embedders( - embedders=NEW_EMBEDDERS - ) + assert response_get == Embedders(embedders=NEW_EMBEDDERS) assert update2.status == "succeeded" assert response_last is None From 318eff1b6075a1994917e67d31afd877142831a6 Mon Sep 17 00:00:00 2001 From: CaroFG <48251481+CaroFG@users.noreply.github.com> Date: Wed, 7 Feb 2024 11:00:58 +0100 Subject: [PATCH 09/14] Add new_embedders fixture Co-authored-by: Paul Sanders --- tests/settings/test_settings_embedders.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/settings/test_settings_embedders.py b/tests/settings/test_settings_embedders.py index b1c31b91..33078290 100644 --- a/tests/settings/test_settings_embedders.py +++ b/tests/settings/test_settings_embedders.py @@ -2,12 +2,14 @@ from meilisearch.models.index import Embedders -NEW_EMBEDDERS = { - "default": { - "source": "userProvided", - "dimensions": 1, +@pytest.fixture +def new_embedders(): + return { + "default": { + "source": "userProvided", + "dimensions": 1, + } } -} @pytest.mark.usefixtures("enable_vector_search") From b08caee6a668e221619e663d170330bb3058fc63 Mon Sep 17 00:00:00 2001 From: CaroFG <48251481+CaroFG@users.noreply.github.com> Date: Wed, 7 Feb 2024 11:02:10 +0100 Subject: [PATCH 10/14] Use new_embedders fixture Co-authored-by: Paul Sanders --- tests/settings/test_settings_embedders.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/tests/settings/test_settings_embedders.py b/tests/settings/test_settings_embedders.py index 33078290..f1757274 100644 --- a/tests/settings/test_settings_embedders.py +++ b/tests/settings/test_settings_embedders.py @@ -21,24 +21,23 @@ def test_get_default_embedders(empty_index): @pytest.mark.usefixtures("enable_vector_search") -def test_update_embedders_with_user_provided_source(empty_index): +def test_update_embedders_with_user_provided_source(new_embedders, empty_index): """Tests updating embedders.""" index = empty_index() - response_update = index.update_embedders(NEW_EMBEDDERS) + response_update = index.update_embedders(new_embedders) update = index.wait_for_task(response_update.task_uid) response_get = index.get_embedders() - print(response_get) assert update.status == "succeeded" - assert response_get == Embedders(embedders=NEW_EMBEDDERS) + assert response_get == Embedders(embedders=new_embedders) @pytest.mark.usefixtures("enable_vector_search") -def test_reset_embedders(empty_index): +def test_reset_embedders(new_embedders, empty_index): """Tests resetting the typo_tolerance setting to its default value.""" index = empty_index() # Update the settings - response_update = index.update_embedders(NEW_EMBEDDERS) + response_update = index.update_embedders(new_embedders) update1 = index.wait_for_task(response_update.task_uid) # Get the setting after update response_get = index.get_embedders() @@ -49,6 +48,6 @@ def test_reset_embedders(empty_index): response_last = index.get_embedders() assert update1.status == "succeeded" - assert response_get == Embedders(embedders=NEW_EMBEDDERS) + assert response_get == Embedders(embedders=new_embedders) assert update2.status == "succeeded" assert response_last is None From 7b7643bec41afc9fb479b5b2017ffb85f8b1c001 Mon Sep 17 00:00:00 2001 From: CaroFG Date: Wed, 7 Feb 2024 11:06:09 +0100 Subject: [PATCH 11/14] Remove warning from README --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 7ba82c31..e0444a37 100644 --- a/README.md +++ b/README.md @@ -205,7 +205,6 @@ index.search( This package guarantees compatibility with [version v1.x of Meilisearch](https://github.com/meilisearch/meilisearch/releases/latest), but some features may not be present. Please check the [issues](https://github.com/meilisearch/meilisearch-python/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22+label%3Aenhancement) for more info. -⚠️ This package is not compatible with the [`vectoreStore` experimental feature](https://www.meilisearch.com/docs/learn/experimental/vector_search) of Meilisearch v1.6.0 and later. More information on this [issue](https://github.com/meilisearch/meilisearch-python/issues/901). ## 💡 Learn more From 2097c73e1f8af10703101a8d12346ab7464dd12c Mon Sep 17 00:00:00 2001 From: CaroFG Date: Wed, 7 Feb 2024 11:26:06 +0100 Subject: [PATCH 12/14] Fix formatting issue --- tests/settings/test_settings_embedders.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/settings/test_settings_embedders.py b/tests/settings/test_settings_embedders.py index f1757274..7e978618 100644 --- a/tests/settings/test_settings_embedders.py +++ b/tests/settings/test_settings_embedders.py @@ -2,6 +2,7 @@ from meilisearch.models.index import Embedders + @pytest.fixture def new_embedders(): return { From a25244e163e39b71cbc322339a4ca728fc744d42 Mon Sep 17 00:00:00 2001 From: CaroFG Date: Wed, 7 Feb 2024 11:45:46 +0100 Subject: [PATCH 13/14] Move fixture to conftest file to fix linting issue --- tests/conftest.py | 10 ++++++++++ tests/settings/test_settings_embedders.py | 11 +---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 0d17010a..043bca1f 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -225,3 +225,13 @@ def enable_vector_search(): json={"vectorStore": False}, timeout=10, ) + + +@fixture +def new_embedders(): + return { + "default": { + "source": "userProvided", + "dimensions": 1, + } + } diff --git a/tests/settings/test_settings_embedders.py b/tests/settings/test_settings_embedders.py index 7e978618..db778aea 100644 --- a/tests/settings/test_settings_embedders.py +++ b/tests/settings/test_settings_embedders.py @@ -3,16 +3,6 @@ from meilisearch.models.index import Embedders -@pytest.fixture -def new_embedders(): - return { - "default": { - "source": "userProvided", - "dimensions": 1, - } - } - - @pytest.mark.usefixtures("enable_vector_search") def test_get_default_embedders(empty_index): """Tests getting default embedders.""" @@ -33,6 +23,7 @@ def test_update_embedders_with_user_provided_source(new_embedders, empty_index): @pytest.mark.usefixtures("enable_vector_search") +@pytest.mark.usefixtures("new_embedders") def test_reset_embedders(new_embedders, empty_index): """Tests resetting the typo_tolerance setting to its default value.""" index = empty_index() From cfb57f1034d6d29addb80cc30f9743e2a476a9d5 Mon Sep 17 00:00:00 2001 From: CaroFG Date: Wed, 7 Feb 2024 12:32:27 +0100 Subject: [PATCH 14/14] Remove unnecessary usefixtures --- tests/settings/test_settings_embedders.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/settings/test_settings_embedders.py b/tests/settings/test_settings_embedders.py index db778aea..4d27ffb1 100644 --- a/tests/settings/test_settings_embedders.py +++ b/tests/settings/test_settings_embedders.py @@ -23,7 +23,6 @@ def test_update_embedders_with_user_provided_source(new_embedders, empty_index): @pytest.mark.usefixtures("enable_vector_search") -@pytest.mark.usefixtures("new_embedders") def test_reset_embedders(new_embedders, empty_index): """Tests resetting the typo_tolerance setting to its default value.""" index = empty_index()