diff --git a/integrations/weave/src/haystack_integrations/components/connectors/weave/weave_connector.py b/integrations/weave/src/haystack_integrations/components/connectors/weave/weave_connector.py index d3bddb5c53..f5565b2b5e 100644 --- a/integrations/weave/src/haystack_integrations/components/connectors/weave/weave_connector.py +++ b/integrations/weave/src/haystack_integrations/components/connectors/weave/weave_connector.py @@ -2,9 +2,11 @@ # # SPDX-License-Identifier: Apache-2.0 +from dataclasses import asdict, is_dataclass from typing import Any from haystack import component, default_from_dict, default_to_dict, logging, tracing +from pydantic import BaseModel from haystack_integrations.tracing.weave import WeaveTracer from weave.trace.settings import UserSettings @@ -110,7 +112,10 @@ def to_dict(self) -> dict[str, Any]: weave_init_kwargs = self.weave_init_kwargs.copy() settings = weave_init_kwargs.get("settings", None) if isinstance(settings, UserSettings): - weave_init_kwargs["settings"] = settings.model_dump(mode="json", exclude_defaults=True) + if isinstance(settings, BaseModel): + weave_init_kwargs["settings"] = settings.model_dump(mode="json", exclude_defaults=True) + elif is_dataclass(settings): + weave_init_kwargs["settings"] = asdict(settings) return default_to_dict(self, pipeline_name=self.pipeline_name, weave_init_kwargs=weave_init_kwargs) diff --git a/integrations/weave/tests/test_weave_connector.py b/integrations/weave/tests/test_weave_connector.py index 016e917f07..9cc81b47e5 100644 --- a/integrations/weave/tests/test_weave_connector.py +++ b/integrations/weave/tests/test_weave_connector.py @@ -97,9 +97,7 @@ def test_serialization_of_weave_init_kwargs_with_user_settings(self) -> None: serialized: dict[str, Any] = connector.to_dict() assert serialized["init_parameters"]["pipeline_name"] == "test_pipeline" - assert serialized["init_parameters"]["weave_init_kwargs"] == { - "settings": {"implicitly_patch_integrations": False} - } + assert serialized["init_parameters"]["weave_init_kwargs"]["settings"]["implicitly_patch_integrations"] is False assert "type" in serialized assert serialized["type"] == "haystack_integrations.components.connectors.weave.weave_connector.WeaveConnector" @@ -108,7 +106,7 @@ def test_serialization_of_weave_init_kwargs_with_user_settings(self) -> None: assert isinstance(deserialized, WeaveConnector) assert deserialized.pipeline_name == "test_pipeline" assert deserialized.tracer is None # tracer is only initialized with warm_up - assert deserialized.weave_init_kwargs == {"settings": {"implicitly_patch_integrations": False}} + assert deserialized.weave_init_kwargs["settings"]["implicitly_patch_integrations"] is False def test_pipeline_tracing(self, mock_weave_client: Mock, sample_pipeline: Pipeline) -> None: """Test that pipeline operations are correctly traced"""