weave-haystack 1.0.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 (20) hide show
  1. weave_haystack-2.0.0/CHANGELOG.md +21 -0
  2. weave_haystack-2.0.0/PKG-INFO +40 -0
  3. weave_haystack-2.0.0/README.md +15 -0
  4. {weave_haystack-1.0.0 → weave_haystack-2.0.0}/pyproject.toml +1 -1
  5. {weave_haystack-1.0.0 → weave_haystack-2.0.0}/src/haystack_integrations/components/connectors/weave/weave_connector.py +6 -11
  6. {weave_haystack-1.0.0 → weave_haystack-2.0.0}/tests/test_tracer.py +2 -6
  7. {weave_haystack-1.0.0 → weave_haystack-2.0.0}/tests/test_weave_connector.py +29 -5
  8. weave_haystack-1.0.0/CHANGELOG.md +0 -9
  9. weave_haystack-1.0.0/PKG-INFO +0 -99
  10. weave_haystack-1.0.0/README.md +0 -74
  11. {weave_haystack-1.0.0 → weave_haystack-2.0.0}/.gitignore +0 -0
  12. {weave_haystack-1.0.0 → weave_haystack-2.0.0}/LICENSE.txt +0 -0
  13. {weave_haystack-1.0.0 → weave_haystack-2.0.0}/example/README.md +0 -0
  14. {weave_haystack-1.0.0 → weave_haystack-2.0.0}/example/hybrid_retrieval.py +0 -0
  15. {weave_haystack-1.0.0 → weave_haystack-2.0.0}/pydoc/config.yml +0 -0
  16. {weave_haystack-1.0.0 → weave_haystack-2.0.0}/src/haystack_integrations/components/connectors/py.typed +0 -0
  17. {weave_haystack-1.0.0 → weave_haystack-2.0.0}/src/haystack_integrations/components/connectors/weave/__init__.py +0 -0
  18. {weave_haystack-1.0.0 → weave_haystack-2.0.0}/src/haystack_integrations/tracing/py.typed +0 -0
  19. {weave_haystack-1.0.0 → weave_haystack-2.0.0}/src/haystack_integrations/tracing/weave/__init__.py +0 -0
  20. {weave_haystack-1.0.0 → weave_haystack-2.0.0}/src/haystack_integrations/tracing/weave/tracer.py +0 -0
@@ -0,0 +1,21 @@
1
+ # Changelog
2
+
3
+ ## [integrations/weights_and_biases_weave-v1.0.0] - 2025-07-01
4
+
5
+ ### 🐛 Bug Fixes
6
+
7
+ - [**breaking**] Weave - move Connector, fix types, add py.typed (#2038)
8
+
9
+ ### 🧹 Chores
10
+
11
+ - Align core-integrations Hatch scripts (#1898)
12
+ - Remove black (#1985)
13
+
14
+
15
+ ## [integrations/weights_and_biases_weave-v0.0.1] - 2025-03-28
16
+
17
+ ### 🚜 Refactor
18
+
19
+ - Renaming the project/package to weights_biases_weave (#1565)
20
+
21
+ <!-- generated by git-cliff -->
@@ -0,0 +1,40 @@
1
+ Metadata-Version: 2.4
2
+ Name: weave-haystack
3
+ Version: 2.0.0
4
+ Summary: An integration of Weights & Biases Weave tracer with Haystack
5
+ Project-URL: Source, https://github.com/deepset-ai/haystack-core-integrations
6
+ Project-URL: Documentation, https://github.com/deepset-ai/haystack-core-integrations/blob/main/integrations/weights_and_biases_weave/README.md
7
+ Project-URL: Issues, https://github.com/deepset-ai/haystack-core-integrations/issues
8
+ Author-email: deepset GmbH <info@deepset.ai>
9
+ License-Expression: Apache-2.0
10
+ License-File: LICENSE.txt
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: License :: OSI Approved :: Apache Software License
13
+ Classifier: Programming Language :: Python
14
+ Classifier: Programming Language :: Python :: 3.9
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: Implementation :: CPython
20
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
21
+ Requires-Python: >=3.9
22
+ Requires-Dist: haystack-ai
23
+ Requires-Dist: weave>=0.52.7
24
+ Description-Content-Type: text/markdown
25
+
26
+ # weave-haystack
27
+
28
+ [![PyPI - Version](https://img.shields.io/pypi/v/weave-haystack.svg)](https://pypi.org/project/weave-haystack)
29
+ [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/weave-haystack)](https://pypi.org/project/weave-haystack)
30
+
31
+ - [Integration page](https://haystack.deepset.ai/integrations/weights-and-bias-tracer)
32
+ - [Changelog](https://github.com/deepset-ai/haystack-core-integrations/blob/main/integrations/weights_and_biases_weave/CHANGELOG.md)
33
+
34
+ ---
35
+
36
+ ## Contributing
37
+
38
+ Refer to the general [Contribution Guidelines](https://github.com/deepset-ai/haystack-core-integrations/blob/main/CONTRIBUTING.md).
39
+
40
+ To run integration tests locally, you need to export the `WANDB_API_KEY` environment variable.
@@ -0,0 +1,15 @@
1
+ # weave-haystack
2
+
3
+ [![PyPI - Version](https://img.shields.io/pypi/v/weave-haystack.svg)](https://pypi.org/project/weave-haystack)
4
+ [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/weave-haystack)](https://pypi.org/project/weave-haystack)
5
+
6
+ - [Integration page](https://haystack.deepset.ai/integrations/weights-and-bias-tracer)
7
+ - [Changelog](https://github.com/deepset-ai/haystack-core-integrations/blob/main/integrations/weights_and_biases_weave/CHANGELOG.md)
8
+
9
+ ---
10
+
11
+ ## Contributing
12
+
13
+ Refer to the general [Contribution Guidelines](https://github.com/deepset-ai/haystack-core-integrations/blob/main/CONTRIBUTING.md).
14
+
15
+ To run integration tests locally, you need to export the `WANDB_API_KEY` environment variable.
@@ -23,7 +23,7 @@ classifiers = [
23
23
  "Programming Language :: Python :: Implementation :: CPython",
24
24
  "Programming Language :: Python :: Implementation :: PyPy",
25
25
  ]
26
- dependencies = ["haystack-ai", "weave>=0.51.33"]
26
+ dependencies = ["haystack-ai", "weave>=0.52.7"]
27
27
 
28
28
  [project.urls]
29
29
  Source = "https://github.com/deepset-ai/haystack-core-integrations"
@@ -3,7 +3,7 @@ from typing import Any, Optional
3
3
  from haystack import component, default_from_dict, default_to_dict, logging, tracing
4
4
 
5
5
  from haystack_integrations.tracing.weave import WeaveTracer
6
- from weave.trace.autopatch import AutopatchSettings
6
+ from weave.trace.settings import UserSettings
7
7
 
8
8
  logger = logging.getLogger(__name__)
9
9
 
@@ -101,9 +101,9 @@ class WeaveConnector:
101
101
  Dictionary with all the necessary information to recreate this component.
102
102
  """
103
103
  weave_init_kwargs = self.weave_init_kwargs.copy()
104
- autopatch_settings = weave_init_kwargs.get("autopatch_settings", None)
105
- if isinstance(autopatch_settings, AutopatchSettings):
106
- weave_init_kwargs["autopatch_settings"] = autopatch_settings.model_dump(exclude_defaults=True)
104
+ settings = weave_init_kwargs.get("settings", None)
105
+ if isinstance(settings, UserSettings):
106
+ weave_init_kwargs["settings"] = settings.model_dump(mode="json", exclude_defaults=True)
107
107
 
108
108
  return default_to_dict(self, pipeline_name=self.pipeline_name, weave_init_kwargs=weave_init_kwargs)
109
109
 
@@ -116,12 +116,7 @@ class WeaveConnector:
116
116
  :returns:
117
117
  Deserialized component.
118
118
  """
119
- if (
120
- autopatch_settings := data.get("init_parameters", {})
121
- .get("weave_init_kwargs", {})
122
- .get("autopatch_settings", None)
123
- ):
124
- parsed_settings = AutopatchSettings.model_validate(autopatch_settings)
125
- data["init_parameters"]["weave_init_kwargs"]["autopatch_settings"] = parsed_settings
119
+ # Weave's API accepts both dict and UserSettings objects for `settings`,
120
+ # so we can pass the raw settings dict directly without deserializing it
126
121
 
127
122
  return default_from_dict(cls, data)
@@ -1,8 +1,6 @@
1
1
  import logging
2
2
  from unittest.mock import patch
3
3
 
4
- from weave.trace.autopatch import AutopatchSettings
5
-
6
4
  from haystack_integrations.tracing.weave.tracer import WeaveSpan, WeaveTracer
7
5
 
8
6
 
@@ -40,13 +38,11 @@ class TestWeaveTracer:
40
38
  mock_init.return_value = MockWeaveClient()
41
39
  tracer = WeaveTracer(
42
40
  project_name="test_project",
43
- autopatch_settings=AutopatchSettings(disable_autopatch=True),
41
+ settings={"implicitly_patch_integrations": False},
44
42
  )
45
43
  assert tracer._client is not None
46
44
  assert tracer._current_span is None
47
- mock_init.assert_called_once_with(
48
- "test_project", autopatch_settings=AutopatchSettings(disable_autopatch=True)
49
- )
45
+ mock_init.assert_called_once_with("test_project", settings={"implicitly_patch_integrations": False})
50
46
 
51
47
  def test_create_new_span(self):
52
48
  with patch("weave.init") as mock_init:
@@ -8,7 +8,7 @@ from haystack import Pipeline, component
8
8
  from haystack.components.builders import PromptBuilder
9
9
  from haystack.core.errors import PipelineRuntimeError
10
10
  from haystack.tracing import tracer as haystack_configured_tracer
11
- from weave.trace.autopatch import AutopatchSettings
11
+ from weave.trace.settings import UserSettings
12
12
 
13
13
  from haystack_integrations.components.connectors.weave import WeaveConnector
14
14
  from haystack_integrations.tracing.weave import WeaveTracer
@@ -66,12 +66,14 @@ class TestWeaveConnector:
66
66
  """Test that WeaveConnector can be serialized and deserialized correctly"""
67
67
  connector = WeaveConnector(
68
68
  pipeline_name="test_pipeline",
69
- weave_init_kwargs={"autopatch_settings": AutopatchSettings(disable_autopatch=True)},
69
+ weave_init_kwargs={"settings": {"implicitly_patch_integrations": False}},
70
70
  )
71
71
  serialized: dict[str, Any] = connector.to_dict()
72
72
 
73
73
  assert serialized["init_parameters"]["pipeline_name"] == "test_pipeline"
74
- assert serialized["init_parameters"]["weave_init_kwargs"] == {"autopatch_settings": {"disable_autopatch": True}}
74
+ assert serialized["init_parameters"]["weave_init_kwargs"] == {
75
+ "settings": {"implicitly_patch_integrations": False}
76
+ }
75
77
  assert "type" in serialized
76
78
  assert serialized["type"] == "haystack_integrations.components.connectors.weave.weave_connector.WeaveConnector"
77
79
 
@@ -80,7 +82,29 @@ class TestWeaveConnector:
80
82
  assert isinstance(deserialized, WeaveConnector)
81
83
  assert deserialized.pipeline_name == "test_pipeline"
82
84
  assert deserialized.tracer is None # tracer is only initialized with warm_up
83
- assert deserialized.weave_init_kwargs == {"autopatch_settings": AutopatchSettings(disable_autopatch=True)}
85
+ assert deserialized.weave_init_kwargs == {"settings": {"implicitly_patch_integrations": False}}
86
+
87
+ def test_serialization_of_weave_init_kwargs_with_user_settings(self) -> None:
88
+ """Test that WeaveConnector can be serialized and deserialized correctly with UserSettings"""
89
+ connector = WeaveConnector(
90
+ pipeline_name="test_pipeline",
91
+ weave_init_kwargs={"settings": UserSettings(implicitly_patch_integrations=False)},
92
+ )
93
+ serialized: dict[str, Any] = connector.to_dict()
94
+
95
+ assert serialized["init_parameters"]["pipeline_name"] == "test_pipeline"
96
+ assert serialized["init_parameters"]["weave_init_kwargs"] == {
97
+ "settings": {"implicitly_patch_integrations": False}
98
+ }
99
+ assert "type" in serialized
100
+ assert serialized["type"] == "haystack_integrations.components.connectors.weave.weave_connector.WeaveConnector"
101
+
102
+ deserialized = WeaveConnector.from_dict(serialized)
103
+
104
+ assert isinstance(deserialized, WeaveConnector)
105
+ assert deserialized.pipeline_name == "test_pipeline"
106
+ assert deserialized.tracer is None # tracer is only initialized with warm_up
107
+ assert deserialized.weave_init_kwargs == {"settings": {"implicitly_patch_integrations": False}}
84
108
 
85
109
  def test_pipeline_tracing(self, mock_weave_client: Mock, sample_pipeline: Pipeline) -> None:
86
110
  """Test that pipeline operations are correctly traced"""
@@ -155,7 +179,7 @@ class TestWeaveConnector:
155
179
  monkeypatch.setenv("HAYSTACK_CONTENT_TRACING_ENABLED", "true")
156
180
  connector = WeaveConnector(
157
181
  pipeline_name="test_pipeline",
158
- weave_init_kwargs={"autopatch_settings": AutopatchSettings(disable_autopatch=True)},
182
+ weave_init_kwargs={"settings": {"implicitly_patch_integrations": False}},
159
183
  )
160
184
  assert connector.tracer is None
161
185
 
@@ -1,9 +0,0 @@
1
- # Changelog
2
-
3
- ## [integrations/weights_and_biases_weave-v0.0.1] - 2025-03-28
4
-
5
- ### 🚜 Refactor
6
-
7
- - Renaming the project/package to weights_biases_weave (#1565)
8
-
9
- <!-- generated by git-cliff -->
@@ -1,99 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: weave-haystack
3
- Version: 1.0.0
4
- Summary: An integration of Weights & Biases Weave tracer with Haystack
5
- Project-URL: Source, https://github.com/deepset-ai/haystack-core-integrations
6
- Project-URL: Documentation, https://github.com/deepset-ai/haystack-core-integrations/blob/main/integrations/weights_and_biases_weave/README.md
7
- Project-URL: Issues, https://github.com/deepset-ai/haystack-core-integrations/issues
8
- Author-email: deepset GmbH <info@deepset.ai>
9
- License-Expression: Apache-2.0
10
- License-File: LICENSE.txt
11
- Classifier: Development Status :: 4 - Beta
12
- Classifier: License :: OSI Approved :: Apache Software License
13
- Classifier: Programming Language :: Python
14
- Classifier: Programming Language :: Python :: 3.9
15
- Classifier: Programming Language :: Python :: 3.10
16
- Classifier: Programming Language :: Python :: 3.11
17
- Classifier: Programming Language :: Python :: 3.12
18
- Classifier: Programming Language :: Python :: 3.13
19
- Classifier: Programming Language :: Python :: Implementation :: CPython
20
- Classifier: Programming Language :: Python :: Implementation :: PyPy
21
- Requires-Python: >=3.9
22
- Requires-Dist: haystack-ai
23
- Requires-Dist: weave>=0.51.33
24
- Description-Content-Type: text/markdown
25
-
26
- # weave-haystack
27
-
28
- [![PyPI - Version](https://img.shields.io/pypi/v/weave-haystack.svg)](https://pypi.org/project/weave-haystack)
29
- [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/weave-haystack)](https://pypi.org/project/weave-haystack)
30
-
31
- - [Installation](#installation)
32
- - [Example](#example)
33
- - [License](#license)
34
-
35
-
36
- ## Installation
37
-
38
- ```console
39
- pip install weave-haystack
40
- ```
41
-
42
- ## Weave by Weights & Biases
43
-
44
- ### Example
45
-
46
- You need to have a Weave account to use this feature. You can sign up for free at https://wandb.ai/site.
47
-
48
- You then need to set the `WANDB_API_KEY:` environment variable with your Weights & Biases API key. You should find
49
- your API key in https://wandb.ai/home when you are logged in.
50
-
51
- You should then head to `https://wandb.ai/<user_name>/projects` and see the complete trace for your pipeline under
52
- the pipeline name you specified, when creating the `WeaveConnector`.
53
-
54
- You also need to have the `HAYSTACK_CONTENT_TRACING_ENABLED` environment variable set to `true`.
55
-
56
- To use this connector simply add it to your pipeline without any connections, and it will automatically start
57
- sending traces to Weights & Biases.
58
-
59
- ```python
60
- import os
61
-
62
- from haystack import Pipeline
63
- from haystack.components.builders import ChatPromptBuilder
64
- from haystack.components.generators.chat import OpenAIChatGenerator
65
- from haystack.dataclasses import ChatMessage
66
-
67
- from haystack_integrations.components.connectors import WeaveConnector
68
-
69
- os.environ["HAYSTACK_CONTENT_TRACING_ENABLED"] = "true"
70
-
71
- pipe = Pipeline()
72
- pipe.add_component("prompt_builder", ChatPromptBuilder())
73
- pipe.add_component("llm", OpenAIChatGenerator(model="gpt-3.5-turbo"))
74
- pipe.connect("prompt_builder.prompt", "llm.messages")
75
-
76
- connector = WeaveConnector(pipeline_name="test_pipeline")
77
- pipe.add_component("weave", connector)
78
-
79
- messages = [
80
- ChatMessage.from_system(
81
- "Always respond in German even if some input data is in other languages."
82
- ),
83
- ChatMessage.from_user("Tell me about {{location}}"),
84
- ]
85
-
86
- response = pipe.run(
87
- data={
88
- "prompt_builder": {
89
- "template_variables": {"location": "Berlin"},
90
- "template": messages,
91
- }
92
- }
93
- )
94
- print(response["llm"]["replies"][0])
95
- ```
96
-
97
- ## License
98
-
99
- `weave-haystack` is distributed under the terms of the [Apache-2.0](https://spdx.org/licenses/Apache-2.0.html) license.
@@ -1,74 +0,0 @@
1
- # weave-haystack
2
-
3
- [![PyPI - Version](https://img.shields.io/pypi/v/weave-haystack.svg)](https://pypi.org/project/weave-haystack)
4
- [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/weave-haystack)](https://pypi.org/project/weave-haystack)
5
-
6
- - [Installation](#installation)
7
- - [Example](#example)
8
- - [License](#license)
9
-
10
-
11
- ## Installation
12
-
13
- ```console
14
- pip install weave-haystack
15
- ```
16
-
17
- ## Weave by Weights & Biases
18
-
19
- ### Example
20
-
21
- You need to have a Weave account to use this feature. You can sign up for free at https://wandb.ai/site.
22
-
23
- You then need to set the `WANDB_API_KEY:` environment variable with your Weights & Biases API key. You should find
24
- your API key in https://wandb.ai/home when you are logged in.
25
-
26
- You should then head to `https://wandb.ai/<user_name>/projects` and see the complete trace for your pipeline under
27
- the pipeline name you specified, when creating the `WeaveConnector`.
28
-
29
- You also need to have the `HAYSTACK_CONTENT_TRACING_ENABLED` environment variable set to `true`.
30
-
31
- To use this connector simply add it to your pipeline without any connections, and it will automatically start
32
- sending traces to Weights & Biases.
33
-
34
- ```python
35
- import os
36
-
37
- from haystack import Pipeline
38
- from haystack.components.builders import ChatPromptBuilder
39
- from haystack.components.generators.chat import OpenAIChatGenerator
40
- from haystack.dataclasses import ChatMessage
41
-
42
- from haystack_integrations.components.connectors import WeaveConnector
43
-
44
- os.environ["HAYSTACK_CONTENT_TRACING_ENABLED"] = "true"
45
-
46
- pipe = Pipeline()
47
- pipe.add_component("prompt_builder", ChatPromptBuilder())
48
- pipe.add_component("llm", OpenAIChatGenerator(model="gpt-3.5-turbo"))
49
- pipe.connect("prompt_builder.prompt", "llm.messages")
50
-
51
- connector = WeaveConnector(pipeline_name="test_pipeline")
52
- pipe.add_component("weave", connector)
53
-
54
- messages = [
55
- ChatMessage.from_system(
56
- "Always respond in German even if some input data is in other languages."
57
- ),
58
- ChatMessage.from_user("Tell me about {{location}}"),
59
- ]
60
-
61
- response = pipe.run(
62
- data={
63
- "prompt_builder": {
64
- "template_variables": {"location": "Berlin"},
65
- "template": messages,
66
- }
67
- }
68
- )
69
- print(response["llm"]["replies"][0])
70
- ```
71
-
72
- ## License
73
-
74
- `weave-haystack` is distributed under the terms of the [Apache-2.0](https://spdx.org/licenses/Apache-2.0.html) license.