vellum-ai 1.7.4__py3-none-any.whl → 1.7.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- vellum/__init__.py +2 -0
- vellum/client/core/client_wrapper.py +2 -2
- vellum/client/reference.md +95 -0
- vellum/client/resources/workflow_deployments/client.py +111 -0
- vellum/client/resources/workflow_deployments/raw_client.py +121 -0
- vellum/client/types/__init__.py +2 -0
- vellum/client/types/paginated_workflow_deployment_release_list.py +30 -0
- vellum/client/types/vellum_error_code_enum.py +2 -0
- vellum/client/types/vellum_sdk_error_code_enum.py +2 -0
- vellum/client/types/workflow_execution_event_error_code.py +2 -0
- vellum/types/paginated_workflow_deployment_release_list.py +3 -0
- vellum/workflows/edges/__init__.py +2 -0
- vellum/workflows/edges/trigger_edge.py +67 -0
- vellum/workflows/events/tests/test_event.py +40 -0
- vellum/workflows/events/workflow.py +15 -3
- vellum/workflows/graph/graph.py +93 -0
- vellum/workflows/graph/tests/test_graph.py +167 -0
- vellum/workflows/nodes/displayable/tool_calling_node/node.py +1 -1
- vellum/workflows/nodes/displayable/tool_calling_node/utils.py +1 -1
- vellum/workflows/ports/port.py +11 -0
- vellum/workflows/runner/runner.py +5 -3
- vellum/workflows/triggers/__init__.py +4 -0
- vellum/workflows/triggers/base.py +125 -0
- vellum/workflows/triggers/manual.py +37 -0
- vellum/workflows/workflows/base.py +9 -9
- {vellum_ai-1.7.4.dist-info → vellum_ai-1.7.5.dist-info}/METADATA +1 -1
- {vellum_ai-1.7.4.dist-info → vellum_ai-1.7.5.dist-info}/RECORD +36 -29
- vellum_ee/assets/node-definitions.json +1 -1
- vellum_ee/workflows/display/base.py +26 -1
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py +1 -1
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py +1 -1
- vellum_ee/workflows/display/tests/workflow_serialization/test_manual_trigger_serialization.py +113 -0
- vellum_ee/workflows/display/workflows/base_workflow_display.py +63 -10
- {vellum_ai-1.7.4.dist-info → vellum_ai-1.7.5.dist-info}/LICENSE +0 -0
- {vellum_ai-1.7.4.dist-info → vellum_ai-1.7.5.dist-info}/WHEEL +0 -0
- {vellum_ai-1.7.4.dist-info → vellum_ai-1.7.5.dist-info}/entry_points.txt +0 -0
@@ -22,12 +22,12 @@ vellum_cli/tests/test_ping.py,sha256=b3aQLd-N59_8w2rRiWqwpB1rlHaKEYVbAj1Y3hi7A-g
|
|
22
22
|
vellum_cli/tests/test_pull.py,sha256=e2XHzcHIx9k-FyuNAl7wMSNsSSebPGyP6U05JGcddFs,49447
|
23
23
|
vellum_cli/tests/test_push.py,sha256=2MjkNKr_9Guv5Exjsm3L1BeVXmPkKUcCSiKnp90HgW4,41996
|
24
24
|
vellum_ee/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
25
|
-
vellum_ee/assets/node-definitions.json,sha256=
|
25
|
+
vellum_ee/assets/node-definitions.json,sha256=Mm3c1nfEa1QjWWzNvIJlhahDcY4SM3wQm8og_x3jyd8,30755
|
26
26
|
vellum_ee/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
27
27
|
vellum_ee/scripts/generate_node_definitions.py,sha256=FOYQsXIqU45I0OAcsyZUGODF9JK44yunf58rR6YaAdA,3303
|
28
28
|
vellum_ee/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
29
29
|
vellum_ee/workflows/display/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
30
|
-
vellum_ee/workflows/display/base.py,sha256=
|
30
|
+
vellum_ee/workflows/display/base.py,sha256=BrXRr3WMDJitXe9hcq6EDE3MZvuRnEZuCsIswiAyYYk,2606
|
31
31
|
vellum_ee/workflows/display/editor/__init__.py,sha256=MSAgY91xCEg2neH5d8jXx5wRdR962ftZVa6vO9BGq9k,167
|
32
32
|
vellum_ee/workflows/display/editor/types.py,sha256=rmaNXkNZUNRgK-mJJ_g1-Fm3OGxoQfqEB7zn-zzgJtc,664
|
33
33
|
vellum_ee/workflows/display/exceptions.py,sha256=_FDhK-lfuBPHY2GSywp70ewM0k55Ji5Bp-wZlEZenz4,112
|
@@ -101,15 +101,16 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_
|
|
101
101
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py,sha256=ddPa8gNBYH2tWk92ymngY7M8n74J-8CEre50HISP_-g,7877
|
102
102
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=A7Ef8P1-Nyvsb97bumKT9W2R1LuZaY9IKFV-7iRueog,4010
|
103
103
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_composio_serialization.py,sha256=oVXCjkU0G56QJmqnd_xIwF3D9bhJwALFibM2wmRhwUk,3739
|
104
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py,sha256=
|
104
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py,sha256=0yMgPwl-A5GLcQCLr8faK2Z0HMONKnA0GnRTddbSch8,26693
|
105
105
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_mcp_serialization.py,sha256=QhQbijeCnFeX1i3SMjHJg2WVAEt5JEO3dhFRv-mofdA,2458
|
106
106
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_parent_input.py,sha256=__LX4cuzbyZp_1wc-SI8X_J0tnhOkCEmRVUWLKI5aQM,4578
|
107
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256=
|
107
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256=xe9n2GKt6Pwf9antW0OUp34EJjxeJT6K-szE0PukHOo,10438
|
108
108
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_vellum_integration_serialization.py,sha256=zvLgIIgKTjAV5ObvqfoR7U-HSdOnGgOKxcCLoq5-Jvk,2851
|
109
109
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_workflow_deployment_serialization.py,sha256=XIZZr5POo2NLn2uEWm9EC3rejeBMoO4X-JtzTH6mvp4,4074
|
110
110
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=pLCyMScV88DTBXRH7jXaXOEA1GBq8NIipCUFwIAWnwI,2771
|
111
111
|
vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=exT7U-axwtYgFylagScflSQLJEND51qIAx2UATju6JM,6023
|
112
112
|
vellum_ee/workflows/display/tests/workflow_serialization/test_final_output_node_map_reference_serialization.py,sha256=vl3pxUJlrYRA8zzFJ-gRm7fe-5fviLNSIsUC7imnMqk,3502
|
113
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_manual_trigger_serialization.py,sha256=MQiZZfMtCps-_Me-SqH3TnC7sh52ApcF0_6ctoYZ63g,3798
|
113
114
|
vellum_ee/workflows/display/tests/workflow_serialization/test_terminal_node_any_serialization.py,sha256=4WAmSEJZlDBLPhsD1f4GwY9ahB9F6qJKGnL6j7ZYlzQ,1740
|
114
115
|
vellum_ee/workflows/display/tests/workflow_serialization/test_web_search_node_serialization.py,sha256=vbDFBrWUPeeW7cxjNA6SXrsHlYcbOAhlQ4C45Vdnr1c,3428
|
115
116
|
vellum_ee/workflows/display/tests/workflow_serialization/test_workflow_input_parameterization_error.py,sha256=vAdmn3YTBDpo55znbydQxsgg9ASqHcvsUPwiBR_7wfo,1461
|
@@ -126,7 +127,7 @@ vellum_ee/workflows/display/utils/tests/test_events.py,sha256=42IEBnMbaQrH8gigw5
|
|
126
127
|
vellum_ee/workflows/display/utils/vellum.py,sha256=Bt7kdLdXoBsHn5dVEY2uKcF542VL09jwu8J_30rl2vk,6413
|
127
128
|
vellum_ee/workflows/display/vellum.py,sha256=J2mdJZ1sdLW535DDUkq_Vm8Z572vhuxHxVZF9deKSdk,391
|
128
129
|
vellum_ee/workflows/display/workflows/__init__.py,sha256=JTB9ObEV3l4gGGdtfBHwVJtTTKC22uj-a-XjTVwXCyA,148
|
129
|
-
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=
|
130
|
+
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=qek7zT4V6XoqmU3seVZwrNzGNVb0CKU4GmEK8VLrWbc,46651
|
130
131
|
vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=gxz76AeCqgAZ9D2lZeTiZzxY9eMgn3qOSfVgiqYcOh8,2028
|
131
132
|
vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=lg-c_3P3ldtqWq2VFsk_2Mkn3pVdXWuT59QpH7QwXVs,39764
|
132
133
|
vellum_ee/workflows/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -155,12 +156,12 @@ vellum_ee/workflows/tests/test_registry.py,sha256=B8xRIuEyLWfSqrYoPldNQXhKPfe50P
|
|
155
156
|
vellum_ee/workflows/tests/test_serialize_module.py,sha256=zleQTcGZa5_nzwu4zpFoqEHhk7pb64hGrhObR4anhPQ,4471
|
156
157
|
vellum_ee/workflows/tests/test_server.py,sha256=DtQdVlRlfIvq0L9mSs0SncI0jHgDAq05HQCLj29aiZo,24728
|
157
158
|
vellum_ee/workflows/tests/test_virtual_files.py,sha256=TJEcMR0v2S8CkloXNmCHA0QW0K6pYNGaIjraJz7sFvY,2762
|
158
|
-
vellum/__init__.py,sha256=
|
159
|
+
vellum/__init__.py,sha256=6dkyRHmIKuQPzL_z3QLVUrbkAF-HJKDhDSMCnf4ZsKw,49502
|
159
160
|
vellum/client/README.md,sha256=flqu57ubZNTfpq60CdLtJC9gp4WEkyjb_n_eZ4OYf9w,6497
|
160
161
|
vellum/client/__init__.py,sha256=rMnKRqL5-356SBc-rfm56MkO87PuAi2mtcfBszcJU1M,74316
|
161
162
|
vellum/client/core/__init__.py,sha256=lTcqUPXcx4112yLDd70RAPeqq6tu3eFMe1pKOqkW9JQ,1562
|
162
163
|
vellum/client/core/api_error.py,sha256=44vPoTyWN59gonCIZMdzw7M1uspygiLnr3GNFOoVL2Q,614
|
163
|
-
vellum/client/core/client_wrapper.py,sha256=
|
164
|
+
vellum/client/core/client_wrapper.py,sha256=1YhfnMUVmjKkdmg9jR46ZTIffeCPF5RezCBeInW45hc,2840
|
164
165
|
vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
|
165
166
|
vellum/client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
|
166
167
|
vellum/client/core/force_multipart.py,sha256=awxh5MtcRYe74ehY8U76jzv6fYM_w_D3Rur7KQQzSDk,429
|
@@ -181,7 +182,7 @@ vellum/client/errors/not_found_error.py,sha256=YrqVM0oc3qkQbFbmmm6xr300VGfUNxMSy
|
|
181
182
|
vellum/client/errors/too_many_requests_error.py,sha256=SJJemdgUlQHV_VpxK8UfFNexgZebNT5_MTOeQs6oVgc,397
|
182
183
|
vellum/client/errors/unauthorized_error.py,sha256=waPl5Swiqsk3FQK-Lljzx4KDh4RPZ0wL6BLHjM8onQ8,394
|
183
184
|
vellum/client/raw_client.py,sha256=cmMR0t87iUYvkIE9L4g0dcCmw3uUQNze9rD9CBv5rzs,113481
|
184
|
-
vellum/client/reference.md,sha256=
|
185
|
+
vellum/client/reference.md,sha256=lqfW5v1s-z4Amy07JcxQTF_YiLVlkbZH6bG4Hgn2Uyc,107432
|
185
186
|
vellum/client/resources/__init__.py,sha256=JlNoSZYFGxLTuzPvmMV1b8IWDYjlDL4BaBbq9TgfGUE,1765
|
186
187
|
vellum/client/resources/ad_hoc/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
|
187
188
|
vellum/client/resources/ad_hoc/client.py,sha256=v5I_YzJaaPezsE4KVuMSUXJISstKuJ_9-VUeXakIJhw,14353
|
@@ -242,8 +243,8 @@ vellum/client/resources/test_suites/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-C
|
|
242
243
|
vellum/client/resources/test_suites/client.py,sha256=xo197bXk84jj6gEieRmJuhqBbQ8IB-VMNLki7gdqhlo,20753
|
243
244
|
vellum/client/resources/test_suites/raw_client.py,sha256=XfDqmJa7fngPsHAirTSSNBMHy2O4mKOaNS16IL567L8,22335
|
244
245
|
vellum/client/resources/workflow_deployments/__init__.py,sha256=MVnGG7CkZA7F8p__MGerey22DTg6oYqfay77mdlDjBc,271
|
245
|
-
vellum/client/resources/workflow_deployments/client.py,sha256=
|
246
|
-
vellum/client/resources/workflow_deployments/raw_client.py,sha256=
|
246
|
+
vellum/client/resources/workflow_deployments/client.py,sha256=As_QCQU-aU7qfMniqPsCfo3NKHfCNFy5AG-KlDi5nS8,30647
|
247
|
+
vellum/client/resources/workflow_deployments/raw_client.py,sha256=Lye7Y1YEgW4Kx5MQJhktUfLkxvgYVNqBcCZjY7v-PN8,42159
|
247
248
|
vellum/client/resources/workflow_deployments/types/__init__.py,sha256=2Lrjd-cX_h9gZEgxsF7e9nhCWUcTNXQyEaOjytC1NEM,360
|
248
249
|
vellum/client/resources/workflow_deployments/types/list_workflow_release_tags_request_source.py,sha256=LPETHLX9Ygha_JRT9oWZAZR6clv-W1tTelXzktkTBX8,178
|
249
250
|
vellum/client/resources/workflow_deployments/types/workflow_deployments_list_request_status.py,sha256=FXVkVmGM6DZ2RpTGnZXWJYiVlLQ-K5fDtX3WMaBPaWk,182
|
@@ -266,7 +267,7 @@ vellum/client/resources/workspaces/client.py,sha256=36KYa2FDu6h65q2GscUFOJs4qKei
|
|
266
267
|
vellum/client/resources/workspaces/raw_client.py,sha256=M3Ewk1ZfEZ44EeTvBtBNoNKi5whwfLY-1GR07SyfDTI,3517
|
267
268
|
vellum/client/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
268
269
|
vellum/client/tests/test_utils.py,sha256=zk8z45-2xrm9sZ2hq8PTqY8MXmXtPqMqYK0VBBX0GHg,1176
|
269
|
-
vellum/client/types/__init__.py,sha256=
|
270
|
+
vellum/client/types/__init__.py,sha256=mviyigR9JByvGdgCOqfY6DyrExvkCnN6PXBEMRsY3pw,74926
|
270
271
|
vellum/client/types/ad_hoc_execute_prompt_event.py,sha256=B69EesIH6fpNsdoiJaSG9zF1Sl17FnjoTu4CBkUSoHk,608
|
271
272
|
vellum/client/types/ad_hoc_expand_meta.py,sha256=Kajcj3dKKed5e7uZibRnE3ZonK_bB2JPM-3aLjLfUp4,1295
|
272
273
|
vellum/client/types/ad_hoc_fulfilled_prompt_execution_meta.py,sha256=5kD6ZcbU8P8ynK0lMD8Mh7vHzvQt06ziMyphvWYg6FU,968
|
@@ -614,6 +615,7 @@ vellum/client/types/paginated_slim_tool_definition_list.py,sha256=XhtwDClmShV_LT
|
|
614
615
|
vellum/client/types/paginated_slim_workflow_deployment_list.py,sha256=mIQZ1FT3qQTGG-8eMRvnSAm_u9ixlGk7b80nxoVBxCI,973
|
615
616
|
vellum/client/types/paginated_test_suite_run_execution_list.py,sha256=sYg7pO_vCUoT0xH_a8mQAUWd8A-xEI0EEfmFKbv9U-c,921
|
616
617
|
vellum/client/types/paginated_test_suite_test_case_list.py,sha256=gDVdq10b5u3NEzMZrjpioVDBLMKmHcsRXBi-IX2ZBL8,901
|
618
|
+
vellum/client/types/paginated_workflow_deployment_release_list.py,sha256=0THeQdJlr-hBLZIcCFHs8oPZUzmTUMhmNpWMhTb0q7c,988
|
617
619
|
vellum/client/types/paginated_workflow_release_tag_read_list.py,sha256=QhnPPpYE5T_0Kzl6QJ9YWcsc4WYf74px_KOiQTWRqNY,782
|
618
620
|
vellum/client/types/paginated_workflow_sandbox_example_list.py,sha256=GHWCQdTYmFeoN0lxdreN0RldKcUa2Duazlfke2cLOc4,781
|
619
621
|
vellum/client/types/parent_context.py,sha256=U4eS717FDcsTPO37ckQs2axtzei-eyivwfjSmGYSOjU,890
|
@@ -841,13 +843,13 @@ vellum/client/types/vellum_code_resource_definition.py,sha256=XdueTR342BDjevZ3kt
|
|
841
843
|
vellum/client/types/vellum_document.py,sha256=qwXqMS2Eud2a5KmF8QHhU_vJzDX0g5cesrCpmBqREsA,604
|
842
844
|
vellum/client/types/vellum_document_request.py,sha256=P9vA7ZDNeaHNlMqyzfl-ZD4bpdf-xA5mH8R1QuOAmOY,611
|
843
845
|
vellum/client/types/vellum_error.py,sha256=G4WSD-w_skoDDnsAt-TtImt-hZT-Sc8LjHvERBUVnhE,691
|
844
|
-
vellum/client/types/vellum_error_code_enum.py,sha256=
|
846
|
+
vellum/client/types/vellum_error_code_enum.py,sha256=aqRRPpcpagYMJ-TDBb-V9xyj2cubwP9ygNO4NaO1Y8s,477
|
845
847
|
vellum/client/types/vellum_error_request.py,sha256=7l4Ux6wj3C9BdSXUPBrtxECsAirmvaLU42Y23VqncBU,698
|
846
848
|
vellum/client/types/vellum_image.py,sha256=LAGUYBDsT0bmMOqgbaeCTCy2w4zAeHEyUIgPtmdjjJ4,601
|
847
849
|
vellum/client/types/vellum_image_request.py,sha256=6DoI2AdJIG8NShHSslpHvsFUw5PwIMconjlHSipOP5Q,608
|
848
850
|
vellum/client/types/vellum_node_execution_event.py,sha256=-MXat2wAZx4sx3JRp7gwJIOInPNwPMDpZmXtP8NC3O8,736
|
849
851
|
vellum/client/types/vellum_sdk_error.py,sha256=oURNuw5zH4HqV6Ygw0MgVWH2DcuxekWvS_ZXA8tU31I,704
|
850
|
-
vellum/client/types/vellum_sdk_error_code_enum.py,sha256=
|
852
|
+
vellum/client/types/vellum_sdk_error_code_enum.py,sha256=zyPoP7V-uooGdBlVjanveQbaiHRumjAXsHwH_Stg8gU,577
|
851
853
|
vellum/client/types/vellum_secret.py,sha256=04WlBWphqiJSUKM2NeJE32IDt-ZpVO_LOXkpXvBh3f0,519
|
852
854
|
vellum/client/types/vellum_span.py,sha256=dmZOBXlDeXx4eLvBJBiOp07xuyjhisgXgnvYFSmctYE,259
|
853
855
|
vellum/client/types/vellum_value.py,sha256=douOrlRh2ko1gmN8oDjsaoAEtyDcfq-OV_GThW92GNk,1188
|
@@ -884,7 +886,7 @@ vellum/client/types/workflow_execution_actual_chat_history_request.py,sha256=E3V
|
|
884
886
|
vellum/client/types/workflow_execution_actual_json_request.py,sha256=jLsQxdg7SVyUkdu_Gyo3iDKgZcQnO5hsP0PHPsiGwrg,1895
|
885
887
|
vellum/client/types/workflow_execution_actual_string_request.py,sha256=syFCXeB4MwjKblXfSBNfCSG4dJIR8Ww937gTcmTPh1w,1859
|
886
888
|
vellum/client/types/workflow_execution_detail.py,sha256=R1tONdNarehoqk7zsK0D2wCSJEe9WauZmKHp5yKVLB8,2186
|
887
|
-
vellum/client/types/workflow_execution_event_error_code.py,sha256=
|
889
|
+
vellum/client/types/workflow_execution_event_error_code.py,sha256=8VL4wHTEy-AdQhApnOsz2L2wXcuo5LBqgUAVnaQ-pXM,568
|
888
890
|
vellum/client/types/workflow_execution_event_type.py,sha256=ESKqV3ItoAlqBooruf-i0AnmEh_GvCySZ0Co3r9Bvt0,170
|
889
891
|
vellum/client/types/workflow_execution_fulfilled_body.py,sha256=Auu-rzrIdxEkXgPHXe-BynwEWxL_R68E_VrLFCHueFA,710
|
890
892
|
vellum/client/types/workflow_execution_fulfilled_event.py,sha256=eZ_DtDmRK-S2Q0LEJHlGS_FPd-UVvpgetRXqvWlSh4M,1925
|
@@ -1434,6 +1436,7 @@ vellum/types/paginated_slim_tool_definition_list.py,sha256=oA5StUVXoYK1nxXYKy2b3
|
|
1434
1436
|
vellum/types/paginated_slim_workflow_deployment_list.py,sha256=3QgvxRFqcOw9z-cl0CBaHrREc8pxkPxUYreINh-indg,177
|
1435
1437
|
vellum/types/paginated_test_suite_run_execution_list.py,sha256=XEr928_4w9Rw9_q6dshxPWfXXptLdRlDp-frKIIcdYQ,177
|
1436
1438
|
vellum/types/paginated_test_suite_test_case_list.py,sha256=LoyXDEr2yXrkniJ25HctBWvhqKQ987XItukUwPYUIhQ,173
|
1439
|
+
vellum/types/paginated_workflow_deployment_release_list.py,sha256=Y4DCce-APrZNMIMz1db6ZAUmaCJdWMvuTmRImpii09k,180
|
1437
1440
|
vellum/types/paginated_workflow_release_tag_read_list.py,sha256=XUeQn_6JPJ6K2qts-NZIEEZF94C3U2AosStc2k57eWY,178
|
1438
1441
|
vellum/types/paginated_workflow_sandbox_example_list.py,sha256=FlPNK6QtzQL9yD-k_qpQrE8yMARrJRjk5aGf6ZTbGyY,177
|
1439
1442
|
vellum/types/parent_context.py,sha256=z50nvSfKqZKrX-q6u5Ex3h6WzdM6_hb-9dBHWdTQ5AA,152
|
@@ -1796,8 +1799,9 @@ vellum/workflows/descriptors/base.py,sha256=v3WG2d_pekYtVK3Y2FSdVhf_XwNUnvXgSWuh
|
|
1796
1799
|
vellum/workflows/descriptors/exceptions.py,sha256=Rv2uMiaO2a2SADhJzl_VHhV6dqwAhZAzaJPoThP7SZc,653
|
1797
1800
|
vellum/workflows/descriptors/tests/test_utils.py,sha256=HJ5DoRz0sJvViGxyZ_FtytZjxN2J8xTkGtaVwCy6Q90,6928
|
1798
1801
|
vellum/workflows/descriptors/utils.py,sha256=Z7kuhwb_D_kfcwKIAr1xI_AqYH6WFoZBYuslKQWZBFU,4399
|
1799
|
-
vellum/workflows/edges/__init__.py,sha256=
|
1802
|
+
vellum/workflows/edges/__init__.py,sha256=auViJbvYiR1gzgGlhMv1fPDMvgXGOwa5g-YZn97fvUo,107
|
1800
1803
|
vellum/workflows/edges/edge.py,sha256=N0SnY3gKVuxImPAdCbPMPlHJIXbkQ3fwq_LbJRvVMFc,677
|
1804
|
+
vellum/workflows/edges/trigger_edge.py,sha256=tyOqENGuKbxw_zn-f5rFSe6E3sWe2bRIZE4txvG7odE,2160
|
1801
1805
|
vellum/workflows/emitters/__init__.py,sha256=d9QFOI3eVg6rzpSFLvrjkDYXWikf1tcp3ruTRa2Boyc,143
|
1802
1806
|
vellum/workflows/emitters/base.py,sha256=4hClzI-ue0kWiEnZ1T1zvGz2ZWnoWLCVF-seqHBMUC8,1144
|
1803
1807
|
vellum/workflows/emitters/vellum_emitter.py,sha256=t4ixrN0NNXrydMP9PVKYvcOMxoMqsg5v5pL7mzLE59k,4925
|
@@ -1813,9 +1817,9 @@ vellum/workflows/events/relational_threads.py,sha256=zmLrBCBYpdpQV0snKH3HleST-_h
|
|
1813
1817
|
vellum/workflows/events/stream.py,sha256=xhXJTZirFi0xad5neAQNogrIQ4h47fpnKbVC3vCM5Js,889
|
1814
1818
|
vellum/workflows/events/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1815
1819
|
vellum/workflows/events/tests/test_basic_workflow.py,sha256=Pj6orHsXz37jWC5FARi0Sx2Gjf99Owri2Cvr6Chb79k,1765
|
1816
|
-
vellum/workflows/events/tests/test_event.py,sha256=
|
1820
|
+
vellum/workflows/events/tests/test_event.py,sha256=a-_vwiKhZWTxmRvDPB-aveWuGBOMqr5nY9t6uFmtL-o,21431
|
1817
1821
|
vellum/workflows/events/types.py,sha256=mVrqAH9Hs9SpXm08Hcxdyap_ImQPwGsxRr56rSNMP34,5043
|
1818
|
-
vellum/workflows/events/workflow.py,sha256=
|
1822
|
+
vellum/workflows/events/workflow.py,sha256=uoSnZFyG-oHvmvmAA3LYRJOMc_vOrbfa64stnSzNePs,9494
|
1819
1823
|
vellum/workflows/exceptions.py,sha256=cizNaHgmGdIoYSV3Mn6_HlpUvs2Nq9KgpX1ewMZdBa0,2157
|
1820
1824
|
vellum/workflows/executable.py,sha256=um-gLJMVYfGJwGJfZIPlCRHhHIYm6pn8PUEfeqrNx5k,218
|
1821
1825
|
vellum/workflows/expressions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -1863,9 +1867,9 @@ vellum/workflows/expressions/tests/test_length.py,sha256=pQA1tYSwqxE6euclboY024N
|
|
1863
1867
|
vellum/workflows/expressions/tests/test_minus.py,sha256=pq7dvdRGNhSSn95LGNzRErsYUsFk5SpOKHDcSR5QToc,1632
|
1864
1868
|
vellum/workflows/expressions/tests/test_parse_json.py,sha256=zpB_qE5_EwWQL7ULQUJm0o1PRSfWZdAqZNW6Ah13oJE,1059
|
1865
1869
|
vellum/workflows/graph/__init__.py,sha256=3sHlay5d_-uD7j3QJXiGl0WHFZZ_QScRvgyDhN2GhHY,74
|
1866
|
-
vellum/workflows/graph/graph.py,sha256=
|
1870
|
+
vellum/workflows/graph/graph.py,sha256=lUqREmkROzRtyw1ncRnN7CR9vbztJYR1IgR3hHIG9Xw,14537
|
1867
1871
|
vellum/workflows/graph/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1868
|
-
vellum/workflows/graph/tests/test_graph.py,sha256=
|
1872
|
+
vellum/workflows/graph/tests/test_graph.py,sha256=OLGkEQh-B1CucwSf4nOP79RFXB4R2isHo3LFlr-24yA,20132
|
1869
1873
|
vellum/workflows/inputs/__init__.py,sha256=02pj0IbJkN1AxTreswK39cNi45tA8GWcAAdRJve4cuM,116
|
1870
1874
|
vellum/workflows/inputs/base.py,sha256=79Dw3jiSnCVFeySg6rMFPIqPfErmGKY0XPhpW0dSY-E,5454
|
1871
1875
|
vellum/workflows/inputs/dataset_row.py,sha256=Szdb_RKysCEBRfy4B5LoXoPiTZPEFp_0_RqRZUZRGbU,1076
|
@@ -1975,13 +1979,13 @@ vellum/workflows/nodes/displayable/tests/test_search_node_error_handling.py,sha2
|
|
1975
1979
|
vellum/workflows/nodes/displayable/tests/test_search_node_wth_text_output.py,sha256=VepO5z1277c1y5N6LLIC31nnWD1aak2m5oPFplfJHHs,6935
|
1976
1980
|
vellum/workflows/nodes/displayable/tests/test_text_prompt_deployment_node.py,sha256=Bjv-wZyFgNaVZb9KEMMZd9lFoLzbPEPjEMpANizMZw4,2413
|
1977
1981
|
vellum/workflows/nodes/displayable/tool_calling_node/__init__.py,sha256=3n0-ysmFKsr40CVxPthc0rfJgqVJeZuUEsCmYudLVRg,117
|
1978
|
-
vellum/workflows/nodes/displayable/tool_calling_node/node.py,sha256=
|
1982
|
+
vellum/workflows/nodes/displayable/tool_calling_node/node.py,sha256=rvCGtnCM1bFkwm_2osk1kuIPkUdlLgB4xDxx3yMlQ0Q,8421
|
1979
1983
|
vellum/workflows/nodes/displayable/tool_calling_node/state.py,sha256=CcBVb_YtwfSSka4ze678k6-qwmzMSfjfVP8_Y95feSo,302
|
1980
1984
|
vellum/workflows/nodes/displayable/tool_calling_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1981
1985
|
vellum/workflows/nodes/displayable/tool_calling_node/tests/test_composio_service.py,sha256=in1fbEz5x1tx3uKv9YXdvOncsHucNL8Ro6Go7lBuuOQ,8962
|
1982
1986
|
vellum/workflows/nodes/displayable/tool_calling_node/tests/test_node.py,sha256=Idjtlly6GTotNa4isXJ23RxKzQA2oE10MOm793aipLA,13892
|
1983
1987
|
vellum/workflows/nodes/displayable/tool_calling_node/tests/test_utils.py,sha256=EmKFA-ELdTzlK0xMqWnuSZPoGNLYCwk6b0amTqirZo0,11305
|
1984
|
-
vellum/workflows/nodes/displayable/tool_calling_node/utils.py,sha256=
|
1988
|
+
vellum/workflows/nodes/displayable/tool_calling_node/utils.py,sha256=VfrW8OZfw6NNxY9xP_jhST8FaRX2xpl-eGNVR3YGClI,24519
|
1985
1989
|
vellum/workflows/nodes/displayable/web_search_node/__init__.py,sha256=8FOnEP-n-U68cvxTlJW9wphIAGHq5aqjzLM-DoSSXnU,61
|
1986
1990
|
vellum/workflows/nodes/displayable/web_search_node/node.py,sha256=NQYux2bOtuBF5E4tn-fXi5y3btURPRrNqMSM9MAZYI4,5091
|
1987
1991
|
vellum/workflows/nodes/displayable/web_search_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -1999,7 +2003,7 @@ vellum/workflows/outputs/__init__.py,sha256=AyZ4pRh_ACQIGvkf0byJO46EDnSix1ZCAXfv
|
|
1999
2003
|
vellum/workflows/outputs/base.py,sha256=zy02zr9DmG3j7Xp3Q8xiOiXFF_c7uNh76jf2LiMS-qE,10132
|
2000
2004
|
vellum/workflows/ports/__init__.py,sha256=bZuMt-R7z5bKwpu4uPW7LlJeePOQWmCcDSXe5frUY5g,101
|
2001
2005
|
vellum/workflows/ports/node_ports.py,sha256=SM9uLAaoaE1HwR-Uqwf2v5zZK5iFnphKs6mE5Ls7ldE,2877
|
2002
|
-
vellum/workflows/ports/port.py,sha256=
|
2006
|
+
vellum/workflows/ports/port.py,sha256=L4VrUXT-77a1nN9dC4kuukur5kz2gleEpskaWT1MIRc,4627
|
2003
2007
|
vellum/workflows/ports/tests/test_port.py,sha256=WEE83wct8C01Lq_asSbS0MfL5BLA2avsS0UqJMye4OU,1215
|
2004
2008
|
vellum/workflows/ports/utils.py,sha256=gD8iijX8D3tjx1Tj2FW8-QIubCphTqW_gqROt6w6MOM,3790
|
2005
2009
|
vellum/workflows/references/__init__.py,sha256=glHFC1VfXmcbNvH5VzFbkT03d8_D7MMcvEcsUBrzLIs,591
|
@@ -2021,7 +2025,7 @@ vellum/workflows/resolvers/resolver.py,sha256=3uEYscB_2PHTazc0Y9SzOe_yiQZhVLfey1
|
|
2021
2025
|
vellum/workflows/resolvers/tests/test_resolver.py,sha256=PnUGzsulo1It_LjjhHsRNiILvvl5G_IaK8ZX56zKC28,6204
|
2022
2026
|
vellum/workflows/resolvers/types.py,sha256=Hndhlk69g6EKLh_LYg5ILepW5U_h_BYNllfzhS9k8p4,237
|
2023
2027
|
vellum/workflows/runner/__init__.py,sha256=i1iG5sAhtpdsrlvwgH6B-m49JsINkiWyPWs8vyT-bqM,72
|
2024
|
-
vellum/workflows/runner/runner.py,sha256=
|
2028
|
+
vellum/workflows/runner/runner.py,sha256=nq-DsIZWLSofsMxZnDZZgV_MUod5Baz6mrEs7cgYPQY,45795
|
2025
2029
|
vellum/workflows/sandbox.py,sha256=mezSZmilR_fwR8164n8CEfzlMeQ55IqfapHp4ftImvQ,3212
|
2026
2030
|
vellum/workflows/state/__init__.py,sha256=yUUdR-_Vl7UiixNDYQZ-GEM_kJI9dnOia75TtuNEsnE,60
|
2027
2031
|
vellum/workflows/state/base.py,sha256=A8s0PC8UvFjPpkHDY6u-yIeb2KHjoAmu-GW-GYrDl0E,24654
|
@@ -2035,6 +2039,9 @@ vellum/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
|
|
2035
2039
|
vellum/workflows/tests/test_dataset_row.py,sha256=S8aIiYU9TRzJ8GTl5qCjnJ-fuHdxatHJFGLlKTVHPr4,4174
|
2036
2040
|
vellum/workflows/tests/test_sandbox.py,sha256=JKwaluI-lODQo7Ek9sjDstjL_WTdSqUlVik6ZVTfVOA,1826
|
2037
2041
|
vellum/workflows/tests/test_undefined.py,sha256=zMCVliCXVNLrlC6hEGyOWDnQADJ2g83yc5FIM33zuo8,353
|
2042
|
+
vellum/workflows/triggers/__init__.py,sha256=yMSJHI_UbD_CnHJn2VHiX6qcdkyZ0BU8BS6fFQBbgZs,158
|
2043
|
+
vellum/workflows/triggers/base.py,sha256=HIZkKPdb9GOYjpGzk2DoSqkxsUyjBnzmsLyhVTWm1iE,4857
|
2044
|
+
vellum/workflows/triggers/manual.py,sha256=PgbZ92gcK25yz6REXm98zWic1QBfhxLKfGCeHpZEUx4,1266
|
2038
2045
|
vellum/workflows/types/__init__.py,sha256=fZ3Xxly7YSsu4kCIYD5aYpYucNM97zTyInb9CA24mf0,102
|
2039
2046
|
vellum/workflows/types/code_execution_node_wrappers.py,sha256=fewX9bqF_4TZuK-gZYIn12s31-k03vHMGRpvFAPm11Y,3206
|
2040
2047
|
vellum/workflows/types/core.py,sha256=R7snCd7ci4tiRuHi5ALGh_5DIIF0T9eze3sf6EnJN-c,1126
|
@@ -2060,13 +2067,13 @@ vellum/workflows/utils/vellum_variables.py,sha256=X3lZn-EoWengRWBWRhTNW7hqbj7LkV
|
|
2060
2067
|
vellum/workflows/utils/zip.py,sha256=HVg_YZLmBOTXKaDV3Xhaf3V6sYnfqqZXQ8CpuafkbPY,1181
|
2061
2068
|
vellum/workflows/vellum_client.py,sha256=3iDR7VV_NgLSm1iZQCKDvrmfEaX1bOJiU15QrxyHpv0,1237
|
2062
2069
|
vellum/workflows/workflows/__init__.py,sha256=KY45TqvavCCvXIkyCFMEc0dc6jTMOUci93U2DUrlZYc,66
|
2063
|
-
vellum/workflows/workflows/base.py,sha256=
|
2070
|
+
vellum/workflows/workflows/base.py,sha256=Fb5Bw1ZdysIoex-P7gOqRKqHrpYgj3qYIdeFqv6_y1k,30061
|
2064
2071
|
vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnadGsrSZGa7t7LpJA,2008
|
2065
2072
|
vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2066
2073
|
vellum/workflows/workflows/tests/test_base_workflow.py,sha256=Boa-_m9ii2Qsa1RvVM-VYniF7zCpzGgEGy-OnPZkrHg,23941
|
2067
2074
|
vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
|
2068
|
-
vellum_ai-1.7.
|
2069
|
-
vellum_ai-1.7.
|
2070
|
-
vellum_ai-1.7.
|
2071
|
-
vellum_ai-1.7.
|
2072
|
-
vellum_ai-1.7.
|
2075
|
+
vellum_ai-1.7.5.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
|
2076
|
+
vellum_ai-1.7.5.dist-info/METADATA,sha256=ShJgnNyDKIuEsE07Cut9gBsA8vALEZ4XkdDUeuOn7Ms,5547
|
2077
|
+
vellum_ai-1.7.5.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
2078
|
+
vellum_ai-1.7.5.dist-info/entry_points.txt,sha256=xVavzAKN4iF_NbmhWOlOkHluka0YLkbN_pFQ9pW3gLI,117
|
2079
|
+
vellum_ai-1.7.5.dist-info/RECORD,,
|
@@ -1,6 +1,7 @@
|
|
1
1
|
from dataclasses import dataclass, field
|
2
|
+
from enum import Enum
|
2
3
|
from uuid import UUID
|
3
|
-
from typing import Optional, Type
|
4
|
+
from typing import TYPE_CHECKING, Dict, Optional, Type
|
4
5
|
|
5
6
|
from pydantic import Field
|
6
7
|
|
@@ -9,6 +10,30 @@ from vellum.workflows.utils.uuids import uuid4_from_hash
|
|
9
10
|
from vellum.workflows.workflows.base import BaseWorkflow
|
10
11
|
from vellum_ee.workflows.display.editor.types import NodeDisplayData
|
11
12
|
|
13
|
+
if TYPE_CHECKING:
|
14
|
+
from vellum.workflows.triggers.base import BaseTrigger
|
15
|
+
|
16
|
+
|
17
|
+
class WorkflowTriggerType(Enum):
|
18
|
+
MANUAL = "MANUAL"
|
19
|
+
|
20
|
+
|
21
|
+
def get_trigger_type_mapping() -> Dict[Type["BaseTrigger"], WorkflowTriggerType]:
|
22
|
+
"""
|
23
|
+
Get mapping from trigger classes to their WorkflowTriggerType enum values.
|
24
|
+
|
25
|
+
This is a function to avoid circular imports - it imports trigger classes
|
26
|
+
only when called, not at module load time.
|
27
|
+
|
28
|
+
Returns:
|
29
|
+
Dictionary mapping trigger classes to their enum types
|
30
|
+
"""
|
31
|
+
from vellum.workflows.triggers.manual import ManualTrigger
|
32
|
+
|
33
|
+
return {
|
34
|
+
ManualTrigger: WorkflowTriggerType.MANUAL,
|
35
|
+
}
|
36
|
+
|
12
37
|
|
13
38
|
class WorkflowDisplayDataViewport(UniversalBaseModel):
|
14
39
|
x: float = 0.0
|
@@ -435,7 +435,7 @@ def test_serialize_workflow():
|
|
435
435
|
{
|
436
436
|
"id": "1668419e-a193-43a5-8a97-3394e89bf278",
|
437
437
|
"name": "max_prompt_iterations",
|
438
|
-
"value": {"type": "CONSTANT_VALUE", "value": {"type": "NUMBER", "value":
|
438
|
+
"value": {"type": "CONSTANT_VALUE", "value": {"type": "NUMBER", "value": 25.0}},
|
439
439
|
},
|
440
440
|
{
|
441
441
|
"id": "f92dc3ec-a19a-4491-a98a-2b2df322e2e3",
|
@@ -204,7 +204,7 @@ def test_serialize_workflow():
|
|
204
204
|
{
|
205
205
|
"id": "1668419e-a193-43a5-8a97-3394e89bf278",
|
206
206
|
"name": "max_prompt_iterations",
|
207
|
-
"value": {"type": "CONSTANT_VALUE", "value": {"type": "NUMBER", "value":
|
207
|
+
"value": {"type": "CONSTANT_VALUE", "value": {"type": "NUMBER", "value": 25.0}},
|
208
208
|
},
|
209
209
|
{
|
210
210
|
"id": "f92dc3ec-a19a-4491-a98a-2b2df322e2e3",
|
@@ -0,0 +1,113 @@
|
|
1
|
+
"""Tests for serialization of workflows with ManualTrigger."""
|
2
|
+
|
3
|
+
import pytest
|
4
|
+
from typing import cast
|
5
|
+
|
6
|
+
from deepdiff import DeepDiff
|
7
|
+
|
8
|
+
from vellum.workflows import BaseWorkflow
|
9
|
+
from vellum.workflows.inputs.base import BaseInputs
|
10
|
+
from vellum.workflows.nodes.bases.base import BaseNode
|
11
|
+
from vellum.workflows.state.base import BaseState
|
12
|
+
from vellum.workflows.triggers.base import BaseTrigger
|
13
|
+
from vellum.workflows.triggers.manual import ManualTrigger
|
14
|
+
from vellum.workflows.types.core import JsonArray, JsonObject
|
15
|
+
from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
|
16
|
+
|
17
|
+
|
18
|
+
class Inputs(BaseInputs):
|
19
|
+
input: str
|
20
|
+
|
21
|
+
|
22
|
+
class SimpleNode(BaseNode):
|
23
|
+
class Outputs(BaseNode.Outputs):
|
24
|
+
output = Inputs.input
|
25
|
+
|
26
|
+
|
27
|
+
def create_workflow(trigger=None):
|
28
|
+
"""Factory for creating test workflows."""
|
29
|
+
|
30
|
+
class TestWorkflow(BaseWorkflow[Inputs, BaseState]):
|
31
|
+
graph = trigger >> SimpleNode if trigger else SimpleNode
|
32
|
+
|
33
|
+
class Outputs(BaseWorkflow.Outputs):
|
34
|
+
output = SimpleNode.Outputs.output
|
35
|
+
|
36
|
+
return TestWorkflow
|
37
|
+
|
38
|
+
|
39
|
+
def serialize(workflow_class) -> JsonObject:
|
40
|
+
"""Helper to serialize a workflow."""
|
41
|
+
return get_workflow_display(workflow_class=workflow_class).serialize()
|
42
|
+
|
43
|
+
|
44
|
+
def test_manual_trigger_serialization():
|
45
|
+
"""Workflow with ManualTrigger serializes with trigger field."""
|
46
|
+
result = serialize(create_workflow(ManualTrigger))
|
47
|
+
workflow_raw_data = cast(JsonObject, result["workflow_raw_data"])
|
48
|
+
trigger = cast(JsonObject, workflow_raw_data["trigger"])
|
49
|
+
|
50
|
+
assert trigger["type"] == "MANUAL"
|
51
|
+
assert not DeepDiff(
|
52
|
+
{
|
53
|
+
"type": "MANUAL",
|
54
|
+
"definition": {"name": "ManualTrigger", "module": ["vellum", "workflows", "triggers", "manual"]},
|
55
|
+
},
|
56
|
+
trigger,
|
57
|
+
ignore_order=True,
|
58
|
+
)
|
59
|
+
|
60
|
+
|
61
|
+
def test_no_trigger_serialization():
|
62
|
+
"""Workflow without trigger has no trigger field."""
|
63
|
+
result = serialize(create_workflow())
|
64
|
+
workflow_raw_data = cast(JsonObject, result["workflow_raw_data"])
|
65
|
+
assert "trigger" not in workflow_raw_data
|
66
|
+
|
67
|
+
|
68
|
+
def test_manual_trigger_multiple_entrypoints():
|
69
|
+
"""ManualTrigger with multiple entrypoints."""
|
70
|
+
|
71
|
+
class NodeA(BaseNode):
|
72
|
+
class Outputs(BaseNode.Outputs):
|
73
|
+
output = Inputs.input
|
74
|
+
|
75
|
+
class NodeB(BaseNode):
|
76
|
+
class Outputs(BaseNode.Outputs):
|
77
|
+
output = Inputs.input
|
78
|
+
|
79
|
+
class MultiWorkflow(BaseWorkflow[Inputs, BaseState]):
|
80
|
+
graph = ManualTrigger >> {NodeA, NodeB}
|
81
|
+
|
82
|
+
class Outputs(BaseWorkflow.Outputs):
|
83
|
+
output_a = NodeA.Outputs.output
|
84
|
+
output_b = NodeB.Outputs.output
|
85
|
+
|
86
|
+
result = serialize(MultiWorkflow)
|
87
|
+
workflow_data = cast(JsonObject, result["workflow_raw_data"])
|
88
|
+
trigger = cast(JsonObject, workflow_data["trigger"])
|
89
|
+
nodes = cast(JsonArray, workflow_data["nodes"])
|
90
|
+
|
91
|
+
assert trigger["type"] == "MANUAL"
|
92
|
+
assert len([n for n in nodes if cast(JsonObject, n)["type"] == "GENERIC"]) >= 2
|
93
|
+
|
94
|
+
|
95
|
+
def test_serialized_workflow_structure():
|
96
|
+
"""Verify complete structure of serialized workflow."""
|
97
|
+
result = serialize(create_workflow(ManualTrigger))
|
98
|
+
workflow_raw_data = cast(JsonObject, result["workflow_raw_data"])
|
99
|
+
definition = cast(JsonObject, workflow_raw_data["definition"])
|
100
|
+
|
101
|
+
assert result.keys() == {"workflow_raw_data", "input_variables", "state_variables", "output_variables"}
|
102
|
+
assert workflow_raw_data.keys() == {"nodes", "edges", "display_data", "definition", "output_values", "trigger"}
|
103
|
+
assert definition["name"] == "TestWorkflow"
|
104
|
+
|
105
|
+
|
106
|
+
def test_unknown_trigger_type():
|
107
|
+
"""Unknown trigger types raise ValueError."""
|
108
|
+
|
109
|
+
class UnknownTrigger(BaseTrigger):
|
110
|
+
pass
|
111
|
+
|
112
|
+
with pytest.raises(ValueError, match="Unknown trigger type: UnknownTrigger"):
|
113
|
+
serialize(create_workflow(UnknownTrigger))
|
@@ -37,6 +37,7 @@ from vellum_ee.workflows.display.base import (
|
|
37
37
|
WorkflowInputsDisplay,
|
38
38
|
WorkflowMetaDisplay,
|
39
39
|
WorkflowOutputDisplay,
|
40
|
+
get_trigger_type_mapping,
|
40
41
|
)
|
41
42
|
from vellum_ee.workflows.display.editor.types import NodeDisplayData, NodeDisplayPosition
|
42
43
|
from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
|
@@ -408,22 +409,74 @@ class BaseWorkflowDisplay(Generic[WorkflowType]):
|
|
408
409
|
except Exception as e:
|
409
410
|
self.display_context.add_error(e)
|
410
411
|
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
"
|
412
|
+
# Serialize workflow-level trigger if present
|
413
|
+
trigger_data: Optional[JsonObject] = self._serialize_workflow_trigger()
|
414
|
+
|
415
|
+
workflow_raw_data: JsonObject = {
|
416
|
+
"nodes": cast(JsonArray, nodes_dict_list),
|
417
|
+
"edges": edges,
|
418
|
+
"display_data": self.display_context.workflow_display.display_data.dict(),
|
419
|
+
"definition": {
|
420
|
+
"name": self._workflow.__name__,
|
421
|
+
"module": cast(JsonArray, self._workflow.__module__.split(".")),
|
421
422
|
},
|
423
|
+
"output_values": output_values,
|
424
|
+
}
|
425
|
+
|
426
|
+
if trigger_data is not None:
|
427
|
+
workflow_raw_data["trigger"] = trigger_data
|
428
|
+
|
429
|
+
return {
|
430
|
+
"workflow_raw_data": workflow_raw_data,
|
422
431
|
"input_variables": input_variables,
|
423
432
|
"state_variables": state_variables,
|
424
433
|
"output_variables": output_variables,
|
425
434
|
}
|
426
435
|
|
436
|
+
def _serialize_workflow_trigger(self) -> Optional[JsonObject]:
|
437
|
+
"""
|
438
|
+
Serialize workflow-level trigger information.
|
439
|
+
|
440
|
+
Returns:
|
441
|
+
JsonObject with trigger data if a trigger is present, None otherwise
|
442
|
+
"""
|
443
|
+
# Get all trigger edges from the workflow's subgraphs
|
444
|
+
trigger_edges = []
|
445
|
+
for subgraph in self._workflow.get_subgraphs():
|
446
|
+
trigger_edges.extend(list(subgraph.trigger_edges))
|
447
|
+
|
448
|
+
if not trigger_edges:
|
449
|
+
# No workflow-level trigger defined
|
450
|
+
return None
|
451
|
+
|
452
|
+
# Get the trigger class from the first edge
|
453
|
+
trigger_class = trigger_edges[0].trigger_class
|
454
|
+
|
455
|
+
# Validate that all trigger edges use the same trigger type
|
456
|
+
trigger_type_mapping = get_trigger_type_mapping()
|
457
|
+
for edge in trigger_edges:
|
458
|
+
if edge.trigger_class != trigger_class:
|
459
|
+
raise ValueError(
|
460
|
+
f"Mixed trigger types not supported. Found {trigger_class.__name__} and "
|
461
|
+
f"{edge.trigger_class.__name__} in the same workflow."
|
462
|
+
)
|
463
|
+
|
464
|
+
# Get the trigger type from the mapping
|
465
|
+
trigger_type = trigger_type_mapping.get(trigger_class)
|
466
|
+
if trigger_type is None:
|
467
|
+
raise ValueError(
|
468
|
+
f"Unknown trigger type: {trigger_class.__name__}. "
|
469
|
+
f"Please add it to the trigger type mapping in get_trigger_type_mapping()."
|
470
|
+
)
|
471
|
+
|
472
|
+
return {
|
473
|
+
"type": trigger_type.value,
|
474
|
+
"definition": {
|
475
|
+
"name": trigger_class.__name__,
|
476
|
+
"module": cast(JsonArray, trigger_class.__module__.split(".")),
|
477
|
+
},
|
478
|
+
}
|
479
|
+
|
427
480
|
def _serialize_edge_display_data(self, edge_display: EdgeDisplay) -> Optional[JsonObject]:
|
428
481
|
"""Serialize edge display data, returning None if no display data is present."""
|
429
482
|
if edge_display.z_index is not None:
|
File without changes
|
File without changes
|
File without changes
|