vellum-ai 0.14.71__py3-none-any.whl → 0.14.73__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 +8 -0
- vellum/client/core/client_wrapper.py +1 -1
- vellum/client/core/serialization.py +1 -0
- vellum/client/types/__init__.py +8 -0
- vellum/client/types/build_status_enum.py +5 -0
- vellum/client/types/container_image_build_config.py +20 -0
- vellum/client/types/container_image_read.py +4 -0
- vellum/client/types/execute_api_response.py +2 -2
- vellum/client/types/folder_entity.py +2 -0
- vellum/client/types/folder_entity_dataset.py +26 -0
- vellum/client/types/folder_entity_dataset_data.py +25 -0
- vellum/plugins/vellum_mypy.py +1 -1
- vellum/types/build_status_enum.py +3 -0
- vellum/types/container_image_build_config.py +3 -0
- vellum/types/folder_entity_dataset.py +3 -0
- vellum/types/folder_entity_dataset_data.py +3 -0
- vellum/workflows/events/__init__.py +2 -0
- vellum/workflows/events/stream.py +28 -0
- vellum/workflows/events/workflow.py +3 -2
- vellum/workflows/nodes/core/retry_node/tests/test_node.py +1 -1
- vellum/workflows/nodes/displayable/api_node/node.py +2 -0
- vellum/workflows/nodes/displayable/api_node/tests/test_api_node.py +43 -0
- vellum/workflows/nodes/displayable/bases/api_node/node.py +6 -0
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py +30 -4
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/test_inline_prompt_node.py +43 -3
- vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py +68 -58
- vellum/workflows/nodes/experimental/tool_calling_node/node.py +11 -11
- vellum/workflows/nodes/experimental/tool_calling_node/tests/__init__.py +0 -0
- vellum/workflows/nodes/experimental/tool_calling_node/tests/test_utils.py +49 -0
- vellum/workflows/nodes/experimental/tool_calling_node/utils.py +69 -8
- vellum/workflows/ports/utils.py +26 -6
- vellum/workflows/runner/runner.py +56 -6
- vellum/workflows/types/core.py +12 -0
- vellum/workflows/types/definition.py +6 -0
- vellum/workflows/utils/functions.py +64 -10
- vellum/workflows/utils/pydantic_schema.py +38 -0
- vellum/workflows/utils/tests/test_functions.py +161 -11
- vellum/workflows/utils/tests/test_vellum_variables.py +25 -1
- vellum/workflows/utils/vellum_variables.py +30 -0
- vellum/workflows/workflows/base.py +11 -5
- {vellum_ai-0.14.71.dist-info → vellum_ai-0.14.73.dist-info}/METADATA +1 -1
- {vellum_ai-0.14.71.dist-info → vellum_ai-0.14.73.dist-info}/RECORD +77 -64
- vellum_cli/image_push.py +1 -5
- vellum_cli/push.py +12 -7
- vellum_cli/tests/test_image_push.py +1 -2
- vellum_cli/tests/test_push.py +33 -2
- vellum_ee/workflows/display/nodes/utils.py +2 -2
- vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py +8 -1
- vellum_ee/workflows/display/tests/test_base_workflow_display.py +1 -1
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py +1 -1
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +1 -1
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py +5 -5
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py +12 -12
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py +10 -10
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py +3 -3
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py +3 -3
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py +20 -9
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py +3 -3
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py +3 -3
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py +8 -8
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +6 -6
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py +3 -3
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py +8 -8
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py +3 -3
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py +4 -4
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py +3 -3
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py +2 -2
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py +5 -5
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py +1 -1
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py +1 -1
- vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py +2 -2
- vellum_ee/workflows/display/utils/auto_layout.py +1 -1
- vellum_ee/workflows/display/workflows/base_workflow_display.py +179 -4
- vellum_ee/workflows/tests/test_serialize_module.py +47 -0
- {vellum_ai-0.14.71.dist-info → vellum_ai-0.14.73.dist-info}/LICENSE +0 -0
- {vellum_ai-0.14.71.dist-info → vellum_ai-0.14.73.dist-info}/WHEEL +0 -0
- {vellum_ai-0.14.71.dist-info → vellum_ai-0.14.73.dist-info}/entry_points.txt +0 -0
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py
CHANGED
@@ -64,7 +64,7 @@ def test_serialize_workflow(vellum_client):
|
|
64
64
|
"type": "ENTRYPOINT",
|
65
65
|
"inputs": [],
|
66
66
|
"data": {"label": "Entrypoint Node", "source_handle_id": "8eaa7f02-25ff-4a00-9b0a-5185718d89b3"},
|
67
|
-
"display_data": {"position": {"x": 0.0, "y":
|
67
|
+
"display_data": {"position": {"x": 0.0, "y": -50.0}},
|
68
68
|
"base": None,
|
69
69
|
"definition": None,
|
70
70
|
}
|
@@ -184,7 +184,7 @@ def test_serialize_workflow(vellum_client):
|
|
184
184
|
"json_output_id": "12e4a99d-883d-4da5-aa51-35817d94013e",
|
185
185
|
"status_code_output_id": "fecc16c3-400e-4fd3-8223-08366070e3b1",
|
186
186
|
},
|
187
|
-
"display_data": {"position": {"x":
|
187
|
+
"display_data": {"position": {"x": 200.0, "y": -50.0}},
|
188
188
|
"base": {
|
189
189
|
"name": "APINode",
|
190
190
|
"module": ["vellum", "workflows", "nodes", "displayable", "api_node", "node"],
|
@@ -230,7 +230,7 @@ def test_serialize_workflow(vellum_client):
|
|
230
230
|
},
|
231
231
|
}
|
232
232
|
],
|
233
|
-
"display_data": {"position": {"x":
|
233
|
+
"display_data": {"position": {"x": 400.0, "y": 200.0}},
|
234
234
|
"base": {
|
235
235
|
"name": "FinalOutputNode",
|
236
236
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -266,7 +266,7 @@ def test_serialize_workflow(vellum_client):
|
|
266
266
|
},
|
267
267
|
}
|
268
268
|
],
|
269
|
-
"display_data": {"position": {"x":
|
269
|
+
"display_data": {"position": {"x": 400.0, "y": -50.0}},
|
270
270
|
"base": {
|
271
271
|
"name": "FinalOutputNode",
|
272
272
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -302,7 +302,7 @@ def test_serialize_workflow(vellum_client):
|
|
302
302
|
},
|
303
303
|
}
|
304
304
|
],
|
305
|
-
"display_data": {"position": {"x":
|
305
|
+
"display_data": {"position": {"x": 400.0, "y": -300.0}},
|
306
306
|
"base": {
|
307
307
|
"name": "FinalOutputNode",
|
308
308
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -50,7 +50,7 @@ def test_serialize_workflow_with_filepath():
|
|
50
50
|
"type": "ENTRYPOINT",
|
51
51
|
"inputs": [],
|
52
52
|
"data": {"label": "Entrypoint Node", "source_handle_id": "118e4298-aa79-467c-b8b4-2df540905e86"},
|
53
|
-
"display_data": {"position": {"x": 0.0, "y":
|
53
|
+
"display_data": {"position": {"x": 0.0, "y": -50.0}},
|
54
54
|
"base": None,
|
55
55
|
"definition": None,
|
56
56
|
}
|
@@ -94,7 +94,7 @@ def test_serialize_workflow_with_filepath():
|
|
94
94
|
"output_id": "0fde9607-353f-42c2-85c4-20f720ebc1ec",
|
95
95
|
"log_output_id": "7cac05e3-b7c3-475e-8df8-422b496c3398",
|
96
96
|
},
|
97
|
-
"display_data": {"position": {"x":
|
97
|
+
"display_data": {"position": {"x": 200.0, "y": -50.0}},
|
98
98
|
"base": {
|
99
99
|
"module": [
|
100
100
|
"vellum",
|
@@ -143,7 +143,7 @@ def test_serialize_workflow_with_filepath():
|
|
143
143
|
},
|
144
144
|
}
|
145
145
|
],
|
146
|
-
"display_data": {"position": {"x":
|
146
|
+
"display_data": {"position": {"x": 400.0, "y": -175.0}},
|
147
147
|
"base": {
|
148
148
|
"name": "FinalOutputNode",
|
149
149
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -179,7 +179,7 @@ def test_serialize_workflow_with_filepath():
|
|
179
179
|
},
|
180
180
|
}
|
181
181
|
],
|
182
|
-
"display_data": {"position": {"x":
|
182
|
+
"display_data": {"position": {"x": 400.0, "y": 75.0}},
|
183
183
|
"base": {
|
184
184
|
"name": "FinalOutputNode",
|
185
185
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -289,7 +289,7 @@ def test_serialize_workflow_with_code():
|
|
289
289
|
"type": "ENTRYPOINT",
|
290
290
|
"inputs": [],
|
291
291
|
"data": {"label": "Entrypoint Node", "source_handle_id": "e82390bb-c68c-48c1-9f87-7fbfff494c45"},
|
292
|
-
"display_data": {"position": {"x": 0.0, "y":
|
292
|
+
"display_data": {"position": {"x": 0.0, "y": -50.0}},
|
293
293
|
"base": None,
|
294
294
|
"definition": None,
|
295
295
|
}
|
@@ -333,7 +333,7 @@ def test_serialize_workflow_with_code():
|
|
333
333
|
"output_id": "0fde9607-353f-42c2-85c4-20f720ebc1ec",
|
334
334
|
"log_output_id": "7cac05e3-b7c3-475e-8df8-422b496c3398",
|
335
335
|
},
|
336
|
-
"display_data": {"position": {"x":
|
336
|
+
"display_data": {"position": {"x": 200.0, "y": -50.0}},
|
337
337
|
"base": {
|
338
338
|
"name": "CodeExecutionNode",
|
339
339
|
"module": ["vellum", "workflows", "nodes", "displayable", "code_execution_node", "node"],
|
@@ -375,7 +375,7 @@ def test_serialize_workflow_with_code():
|
|
375
375
|
},
|
376
376
|
}
|
377
377
|
],
|
378
|
-
"display_data": {"position": {"x":
|
378
|
+
"display_data": {"position": {"x": 400.0, "y": -175.0}},
|
379
379
|
"base": {
|
380
380
|
"name": "FinalOutputNode",
|
381
381
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -411,7 +411,7 @@ def test_serialize_workflow_with_code():
|
|
411
411
|
},
|
412
412
|
}
|
413
413
|
],
|
414
|
-
"display_data": {"position": {"x":
|
414
|
+
"display_data": {"position": {"x": 400.0, "y": 75.0}},
|
415
415
|
"base": {
|
416
416
|
"name": "FinalOutputNode",
|
417
417
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -522,7 +522,7 @@ def test_serialize_workflow__try_wrapped():
|
|
522
522
|
"base": None,
|
523
523
|
"definition": None,
|
524
524
|
"display_data": {
|
525
|
-
"position": {"x": 0.0, "y":
|
525
|
+
"position": {"x": 0.0, "y": -50.0},
|
526
526
|
},
|
527
527
|
}
|
528
528
|
|
@@ -565,7 +565,7 @@ def test_serialize_workflow__try_wrapped():
|
|
565
565
|
"output_id": "0fde9607-353f-42c2-85c4-20f720ebc1ec",
|
566
566
|
"log_output_id": "7cac05e3-b7c3-475e-8df8-422b496c3398",
|
567
567
|
},
|
568
|
-
"display_data": {"position": {"x":
|
568
|
+
"display_data": {"position": {"x": 200.0, "y": -50.0}},
|
569
569
|
"base": {
|
570
570
|
"module": [
|
571
571
|
"vellum",
|
@@ -637,7 +637,7 @@ def test_serialize_workflow__try_wrapped():
|
|
637
637
|
},
|
638
638
|
}
|
639
639
|
],
|
640
|
-
"display_data": {"position": {"x":
|
640
|
+
"display_data": {"position": {"x": 400.0, "y": 75.0}},
|
641
641
|
"base": {
|
642
642
|
"name": "FinalOutputNode",
|
643
643
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -673,7 +673,7 @@ def test_serialize_workflow__try_wrapped():
|
|
673
673
|
},
|
674
674
|
}
|
675
675
|
],
|
676
|
-
"display_data": {"position": {"x":
|
676
|
+
"display_data": {"position": {"x": 400.0, "y": -175.0}},
|
677
677
|
"base": {
|
678
678
|
"name": "FinalOutputNode",
|
679
679
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -111,7 +111,7 @@ def test_serialize_workflow():
|
|
111
111
|
"source_handle_id": "c2f0871d-0d9d-417f-8b0e-c813ccf880ac",
|
112
112
|
},
|
113
113
|
"display_data": {
|
114
|
-
"position": {"x": 0.0, "y":
|
114
|
+
"position": {"x": 0.0, "y": -50.0},
|
115
115
|
},
|
116
116
|
}
|
117
117
|
|
@@ -415,7 +415,7 @@ def test_serialize_workflow():
|
|
415
415
|
],
|
416
416
|
"version": "2",
|
417
417
|
},
|
418
|
-
"display_data": {"position": {"x":
|
418
|
+
"display_data": {"position": {"x": 200.0, "y": -50.0}},
|
419
419
|
"base": {
|
420
420
|
"name": "ConditionalNode",
|
421
421
|
"module": ["vellum", "workflows", "nodes", "displayable", "conditional_node", "node"],
|
@@ -544,7 +544,7 @@ def test_serialize_workflow():
|
|
544
544
|
},
|
545
545
|
}
|
546
546
|
],
|
547
|
-
"display_data": {"position": {"x":
|
547
|
+
"display_data": {"position": {"x": 600.0, "y": -50.0}},
|
548
548
|
"base": {
|
549
549
|
"name": "FinalOutputNode",
|
550
550
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -580,7 +580,7 @@ def test_serialize_workflow():
|
|
580
580
|
},
|
581
581
|
}
|
582
582
|
],
|
583
|
-
"display_data": {"position": {"x":
|
583
|
+
"display_data": {"position": {"x": 600.0, "y": -550.0}},
|
584
584
|
"base": {
|
585
585
|
"name": "FinalOutputNode",
|
586
586
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -616,7 +616,7 @@ def test_serialize_workflow():
|
|
616
616
|
},
|
617
617
|
}
|
618
618
|
],
|
619
|
-
"display_data": {"position": {"x":
|
619
|
+
"display_data": {"position": {"x": 600.0, "y": 200.0}},
|
620
620
|
"base": {
|
621
621
|
"name": "FinalOutputNode",
|
622
622
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -652,7 +652,7 @@ def test_serialize_workflow():
|
|
652
652
|
},
|
653
653
|
}
|
654
654
|
],
|
655
|
-
"display_data": {"position": {"x":
|
655
|
+
"display_data": {"position": {"x": 600.0, "y": -300.0}},
|
656
656
|
"base": {
|
657
657
|
"name": "FinalOutputNode",
|
658
658
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -688,7 +688,7 @@ def test_serialize_workflow():
|
|
688
688
|
},
|
689
689
|
}
|
690
690
|
],
|
691
|
-
"display_data": {"position": {"x":
|
691
|
+
"display_data": {"position": {"x": 600.0, "y": 450.0}},
|
692
692
|
"base": {
|
693
693
|
"name": "FinalOutputNode",
|
694
694
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -943,7 +943,7 @@ def test_conditional_node_serialize_all_operators_with_lhs_and_rhs(descriptor, o
|
|
943
943
|
],
|
944
944
|
"version": "2",
|
945
945
|
},
|
946
|
-
"display_data": {"position": {"x":
|
946
|
+
"display_data": {"position": {"x": 200.0, "y": -50.0}},
|
947
947
|
"base": {
|
948
948
|
"name": "ConditionalNode",
|
949
949
|
"module": ["vellum", "workflows", "nodes", "displayable", "conditional_node", "node"],
|
@@ -1054,7 +1054,7 @@ def test_conditional_node_serialize_all_operators_with_expression(descriptor, op
|
|
1054
1054
|
],
|
1055
1055
|
"version": "2",
|
1056
1056
|
},
|
1057
|
-
"display_data": {"position": {"x":
|
1057
|
+
"display_data": {"position": {"x": 200.0, "y": -50.0}},
|
1058
1058
|
"base": {
|
1059
1059
|
"name": "ConditionalNode",
|
1060
1060
|
"module": ["vellum", "workflows", "nodes", "displayable", "conditional_node", "node"],
|
@@ -1177,7 +1177,7 @@ def test_conditional_node_serialize_all_operators_with_value_and_start_and_end(d
|
|
1177
1177
|
],
|
1178
1178
|
"version": "2",
|
1179
1179
|
},
|
1180
|
-
"display_data": {"position": {"x":
|
1180
|
+
"display_data": {"position": {"x": 200.0, "y": -50.0}},
|
1181
1181
|
"base": {
|
1182
1182
|
"name": "ConditionalNode",
|
1183
1183
|
"module": ["vellum", "workflows", "nodes", "displayable", "conditional_node", "node"],
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py
CHANGED
@@ -93,7 +93,7 @@ def test_serialize_workflow():
|
|
93
93
|
"base": None,
|
94
94
|
"definition": None,
|
95
95
|
"display_data": {
|
96
|
-
"position": {"x": 0.0, "y":
|
96
|
+
"position": {"x": 0.0, "y": -50.0},
|
97
97
|
},
|
98
98
|
}
|
99
99
|
|
@@ -133,7 +133,7 @@ def test_serialize_workflow():
|
|
133
133
|
},
|
134
134
|
}
|
135
135
|
],
|
136
|
-
"display_data": {"position": {"x":
|
136
|
+
"display_data": {"position": {"x": 400.0, "y": -175.0}},
|
137
137
|
"base": {
|
138
138
|
"name": "FinalOutputNode",
|
139
139
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -173,7 +173,7 @@ def test_serialize_workflow():
|
|
173
173
|
},
|
174
174
|
}
|
175
175
|
],
|
176
|
-
"display_data": {"position": {"x":
|
176
|
+
"display_data": {"position": {"x": 400.0, "y": 75.0}},
|
177
177
|
"base": {
|
178
178
|
"name": "FinalOutputNode",
|
179
179
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py
CHANGED
@@ -68,7 +68,7 @@ def test_serialize_workflow():
|
|
68
68
|
"label": "Entrypoint Node",
|
69
69
|
"source_handle_id": "7d86498b-84ed-4feb-8e62-2188058c2c4e",
|
70
70
|
},
|
71
|
-
"display_data": {"position": {"x": 0.0, "y":
|
71
|
+
"display_data": {"position": {"x": 0.0, "y": -50.0}},
|
72
72
|
"base": None,
|
73
73
|
"definition": None,
|
74
74
|
}
|
@@ -105,7 +105,7 @@ def test_serialize_workflow():
|
|
105
105
|
"target_handle_id": "70c19f1c-309c-4a5d-ba65-664c0bb2fedf",
|
106
106
|
"error_source_input_id": "8e4c8d76-2e02-4d7e-a7bf-d71af392dc49",
|
107
107
|
},
|
108
|
-
"display_data": {"position": {"x":
|
108
|
+
"display_data": {"position": {"x": 400.0, "y": 75.0}},
|
109
109
|
"base": {
|
110
110
|
"name": "ErrorNode",
|
111
111
|
"module": ["vellum", "workflows", "nodes", "core", "error_node", "node"],
|
@@ -153,7 +153,7 @@ def test_serialize_workflow():
|
|
153
153
|
},
|
154
154
|
}
|
155
155
|
],
|
156
|
-
"display_data": {"position": {"x":
|
156
|
+
"display_data": {"position": {"x": 600.0, "y": -50.0}},
|
157
157
|
"base": {
|
158
158
|
"name": "FinalOutputNode",
|
159
159
|
"module": [
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py
CHANGED
@@ -56,15 +56,15 @@ def test_serialize_workflow():
|
|
56
56
|
|
57
57
|
# AND each node should be serialized correctly
|
58
58
|
entrypoint_node = workflow_raw_data["nodes"][0]
|
59
|
-
assert entrypoint_node ==
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
"
|
64
|
-
"
|
65
|
-
"base": None,
|
66
|
-
"definition": None,
|
59
|
+
assert entrypoint_node["id"] == "f1e4678f-c470-400b-a40e-c8922cc99a86"
|
60
|
+
assert entrypoint_node["type"] == "ENTRYPOINT"
|
61
|
+
assert entrypoint_node["inputs"] == []
|
62
|
+
assert entrypoint_node["data"] == {
|
63
|
+
"label": "Entrypoint Node",
|
64
|
+
"source_handle_id": "40201804-8beb-43ad-8873-a027759512f1",
|
67
65
|
}
|
66
|
+
assert entrypoint_node["base"] is None
|
67
|
+
assert entrypoint_node["definition"] is None
|
68
68
|
|
69
69
|
api_node = workflow_raw_data["nodes"][1]
|
70
70
|
assert api_node["id"] == "c2ed23f7-f6cb-4a56-a91c-2e5f9d8fda7f"
|
@@ -100,7 +100,7 @@ def test_serialize_workflow():
|
|
100
100
|
},
|
101
101
|
}
|
102
102
|
],
|
103
|
-
"display_data": {"position": {"x":
|
103
|
+
"display_data": {"position": {"x": 400.0, "y": -50.0}},
|
104
104
|
"base": {
|
105
105
|
"name": "FinalOutputNode",
|
106
106
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -146,6 +146,17 @@ def test_serialize_workflow():
|
|
146
146
|
}
|
147
147
|
}
|
148
148
|
|
149
|
+
# AND the nodes should have been auto-positioned since they all started at (0,0)
|
150
|
+
nodes = workflow_raw_data["nodes"]
|
151
|
+
positions = [node["display_data"]["position"] for node in nodes]
|
152
|
+
|
153
|
+
nodes_at_zero = sum(1 for pos in positions if pos["x"] == 0.0 and pos["y"] == 0.0)
|
154
|
+
assert nodes_at_zero < len(nodes), "Auto layout should have positioned nodes away from (0,0)"
|
155
|
+
|
156
|
+
x_positions = [pos["x"] for pos in positions]
|
157
|
+
assert all(x >= 0 for x in x_positions), "All x positions should be non-negative"
|
158
|
+
assert len(set(x_positions)) > 1 or len(nodes) == 1, "Nodes should be spread across different x positions"
|
159
|
+
|
149
160
|
# AND the definition should be what we expect
|
150
161
|
definition = workflow_raw_data["definition"]
|
151
162
|
assert definition == {
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py
CHANGED
@@ -65,7 +65,7 @@ def test_serialize_workflow():
|
|
65
65
|
"definition": None,
|
66
66
|
"inputs": [],
|
67
67
|
"data": {"label": "Entrypoint Node", "source_handle_id": "41840690-8d85-486e-a864-b0661ccf0f2e"},
|
68
|
-
"display_data": {"position": {"x": 0.0, "y":
|
68
|
+
"display_data": {"position": {"x": 0.0, "y": -50.0}},
|
69
69
|
}
|
70
70
|
|
71
71
|
guardrail_node = workflow_raw_data["nodes"][1]
|
@@ -108,7 +108,7 @@ def test_serialize_workflow():
|
|
108
108
|
"metric_definition_id": "example_metric_definition",
|
109
109
|
"release_tag": "LATEST",
|
110
110
|
},
|
111
|
-
"display_data": {"position": {"x":
|
111
|
+
"display_data": {"position": {"x": 200.0, "y": -50.0}},
|
112
112
|
"base": {
|
113
113
|
"module": ["vellum", "workflows", "nodes", "displayable", "guardrail_node", "node"],
|
114
114
|
"name": "GuardrailNode",
|
@@ -162,7 +162,7 @@ def test_serialize_workflow():
|
|
162
162
|
},
|
163
163
|
}
|
164
164
|
],
|
165
|
-
"display_data": {"position": {"x":
|
165
|
+
"display_data": {"position": {"x": 400.0, "y": -50.0}},
|
166
166
|
}
|
167
167
|
|
168
168
|
# AND each edge should be serialized correctly
|
@@ -63,7 +63,7 @@ def test_serialize_workflow():
|
|
63
63
|
"type": "ENTRYPOINT",
|
64
64
|
"inputs": [],
|
65
65
|
"data": {"label": "Entrypoint Node", "source_handle_id": "8294baa6-8bf4-4b54-a56b-407b64851b77"},
|
66
|
-
"display_data": {"position": {"x": 0.0, "y":
|
66
|
+
"display_data": {"position": {"x": 0.0, "y": -50.0}},
|
67
67
|
"base": None,
|
68
68
|
"definition": None,
|
69
69
|
}
|
@@ -153,7 +153,7 @@ def test_serialize_workflow():
|
|
153
153
|
},
|
154
154
|
"ml_model_name": "gpt-4o",
|
155
155
|
},
|
156
|
-
"display_data": {"position": {"x":
|
156
|
+
"display_data": {"position": {"x": 200.0, "y": -50.0}},
|
157
157
|
"base": {
|
158
158
|
"name": "InlinePromptNode",
|
159
159
|
"module": ["vellum", "workflows", "nodes", "displayable", "inline_prompt_node", "node"],
|
@@ -277,7 +277,7 @@ def test_serialize_workflow():
|
|
277
277
|
},
|
278
278
|
}
|
279
279
|
],
|
280
|
-
"display_data": {"position": {"x":
|
280
|
+
"display_data": {"position": {"x": 400.0, "y": -50.0}},
|
281
281
|
"base": {
|
282
282
|
"name": "FinalOutputNode",
|
283
283
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -83,7 +83,7 @@ def test_serialize_workflow():
|
|
83
83
|
"source_handle_id": "c344fdee-282b-40c9-8c97-6dd08830948c",
|
84
84
|
},
|
85
85
|
"display_data": {
|
86
|
-
"position": {"x": 0.0, "y":
|
86
|
+
"position": {"x": 0.0, "y": -50.0},
|
87
87
|
},
|
88
88
|
}
|
89
89
|
|
@@ -123,7 +123,7 @@ def test_serialize_workflow():
|
|
123
123
|
"label": "Entrypoint Node",
|
124
124
|
"source_handle_id": "9914a6a0-9a99-430d-8ddd-f7c13847fe1a",
|
125
125
|
},
|
126
|
-
"display_data": {"position": {"x": 0.0, "y":
|
126
|
+
"display_data": {"position": {"x": 0.0, "y": -50.0}},
|
127
127
|
"base": None,
|
128
128
|
"definition": None,
|
129
129
|
},
|
@@ -131,7 +131,7 @@ def test_serialize_workflow():
|
|
131
131
|
"id": "1381c078-efa2-4255-89a1-7b4cb742c7fc",
|
132
132
|
"label": "StartNode",
|
133
133
|
"type": "GENERIC",
|
134
|
-
"display_data": {"position": {"x":
|
134
|
+
"display_data": {"position": {"x": 200.0, "y": -50.0}},
|
135
135
|
"base": {"name": "BaseNode", "module": ["vellum", "workflows", "nodes", "bases", "base"]},
|
136
136
|
"definition": {
|
137
137
|
"name": "StartNode",
|
@@ -207,7 +207,7 @@ def test_serialize_workflow():
|
|
207
207
|
},
|
208
208
|
}
|
209
209
|
],
|
210
|
-
"display_data": {"position": {"x":
|
210
|
+
"display_data": {"position": {"x": 400.0, "y": 75.0}},
|
211
211
|
"base": {
|
212
212
|
"name": "FinalOutputNode",
|
213
213
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -243,7 +243,7 @@ def test_serialize_workflow():
|
|
243
243
|
},
|
244
244
|
}
|
245
245
|
],
|
246
|
-
"display_data": {"position": {"x":
|
246
|
+
"display_data": {"position": {"x": 400.0, "y": -175.0}},
|
247
247
|
"base": {
|
248
248
|
"name": "FinalOutputNode",
|
249
249
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -315,7 +315,7 @@ def test_serialize_workflow():
|
|
315
315
|
{"id": "fad5dd9f-3328-4e70-ad55-65a5325a4a82", "key": "reasoning", "type": "STRING"},
|
316
316
|
],
|
317
317
|
},
|
318
|
-
"display_data": {"position": {"x":
|
318
|
+
"display_data": {"position": {"x": 200.0, "y": -50.0}},
|
319
319
|
"base": {
|
320
320
|
"name": "InlineSubworkflowNode",
|
321
321
|
"module": ["vellum", "workflows", "nodes", "core", "inline_subworkflow_node", "node"],
|
@@ -366,7 +366,7 @@ def test_serialize_workflow():
|
|
366
366
|
},
|
367
367
|
}
|
368
368
|
],
|
369
|
-
"display_data": {"position": {"x":
|
369
|
+
"display_data": {"position": {"x": 400.0, "y": 75.0}},
|
370
370
|
"base": {
|
371
371
|
"name": "FinalOutputNode",
|
372
372
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
@@ -410,7 +410,7 @@ def test_serialize_workflow():
|
|
410
410
|
},
|
411
411
|
}
|
412
412
|
],
|
413
|
-
"display_data": {"position": {"x":
|
413
|
+
"display_data": {"position": {"x": 400.0, "y": -175.0}},
|
414
414
|
"base": {
|
415
415
|
"name": "FinalOutputNode",
|
416
416
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py
CHANGED
@@ -70,7 +70,7 @@ def test_serialize_workflow():
|
|
70
70
|
"base": None,
|
71
71
|
"definition": None,
|
72
72
|
"display_data": {
|
73
|
-
"position": {"x": 0.0, "y":
|
73
|
+
"position": {"x": 0.0, "y": -50.0},
|
74
74
|
},
|
75
75
|
}
|
76
76
|
|
@@ -110,7 +110,7 @@ def test_serialize_workflow():
|
|
110
110
|
"label": "Entrypoint Node",
|
111
111
|
"source_handle_id": "520d3616-8369-4e79-9da5-3febae299c2a",
|
112
112
|
},
|
113
|
-
"display_data": {"position": {"x": 0.0, "y":
|
113
|
+
"display_data": {"position": {"x": 0.0, "y": -50.0}},
|
114
114
|
"base": None,
|
115
115
|
"definition": None,
|
116
116
|
},
|
@@ -118,7 +118,7 @@ def test_serialize_workflow():
|
|
118
118
|
"id": "baf6d316-dc75-41e8-96c0-015aede96309",
|
119
119
|
"label": "Iteration",
|
120
120
|
"type": "GENERIC",
|
121
|
-
"display_data": {"position": {"x":
|
121
|
+
"display_data": {"position": {"x": 200.0, "y": -50.0}},
|
122
122
|
"base": {
|
123
123
|
"name": "BaseNode",
|
124
124
|
"module": ["vellum", "workflows", "nodes", "bases", "base"],
|
@@ -191,7 +191,7 @@ def test_serialize_workflow():
|
|
191
191
|
},
|
192
192
|
}
|
193
193
|
],
|
194
|
-
"display_data": {"position": {"x":
|
194
|
+
"display_data": {"position": {"x": 400.0, "y": -50.0}},
|
195
195
|
"base": {
|
196
196
|
"name": "FinalOutputNode",
|
197
197
|
"module": [
|
@@ -277,7 +277,7 @@ def test_serialize_workflow():
|
|
277
277
|
"item_input_id": "b29bb546-9bc8-4136-857d-8c7a464ba9d4",
|
278
278
|
"index_input_id": "17e7ca49-668f-450d-a792-e1f97d13db67",
|
279
279
|
},
|
280
|
-
"display_data": {"position": {"x":
|
280
|
+
"display_data": {"position": {"x": 200.0, "y": -50.0}},
|
281
281
|
"base": {
|
282
282
|
"name": "MapNode",
|
283
283
|
"module": ["vellum", "workflows", "nodes", "core", "map_node", "node"],
|
@@ -322,7 +322,7 @@ def test_serialize_workflow():
|
|
322
322
|
},
|
323
323
|
}
|
324
324
|
],
|
325
|
-
"display_data": {"position": {"x":
|
325
|
+
"display_data": {"position": {"x": 400.0, "y": -50.0}},
|
326
326
|
"base": {
|
327
327
|
"module": [
|
328
328
|
"vellum",
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py
CHANGED
@@ -52,7 +52,7 @@ def test_serialize_workflow__await_all():
|
|
52
52
|
"source_handle_id": "017d40f5-8326-4e42-a409-b08995defaa8",
|
53
53
|
},
|
54
54
|
"display_data": {
|
55
|
-
"position": {"x": 0.0, "y":
|
55
|
+
"position": {"x": 0.0, "y": -50.0},
|
56
56
|
},
|
57
57
|
}
|
58
58
|
|
@@ -74,7 +74,7 @@ def test_serialize_workflow__await_all():
|
|
74
74
|
],
|
75
75
|
"source_handle_id": "3bbc469f-0fb0-4b3d-a28b-746fefec2818",
|
76
76
|
},
|
77
|
-
"display_data": {"position": {"x":
|
77
|
+
"display_data": {"position": {"x": 400.0, "y": -50.0}},
|
78
78
|
"base": {
|
79
79
|
"module": ["vellum", "workflows", "nodes", "displayable", "merge_node", "node"],
|
80
80
|
"name": "MergeNode",
|
@@ -131,7 +131,7 @@ def test_serialize_workflow__await_all():
|
|
131
131
|
},
|
132
132
|
}
|
133
133
|
],
|
134
|
-
"display_data": {"position": {"x":
|
134
|
+
"display_data": {"position": {"x": 800.0, "y": -50.0}},
|
135
135
|
}
|
136
136
|
|
137
137
|
# AND each edge should be serialized correctly
|
@@ -93,7 +93,7 @@ def test_serialize_workflow(vellum_client):
|
|
93
93
|
"source_handle_id": "7065a943-1cab-4afd-9690-e678c5b74a2f",
|
94
94
|
},
|
95
95
|
"display_data": {
|
96
|
-
"position": {"x": 0.0, "y":
|
96
|
+
"position": {"x": 0.0, "y": -50.0},
|
97
97
|
},
|
98
98
|
}
|
99
99
|
|
@@ -141,7 +141,7 @@ def test_serialize_workflow(vellum_client):
|
|
141
141
|
"release_tag": "LATEST",
|
142
142
|
"ml_model_fallbacks": ["gpt-4o", "gemini-1.5-pro"],
|
143
143
|
},
|
144
|
-
"display_data": {"position": {"x":
|
144
|
+
"display_data": {"position": {"x": 200.0, "y": -50.0}},
|
145
145
|
"base": {
|
146
146
|
"name": "PromptDeploymentNode",
|
147
147
|
"module": ["vellum", "workflows", "nodes", "displayable", "prompt_deployment_node", "node"],
|
@@ -202,8 +202,8 @@ def test_serialize_workflow(vellum_client):
|
|
202
202
|
},
|
203
203
|
"display_data": {
|
204
204
|
"position": {
|
205
|
-
"x":
|
206
|
-
"y":
|
205
|
+
"x": 400.0,
|
206
|
+
"y": -50.0,
|
207
207
|
},
|
208
208
|
},
|
209
209
|
}
|
@@ -321,7 +321,7 @@ def test_serialize_workflow_with_prompt_and_templating(vellum_client):
|
|
321
321
|
"type": "ENTRYPOINT",
|
322
322
|
"inputs": [],
|
323
323
|
"data": {"label": "Entrypoint Node", "source_handle_id": "cc0f4028-1039-4063-971d-7dacbb01b379"},
|
324
|
-
"display_data": {"position": {"x": 0.0, "y":
|
324
|
+
"display_data": {"position": {"x": 0.0, "y": -50.0}},
|
325
325
|
"base": None,
|
326
326
|
"definition": None,
|
327
327
|
}
|
@@ -370,7 +370,7 @@ def test_serialize_workflow_with_prompt_and_templating(vellum_client):
|
|
370
370
|
"release_tag": "LATEST",
|
371
371
|
"ml_model_fallbacks": None,
|
372
372
|
},
|
373
|
-
"display_data": {"position": {"x":
|
373
|
+
"display_data": {"position": {"x": 200.0, "y": -50.0}},
|
374
374
|
"base": {
|
375
375
|
"name": "PromptDeploymentNode",
|
376
376
|
"module": ["vellum", "workflows", "nodes", "displayable", "prompt_deployment_node", "node"],
|
@@ -465,7 +465,7 @@ def test_serialize_workflow_with_prompt_and_templating(vellum_client):
|
|
465
465
|
"template_node_input_id": "7c775379-d589-4d79-b876-dcd224d72966",
|
466
466
|
"output_type": "STRING",
|
467
467
|
},
|
468
|
-
"display_data": {"position": {"x":
|
468
|
+
"display_data": {"position": {"x": 400.0, "y": -50.0}},
|
469
469
|
"base": {
|
470
470
|
"name": "TemplatingNode",
|
471
471
|
"module": ["vellum", "workflows", "nodes", "core", "templating_node", "node"],
|
@@ -512,7 +512,7 @@ def test_serialize_workflow_with_prompt_and_templating(vellum_client):
|
|
512
512
|
},
|
513
513
|
}
|
514
514
|
],
|
515
|
-
"display_data": {"position": {"x":
|
515
|
+
"display_data": {"position": {"x": 600.0, "y": -50.0}},
|
516
516
|
"base": {
|
517
517
|
"name": "FinalOutputNode",
|
518
518
|
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|