meilisearch-python-sdk 4.1.1__tar.gz → 4.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of meilisearch-python-sdk might be problematic. Click here for more details.

Files changed (101) hide show
  1. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/.github/renovate.json5 +2 -1
  2. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/.pre-commit-config.yaml +2 -2
  3. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/PKG-INFO +1 -1
  4. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/_client.py +20 -14
  5. meilisearch_python_sdk-4.3.0/meilisearch_python_sdk/_version.py +1 -0
  6. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/index.py +16 -0
  7. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/models/client.py +1 -0
  8. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/models/index.py +2 -0
  9. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/models/search.py +1 -0
  10. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/models/settings.py +8 -0
  11. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/pyproject.toml +4 -4
  12. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/tests/conftest.py +0 -9
  13. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/tests/test_async_index.py +2 -2
  14. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/tests/test_async_search.py +24 -0
  15. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/tests/test_index.py +2 -2
  16. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/tests/test_search.py +24 -0
  17. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/uv.lock +118 -114
  18. meilisearch_python_sdk-4.1.1/meilisearch_python_sdk/_version.py +0 -1
  19. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/.github/FUNDING.yml +0 -0
  20. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/.github/release-draft-template.yaml +0 -0
  21. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/.github/workflows/docs_publish.yml +0 -0
  22. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/.github/workflows/nightly_testing.yml +0 -0
  23. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/.github/workflows/pypi_publish.yml +0 -0
  24. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/.github/workflows/release-drafter.yml +0 -0
  25. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/.github/workflows/testing.yml +0 -0
  26. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/.gitignore +0 -0
  27. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/CONTRIBUTING.md +0 -0
  28. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/LICENSE +0 -0
  29. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/README.md +0 -0
  30. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/assets/add_in_batches.png +0 -0
  31. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/assets/searches.png +0 -0
  32. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/benchmark/run_benchmark.py +0 -0
  33. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/codecov.yml +0 -0
  34. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/datasets/small_movies.json +0 -0
  35. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/docker-compose.https.yml +0 -0
  36. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/docker-compose.yml +0 -0
  37. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/docs/.nojekyll +0 -0
  38. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/docs/CNAME +0 -0
  39. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/docs/async_client_api.md +0 -0
  40. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/docs/async_index_api.md +0 -0
  41. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/docs/client_api.md +0 -0
  42. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/docs/css/custom.css +0 -0
  43. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/docs/decorators_api.md +0 -0
  44. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/docs/index.md +0 -0
  45. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/docs/index_api.md +0 -0
  46. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/docs/js/umami.js +0 -0
  47. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/docs/json_handler.md +0 -0
  48. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/docs/plugins.md +0 -0
  49. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/docs/pydantic.md +0 -0
  50. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/.gitignore +0 -0
  51. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/README.md +0 -0
  52. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/__init__.py +0 -0
  53. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/add_documents_decorator.py +0 -0
  54. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/add_documents_in_batches.py +0 -0
  55. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/async_add_documents_decorator.py +0 -0
  56. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/async_add_documents_in_batches.py +0 -0
  57. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/async_documents_and_search_results.py +0 -0
  58. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/async_search_tracker.py +0 -0
  59. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/async_update_settings.py +0 -0
  60. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/documents_and_search_results.py +0 -0
  61. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/fastapi_example.py +0 -0
  62. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/orjson_example.py +0 -0
  63. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/pyproject.toml +0 -0
  64. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/requirements.txt +0 -0
  65. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/search_tracker.py +0 -0
  66. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/tests/__init__.py +0 -0
  67. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/tests/conftest.py +0 -0
  68. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/tests/test_async_examples.py +0 -0
  69. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/tests/test_examples.py +0 -0
  70. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/ujson_example.py +0 -0
  71. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/examples/update_settings.py +0 -0
  72. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/justfile +0 -0
  73. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/__init__.py +0 -0
  74. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/_batch.py +0 -0
  75. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/_http_requests.py +0 -0
  76. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/_task.py +0 -0
  77. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/_utils.py +0 -0
  78. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/decorators.py +0 -0
  79. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/errors.py +0 -0
  80. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/json_handler.py +0 -0
  81. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/models/__init__.py +0 -0
  82. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/models/batch.py +0 -0
  83. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/models/documents.py +0 -0
  84. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/models/health.py +0 -0
  85. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/models/task.py +0 -0
  86. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/models/version.py +0 -0
  87. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/plugins.py +0 -0
  88. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/py.typed +0 -0
  89. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/meilisearch_python_sdk/types.py +0 -0
  90. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/mkdocs.yaml +0 -0
  91. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/tests/__init__.py +0 -0
  92. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/tests/test_async_client.py +0 -0
  93. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/tests/test_async_documents.py +0 -0
  94. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/tests/test_async_index_plugins.py +0 -0
  95. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/tests/test_client.py +0 -0
  96. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/tests/test_decorators.py +0 -0
  97. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/tests/test_documents.py +0 -0
  98. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/tests/test_errors.py +0 -0
  99. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/tests/test_index_plugins.py +0 -0
  100. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/tests/test_utils.py +0 -0
  101. {meilisearch_python_sdk-4.1.1 → meilisearch_python_sdk-4.3.0}/tests/test_version.py +0 -0
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
3
  "extends": [
4
- "config:recommended"
4
+ "config:recommended",
5
+ ":disableDependencyDashboard"
5
6
  ],
6
7
  lockFileMaintenance: {
7
8
  enabled: true,
@@ -9,12 +9,12 @@ repos:
9
9
  - id: end-of-file-fixer
10
10
  - id: trailing-whitespace
11
11
  - repo: https://github.com/pre-commit/mirrors-mypy
12
- rev: v1.14.1
12
+ rev: v1.15.0
13
13
  hooks:
14
14
  - id: mypy
15
15
  additional_dependencies: [pydantic, orjson, types-aiofiles, types-ujson]
16
16
  - repo: https://github.com/astral-sh/ruff-pre-commit
17
- rev: v0.9.4
17
+ rev: v0.9.6
18
18
  hooks:
19
19
  - id: ruff
20
20
  args: [--fix, --exit-non-zero-on-fix]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meilisearch-python-sdk
3
- Version: 4.1.1
3
+ Version: 4.3.0
4
4
  Summary: A Python client providing both async and sync support for the Meilisearch API
5
5
  Project-URL: repository, https://github.com/sanders41/meilisearch-python-sdk
6
6
  Project-URL: homepage, https://github.com/sanders41/meilisearch-python-sdk
@@ -623,15 +623,18 @@ class AsyncClient(BaseClient):
623
623
  >>> search_results = await client.search(queries)
624
624
  """
625
625
  url = "multi-search"
626
- if federation:
627
- processed_queries = []
628
- for query in queries:
629
- q = query.model_dump(by_alias=True)
626
+ processed_queries = []
627
+ for query in queries:
628
+ q = query.model_dump(by_alias=True)
629
+
630
+ if query.retrieve_vectors is None:
631
+ del q["retrieveVectors"]
632
+
633
+ if federation:
630
634
  del q["limit"]
631
635
  del q["offset"]
632
- processed_queries.append(q)
633
- else:
634
- processed_queries = [x.model_dump(by_alias=True) for x in queries]
636
+
637
+ processed_queries.append(q)
635
638
 
636
639
  if federation:
637
640
  federation_payload = federation.model_dump(by_alias=True)
@@ -1479,15 +1482,18 @@ class Client(BaseClient):
1479
1482
  >>> search_results = client.search(queries)
1480
1483
  """
1481
1484
  url = "multi-search"
1482
- if federation:
1483
- processed_queries = []
1484
- for query in queries:
1485
- q = query.model_dump(by_alias=True)
1485
+ processed_queries = []
1486
+ for query in queries:
1487
+ q = query.model_dump(by_alias=True)
1488
+
1489
+ if query.retrieve_vectors is None:
1490
+ del q["retrieveVectors"]
1491
+
1492
+ if federation:
1486
1493
  del q["limit"]
1487
1494
  del q["offset"]
1488
- processed_queries.append(q)
1489
- else:
1490
- processed_queries = [x.model_dump(by_alias=True) for x in queries]
1495
+
1496
+ processed_queries.append(q)
1491
1497
 
1492
1498
  if federation:
1493
1499
  federation_payload = federation.model_dump(by_alias=True)
@@ -0,0 +1 @@
1
+ VERSION = "4.3.0"
@@ -721,6 +721,7 @@ class AsyncIndex(_BaseIndex):
721
721
  vector: list[float] | None = None,
722
722
  hybrid: Hybrid | None = None,
723
723
  locales: list[str] | None = None,
724
+ retrieve_vectors: bool | None = None,
724
725
  ) -> SearchResults:
725
726
  """Search the index.
726
727
 
@@ -781,6 +782,7 @@ class AsyncIndex(_BaseIndex):
781
782
  with caution.
782
783
  locales: Specifies the languages for the search. This parameter can only be used with
783
784
  Milisearch >= v1.10.0. Defaults to None letting the Meilisearch pick.
785
+ retrieve_vectors: Return document vector data with search result.
784
786
 
785
787
  Returns:
786
788
  Results of the search
@@ -824,6 +826,7 @@ class AsyncIndex(_BaseIndex):
824
826
  hybrid=hybrid,
825
827
  ranking_score_threshold=ranking_score_threshold,
826
828
  locales=locales,
829
+ retrieve_vectors=retrieve_vectors,
827
830
  )
828
831
  search_url = f"{self._base_url_with_uid}/search"
829
832
 
@@ -986,6 +989,7 @@ class AsyncIndex(_BaseIndex):
986
989
  ranking_score_threshold: float | None = None,
987
990
  vector: list[float] | None = None,
988
991
  locales: list[str] | None = None,
992
+ retrieve_vectors: bool | None = None,
989
993
  ) -> FacetSearchResults:
990
994
  """Search the index.
991
995
 
@@ -1038,6 +1042,7 @@ class AsyncIndex(_BaseIndex):
1038
1042
  with caution.
1039
1043
  locales: Specifies the languages for the search. This parameter can only be used with
1040
1044
  Milisearch >= v1.10.0. Defaults to None letting the Meilisearch pick.
1045
+ retrieve_vectors: Return document vector data with search result.
1041
1046
 
1042
1047
  Returns:
1043
1048
  Results of the search
@@ -1085,6 +1090,7 @@ class AsyncIndex(_BaseIndex):
1085
1090
  ranking_score_threshold=ranking_score_threshold,
1086
1091
  vector=vector,
1087
1092
  locales=locales,
1093
+ retrieve_vectors=retrieve_vectors,
1088
1094
  )
1089
1095
  search_url = f"{self._base_url_with_uid}/facet-search"
1090
1096
 
@@ -5085,6 +5091,7 @@ class Index(_BaseIndex):
5085
5091
  vector: list[float] | None = None,
5086
5092
  hybrid: Hybrid | None = None,
5087
5093
  locales: list[str] | None = None,
5094
+ retrieve_vectors: bool | None = None,
5088
5095
  ) -> SearchResults:
5089
5096
  """Search the index.
5090
5097
 
@@ -5145,6 +5152,7 @@ class Index(_BaseIndex):
5145
5152
  with caution.
5146
5153
  locales: Specifies the languages for the search. This parameter can only be used with
5147
5154
  Milisearch >= v1.10.0. Defaults to None letting the Meilisearch pick.
5155
+ retrieve_vectors: Return document vector data with search result.
5148
5156
 
5149
5157
  Returns:
5150
5158
  Results of the search
@@ -5188,6 +5196,7 @@ class Index(_BaseIndex):
5188
5196
  hybrid=hybrid,
5189
5197
  ranking_score_threshold=ranking_score_threshold,
5190
5198
  locales=locales,
5199
+ retrieve_vectors=retrieve_vectors,
5191
5200
  )
5192
5201
 
5193
5202
  if self._pre_search_plugins:
@@ -5256,6 +5265,7 @@ class Index(_BaseIndex):
5256
5265
  ranking_score_threshold: float | None = None,
5257
5266
  vector: list[float] | None = None,
5258
5267
  locales: list[str] | None = None,
5268
+ retrieve_vectors: bool | None = None,
5259
5269
  ) -> FacetSearchResults:
5260
5270
  """Search the index.
5261
5271
 
@@ -5308,6 +5318,7 @@ class Index(_BaseIndex):
5308
5318
  with caution.
5309
5319
  locales: Specifies the languages for the search. This parameter can only be used with
5310
5320
  Milisearch >= v1.10.0. Defaults to None letting the Meilisearch pick.
5321
+ retrieve_vectors: Return document vector data with search result.
5311
5322
 
5312
5323
  Returns:
5313
5324
  Results of the search
@@ -5355,6 +5366,7 @@ class Index(_BaseIndex):
5355
5366
  ranking_score_threshold=ranking_score_threshold,
5356
5367
  vector=vector,
5357
5368
  locales=locales,
5369
+ retrieve_vectors=retrieve_vectors,
5358
5370
  )
5359
5371
 
5360
5372
  if self._pre_facet_search_plugins:
@@ -8262,6 +8274,7 @@ def _process_search_parameters(
8262
8274
  vector: list[float] | None = None,
8263
8275
  hybrid: Hybrid | None = None,
8264
8276
  locales: list[str] | None = None,
8277
+ retrieve_vectors: bool | None = None,
8265
8278
  ) -> JsonDict:
8266
8279
  if attributes_to_retrieve is None:
8267
8280
  attributes_to_retrieve = ["*"]
@@ -8310,6 +8323,9 @@ def _process_search_parameters(
8310
8323
  if locales:
8311
8324
  body["locales"] = locales
8312
8325
 
8326
+ if retrieve_vectors is not None:
8327
+ body["retrieveVectors"] = retrieve_vectors
8328
+
8313
8329
  return body
8314
8330
 
8315
8331
 
@@ -11,6 +11,7 @@ from meilisearch_python_sdk.models.index import IndexStats
11
11
 
12
12
  class ClientStats(CamelBase):
13
13
  database_size: int
14
+ used_database_size: int | None = None
14
15
  last_update: datetime | None = None
15
16
  indexes: dict[str, IndexStats] | None = None
16
17
 
@@ -40,5 +40,7 @@ class IndexInfo(IndexBase):
40
40
 
41
41
  class IndexStats(CamelBase):
42
42
  number_of_documents: int
43
+ number_of_embedded_documents: int | None = None
44
+ number_of_embeddings: int | None = None
43
45
  is_indexing: bool
44
46
  field_distribution: dict[str, int]
@@ -70,6 +70,7 @@ class SearchParams(CamelBase):
70
70
  vector: list[float] | None = None
71
71
  hybrid: Hybrid | None = None
72
72
  locales: list[str] | None = None
73
+ retrieve_vectors: bool | None = None
73
74
 
74
75
  @field_validator("ranking_score_threshold", mode="before") # type: ignore[attr-defined]
75
76
  @classmethod
@@ -56,6 +56,7 @@ class OpenAiEmbedder(CamelBase):
56
56
  document_template: str | None = None
57
57
  document_template_max_bytes: int | None = None
58
58
  distribution: Distribution | None = None
59
+ binary_quantized: bool | None = None
59
60
 
60
61
 
61
62
  class HuggingFaceEmbedder(CamelBase):
@@ -65,6 +66,8 @@ class HuggingFaceEmbedder(CamelBase):
65
66
  document_template: str | None = None
66
67
  document_template_max_bytes: int | None = None
67
68
  distribution: Distribution | None = None
69
+ dimensions: int | None = None
70
+ binary_quantized: bool | None = None
68
71
 
69
72
 
70
73
  class OllamaEmbedder(CamelBase):
@@ -76,6 +79,7 @@ class OllamaEmbedder(CamelBase):
76
79
  document_template: str | None = None
77
80
  document_template_max_bytes: int | None = None
78
81
  distribution: Distribution | None = None
82
+ binary_quantized: bool | None = None
79
83
 
80
84
 
81
85
  class RestEmbedder(CamelBase):
@@ -89,12 +93,16 @@ class RestEmbedder(CamelBase):
89
93
  headers: JsonDict | None = None
90
94
  request: JsonDict
91
95
  response: JsonDict
96
+ binary_quantized: bool | None = None
92
97
 
93
98
 
94
99
  class UserProvidedEmbedder(CamelBase):
95
100
  source: str = "userProvided"
96
101
  dimensions: int
97
102
  distribution: Distribution | None = None
103
+ document_template: str | None = None
104
+ document_template_max_bytes: int | None = None
105
+ binary_quantized: bool | None = None
98
106
 
99
107
 
100
108
  class Embedders(CamelBase):
@@ -41,19 +41,19 @@ all = ["orjson", "ujson"]
41
41
  [dependency-groups]
42
42
  dev = [
43
43
  "mkdocs==1.6.1",
44
- "mkdocs-material==9.6.3",
45
- "mkdocstrings[python]==0.28.0",
44
+ "mkdocs-material==9.6.5",
45
+ "mkdocstrings[python]==0.28.1",
46
46
  "mypy[faster-cache]==1.15.0",
47
47
  "pre-commit==4.1.0",
48
48
  "pytest==8.3.4",
49
49
  "pytest-cov==6.0.0",
50
50
  "pytest-asyncio==0.25.3",
51
51
  "pytest-xdist==3.6.1",
52
- "ruff==0.9.5",
52
+ "ruff==0.9.7",
53
53
  "types-aiofiles==24.1.0.20241221",
54
54
  "typing-extensions==4.12.2",
55
55
  "types-ujson==5.10.0.20240515",
56
- "meilisearch==0.33.1",
56
+ "meilisearch==0.34.0",
57
57
  "rich==13.9.4",
58
58
  ]
59
59
 
@@ -295,15 +295,6 @@ async def default_search_key(async_client):
295
295
  return key
296
296
 
297
297
 
298
- @pytest.fixture(scope="session", autouse=True)
299
- async def enable_vector_search(base_url, ssl_verify):
300
- async with HttpxAsyncClient(
301
- base_url=base_url, headers={"Authorization": f"Bearer {MASTER_KEY}"}, verify=ssl_verify
302
- ) as client:
303
- await client.patch("/experimental-features", json={"vectorStore": True})
304
- yield
305
-
306
-
307
298
  @pytest.fixture(scope="session", autouse=True)
308
299
  async def enable_edit_by_function(base_url, ssl_verify):
309
300
  async with HttpxAsyncClient(
@@ -139,7 +139,7 @@ async def test_get_settings_default(
139
139
  assert response.non_separator_tokens == []
140
140
  assert response.search_cutoff_ms is None
141
141
  assert response.dictionary == []
142
- assert response.embedders is None
142
+ assert response.embedders == {}
143
143
  assert response.facet_search is True
144
144
  assert response.prefix_search == "indexingTime"
145
145
 
@@ -233,7 +233,7 @@ async def test_reset_settings(async_empty_index, new_settings, default_ranking_r
233
233
  assert response.faceting.max_values_per_facet == 100
234
234
  assert response.pagination.max_total_hits == 1000
235
235
  assert response.proximity_precision is ProximityPrecision.BY_WORD
236
- assert response.embedders is None
236
+ assert response.embedders == {}
237
237
 
238
238
 
239
239
  async def test_get_ranking_rules_default(async_empty_index, default_ranking_rules):
@@ -506,6 +506,30 @@ async def test_vector_search(async_index_with_documents_and_vectors):
506
506
  assert len(response.hits) >= 1
507
507
 
508
508
 
509
+ async def test_vector_search_retrieve_vectors(async_index_with_documents_and_vectors):
510
+ index = await async_index_with_documents_and_vectors()
511
+ response = await index.search(
512
+ "",
513
+ vector=[0.1, 0.2],
514
+ hybrid=Hybrid(semantic_ratio=1.0, embedder="default"),
515
+ retrieve_vectors=True,
516
+ )
517
+ assert len(response.hits) >= 1
518
+ assert response.hits[0].get("_vectors") is not None
519
+
520
+
521
+ async def test_vector_search_retrieve_vectors_false(async_index_with_documents_and_vectors):
522
+ index = await async_index_with_documents_and_vectors()
523
+ response = await index.search(
524
+ "",
525
+ vector=[0.1, 0.2],
526
+ hybrid=Hybrid(semantic_ratio=1.0, embedder="default"),
527
+ retrieve_vectors=False,
528
+ )
529
+ assert len(response.hits) >= 1
530
+ assert response.hits[0].get("_vectors") is None
531
+
532
+
509
533
  async def test_basic_facet_search(async_index_with_documents):
510
534
  index = await async_index_with_documents()
511
535
  update = await index.update_filterable_attributes(["genre"])
@@ -131,7 +131,7 @@ def test_get_settings_default(
131
131
  assert response.non_separator_tokens == []
132
132
  assert response.search_cutoff_ms is None
133
133
  assert response.dictionary == []
134
- assert response.embedders is None
134
+ assert response.embedders == {}
135
135
  assert response.facet_search is True
136
136
  assert response.prefix_search == "indexingTime"
137
137
 
@@ -225,7 +225,7 @@ def test_reset_settings(empty_index, new_settings, default_ranking_rules):
225
225
  assert response.faceting.max_values_per_facet == 100
226
226
  assert response.pagination.max_total_hits == 1000
227
227
  assert response.proximity_precision is ProximityPrecision.BY_WORD
228
- assert response.embedders is None
228
+ assert response.embedders == {}
229
229
 
230
230
 
231
231
  def test_get_ranking_rules_default(empty_index, default_ranking_rules):
@@ -483,6 +483,30 @@ def test_vector_search(index_with_documents_and_vectors):
483
483
  assert len(response.hits) >= 1
484
484
 
485
485
 
486
+ def test_vector_search_retrieve_vectors(index_with_documents_and_vectors):
487
+ index = index_with_documents_and_vectors()
488
+ response = index.search(
489
+ "",
490
+ vector=[0.1, 0.2],
491
+ hybrid=Hybrid(semantic_ratio=1.0, embedder="default"),
492
+ retrieve_vectors=True,
493
+ )
494
+ assert len(response.hits) >= 1
495
+ assert response.hits[0].get("_vectors") is not None
496
+
497
+
498
+ def test_vector_search_retrieve_vectors_false(index_with_documents_and_vectors):
499
+ index = index_with_documents_and_vectors()
500
+ response = index.search(
501
+ "",
502
+ vector=[0.1, 0.2],
503
+ hybrid=Hybrid(semantic_ratio=1.0, embedder="default"),
504
+ retrieve_vectors=False,
505
+ )
506
+ assert len(response.hits) >= 1
507
+ assert response.hits[0].get("_vectors") is None
508
+
509
+
486
510
  def test_basic_facet_search(index_with_documents):
487
511
  index = index_with_documents()
488
512
  update = index.update_filterable_attributes(["genre"])