fastembed-haystack 2.3.0__tar.gz → 2.5.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.
Files changed (30) hide show
  1. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/CHANGELOG.md +22 -0
  2. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/PKG-INFO +1 -1
  3. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/pyproject.toml +1 -0
  4. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/src/haystack_integrations/components/embedders/fastembed/embedding_backend/fastembed_backend.py +15 -3
  5. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/src/haystack_integrations/components/embedders/fastembed/fastembed_document_embedder.py +6 -0
  6. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/src/haystack_integrations/components/embedders/fastembed/fastembed_sparse_document_embedder.py +3 -3
  7. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/src/haystack_integrations/components/embedders/fastembed/fastembed_sparse_text_embedder.py +2 -2
  8. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/src/haystack_integrations/components/embedders/fastembed/fastembed_text_embedder.py +6 -0
  9. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/src/haystack_integrations/components/rankers/fastembed/late_interaction_ranker.py +2 -2
  10. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/src/haystack_integrations/components/rankers/fastembed/ranker.py +2 -2
  11. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/tests/test_fastembed_backend.py +17 -0
  12. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/tests/test_fastembed_document_embedder.py +41 -1
  13. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/tests/test_fastembed_late_interaction_ranker.py +19 -0
  14. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/tests/test_fastembed_ranker.py +6 -0
  15. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/tests/test_fastembed_text_embedder.py +41 -1
  16. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/.gitignore +0 -0
  17. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/LICENSE.txt +0 -0
  18. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/README.md +0 -0
  19. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/examples/example.py +0 -0
  20. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/examples/ranker_example.py +0 -0
  21. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/examples/sparse_example.py +0 -0
  22. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/pydoc/config_docusaurus.yml +0 -0
  23. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/src/haystack_integrations/components/embedders/fastembed/__init__.py +0 -0
  24. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/src/haystack_integrations/components/embedders/fastembed/embedding_backend/__init__.py +0 -0
  25. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/src/haystack_integrations/components/embedders/py.typed +0 -0
  26. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/src/haystack_integrations/components/rankers/fastembed/__init__.py +0 -0
  27. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/src/haystack_integrations/components/rankers/py.typed +0 -0
  28. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/tests/__init__.py +0 -0
  29. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/tests/test_fastembed_sparse_document_embedder.py +0 -0
  30. {fastembed_haystack-2.3.0 → fastembed_haystack-2.5.0}/tests/test_fastembed_sparse_text_embedder.py +0 -0
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## [integrations/fastembed-v2.4.0] - 2026-07-30
4
+
5
+ ### 🚀 Features
6
+
7
+ - *(fastembed)* Allow passing model_kwargs to dense embedders (#3558)
8
+
9
+ ### 🐛 Bug Fixes
10
+
11
+ - Fix new issues raised by ruff 0.16.0 (#3670)
12
+
13
+ ### 📚 Documentation
14
+
15
+ - Fix wrong class references in Fastembed sparse embedder messages and docstrings (#3610)
16
+
17
+
18
+ ## [integrations/fastembed-v2.3.0] - 2026-04-30
19
+
20
+ ### 🚀 Features
21
+
22
+ - Add score_threshold parameter to FastembedRanker (#3235)
23
+
24
+
3
25
  ## [integrations/fastembed-v2.2.0] - 2026-04-16
4
26
 
5
27
  ### 🚀 Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastembed-haystack
3
- Version: 2.3.0
3
+ Version: 2.5.0
4
4
  Summary: Haystack 2.x component to embed strings and Documents using fastembed embedding model
5
5
  Project-URL: Source, https://github.com/deepset-ai/haystack-core-integrations
6
6
  Project-URL: Documentation, https://github.com/deepset-ai/haystack-core-integrations/blob/main/integrations/fastembed/README.md
@@ -132,6 +132,7 @@ ignore = [
132
132
  "PLR0912",
133
133
  "PLR0913",
134
134
  "PLR0915",
135
+ "PLR0917",
135
136
  ]
136
137
 
137
138
  [tool.ruff.lint.isort]
@@ -20,14 +20,19 @@ class _FastembedEmbeddingBackendFactory:
20
20
  cache_dir: str | None = None,
21
21
  threads: int | None = None,
22
22
  local_files_only: bool = False,
23
+ model_kwargs: dict[str, Any] | None = None,
23
24
  ) -> "_FastembedEmbeddingBackend":
24
- embedding_backend_id = f"{model_name}{cache_dir}{threads}"
25
+ embedding_backend_id = f"{model_name}{cache_dir}{threads}{local_files_only}{model_kwargs}"
25
26
 
26
27
  if embedding_backend_id in _FastembedEmbeddingBackendFactory._instances:
27
28
  return _FastembedEmbeddingBackendFactory._instances[embedding_backend_id]
28
29
 
29
30
  embedding_backend = _FastembedEmbeddingBackend(
30
- model_name=model_name, cache_dir=cache_dir, threads=threads, local_files_only=local_files_only
31
+ model_name=model_name,
32
+ cache_dir=cache_dir,
33
+ threads=threads,
34
+ local_files_only=local_files_only,
35
+ model_kwargs=model_kwargs,
31
36
  )
32
37
  _FastembedEmbeddingBackendFactory._instances[embedding_backend_id] = embedding_backend
33
38
  return embedding_backend
@@ -44,9 +49,16 @@ class _FastembedEmbeddingBackend:
44
49
  cache_dir: str | None = None,
45
50
  threads: int | None = None,
46
51
  local_files_only: bool = False,
52
+ model_kwargs: dict[str, Any] | None = None,
47
53
  ) -> None:
54
+ model_kwargs = model_kwargs or {}
55
+
48
56
  self.model = TextEmbedding(
49
- model_name=model_name, cache_dir=cache_dir, threads=threads, local_files_only=local_files_only
57
+ model_name=model_name,
58
+ cache_dir=cache_dir,
59
+ threads=threads,
60
+ local_files_only=local_files_only,
61
+ **model_kwargs,
50
62
  )
51
63
 
52
64
  def embed(self, data: list[str], progress_bar: bool = True, **kwargs: Any) -> list[list[float]]:
@@ -72,6 +72,7 @@ class FastembedDocumentEmbedder:
72
72
  local_files_only: bool = False,
73
73
  meta_fields_to_embed: list[str] | None = None,
74
74
  embedding_separator: str = "\n",
75
+ model_kwargs: dict[str, Any] | None = None,
75
76
  ) -> None:
76
77
  """
77
78
  Create an FastembedDocumentEmbedder component.
@@ -93,6 +94,8 @@ class FastembedDocumentEmbedder:
93
94
  :param local_files_only: If `True`, only use the model files in the `cache_dir`.
94
95
  :param meta_fields_to_embed: List of meta fields that should be embedded along with the Document content.
95
96
  :param embedding_separator: Separator used to concatenate the meta fields to the Document content.
97
+ :param model_kwargs: Dictionary containing additional keyword arguments to pass to the Fastembed model,
98
+ such as `providers` (e.g. `["CUDAExecutionProvider"]` to run on GPU), `cuda`, or `device_ids`.
96
99
  """
97
100
 
98
101
  self.model_name = model
@@ -106,6 +109,7 @@ class FastembedDocumentEmbedder:
106
109
  self.local_files_only = local_files_only
107
110
  self.meta_fields_to_embed = meta_fields_to_embed or []
108
111
  self.embedding_separator = embedding_separator
112
+ self.model_kwargs = model_kwargs
109
113
  self.embedding_backend: _FastembedEmbeddingBackend | None = None
110
114
 
111
115
  def to_dict(self) -> dict[str, Any]:
@@ -128,6 +132,7 @@ class FastembedDocumentEmbedder:
128
132
  local_files_only=self.local_files_only,
129
133
  meta_fields_to_embed=self.meta_fields_to_embed,
130
134
  embedding_separator=self.embedding_separator,
135
+ model_kwargs=self.model_kwargs,
131
136
  )
132
137
 
133
138
  def warm_up(self) -> None:
@@ -140,6 +145,7 @@ class FastembedDocumentEmbedder:
140
145
  cache_dir=self.cache_dir,
141
146
  threads=self.threads,
142
147
  local_files_only=self.local_files_only,
148
+ model_kwargs=self.model_kwargs,
143
149
  )
144
150
 
145
151
  def _prepare_texts_to_embed(self, documents: list[Document]) -> list[str]:
@@ -53,7 +53,7 @@ class FastembedSparseDocumentEmbedder:
53
53
  result = sparse_doc_embedder.run(document_list)
54
54
  print(f"Document Text: {result['documents'][0].content}")
55
55
  print(f"Document Sparse Embedding: {result['documents'][0].sparse_embedding}")
56
- print(f"Sparse Embedding Dimension: {len(result['documents'][0].sparse_embedding)}")
56
+ print(f"Number of non-zero elements: {len(result['documents'][0].sparse_embedding.indices)}")
57
57
  ```
58
58
  """
59
59
 
@@ -71,7 +71,7 @@ class FastembedSparseDocumentEmbedder:
71
71
  model_kwargs: dict[str, Any] | None = None,
72
72
  ) -> None:
73
73
  """
74
- Create an FastembedDocumentEmbedder component.
74
+ Create a FastembedSparseDocumentEmbedder component.
75
75
 
76
76
  :param model: Local path or name of the model in Hugging Face's model hub,
77
77
  such as `prithivida/Splade_PP_en_v1`.
@@ -162,7 +162,7 @@ class FastembedSparseDocumentEmbedder:
162
162
  if not isinstance(documents, list) or (documents and not isinstance(documents[0], Document)):
163
163
  msg = (
164
164
  "FastembedSparseDocumentEmbedder expects a list of Documents as input. "
165
- "In case you want to embed a list of strings, please use the FastembedTextEmbedder."
165
+ "In case you want to embed a list of strings, please use the FastembedSparseTextEmbedder."
166
166
  )
167
167
  raise TypeError(msg)
168
168
 
@@ -107,13 +107,13 @@ class FastembedSparseTextEmbedder:
107
107
 
108
108
  :param text: A string to embed.
109
109
  :returns: A dictionary with the following keys:
110
- - `embedding`: A list of floats representing the embedding of the input text.
110
+ - `sparse_embedding`: The `SparseEmbedding` of the input text.
111
111
  :raises TypeError: If the input is not a string.
112
112
  """
113
113
  if not isinstance(text, str):
114
114
  msg = (
115
115
  "FastembedSparseTextEmbedder expects a string as input. "
116
- "In case you want to embed a list of Documents, please use the FastembedDocumentEmbedder."
116
+ "In case you want to embed a list of Documents, please use the FastembedSparseDocumentEmbedder."
117
117
  )
118
118
  raise TypeError(msg)
119
119
 
@@ -39,6 +39,7 @@ class FastembedTextEmbedder:
39
39
  progress_bar: bool = True,
40
40
  parallel: int | None = None,
41
41
  local_files_only: bool = False,
42
+ model_kwargs: dict[str, Any] | None = None,
42
43
  ) -> None:
43
44
  """
44
45
  Create a FastembedTextEmbedder component.
@@ -56,6 +57,8 @@ class FastembedTextEmbedder:
56
57
  If 0, use all available cores.
57
58
  If None, don't use data-parallel processing, use default onnxruntime threading instead.
58
59
  :param local_files_only: If `True`, only use the model files in the `cache_dir`.
60
+ :param model_kwargs: Dictionary containing additional keyword arguments to pass to the Fastembed model,
61
+ such as `providers` (e.g. `["CUDAExecutionProvider"]` to run on GPU), `cuda`, or `device_ids`.
59
62
  """
60
63
 
61
64
  self.model_name = model
@@ -66,6 +69,7 @@ class FastembedTextEmbedder:
66
69
  self.progress_bar = progress_bar
67
70
  self.parallel = parallel
68
71
  self.local_files_only = local_files_only
72
+ self.model_kwargs = model_kwargs
69
73
  self.embedding_backend: _FastembedEmbeddingBackend | None = None
70
74
 
71
75
  def to_dict(self) -> dict[str, Any]:
@@ -85,6 +89,7 @@ class FastembedTextEmbedder:
85
89
  progress_bar=self.progress_bar,
86
90
  parallel=self.parallel,
87
91
  local_files_only=self.local_files_only,
92
+ model_kwargs=self.model_kwargs,
88
93
  )
89
94
 
90
95
  def warm_up(self) -> None:
@@ -97,6 +102,7 @@ class FastembedTextEmbedder:
97
102
  cache_dir=self.cache_dir,
98
103
  threads=self.threads,
99
104
  local_files_only=self.local_files_only,
105
+ model_kwargs=self.model_kwargs,
100
106
  )
101
107
 
102
108
  @component.output_types(embedding=list[float])
@@ -189,10 +189,10 @@ class FastembedLateInteractionRanker:
189
189
  if not documents:
190
190
  return {"documents": []}
191
191
 
192
- top_k = top_k or self.top_k
193
- if top_k <= 0:
192
+ if top_k is not None and top_k <= 0:
194
193
  msg = f"top_k must be > 0, but got {top_k}"
195
194
  raise ValueError(msg)
195
+ top_k = self.top_k if top_k is None else top_k
196
196
 
197
197
  if self._model is None:
198
198
  self.warm_up()
@@ -179,10 +179,10 @@ class FastembedRanker:
179
179
  if not documents:
180
180
  return {"documents": []}
181
181
 
182
- top_k = top_k or self.top_k
183
- if top_k <= 0:
182
+ if top_k is not None and top_k <= 0:
184
183
  msg = f"top_k must be > 0, but got {top_k}"
185
184
  raise ValueError(msg)
185
+ top_k = self.top_k if top_k is None else top_k
186
186
 
187
187
  if self._model is None:
188
188
  self.warm_up()
@@ -39,6 +39,23 @@ def test_model_initialization(mock_instructor):
39
39
  _FastembedEmbeddingBackendFactory._instances = {}
40
40
 
41
41
 
42
+ @patch("haystack_integrations.components.embedders.fastembed.embedding_backend.fastembed_backend.TextEmbedding")
43
+ def test_dense_model_kwargs_initialization(mock_instructor):
44
+ model_kwargs = {"providers": ["CUDAExecutionProvider"]}
45
+
46
+ _FastembedEmbeddingBackendFactory.get_embedding_backend(
47
+ model_name="BAAI/bge-small-en-v1.5",
48
+ model_kwargs=model_kwargs,
49
+ )
50
+
51
+ mock_instructor.assert_called_once_with(
52
+ model_name="BAAI/bge-small-en-v1.5", cache_dir=None, threads=None, local_files_only=False, **model_kwargs
53
+ )
54
+
55
+ # restore the factory state
56
+ _FastembedEmbeddingBackendFactory._instances = {}
57
+
58
+
42
59
  @patch("haystack_integrations.components.embedders.fastembed.embedding_backend.fastembed_backend.TextEmbedding")
43
60
  def test_embedding_function_with_kwargs(mock_instructor): # noqa: ARG001
44
61
  embedding_backend = _FastembedEmbeddingBackendFactory.get_embedding_backend(model_name="BAAI/bge-small-en-v1.5")
@@ -80,6 +80,7 @@ class TestFastembedDocumentEmbedder:
80
80
  "local_files_only": False,
81
81
  "embedding_separator": "\n",
82
82
  "meta_fields_to_embed": [],
83
+ "model_kwargs": None,
83
84
  },
84
85
  }
85
86
 
@@ -99,6 +100,7 @@ class TestFastembedDocumentEmbedder:
99
100
  local_files_only=True,
100
101
  meta_fields_to_embed=["test_field"],
101
102
  embedding_separator=" | ",
103
+ model_kwargs={"providers": ["CUDAExecutionProvider"]},
102
104
  )
103
105
  embedder_dict = embedder.to_dict()
104
106
  assert embedder_dict == {
@@ -115,6 +117,7 @@ class TestFastembedDocumentEmbedder:
115
117
  "local_files_only": True,
116
118
  "meta_fields_to_embed": ["test_field"],
117
119
  "embedding_separator": " | ",
120
+ "model_kwargs": {"providers": ["CUDAExecutionProvider"]},
118
121
  },
119
122
  }
120
123
 
@@ -169,6 +172,7 @@ class TestFastembedDocumentEmbedder:
169
172
  "local_files_only": True,
170
173
  "meta_fields_to_embed": ["test_field"],
171
174
  "embedding_separator": " | ",
175
+ "model_kwargs": {"providers": ["CUDAExecutionProvider"]},
172
176
  },
173
177
  }
174
178
  embedder = default_from_dict(FastembedDocumentEmbedder, embedder_dict)
@@ -183,6 +187,20 @@ class TestFastembedDocumentEmbedder:
183
187
  assert embedder.local_files_only
184
188
  assert embedder.meta_fields_to_embed == ["test_field"]
185
189
  assert embedder.embedding_separator == " | "
190
+ assert embedder.model_kwargs == {"providers": ["CUDAExecutionProvider"]}
191
+
192
+ def test_init_with_model_kwargs_parameters(self):
193
+ """
194
+ Test initialization of FastembedDocumentEmbedder with model_kwargs parameters.
195
+ """
196
+ model_kwargs = {"providers": ["CUDAExecutionProvider"]}
197
+
198
+ embedder = FastembedDocumentEmbedder(
199
+ model="BAAI/bge-small-en-v1.5",
200
+ model_kwargs=model_kwargs,
201
+ )
202
+
203
+ assert embedder.model_kwargs == model_kwargs
186
204
 
187
205
  @patch(
188
206
  "haystack_integrations.components.embedders.fastembed.fastembed_document_embedder._FastembedEmbeddingBackendFactory"
@@ -195,7 +213,7 @@ class TestFastembedDocumentEmbedder:
195
213
  mocked_factory.get_embedding_backend.assert_not_called()
196
214
  embedder.warm_up()
197
215
  mocked_factory.get_embedding_backend.assert_called_once_with(
198
- model_name="BAAI/bge-small-en-v1.5", cache_dir=None, threads=None, local_files_only=False
216
+ model_name="BAAI/bge-small-en-v1.5", cache_dir=None, threads=None, local_files_only=False, model_kwargs=None
199
217
  )
200
218
 
201
219
  @patch(
@@ -295,6 +313,28 @@ class TestFastembedDocumentEmbedder:
295
313
 
296
314
  mock_warm_up.assert_called_once()
297
315
 
316
+ @pytest.mark.integration
317
+ def test_run_with_model_kwargs(self):
318
+ """
319
+ Integration test to check the embedding with model_kwargs parameters.
320
+ """
321
+ model_kwargs = {"providers": ["CPUExecutionProvider"], "lazy_load": True}
322
+
323
+ embedder = FastembedDocumentEmbedder(
324
+ model="BAAI/bge-small-en-v1.5",
325
+ model_kwargs=model_kwargs,
326
+ )
327
+ embedder.warm_up()
328
+
329
+ doc = Document(content="Parton energy loss in QCD matter")
330
+
331
+ result = embedder.run(documents=[doc])
332
+ embedding = result["documents"][0].embedding
333
+
334
+ assert isinstance(embedding, list)
335
+ assert len(embedding) == 384
336
+ assert all(isinstance(emb, float) for emb in embedding)
337
+
298
338
  @pytest.mark.integration
299
339
  def test_run(self):
300
340
  embedder = FastembedDocumentEmbedder(
@@ -222,6 +222,25 @@ class TestFastembedLateInteractionRanker:
222
222
  ):
223
223
  ranker.run(query=query, documents=list_document, top_k=-3)
224
224
 
225
+ with pytest.raises(
226
+ ValueError,
227
+ match="top_k must be > 0, but got 0",
228
+ ):
229
+ ranker.run(query=query, documents=list_document, top_k=0)
230
+
231
+ def test_run_runtime_top_k_zero_does_not_fall_back_to_instance_top_k(self):
232
+ """
233
+ A runtime top_k=0 must raise, not silently fall back to the instance top_k.
234
+ """
235
+ ranker = FastembedLateInteractionRanker(model_name="colbert-ir/colbertv2.0", top_k=5)
236
+ ranker._model = "mock_model"
237
+
238
+ with pytest.raises(
239
+ ValueError,
240
+ match="top_k must be > 0, but got 0",
241
+ ):
242
+ ranker.run(query="query", documents=[Document("Document 1")], top_k=0)
243
+
225
244
  def test_run_empty_document_list(self):
226
245
  """
227
246
  Test for no error when sending no documents.
@@ -226,6 +226,12 @@ class TestFastembedRanker:
226
226
  ):
227
227
  ranker.run(query=query, documents=list_document, top_k=-3)
228
228
 
229
+ with pytest.raises(
230
+ ValueError,
231
+ match="top_k must be > 0, but got 0",
232
+ ):
233
+ ranker.run(query=query, documents=list_document, top_k=0)
234
+
229
235
  def test_run_empty_document_list(self):
230
236
  """
231
237
  Test for no error when sending no documents.
@@ -65,6 +65,7 @@ class TestFastembedTextEmbedder:
65
65
  "progress_bar": True,
66
66
  "parallel": None,
67
67
  "local_files_only": False,
68
+ "model_kwargs": None,
68
69
  },
69
70
  }
70
71
 
@@ -81,6 +82,7 @@ class TestFastembedTextEmbedder:
81
82
  progress_bar=False,
82
83
  parallel=1,
83
84
  local_files_only=True,
85
+ model_kwargs={"providers": ["CUDAExecutionProvider"]},
84
86
  )
85
87
  embedder_dict = embedder.to_dict()
86
88
  assert embedder_dict == {
@@ -94,6 +96,7 @@ class TestFastembedTextEmbedder:
94
96
  "progress_bar": False,
95
97
  "parallel": 1,
96
98
  "local_files_only": True,
99
+ "model_kwargs": {"providers": ["CUDAExecutionProvider"]},
97
100
  },
98
101
  }
99
102
 
@@ -136,6 +139,7 @@ class TestFastembedTextEmbedder:
136
139
  "suffix": "suffix",
137
140
  "progress_bar": False,
138
141
  "parallel": 1,
142
+ "model_kwargs": {"providers": ["CUDAExecutionProvider"]},
139
143
  },
140
144
  }
141
145
  embedder = default_from_dict(FastembedTextEmbedder, embedder_dict)
@@ -146,6 +150,20 @@ class TestFastembedTextEmbedder:
146
150
  assert embedder.suffix == "suffix"
147
151
  assert embedder.progress_bar is False
148
152
  assert embedder.parallel == 1
153
+ assert embedder.model_kwargs == {"providers": ["CUDAExecutionProvider"]}
154
+
155
+ def test_init_with_model_kwargs_parameters(self):
156
+ """
157
+ Test initialization of FastembedTextEmbedder with model_kwargs parameters.
158
+ """
159
+ model_kwargs = {"providers": ["CUDAExecutionProvider"]}
160
+
161
+ embedder = FastembedTextEmbedder(
162
+ model="BAAI/bge-small-en-v1.5",
163
+ model_kwargs=model_kwargs,
164
+ )
165
+
166
+ assert embedder.model_kwargs == model_kwargs
149
167
 
150
168
  @patch(
151
169
  "haystack_integrations.components.embedders.fastembed.fastembed_text_embedder._FastembedEmbeddingBackendFactory"
@@ -158,7 +176,7 @@ class TestFastembedTextEmbedder:
158
176
  mocked_factory.get_embedding_backend.assert_not_called()
159
177
  embedder.warm_up()
160
178
  mocked_factory.get_embedding_backend.assert_called_once_with(
161
- model_name="BAAI/bge-small-en-v1.5", cache_dir=None, threads=None, local_files_only=False
179
+ model_name="BAAI/bge-small-en-v1.5", cache_dir=None, threads=None, local_files_only=False, model_kwargs=None
162
180
  )
163
181
 
164
182
  @patch(
@@ -216,6 +234,28 @@ class TestFastembedTextEmbedder:
216
234
 
217
235
  mock_warm_up.assert_called_once()
218
236
 
237
+ @pytest.mark.integration
238
+ def test_run_with_model_kwargs(self):
239
+ """
240
+ Integration test to check the embedding with model_kwargs parameters.
241
+ """
242
+ model_kwargs = {"providers": ["CPUExecutionProvider"], "lazy_load": True}
243
+
244
+ embedder = FastembedTextEmbedder(
245
+ model="BAAI/bge-small-en-v1.5",
246
+ model_kwargs=model_kwargs,
247
+ )
248
+ embedder.warm_up()
249
+
250
+ text = "Parton energy loss in QCD matter"
251
+
252
+ result = embedder.run(text=text)
253
+ embedding = result["embedding"]
254
+
255
+ assert isinstance(embedding, list)
256
+ assert len(embedding) == 384
257
+ assert all(isinstance(emb, float) for emb in embedding)
258
+
219
259
  @pytest.mark.integration
220
260
  def test_run(self):
221
261
  embedder = FastembedTextEmbedder(