weave-haystack 0.0.1__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-0.0.1 → weave_haystack-2.0.0}/example/hybrid_retrieval.py +1 -3
  5. {weave_haystack-0.0.1 → weave_haystack-2.0.0}/pydoc/config.yml +1 -1
  6. {weave_haystack-0.0.1 → weave_haystack-2.0.0}/pyproject.toml +27 -33
  7. weave_haystack-2.0.0/src/haystack_integrations/components/connectors/py.typed +0 -0
  8. {weave_haystack-0.0.1/src/haystack_integrations/components/connectors → weave_haystack-2.0.0/src/haystack_integrations/components/connectors/weave}/weave_connector.py +6 -11
  9. weave_haystack-2.0.0/src/haystack_integrations/tracing/py.typed +0 -0
  10. {weave_haystack-0.0.1 → weave_haystack-2.0.0}/src/haystack_integrations/tracing/weave/tracer.py +7 -2
  11. {weave_haystack-0.0.1 → weave_haystack-2.0.0}/tests/test_tracer.py +2 -7
  12. {weave_haystack-0.0.1 → weave_haystack-2.0.0}/tests/test_weave_connector.py +32 -8
  13. weave_haystack-0.0.1/CHANGELOG.md +0 -20
  14. weave_haystack-0.0.1/PKG-INFO +0 -99
  15. weave_haystack-0.0.1/README.md +0 -74
  16. {weave_haystack-0.0.1 → weave_haystack-2.0.0}/.gitignore +0 -0
  17. {weave_haystack-0.0.1 → weave_haystack-2.0.0}/LICENSE.txt +0 -0
  18. {weave_haystack-0.0.1 → weave_haystack-2.0.0}/example/README.md +0 -0
  19. {weave_haystack-0.0.1/src/haystack_integrations/components/connectors → weave_haystack-2.0.0/src/haystack_integrations/components/connectors/weave}/__init__.py +0 -0
  20. {weave_haystack-0.0.1 → weave_haystack-2.0.0}/src/haystack_integrations/tracing/weave/__init__.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.
@@ -5,11 +5,10 @@ from haystack.components.rankers import TransformersSimilarityRanker
5
5
  from haystack.components.retrievers.in_memory import InMemoryBM25Retriever, InMemoryEmbeddingRetriever
6
6
  from haystack.document_stores.in_memory import InMemoryDocumentStore
7
7
 
8
- from haystack_integrations.components.connectors import WeaveConnector
8
+ from haystack_integrations.components.connectors.weave import WeaveConnector
9
9
 
10
10
 
11
11
  def index():
12
-
13
12
  document_store = InMemoryDocumentStore()
14
13
  documents = [
15
14
  Document(content="The Eiffel Tower is located in Paris, France."),
@@ -30,7 +29,6 @@ def index():
30
29
 
31
30
 
32
31
  def hybrid_pipeline(document_store):
33
-
34
32
  text_embedder = SentenceTransformersTextEmbedder()
35
33
  embedding_retriever = InMemoryEmbeddingRetriever(document_store)
36
34
  bm25_retriever = InMemoryBM25Retriever(document_store)
@@ -2,7 +2,7 @@ loaders:
2
2
  - type: haystack_pydoc_tools.loaders.CustomPythonLoader
3
3
  search_path: [../src]
4
4
  modules: [
5
- "haystack_integrations.components.connectors.weave_connector",
5
+ "haystack_integrations.components.connectors.weave.weave_connector",
6
6
  "haystack_integrations.tracing.weave.tracer",
7
7
  ]
8
8
  ignore_when_discovered: ["__init__"]
@@ -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"
@@ -43,30 +43,35 @@ git_describe_command = 'git describe --tags --match="integrations/weights_and_bi
43
43
 
44
44
  [tool.hatch.envs.default]
45
45
  installer = "uv"
46
- dependencies = ["coverage[toml]>=6.5", "pytest", "pytest-rerunfailures", "haystack-pydoc-tools"]
46
+ dependencies = ["haystack-pydoc-tools", "ruff"]
47
47
  [tool.hatch.envs.default.scripts]
48
- test = "pytest {args:tests}"
49
- test-cov = "coverage run -m pytest {args:tests}"
50
- test-cov-retry = "test-cov --reruns 3 --reruns-delay 30 -x"
51
- cov-report = ["- coverage combine", "coverage report"]
52
- cov = ["test-cov", "cov-report"]
53
- cov-retry = ["test-cov-retry", "cov-report"]
54
48
  docs = ["pydoc-markdown pydoc/config.yml"]
49
+ fmt = "ruff check --fix {args} && ruff format {args}"
50
+ fmt-check = "ruff check {args} && ruff format --check {args}"
51
+
52
+ [tool.hatch.envs.test]
53
+ dependencies = [
54
+ "pytest",
55
+ "pytest-asyncio",
56
+ "pytest-cov",
57
+ "pytest-rerunfailures",
58
+ "mypy",
59
+ "pip"
60
+ ]
55
61
 
56
- [tool.hatch.envs.lint]
57
- installer = "uv"
58
- detached = true
59
- dependencies = ["pip", "black>=23.1.0", "mypy>=1.0.0", "ruff>=0.0.243"]
60
- [tool.hatch.envs.lint.scripts]
61
- typing = "mypy --install-types --non-interactive --explicit-package-bases {args:src/ tests}"
62
- style = ["ruff check {args:}", "black --check --diff {args:.}"]
63
- fmt = ["black {args:.}", "ruff check --fix {args:}", "style"]
64
- all = ["style", "typing"]
65
-
66
- [tool.black]
67
- target-version = ["py39"]
68
- line-length = 120
69
- skip-string-normalization = true
62
+ [tool.hatch.envs.test.scripts]
63
+ unit = 'pytest -m "not integration" {args:tests}'
64
+ integration = 'pytest -m "integration" {args:tests}'
65
+ all = 'pytest {args:tests}'
66
+ cov-retry = 'all --cov=haystack_integrations --reruns 3 --reruns-delay 30 -x'
67
+ types = """mypy -p haystack_integrations.components.connectors.weave \
68
+ -p haystack_integrations.tracing.weave {args}"""
69
+
70
+ [tool.mypy]
71
+ install_types = true
72
+ non_interactive = true
73
+ check_untyped_defs = true
74
+ disallow_incomplete_defs = true
70
75
 
71
76
  [tool.ruff]
72
77
  target-version = "py39"
@@ -146,14 +151,3 @@ exclude_lines = ["no cov", "if __name__ == .__main__.:", "if TYPE_CHECKING:"]
146
151
  markers = [
147
152
  "integration: integration tests"
148
153
  ]
149
-
150
- [[tool.mypy.overrides]]
151
- module = [
152
- "grpc",
153
- "haystack.*",
154
- "haystack_integrations.*",
155
- "numpy",
156
- "pytest.*",
157
- "weave.*"
158
- ]
159
- ignore_missing_imports = true
@@ -1,9 +1,9 @@
1
1
  from typing import Any, Optional
2
2
 
3
3
  from haystack import component, default_from_dict, default_to_dict, logging, tracing
4
- from weave.trace.autopatch import AutopatchSettings
5
4
 
6
5
  from haystack_integrations.tracing.weave import WeaveTracer
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)
@@ -53,7 +53,7 @@ class WeaveSpan(Span):
53
53
  return {}
54
54
  return {"weave.call_id": self._call.id, "weave.run_id": getattr(self._call, "run_id", "")}
55
55
 
56
- def set_call(self, call: "weave.Call") -> None:
56
+ def set_call(self, call: Call) -> None:
57
57
  self._call = call
58
58
 
59
59
  def get_attributes(self) -> dict[str, Any]:
@@ -151,7 +151,12 @@ class WeaveTracer(Tracer):
151
151
 
152
152
  @contextlib.contextmanager
153
153
  def trace(
154
- self, operation_name: str, tags: Optional[dict[str, Any]] = None, parent_span: Optional[WeaveSpan] = None
154
+ self,
155
+ operation_name: str,
156
+ tags: Optional[dict[str, Any]] = None,
157
+ # the current implementation violates the Liskov Substitution Principle by using WeaveSpan instead of Span
158
+ # unfortunately, it seems hard to fix without rewriting the Tracer
159
+ parent_span: Optional[WeaveSpan] = None, # type: ignore[override]
155
160
  ) -> Iterator[WeaveSpan]:
156
161
  """
157
162
  A context manager that creates and manages spans for tracking operations in Weights & Biases Weave.
@@ -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
 
@@ -27,7 +25,6 @@ class MockWeaveClient:
27
25
 
28
26
 
29
27
  class TestWeaveTracer:
30
-
31
28
  def test_initialization(self):
32
29
  with patch("weave.init") as mock_init:
33
30
  mock_init.return_value = MockWeaveClient()
@@ -41,13 +38,11 @@ class TestWeaveTracer:
41
38
  mock_init.return_value = MockWeaveClient()
42
39
  tracer = WeaveTracer(
43
40
  project_name="test_project",
44
- autopatch_settings=AutopatchSettings(disable_autopatch=True),
41
+ settings={"implicitly_patch_integrations": False},
45
42
  )
46
43
  assert tracer._client is not None
47
44
  assert tracer._current_span is None
48
- mock_init.assert_called_once_with(
49
- "test_project", autopatch_settings=AutopatchSettings(disable_autopatch=True)
50
- )
45
+ mock_init.assert_called_once_with("test_project", settings={"implicitly_patch_integrations": False})
51
46
 
52
47
  def test_create_new_span(self):
53
48
  with patch("weave.init") as mock_init:
@@ -8,9 +8,9 @@ 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
- from haystack_integrations.components.connectors import WeaveConnector
13
+ from haystack_integrations.components.connectors.weave import WeaveConnector
14
14
  from haystack_integrations.tracing.weave import WeaveTracer
15
15
 
16
16
 
@@ -53,7 +53,7 @@ class TestWeaveConnector:
53
53
 
54
54
  assert serialized["init_parameters"]["pipeline_name"] == "test_pipeline"
55
55
  assert "type" in serialized
56
- assert serialized["type"] == "haystack_integrations.components.connectors.weave_connector.WeaveConnector"
56
+ assert serialized["type"] == "haystack_integrations.components.connectors.weave.weave_connector.WeaveConnector"
57
57
 
58
58
  deserialized = WeaveConnector.from_dict(serialized)
59
59
 
@@ -66,21 +66,45 @@ 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
- assert serialized["type"] == "haystack_integrations.components.connectors.weave_connector.WeaveConnector"
78
+ assert serialized["type"] == "haystack_integrations.components.connectors.weave.weave_connector.WeaveConnector"
77
79
 
78
80
  deserialized = WeaveConnector.from_dict(serialized)
79
81
 
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,20 +0,0 @@
1
- # Changelog
2
-
3
- ## [integrations/weights_bias-v0.0.2] - 2025-03-13
4
-
5
- ### 🚀 Features
6
-
7
- - Add weave_init_kwargs to WeaveConnector (#1537)
8
-
9
- ### 📚 Documentation
10
-
11
- - Update changelog for integrations/weights_bias (#1426)
12
- - Fixing WandB README (#1427)
13
-
14
- ## [integrations/weights_bias-v0.0.1] - 2025-02-21
15
-
16
- ### 🚀 Features
17
-
18
- - Integration with Weave the tracer from Weight and Bias (#1412)
19
-
20
- <!-- generated by git-cliff -->
@@ -1,99 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: weave-haystack
3
- Version: 0.0.1
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.