vellum-ai 0.14.43__py3-none-any.whl → 0.14.45__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.
Files changed (48) hide show
  1. vellum/client/core/client_wrapper.py +1 -1
  2. vellum/client/core/pydantic_utilities.py +7 -1
  3. vellum/workflows/nodes/bases/base.py +1 -0
  4. vellum/workflows/nodes/bases/tests/test_base_node.py +20 -0
  5. vellum/workflows/nodes/core/try_node/node.py +6 -3
  6. vellum/workflows/nodes/core/try_node/tests/test_node.py +24 -0
  7. vellum/workflows/ports/node_ports.py +3 -2
  8. vellum/workflows/ports/port.py +13 -3
  9. vellum/workflows/ports/utils.py +50 -17
  10. vellum/workflows/types/tests/test_utils.py +3 -3
  11. vellum/workflows/types/utils.py +31 -10
  12. {vellum_ai-0.14.43.dist-info → vellum_ai-0.14.45.dist-info}/METADATA +1 -1
  13. {vellum_ai-0.14.43.dist-info → vellum_ai-0.14.45.dist-info}/RECORD +48 -46
  14. vellum_ee/workflows/display/nodes/base_node_display.py +4 -173
  15. vellum_ee/workflows/display/nodes/vellum/conditional_node.py +1 -1
  16. vellum_ee/workflows/display/nodes/vellum/final_output_node.py +2 -1
  17. vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py +4 -1
  18. vellum_ee/workflows/display/nodes/vellum/retry_node.py +3 -3
  19. vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py +4 -1
  20. vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_deployment_node.py +106 -0
  21. vellum_ee/workflows/display/nodes/vellum/tests/test_subworkflow_deployment_node.py +109 -0
  22. vellum_ee/workflows/display/nodes/vellum/try_node.py +3 -3
  23. vellum_ee/workflows/display/tests/test_base_workflow_display.py +1 -0
  24. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py +73 -111
  25. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py +0 -1
  26. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py +0 -3
  27. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py +0 -4
  28. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py +0 -1
  29. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py +0 -1
  30. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py +0 -1
  31. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py +0 -1
  32. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py +18 -2
  33. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +10 -1
  34. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py +0 -1
  35. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py +2 -3
  36. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py +0 -1
  37. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py +2 -3
  38. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py +0 -1
  39. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py +1 -2
  40. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py +0 -1
  41. vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py +5 -55
  42. vellum_ee/workflows/display/utils/expressions.py +221 -1
  43. vellum_ee/workflows/display/utils/vellum.py +0 -76
  44. vellum_ee/workflows/display/workflows/base_workflow_display.py +49 -37
  45. vellum_ee/workflows/display/workflows/tests/test_workflow_display.py +45 -0
  46. {vellum_ai-0.14.43.dist-info → vellum_ai-0.14.45.dist-info}/LICENSE +0 -0
  47. {vellum_ai-0.14.43.dist-info → vellum_ai-0.14.45.dist-info}/WHEEL +0 -0
  48. {vellum_ai-0.14.43.dist-info → vellum_ai-0.14.45.dist-info}/entry_points.txt +0 -0
@@ -18,7 +18,7 @@ class BaseClientWrapper:
18
18
  headers: typing.Dict[str, str] = {
19
19
  "X-Fern-Language": "Python",
20
20
  "X-Fern-SDK-Name": "vellum-ai",
21
- "X-Fern-SDK-Version": "0.14.43",
21
+ "X-Fern-SDK-Version": "0.14.45",
22
22
  }
23
23
  headers["X-API-KEY"] = self.api_key
24
24
  return headers
@@ -8,10 +8,13 @@ from collections import defaultdict
8
8
  import typing_extensions
9
9
 
10
10
  import pydantic
11
+ import logging
11
12
 
12
13
  from .datetime_utils import serialize_datetime
13
14
  from .serialization import convert_and_respect_annotation_metadata
14
15
 
16
+ logger = logging.getLogger(__name__)
17
+
15
18
  IS_PYDANTIC_V2 = pydantic.VERSION.startswith("2.")
16
19
 
17
20
  if IS_PYDANTIC_V2:
@@ -245,7 +248,10 @@ def update_forward_refs(model: typing.Type["Model"], **localns: typing.Any) -> N
245
248
  if IS_PYDANTIC_V2:
246
249
  model.model_rebuild(raise_errors=False) # type: ignore # Pydantic v2
247
250
  else:
248
- model.update_forward_refs(**localns)
251
+ try:
252
+ model.update_forward_refs(**localns)
253
+ except Exception as e:
254
+ logger.warning("[WARN] Failed to update forward refs for model %s", model.__name__)
249
255
 
250
256
 
251
257
  # Mirrors Pydantic's internal typing
@@ -111,6 +111,7 @@ class BaseNodeMeta(type):
111
111
  # Add cls to relevant nested classes, since python should've been doing this by default
112
112
  for port in node_class.Ports:
113
113
  port.node_class = node_class
114
+ port.validate()
114
115
 
115
116
  node_class.Execution.node_class = node_class
116
117
  node_class.Trigger.node_class = node_class
@@ -283,3 +283,23 @@ def test_node_outputs__inherits_instance():
283
283
  assert foo_output.instance is undefined
284
284
  assert isinstance(bar_output, OutputReference)
285
285
  assert bar_output.instance == "hello"
286
+
287
+
288
+ def test_base_node__iterate_over_attributes__preserves_order():
289
+ # GIVEN a node with two attributes
290
+ class MyNode(BaseNode):
291
+ foo = "foo"
292
+ bar = "bar"
293
+
294
+ # AND a node that inherits from MyNode
295
+ class InheritedNode(MyNode):
296
+ baz = "baz"
297
+ qux = "qux"
298
+ quux = "quux"
299
+
300
+ # WHEN we iterate over the attributes, multiple times
301
+ for i in range(10):
302
+ attribute_names = [attr.name for attr in InheritedNode]
303
+
304
+ # THEN the attributes are in the correct order
305
+ assert attribute_names == ["baz", "qux", "quux", "foo", "bar"], f"Iteration {i} failed"
@@ -1,4 +1,4 @@
1
- from typing import Callable, Generic, Iterator, Optional, Set, Type
1
+ from typing import Callable, Generic, Iterator, Optional, Set, Type, Union
2
2
 
3
3
  from vellum.workflows.context import execution_context, get_parent_context
4
4
  from vellum.workflows.errors.types import WorkflowError, WorkflowErrorCode
@@ -21,7 +21,8 @@ class TryNode(BaseAdornmentNode[StateType], Generic[StateType]):
21
21
  subworkflow: Type["BaseWorkflow"] - The Subworkflow to execute
22
22
  """
23
23
 
24
- on_error_code: Optional[WorkflowErrorCode] = None
24
+ # TODO: We could remove str after we support generating enum values.
25
+ on_error_code: Optional[Union[WorkflowErrorCode, str]] = None
25
26
 
26
27
  class Outputs(BaseAdornmentNode.Outputs):
27
28
  error: Optional[WorkflowError] = None
@@ -65,7 +66,9 @@ class TryNode(BaseAdornmentNode[StateType], Generic[StateType]):
65
66
  message="Subworkflow unexpectedly paused within Try Node",
66
67
  )
67
68
  elif event.name == "workflow.execution.rejected":
68
- if self.on_error_code and self.on_error_code != event.error.code:
69
+ # TODO: We should remove this once we support generating enum values.
70
+ event_error_code = event.error.code.value if isinstance(self.on_error_code, str) else event.error.code
71
+ if self.on_error_code and self.on_error_code != event_error_code:
69
72
  exception = NodeException(
70
73
  code=WorkflowErrorCode.INVALID_OUTPUTS,
71
74
  message=f"""Unexpected rejection: {event.error.code.value}.
@@ -57,6 +57,30 @@ def test_try_node__retry_on_error_code__missed():
57
57
  assert exc_info.value.code == WorkflowErrorCode.INVALID_OUTPUTS
58
58
 
59
59
 
60
+ def test_try_node__on_error_code__str():
61
+ # GIVEN a try node that is configured to catch PROVIDER_ERROR
62
+ @TryNode.wrap(on_error_code="PROVIDER_ERROR") # type: ignore
63
+ class TestNode(BaseNode):
64
+ class Outputs(BaseOutputs):
65
+ value: int
66
+
67
+ def run(self) -> Outputs:
68
+ raise NodeException(message="This will be caught", code=WorkflowErrorCode.PROVIDER_ERROR)
69
+
70
+ # WHEN the node is run and throws a PROVIDER_ERROR
71
+ node = TestNode(state=BaseState())
72
+ outputs = [o for o in node.run()]
73
+
74
+ # THEN the exception is caught
75
+ assert len(outputs) == 2
76
+ assert set(outputs) == {
77
+ BaseOutput(name="value"),
78
+ BaseOutput(
79
+ name="error", value=WorkflowError(message="This will be caught", code=WorkflowErrorCode.PROVIDER_ERROR)
80
+ ),
81
+ }
82
+
83
+
60
84
  def test_try_node__use_parent_inputs_and_state():
61
85
  # GIVEN a parent workflow Inputs and State
62
86
  class Inputs(BaseInputs):
@@ -2,7 +2,7 @@ from typing import Any, Dict, Iterator, Optional, Set, Tuple, Type
2
2
 
3
3
  from vellum.workflows.outputs.base import BaseOutput, BaseOutputs
4
4
  from vellum.workflows.ports.port import Port
5
- from vellum.workflows.ports.utils import validate_ports
5
+ from vellum.workflows.ports.utils import get_port_groups, validate_ports
6
6
  from vellum.workflows.state.base import BaseState
7
7
  from vellum.workflows.types.core import ConditionType
8
8
 
@@ -54,7 +54,8 @@ class NodePorts(metaclass=_NodePortsMeta):
54
54
  resolved_condition = port.resolve_condition(state)
55
55
  if resolved_condition:
56
56
  invoked_ports.add(port)
57
- break
57
+ if len(get_port_groups(all_ports)) <= 1:
58
+ break
58
59
 
59
60
  elif port._condition_type == ConditionType.ELSE and not invoked_ports:
60
61
  invoked_ports.add(port)
@@ -7,7 +7,7 @@ from vellum.workflows.descriptors.base import BaseDescriptor
7
7
  from vellum.workflows.descriptors.exceptions import InvalidExpressionException
8
8
  from vellum.workflows.edges.edge import Edge
9
9
  from vellum.workflows.errors.types import WorkflowErrorCode
10
- from vellum.workflows.exceptions import NodeException
10
+ from vellum.workflows.exceptions import NodeException, WorkflowInitializationException
11
11
  from vellum.workflows.graph import Graph, GraphTarget
12
12
  from vellum.workflows.state.base import BaseState
13
13
  from vellum.workflows.types.core import ConditionType
@@ -73,11 +73,11 @@ class Port:
73
73
  return Graph.from_edge(edge)
74
74
 
75
75
  @staticmethod
76
- def on_if(condition: BaseDescriptor, fork_state: bool = False) -> "Port":
76
+ def on_if(condition: Optional[BaseDescriptor] = None, fork_state: bool = False):
77
77
  return Port(condition=condition, condition_type=ConditionType.IF, fork_state=fork_state)
78
78
 
79
79
  @staticmethod
80
- def on_elif(condition: BaseDescriptor, fork_state: bool = False) -> "Port":
80
+ def on_elif(condition: Optional[BaseDescriptor] = None, fork_state: bool = False) -> "Port":
81
81
  return Port(condition=condition, condition_type=ConditionType.ELIF, fork_state=fork_state)
82
82
 
83
83
  @staticmethod
@@ -107,3 +107,13 @@ class Port:
107
107
  cls, source_type: Type[Any], handler: GetCoreSchemaHandler
108
108
  ) -> core_schema.CoreSchema:
109
109
  return core_schema.is_instance_schema(cls)
110
+
111
+ def validate(self):
112
+ if (
113
+ not self.default
114
+ and self._condition_type in (ConditionType.IF, ConditionType.ELIF)
115
+ and self._condition is None
116
+ ):
117
+ raise WorkflowInitializationException(
118
+ f"Class {self.node_class.__name__}'s {self.name} should have a defined condition and cannot be empty."
119
+ )
@@ -11,30 +11,63 @@ PORT_TYPE_PRIORITIES = {
11
11
  }
12
12
 
13
13
 
14
- def validate_ports(ports: List[Port]) -> bool:
14
+ def get_port_groups(ports: List[Port]) -> List[List[ConditionType]]:
15
15
  # We don't want to validate ports with no condition (default ports)
16
16
  port_types = [port._condition_type for port in ports if port._condition_type is not None]
17
- sorted_port_types = sorted(port_types, key=lambda port_type: PORT_TYPE_PRIORITIES[port_type])
18
17
 
19
- if sorted_port_types != port_types:
20
- raise ValueError("Port conditions must be in the following order: on_if, on_elif, on_else")
18
+ ports_class = f"{ports[0].node_class}.Ports"
19
+
20
+ # Check all ports by port groups
21
+ port_groups: List[List[ConditionType]] = []
22
+ current_port_group: List[ConditionType] = []
23
+
24
+ for port_type in port_types:
25
+ # Start a new group only if we see an IF
26
+ if port_type == ConditionType.IF:
27
+ # Only append the current group if it's not empty and starts with an IF
28
+ if current_port_group and current_port_group[0] == ConditionType.IF:
29
+ port_groups.append(current_port_group)
30
+ current_port_group = [port_type]
31
+ else:
32
+ # If we see an ELIF or ELSE without a preceding IF, that's an error
33
+ if not current_port_group:
34
+ raise ValueError(f"Class {ports_class} must have ports in the following order: on_if, on_elif, on_else")
35
+ current_port_group.append(port_type)
36
+
37
+ if current_port_group and current_port_group[0] == ConditionType.IF:
38
+ port_groups.append(current_port_group)
39
+ elif current_port_group:
40
+ # If the last group doesn't start with IF, that's an error
41
+ raise ValueError(f"Class {ports_class} must have ports in the following order: on_if, on_elif, on_else")
21
42
 
22
- counter = Counter(port_types)
23
- number_of_if_ports = counter[ConditionType.IF]
24
- number_of_elif_ports = counter[ConditionType.ELIF]
25
- number_of_else_ports = counter[ConditionType.ELSE]
43
+ return port_groups
44
+
45
+
46
+ def validate_ports(ports: List[Port]) -> bool:
26
47
  ports_class = f"{ports[0].node_class}.Ports"
48
+ port_groups = get_port_groups(ports)
49
+ # Validate each port group
50
+ for group in port_groups:
51
+ # Check that each port group is in the correct order
52
+ sorted_group = sorted(group, key=lambda port_type: PORT_TYPE_PRIORITIES[port_type])
53
+ if sorted_group != group:
54
+ raise ValueError(f"Class {ports_class} must have ports in the following order: on_if, on_elif, on_else")
55
+
56
+ # Count the types in this port group
57
+ counter = Counter(group)
58
+ number_of_if_ports = counter[ConditionType.IF]
59
+ number_of_elif_ports = counter[ConditionType.ELIF]
60
+ number_of_else_ports = counter[ConditionType.ELSE]
27
61
 
28
- if number_of_if_ports == 0 and (number_of_elif_ports > 0 or number_of_else_ports > 0):
29
- raise ValueError(
30
- f"Class {ports_class} containing on_elif or on_else port conditions must have at least one on_if condition"
31
- )
62
+ # Apply the rules to each port group
63
+ if number_of_if_ports != 1:
64
+ raise ValueError(f"Class {ports_class} must have exactly one on_if condition")
32
65
 
33
- if number_of_elif_ports > 0 and number_of_if_ports != 1:
34
- raise ValueError(f"Class {ports_class} containing on_elif ports must have exactly one on_if condition")
66
+ if number_of_elif_ports > 0 and number_of_if_ports != 1:
67
+ raise ValueError(f"Class {ports_class} containing on_elif ports must have exactly one on_if condition")
35
68
 
36
- if number_of_else_ports > 1:
37
- raise ValueError(f"Class {ports_class} must have at most one on_else port condition")
69
+ if number_of_else_ports > 1:
70
+ raise ValueError(f"Class {ports_class} must have at most one on_else condition")
38
71
 
39
- enforce_single_invoked_conditional_port = number_of_elif_ports > 0 or number_of_if_ports <= 1
72
+ enforce_single_invoked_conditional_port = len(port_groups) <= 1
40
73
  return enforce_single_invoked_conditional_port
@@ -83,9 +83,9 @@ def test_infer_types(cls, attr_name, expected_type):
83
83
  @pytest.mark.parametrize(
84
84
  "cls, expected_attr_names",
85
85
  [
86
- (ExampleClass, {"alpha", "beta", "gamma", "epsilon", "zeta", "eta", "kappa", "mu"}),
87
- (ExampleGenericClass, {"delta"}),
88
- (ExampleInheritedClass, {"alpha", "beta", "gamma", "epsilon", "zeta", "eta", "theta", "kappa", "mu"}),
86
+ (ExampleClass, ["beta", "epsilon", "alpha", "gamma", "zeta", "eta", "kappa", "mu"]),
87
+ (ExampleGenericClass, ["delta"]),
88
+ (ExampleInheritedClass, ["theta", "beta", "epsilon", "alpha", "gamma", "zeta", "eta", "kappa", "mu"]),
89
89
  ],
90
90
  )
91
91
  def test_class_attr_names(cls, expected_attr_names):
@@ -7,6 +7,7 @@ from typing import (
7
7
  ClassVar,
8
8
  Dict,
9
9
  Generic,
10
+ List,
10
11
  Optional,
11
12
  Set,
12
13
  Tuple,
@@ -101,22 +102,42 @@ def infer_types(object_: Type, attr_name: str, localns: Optional[Dict[str, Any]]
101
102
  )
102
103
 
103
104
 
104
- def get_class_attr_names(cls: Type) -> Set[str]:
105
- # gets type-annotated attributes `foo: int`
106
- type_annotated_attributes: Set[str] = set()
105
+ def get_class_attr_names(cls: Type) -> List[str]:
106
+ # make sure we don't duplicate attributes
107
+ collected_attributes: Set[str] = set()
107
108
 
108
- # gets attributes declared `foo = 1`
109
- class_attributes: Set[str] = set()
109
+ # we want to preserve the order of attributes on each class
110
+ ordered_attr_names: List[str] = []
110
111
 
111
- for base in reversed(cls.__mro__):
112
+ for base in cls.__mro__:
113
+ # gets attributes declared `foo = 1`
114
+ for class_attribute in vars(base).keys():
115
+ if class_attribute in collected_attributes:
116
+ continue
117
+
118
+ if class_attribute.startswith("_"):
119
+ continue
120
+
121
+ collected_attributes.add(class_attribute)
122
+ ordered_attr_names.append(class_attribute)
123
+
124
+ # gets type-annotated attributes `foo: int`
112
125
  ann = base.__dict__.get("__annotations__", {})
113
- type_annotated_attributes.update(ann.keys())
126
+ for attr_name in ann.keys():
127
+ if not isinstance(attr_name, str):
128
+ continue
129
+
130
+ if attr_name in collected_attributes:
131
+ continue
132
+
133
+ if attr_name.startswith("_"):
134
+ continue
114
135
 
115
- base_vars = vars(base).keys()
116
- class_attributes.update(base_vars)
136
+ collected_attributes.add(attr_name)
137
+ ordered_attr_names.append(attr_name)
117
138
 
118
139
  # combine and filter out private attributes
119
- return {a for a in list(set(class_attributes) | set(type_annotated_attributes)) if not a.startswith("_")}
140
+ return ordered_attr_names
120
141
 
121
142
 
122
143
  def deepcopy_with_exclusions(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vellum-ai
3
- Version: 0.14.43
3
+ Version: 0.14.45
4
4
  Summary:
5
5
  License: MIT
6
6
  Requires-Python: >=3.9,<4.0
@@ -26,7 +26,7 @@ vellum_ee/workflows/display/base.py,sha256=EqlQFD56kpqMY02ZBJBQajzJKh33Dwi60Wo77
26
26
  vellum_ee/workflows/display/editor/__init__.py,sha256=MSAgY91xCEg2neH5d8jXx5wRdR962ftZVa6vO9BGq9k,167
27
27
  vellum_ee/workflows/display/editor/types.py,sha256=x-tOOCJ6CF4HmiKDfCmcc3bOVfc1EBlP5o6u5WEfLoY,567
28
28
  vellum_ee/workflows/display/nodes/__init__.py,sha256=jI1aPBQf8DkmrYoZ4O-wR1duqZByOf5mDFmo_wFJPE4,307
29
- vellum_ee/workflows/display/nodes/base_node_display.py,sha256=emQg21S5wmY155LWePaBswIDgsDuZctGKEaNmEMNr6M,22625
29
+ vellum_ee/workflows/display/nodes/base_node_display.py,sha256=0wuzviC45kEd26LaXinIsqSpH6O4q2xLuc2esd0VCGc,14633
30
30
  vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=5QuXpMth0HmZuC-e8LRKOLbrVXSL-ylMR5IWae8eNmc,2113
31
31
  vellum_ee/workflows/display/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
32
  vellum_ee/workflows/display/nodes/tests/test_base_node_display.py,sha256=Z4Mf7xLCNiblSbpKI0BrV5modQr-ZcFzhfir_OSyTTs,2997
@@ -36,70 +36,72 @@ vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=nUIgH2s0-7IbQRNrBhLP
36
36
  vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=QCaW_Q9CjLnkzv7dbUKyrZGoumov-C0in7lh7uDar7s,8579
37
37
  vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py,sha256=rJbHZBg9A_v2bjk-R6MfWzShcrS2gcKIOyYGoqwTx8s,6353
38
38
  vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=fHE2_3ZNMRVV66zYGY3ukk8rs-hK8i_c6mO74Ab8Z3w,4451
39
- vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=6d5oqwzdMpgNFILfxaX_mCRyxXDjvvoKBKPUc2Cxp0o,11145
39
+ vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=MrvyiYD0qgQf3-ZYFcurQtin3FagAHGRoT7zYGiIao0,11150
40
40
  vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=eJ_nw0u63vJ7fxxMCrfNyKx8JTOcRoujrJsvsxo_FJ4,2167
41
- vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=7odQcHi2acJ9TTUxBDR6VWn4jGqITshonk-LQxcnIpk,3029
41
+ vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=jUDI2FwVaw0Or4zJL58J_g0S--i59Hzik60s_Es_M-8,3098
42
42
  vellum_ee/workflows/display/nodes/vellum/guardrail_node.py,sha256=nVOixouitWwatZLbSBddeMfYQ2doZ_tCdb1ashq3pqA,2269
43
43
  vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=-nPccukjzM2kJiIwFE3orVahB14zqGGvITQsTBWS3TE,8884
44
44
  vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py,sha256=yZO9UNLj8sAtw64bLSN2wtdPMGoQ2oAVbadrxfL3wsE,5551
45
45
  vellum_ee/workflows/display/nodes/vellum/map_node.py,sha256=T3a6Lv51SC1506bTVd8T9y_KVmP2VP4IQarAO87xdmM,3755
46
46
  vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=yBWeN4T_lOsDVnNOKWRiT7JYKu0IR5Fx2z99iq6QKSA,3273
47
47
  vellum_ee/workflows/display/nodes/vellum/note_node.py,sha256=3E0UqmgVYdtbj4nyq8gKju8EpMsRHMCQ0KLrJhug3XU,1084
48
- vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=xAt926FCYPI12hUeS7S1tx7ezDSriQcGbSZHBkv_omM,3298
49
- vellum_ee/workflows/display/nodes/vellum/retry_node.py,sha256=TjBpRERmkmm1myZTWKAxxD1F0dWSc7U1sih8g9sqq2Q,3300
48
+ vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=7wgyHaeolEKBKBZioqt1zc7cHxkuaW_2diL9XjIdFNE,3461
49
+ vellum_ee/workflows/display/nodes/vellum/retry_node.py,sha256=X3xnlAU5JisL0jRvaG_V9RvTF7ZlGufTO8tXLLVhGIg,3280
50
50
  vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=7vU_4IxYe7iwn4p7J909cxF1TOR-tUlFXA7k3ySQPwM,9320
51
- vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=5Ok5X4R5E8SVW58O5cAVJo92VqGDBiFJpHQ3txqNi1U,2653
51
+ vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=5NWneQCRtawbl_fI9cZXH5ssD2EheHAMhl2mnZOsJ0c,2814
52
52
  vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=Nk5pxly4d-kactJ3Z4SLErZCm8hicyj2rCArZw8pW9k,3283
53
53
  vellum_ee/workflows/display/nodes/vellum/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
54
  vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py,sha256=OoNO-BstB96F-VMK6FZ9aXyi-0wyNePo6HiaJC6SYRw,3880
55
55
  vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py,sha256=HoIph_rNlHFNBMqBq1a_eyFwPzBIazdH1yQeRhgba14,1510
56
56
  vellum_ee/workflows/display/nodes/vellum/tests/test_note_node.py,sha256=uiMB0cOxKZzos7YKnj4ef4DFa2bOvZJWIv-hfbUV6Go,1218
57
+ vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_deployment_node.py,sha256=kZQn7W4CWFLc1FiayvvYCPQIcm-3bPNkcjxWMQowAIE,3692
57
58
  vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py,sha256=6Q6rfEwjjSEgSX24aFZjS3K6l8G2YRYBUNC2o5BE8Tk,6101
58
59
  vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py,sha256=h93ysolmbo2viisyhRnXKHPxiDK0I_dSAbYoHFYIoO4,1953
60
+ vellum_ee/workflows/display/nodes/vellum/tests/test_subworkflow_deployment_node.py,sha256=mQW6eIduImP9WKnDUsTskhJEPC4fqzF91GFS_iXKZPQ,3780
59
61
  vellum_ee/workflows/display/nodes/vellum/tests/test_templating_node.py,sha256=PK7v0AWCgH9gWRfAwGPUGCRLbIH3NSyoAYa9W15ggAo,3321
60
62
  vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py,sha256=Khjsb53PKpZuyhKoRMgKAL45eGp5hZqXvHmVeQWRw4w,2289
61
63
  vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py,sha256=3LS1O4DGPWit05oj_ubeW8AlHGnoBxdUMferGQuAiZs,4851
62
- vellum_ee/workflows/display/nodes/vellum/try_node.py,sha256=o6wL17XVm6Wj4sHoJkBW54Y5fY9ZwhD7ry0xkNWRu5c,4106
64
+ vellum_ee/workflows/display/nodes/vellum/try_node.py,sha256=z9Omo676RRc7mQjLoL7hjiHhUj0OWVLhrrb97YTN4QA,4086
63
65
  vellum_ee/workflows/display/nodes/vellum/utils.py,sha256=oICunzyaXPs0tYnW5zH1r93Bx35MSH7mcD-n0DEWRok,4978
64
66
  vellum_ee/workflows/display/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
- vellum_ee/workflows/display/tests/test_base_workflow_display.py,sha256=1R9BAjbfRX7tV3hEwDebzUqzzXoFLfZ-f2WI8Bj4oLI,9286
67
+ vellum_ee/workflows/display/tests/test_base_workflow_display.py,sha256=iZN-uTaI77i_U7YwncVj1X0EsIzDDvgzs0KPjEqbEyM,9319
66
68
  vellum_ee/workflows/display/tests/workflow_serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
69
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
70
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=XOQDDRiG46etxTC7-_RUEutoNumXc02fo7oho4GYM0c,1900
69
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=ixu_VHgpigvKXj2uQu2_EUn4bkpRy0390LGoRKBJ6iU,15262
71
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=tsjGM-jOurPSkDIbrDFdjNLmkI1fPNPAw3J9-l9knCw,12848
70
72
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=m9KpVN55_bHiooZOJLm7doRewhcTK53weVYRiglCJX0,19578
71
73
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py,sha256=s6_mnk0pkztU59wYpSfOFpMhAJaRjmyfxM6WJGtnD4Y,6456
72
74
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py,sha256=PkSgghJDz0fpDB72HHPjLjo8LkZk-HpUkCQzRLX-iVw,40611
73
75
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py,sha256=dsJr8I9AdPwMOGszirfNDzZP2Ychd94aAKuPXAzknMk,4632
74
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py,sha256=r_YrQLgG29D4CtBNCBEKZLFp7x-pKrqJu6EyuvDsUl4,15903
75
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py,sha256=XzhbQ0J5yPQPfLNyH7lAC_oWTjR4ITKYqmLNzNJ99P0,29903
76
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py,sha256=oDlFnp8oBuU1sd40IG5opLJM5qcuwTE3yjb2rUFQyo4,53920
77
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py,sha256=3GloR_5CwBYIpIkRNqJ6-AvwXe9acwyjU-xz1yN-Xws,8693
78
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=8WnzAu4HceKcIcp-Tdnrkdwq9zC6an5-92khTxNm1uk,5978
79
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=jSUfw4iSfyu9-Yift1Lb_oBDC1WnD7FwSPnNzPyQlOI,5632
80
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py,sha256=9GaiCJT__hlO01ORjJ8y6zZa_cNsTR0-5SEOkN-jWzk,7462
76
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py,sha256=xo5RRyv4TTTauy2TWtMXzYFSGa-nvxTa352-xu-pAIw,15815
77
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py,sha256=yX-ICQs8Wf7ksSH71hTbApcE_c-7a_-6AAqRIVkf_Ys,29639
78
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py,sha256=88IQkkTlbWHe1FyV7iwBhWi4iMB154VQm_oXgU0oGsE,53568
79
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py,sha256=I0f24qbterFb20X4N2O6IvdbgR71juE2t8d6ZdkwgnE,8605
80
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=2k9GZ_gNa9795v2dTVN6Gvp_wXoa4gTRLnWIRRfxhOY,5890
81
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=kLOnUNn-r1w1JXNQcVKe-Vp-fKhSfuDBuDqrjGkFZ3U,5544
82
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py,sha256=v07cILUzS5iFYDrSOAXK93yz50-FtxLaMYMwoaPOv20,7374
81
83
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py,sha256=8NiFJLd9vVK8MheYs7TJ3PqYDmtWVXrUNz40E33Y4gA,659
82
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=MCzk2k0jRmbpdKa5ZBid6TYNWbiph9haoY7O_m4rMdA,20586
83
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=_Buk1kTvaOnVWYoC3V7ScuQeLq1_WRAV4wUQzkmbsMQ,16145
84
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=p1nkn67kqrp92-27x4BtWAqA-Xpxqo0UU1fI3y1kdR8,8430
85
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py,sha256=mFhF0FFwf3j5wQn25O4EGNl8Akcc2YkkKZstw8nii8c,8690
86
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py,sha256=lFqT2y8szukLNqeZBbR2XxmF2zmzYNlTSdfebQaUj6Q,13024
87
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py,sha256=nU87rbidKEe9NVlTVTxMBvcxtrzKIbmunPzqZH_uf6w,11299
88
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py,sha256=UmnNqIKgwKlJjniBnE9nZ_0Z4AsYIRx6BeOviI6Ucc4,7799
89
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=Svtg3nRSbLfbw4VhI_G44zjhoLWLIsDQr9CB5OP9Jws,3956
90
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=NIq7pa8EBR0ZmhTc3k_akwGuOKih8mwurkyIbc0dNTg,2857
91
- vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=-okQGpxcPGd2TbY55aul6cXoTcqZklee-MrM1qztv1E,7530
84
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=u2nquKoO3o2xIkU_uFPOb_s5YoLmULiq09vb6Ee0Cqw,21415
85
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=3gZuNM8sT6ovVaeoAvd2JoyKwuxokvowlhH8kwDUoZ8,16559
86
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=IIJt7YZBzkhNtbmaMwCX4ENs58QtSIIoBHlMR6OwGU8,8342
87
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py,sha256=mLr_1Ow5NZYSLzzEZPup14LckuT8ivOvq9Lz85pGj0c,8602
88
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py,sha256=K0mECBUyTNX4I468goeaRf93N7Qfizoc1ctCH5_nNys,12936
89
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py,sha256=KkYZc_bZuq1lmDcvUz3QxIqJLpQPCZioD1FHUNsMJY8,11211
90
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py,sha256=aZaqRDrkO3ytcmdM2eKJqHSt60MF070NMj6M2vgzOKc,7711
91
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=r748dpS13HtwY7t_KQFExFssxRy0xI2d-wxmhiUHRe0,3850
92
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=EL5kfakuoEcwD85dGjhMta-J-PpCHRSDoc80SdbBrQk,2769
93
+ vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=RmFUDx8dYdfsOE2CGLvdXqNNRtLLpVzXDN8dqZyMcZ8,5822
92
94
  vellum_ee/workflows/display/types.py,sha256=NKtEGFhvgz1i_oAayXFIS06QZautixnS3id5DckCIjg,2637
93
95
  vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
96
  vellum_ee/workflows/display/utils/exceptions.py,sha256=LSwwxCYNxFkf5XMUcFkaZKpQ13OSrI7y_bpEUwbKVk0,169
95
- vellum_ee/workflows/display/utils/expressions.py,sha256=2u2o8Fqr-2C45FII01ej5rt6i8n2EEGiliXugK7buVw,1210
97
+ vellum_ee/workflows/display/utils/expressions.py,sha256=jtFyogkad5i8OKbaragW_C5-J2wXpMroRNqzkq5AJE0,10635
96
98
  vellum_ee/workflows/display/utils/registry.py,sha256=fWIm5Jj-10gNFjgn34iBu4RWv3Vd15ijtSN0V97bpW8,1513
97
- vellum_ee/workflows/display/utils/vellum.py,sha256=VSWB3RA3RWQwQ7nMsU9gLfgpX3_BK9ARBIT36i52r9k,9478
99
+ vellum_ee/workflows/display/utils/vellum.py,sha256=4gm4mPvM7srq5IGytPi41QvO6LPC5NwWPy_sRM1Iicg,5520
98
100
  vellum_ee/workflows/display/vellum.py,sha256=o7mq_vk2Yapu9DDKRz5l76h8EmCAypWGQYe6pryrbB8,3576
99
101
  vellum_ee/workflows/display/workflows/__init__.py,sha256=kapXsC67VJcgSuiBMa86FdePG5A9kMB5Pi4Uy1O2ob4,207
100
- vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=qjdATqHawQ1IWkyQ3aRlQQAFixNsS-X4ewpmKSnSwvI,32001
102
+ vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=MifwBKquksk55O8qxYsxfPgFbiHUkgZ-tQNlO-a25uU,32896
101
103
  vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=s6yMO0RxoM8scmfT8TJ-9cwl-WHFe7JSyEJA0alCeEs,1913
102
- vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=uWBMmd_2BlDpymGoo5FB2LBeFQKHmPWJAPvSPZHk94o,11869
104
+ vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=ZmbW-_QgKE7Sx3H0KK4wvm48I5HvXs5ITJRsFiriM5w,13810
103
105
  vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=aaKdmWrgEe5YyV4zuDY_4E3y-l59rIHQnNGiPj2OWxQ,359
104
106
  vellum_ee/workflows/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
107
  vellum_ee/workflows/server/virtual_file_loader.py,sha256=7JphJcSO3H85qiC2DpFfBWjC3JjrbRmoynBC6KKHVsA,2710
@@ -130,12 +132,12 @@ vellum/client/README.md,sha256=JkCJjmMZl4jrPj46pkmL9dpK4gSzQQmP5I7z4aME4LY,4749
130
132
  vellum/client/__init__.py,sha256=Z-JHK2jGxhtTtmkLeOaUGGJWIUNYGNVBLvUewC6lp6w,118148
131
133
  vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
132
134
  vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
133
- vellum/client/core/client_wrapper.py,sha256=gOQ_e1s2iQI79ioggNAaNo71Ue9CGaAkWTvlVyZxaMI,1869
135
+ vellum/client/core/client_wrapper.py,sha256=2R_elVxC5Z8J7AjG_3HT1Vmw7m81NGxIOuC5HYXmvCI,1869
134
136
  vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
135
137
  vellum/client/core/file.py,sha256=X9IbmkZmB2bB_DpmZAO3crWdXagOakAyn6UCOCImCPg,2322
136
138
  vellum/client/core/http_client.py,sha256=R0pQpCppnEtxccGvXl4uJ76s7ro_65Fo_erlNNLp_AI,19228
137
139
  vellum/client/core/jsonable_encoder.py,sha256=qaF1gtgH-kQZb4kJskETwcCsOPUof-NnYVdszHkb-dM,3656
138
- vellum/client/core/pydantic_utilities.py,sha256=6ev3gtER-hjlq7PcPL9XT_YSCdgyCE8ZKHJ9Uc-gHIg,12071
140
+ vellum/client/core/pydantic_utilities.py,sha256=DE9FvWR2EYihzbtOvFJudEExH7XKH_fjSHGm-b5UhJc,12268
139
141
  vellum/client/core/query_encoder.py,sha256=ekulqNd0j8TgD7ox-Qbz7liqX8-KP9blvT9DsRCenYM,2144
140
142
  vellum/client/core/remove_none_from_dict.py,sha256=EU9SGgYidWq7SexuJbNs4-PZ-5Bl3Vppd864mS6vQZw,342
141
143
  vellum/client/core/request_options.py,sha256=5cCGt5AEGgtP5xifDl4oVQUmSjlIA8FmRItAlJawM18,1417
@@ -1536,11 +1538,11 @@ vellum/workflows/inputs/tests/test_inputs.py,sha256=lioA8917mFLYq7Ml69UNkqUjcWbb
1536
1538
  vellum/workflows/logging.py,sha256=_a217XogktV4Ncz6xKFz7WfYmZAzkfVRVuC0rWob8ls,437
1537
1539
  vellum/workflows/nodes/__init__.py,sha256=aVdQVv7Y3Ro3JlqXGpxwaU2zrI06plDHD2aumH5WUIs,1157
1538
1540
  vellum/workflows/nodes/bases/__init__.py,sha256=cniHuz_RXdJ4TQgD8CBzoiKDiPxg62ErdVpCbWICX64,58
1539
- vellum/workflows/nodes/bases/base.py,sha256=tX3xOQIPfnspQPNaOMwGoZ93gM5d5dWeK1YUukzkINI,15158
1541
+ vellum/workflows/nodes/bases/base.py,sha256=c7--RMKBs215xOshoL_tdtvP8i4k1eT9BmRVhQXF5m4,15186
1540
1542
  vellum/workflows/nodes/bases/base_adornment_node.py,sha256=Ao2opOW4kgNoYXFF9Pk7IMpVZdy6luwrjcqEwU5Q9V0,3404
1541
1543
  vellum/workflows/nodes/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1542
1544
  vellum/workflows/nodes/bases/tests/test_base_adornment_node.py,sha256=fXZI9KqpS4XMBrBnIEkK3foHaBVvyHwYcQWWDKay7ic,1148
1543
- vellum/workflows/nodes/bases/tests/test_base_node.py,sha256=6J85q-vtfG-NHzCndMKLk5_sEEDiI52sTGaxefcUCOU,7892
1545
+ vellum/workflows/nodes/bases/tests/test_base_node.py,sha256=hWt90sNvQpUzcttRzQxBBUQXA0A5Mj-Is7awRKYtlNU,8503
1544
1546
  vellum/workflows/nodes/core/__init__.py,sha256=5zDMCmyt1v0HTJzlUBwq3U9L825yZGZhT9JL18-mRR4,455
1545
1547
  vellum/workflows/nodes/core/error_node/__init__.py,sha256=g7RRnlHhqu4qByfLjBwCunmgGA8dI5gNsjS3h6TwlSI,60
1546
1548
  vellum/workflows/nodes/core/error_node/node.py,sha256=MFHU5vITYSK-L9CuMZ49In2ZeNLWnhZD0f8r5dWvb5Y,1270
@@ -1560,9 +1562,9 @@ vellum/workflows/nodes/core/templating_node/__init__.py,sha256=GmyuYo81_A1_Bz6id
1560
1562
  vellum/workflows/nodes/core/templating_node/node.py,sha256=iqBmr2i-f-BqhisNQJiDfewjol0ur7-XpupLStyMJsg,3731
1561
1563
  vellum/workflows/nodes/core/templating_node/tests/test_templating_node.py,sha256=nXkgGDBg4wP36NwykdMEVWwx_xjv8oGT2rYkwuCB_VU,10075
1562
1564
  vellum/workflows/nodes/core/try_node/__init__.py,sha256=JVD4DrldTIqFQQFrubs9KtWCCc0YCAc7Fzol5ZWIWeM,56
1563
- vellum/workflows/nodes/core/try_node/node.py,sha256=XdyOvlwQ3m4h0-_WNtaBl2t_CdlzPXclulkLOtUcX3E,4388
1565
+ vellum/workflows/nodes/core/try_node/node.py,sha256=1DAgNXFTGMRikbsPKclb9S9ZCzNCfeQYYNjbi2UCwds,4685
1564
1566
  vellum/workflows/nodes/core/try_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1565
- vellum/workflows/nodes/core/try_node/tests/test_node.py,sha256=h6eUc3SggvhzBWlOD0PrPUlkoCSQHwjqYn81VkxSIxU,4948
1567
+ vellum/workflows/nodes/core/try_node/tests/test_node.py,sha256=yoGPUdeO8Oa3N66XpwIhVVvGTBYSTQPPNTpwWefZIv4,5763
1566
1568
  vellum/workflows/nodes/displayable/__init__.py,sha256=6F_4DlSwvHuilWnIalp8iDjjDXl0Nmz4QzJV2PYe5RI,1023
1567
1569
  vellum/workflows/nodes/displayable/api_node/__init__.py,sha256=MoxdQSnidIj1Nf_d-hTxlOxcZXaZnsWFDbE-PkTK24o,56
1568
1570
  vellum/workflows/nodes/displayable/api_node/node.py,sha256=cp0nAukcOpM6TcNhbz12h08TMJxp_LM-MLDl1dAzYsk,2534
@@ -1642,9 +1644,9 @@ vellum/workflows/nodes/utils.py,sha256=ziHJc5uU4foxIvacl0Vg7fEJJ0jiznqqhyvURVj0F
1642
1644
  vellum/workflows/outputs/__init__.py,sha256=AyZ4pRh_ACQIGvkf0byJO46EDnSix1ZCAXfvh-ms1QE,94
1643
1645
  vellum/workflows/outputs/base.py,sha256=1OGHqBJVk7i8cW8uewFWOhIjuMlRRpzCDrGE30ZwDjw,8763
1644
1646
  vellum/workflows/ports/__init__.py,sha256=bZuMt-R7z5bKwpu4uPW7LlJeePOQWmCcDSXe5frUY5g,101
1645
- vellum/workflows/ports/node_ports.py,sha256=g4A-8iUAvEJSkaWppbvzAR8XU02R9U-qLN4rP2Kq4Aw,2743
1646
- vellum/workflows/ports/port.py,sha256=eI2SOZPZ5rsC3jMsxW6Rbn0NpaYQsrR7AapiIbbiy8Q,3635
1647
- vellum/workflows/ports/utils.py,sha256=pEjVNJKw9LhD_cFN-o0MWBOW2ejno7jv26qqzjLxwS4,1662
1647
+ vellum/workflows/ports/node_ports.py,sha256=2Uo9gwNVCuH86J-GXcpc95QSDh5I-XVvhHJCMSWe-S8,2825
1648
+ vellum/workflows/ports/port.py,sha256=j_qiZlpx-a1cK5E7sxXwPcb_9NS-KUM-JoP8mgqg32k,4073
1649
+ vellum/workflows/ports/utils.py,sha256=cWJ9xX1KrHBTiU3xe6t7Rs0yaOy9RV18GMtHaAshAsc,3094
1648
1650
  vellum/workflows/references/__init__.py,sha256=glHFC1VfXmcbNvH5VzFbkT03d8_D7MMcvEcsUBrzLIs,591
1649
1651
  vellum/workflows/references/constant.py,sha256=6yUT4q1sMj1hkI_tzzQ9AYcmeeDYFUNCqUq_W2DN0S8,540
1650
1652
  vellum/workflows/references/environment_variable.py,sha256=-gfOcdYwVp9ztSUYz6h2WI2Cg95zqxq5hhFf3Yr7aQg,791
@@ -1679,8 +1681,8 @@ vellum/workflows/types/definition.py,sha256=z81CL_u0FJol-9yUIqoXNTYAARtU8x__c6s-
1679
1681
  vellum/workflows/types/generics.py,sha256=tKXz0LwWJGKw1YGudyl9_yFDrRgU6yYV1yJV1Zv-LTw,1430
1680
1682
  vellum/workflows/types/stack.py,sha256=h7NE0vXR7l9DevFBIzIAk1Zh59K-kECQtDTKOUunwMY,1314
1681
1683
  vellum/workflows/types/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1682
- vellum/workflows/types/tests/test_utils.py,sha256=y2bj4O8-ykPRRRocdD98NdnQz6ydSCoMBp6rECPPqE8,2536
1683
- vellum/workflows/types/utils.py,sha256=mSlcgIr8q_qMCtSCdPxcduRntL_5hk4ptFGq3K0EVgw,5801
1684
+ vellum/workflows/types/tests/test_utils.py,sha256=UnZog59tR577mVwqZRqqWn2fScoOU1H6up0EzS8zYhw,2536
1685
+ vellum/workflows/types/utils.py,sha256=axxHbPLsnjhEOnMZrc5YarFd-P2bnsacBDQGNCvY8OY,6367
1684
1686
  vellum/workflows/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1685
1687
  vellum/workflows/utils/functions.py,sha256=7A4BImhtY__qQpNrF5uPiwLfkj6PSUxYvF7ITigIkxY,4051
1686
1688
  vellum/workflows/utils/names.py,sha256=QLUqfJ1tmSEeUwBKTTiv_Qk3QGbInC2RSmlXfGXc8Wo,380
@@ -1698,8 +1700,8 @@ vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnad
1698
1700
  vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1699
1701
  vellum/workflows/workflows/tests/test_base_workflow.py,sha256=8P5YIsNMO78_CR1NNK6wkEdkMB4b3Q_Ni1qxh78OnHo,20481
1700
1702
  vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
1701
- vellum_ai-0.14.43.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1702
- vellum_ai-0.14.43.dist-info/METADATA,sha256=_cI_OM2v1FvIfRXuOWWaVpZdA0DFUSezO_ENVULlBbI,5484
1703
- vellum_ai-0.14.43.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1704
- vellum_ai-0.14.43.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1705
- vellum_ai-0.14.43.dist-info/RECORD,,
1703
+ vellum_ai-0.14.45.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1704
+ vellum_ai-0.14.45.dist-info/METADATA,sha256=BfwTGG-Soly3Rh8Hqs0qan0I50KGBzN7o4hDZfMfdQo,5484
1705
+ vellum_ai-0.14.45.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1706
+ vellum_ai-0.14.45.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1707
+ vellum_ai-0.14.45.dist-info/RECORD,,