sentence-transformers-haystack 0.2.0__tar.gz → 2.0.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 (37) hide show
  1. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/CHANGELOG.md +18 -0
  2. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/PKG-INFO +2 -3
  3. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/pyproject.toml +1 -2
  4. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/src/haystack_integrations/components/embedders/sentence_transformers/sentence_transformers_text_embedder.py +9 -11
  5. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/tests/test_sentence_transformers_text_embedder.py +8 -24
  6. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/.gitignore +0 -0
  7. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/LICENSE.txt +0 -0
  8. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/README.md +0 -0
  9. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/pydoc/config_docusaurus.yml +0 -0
  10. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/src/haystack_integrations/components/embedders/py.typed +0 -0
  11. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/src/haystack_integrations/components/embedders/sentence_transformers/__init__.py +0 -0
  12. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/src/haystack_integrations/components/embedders/sentence_transformers/embedding_backend/__init__.py +0 -0
  13. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/src/haystack_integrations/components/embedders/sentence_transformers/embedding_backend/backend.py +0 -0
  14. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/src/haystack_integrations/components/embedders/sentence_transformers/embedding_backend/sparse_backend.py +0 -0
  15. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/src/haystack_integrations/components/embedders/sentence_transformers/sentence_transformers_doc_image_embedder.py +0 -0
  16. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/src/haystack_integrations/components/embedders/sentence_transformers/sentence_transformers_document_embedder.py +0 -0
  17. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/src/haystack_integrations/components/embedders/sentence_transformers/sentence_transformers_sparse_document_embedder.py +0 -0
  18. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/src/haystack_integrations/components/embedders/sentence_transformers/sentence_transformers_sparse_text_embedder.py +0 -0
  19. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/src/haystack_integrations/components/rankers/py.typed +0 -0
  20. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/src/haystack_integrations/components/rankers/sentence_transformers/__init__.py +0 -0
  21. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/src/haystack_integrations/components/rankers/sentence_transformers/sentence_transformers_diversity.py +0 -0
  22. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/src/haystack_integrations/components/rankers/sentence_transformers/sentence_transformers_similarity.py +0 -0
  23. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/tests/__init__.py +0 -0
  24. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/tests/conftest.py +0 -0
  25. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/tests/test_files/images/apple.jpg +0 -0
  26. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/tests/test_files/images/haystack-logo.png +0 -0
  27. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/tests/test_files/images/image_metadata.png +0 -0
  28. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/tests/test_files/pdf/sample_pdf_1.pdf +0 -0
  29. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/tests/test_hybrid_rag_e2e.py +0 -0
  30. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/tests/test_sentence_transformers_diversity.py +0 -0
  31. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/tests/test_sentence_transformers_doc_image_embedder.py +0 -0
  32. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/tests/test_sentence_transformers_document_embedder.py +0 -0
  33. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/tests/test_sentence_transformers_embedding_backend.py +0 -0
  34. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/tests/test_sentence_transformers_similarity.py +0 -0
  35. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/tests/test_sentence_transformers_sparse_document_embedder.py +0 -0
  36. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/tests/test_sentence_transformers_sparse_embedding_backend.py +0 -0
  37. {sentence_transformers_haystack-0.2.0 → sentence_transformers_haystack-2.0.0}/tests/test_sentence_transformers_sparse_text_embedder.py +0 -0
@@ -1,5 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## [integrations/sentence_transformers-v1.0.0] - 2026-10-16
4
+
5
+ ### 🧹 Chores
6
+
7
+ - [**breaking**] Drop Python 3.10 support (#4105)
8
+
9
+
10
+ ## [integrations/sentence_transformers-v0.2.0] - 2026-10-01
11
+
12
+ ### 🐛 Bug Fixes
13
+
14
+ - Sentence Transformers - raise sentence-transformers floor to >=5.6.0 (CVE-2026-68770) (#4036)
15
+
16
+ ### 📚 Documentation
17
+
18
+ - Clarify tokenizer_kwargs forwarding in Sentence Transformers components (#4012)
19
+
20
+
3
21
  ## [integrations/sentence_transformers-v0.1.2] - 2026-09-23
4
22
 
5
23
  ### 🐛 Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sentence-transformers-haystack
3
- Version: 0.2.0
3
+ Version: 2.0.0
4
4
  Summary: Haystack integration for sentence_transformers
5
5
  Project-URL: Documentation, https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/sentence_transformers#readme
6
6
  Project-URL: Issues, https://github.com/deepset-ai/haystack-core-integrations/issues
@@ -12,14 +12,13 @@ Keywords: embeddings,haystack,reranking,sentence-transformers
12
12
  Classifier: Development Status :: 4 - Beta
13
13
  Classifier: License :: OSI Approved :: Apache Software License
14
14
  Classifier: Programming Language :: Python
15
- Classifier: Programming Language :: Python :: 3.10
16
15
  Classifier: Programming Language :: Python :: 3.11
17
16
  Classifier: Programming Language :: Python :: 3.12
18
17
  Classifier: Programming Language :: Python :: 3.13
19
18
  Classifier: Programming Language :: Python :: 3.14
20
19
  Classifier: Programming Language :: Python :: Implementation :: CPython
21
20
  Classifier: Programming Language :: Python :: Implementation :: PyPy
22
- Requires-Python: >=3.10
21
+ Requires-Python: >=3.11
23
22
  Requires-Dist: haystack-ai>=2.24.0
24
23
  Requires-Dist: pillow>=11.3.0
25
24
  Requires-Dist: pypdfium2>=4.0.0
@@ -7,7 +7,7 @@ name = "sentence-transformers-haystack"
7
7
  dynamic = ["version"]
8
8
  description = "Haystack integration for sentence_transformers"
9
9
  readme = "README.md"
10
- requires-python = ">=3.10"
10
+ requires-python = ">=3.11"
11
11
  license = "Apache-2.0"
12
12
  keywords = ["haystack", "sentence-transformers", "embeddings", "reranking"]
13
13
  authors = [{ name = "deepset GmbH", email = "info@deepset.ai" }]
@@ -15,7 +15,6 @@ classifiers = [
15
15
  "License :: OSI Approved :: Apache Software License",
16
16
  "Development Status :: 4 - Beta",
17
17
  "Programming Language :: Python",
18
- "Programming Language :: Python :: 3.10",
19
18
  "Programming Language :: Python :: 3.11",
20
19
  "Programming Language :: Python :: 3.12",
21
20
  "Programming Language :: Python :: 3.13",
@@ -4,7 +4,7 @@
4
4
 
5
5
  from typing import Any, Literal
6
6
 
7
- from haystack import component, default_from_dict, default_to_dict, logging
7
+ from haystack import component, default_from_dict, default_to_dict
8
8
  from haystack.utils import ComponentDevice, Secret
9
9
  from haystack.utils.hf import deserialize_hf_model_kwargs, serialize_hf_model_kwargs
10
10
 
@@ -13,8 +13,6 @@ from haystack_integrations.components.embedders.sentence_transformers.embedding_
13
13
  _SentenceTransformersEmbeddingBackendFactory,
14
14
  )
15
15
 
16
- logger = logging.getLogger(__name__)
17
-
18
16
 
19
17
  @component
20
18
  class SentenceTransformersTextEmbedder:
@@ -122,9 +120,10 @@ class SentenceTransformersTextEmbedder:
122
120
  :param quantization_ranges:
123
121
  Calibration ranges to use when `precision` is "int8" or "uint8", with shape `(2, embedding_dim)`:
124
122
  minimum values in the first row and maximum values in the second.
125
- Scalar quantization calibrates the min/max range from the batch being encoded, which is degenerate
126
- for a single text and produces meaningless embeddings. Pass ranges computed from a representative
127
- sample of embeddings to get consistent quantized embeddings.
123
+ Required for "int8" and "uint8" because ranges cannot be inferred from a single text.
124
+ Compute ranges from a representative sample of embeddings.
125
+ :raises ValueError:
126
+ `precision` is "int8" or "uint8" and `quantization_ranges` is not provided.
128
127
  """
129
128
 
130
129
  self.model = model
@@ -148,12 +147,11 @@ class SentenceTransformersTextEmbedder:
148
147
  self.backend = backend
149
148
  self.quantization_ranges = quantization_ranges
150
149
  if precision in ("int8", "uint8") and quantization_ranges is None:
151
- logger.warning(
152
- "Using precision '{precision}' without `quantization_ranges` produces meaningless embeddings for "
153
- "single texts, because the calibration range is computed from the batch itself. "
154
- "Pass `quantization_ranges` computed from a representative sample of embeddings.",
155
- precision=precision,
150
+ msg = (
151
+ f"Precision '{precision}' requires `quantization_ranges` computed from "
152
+ "a representative sample of embeddings."
156
153
  )
154
+ raise ValueError(msg)
157
155
 
158
156
  def _get_telemetry_data(self) -> dict[str, Any]:
159
157
  """
@@ -64,10 +64,10 @@ class TestSentenceTransformersTextEmbedder:
64
64
  assert embedder.precision == "int8"
65
65
  assert embedder.quantization_ranges == [[-1.0, -1.0], [1.0, 1.0]]
66
66
 
67
- def test_init_quantized_precision_without_ranges_warns(self, caplog):
68
- with caplog.at_level("WARNING"):
69
- SentenceTransformersTextEmbedder(model="model", precision="int8")
70
- assert "quantization_ranges" in caplog.text
67
+ @pytest.mark.parametrize("precision", ["int8", "uint8"])
68
+ def test_init_quantized_precision_without_ranges_raises(self, precision):
69
+ with pytest.raises(ValueError, match="requires `quantization_ranges`"):
70
+ SentenceTransformersTextEmbedder(model="model", precision=precision)
71
71
 
72
72
  def test_to_dict(self):
73
73
  component = SentenceTransformersTextEmbedder(model="model", device=ComponentDevice.from_str("cpu"))
@@ -114,6 +114,7 @@ class TestSentenceTransformersTextEmbedder:
114
114
  tokenizer_kwargs={"model_max_length": 512},
115
115
  config_kwargs={"use_memory_efficient_attention": False},
116
116
  precision="int8",
117
+ quantization_ranges=[[-1.0] * 256, [1.0] * 256],
117
118
  encode_kwargs={"task": "clustering"},
118
119
  )
119
120
  data = component.to_dict()
@@ -138,7 +139,7 @@ class TestSentenceTransformersTextEmbedder:
138
139
  "precision": "int8",
139
140
  "encode_kwargs": {"task": "clustering"},
140
141
  "backend": "torch",
141
- "quantization_ranges": None,
142
+ "quantization_ranges": [[-1.0] * 256, [1.0] * 256],
142
143
  },
143
144
  }
144
145
 
@@ -223,6 +224,7 @@ class TestSentenceTransformersTextEmbedder:
223
224
  "local_files_only": False,
224
225
  "truncate_dim": 256,
225
226
  "precision": "int8",
227
+ "quantization_ranges": [[-1.0] * 256, [1.0] * 256],
226
228
  },
227
229
  }
228
230
  component = SentenceTransformersTextEmbedder.from_dict(data)
@@ -239,6 +241,7 @@ class TestSentenceTransformersTextEmbedder:
239
241
  assert component.local_files_only is False
240
242
  assert component.truncate_dim == 256
241
243
  assert component.precision == "int8"
244
+ assert component.quantization_ranges == [[-1.0] * 256, [1.0] * 256]
242
245
 
243
246
  @patch(
244
247
  "haystack_integrations.components.embedders.sentence_transformers.sentence_transformers_text_embedder._SentenceTransformersEmbeddingBackendFactory"
@@ -432,24 +435,6 @@ class TestSentenceTransformersTextEmbedder:
432
435
  # without truncation, the embedding has 128 length
433
436
  assert len(embedding_trunc) == 64
434
437
 
435
- @pytest.mark.integration
436
- def test_run_quantization(self, del_hf_env_vars_if_empty):
437
- """
438
- sentence-transformers-testing/stsb-bert-tiny-safetensors maps sentences & paragraphs to a 128 dimensional dense
439
- vector space
440
- """
441
- checkpoint = "sentence-transformers-testing/stsb-bert-tiny-safetensors"
442
- text = "a nice text to embed"
443
-
444
- embedder_def = SentenceTransformersTextEmbedder(
445
- model=checkpoint, precision="int8", device=ComponentDevice.from_str("cpu")
446
- )
447
- result_def = embedder_def.run(text=text)
448
- embedding_def = result_def["embedding"]
449
-
450
- assert len(embedding_def) == 128
451
- assert all(isinstance(el, int) for el in embedding_def)
452
-
453
438
  @pytest.mark.integration
454
439
  def test_run_quantization_with_ranges(self, del_hf_env_vars_if_empty):
455
440
  """
@@ -466,5 +451,4 @@ class TestSentenceTransformersTextEmbedder:
466
451
 
467
452
  assert len(embedding) == 128
468
453
  assert all(isinstance(el, int) for el in embedding)
469
- # without explicit ranges, a single text produces a degenerate all-equal embedding
470
454
  assert len(set(embedding)) > 1