vellum-ai 1.3.9__py3-none-any.whl → 1.3.10__py3-none-any.whl

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.
@@ -27,10 +27,10 @@ class BaseClientWrapper:
27
27
 
28
28
  def get_headers(self) -> typing.Dict[str, str]:
29
29
  headers: typing.Dict[str, str] = {
30
- "User-Agent": "vellum-ai/1.3.9",
30
+ "User-Agent": "vellum-ai/1.3.10",
31
31
  "X-Fern-Language": "Python",
32
32
  "X-Fern-SDK-Name": "vellum-ai",
33
- "X-Fern-SDK-Version": "1.3.9",
33
+ "X-Fern-SDK-Version": "1.3.10",
34
34
  **(self.get_custom_headers() or {}),
35
35
  }
36
36
  if self._api_version is not None:
@@ -1,7 +1,7 @@
1
1
  from dataclasses import dataclass
2
2
  from enum import Enum
3
3
  import logging
4
- from typing import Any, Dict
4
+ from typing import Any, Dict, Optional
5
5
 
6
6
  from vellum.client.types.vellum_error import VellumError
7
7
  from vellum.client.types.vellum_error_code_enum import VellumErrorCodeEnum
@@ -30,6 +30,7 @@ class WorkflowErrorCode(Enum):
30
30
  class WorkflowError:
31
31
  message: str
32
32
  code: WorkflowErrorCode
33
+ raw_data: Optional[Dict[str, Any]] = None
33
34
 
34
35
  def __contains__(self, item: Any) -> bool:
35
36
  return item in self.message
@@ -55,6 +56,7 @@ def vellum_error_to_workflow_error(error: VellumError) -> WorkflowError:
55
56
  return WorkflowError(
56
57
  message=error.message,
57
58
  code=workflow_error_code,
59
+ raw_data=error.raw_data or {},
58
60
  )
59
61
 
60
62
 
@@ -260,6 +260,7 @@ mock_node_uuid = str(uuid4_from_hash(MockNode.__qualname__))
260
260
  "error": {
261
261
  "message": "Workflow failed",
262
262
  "code": "USER_DEFINED_ERROR",
263
+ "raw_data": None,
263
264
  },
264
265
  "stacktrace": None,
265
266
  },
@@ -1,10 +1,18 @@
1
+ from typing import Any, Dict, Optional
2
+
1
3
  from vellum.workflows.errors import WorkflowError, WorkflowErrorCode
2
4
 
3
5
 
4
6
  class NodeException(Exception):
5
- def __init__(self, message: str, code: WorkflowErrorCode = WorkflowErrorCode.INTERNAL_ERROR):
7
+ def __init__(
8
+ self,
9
+ message: str,
10
+ code: WorkflowErrorCode = WorkflowErrorCode.INTERNAL_ERROR,
11
+ raw_data: Optional[Dict[str, Any]] = None,
12
+ ):
6
13
  self.message = message
7
14
  self.code = code
15
+ self.raw_data = raw_data
8
16
  super().__init__(message)
9
17
 
10
18
  @property
@@ -12,11 +20,12 @@ class NodeException(Exception):
12
20
  return WorkflowError(
13
21
  message=self.message,
14
22
  code=self.code,
23
+ raw_data=self.raw_data,
15
24
  )
16
25
 
17
26
  @staticmethod
18
27
  def of(workflow_error: WorkflowError) -> "NodeException":
19
- return NodeException(message=workflow_error.message, code=workflow_error.code)
28
+ return NodeException(message=workflow_error.message, code=workflow_error.code, raw_data=workflow_error.raw_data)
20
29
 
21
30
 
22
31
  class WorkflowInitializationException(Exception):
@@ -114,6 +114,7 @@ def test_inline_text_prompt_node__catch_provider_error(vellum_adhoc_prompt_clien
114
114
  expected_error = VellumError(
115
115
  message="OpenAI failed",
116
116
  code="PROVIDER_ERROR",
117
+ raw_data={"type": "ERROR", "error": {"message": "Something went wrong"}},
117
118
  )
118
119
 
119
120
  def generate_prompt_events(*args: Any, **kwargs: Any) -> Iterator[ExecutePromptEvent]:
@@ -144,6 +145,7 @@ def test_inline_text_prompt_node__catch_provider_error(vellum_adhoc_prompt_clien
144
145
  value=SdkVellumError(
145
146
  message="OpenAI failed",
146
147
  code=WorkflowErrorCode.PROVIDER_ERROR,
148
+ raw_data={"type": "ERROR", "error": {"message": "Something went wrong"}},
147
149
  ),
148
150
  )
149
151
  in outputs
@@ -4,8 +4,9 @@ from types import FrameType
4
4
  from uuid import UUID
5
5
  from typing import Annotated, Any, Dict, Literal, Optional, Union
6
6
 
7
- from pydantic import BeforeValidator
7
+ from pydantic import BeforeValidator, SerializationInfo, model_serializer
8
8
 
9
+ from vellum import Vellum
9
10
  from vellum.client.core.pydantic_utilities import UniversalBaseModel
10
11
  from vellum.client.types.code_resource_definition import CodeResourceDefinition as ClientCodeResourceDefinition
11
12
  from vellum.workflows.constants import AuthorizationType
@@ -78,6 +79,10 @@ class DeploymentDefinition(UniversalBaseModel):
78
79
  deployment: str
79
80
  release_tag: str = "LATEST"
80
81
 
82
+ # hydrated fields
83
+ name: Optional[str] = None
84
+ description: Optional[str] = None
85
+
81
86
  def _is_uuid(self) -> bool:
82
87
  """Check if the deployment field is a valid UUID."""
83
88
  try:
@@ -100,6 +105,32 @@ class DeploymentDefinition(UniversalBaseModel):
100
105
  return self.deployment
101
106
  return None
102
107
 
108
+ @model_serializer(mode="wrap")
109
+ def _serialize(self, handler, info: SerializationInfo):
110
+ """Allow Pydantic to serialize directly given a `client` in context.
111
+
112
+ Falls back to the default serialization when client is not provided.
113
+ """
114
+ context = info.context if info and hasattr(info, "context") else {}
115
+ client: Optional[Vellum] = context.get("client") if context else None
116
+
117
+ if client:
118
+ release = client.workflow_deployments.retrieve_workflow_deployment_release(
119
+ self.deployment, self.release_tag
120
+ )
121
+ self.name = release.deployment.name or self.deployment
122
+ self.description = release.description or f"Workflow Deployment for {self.deployment}"
123
+
124
+ return {
125
+ "type": "WORKFLOW_DEPLOYMENT",
126
+ "name": self.name,
127
+ "description": self.description,
128
+ "deployment": self.deployment,
129
+ "release_tag": self.release_tag,
130
+ }
131
+
132
+ return handler(self)
133
+
103
134
 
104
135
  class ComposioToolDefinition(UniversalBaseModel):
105
136
  """Represents a specific Composio action that can be used in Tool Calling Node"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vellum-ai
3
- Version: 1.3.9
3
+ Version: 1.3.10
4
4
  Summary:
5
5
  License: MIT
6
6
  Requires-Python: >=3.9,<4.0
@@ -113,7 +113,7 @@ vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
113
113
  vellum_ee/workflows/display/utils/auto_layout.py,sha256=f4GiLn_LazweupfqTpubcdtdfE_vrOcmZudSsnYIY9E,3906
114
114
  vellum_ee/workflows/display/utils/events.py,sha256=DE33uoKW78BZtITJ6L22dMZN3KR1BuZBVC98C_gIyzU,1943
115
115
  vellum_ee/workflows/display/utils/exceptions.py,sha256=LSwwxCYNxFkf5XMUcFkaZKpQ13OSrI7y_bpEUwbKVk0,169
116
- vellum_ee/workflows/display/utils/expressions.py,sha256=UoZKiZy2Rhx5Hp2e2J2ipSdQCIQfkAOL_tIxHqLCrAM,20299
116
+ vellum_ee/workflows/display/utils/expressions.py,sha256=K_9CVZJkwkYtLEPwaOA3Sb0wMmi0KbmJUGNkpXsRSbE,19506
117
117
  vellum_ee/workflows/display/utils/registry.py,sha256=1qXiBTdsnro6FeCX0FGBEK7CIf6wa--Jt50iZ_nEp_M,3460
118
118
  vellum_ee/workflows/display/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
119
  vellum_ee/workflows/display/utils/tests/test_auto_layout.py,sha256=vfXI769418s9vda5Gb5NFBH747WMOwSgHRXeLCTLVm8,2356
@@ -155,7 +155,7 @@ vellum/client/README.md,sha256=flqu57ubZNTfpq60CdLtJC9gp4WEkyjb_n_eZ4OYf9w,6497
155
155
  vellum/client/__init__.py,sha256=T5Ht_w-Mk_9nzGqdadhQB8V20M0vYj7am06ut0A3P1o,73401
156
156
  vellum/client/core/__init__.py,sha256=lTcqUPXcx4112yLDd70RAPeqq6tu3eFMe1pKOqkW9JQ,1562
157
157
  vellum/client/core/api_error.py,sha256=44vPoTyWN59gonCIZMdzw7M1uspygiLnr3GNFOoVL2Q,614
158
- vellum/client/core/client_wrapper.py,sha256=yiW8T6LXnqj5RVczNfHBZ2L3TMA_MWurdCwV6hFZPw8,2840
158
+ vellum/client/core/client_wrapper.py,sha256=r-GaDOv2AZPXjGOGdRTzl4QBhv3rREaY-YqQLoi27ds,2842
159
159
  vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
160
160
  vellum/client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
161
161
  vellum/client/core/force_multipart.py,sha256=awxh5MtcRYe74ehY8U76jzv6fYM_w_D3Rur7KQQzSDk,429
@@ -1728,7 +1728,7 @@ vellum/workflows/emitters/vellum_emitter.py,sha256=ECBIRA48WS5rIJd1iWUfye7B5Up7u
1728
1728
  vellum/workflows/environment/__init__.py,sha256=TJz0m9dwIs6YOwCTeuN0HHsU-ecyjc1OJXx4AFy83EQ,121
1729
1729
  vellum/workflows/environment/environment.py,sha256=Ck3RPKXJvtMGx_toqYQQQF-ZwXm5ijVwJpEPTeIJ4_Q,471
1730
1730
  vellum/workflows/errors/__init__.py,sha256=tWGPu5xyAU8gRb8_bl0fL7OfU3wxQ9UH6qVwy4X4P_Q,113
1731
- vellum/workflows/errors/types.py,sha256=nUWuniEfrhdtb-_2GzoDGlYnSJ_yuNUGjVkaKLNr-rM,4049
1731
+ vellum/workflows/errors/types.py,sha256=n89vGaCdRYKxv-JngGm9nkR5yXeWnR48CJ9L1iABLaQ,4144
1732
1732
  vellum/workflows/events/__init__.py,sha256=V4mh766fyA70WvHelm9kfVZGrUgEKcJ9tJt8EepfQYU,832
1733
1733
  vellum/workflows/events/context.py,sha256=vCfMIPmz4j9Om36rRWa35A_JU_VccWWS52_mZkkqxak,3345
1734
1734
  vellum/workflows/events/node.py,sha256=yHVd-rX2E3qc2XLnZr0fW6uq4ZCMm34mnY2tzYceyOg,5884
@@ -1736,10 +1736,10 @@ vellum/workflows/events/relational_threads.py,sha256=zmLrBCBYpdpQV0snKH3HleST-_h
1736
1736
  vellum/workflows/events/stream.py,sha256=xhXJTZirFi0xad5neAQNogrIQ4h47fpnKbVC3vCM5Js,889
1737
1737
  vellum/workflows/events/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1738
1738
  vellum/workflows/events/tests/test_basic_workflow.py,sha256=Pj6orHsXz37jWC5FARi0Sx2Gjf99Owri2Cvr6Chb79k,1765
1739
- vellum/workflows/events/tests/test_event.py,sha256=V26TNmbo2aL4sDvcY3nPxCWgcoS4ejF-7VuesMeD04U,18451
1739
+ vellum/workflows/events/tests/test_event.py,sha256=RGVGz0DXMTvwCgdjua8rpPpCuCLDM5-8ET_3q4yH8_8,18493
1740
1740
  vellum/workflows/events/types.py,sha256=mVrqAH9Hs9SpXm08Hcxdyap_ImQPwGsxRr56rSNMP34,5043
1741
1741
  vellum/workflows/events/workflow.py,sha256=kLSWFXiDZH0TELWoDjQ_kHVomFnw8MVVUPDGIzgyosw,8997
1742
- vellum/workflows/exceptions.py,sha256=NiBiR3ggfmPxBVqD-H1SqmjI-7mIn0EStSN1BqApvCM,1213
1742
+ vellum/workflows/exceptions.py,sha256=Y7EULLN0kss8jxTLFNWEiOLMnyr1uKG83wiMvmtQ9Ak,1438
1743
1743
  vellum/workflows/executable.py,sha256=um-gLJMVYfGJwGJfZIPlCRHhHIYm6pn8PUEfeqrNx5k,218
1744
1744
  vellum/workflows/expressions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1745
1745
  vellum/workflows/expressions/accessor.py,sha256=3lu1-_-dBfZdJvtX-q66jbmRAZtqIfdsh_3_JNuzg1E,4462
@@ -1889,7 +1889,7 @@ vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py,sha256=ZB
1889
1889
  vellum/workflows/nodes/displayable/subworkflow_deployment_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1890
1890
  vellum/workflows/nodes/displayable/subworkflow_deployment_node/tests/test_node.py,sha256=c98nMPogZ6iN_pTvVUMTB3J72Hj--H-XVgvvRXhdSQE,19085
1891
1891
  vellum/workflows/nodes/displayable/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1892
- vellum/workflows/nodes/displayable/tests/test_inline_text_prompt_node.py,sha256=MHuIolSsrY9ziwoXWsye3XOODncL9DLZOkNYzQMLhRw,4696
1892
+ vellum/workflows/nodes/displayable/tests/test_inline_text_prompt_node.py,sha256=E6PQ9OKcDlsJbWoxVKWgiAPgz9p59g1ONMgNggfOeiI,4868
1893
1893
  vellum/workflows/nodes/displayable/tests/test_search_node_error_handling.py,sha256=8aw8hDFL0ZXThvAa7yxrJN026EYGD4-Q1si3Phu9-_0,6307
1894
1894
  vellum/workflows/nodes/displayable/tests/test_search_node_wth_text_output.py,sha256=VepO5z1277c1y5N6LLIC31nnWD1aak2m5oPFplfJHHs,6935
1895
1895
  vellum/workflows/nodes/displayable/tests/test_text_prompt_deployment_node.py,sha256=Bjv-wZyFgNaVZb9KEMMZd9lFoLzbPEPjEMpANizMZw4,2413
@@ -1955,7 +1955,7 @@ vellum/workflows/tests/test_undefined.py,sha256=zMCVliCXVNLrlC6hEGyOWDnQADJ2g83y
1955
1955
  vellum/workflows/types/__init__.py,sha256=KxUTMBGzuRCfiMqzzsykOeVvrrkaZmTTo1a7SLu8gRM,68
1956
1956
  vellum/workflows/types/code_execution_node_wrappers.py,sha256=fewX9bqF_4TZuK-gZYIn12s31-k03vHMGRpvFAPm11Y,3206
1957
1957
  vellum/workflows/types/core.py,sha256=TggDVs2lVya33xvu374EDhMC1b7RRlAAs0zWLaF46BA,1385
1958
- vellum/workflows/types/definition.py,sha256=2vq3uGT-m994zRcla0yTUsMiPLKSDuzEZs7H6U9QbiE,4993
1958
+ vellum/workflows/types/definition.py,sha256=esmlFZFA6wnzNtSYUWpIMFmhhLs_kCm_h_THroL3Zd8,6196
1959
1959
  vellum/workflows/types/generics.py,sha256=8jptbEx1fnJV0Lhj0MpCJOT6yNiEWeTOYOwrEAb5CRU,1576
1960
1960
  vellum/workflows/types/stack.py,sha256=h7NE0vXR7l9DevFBIzIAk1Zh59K-kECQtDTKOUunwMY,1314
1961
1961
  vellum/workflows/types/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1982,8 +1982,8 @@ vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnad
1982
1982
  vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1983
1983
  vellum/workflows/workflows/tests/test_base_workflow.py,sha256=ptMntHzVyy8ZuzNgeTuk7hREgKQ5UBdgq8VJFSGaW4Y,20832
1984
1984
  vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
1985
- vellum_ai-1.3.9.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1986
- vellum_ai-1.3.9.dist-info/METADATA,sha256=uOjA8lJ-F41325oLMigUN2TZ7A4Kuyi9d-fsQ6rRRB4,5547
1987
- vellum_ai-1.3.9.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1988
- vellum_ai-1.3.9.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1989
- vellum_ai-1.3.9.dist-info/RECORD,,
1985
+ vellum_ai-1.3.10.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1986
+ vellum_ai-1.3.10.dist-info/METADATA,sha256=rMxCNVxzMICH4KL7PndzBmRPdyejUvPmvuJnCS7goJc,5548
1987
+ vellum_ai-1.3.10.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1988
+ vellum_ai-1.3.10.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1989
+ vellum_ai-1.3.10.dist-info/RECORD,,
@@ -51,7 +51,6 @@ from vellum.workflows.references.state_value import StateValueReference
51
51
  from vellum.workflows.references.vellum_secret import VellumSecretReference
52
52
  from vellum.workflows.references.workflow_input import WorkflowInputReference
53
53
  from vellum.workflows.types.core import JsonArray, JsonObject
54
- from vellum.workflows.types.definition import DeploymentDefinition
55
54
  from vellum.workflows.types.generics import is_workflow_class
56
55
  from vellum.workflows.utils.functions import compile_function_definition
57
56
  from vellum.workflows.utils.uuids import uuid4_from_hash
@@ -425,29 +424,9 @@ def serialize_value(executable_id: UUID, display_context: "WorkflowDisplayContex
425
424
  },
426
425
  }
427
426
 
428
- if isinstance(value, DeploymentDefinition):
429
- workflow_deployment_release = display_context.client.workflow_deployments.retrieve_workflow_deployment_release(
430
- value.deployment, value.release_tag
431
- )
432
- name = workflow_deployment_release.deployment.name or value.deployment
433
- description = workflow_deployment_release.description or f"Workflow Deployment for {name}"
434
-
435
- return {
436
- "type": "CONSTANT_VALUE",
437
- "value": {
438
- "type": "JSON",
439
- "value": {
440
- "type": "WORKFLOW_DEPLOYMENT",
441
- "name": name,
442
- "description": description,
443
- "deployment": value.deployment,
444
- "release_tag": value.release_tag,
445
- },
446
- },
447
- }
448
-
449
427
  if isinstance(value, BaseModel):
450
- dict_value = value.model_dump()
428
+ context = {"executable_id": executable_id, "client": display_context.client}
429
+ dict_value = value.model_dump(context=context)
451
430
  return serialize_value(executable_id, display_context, dict_value)
452
431
 
453
432
  if callable(value):