meilisearch-python-sdk 4.5.0__tar.gz → 4.7.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 (102) hide show
  1. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/.github/workflows/docs_publish.yml +1 -1
  2. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/.github/workflows/nightly_testing.yml +1 -1
  3. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/.github/workflows/pypi_publish.yml +1 -1
  4. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/.github/workflows/testing.yml +10 -10
  5. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/.pre-commit-config.yaml +3 -3
  6. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/PKG-INFO +1 -1
  7. meilisearch_python_sdk-4.7.0/meilisearch_python_sdk/_version.py +1 -0
  8. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/index.py +23 -3
  9. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/models/settings.py +19 -2
  10. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/pyproject.toml +9 -8
  11. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/tests/conftest.py +2 -10
  12. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/tests/test_async_index.py +1 -0
  13. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/tests/test_index.py +1 -0
  14. meilisearch_python_sdk-4.7.0/uv.lock +1592 -0
  15. meilisearch_python_sdk-4.5.0/meilisearch_python_sdk/_version.py +0 -1
  16. meilisearch_python_sdk-4.5.0/uv.lock +0 -1556
  17. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/.github/FUNDING.yml +0 -0
  18. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/.github/release-draft-template.yaml +0 -0
  19. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/.github/renovate.json5 +0 -0
  20. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/.github/workflows/release-drafter.yml +0 -0
  21. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/.gitignore +0 -0
  22. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/CONTRIBUTING.md +0 -0
  23. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/LICENSE +0 -0
  24. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/README.md +0 -0
  25. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/assets/add_in_batches.png +0 -0
  26. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/assets/searches.png +0 -0
  27. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/benchmark/run_benchmark.py +0 -0
  28. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/codecov.yml +0 -0
  29. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/datasets/small_movies.json +0 -0
  30. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/docker-compose.https.yml +0 -0
  31. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/docker-compose.yml +0 -0
  32. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/docs/.nojekyll +0 -0
  33. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/docs/CNAME +0 -0
  34. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/docs/async_client_api.md +0 -0
  35. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/docs/async_index_api.md +0 -0
  36. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/docs/client_api.md +0 -0
  37. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/docs/css/custom.css +0 -0
  38. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/docs/decorators_api.md +0 -0
  39. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/docs/index.md +0 -0
  40. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/docs/index_api.md +0 -0
  41. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/docs/js/umami.js +0 -0
  42. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/docs/json_handler.md +0 -0
  43. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/docs/plugins.md +0 -0
  44. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/docs/pydantic.md +0 -0
  45. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/.gitignore +0 -0
  46. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/README.md +0 -0
  47. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/__init__.py +0 -0
  48. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/add_documents_decorator.py +0 -0
  49. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/add_documents_in_batches.py +0 -0
  50. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/async_add_documents_decorator.py +0 -0
  51. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/async_add_documents_in_batches.py +0 -0
  52. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/async_documents_and_search_results.py +0 -0
  53. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/async_search_tracker.py +0 -0
  54. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/async_update_settings.py +0 -0
  55. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/documents_and_search_results.py +0 -0
  56. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/fastapi_example.py +0 -0
  57. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/orjson_example.py +0 -0
  58. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/pyproject.toml +0 -0
  59. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/requirements.txt +0 -0
  60. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/search_tracker.py +0 -0
  61. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/tests/__init__.py +0 -0
  62. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/tests/conftest.py +0 -0
  63. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/tests/test_async_examples.py +0 -0
  64. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/tests/test_examples.py +0 -0
  65. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/ujson_example.py +0 -0
  66. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/examples/update_settings.py +0 -0
  67. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/justfile +0 -0
  68. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/__init__.py +0 -0
  69. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/_batch.py +0 -0
  70. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/_client.py +0 -0
  71. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/_http_requests.py +0 -0
  72. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/_task.py +0 -0
  73. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/_utils.py +0 -0
  74. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/decorators.py +0 -0
  75. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/errors.py +0 -0
  76. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/json_handler.py +0 -0
  77. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/models/__init__.py +0 -0
  78. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/models/batch.py +0 -0
  79. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/models/client.py +0 -0
  80. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/models/documents.py +0 -0
  81. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/models/health.py +0 -0
  82. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/models/index.py +0 -0
  83. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/models/search.py +0 -0
  84. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/models/task.py +0 -0
  85. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/models/version.py +0 -0
  86. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/plugins.py +0 -0
  87. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/py.typed +0 -0
  88. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/meilisearch_python_sdk/types.py +0 -0
  89. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/mkdocs.yaml +0 -0
  90. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/tests/__init__.py +0 -0
  91. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/tests/test_async_client.py +0 -0
  92. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/tests/test_async_documents.py +0 -0
  93. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/tests/test_async_index_plugins.py +0 -0
  94. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/tests/test_async_search.py +0 -0
  95. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/tests/test_client.py +0 -0
  96. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/tests/test_decorators.py +0 -0
  97. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/tests/test_documents.py +0 -0
  98. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/tests/test_errors.py +0 -0
  99. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/tests/test_index_plugins.py +0 -0
  100. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/tests/test_search.py +0 -0
  101. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/tests/test_utils.py +0 -0
  102. {meilisearch_python_sdk-4.5.0 → meilisearch_python_sdk-4.7.0}/tests/test_version.py +0 -0
@@ -12,7 +12,7 @@ jobs:
12
12
  steps:
13
13
  - uses: actions/checkout@v4
14
14
  - name: Install uv
15
- uses: astral-sh/setup-uv@v5
15
+ uses: astral-sh/setup-uv@v6
16
16
  with:
17
17
  enable-cache: true
18
18
  - name: Set up Python
@@ -14,7 +14,7 @@ jobs:
14
14
  steps:
15
15
  - uses: actions/checkout@v4
16
16
  - name: Install uv
17
- uses: astral-sh/setup-uv@v5
17
+ uses: astral-sh/setup-uv@v6
18
18
  with:
19
19
  enable-cache: true
20
20
  - name: install Just
@@ -14,7 +14,7 @@ jobs:
14
14
  steps:
15
15
  - uses: actions/checkout@v4
16
16
  - name: Install uv
17
- uses: astral-sh/setup-uv@v5
17
+ uses: astral-sh/setup-uv@v6
18
18
  with:
19
19
  enable-cache: true
20
20
  - name: Set up Python
@@ -15,7 +15,7 @@ jobs:
15
15
  - name: install Just
16
16
  uses: taiki-e/install-action@just
17
17
  - name: Install uv
18
- uses: astral-sh/setup-uv@v5
18
+ uses: astral-sh/setup-uv@v6
19
19
  with:
20
20
  enable-cache: true
21
21
  - name: Set up Python
@@ -38,7 +38,7 @@ jobs:
38
38
  - name: install Just
39
39
  uses: taiki-e/install-action@just
40
40
  - name: Install uv
41
- uses: astral-sh/setup-uv@v5
41
+ uses: astral-sh/setup-uv@v6
42
42
  with:
43
43
  enable-cache: true
44
44
  - name: Set up Python ${{ matrix.python-version }}
@@ -50,7 +50,7 @@ jobs:
50
50
  - name: Test with pytest
51
51
  run: just test-parallel-ci
52
52
  - name: Upload coverage
53
- uses: codecov/codecov-action@v5.4.0
53
+ uses: codecov/codecov-action@v5.4.3
54
54
  with:
55
55
  token: ${{ secrets.CODECOV_TOKEN }}
56
56
  fail_ci_if_error: true
@@ -66,7 +66,7 @@ jobs:
66
66
  - name: install Just
67
67
  uses: taiki-e/install-action@just
68
68
  - name: Install uv
69
- uses: astral-sh/setup-uv@v5
69
+ uses: astral-sh/setup-uv@v6
70
70
  with:
71
71
  enable-cache: true
72
72
  - name: Set up Python ${{ matrix.python-version }}
@@ -90,7 +90,7 @@ jobs:
90
90
  - name: Test with pytest
91
91
  run: just test-parallel-ci-http2
92
92
  - name: Upload coverage
93
- uses: codecov/codecov-action@v5.4.0
93
+ uses: codecov/codecov-action@v5.4.3
94
94
  with:
95
95
  token: ${{ secrets.CODECOV_TOKEN }}
96
96
  fail_ci_if_error: true
@@ -106,7 +106,7 @@ jobs:
106
106
  - name: install Just
107
107
  uses: taiki-e/install-action@just
108
108
  - name: Install uv
109
- uses: astral-sh/setup-uv@v5
109
+ uses: astral-sh/setup-uv@v6
110
110
  with:
111
111
  enable-cache: true
112
112
  - name: Set up Python ${{ matrix.python-version }}
@@ -118,7 +118,7 @@ jobs:
118
118
  - name: Test with pytest
119
119
  run: just test-no-parallel-ci
120
120
  - name: Upload coverage
121
- uses: codecov/codecov-action@v5.4.0
121
+ uses: codecov/codecov-action@v5.4.3
122
122
  with:
123
123
  token: ${{ secrets.CODECOV_TOKEN }}
124
124
  fail_ci_if_error: true
@@ -134,7 +134,7 @@ jobs:
134
134
  - name: install Just
135
135
  uses: taiki-e/install-action@just
136
136
  - name: Install uv
137
- uses: astral-sh/setup-uv@v5
137
+ uses: astral-sh/setup-uv@v6
138
138
  with:
139
139
  enable-cache: true
140
140
  - name: Set up Python ${{ matrix.python-version }}
@@ -158,7 +158,7 @@ jobs:
158
158
  - name: Test with pytest
159
159
  run: just test-no-parallel-ci-http2
160
160
  - name: Upload coverage
161
- uses: codecov/codecov-action@v5.4.0
161
+ uses: codecov/codecov-action@v5.4.3
162
162
  with:
163
163
  token: ${{ secrets.CODECOV_TOKEN }}
164
164
  fail_ci_if_error: true
@@ -187,7 +187,7 @@ jobs:
187
187
  - name: install Just
188
188
  uses: taiki-e/install-action@just
189
189
  - name: Install uv
190
- uses: astral-sh/setup-uv@v5
190
+ uses: astral-sh/setup-uv@v6
191
191
  with:
192
192
  enable-cache: true
193
193
  - name: Set up Python
@@ -9,13 +9,13 @@ 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.15.0
12
+ rev: v1.16.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.11.5
17
+ rev: v0.11.12
18
18
  hooks:
19
- - id: ruff
19
+ - id: ruff-check
20
20
  args: [--fix, --exit-non-zero-on-fix]
21
21
  - id: ruff-format
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meilisearch-python-sdk
3
- Version: 4.5.0
3
+ Version: 4.7.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
@@ -0,0 +1 @@
1
+ VERSION = "4.7.0"
@@ -27,6 +27,7 @@ from meilisearch_python_sdk.models.search import (
27
27
  SimilarSearchResults,
28
28
  )
29
29
  from meilisearch_python_sdk.models.settings import (
30
+ CompositeEmbedder,
30
31
  Embedders,
31
32
  Faceting,
32
33
  FilterableAttributeFeatures,
@@ -8459,7 +8460,12 @@ def _embedder_json_to_embedders_model( # pragma: no cover
8459
8460
 
8460
8461
  embedders: dict[
8461
8462
  str,
8462
- OpenAiEmbedder | HuggingFaceEmbedder | OllamaEmbedder | RestEmbedder | UserProvidedEmbedder,
8463
+ OpenAiEmbedder
8464
+ | HuggingFaceEmbedder
8465
+ | OllamaEmbedder
8466
+ | RestEmbedder
8467
+ | UserProvidedEmbedder
8468
+ | CompositeEmbedder,
8463
8469
  ] = {}
8464
8470
  for k, v in embedder_json.items():
8465
8471
  if v.get("source") == "openAi":
@@ -8470,6 +8476,8 @@ def _embedder_json_to_embedders_model( # pragma: no cover
8470
8476
  embedders[k] = OllamaEmbedder(**v)
8471
8477
  elif v.get("source") == "rest":
8472
8478
  embedders[k] = RestEmbedder(**v)
8479
+ elif v.get("source") == "composit":
8480
+ embedders[k] = CompositeEmbedder(**v)
8473
8481
  else:
8474
8482
  embedders[k] = UserProvidedEmbedder(**v)
8475
8483
 
@@ -8482,7 +8490,12 @@ def _embedder_json_to_settings_model( # pragma: no cover
8482
8490
  ) -> (
8483
8491
  dict[
8484
8492
  str,
8485
- OpenAiEmbedder | HuggingFaceEmbedder | OllamaEmbedder | RestEmbedder | UserProvidedEmbedder,
8493
+ OpenAiEmbedder
8494
+ | HuggingFaceEmbedder
8495
+ | OllamaEmbedder
8496
+ | RestEmbedder
8497
+ | UserProvidedEmbedder
8498
+ | CompositeEmbedder,
8486
8499
  ]
8487
8500
  | None
8488
8501
  ):
@@ -8491,7 +8504,12 @@ def _embedder_json_to_settings_model( # pragma: no cover
8491
8504
 
8492
8505
  embedders: dict[
8493
8506
  str,
8494
- OpenAiEmbedder | HuggingFaceEmbedder | OllamaEmbedder | RestEmbedder | UserProvidedEmbedder,
8507
+ OpenAiEmbedder
8508
+ | HuggingFaceEmbedder
8509
+ | OllamaEmbedder
8510
+ | RestEmbedder
8511
+ | UserProvidedEmbedder
8512
+ | CompositeEmbedder,
8495
8513
  ] = {}
8496
8514
  for k, v in embedder_json.items():
8497
8515
  if v.get("source") == "openAi":
@@ -8502,6 +8520,8 @@ def _embedder_json_to_settings_model( # pragma: no cover
8502
8520
  embedders[k] = OllamaEmbedder(**v)
8503
8521
  elif v.get("source") == "rest":
8504
8522
  embedders[k] = RestEmbedder(**v)
8523
+ elif v.get("source") == "composit":
8524
+ embedders[k] = CompositeEmbedder(**v)
8505
8525
  else:
8506
8526
  embedders[k] = UserProvidedEmbedder(**v)
8507
8527
 
@@ -18,6 +18,7 @@ class TypoTolerance(CamelBase):
18
18
  enabled: bool = True
19
19
  disable_on_attributes: list[str] | None = None
20
20
  disable_on_words: list[str] | None = None
21
+ disable_on_numbers: bool | None = None
21
22
  min_word_size_for_typos: MinWordSizeForTypos | None = None
22
23
 
23
24
 
@@ -106,10 +107,25 @@ class UserProvidedEmbedder(CamelBase):
106
107
  binary_quantized: bool | None = None
107
108
 
108
109
 
110
+ class CompositeEmbedder(CamelBase):
111
+ source: str = "composite"
112
+ search_embedder: (
113
+ OpenAiEmbedder | HuggingFaceEmbedder | OllamaEmbedder | RestEmbedder | UserProvidedEmbedder
114
+ )
115
+ indexing_embedder: (
116
+ OpenAiEmbedder | HuggingFaceEmbedder | OllamaEmbedder | RestEmbedder | UserProvidedEmbedder
117
+ )
118
+
119
+
109
120
  class Embedders(CamelBase):
110
121
  embedders: dict[
111
122
  str,
112
- OpenAiEmbedder | HuggingFaceEmbedder | OllamaEmbedder | RestEmbedder | UserProvidedEmbedder,
123
+ OpenAiEmbedder
124
+ | HuggingFaceEmbedder
125
+ | OllamaEmbedder
126
+ | RestEmbedder
127
+ | UserProvidedEmbedder
128
+ | CompositeEmbedder,
113
129
  ]
114
130
 
115
131
 
@@ -162,7 +178,8 @@ class MeilisearchSettings(CamelBase):
162
178
  | HuggingFaceEmbedder
163
179
  | OllamaEmbedder
164
180
  | RestEmbedder
165
- | UserProvidedEmbedder,
181
+ | UserProvidedEmbedder
182
+ | CompositeEmbedder,
166
183
  ]
167
184
  | None
168
185
  ) = None # Optional[Embedders] = None
@@ -41,17 +41,17 @@ all = ["orjson", "ujson"]
41
41
  [dependency-groups]
42
42
  dev = [
43
43
  "mkdocs==1.6.1",
44
- "mkdocs-material==9.6.11",
44
+ "mkdocs-material==9.6.14",
45
45
  "mkdocstrings[python]==0.29.1",
46
- "mypy[faster-cache]==1.15.0",
46
+ "mypy[faster-cache]==1.16.0",
47
47
  "pre-commit==4.2.0",
48
- "pytest==8.3.5",
48
+ "pytest==8.4.0",
49
49
  "pytest-cov==6.1.1",
50
- "pytest-asyncio==0.26.0",
51
- "pytest-xdist==3.6.1",
52
- "ruff==0.11.5",
53
- "types-aiofiles==24.1.0.20250326",
54
- "typing-extensions==4.13.2",
50
+ "pytest-asyncio==1.0.0",
51
+ "pytest-xdist==3.7.0",
52
+ "ruff==0.11.13",
53
+ "types-aiofiles==24.1.0.20250606",
54
+ "typing-extensions==4.14.0",
55
55
  "types-ujson==5.10.0.20250326",
56
56
  "meilisearch==0.34.1",
57
57
  "rich==14.0.0",
@@ -70,6 +70,7 @@ minversion = "6.0"
70
70
  addopts = "--cov=meilisearch_python_sdk --cov-report term-missing --no-cov-on-fail --ignore examples"
71
71
  asyncio_mode = "auto"
72
72
  asyncio_default_fixture_loop_scope = "session"
73
+ asyncio_default_test_loop_scope = "session"
73
74
  markers = ["no_parallel"]
74
75
 
75
76
  [tool.mypy]
@@ -8,7 +8,6 @@ from pathlib import Path
8
8
  from uuid import uuid4
9
9
 
10
10
  import pytest
11
- from pytest_asyncio import is_async_test
12
11
 
13
12
  try:
14
13
  import truststore as truststore
@@ -37,13 +36,6 @@ ROOT_PATH = Path().absolute()
37
36
  SMALL_MOVIES_PATH = ROOT_PATH / "datasets" / "small_movies.json"
38
37
 
39
38
 
40
- def pytest_collection_modifyitems(items):
41
- pytest_asyncio_tests = (item for item in items if is_async_test(item))
42
- session_scope_marker = pytest.mark.asyncio(loop_scope="session")
43
- for async_test in pytest_asyncio_tests:
44
- async_test.add_marker(session_scope_marker, append=False)
45
-
46
-
47
39
  def pytest_addoption(parser):
48
40
  parser.addoption("--http2", action="store_true")
49
41
 
@@ -301,7 +293,7 @@ async def enable_edit_by_function(base_url, ssl_verify):
301
293
  base_url=base_url, headers={"Authorization": f"Bearer {MASTER_KEY}"}, verify=ssl_verify
302
294
  ) as client:
303
295
  await client.patch("/experimental-features", json={"editDocumentsByFunction": True})
304
- yield
296
+ yield
305
297
 
306
298
 
307
299
  @pytest.fixture(scope="session", autouse=True)
@@ -310,7 +302,7 @@ async def enable_network(base_url, ssl_verify):
310
302
  base_url=base_url, headers={"Authorization": f"Bearer {MASTER_KEY}"}, verify=ssl_verify
311
303
  ) as client:
312
304
  await client.patch("/experimental-features", json={"network": True})
313
- yield
305
+ yield
314
306
 
315
307
 
316
308
  @pytest.fixture
@@ -664,6 +664,7 @@ async def test_update_typo_tolerance(compress, async_empty_index):
664
664
  enabled=True,
665
665
  disable_on_attributes=["title"],
666
666
  disable_on_words=["spiderman"],
667
+ disable_on_numbers=True,
667
668
  min_word_size_for_typos=MinWordSizeForTypos(one_typo=10, two_typos=20),
668
669
  )
669
670
  index = await async_empty_index()
@@ -651,6 +651,7 @@ def test_update_typo_tolerance(compress, empty_index):
651
651
  enabled=True,
652
652
  disable_on_attributes=["title"],
653
653
  disable_on_words=["spiderman"],
654
+ disable_on_numbers=True,
654
655
  min_word_size_for_typos=MinWordSizeForTypos(one_typo=10, two_typos=20),
655
656
  )
656
657
  index = empty_index()