From 76bb3ad423c7584b3d4dec3e1ef5ed15e05b675e Mon Sep 17 00:00:00 2001 From: Raynor Chavez Date: Mon, 19 Aug 2024 14:25:36 +0800 Subject: [PATCH 01/17] initial attempt --- src/marqo/core/embed/embed.py | 8 ++++++-- src/marqo/tensor_search/tensor_search.py | 3 +++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/marqo/core/embed/embed.py b/src/marqo/core/embed/embed.py index d8c00815c..7f7c084bc 100644 --- a/src/marqo/core/embed/embed.py +++ b/src/marqo/core/embed/embed.py @@ -13,6 +13,7 @@ from marqo.tensor_search.tensor_search_logging import get_logger from marqo.core.utils.prefix import determine_text_prefix, DeterminePrefixContentType from marqo.vespa.vespa_client import VespaClient +from marqo.tensor_search import utils logger = get_logger(__name__) @@ -24,7 +25,8 @@ class Embed: def __init__(self, vespa_client: VespaClient, index_management: IndexManagement, default_device: str): self.vespa_client = vespa_client self.index_management = index_management - self.default_device = default_device + self.default_device = utils.read_env_vars_and_defaults("MARQO_BEST_AVAILABLE_DEVICE") + #self.default_device = default_device @pydantic.validator('default_device') def validate_default_device(cls, value): @@ -61,10 +63,12 @@ def embed_content( temp_config = config.Config( vespa_client=self.vespa_client, ) - + # Set default device if not provided if device is None: + print(f"device is {device}") device = self.default_device + print(f"device: {device}") # Content validation is done in API model layer diff --git a/src/marqo/tensor_search/tensor_search.py b/src/marqo/tensor_search/tensor_search.py index f4496f03e..b7c4c986f 100644 --- a/src/marqo/tensor_search/tensor_search.py +++ b/src/marqo/tensor_search/tensor_search.py @@ -1329,6 +1329,7 @@ def search(config: Config, index_name: str, text: Optional[Union[str, dict, Cust if device is None: selected_device = utils.read_env_vars_and_defaults("MARQO_BEST_AVAILABLE_DEVICE") + print(f"search selected_device: {selected_device}") if selected_device is None: raise api_exceptions.InternalError("Best available device was not properly determined on Marqo startup.") logger.debug(f"No device given for search. Defaulting to best available device: {selected_device}") @@ -1592,6 +1593,7 @@ def assign_query_to_vector_job( "assign_query_to_vector_job() expects param `grouped_content` with 2 elems. Instead received" f" `grouped_content` with {len(grouped_content)} elems") ptrs = [] + print(f"from assign_query_to_vector_job, device: {device}") for i, grouped_content in enumerate(grouped_content): content_type = 'text' if i == 0 else 'image' vector_job = VectorisedJobs( @@ -1649,6 +1651,7 @@ def vectorise_jobs(jobs: List[VectorisedJobs]) -> Dict[JHash, Dict[str, List[flo for v in jobs: # TODO: Handle exception for single job, and allow others to run. try: + print(f"from vectorise_jobs, device: {v.device}") if v.content: vectors = s2_inference.vectorise( model_name=v.model_name, model_properties=v.model_properties, From a0aec86897d2f9e127749c0e20320585a0a01cb0 Mon Sep 17 00:00:00 2001 From: Raynor Chavez Date: Mon, 19 Aug 2024 14:46:33 +0800 Subject: [PATCH 02/17] debug print --- src/marqo/config.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/marqo/config.py b/src/marqo/config.py index cca750d1f..5ff7536f0 100644 --- a/src/marqo/config.py +++ b/src/marqo/config.py @@ -48,6 +48,7 @@ def __init__( self.document = Document(vespa_client, self.index_management) self.recommender = Recommender(vespa_client, self.index_management) self.embed = Embed(vespa_client, self.index_management, self.default_device) + print(f"from Config: default_device={self.default_device}") def set_is_remote(self, vespa_client: VespaClient): local_host_markers = ["localhost", "0.0.0.0", "127.0.0.1"] From 649956c7b9157286ec3fa39ea20b0d3a10ba0a1e Mon Sep 17 00:00:00 2001 From: Raynor Chavez Date: Mon, 19 Aug 2024 14:50:56 +0800 Subject: [PATCH 03/17] debug prints --- src/marqo/config.py | 1 + src/marqo/core/embed/embed.py | 1 + 2 files changed, 2 insertions(+) diff --git a/src/marqo/config.py b/src/marqo/config.py index 5ff7536f0..7792069b8 100644 --- a/src/marqo/config.py +++ b/src/marqo/config.py @@ -49,6 +49,7 @@ def __init__( self.recommender = Recommender(vespa_client, self.index_management) self.embed = Embed(vespa_client, self.index_management, self.default_device) print(f"from Config: default_device={self.default_device}") + print(f"from config, embed is {self.embed}") def set_is_remote(self, vespa_client: VespaClient): local_host_markers = ["localhost", "0.0.0.0", "127.0.0.1"] diff --git a/src/marqo/core/embed/embed.py b/src/marqo/core/embed/embed.py index 7f7c084bc..ae728429f 100644 --- a/src/marqo/core/embed/embed.py +++ b/src/marqo/core/embed/embed.py @@ -27,6 +27,7 @@ def __init__(self, vespa_client: VespaClient, index_management: IndexManagement, self.index_management = index_management self.default_device = utils.read_env_vars_and_defaults("MARQO_BEST_AVAILABLE_DEVICE") #self.default_device = default_device + print(f"From embed __init__, default device is {self.default_device}") @pydantic.validator('default_device') def validate_default_device(cls, value): From afc9d885a04c09c992f7efe33e6c04c480f254e6 Mon Sep 17 00:00:00 2001 From: Raynor Chavez Date: Mon, 19 Aug 2024 14:58:52 +0800 Subject: [PATCH 04/17] directly assign device to env var instead to self --- src/marqo/core/embed/embed.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/marqo/core/embed/embed.py b/src/marqo/core/embed/embed.py index ae728429f..7af9d493a 100644 --- a/src/marqo/core/embed/embed.py +++ b/src/marqo/core/embed/embed.py @@ -68,7 +68,7 @@ def embed_content( # Set default device if not provided if device is None: print(f"device is {device}") - device = self.default_device + device = utils.read_env_vars_and_defaults("MARQO_BEST_AVAILABLE_DEVICE") print(f"device: {device}") From cfe34eeec7a3cd7522f1bf93ec781cf7c1955c89 Mon Sep 17 00:00:00 2001 From: Raynor Chavez Date: Mon, 19 Aug 2024 15:06:20 +0800 Subject: [PATCH 05/17] cleanup --- src/marqo/config.py | 2 -- src/marqo/core/embed/embed.py | 6 +----- src/marqo/tensor_search/tensor_search.py | 3 --- 3 files changed, 1 insertion(+), 10 deletions(-) diff --git a/src/marqo/config.py b/src/marqo/config.py index 7792069b8..cca750d1f 100644 --- a/src/marqo/config.py +++ b/src/marqo/config.py @@ -48,8 +48,6 @@ def __init__( self.document = Document(vespa_client, self.index_management) self.recommender = Recommender(vespa_client, self.index_management) self.embed = Embed(vespa_client, self.index_management, self.default_device) - print(f"from Config: default_device={self.default_device}") - print(f"from config, embed is {self.embed}") def set_is_remote(self, vespa_client: VespaClient): local_host_markers = ["localhost", "0.0.0.0", "127.0.0.1"] diff --git a/src/marqo/core/embed/embed.py b/src/marqo/core/embed/embed.py index 7af9d493a..a438fa182 100644 --- a/src/marqo/core/embed/embed.py +++ b/src/marqo/core/embed/embed.py @@ -25,9 +25,7 @@ class Embed: def __init__(self, vespa_client: VespaClient, index_management: IndexManagement, default_device: str): self.vespa_client = vespa_client self.index_management = index_management - self.default_device = utils.read_env_vars_and_defaults("MARQO_BEST_AVAILABLE_DEVICE") - #self.default_device = default_device - print(f"From embed __init__, default device is {self.default_device}") + self.default_device = default_device @pydantic.validator('default_device') def validate_default_device(cls, value): @@ -67,9 +65,7 @@ def embed_content( # Set default device if not provided if device is None: - print(f"device is {device}") device = utils.read_env_vars_and_defaults("MARQO_BEST_AVAILABLE_DEVICE") - print(f"device: {device}") # Content validation is done in API model layer diff --git a/src/marqo/tensor_search/tensor_search.py b/src/marqo/tensor_search/tensor_search.py index b7c4c986f..f4496f03e 100644 --- a/src/marqo/tensor_search/tensor_search.py +++ b/src/marqo/tensor_search/tensor_search.py @@ -1329,7 +1329,6 @@ def search(config: Config, index_name: str, text: Optional[Union[str, dict, Cust if device is None: selected_device = utils.read_env_vars_and_defaults("MARQO_BEST_AVAILABLE_DEVICE") - print(f"search selected_device: {selected_device}") if selected_device is None: raise api_exceptions.InternalError("Best available device was not properly determined on Marqo startup.") logger.debug(f"No device given for search. Defaulting to best available device: {selected_device}") @@ -1593,7 +1592,6 @@ def assign_query_to_vector_job( "assign_query_to_vector_job() expects param `grouped_content` with 2 elems. Instead received" f" `grouped_content` with {len(grouped_content)} elems") ptrs = [] - print(f"from assign_query_to_vector_job, device: {device}") for i, grouped_content in enumerate(grouped_content): content_type = 'text' if i == 0 else 'image' vector_job = VectorisedJobs( @@ -1651,7 +1649,6 @@ def vectorise_jobs(jobs: List[VectorisedJobs]) -> Dict[JHash, Dict[str, List[flo for v in jobs: # TODO: Handle exception for single job, and allow others to run. try: - print(f"from vectorise_jobs, device: {v.device}") if v.content: vectors = s2_inference.vectorise( model_name=v.model_name, model_properties=v.model_properties, From ae5b9fb023807310a82875eda4894749326b63a3 Mon Sep 17 00:00:00 2001 From: Raynor Chavez Date: Mon, 19 Aug 2024 15:10:14 +0800 Subject: [PATCH 06/17] mroe debug --- src/marqo/core/embed/embed.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/marqo/core/embed/embed.py b/src/marqo/core/embed/embed.py index a438fa182..a5a569d4b 100644 --- a/src/marqo/core/embed/embed.py +++ b/src/marqo/core/embed/embed.py @@ -25,7 +25,9 @@ class Embed: def __init__(self, vespa_client: VespaClient, index_management: IndexManagement, default_device: str): self.vespa_client = vespa_client self.index_management = index_management - self.default_device = default_device + self.default_device = utils.read_env_vars_and_defaults("MARQO_BEST_AVAILABLE_DEVICE") + #self.default_device = default_device + print(f"From embed __init__, default device is {self.default_device}") @pydantic.validator('default_device') def validate_default_device(cls, value): @@ -65,7 +67,11 @@ def embed_content( # Set default device if not provided if device is None: - device = utils.read_env_vars_and_defaults("MARQO_BEST_AVAILABLE_DEVICE") + print(f"device is {device}") + device = self.default_device + print(f"device: {device}") + device = utils.read_env_vars_and_defaults(EnvVars.MARQO_BEST_AVAILABLE_DEVICE) + print(f"final device: {device}") # Content validation is done in API model layer From 67c84ffa37a1dbf48e24c97bd83c66a328775820 Mon Sep 17 00:00:00 2001 From: Raynor Chavez Date: Mon, 19 Aug 2024 15:10:33 +0800 Subject: [PATCH 07/17] revert __init__ --- src/marqo/core/embed/embed.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/marqo/core/embed/embed.py b/src/marqo/core/embed/embed.py index a5a569d4b..a578212c9 100644 --- a/src/marqo/core/embed/embed.py +++ b/src/marqo/core/embed/embed.py @@ -25,8 +25,8 @@ class Embed: def __init__(self, vespa_client: VespaClient, index_management: IndexManagement, default_device: str): self.vespa_client = vespa_client self.index_management = index_management - self.default_device = utils.read_env_vars_and_defaults("MARQO_BEST_AVAILABLE_DEVICE") - #self.default_device = default_device + #self.default_device = utils.read_env_vars_and_defaults("MARQO_BEST_AVAILABLE_DEVICE") + self.default_device = default_device print(f"From embed __init__, default device is {self.default_device}") @pydantic.validator('default_device') From 8a00aa13a3d093550f0afcf72c5c323ec260ba33 Mon Sep 17 00:00:00 2001 From: Raynor Chavez Date: Mon, 19 Aug 2024 15:13:44 +0800 Subject: [PATCH 08/17] fix bug --- src/marqo/core/embed/embed.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/marqo/core/embed/embed.py b/src/marqo/core/embed/embed.py index a578212c9..fc55bc8e0 100644 --- a/src/marqo/core/embed/embed.py +++ b/src/marqo/core/embed/embed.py @@ -70,7 +70,7 @@ def embed_content( print(f"device is {device}") device = self.default_device print(f"device: {device}") - device = utils.read_env_vars_and_defaults(EnvVars.MARQO_BEST_AVAILABLE_DEVICE) + device = utils.read_env_vars_and_defaults("MARQO_BEST_AVAILABLE_DEVICE") print(f"final device: {device}") From 2f36a2dc54af21473e9c37c777896a7f228283d2 Mon Sep 17 00:00:00 2001 From: Raynor Chavez Date: Mon, 19 Aug 2024 15:17:05 +0800 Subject: [PATCH 09/17] cleanup --- src/marqo/core/embed/embed.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/marqo/core/embed/embed.py b/src/marqo/core/embed/embed.py index fc55bc8e0..dc96f2318 100644 --- a/src/marqo/core/embed/embed.py +++ b/src/marqo/core/embed/embed.py @@ -25,9 +25,7 @@ class Embed: def __init__(self, vespa_client: VespaClient, index_management: IndexManagement, default_device: str): self.vespa_client = vespa_client self.index_management = index_management - #self.default_device = utils.read_env_vars_and_defaults("MARQO_BEST_AVAILABLE_DEVICE") self.default_device = default_device - print(f"From embed __init__, default device is {self.default_device}") @pydantic.validator('default_device') def validate_default_device(cls, value): @@ -67,12 +65,7 @@ def embed_content( # Set default device if not provided if device is None: - print(f"device is {device}") - device = self.default_device - print(f"device: {device}") device = utils.read_env_vars_and_defaults("MARQO_BEST_AVAILABLE_DEVICE") - print(f"final device: {device}") - # Content validation is done in API model layer t0 = timer() From 0fc9b0cb9af17f2410f72882753a9ec2a86fdc50 Mon Sep 17 00:00:00 2001 From: Raynor Chavez Date: Mon, 19 Aug 2024 15:18:16 +0800 Subject: [PATCH 10/17] add todo --- src/marqo/core/embed/embed.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/marqo/core/embed/embed.py b/src/marqo/core/embed/embed.py index dc96f2318..cfcb0a8d7 100644 --- a/src/marqo/core/embed/embed.py +++ b/src/marqo/core/embed/embed.py @@ -65,6 +65,7 @@ def embed_content( # Set default device if not provided if device is None: + # TODO: Figure out why device = self.default_device becomes cpu, even when it is set to cuda in __init__ device = utils.read_env_vars_and_defaults("MARQO_BEST_AVAILABLE_DEVICE") # Content validation is done in API model layer From 4f5f7b1fc0c34418996584393bd2ea299cf62431 Mon Sep 17 00:00:00 2001 From: Raynor Chavez Date: Mon, 19 Aug 2024 15:38:08 +0800 Subject: [PATCH 11/17] cleanup --- src/marqo/core/embed/embed.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/marqo/core/embed/embed.py b/src/marqo/core/embed/embed.py index cfcb0a8d7..dc96f2318 100644 --- a/src/marqo/core/embed/embed.py +++ b/src/marqo/core/embed/embed.py @@ -65,7 +65,6 @@ def embed_content( # Set default device if not provided if device is None: - # TODO: Figure out why device = self.default_device becomes cpu, even when it is set to cuda in __init__ device = utils.read_env_vars_and_defaults("MARQO_BEST_AVAILABLE_DEVICE") # Content validation is done in API model layer From 67a1d2fe1f2f6aa25f474d76bd80d51a1d62c774 Mon Sep 17 00:00:00 2001 From: Raynor Chavez Date: Tue, 20 Aug 2024 10:47:42 +0800 Subject: [PATCH 12/17] add test --- tests/tensor_search/integ_tests/test_embed.py | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/tests/tensor_search/integ_tests/test_embed.py b/tests/tensor_search/integ_tests/test_embed.py index 51491c1bd..11f544b1e 100644 --- a/tests/tensor_search/integ_tests/test_embed.py +++ b/tests/tensor_search/integ_tests/test_embed.py @@ -10,7 +10,7 @@ import requests import json from unittest import mock -from unittest.mock import patch +from unittest.mock import patch, MagicMock, call from marqo.core.models.marqo_index_request import FieldRequest from marqo.api.exceptions import MarqoWebError, IndexNotFoundError, InvalidArgError, DocumentNotFoundError import marqo.exceptions as base_exceptions @@ -20,6 +20,7 @@ from marqo.vespa.models.query_result import Root, Child, RootFields from marqo.tensor_search.models.private_models import S3Auth, ModelAuth, HfAuth from marqo.api.models.embed_request import EmbedRequest +from marqo.tensor_search import utils import os import pprint import unittest @@ -150,6 +151,45 @@ def tearDown(self) -> None: super().tearDown() self.device_patcher.stop() + def test_embed_content_cuda_device_as_default(self): + """ + Test that embed_content uses the default device when no device is specified. + """ + for index in [self.unstructured_default_text_index, self.structured_default_text_index]: + with self.subTest(index=index.type): + expected_device = "cuda" + + with patch.dict(os.environ, {"MARQO_BEST_AVAILABLE_DEVICE": expected_device}): + with patch('marqo.tensor_search.tensor_search.run_vectorise_pipeline') as mock_vectorise: + mock_vectorise.return_value = {0: [0.1, 0.2, 0.3]} + + embed_res = embed( + marqo_config=self.config, + index_name=index.name, + embedding_request=EmbedRequest( + content=["This is a test document"] + ), + device=None + ) + + # Check that run_vectorise_pipeline was called + mock_vectorise.assert_called_once() + + # Get the arguments passed to run_vectorise_pipeline + args, kwargs = mock_vectorise.call_args + + # Print the args and kwargs for debugging + print(f"args passed to run_vectorise_pipeline: {args}") + print(f"kwargs passed to run_vectorise_pipeline: {kwargs}") + + # Check that the device passed to run_vectorise_pipeline matches the expected value + self.assertEqual(args[2], expected_device) + + # Check the result + self.assertEqual(embed_res["content"], ["This is a test document"]) + self.assertIsInstance(embed_res["embeddings"][0], list) + self.assertEqual(embed_res["embeddings"][0], [0.1, 0.2, 0.3]) + def test_embed_equivalent_to_add_docs(self): """ Ensure that the embedding returned by embed endpoint matches the one created by add_docs. From 9a0b1fff3b86f91536f1a82b66dbc86ac01579e6 Mon Sep 17 00:00:00 2001 From: Raynor Chavez Date: Tue, 20 Aug 2024 10:49:58 +0800 Subject: [PATCH 13/17] remove unnecessary import --- tests/tensor_search/integ_tests/test_embed.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/tensor_search/integ_tests/test_embed.py b/tests/tensor_search/integ_tests/test_embed.py index 11f544b1e..438900291 100644 --- a/tests/tensor_search/integ_tests/test_embed.py +++ b/tests/tensor_search/integ_tests/test_embed.py @@ -10,7 +10,7 @@ import requests import json from unittest import mock -from unittest.mock import patch, MagicMock, call +from unittest.mock import patch from marqo.core.models.marqo_index_request import FieldRequest from marqo.api.exceptions import MarqoWebError, IndexNotFoundError, InvalidArgError, DocumentNotFoundError import marqo.exceptions as base_exceptions From 513348587e7bd0ac28345b21f49090a59c960dee Mon Sep 17 00:00:00 2001 From: Raynor Chavez Date: Tue, 20 Aug 2024 12:27:13 +0800 Subject: [PATCH 14/17] bump version and add cpu test --- .gitignore | 4 +- src/marqo/version.py | 2 +- tests/tensor_search/integ_tests/test_embed.py | 64 +++++++++---------- 3 files changed, 36 insertions(+), 34 deletions(-) diff --git a/.gitignore b/.gitignore index c6b115c56..b1d549014 100644 --- a/.gitignore +++ b/.gitignore @@ -149,4 +149,6 @@ dump.rdb .DS_Store # Tester app for unit tests -scripts/vespa_local/vespa_tester_app.zip \ No newline at end of file +scripts/vespa_local/vespa_tester_app.zip + +src/marqo/tensor_search/cache_dir/* \ No newline at end of file diff --git a/src/marqo/version.py b/src/marqo/version.py index ebdf862f0..7a12174e6 100644 --- a/src/marqo/version.py +++ b/src/marqo/version.py @@ -1,4 +1,4 @@ -__version__ = "2.11.1" +__version__ = "2.11.2" def get_version() -> str: return f"{__version__}" diff --git a/tests/tensor_search/integ_tests/test_embed.py b/tests/tensor_search/integ_tests/test_embed.py index 438900291..2a68ecc72 100644 --- a/tests/tensor_search/integ_tests/test_embed.py +++ b/tests/tensor_search/integ_tests/test_embed.py @@ -157,38 +157,38 @@ def test_embed_content_cuda_device_as_default(self): """ for index in [self.unstructured_default_text_index, self.structured_default_text_index]: with self.subTest(index=index.type): - expected_device = "cuda" - - with patch.dict(os.environ, {"MARQO_BEST_AVAILABLE_DEVICE": expected_device}): - with patch('marqo.tensor_search.tensor_search.run_vectorise_pipeline') as mock_vectorise: - mock_vectorise.return_value = {0: [0.1, 0.2, 0.3]} - - embed_res = embed( - marqo_config=self.config, - index_name=index.name, - embedding_request=EmbedRequest( - content=["This is a test document"] - ), - device=None - ) - - # Check that run_vectorise_pipeline was called - mock_vectorise.assert_called_once() - - # Get the arguments passed to run_vectorise_pipeline - args, kwargs = mock_vectorise.call_args - - # Print the args and kwargs for debugging - print(f"args passed to run_vectorise_pipeline: {args}") - print(f"kwargs passed to run_vectorise_pipeline: {kwargs}") - - # Check that the device passed to run_vectorise_pipeline matches the expected value - self.assertEqual(args[2], expected_device) - - # Check the result - self.assertEqual(embed_res["content"], ["This is a test document"]) - self.assertIsInstance(embed_res["embeddings"][0], list) - self.assertEqual(embed_res["embeddings"][0], [0.1, 0.2, 0.3]) + expected_devices = ["cuda", "cpu"] + for expected_device in expected_devices: + with patch.dict(os.environ, {"MARQO_BEST_AVAILABLE_DEVICE": expected_device}): + with patch('marqo.tensor_search.tensor_search.run_vectorise_pipeline') as mock_vectorise: + mock_vectorise.return_value = {0: [0.1, 0.2, 0.3]} + + embed_res = embed( + marqo_config=self.config, + index_name=index.name, + embedding_request=EmbedRequest( + content=["This is a test document"] + ), + device=None + ) + + # Check that run_vectorise_pipeline was called + mock_vectorise.assert_called_once() + + # Get the arguments passed to run_vectorise_pipeline + args, kwargs = mock_vectorise.call_args + + # Print the args and kwargs for debugging + print(f"args passed to run_vectorise_pipeline: {args}") + print(f"kwargs passed to run_vectorise_pipeline: {kwargs}") + + # Check that the device passed to run_vectorise_pipeline matches the expected value + self.assertEqual(args[2], expected_device) + + # Check the result + self.assertEqual(embed_res["content"], ["This is a test document"]) + self.assertIsInstance(embed_res["embeddings"][0], list) + self.assertEqual(embed_res["embeddings"][0], [0.1, 0.2, 0.3]) def test_embed_equivalent_to_add_docs(self): """ From 7fd9c1fb65dcbeb7bd037bfde4c4d4c408364dc3 Mon Sep 17 00:00:00 2001 From: Raynor Chavez Date: Tue, 20 Aug 2024 12:29:00 +0800 Subject: [PATCH 15/17] add patch release notes --- RELEASE.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/RELEASE.md b/RELEASE.md index 43eb6ce95..572499c53 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,3 +1,8 @@ +# Release 2.11.2 + +## Bug fixes and minor changes +- Fix a bug where `cuda` is not selected as the default device when available when using the `embed` endpoint [#941](https://github.com/marqo-ai/marqo/pull/941). + # Release 2.11.0 ## New features From 886ff75e6c6b6d29332a0446f49bcae458c46f08 Mon Sep 17 00:00:00 2001 From: Raynor Chavez Date: Tue, 20 Aug 2024 12:39:53 +0800 Subject: [PATCH 16/17] revise release notes --- RELEASE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASE.md b/RELEASE.md index 572499c53..6aac3451f 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,7 +1,7 @@ # Release 2.11.2 ## Bug fixes and minor changes -- Fix a bug where `cuda` is not selected as the default device when available when using the `embed` endpoint [#941](https://github.com/marqo-ai/marqo/pull/941). +- Fix an issue where CUDA was not automatically selected as the default device for the `embed` endpoint, even when available [#941](https://github.com/marqo-ai/marqo/pull/941). # Release 2.11.0 From d0e02f2c7493cbf595082548bd3cf3885b1081e6 Mon Sep 17 00:00:00 2001 From: Raynor Chavez Date: Tue, 20 Aug 2024 13:48:43 +0800 Subject: [PATCH 17/17] add 2.10.2 release notes --- RELEASE.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/RELEASE.md b/RELEASE.md index edc303d35..894b11231 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -27,6 +27,11 @@ - Huge shoutout to all our 4.4k stargazers! We’ve come a long way as a team and as a community, so a huge thanks to everyone who continues to support Marqo. - Feel free to keep on sharing questions and feedback on our [forum](https://community.marqo.ai/) and [Slack channel](https://marqo-community.slack.com/join/shared_invite/zt-2b4nsvbd2-TDf8agPszzWH5hYKBMIgDA#/shared-invite/email)! If you have any more inquiries or thoughts, please don’t hesitate to reach out. +# Release 2.10.2 + +## Bug fixes and minor changes +- Fix an issue where CUDA was not automatically selected as the default device for the `embed` endpoint, even when available [#941](https://github.com/marqo-ai/marqo/pull/941). + # Release 2.10.1 ## Bug fixes and minor changes