vellum-ai 1.8.3__py3-none-any.whl → 1.8.5__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.
vellum/__init__.py CHANGED
@@ -612,6 +612,7 @@ from .client.types import (
612
612
  VideoPromptBlock,
613
613
  VideoVellumValue,
614
614
  VideoVellumValueRequest,
615
+ WorkflowDeploymentDisplayData,
615
616
  WorkflowDeploymentEventExecutionsResponse,
616
617
  WorkflowDeploymentHistoryItem,
617
618
  WorkflowDeploymentParentContext,
@@ -619,6 +620,7 @@ from .client.types import (
619
620
  WorkflowDeploymentRelease,
620
621
  WorkflowDeploymentReleaseWorkflowDeployment,
621
622
  WorkflowDeploymentReleaseWorkflowVersion,
623
+ WorkflowDisplayIcon,
622
624
  WorkflowError,
623
625
  WorkflowEvent,
624
626
  WorkflowEventError,
@@ -1368,6 +1370,7 @@ __all__ = [
1368
1370
  "VideoPromptBlock",
1369
1371
  "VideoVellumValue",
1370
1372
  "VideoVellumValueRequest",
1373
+ "WorkflowDeploymentDisplayData",
1371
1374
  "WorkflowDeploymentEventExecutionsResponse",
1372
1375
  "WorkflowDeploymentHistoryItem",
1373
1376
  "WorkflowDeploymentParentContext",
@@ -1376,6 +1379,7 @@ __all__ = [
1376
1379
  "WorkflowDeploymentReleaseWorkflowDeployment",
1377
1380
  "WorkflowDeploymentReleaseWorkflowVersion",
1378
1381
  "WorkflowDeploymentsListRequestStatus",
1382
+ "WorkflowDisplayIcon",
1379
1383
  "WorkflowError",
1380
1384
  "WorkflowEvent",
1381
1385
  "WorkflowEventError",
@@ -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.8.3",
30
+ "User-Agent": "vellum-ai/1.8.5",
31
31
  "X-Fern-Language": "Python",
32
32
  "X-Fern-SDK-Name": "vellum-ai",
33
- "X-Fern-SDK-Version": "1.8.3",
33
+ "X-Fern-SDK-Version": "1.8.5",
34
34
  **(self.get_custom_headers() or {}),
35
35
  }
36
36
  if self._api_version is not None:
@@ -636,6 +636,7 @@ from .video_input_request import VideoInputRequest
636
636
  from .video_prompt_block import VideoPromptBlock
637
637
  from .video_vellum_value import VideoVellumValue
638
638
  from .video_vellum_value_request import VideoVellumValueRequest
639
+ from .workflow_deployment_display_data import WorkflowDeploymentDisplayData
639
640
  from .workflow_deployment_event_executions_response import WorkflowDeploymentEventExecutionsResponse
640
641
  from .workflow_deployment_history_item import WorkflowDeploymentHistoryItem
641
642
  from .workflow_deployment_parent_context import WorkflowDeploymentParentContext
@@ -643,6 +644,7 @@ from .workflow_deployment_read import WorkflowDeploymentRead
643
644
  from .workflow_deployment_release import WorkflowDeploymentRelease
644
645
  from .workflow_deployment_release_workflow_deployment import WorkflowDeploymentReleaseWorkflowDeployment
645
646
  from .workflow_deployment_release_workflow_version import WorkflowDeploymentReleaseWorkflowVersion
647
+ from .workflow_display_icon import WorkflowDisplayIcon
646
648
  from .workflow_error import WorkflowError
647
649
  from .workflow_event import WorkflowEvent
648
650
  from .workflow_event_error import WorkflowEventError
@@ -1332,6 +1334,7 @@ __all__ = [
1332
1334
  "VideoPromptBlock",
1333
1335
  "VideoVellumValue",
1334
1336
  "VideoVellumValueRequest",
1337
+ "WorkflowDeploymentDisplayData",
1335
1338
  "WorkflowDeploymentEventExecutionsResponse",
1336
1339
  "WorkflowDeploymentHistoryItem",
1337
1340
  "WorkflowDeploymentParentContext",
@@ -1339,6 +1342,7 @@ __all__ = [
1339
1342
  "WorkflowDeploymentRelease",
1340
1343
  "WorkflowDeploymentReleaseWorkflowDeployment",
1341
1344
  "WorkflowDeploymentReleaseWorkflowVersion",
1345
+ "WorkflowDisplayIcon",
1342
1346
  "WorkflowError",
1343
1347
  "WorkflowEvent",
1344
1348
  "WorkflowEventError",
@@ -0,0 +1,27 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
+ from .workflow_display_icon import WorkflowDisplayIcon
8
+
9
+
10
+ class WorkflowDeploymentDisplayData(UniversalBaseModel):
11
+ """
12
+ Workflow Deployment display data
13
+ """
14
+
15
+ icon: typing.Optional[WorkflowDisplayIcon] = pydantic.Field(default=None)
16
+ """
17
+ The icon associated with this Workflow Deployment.
18
+ """
19
+
20
+ if IS_PYDANTIC_V2:
21
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
22
+ else:
23
+
24
+ class Config:
25
+ frozen = True
26
+ smart_union = True
27
+ extra = pydantic.Extra.allow
@@ -10,6 +10,7 @@ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update
10
10
  from .entity_status import EntityStatus
11
11
  from .environment_enum import EnvironmentEnum
12
12
  from .vellum_variable import VellumVariable
13
+ from .workflow_deployment_display_data import WorkflowDeploymentDisplayData
13
14
 
14
15
 
15
16
  class WorkflowDeploymentRead(UniversalBaseModel):
@@ -63,6 +64,11 @@ class WorkflowDeploymentRead(UniversalBaseModel):
63
64
  A human-readable description of the workflow deployment
64
65
  """
65
66
 
67
+ display_data: typing.Optional[WorkflowDeploymentDisplayData] = pydantic.Field(default=None)
68
+ """
69
+ Information used to display this Workflow Deployment.
70
+ """
71
+
66
72
  if IS_PYDANTIC_V2:
67
73
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
68
74
  else:
@@ -0,0 +1,24 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
+
8
+
9
+ class WorkflowDisplayIcon(UniversalBaseModel):
10
+ """
11
+ Icon to be used alongside a Workflow
12
+ """
13
+
14
+ src: typing.Optional[str] = None
15
+ color: typing.Optional[str] = None
16
+
17
+ if IS_PYDANTIC_V2:
18
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
19
+ else:
20
+
21
+ class Config:
22
+ frozen = True
23
+ smart_union = True
24
+ extra = pydantic.Extra.allow
@@ -0,0 +1,3 @@
1
+ # WARNING: This file will be removed in a future release. Please import from "vellum.client" instead.
2
+
3
+ from vellum.client.types.workflow_deployment_display_data import *
@@ -0,0 +1,3 @@
1
+ # WARNING: This file will be removed in a future release. Please import from "vellum.client" instead.
2
+
3
+ from vellum.client.types.workflow_display_icon import *
@@ -399,6 +399,17 @@ class BaseDescriptor(Generic[_T]):
399
399
 
400
400
  return AddExpression(lhs=self, rhs=other)
401
401
 
402
+ @overload
403
+ def __add__(self, other: "BaseDescriptor[_O]") -> "AddExpression[_T, _O]": ...
404
+
405
+ @overload
406
+ def __add__(self, other: _O) -> "AddExpression[_T, _O]": ...
407
+
408
+ def __add__(self, other: "Union[BaseDescriptor[_O], _O]") -> "AddExpression[_T, _O]":
409
+ from vellum.workflows.expressions.add import AddExpression
410
+
411
+ return AddExpression(lhs=self, rhs=other)
412
+
402
413
  @overload
403
414
  def minus(self, other: "BaseDescriptor[_O]") -> "MinusExpression[_T, _O]": ...
404
415
 
@@ -125,6 +125,10 @@ class DummyNode(BaseNode[FixtureState]):
125
125
  (ConstantValueReference(b'{"foo": "bar"}').parse_json(), {"foo": "bar"}),
126
126
  (ConstantValueReference(bytearray(b'{"foo": "bar"}')).parse_json(), {"foo": "bar"}),
127
127
  (ConstantValueReference(b'{"key": "\xf0\x9f\x8c\x9f"}').parse_json(), {"key": "🌟"}),
128
+ # Test + operator
129
+ (FixtureState.alpha + FixtureState.beta, 3),
130
+ (FixtureState.gamma + FixtureState.delta, "helloel"),
131
+ (FixtureState.theta + FixtureState.theta, ["baz", "baz"]),
128
132
  ],
129
133
  ids=[
130
134
  "or",
@@ -184,6 +188,9 @@ class DummyNode(BaseNode[FixtureState]):
184
188
  "parse_json_bytes",
185
189
  "parse_json_bytearray",
186
190
  "parse_json_bytes_with_utf8_chars",
191
+ "add_integers",
192
+ "add_strings",
193
+ "add_lists",
187
194
  ],
188
195
  )
189
196
  def test_resolve_value__happy_path(descriptor, expected_value):
@@ -85,6 +85,14 @@ class ExternalParentContext(BaseParentContext):
85
85
  type: Literal["EXTERNAL"] = "EXTERNAL"
86
86
 
87
87
 
88
+ class WorkflowDeploymentScheduledTriggerContext(BaseParentContext):
89
+ type: Literal["SCHEDULED"] = "SCHEDULED"
90
+
91
+
92
+ class WorkflowDeploymentIntegrationTriggerContext(BaseParentContext):
93
+ type: Literal["INTEGRATION"] = "INTEGRATION"
94
+
95
+
88
96
  class SpanLink(UniversalBaseModel):
89
97
  trace_id: str
90
98
  type: Literal["TRIGGERED_BY", "PREVIOUS_SPAN", "ROOT_SPAN"]
@@ -150,6 +158,8 @@ ParentContext = Annotated[
150
158
  WorkflowSandboxParentContext,
151
159
  APIRequestParentContext,
152
160
  ExternalParentContext,
161
+ WorkflowDeploymentScheduledTriggerContext,
162
+ WorkflowDeploymentIntegrationTriggerContext,
153
163
  UnknownParentContext,
154
164
  ],
155
165
  ParentContextDiscriminator(),
@@ -99,6 +99,7 @@ class MapNode(BaseAdornmentNode[StateType], Generic[StateType, MapNodeItemType])
99
99
  map_node_event = self._event_queue.get(block=False)
100
100
  index = map_node_event[0]
101
101
  subworkflow_event = map_node_event[1]
102
+
102
103
  self._context._emit_subworkflow_event(subworkflow_event)
103
104
 
104
105
  if not is_workflow_event(subworkflow_event):
@@ -3,6 +3,7 @@ from typing import Any, ClassVar, Dict, Generic, Iterator, List, Optional, Set,
3
3
  from vellum import ChatMessage, PromptBlock, PromptOutput
4
4
  from vellum.client.types.prompt_parameters import PromptParameters
5
5
  from vellum.client.types.prompt_settings import PromptSettings
6
+ from vellum.client.types.string_chat_message_content import StringChatMessageContent
6
7
  from vellum.prompts.constants import DEFAULT_PROMPT_PARAMETERS
7
8
  from vellum.workflows.context import execution_context, get_parent_context
8
9
  from vellum.workflows.errors.types import WorkflowErrorCode
@@ -107,7 +108,20 @@ class ToolCallingNode(BaseNode[StateType], Generic[StateType]):
107
108
  continue
108
109
 
109
110
  if event.name == "workflow.execution.streaming":
110
- if event.output.name == "chat_history":
111
+ if event.output.name == "results":
112
+ if event.output.is_streaming:
113
+ if isinstance(event.output.delta, str):
114
+ text_message = ChatMessage(
115
+ text=event.output.delta,
116
+ role="ASSISTANT",
117
+ content=StringChatMessageContent(type="STRING", value=event.output.delta),
118
+ source=None,
119
+ )
120
+ yield BaseOutput(
121
+ name="chat_history",
122
+ delta=[text_message],
123
+ )
124
+ elif event.output.name == "chat_history":
111
125
  if event.output.is_fulfilled:
112
126
  fulfilled_output_names.add(event.output.name)
113
127
  yield event.output
@@ -10,6 +10,7 @@ from vellum.workflows.events.types import ExternalParentContext
10
10
  from vellum.workflows.nodes.mocks import MockNodeExecution, MockNodeExecutionArg
11
11
  from vellum.workflows.outputs.base import BaseOutputs
12
12
  from vellum.workflows.references.constant import ConstantValueReference
13
+ from vellum.workflows.state.store import Store
13
14
  from vellum.workflows.utils.uuids import generate_workflow_deployment_prefix
14
15
  from vellum.workflows.utils.zip import extract_zip_files
15
16
  from vellum.workflows.vellum_client import create_vellum_client
@@ -40,12 +41,14 @@ class WorkflowContext:
40
41
  execution_context: Optional[ExecutionContext] = None,
41
42
  generated_files: Optional[dict[str, str]] = None,
42
43
  namespace: Optional[str] = None,
44
+ store_class: Optional[Type[Store]] = None,
43
45
  ):
44
46
  self._vellum_client = vellum_client
45
47
  self._event_queue: Optional[Queue["WorkflowEvent"]] = None
46
48
  self._node_output_mocks_map: Dict[Type[BaseOutputs], List[MockNodeExecution]] = {}
47
49
  self._execution_context = get_execution_context()
48
50
  self._namespace = namespace
51
+ self._store_class = store_class if store_class is not None else Store
49
52
 
50
53
  if execution_context is not None:
51
54
  self._execution_context.trace_id = execution_context.trace_id
@@ -85,6 +88,10 @@ class WorkflowContext:
85
88
  def node_output_mocks_map(self) -> Dict[Type[BaseOutputs], List[MockNodeExecution]]:
86
89
  return self._node_output_mocks_map
87
90
 
91
+ @property
92
+ def store_class(self) -> Type[Store]:
93
+ return self._store_class
94
+
88
95
  @property
89
96
  def monitoring_url(self) -> Optional[str]:
90
97
  """
@@ -247,13 +254,18 @@ class WorkflowContext:
247
254
  deployment.id, release_tag
248
255
  )
249
256
 
257
+ # Fetch workflow version
258
+ release = self.vellum_client.workflow_deployments.retrieve_workflow_deployment_release(
259
+ str(deployment_id), release_tag
260
+ )
261
+
250
262
  return WorkflowDeploymentMetadata(
251
263
  deployment_id=deployment_id,
252
264
  deployment_name=deployment.name,
253
265
  deployment_history_item_id=UUID(deployment.last_deployed_history_item_id),
254
266
  release_tag_id=UUID(release_tag_info.release.id),
255
267
  release_tag_name=release_tag_info.name,
256
- workflow_version_id=uuid4(),
268
+ workflow_version_id=UUID(release.workflow_version.id),
257
269
  )
258
270
  except Exception:
259
271
  # If we fail to fetch metadata, return None - the workflow can still run
@@ -263,5 +275,8 @@ class WorkflowContext:
263
275
  @classmethod
264
276
  def create_from(cls, context):
265
277
  return cls(
266
- vellum_client=context.vellum_client, generated_files=context.generated_files, namespace=context.namespace
278
+ vellum_client=context.vellum_client,
279
+ generated_files=context.generated_files,
280
+ namespace=context.namespace,
281
+ store_class=context.store_class,
267
282
  )
@@ -46,27 +46,28 @@ def uuid4_from_hash(input_str: str) -> UUID:
46
46
  def get_trigger_id(trigger_class: "type[BaseTrigger]") -> UUID:
47
47
  """
48
48
  Generate a deterministic trigger ID from a trigger class using
49
- the class's __qualname__ to ensure stability across different import paths.
49
+ the class's module name and __qualname__ to ensure stability and uniqueness.
50
50
 
51
51
  Args:
52
52
  trigger_class: The trigger class to generate an ID for
53
53
 
54
54
  Returns:
55
- A deterministic UUID based on the trigger class qualname
55
+ A deterministic UUID based on the trigger class module and qualname
56
56
  """
57
- return uuid4_from_hash(trigger_class.__qualname__)
57
+ return uuid4_from_hash(f"{trigger_class.__module__}.{trigger_class.__qualname__}")
58
58
 
59
59
 
60
60
  def get_trigger_attribute_id(trigger_class: "type[BaseTrigger]", attribute_name: str) -> UUID:
61
61
  """
62
62
  Generate a deterministic trigger attribute ID from a trigger class and attribute name
63
- using the class's __qualname__ and attribute name to ensure stability.
63
+ using the class's module name, __qualname__, and attribute name to ensure stability and uniqueness.
64
64
 
65
65
  Args:
66
66
  trigger_class: The trigger class containing the attribute
67
67
  attribute_name: The name of the attribute
68
68
 
69
69
  Returns:
70
- A deterministic UUID based on the trigger class qualname and attribute name
70
+ A deterministic UUID based on the trigger class module, qualname, and attribute name
71
71
  """
72
- return uuid4_from_hash(f"{trigger_class.__qualname__}|{attribute_name}")
72
+ trigger_id = get_trigger_id(trigger_class)
73
+ return uuid4_from_hash(f"{trigger_id}|{attribute_name}")
@@ -257,7 +257,9 @@ class BaseWorkflow(Generic[InputsType, StateType], BaseExecutable, metaclass=_Ba
257
257
  self._context = context or WorkflowContext()
258
258
  self.emitters = emitters or (self.emitters if hasattr(self, "emitters") else [])
259
259
  self.resolvers = resolvers or (self.resolvers if hasattr(self, "resolvers") else [])
260
- self._store = store or Store()
260
+ # Prioritize store type from WorkflowContext to allow subworkflows to inherit EmptyStore
261
+ # TODO(v2.0.0): Remove the concept of an internal store altogether (important-comment)
262
+ self._store = store or self._context.store_class()
261
263
  self._execution_context = self._context.execution_context
262
264
  self._current_runner: Optional[WorkflowRunner] = None
263
265
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vellum-ai
3
- Version: 1.8.3
3
+ Version: 1.8.5
4
4
  Summary:
5
5
  License: MIT
6
6
  Requires-Python: >=3.9,<4.0
@@ -111,7 +111,7 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_ser
111
111
  vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=exT7U-axwtYgFylagScflSQLJEND51qIAx2UATju6JM,6023
112
112
  vellum_ee/workflows/display/tests/workflow_serialization/test_final_output_node_map_reference_serialization.py,sha256=vl3pxUJlrYRA8zzFJ-gRm7fe-5fviLNSIsUC7imnMqk,3502
113
113
  vellum_ee/workflows/display/tests/workflow_serialization/test_list_vellum_document_serialization.py,sha256=ZRcDhOSVKFHvt_rBkNSL7j3VLeWKQbH-KRoJWrtWD2s,2193
114
- vellum_ee/workflows/display/tests/workflow_serialization/test_manual_trigger_serialization.py,sha256=pbxmm03mCFvt4-YfxwVRxjMOvm36IdbwVOMwTSU30q0,3743
114
+ vellum_ee/workflows/display/tests/workflow_serialization/test_manual_trigger_serialization.py,sha256=QjyxK94uPWaBmCmCWxQwuW0OopR06mVcsIjmsnr8UwE,3743
115
115
  vellum_ee/workflows/display/tests/workflow_serialization/test_terminal_node_any_serialization.py,sha256=4WAmSEJZlDBLPhsD1f4GwY9ahB9F6qJKGnL6j7ZYlzQ,1740
116
116
  vellum_ee/workflows/display/tests/workflow_serialization/test_vellum_integration_trigger_serialization.py,sha256=eG7_D76ErR7IrCpWRG4gLKoKGV7VfBL1buezNJ_wkZc,9038
117
117
  vellum_ee/workflows/display/tests/workflow_serialization/test_web_search_node_serialization.py,sha256=vbDFBrWUPeeW7cxjNA6SXrsHlYcbOAhlQ4C45Vdnr1c,3428
@@ -121,7 +121,7 @@ vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
121
121
  vellum_ee/workflows/display/utils/auto_layout.py,sha256=f4GiLn_LazweupfqTpubcdtdfE_vrOcmZudSsnYIY9E,3906
122
122
  vellum_ee/workflows/display/utils/events.py,sha256=XcaQSfmk2s9ZNiU8__ZqH_zfp6KUVACczz9TBWVy7Jc,2208
123
123
  vellum_ee/workflows/display/utils/exceptions.py,sha256=E8Lvo7LY1BoZ54M_NR_opDjJsAAiCUfow1HgoHcTHmg,989
124
- vellum_ee/workflows/display/utils/expressions.py,sha256=q6jgr13gET3rsAtz9XAPqtWQ2RKq_ZMq2OwrtyPhlRg,21345
124
+ vellum_ee/workflows/display/utils/expressions.py,sha256=Phzemb0kFysV8uqAoLyGBfVRcP4mvnMcizNX2LZgPQ4,21356
125
125
  vellum_ee/workflows/display/utils/registry.py,sha256=1qXiBTdsnro6FeCX0FGBEK7CIf6wa--Jt50iZ_nEp_M,3460
126
126
  vellum_ee/workflows/display/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
127
127
  vellum_ee/workflows/display/utils/tests/test_auto_layout.py,sha256=vfXI769418s9vda5Gb5NFBH747WMOwSgHRXeLCTLVm8,2356
@@ -159,12 +159,12 @@ vellum_ee/workflows/tests/test_registry.py,sha256=B8xRIuEyLWfSqrYoPldNQXhKPfe50P
159
159
  vellum_ee/workflows/tests/test_serialize_module.py,sha256=thzGsNzYCRXXdaC5yk1ZjtXrIO6uPdSnzdapKLCOsC8,6241
160
160
  vellum_ee/workflows/tests/test_server.py,sha256=2_n84q_QZN_zW2rZgDenQUXM3x43TcPsRs1fDA6BK1U,29805
161
161
  vellum_ee/workflows/tests/test_virtual_files.py,sha256=TJEcMR0v2S8CkloXNmCHA0QW0K6pYNGaIjraJz7sFvY,2762
162
- vellum/__init__.py,sha256=NB7wH1mULnmmacWXxnHLSSFE-cHwpC0quR9JstZjnM8,49712
162
+ vellum/__init__.py,sha256=E_FsKfOkXg7KvOiBjE0vTWn34tAnYQvijb5FAHcsLDE,49836
163
163
  vellum/client/README.md,sha256=flqu57ubZNTfpq60CdLtJC9gp4WEkyjb_n_eZ4OYf9w,6497
164
164
  vellum/client/__init__.py,sha256=-nugZzQKoUJsStXe6PnOD__8kbDLKKokceDgpGxQ_q0,74576
165
165
  vellum/client/core/__init__.py,sha256=lTcqUPXcx4112yLDd70RAPeqq6tu3eFMe1pKOqkW9JQ,1562
166
166
  vellum/client/core/api_error.py,sha256=44vPoTyWN59gonCIZMdzw7M1uspygiLnr3GNFOoVL2Q,614
167
- vellum/client/core/client_wrapper.py,sha256=llC4_oYnck1KfRr1_t-bhr-vbslTBI_bKlGt64fTYQY,2840
167
+ vellum/client/core/client_wrapper.py,sha256=TaM0xsyTfopC31l4utYPlm7CxH7dKJRjM80HmFHbX1s,2840
168
168
  vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
169
169
  vellum/client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
170
170
  vellum/client/core/force_multipart.py,sha256=awxh5MtcRYe74ehY8U76jzv6fYM_w_D3Rur7KQQzSDk,429
@@ -273,7 +273,7 @@ vellum/client/resources/workspaces/client.py,sha256=36KYa2FDu6h65q2GscUFOJs4qKei
273
273
  vellum/client/resources/workspaces/raw_client.py,sha256=M3Ewk1ZfEZ44EeTvBtBNoNKi5whwfLY-1GR07SyfDTI,3517
274
274
  vellum/client/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
275
275
  vellum/client/tests/test_utils.py,sha256=zk8z45-2xrm9sZ2hq8PTqY8MXmXtPqMqYK0VBBX0GHg,1176
276
- vellum/client/types/__init__.py,sha256=DJQk--nsuFG-SCfraIR26UkH9ly4cZJYTY2FTpU8C68,75198
276
+ vellum/client/types/__init__.py,sha256=4x0VD1hiSDruxauc6TI6yO9u9buX0C0RXKGwbUQrB6o,75393
277
277
  vellum/client/types/ad_hoc_execute_prompt_event.py,sha256=B69EesIH6fpNsdoiJaSG9zF1Sl17FnjoTu4CBkUSoHk,608
278
278
  vellum/client/types/ad_hoc_expand_meta.py,sha256=Kajcj3dKKed5e7uZibRnE3ZonK_bB2JPM-3aLjLfUp4,1295
279
279
  vellum/client/types/ad_hoc_fulfilled_prompt_execution_meta.py,sha256=5kD6ZcbU8P8ynK0lMD8Mh7vHzvQt06ziMyphvWYg6FU,968
@@ -880,13 +880,15 @@ vellum/client/types/video_input_request.py,sha256=wNQwncQsbEez5UR7wI_Erg__6V_WDM
880
880
  vellum/client/types/video_prompt_block.py,sha256=8uyJRzNnoV6vB4sVPxtxx9gsVkLsfHaobLcQM4CdWTY,977
881
881
  vellum/client/types/video_vellum_value.py,sha256=8KfVyPZ0b3nv0wuo-p88yE9jc5VyYXk0HPnesgiYGjY,711
882
882
  vellum/client/types/video_vellum_value_request.py,sha256=q6dptI5XdJNFwtTRlNyPqU0EUlRDFlhH8GjJgMzY2c8,740
883
+ vellum/client/types/workflow_deployment_display_data.py,sha256=6D2CqxfJLFZPpmjYZ5FNOPMLPvvcAlYz7Y23_CmzJqA,780
883
884
  vellum/client/types/workflow_deployment_event_executions_response.py,sha256=KXzRC0iaXsBu9ezA4p7PIHL4-IWIQ-lX6NW6noTHtZ4,1570
884
885
  vellum/client/types/workflow_deployment_history_item.py,sha256=RF_ByBLXRo47MhAuyUV4FkxmN_j879-UylfRyZaYAm0,1327
885
886
  vellum/client/types/workflow_deployment_parent_context.py,sha256=1JdTw3LL6tgCgiMVrX35SZVu7mZcxz6SbxWPCUBZ09s,1796
886
- vellum/client/types/workflow_deployment_read.py,sha256=rQQZmRy92tfXie8kg14dRI9t_lZ1StbXSEtSFPMTV9E,2247
887
+ vellum/client/types/workflow_deployment_read.py,sha256=bSdmiGtOUdZoNRH14PtmoLsSGACh0xwUXG6Fqr5a30I,2494
887
888
  vellum/client/types/workflow_deployment_release.py,sha256=yd9Okgpdm8Oob9VmIKaksZjmRv2uLHGJtc-H5sO10F8,1520
888
889
  vellum/client/types/workflow_deployment_release_workflow_deployment.py,sha256=ZmQhemAQEqARhkSvc9DFdgfTKQfSHvRTS9reW1Wx9dI,550
889
890
  vellum/client/types/workflow_deployment_release_workflow_version.py,sha256=VbVrwsDHapwPSsGEt8OM9Gjs31esIqkp8ta5zrZvPTw,885
891
+ vellum/client/types/workflow_display_icon.py,sha256=SmjaK8yazBntU1Nh57bVz_sYf59DwaKvamUzea0wEdo,646
890
892
  vellum/client/types/workflow_error.py,sha256=iDMQ3Wx7E8lf6BYtBTGpeIxG46iF9mjzTpjxyJVTXgM,283
891
893
  vellum/client/types/workflow_event.py,sha256=M_ra0CjUffCPqPRFJM_oR1IY4egHDGa0tY1HAoA8j5k,1532
892
894
  vellum/client/types/workflow_event_error.py,sha256=qNqSGvPOLODPTiaWmsUKyTx9W91JDIm9r9s05zsTsfg,779
@@ -1708,6 +1710,7 @@ vellum/types/video_input_request.py,sha256=6pDU5OXPS8AxJGlM9KoaQiVAl7UthQsr0aTCM
1708
1710
  vellum/types/video_prompt_block.py,sha256=hraiqOCqrjZ6g5b7sH_oUCqitstkKJphuz2-uzmXEkk,156
1709
1711
  vellum/types/video_vellum_value.py,sha256=h7AtjZ4YA7BJpTsB78nJ01c6oKjk4ZNfxRQxjevZEwQ,156
1710
1712
  vellum/types/video_vellum_value_request.py,sha256=-8swaAzFnM-xGSxXpIoxgZSy9lDqDVfjtooHnQcr9D4,164
1713
+ vellum/types/workflow_deployment_display_data.py,sha256=l4T7o25fcFHa-qZ22b3OgjHY68o_N93upeVCwOtVRV4,170
1711
1714
  vellum/types/workflow_deployment_event_executions_response.py,sha256=375mHiA7sucHeFSr0LlaLcVgV7F2QicMZaQiOrC5yOg,183
1712
1715
  vellum/types/workflow_deployment_history_item.py,sha256=dp5pwzOVO83KPwAbYeO3NXlKKHswGa0MTGX82nIhAIg,170
1713
1716
  vellum/types/workflow_deployment_parent_context.py,sha256=kB0eeRXagHqRnuDVA9B8aDlvBZVOmQ702JYXD8evh24,172
@@ -1715,6 +1718,7 @@ vellum/types/workflow_deployment_read.py,sha256=dDGG27VP0bvC565JzeSOHJ-5Pvs7eCF4
1715
1718
  vellum/types/workflow_deployment_release.py,sha256=lBnOc5Tw2-jLGWmthzkwdaLGvylcDiarO-maZSote0A,165
1716
1719
  vellum/types/workflow_deployment_release_workflow_deployment.py,sha256=8qT32r--NyJppqBizD9QP6jvM5YdcsdpGEtaKMG1RbE,185
1717
1720
  vellum/types/workflow_deployment_release_workflow_version.py,sha256=l5SJrY9z3lG5K82V2wY2sY50V40CQWKl95nDjnHu4Dc,182
1721
+ vellum/types/workflow_display_icon.py,sha256=MpD5VTDMjMluWbBECGWbBRjOZdy9NFcbYVjw4hbmGy8,159
1718
1722
  vellum/types/workflow_error.py,sha256=7rZcYJG5jYr4IbEvgv57G6Lxutrdg43SD8mUerd58_A,152
1719
1723
  vellum/types/workflow_event.py,sha256=PNvXXtxFyPeIhdcZITMbTj0f0ZGOsaBKhOaR0eQ9aOI,152
1720
1724
  vellum/types/workflow_event_error.py,sha256=n8yzIuTmfxKyGBKellmMhnCgi1d4fPkr0MvjR3sKOAI,158
@@ -1812,9 +1816,9 @@ vellum/workflows/__init__.py,sha256=gd5AiZqVTcvqelhysG0jOWYfC6pJKRAVhS7qwf0bHU4,
1812
1816
  vellum/workflows/constants.py,sha256=ApFp3fm_DOuakvZV-c0ybieyVp-wELgHk-GTzDJoDCg,1429
1813
1817
  vellum/workflows/context.py,sha256=ViyIeMDhUv-MhnynLaXPlvlbYxRU45ySvYidCNSbFZU,2458
1814
1818
  vellum/workflows/descriptors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1815
- vellum/workflows/descriptors/base.py,sha256=v3WG2d_pekYtVK3Y2FSdVhf_XwNUnvXgSWuhr0VQRJM,16666
1819
+ vellum/workflows/descriptors/base.py,sha256=GAAk11R8Vg2kysh_MV9pBVrvYRnRiWDvap2znLf48Kw,17053
1816
1820
  vellum/workflows/descriptors/exceptions.py,sha256=Rv2uMiaO2a2SADhJzl_VHhV6dqwAhZAzaJPoThP7SZc,653
1817
- vellum/workflows/descriptors/tests/test_utils.py,sha256=HJ5DoRz0sJvViGxyZ_FtytZjxN2J8xTkGtaVwCy6Q90,6928
1821
+ vellum/workflows/descriptors/tests/test_utils.py,sha256=Ymw8YKYeooiXcg64-tQ9_-PPJGzyGDWuG60RIG2tqPQ,7204
1818
1822
  vellum/workflows/descriptors/utils.py,sha256=Z7kuhwb_D_kfcwKIAr1xI_AqYH6WFoZBYuslKQWZBFU,4399
1819
1823
  vellum/workflows/edges/__init__.py,sha256=auViJbvYiR1gzgGlhMv1fPDMvgXGOwa5g-YZn97fvUo,107
1820
1824
  vellum/workflows/edges/edge.py,sha256=N0SnY3gKVuxImPAdCbPMPlHJIXbkQ3fwq_LbJRvVMFc,677
@@ -1835,7 +1839,7 @@ vellum/workflows/events/stream.py,sha256=xhXJTZirFi0xad5neAQNogrIQ4h47fpnKbVC3vC
1835
1839
  vellum/workflows/events/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1836
1840
  vellum/workflows/events/tests/test_basic_workflow.py,sha256=Pj6orHsXz37jWC5FARi0Sx2Gjf99Owri2Cvr6Chb79k,1765
1837
1841
  vellum/workflows/events/tests/test_event.py,sha256=5rzsQdXksVZIapFSdKQlQGsLPJY2esAwsh_JOtKH_rM,21566
1838
- vellum/workflows/events/types.py,sha256=mVrqAH9Hs9SpXm08Hcxdyap_ImQPwGsxRr56rSNMP34,5043
1842
+ vellum/workflows/events/types.py,sha256=P5Xq0ObthcHBaJItQ9AFz8Afk_mebmdWE8DEOZROh7U,5383
1839
1843
  vellum/workflows/events/workflow.py,sha256=1BdrBdlDpTvsiHcm5KaFA7q6veauQaYlNVUMN8QG0gA,11495
1840
1844
  vellum/workflows/exceptions.py,sha256=l_ZklQQVvbsIdbmbn89aEeTL7x6x08m5kCwKXXPnTDc,2277
1841
1845
  vellum/workflows/executable.py,sha256=um-gLJMVYfGJwGJfZIPlCRHhHIYm6pn8PUEfeqrNx5k,218
@@ -1918,7 +1922,7 @@ vellum/workflows/nodes/core/inline_subworkflow_node/node.py,sha256=N6Yh1z_xlZif9
1918
1922
  vellum/workflows/nodes/core/inline_subworkflow_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1919
1923
  vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py,sha256=RK2g1h2ib-ruQZ9A2_2L-B9WBdHV44WZj75rkDNL0cE,5766
1920
1924
  vellum/workflows/nodes/core/map_node/__init__.py,sha256=MXpZYmGfhsMJHqqlpd64WiJRtbAtAMQz-_3fCU_cLV0,56
1921
- vellum/workflows/nodes/core/map_node/node.py,sha256=FquZcn5ANz4c_PMzggQDeKr2nXaRBkpj4kTpClVZWw4,10473
1925
+ vellum/workflows/nodes/core/map_node/node.py,sha256=kb2-uuf_WuFskIuqw1mxmC7-pE4zKGa8s9m03TSe-kY,10474
1922
1926
  vellum/workflows/nodes/core/map_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1923
1927
  vellum/workflows/nodes/core/map_node/tests/test_node.py,sha256=Xc2xZY5ShSy-bsIQe41JbvIjq3TE95duS-ygaELRVkk,9320
1924
1928
  vellum/workflows/nodes/core/retry_node/__init__.py,sha256=lN2bIy5a3Uzhs_FYCrooADyYU6ZGShtvLKFWpelwPvo,60
@@ -2000,7 +2004,7 @@ vellum/workflows/nodes/displayable/tests/test_search_node_error_handling.py,sha2
2000
2004
  vellum/workflows/nodes/displayable/tests/test_search_node_wth_text_output.py,sha256=VepO5z1277c1y5N6LLIC31nnWD1aak2m5oPFplfJHHs,6935
2001
2005
  vellum/workflows/nodes/displayable/tests/test_text_prompt_deployment_node.py,sha256=Bjv-wZyFgNaVZb9KEMMZd9lFoLzbPEPjEMpANizMZw4,2413
2002
2006
  vellum/workflows/nodes/displayable/tool_calling_node/__init__.py,sha256=3n0-ysmFKsr40CVxPthc0rfJgqVJeZuUEsCmYudLVRg,117
2003
- vellum/workflows/nodes/displayable/tool_calling_node/node.py,sha256=odjxzXi6l9kD_ncWih_462nUX61SKbxMnAYw0j2LwGo,9129
2007
+ vellum/workflows/nodes/displayable/tool_calling_node/node.py,sha256=p9O9x7-YPeSaPLUFevr-DzRFA5CzNPsDuJWArkD9hE0,9909
2004
2008
  vellum/workflows/nodes/displayable/tool_calling_node/state.py,sha256=CcBVb_YtwfSSka4ze678k6-qwmzMSfjfVP8_Y95feSo,302
2005
2009
  vellum/workflows/nodes/displayable/tool_calling_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2006
2010
  vellum/workflows/nodes/displayable/tool_calling_node/tests/test_composio_service.py,sha256=in1fbEz5x1tx3uKv9YXdvOncsHucNL8Ro6Go7lBuuOQ,8962
@@ -2049,7 +2053,7 @@ vellum/workflows/runner/runner.py,sha256=mMJzRT1iMsJ8YLYcbTsrKH8l2VDxqlC-sD8xY7p
2049
2053
  vellum/workflows/sandbox.py,sha256=mezSZmilR_fwR8164n8CEfzlMeQ55IqfapHp4ftImvQ,3212
2050
2054
  vellum/workflows/state/__init__.py,sha256=yUUdR-_Vl7UiixNDYQZ-GEM_kJI9dnOia75TtuNEsnE,60
2051
2055
  vellum/workflows/state/base.py,sha256=8Zr7UIM_eC0O2N6w_1gYqyrjgJ9D9z-VqLFnBETEF7Q,26753
2052
- vellum/workflows/state/context.py,sha256=wMp6g23V1RNGWMksogfYIg8PqtFE9UxlfLfLpvhD9EU,10412
2056
+ vellum/workflows/state/context.py,sha256=L2Xqt8jL1RJCCuSVyKakuZQdgb_YBVKSW6n_3nSAcLE,10974
2053
2057
  vellum/workflows/state/delta.py,sha256=7h8wR10lRCm15SykaPj-gSEvvsMjCwYLPsOx3nsvBQg,440
2054
2058
  vellum/workflows/state/encoder.py,sha256=elZ70SEUTxhGa3vpxdrfjUotDT6NvhDCPWtP-VSjCH0,2029
2055
2059
  vellum/workflows/state/store.py,sha256=uVe-oN73KwGV6M6YLhwZMMUQhzTQomsVfVnb8V91gVo,1147
@@ -2087,19 +2091,19 @@ vellum/workflows/utils/tests/test_functions.py,sha256=J_WEyVX1yE3lUhoX8etgkbPuwQ
2087
2091
  vellum/workflows/utils/tests/test_names.py,sha256=DnRRnuORxQXx9ESegCzkxiWcHy2_bBi7lXgbFi3FZK8,757
2088
2092
  vellum/workflows/utils/tests/test_uuids.py,sha256=i77ABQ0M3S-aFLzDXHJq_yr5FPkJEWCMBn1HJ3DObrE,437
2089
2093
  vellum/workflows/utils/tests/test_vellum_variables.py,sha256=X7b-bbN3bFRx0WG31bowcaOgsXxEPYnh2sgpsqgKIsQ,2096
2090
- vellum/workflows/utils/uuids.py,sha256=xQ-Clad8Srl3QqCrs8_UEgto0OFe8zH7VtuIlCgMWHg,2412
2094
+ vellum/workflows/utils/uuids.py,sha256=rP3OHTgvyAiZjlMwYicxmX39JpH1FUYK8SWluh22wqg,2525
2091
2095
  vellum/workflows/utils/vellum_variables.py,sha256=X3lZn-EoWengRWBWRhTNW7hqbj7LkV-6NSMwCskWEbg,7203
2092
2096
  vellum/workflows/utils/zip.py,sha256=HVg_YZLmBOTXKaDV3Xhaf3V6sYnfqqZXQ8CpuafkbPY,1181
2093
2097
  vellum/workflows/vellum_client.py,sha256=3iDR7VV_NgLSm1iZQCKDvrmfEaX1bOJiU15QrxyHpv0,1237
2094
2098
  vellum/workflows/workflows/__init__.py,sha256=KY45TqvavCCvXIkyCFMEc0dc6jTMOUci93U2DUrlZYc,66
2095
- vellum/workflows/workflows/base.py,sha256=jeIjmHclZtBG9I5uh0H0rqHOF6nVpxoF0bomvOHK2sU,33361
2099
+ vellum/workflows/workflows/base.py,sha256=sxtMwfE1kYgdvZkxcFO8eM86Cw3Wp8ONdnOuDjI8PzQ,33573
2096
2100
  vellum/workflows/workflows/event_filters.py,sha256=OzaS1y_z1f7H4f4M914HttAfAuTiN0jXUmo1TUQagCY,2504
2097
2101
  vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2098
2102
  vellum/workflows/workflows/tests/test_base_workflow.py,sha256=Boa-_m9ii2Qsa1RvVM-VYniF7zCpzGgEGy-OnPZkrHg,23941
2099
2103
  vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
2100
2104
  vellum/workflows/workflows/tests/test_event_filters.py,sha256=CPsgtn2F8QMuNMxN5MB6IwTY0y_8JWBCZsio75vxp6c,3638
2101
- vellum_ai-1.8.3.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
2102
- vellum_ai-1.8.3.dist-info/METADATA,sha256=hc54GAN5QhytozkoojSXEZ30tE_YUqvfOFrOUy-OK_Y,5547
2103
- vellum_ai-1.8.3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
2104
- vellum_ai-1.8.3.dist-info/entry_points.txt,sha256=xVavzAKN4iF_NbmhWOlOkHluka0YLkbN_pFQ9pW3gLI,117
2105
- vellum_ai-1.8.3.dist-info/RECORD,,
2105
+ vellum_ai-1.8.5.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
2106
+ vellum_ai-1.8.5.dist-info/METADATA,sha256=R9SUjnVuVt7u0ikizlEiD0BcHXfsTFqYW5V4BjpRO24,5547
2107
+ vellum_ai-1.8.5.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
2108
+ vellum_ai-1.8.5.dist-info/entry_points.txt,sha256=xVavzAKN4iF_NbmhWOlOkHluka0YLkbN_pFQ9pW3gLI,117
2109
+ vellum_ai-1.8.5.dist-info/RECORD,,
@@ -24,7 +24,7 @@ def test_manual_trigger_serialization():
24
24
  assert isinstance(triggers, list)
25
25
 
26
26
  assert len(triggers) == 1
27
- assert triggers[0] == {"id": "b09c1902-3cca-4c79-b775-4c32e3e88466", "type": "MANUAL", "attributes": []}
27
+ assert triggers[0] == {"id": "b3c8ab56-001f-4157-bbc2-4a7fe5ebf8c6", "type": "MANUAL", "attributes": []}
28
28
 
29
29
 
30
30
  def test_manual_trigger_multiple_entrypoints():
@@ -54,7 +54,7 @@ def test_manual_trigger_multiple_entrypoints():
54
54
  assert isinstance(triggers, list)
55
55
 
56
56
  assert len(triggers) == 1
57
- assert triggers[0] == {"id": "b09c1902-3cca-4c79-b775-4c32e3e88466", "type": "MANUAL", "attributes": []}
57
+ assert triggers[0] == {"id": "b3c8ab56-001f-4157-bbc2-4a7fe5ebf8c6", "type": "MANUAL", "attributes": []}
58
58
 
59
59
 
60
60
  def test_unknown_trigger_type():
@@ -107,4 +107,4 @@ def test_manual_trigger_entrypoint_id_consistency():
107
107
  "to maintain trigger-entrypoint linkage"
108
108
  )
109
109
  # Also verify the expected UUID
110
- assert trigger_id == "b09c1902-3cca-4c79-b775-4c32e3e88466"
110
+ assert trigger_id == "b3c8ab56-001f-4157-bbc2-4a7fe5ebf8c6"
@@ -57,7 +57,7 @@ from vellum.workflows.references.workflow_input import WorkflowInputReference
57
57
  from vellum.workflows.types.core import JsonArray, JsonObject
58
58
  from vellum.workflows.types.generics import is_workflow_class
59
59
  from vellum.workflows.utils.functions import compile_function_definition
60
- from vellum.workflows.utils.uuids import uuid4_from_hash
60
+ from vellum.workflows.utils.uuids import get_trigger_id, uuid4_from_hash
61
61
  from vellum_ee.workflows.display.utils.exceptions import InvalidInputReferenceError, UnsupportedSerializationException
62
62
  from vellum_ee.workflows.server.virtual_file_loader import VirtualFileLoader
63
63
 
@@ -353,9 +353,9 @@ def serialize_value(executable_id: UUID, display_context: "WorkflowDisplayContex
353
353
  }
354
354
 
355
355
  if isinstance(value, TriggerAttributeReference):
356
- # Generate trigger ID using the same hash formula as in base_workflow_display.py
356
+ # Generate trigger ID using get_trigger_id to ensure consistency with trigger definitions
357
357
  trigger_class = value.trigger_class
358
- trigger_id = uuid4_from_hash(trigger_class.__qualname__)
358
+ trigger_id = get_trigger_id(trigger_class)
359
359
 
360
360
  return {
361
361
  "type": "TRIGGER_ATTRIBUTE",