vellum-ai 0.14.39__py3-none-any.whl → 0.14.41__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 (85) hide show
  1. vellum/client/core/client_wrapper.py +1 -1
  2. vellum/client/reference.md +138 -1
  3. vellum/client/resources/ad_hoc/client.py +311 -1
  4. vellum/client/resources/deployments/client.py +2 -2
  5. vellum/workflows/nodes/bases/tests/test_base_node.py +24 -0
  6. vellum/workflows/nodes/core/try_node/node.py +1 -2
  7. vellum/workflows/nodes/experimental/tool_calling_node/__init__.py +3 -0
  8. vellum/workflows/nodes/experimental/tool_calling_node/node.py +125 -0
  9. vellum/workflows/nodes/experimental/tool_calling_node/utils.py +128 -0
  10. vellum/workflows/nodes/utils.py +4 -2
  11. vellum/workflows/outputs/base.py +3 -2
  12. vellum/workflows/references/output.py +20 -0
  13. vellum/workflows/state/base.py +36 -14
  14. vellum/workflows/state/tests/test_state.py +5 -2
  15. vellum/workflows/types/stack.py +11 -0
  16. vellum/workflows/workflows/base.py +5 -0
  17. vellum/workflows/workflows/tests/test_base_workflow.py +96 -9
  18. {vellum_ai-0.14.39.dist-info → vellum_ai-0.14.41.dist-info}/METADATA +1 -1
  19. {vellum_ai-0.14.39.dist-info → vellum_ai-0.14.41.dist-info}/RECORD +84 -80
  20. vellum_cli/push.py +0 -2
  21. vellum_ee/workflows/display/base.py +14 -1
  22. vellum_ee/workflows/display/nodes/base_node_display.py +91 -19
  23. vellum_ee/workflows/display/nodes/get_node_display_class.py +9 -15
  24. vellum_ee/workflows/display/nodes/tests/test_base_node_display.py +54 -0
  25. vellum_ee/workflows/display/nodes/vellum/api_node.py +2 -2
  26. vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py +4 -4
  27. vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +2 -2
  28. vellum_ee/workflows/display/nodes/vellum/conditional_node.py +2 -2
  29. vellum_ee/workflows/display/nodes/vellum/error_node.py +2 -2
  30. vellum_ee/workflows/display/nodes/vellum/final_output_node.py +2 -2
  31. vellum_ee/workflows/display/nodes/vellum/guardrail_node.py +2 -2
  32. vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py +2 -2
  33. vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py +2 -2
  34. vellum_ee/workflows/display/nodes/vellum/merge_node.py +2 -2
  35. vellum_ee/workflows/display/nodes/vellum/note_node.py +2 -2
  36. vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py +2 -4
  37. vellum_ee/workflows/display/nodes/vellum/retry_node.py +1 -2
  38. vellum_ee/workflows/display/nodes/vellum/search_node.py +2 -2
  39. vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py +2 -2
  40. vellum_ee/workflows/display/nodes/vellum/templating_node.py +2 -2
  41. vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py +1 -2
  42. vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py +1 -2
  43. vellum_ee/workflows/display/nodes/vellum/tests/test_note_node.py +1 -2
  44. vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py +55 -3
  45. vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py +1 -2
  46. vellum_ee/workflows/display/nodes/vellum/tests/test_templating_node.py +1 -2
  47. vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py +1 -2
  48. vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py +4 -4
  49. vellum_ee/workflows/display/nodes/vellum/try_node.py +1 -2
  50. vellum_ee/workflows/display/nodes/vellum/utils.py +7 -1
  51. vellum_ee/workflows/display/tests/{test_vellum_workflow_display.py → test_base_workflow_display.py} +10 -22
  52. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py +4 -6
  53. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py +7 -16
  54. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +2 -6
  55. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py +1 -2
  56. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py +3 -10
  57. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py +4 -5
  58. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py +1 -4
  59. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py +1 -4
  60. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py +2 -5
  61. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py +7 -5
  62. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py +1 -4
  63. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py +1 -4
  64. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +1 -2
  65. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py +1 -4
  66. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py +1 -4
  67. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py +7 -5
  68. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py +1 -4
  69. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py +1 -4
  70. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py +1 -4
  71. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py +2 -5
  72. vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py +2 -7
  73. vellum_ee/workflows/display/types.py +5 -4
  74. vellum_ee/workflows/display/utils/exceptions.py +7 -0
  75. vellum_ee/workflows/display/utils/registry.py +37 -0
  76. vellum_ee/workflows/display/utils/vellum.py +2 -1
  77. vellum_ee/workflows/display/workflows/base_workflow_display.py +277 -47
  78. vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py +34 -21
  79. vellum_ee/workflows/display/workflows/tests/test_workflow_display.py +58 -20
  80. vellum_ee/workflows/display/workflows/vellum_workflow_display.py +4 -257
  81. vellum_ee/workflows/tests/local_workflow/display/workflow.py +2 -2
  82. vellum_ee/workflows/display/nodes/base_node_vellum_display.py +0 -40
  83. {vellum_ai-0.14.39.dist-info → vellum_ai-0.14.41.dist-info}/LICENSE +0 -0
  84. {vellum_ai-0.14.39.dist-info → vellum_ai-0.14.41.dist-info}/WHEEL +0 -0
  85. {vellum_ai-0.14.39.dist-info → vellum_ai-0.14.41.dist-info}/entry_points.txt +0 -0
@@ -8,6 +8,7 @@ from vellum.workflows.references import NodeReference
8
8
  from vellum.workflows.references.lazy import LazyReference
9
9
  from vellum.workflows.utils.uuids import uuid4_from_hash
10
10
  from vellum_ee.workflows.display.types import WorkflowDisplayContext
11
+ from vellum_ee.workflows.display.utils.exceptions import UnsupportedSerializationException
11
12
  from vellum_ee.workflows.display.utils.expressions import get_child_descriptor
12
13
  from vellum_ee.workflows.display.utils.vellum import (
13
14
  ConstantValuePointer,
@@ -76,7 +77,12 @@ def create_node_input_value_pointer_rules(
76
77
  node_input_value_pointer_rules.extend(rhs_rules)
77
78
  else:
78
79
  # Non-CoalesceExpression case
79
- node_input_value_pointer_rules.append(create_node_input_value_pointer_rule(value, display_context))
80
+ try:
81
+ rule = create_node_input_value_pointer_rule(value, display_context)
82
+ except UnsupportedSerializationException:
83
+ return node_input_value_pointer_rules
84
+
85
+ node_input_value_pointer_rules.append(rule)
80
86
  else:
81
87
  pointer = create_pointer(value, pointer_type)
82
88
  node_input_value_pointer_rules.append(pointer)
@@ -6,19 +6,16 @@ from vellum.workflows.nodes import BaseNode
6
6
  from vellum.workflows.state import BaseState
7
7
  from vellum.workflows.workflows.base import BaseWorkflow
8
8
  from vellum_ee.workflows.display.vellum import WorkflowInputsVellumDisplayOverrides
9
+ from vellum_ee.workflows.display.workflows.base_workflow_display import BaseWorkflowDisplay
9
10
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
10
- from vellum_ee.workflows.display.workflows.vellum_workflow_display import VellumWorkflowDisplay
11
11
 
12
12
 
13
- def test_vellum_workflow_display__serialize_empty_workflow():
13
+ def test_base_workflow_display__serialize_empty_workflow():
14
14
  # GIVEN an empty workflow
15
15
  class ExampleWorkflow(BaseWorkflow):
16
16
  pass
17
17
 
18
- display = get_workflow_display(
19
- base_display_class=VellumWorkflowDisplay,
20
- workflow_class=ExampleWorkflow,
21
- )
18
+ display = get_workflow_display(workflow_class=ExampleWorkflow)
22
19
 
23
20
  # WHEN serializing the workflow
24
21
  exec_config = display.serialize()
@@ -30,18 +27,18 @@ def test_vellum_workflow_display__serialize_empty_workflow():
30
27
  "output_variables": [],
31
28
  "workflow_raw_data": {
32
29
  "definition": {
33
- "module": ["vellum_ee", "workflows", "display", "tests", "test_vellum_workflow_display"],
30
+ "module": ["vellum_ee", "workflows", "display", "tests", "test_base_workflow_display"],
34
31
  "name": "ExampleWorkflow",
35
32
  },
36
33
  "display_data": {"viewport": {"x": 0.0, "y": 0.0, "zoom": 1.0}},
37
34
  "edges": [],
38
35
  "nodes": [
39
36
  {
40
- "data": {"label": "Entrypoint Node", "source_handle_id": "508b8b82-3517-4672-a155-18c9c7b9c545"},
37
+ "data": {"label": "Entrypoint Node", "source_handle_id": "0af025a4-3b25-457d-a7ae-e3a7ba15c86c"},
41
38
  "base": None,
42
39
  "definition": None,
43
40
  "display_data": {"position": {"x": 0.0, "y": 0.0}},
44
- "id": "9eef0c18-f322-4d56-aa89-f088d3e53f6a",
41
+ "id": "3c41cdd9-999a-48b8-9088-f6dfa1369bfd",
45
42
  "inputs": [],
46
43
  "type": "ENTRYPOINT",
47
44
  }
@@ -62,7 +59,7 @@ def test_vellum_workflow_display__serialize_input_variables_with_capitalized_var
62
59
  class ExampleWorkflow(BaseWorkflow[Inputs, BaseState]):
63
60
  graph = StartNode
64
61
 
65
- class ExampleWorkflowDisplay(VellumWorkflowDisplay[ExampleWorkflow]):
62
+ class ExampleWorkflowDisplay(BaseWorkflowDisplay[ExampleWorkflow]):
66
63
  inputs_display = {
67
64
  Inputs.foo: WorkflowInputsVellumDisplayOverrides(
68
65
  id=UUID("97b63d71-5413-417f-9cf5-49e1b4fd56e4"), name="Foo", required=True
@@ -108,10 +105,7 @@ def test_vellum_workflow_display_serialize_valid_handle_ids_for_base_nodes():
108
105
  final_value = EndNode.Outputs.hello
109
106
 
110
107
  # AND a display class for this workflow
111
- workflow_display = get_workflow_display(
112
- base_display_class=VellumWorkflowDisplay,
113
- workflow_class=Workflow,
114
- )
108
+ workflow_display = get_workflow_display(workflow_class=Workflow)
115
109
 
116
110
  # WHEN we serialize the workflow
117
111
  exec_config = workflow_display.serialize()
@@ -169,10 +163,7 @@ def test_vellum_workflow_display__serialize_with_unused_nodes_and_edges():
169
163
  final = NodeA.Outputs.result
170
164
 
171
165
  # WHEN we serialize it
172
- workflow_display = get_workflow_display(
173
- base_display_class=VellumWorkflowDisplay,
174
- workflow_class=Workflow,
175
- )
166
+ workflow_display = get_workflow_display(workflow_class=Workflow)
176
167
 
177
168
  # WHEN we serialize the workflow
178
169
  exec_config = workflow_display.serialize()
@@ -245,10 +236,7 @@ def test_vellum_workflow_display__serialize_with_parse_json_expression():
245
236
  final = JsonNode.Outputs.json_result
246
237
 
247
238
  # AND a display class for this workflow
248
- workflow_display = get_workflow_display(
249
- base_display_class=VellumWorkflowDisplay,
250
- workflow_class=Workflow,
251
- )
239
+ workflow_display = get_workflow_display(workflow_class=Workflow)
252
240
 
253
241
  # WHEN we serialize the workflow
254
242
  exec_config = workflow_display.serialize()
@@ -1,11 +1,10 @@
1
1
  import pytest
2
2
  from uuid import uuid4
3
- from typing import Any, Type
3
+ from typing import Type
4
4
 
5
5
  from vellum.workflows.types.core import JsonObject
6
6
  from vellum.workflows.types.generics import NodeType
7
7
  from vellum_ee.workflows.display.editor.types import NodeDisplayData
8
- from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
9
8
  from vellum_ee.workflows.display.nodes.get_node_display_class import get_node_display_class
10
9
  from vellum_ee.workflows.display.types import (
11
10
  NodeDisplays,
@@ -15,24 +14,23 @@ from vellum_ee.workflows.display.types import (
15
14
  WorkflowInputsDisplays,
16
15
  )
17
16
  from vellum_ee.workflows.display.vellum import WorkflowMetaVellumDisplay
18
- from vellum_ee.workflows.display.workflows.vellum_workflow_display import VellumWorkflowDisplay
17
+ from vellum_ee.workflows.display.workflows.base_workflow_display import BaseWorkflowDisplay
19
18
 
20
19
 
21
20
  @pytest.fixture()
22
21
  def serialize_node():
23
22
  def _serialize_node(
24
23
  node_class: Type[NodeType],
25
- base_class: type[BaseNodeDisplay[Any]] = BaseNodeDisplay,
26
24
  global_workflow_input_displays: WorkflowInputsDisplays = {},
27
25
  global_state_value_displays: StateValueDisplays = {},
28
26
  global_node_displays: NodeDisplays = {},
29
27
  global_node_output_displays: NodeOutputDisplays = {},
30
28
  ) -> JsonObject:
31
- node_display_class = get_node_display_class(base_class, node_class)
29
+ node_display_class = get_node_display_class(node_class)
32
30
  node_display = node_display_class()
33
31
 
34
32
  context: WorkflowDisplayContext = WorkflowDisplayContext(
35
- workflow_display_class=VellumWorkflowDisplay,
33
+ workflow_display_class=BaseWorkflowDisplay,
36
34
  workflow_display=WorkflowMetaVellumDisplay(
37
35
  entrypoint_node_id=uuid4(),
38
36
  entrypoint_node_source_handle_id=uuid4(),
@@ -10,11 +10,9 @@ from vellum.workflows.outputs.base import BaseOutputs
10
10
  from vellum.workflows.workflows.base import BaseWorkflow
11
11
  from vellum_ee.workflows.display.base import WorkflowInputsDisplay
12
12
  from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
13
- from vellum_ee.workflows.display.nodes.base_node_vellum_display import BaseNodeVellumDisplay
14
13
  from vellum_ee.workflows.display.nodes.vellum.retry_node import BaseRetryNodeDisplay
15
14
  from vellum_ee.workflows.display.nodes.vellum.try_node import BaseTryNodeDisplay
16
15
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
17
- from vellum_ee.workflows.display.workflows.vellum_workflow_display import VellumWorkflowDisplay
18
16
 
19
17
 
20
18
  class Inputs(BaseInputs):
@@ -124,10 +122,7 @@ def test_serialize_node__retry__no_display():
124
122
  graph = StartNode
125
123
 
126
124
  # WHEN we serialize the workflow
127
- workflow_display = get_workflow_display(
128
- base_display_class=VellumWorkflowDisplay,
129
- workflow_class=MyWorkflow,
130
- )
125
+ workflow_display = get_workflow_display(workflow_class=MyWorkflow)
131
126
  exec_config = workflow_display.serialize()
132
127
 
133
128
  # THEN the workflow display is created successfully
@@ -148,7 +143,6 @@ def test_serialize_node__try(serialize_node):
148
143
 
149
144
  input_id = uuid4()
150
145
  serialized_node = serialize_node(
151
- base_class=BaseNodeVellumDisplay,
152
146
  node_class=InnerTryGenericNode,
153
147
  global_workflow_input_displays={Inputs.input: WorkflowInputsDisplay(id=input_id)},
154
148
  global_node_displays={
@@ -220,10 +214,7 @@ def test_serialize_node__try__no_display():
220
214
  graph = StartNode
221
215
 
222
216
  # WHEN we serialize the workflow
223
- workflow_display = get_workflow_display(
224
- base_display_class=VellumWorkflowDisplay,
225
- workflow_class=MyWorkflow,
226
- )
217
+ workflow_display = get_workflow_display(workflow_class=MyWorkflow)
227
218
 
228
219
  exec_config = workflow_display.serialize()
229
220
 
@@ -242,10 +233,7 @@ def test_serialize_node__stacked():
242
233
  graph = InnerStackedGenericNode
243
234
 
244
235
  # WHEN we serialize the workflow
245
- workflow_display = get_workflow_display(
246
- base_display_class=VellumWorkflowDisplay,
247
- workflow_class=StackedWorkflow,
248
- )
236
+ workflow_display = get_workflow_display(workflow_class=StackedWorkflow)
249
237
  exec_config = workflow_display.serialize()
250
238
 
251
239
  # THEN the workflow display is created successfully
@@ -283,7 +271,10 @@ def test_serialize_node__stacked():
283
271
  "test_adornments_serialization",
284
272
  ],
285
273
  },
286
- "trigger": {"id": "6e4af17f-bbee-4777-b10d-af042cd6e16a", "merge_behavior": "AWAIT_ATTRIBUTES"},
274
+ "trigger": {
275
+ "id": "6e4af17f-bbee-4777-b10d-af042cd6e16a",
276
+ "merge_behavior": "AWAIT_ATTRIBUTES",
277
+ },
287
278
  "ports": [{"id": "408cd5fb-3a3e-4eb2-9889-61111bd6a129", "name": "default", "type": "DEFAULT"}],
288
279
  "adornments": [
289
280
  {
@@ -16,7 +16,6 @@ from vellum_ee.workflows.display.base import WorkflowInputsDisplay
16
16
  from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
17
17
  from vellum_ee.workflows.display.nodes.types import NodeOutputDisplay
18
18
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
19
- from vellum_ee.workflows.display.workflows.vellum_workflow_display import VellumWorkflowDisplay
20
19
 
21
20
 
22
21
  class Inputs(BaseInputs):
@@ -169,7 +168,7 @@ def test_serialize_node__lazy_reference_with_string():
169
168
  graph = LazyReferenceGenericNode >> OtherNode
170
169
 
171
170
  # WHEN the workflow is serialized
172
- workflow_display = get_workflow_display(base_display_class=VellumWorkflowDisplay, workflow_class=Workflow)
171
+ workflow_display = get_workflow_display(workflow_class=Workflow)
173
172
  serialized_workflow: dict = workflow_display.serialize()
174
173
 
175
174
  # THEN the node should properly serialize the attribute reference
@@ -257,10 +256,7 @@ def test_serialize_node__workflow_input_as_nested_chat_history():
257
256
  graph = GenericNode
258
257
 
259
258
  # WHEN the workflow is serialized
260
- workflow_display = get_workflow_display(
261
- base_display_class=VellumWorkflowDisplay,
262
- workflow_class=Workflow,
263
- )
259
+ workflow_display = get_workflow_display(workflow_class=Workflow)
264
260
  with pytest.raises(Exception) as exc_info:
265
261
  workflow_display.serialize()
266
262
 
@@ -4,7 +4,6 @@ from uuid import uuid4
4
4
  from deepdiff import DeepDiff
5
5
 
6
6
  from vellum import WorkspaceSecretRead
7
- from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
8
7
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
9
8
 
10
9
  from tests.workflows.basic_api_node.workflow import SimpleAPIWorkflow
@@ -24,7 +23,7 @@ def test_serialize_workflow(vellum_client):
24
23
  vellum_client.workspace_secrets.retrieve.return_value = workspace_secret
25
24
 
26
25
  # WHEN we serialize it
27
- workflow_display = get_workflow_display(base_display_class=VellumWorkflowDisplay, workflow_class=SimpleAPIWorkflow)
26
+ workflow_display = get_workflow_display(workflow_class=SimpleAPIWorkflow)
28
27
 
29
28
  serialized_workflow: dict = workflow_display.serialize()
30
29
 
@@ -1,7 +1,6 @@
1
1
  from deepdiff import DeepDiff
2
2
 
3
3
  from vellum.workflows.nodes.utils import ADORNMENT_MODULE_NAME
4
- from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
5
4
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
6
5
 
7
6
  from tests.workflows.basic_code_execution_node.try_workflow import TrySimpleCodeExecutionWorkflow
@@ -12,9 +11,7 @@ from tests.workflows.basic_code_execution_node.workflow_with_code import SimpleC
12
11
  def test_serialize_workflow_with_filepath():
13
12
  # GIVEN a Workflow with a code execution node
14
13
  # WHEN we serialize it
15
- workflow_display = get_workflow_display(
16
- base_display_class=VellumWorkflowDisplay, workflow_class=SimpleCodeExecutionWithFilepathWorkflow
17
- )
14
+ workflow_display = get_workflow_display(workflow_class=SimpleCodeExecutionWithFilepathWorkflow)
18
15
  serialized_workflow: dict = workflow_display.serialize()
19
16
 
20
17
  # THEN we should get a serialized representation of the Workflow
@@ -253,9 +250,7 @@ def test_serialize_workflow_with_filepath():
253
250
  def test_serialize_workflow_with_code():
254
251
  # GIVEN a Workflow with a code execution node
255
252
  # WHEN we serialize it
256
- workflow_display = get_workflow_display(
257
- base_display_class=VellumWorkflowDisplay, workflow_class=SimpleCodeExecutionWithCodeWorkflow
258
- )
253
+ workflow_display = get_workflow_display(workflow_class=SimpleCodeExecutionWithCodeWorkflow)
259
254
  serialized_workflow: dict = workflow_display.serialize()
260
255
 
261
256
  # THEN we should get a serialized representation of the Workflow
@@ -482,9 +477,7 @@ def test_serialize_workflow_with_code():
482
477
  def test_serialize_workflow__try_wrapped():
483
478
  # GIVEN a Workflow with a code execution node
484
479
  # WHEN we serialize it
485
- workflow_display = get_workflow_display(
486
- base_display_class=VellumWorkflowDisplay, workflow_class=TrySimpleCodeExecutionWorkflow
487
- )
480
+ workflow_display = get_workflow_display(workflow_class=TrySimpleCodeExecutionWorkflow)
488
481
  serialized_workflow: dict = workflow_display.serialize()
489
482
 
490
483
  # THEN we should get a serialized representation of the Workflow
@@ -20,7 +20,6 @@ from vellum.workflows.expressions.less_than import LessThanExpression
20
20
  from vellum.workflows.expressions.less_than_or_equal_to import LessThanOrEqualToExpression
21
21
  from vellum.workflows.expressions.not_between import NotBetweenExpression
22
22
  from vellum.workflows.expressions.not_in import NotInExpression
23
- from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
24
23
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
25
24
 
26
25
  from tests.workflows.basic_conditional_node.workflow import CategoryWorkflow
@@ -30,7 +29,7 @@ from tests.workflows.basic_conditional_node.workflow_with_only_one_conditional_n
30
29
  def test_serialize_workflow():
31
30
  # GIVEN a Workflow that uses a ConditionalNode
32
31
  # WHEN we serialize it
33
- workflow_display = get_workflow_display(base_display_class=VellumWorkflowDisplay, workflow_class=CategoryWorkflow)
32
+ workflow_display = get_workflow_display(workflow_class=CategoryWorkflow)
34
33
  serialized_workflow: dict = workflow_display.serialize()
35
34
 
36
35
  # THEN we should get a serialized representation of the Workflow
@@ -779,7 +778,7 @@ def test_conditional_node_serialize_all_operators_with_lhs_and_rhs(descriptor, o
779
778
  # GIVEN a simple workflow with one conditional node
780
779
  workflow_cls = create_simple_workflow(descriptor)
781
780
 
782
- workflow_display = get_workflow_display(base_display_class=VellumWorkflowDisplay, workflow_class=workflow_cls)
781
+ workflow_display = get_workflow_display(workflow_class=workflow_cls)
783
782
  serialized_workflow: dict = workflow_display.serialize()
784
783
 
785
784
  # THEN we should get a serialized representation of the Workflow
@@ -885,7 +884,7 @@ def test_conditional_node_serialize_all_operators_with_expression(descriptor, op
885
884
  # GIVEN a simple workflow with one conditional node
886
885
  workflow_cls = create_simple_workflow(descriptor)
887
886
 
888
- workflow_display = get_workflow_display(base_display_class=VellumWorkflowDisplay, workflow_class=workflow_cls)
887
+ workflow_display = get_workflow_display(workflow_class=workflow_cls)
889
888
  serialized_workflow: dict = workflow_display.serialize()
890
889
 
891
890
  # THEN we should get a serialized representation of the Workflow
@@ -978,7 +977,7 @@ def test_conditional_node_serialize_all_operators_with_value_and_start_and_end(d
978
977
  # GIVEN a simple workflow with one conditional node
979
978
  workflow_cls = create_simple_workflow(descriptor)
980
979
 
981
- workflow_display = get_workflow_display(base_display_class=VellumWorkflowDisplay, workflow_class=workflow_cls)
980
+ workflow_display = get_workflow_display(workflow_class=workflow_cls)
982
981
  serialized_workflow: dict = workflow_display.serialize()
983
982
 
984
983
  # THEN we should get a serialized representation of the Workflow
@@ -1,6 +1,5 @@
1
1
  from deepdiff import DeepDiff
2
2
 
3
- from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
4
3
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
5
4
 
6
5
  from tests.workflows.basic_default_state.workflow import BasicDefaultStateWorkflow
@@ -9,9 +8,7 @@ from tests.workflows.basic_default_state.workflow import BasicDefaultStateWorkfl
9
8
  def test_serialize_workflow():
10
9
  # GIVEN a Workflow that has a simple state definition
11
10
  # WHEN we serialize it
12
- workflow_display = get_workflow_display(
13
- base_display_class=VellumWorkflowDisplay, workflow_class=BasicDefaultStateWorkflow
14
- )
11
+ workflow_display = get_workflow_display(workflow_class=BasicDefaultStateWorkflow)
15
12
 
16
13
  serialized_workflow: dict = workflow_display.serialize()
17
14
  # THEN we should get a serialized representation of the Workflow
@@ -1,6 +1,5 @@
1
1
  from deepdiff import DeepDiff
2
2
 
3
- from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
4
3
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
5
4
 
6
5
  from tests.workflows.basic_error_node.workflow import BasicErrorNodeWorkflow
@@ -9,9 +8,7 @@ from tests.workflows.basic_error_node.workflow import BasicErrorNodeWorkflow
9
8
  def test_serialize_workflow():
10
9
  # GIVEN a Workflow with an error node
11
10
  # WHEN we serialize it
12
- workflow_display = get_workflow_display(
13
- base_display_class=VellumWorkflowDisplay, workflow_class=BasicErrorNodeWorkflow
14
- )
11
+ workflow_display = get_workflow_display(workflow_class=BasicErrorNodeWorkflow)
15
12
 
16
13
  serialized_workflow: dict = workflow_display.serialize()
17
14
 
@@ -1,17 +1,14 @@
1
1
  from deepdiff import DeepDiff
2
2
 
3
- from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
4
3
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
5
4
 
6
5
  from tests.workflows.basic_generic_node.workflow import BasicGenericNodeWorkflow
7
6
 
8
7
 
9
- def test_serialize_workflow(vellum_client):
8
+ def test_serialize_workflow():
10
9
  # GIVEN a Workflow that uses a generic node
11
10
  # WHEN we serialize it
12
- workflow_display = get_workflow_display(
13
- base_display_class=VellumWorkflowDisplay, workflow_class=BasicGenericNodeWorkflow
14
- )
11
+ workflow_display = get_workflow_display(workflow_class=BasicGenericNodeWorkflow)
15
12
 
16
13
  serialized_workflow: dict = workflow_display.serialize()
17
14
 
@@ -1,6 +1,5 @@
1
1
  from deepdiff import DeepDiff
2
2
 
3
- from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
4
3
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
5
4
 
6
5
  from tests.workflows.basic_guardrail_node.workflow import BasicGuardrailNodeWorkflow
@@ -9,14 +8,17 @@ from tests.workflows.basic_guardrail_node.workflow import BasicGuardrailNodeWork
9
8
  def test_serialize_workflow():
10
9
  # GIVEN a workflow that uses a guardrail node
11
10
  # WHEN we serialize it
12
- workflow_display = get_workflow_display(
13
- base_display_class=VellumWorkflowDisplay, workflow_class=BasicGuardrailNodeWorkflow
14
- )
11
+ workflow_display = get_workflow_display(workflow_class=BasicGuardrailNodeWorkflow)
15
12
 
16
13
  serialized_workflow: dict = workflow_display.serialize()
17
14
 
18
15
  # THEN we should get a serialized representation of the workflow
19
- assert serialized_workflow.keys() == {"workflow_raw_data", "input_variables", "state_variables", "output_variables"}
16
+ assert serialized_workflow.keys() == {
17
+ "workflow_raw_data",
18
+ "input_variables",
19
+ "state_variables",
20
+ "output_variables",
21
+ }
20
22
 
21
23
  # AND its input variables should be what we expect
22
24
  input_variables = serialized_workflow["input_variables"]
@@ -1,4 +1,3 @@
1
- from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
2
1
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
3
2
 
4
3
  from tests.workflows.basic_inline_prompt_node_with_functions.workflow import BasicInlinePromptWithFunctionsWorkflow
@@ -6,9 +5,7 @@ from tests.workflows.basic_inline_prompt_node_with_functions.workflow import Bas
6
5
 
7
6
  def test_serialize_workflow():
8
7
  # WHEN we serialize it
9
- workflow_display = get_workflow_display(
10
- base_display_class=VellumWorkflowDisplay, workflow_class=BasicInlinePromptWithFunctionsWorkflow
11
- )
8
+ workflow_display = get_workflow_display(workflow_class=BasicInlinePromptWithFunctionsWorkflow)
12
9
  serialized_workflow: dict = workflow_display.serialize()
13
10
  assert (
14
11
  serialized_workflow["workflow_raw_data"]["nodes"][-2]["data"]["exec_config"]["prompt_template_block_data"][
@@ -1,6 +1,5 @@
1
1
  from deepdiff import DeepDiff
2
2
 
3
- from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
4
3
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
5
4
 
6
5
  from tests.workflows.basic_inline_subworkflow.workflow import BasicInlineSubworkflowWorkflow
@@ -9,9 +8,7 @@ from tests.workflows.basic_inline_subworkflow.workflow import BasicInlineSubwork
9
8
  def test_serialize_workflow():
10
9
  # GIVEN a Workflow
11
10
  # WHEN we serialize it
12
- workflow_display = get_workflow_display(
13
- base_display_class=VellumWorkflowDisplay, workflow_class=BasicInlineSubworkflowWorkflow
14
- )
11
+ workflow_display = get_workflow_display(workflow_class=BasicInlineSubworkflowWorkflow)
15
12
  serialized_workflow: dict = workflow_display.serialize()
16
13
 
17
14
  # THEN we should get a serialized representation of the Workflow
@@ -1,6 +1,5 @@
1
1
  from deepdiff import DeepDiff
2
2
 
3
- from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
4
3
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
5
4
 
6
5
  from tests.workflows.basic_map_node.workflow import SimpleMapExample
@@ -9,7 +8,7 @@ from tests.workflows.basic_map_node.workflow import SimpleMapExample
9
8
  def test_serialize_workflow():
10
9
  # GIVEN a Workflow that uses a MapNode
11
10
  # WHEN we serialize it
12
- workflow_display = get_workflow_display(base_display_class=VellumWorkflowDisplay, workflow_class=SimpleMapExample)
11
+ workflow_display = get_workflow_display(workflow_class=SimpleMapExample)
13
12
  serialized_workflow: dict = workflow_display.serialize()
14
13
 
15
14
  # THEN we should get a serialized representation of the Workflow
@@ -1,6 +1,5 @@
1
1
  from deepdiff import DeepDiff
2
2
 
3
- from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
4
3
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
5
4
 
6
5
  from tests.workflows.basic_merge_node.await_all_workflow import AwaitAllPassingWorkflow
@@ -9,9 +8,7 @@ from tests.workflows.basic_merge_node.await_all_workflow import AwaitAllPassingW
9
8
  def test_serialize_workflow__await_all():
10
9
  # GIVEN a Workflow that uses an await all merge node
11
10
  # WHEN we serialize it
12
- workflow_display = get_workflow_display(
13
- base_display_class=VellumWorkflowDisplay, workflow_class=AwaitAllPassingWorkflow
14
- )
11
+ workflow_display = get_workflow_display(workflow_class=AwaitAllPassingWorkflow)
15
12
  serialized_workflow: dict = workflow_display.serialize()
16
13
 
17
14
  # THEN we should get a serialized representation of the Workflow
@@ -4,7 +4,6 @@ from uuid import uuid4
4
4
  from deepdiff import DeepDiff
5
5
 
6
6
  from vellum import DeploymentRead
7
- from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
8
7
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
9
8
 
10
9
  from tests.workflows.basic_text_prompt_deployment.workflow import BasicTextPromptDeployment
@@ -25,9 +24,7 @@ def test_serialize_workflow(vellum_client):
25
24
  vellum_client.deployments.retrieve.return_value = deployment
26
25
 
27
26
  # WHEN we serialize it
28
- workflow_display = get_workflow_display(
29
- base_display_class=VellumWorkflowDisplay, workflow_class=BasicTextPromptDeployment
30
- )
27
+ workflow_display = get_workflow_display(workflow_class=BasicTextPromptDeployment)
31
28
  serialized_workflow: dict = workflow_display.serialize()
32
29
 
33
30
  # THEN we should get a serialized representation of the Workflow
@@ -1,4 +1,3 @@
1
- from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
2
1
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
3
2
 
4
3
  from tests.workflows.basic_search_node.workflow import BasicSearchWorkflow
@@ -8,14 +7,17 @@ def test_serialize_workflow():
8
7
  # GIVEN a Workflow with a search node
9
8
  # WHEN we serialize it
10
9
 
11
- workflow_display = get_workflow_display(
12
- base_display_class=VellumWorkflowDisplay, workflow_class=BasicSearchWorkflow
13
- )
10
+ workflow_display = get_workflow_display(workflow_class=BasicSearchWorkflow)
14
11
 
15
12
  serialized_workflow: dict = workflow_display.serialize()
16
13
 
17
14
  # THEN we should get a serialized representation of the workflow
18
- assert serialized_workflow.keys() == {"workflow_raw_data", "input_variables", "state_variables", "output_variables"}
15
+ assert serialized_workflow.keys() == {
16
+ "workflow_raw_data",
17
+ "input_variables",
18
+ "state_variables",
19
+ "output_variables",
20
+ }
19
21
 
20
22
  # AND its input variables should be what we expect
21
23
  input_variables = serialized_workflow["input_variables"]
@@ -4,7 +4,6 @@ from uuid import uuid4
4
4
  from deepdiff import DeepDiff
5
5
 
6
6
  from vellum import WorkflowDeploymentRead
7
- from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
8
7
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
9
8
 
10
9
  from tests.workflows.basic_subworkflow_deployment.workflow import BasicSubworkflowDeploymentWorkflow
@@ -25,9 +24,7 @@ def test_serialize_workflow(vellum_client):
25
24
  vellum_client.workflow_deployments.retrieve.return_value = deployment
26
25
 
27
26
  # WHEN we serialize it
28
- workflow_display = get_workflow_display(
29
- base_display_class=VellumWorkflowDisplay, workflow_class=BasicSubworkflowDeploymentWorkflow
30
- )
27
+ workflow_display = get_workflow_display(workflow_class=BasicSubworkflowDeploymentWorkflow)
31
28
  serialized_workflow: dict = workflow_display.serialize()
32
29
 
33
30
  # THEN we should get a serialized representation of the Workflow
@@ -1,6 +1,5 @@
1
1
  from deepdiff import DeepDiff
2
2
 
3
- from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
4
3
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
5
4
 
6
5
  from tests.workflows.basic_templating_node.workflow_with_json_input import BasicTemplatingNodeWorkflowWithJson
@@ -10,9 +9,7 @@ def test_serialize_workflow():
10
9
  # GIVEN a Workflow that uses a vellum templating node",
11
10
 
12
11
  # WHEN we serialize it
13
- workflow_display = get_workflow_display(
14
- base_display_class=VellumWorkflowDisplay, workflow_class=BasicTemplatingNodeWorkflowWithJson
15
- )
12
+ workflow_display = get_workflow_display(workflow_class=BasicTemplatingNodeWorkflowWithJson)
16
13
 
17
14
  serialized_workflow: dict = workflow_display.serialize()
18
15
 
@@ -1,4 +1,3 @@
1
- from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
2
1
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
3
2
 
4
3
  from tests.workflows.basic_final_output_node.workflow import BasicFinalOutputNodeWorkflow
@@ -7,9 +6,7 @@ from tests.workflows.basic_final_output_node.workflow import BasicFinalOutputNod
7
6
  def test_serialize_workflow():
8
7
  # GIVEN a Workflow that uses a Final Output Node
9
8
  # WHEN we serialize it
10
- workflow_display = get_workflow_display(
11
- base_display_class=VellumWorkflowDisplay, workflow_class=BasicFinalOutputNodeWorkflow
12
- )
9
+ workflow_display = get_workflow_display(workflow_class=BasicFinalOutputNodeWorkflow)
13
10
  serialized_workflow: dict = workflow_display.serialize()
14
11
 
15
12
  # THEN we should get a serialized representation of the Workflow
@@ -2,7 +2,6 @@ import pytest
2
2
 
3
3
  from deepdiff import DeepDiff
4
4
 
5
- from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
6
5
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
7
6
 
8
7
  from tests.workflows.basic_try_node.workflow import SimpleTryExample, StandaloneTryExample
@@ -11,7 +10,7 @@ from tests.workflows.basic_try_node.workflow import SimpleTryExample, Standalone
11
10
  def test_serialize_workflow():
12
11
  # GIVEN a Workflow with a TryNode
13
12
  # WHEN we serialize it
14
- workflow_display = get_workflow_display(base_display_class=VellumWorkflowDisplay, workflow_class=SimpleTryExample)
13
+ workflow_display = get_workflow_display(workflow_class=SimpleTryExample)
15
14
  serialized_workflow: dict = workflow_display.serialize()
16
15
 
17
16
  # THEN we should get a serialized representation of the Workflow
@@ -77,9 +76,7 @@ def test_serialize_workflow__standalone():
77
76
  # GIVEN a Workflow with a standalone TryNode
78
77
  # WHEN we serialize it
79
78
  with pytest.raises(NotImplementedError) as exc:
80
- workflow_display = get_workflow_display(
81
- base_display_class=VellumWorkflowDisplay, workflow_class=StandaloneTryExample
82
- )
79
+ workflow_display = get_workflow_display(workflow_class=StandaloneTryExample)
83
80
  workflow_display.serialize()
84
81
 
85
82
  # THEN we should get an error