vellum-ai 0.13.8__py3-none-any.whl → 0.13.10__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/client/core/client_wrapper.py +1 -1
- vellum/plugins/vellum_mypy.py +6 -2
- vellum/workflows/descriptors/utils.py +1 -1
- vellum/workflows/nodes/bases/base.py +1 -2
- vellum/workflows/nodes/displayable/api_node/node.py +4 -1
- vellum/workflows/nodes/displayable/bases/api_node/node.py +4 -1
- vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py +4 -1
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py +4 -0
- vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py +4 -0
- vellum/workflows/nodes/displayable/bases/search_node.py +4 -0
- vellum/workflows/nodes/displayable/code_execution_node/node.py +4 -1
- vellum/workflows/nodes/displayable/conditional_node/node.py +4 -0
- vellum/workflows/nodes/displayable/final_output_node/node.py +4 -0
- vellum/workflows/nodes/displayable/guardrail_node/node.py +4 -1
- vellum/workflows/nodes/displayable/inline_prompt_node/node.py +4 -0
- vellum/workflows/nodes/displayable/merge_node/node.py +3 -1
- vellum/workflows/nodes/displayable/note_node/node.py +4 -0
- vellum/workflows/nodes/displayable/prompt_deployment_node/node.py +4 -0
- vellum/workflows/nodes/displayable/search_node/node.py +4 -0
- vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py +4 -1
- vellum/workflows/nodes/utils.py +6 -18
- {vellum_ai-0.13.8.dist-info → vellum_ai-0.13.10.dist-info}/METADATA +1 -1
- {vellum_ai-0.13.8.dist-info → vellum_ai-0.13.10.dist-info}/RECORD +49 -48
- vellum_ee/workflows/display/nodes/base_node_display.py +103 -3
- vellum_ee/workflows/display/nodes/vellum/base_node.py +34 -105
- vellum_ee/workflows/display/nodes/vellum/conditional_node.py +2 -1
- vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py +63 -0
- vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py +3 -4
- vellum_ee/workflows/display/nodes/vellum/try_node.py +28 -4
- vellum_ee/workflows/display/nodes/vellum/utils.py +1 -80
- vellum_ee/workflows/display/tests/test_vellum_workflow_display.py +56 -0
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py +3 -2
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py +143 -26
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +10 -10
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py +6 -6
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py +32 -34
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py +4 -4
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py +1 -2
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py +5 -5
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py +1 -1
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py +6 -3
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +6 -3
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py +3 -3
- vellum_ee/workflows/display/utils/vellum.py +74 -4
- vellum_ee/workflows/display/workflows/base_workflow_display.py +22 -24
- vellum_ee/workflows/display/workflows/vellum_workflow_display.py +6 -15
- {vellum_ai-0.13.8.dist-info → vellum_ai-0.13.10.dist-info}/LICENSE +0 -0
- {vellum_ai-0.13.8.dist-info → vellum_ai-0.13.10.dist-info}/WHEEL +0 -0
- {vellum_ai-0.13.8.dist-info → vellum_ai-0.13.10.dist-info}/entry_points.txt +0 -0
@@ -21,7 +21,7 @@ vellum_ee/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
|
|
21
21
|
vellum_ee/workflows/display/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
22
22
|
vellum_ee/workflows/display/base.py,sha256=3ZFUYRNKL24fBqXhKpa_Dq2W1a-a86J20dmJYA3H2eY,1755
|
23
23
|
vellum_ee/workflows/display/nodes/__init__.py,sha256=5XOcZJXYUgaLS55QgRJzyQ_W1tpeprjnYAeYVezqoGw,160
|
24
|
-
vellum_ee/workflows/display/nodes/base_node_display.py,sha256=
|
24
|
+
vellum_ee/workflows/display/nodes/base_node_display.py,sha256=aucM0ta33owcDwxP-zOvCm9Nb7q7wzjDfxrnyKPV5W4,11423
|
25
25
|
vellum_ee/workflows/display/nodes/base_node_vellum_display.py,sha256=BxA-YVUJvB36NM-Q5DNCwckeqymwLKMp9DVCaTyrPbs,2253
|
26
26
|
vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=vyKeJAevAXvEAEtWeTEdBZXD3eJQYW_DEXLKVZ5KmYc,1325
|
27
27
|
vellum_ee/workflows/display/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -30,9 +30,9 @@ vellum_ee/workflows/display/nodes/types.py,sha256=St1BB6no528OyELGiyRabWao0GGw6m
|
|
30
30
|
vellum_ee/workflows/display/nodes/utils.py,sha256=sloya5TpXsnot1HURc9L51INwflRqUzHxRVnCS9Cd-4,973
|
31
31
|
vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=_raKY9eKi_OvIFn6nGvf9xKSboKtYLHCWaWCwDQFbOc,1567
|
32
32
|
vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=hoV-cUtS6H9kmRQXHd2py95GRWI_dAnnaPwvlNBkDOQ,8571
|
33
|
-
vellum_ee/workflows/display/nodes/vellum/base_node.py,sha256=
|
33
|
+
vellum_ee/workflows/display/nodes/vellum/base_node.py,sha256=BE5bn7_SQ23r2jWEFVJcS6fZzB5fXX9uaADya9NIE6Y,4799
|
34
34
|
vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=z00Z3L0d4PsUQo4S8FRDTtOFLtjdi17TJbatNVF4nM8,4288
|
35
|
-
vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=
|
35
|
+
vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=ybLIa4uclqVIy3VAQvI1ivg2tnK5Ug_1R5a69DFqL7E,11104
|
36
36
|
vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=Tyx74dUmj_ef0slptoUXHtkjLbNd3f4hXeoEozFaFcw,2023
|
37
37
|
vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=p-PvlnxpBQ7IKskZi2A19jKAtKnSxJ8LPbGMA83VkFk,2805
|
38
38
|
vellum_ee/workflows/display/nodes/vellum/guardrail_node.py,sha256=aYZSJTxknU4LMiQdWk9LcK6CkhdozeDEMiRxfAyUNEc,2202
|
@@ -46,28 +46,29 @@ vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=TxcAGZDl_hvJ7Y1hU
|
|
46
46
|
vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=lfevlHpGEX14dEDym6qmnkw3nvzQPTB1_D2ch12B_Rk,2701
|
47
47
|
vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=JVIMPR3WpveOCWZubHKZkE04mavnTdb_9QY_r3XliRg,3424
|
48
48
|
vellum_ee/workflows/display/nodes/vellum/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
49
|
-
vellum_ee/workflows/display/nodes/vellum/tests/
|
50
|
-
vellum_ee/workflows/display/nodes/vellum/
|
51
|
-
vellum_ee/workflows/display/nodes/vellum/
|
49
|
+
vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py,sha256=mtzB8LJlFCHVFM4H5AanLp29gQfaVmnN4A4iaRGJHoI,2427
|
50
|
+
vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py,sha256=3uT7Gbc0f_mQ3u8uZuCWd0mJ4GtWbz2gbUMySYaVlNE,3774
|
51
|
+
vellum_ee/workflows/display/nodes/vellum/try_node.py,sha256=tkKILq38n3QXcd2A-RfW8DeHas0I3MII3mexIYYKMtg,5985
|
52
|
+
vellum_ee/workflows/display/nodes/vellum/utils.py,sha256=aBmTg9pJloG1BxhYcqzxs5JOA-IixncLVr1XiDzANnA,4313
|
52
53
|
vellum_ee/workflows/display/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
53
|
-
vellum_ee/workflows/display/tests/test_vellum_workflow_display.py,sha256=
|
54
|
+
vellum_ee/workflows/display/tests/test_vellum_workflow_display.py,sha256=h4bE187MyM0eT_elFnOxwsCeMHeuzSK0orjgAy8kV1k,4952
|
54
55
|
vellum_ee/workflows/display/tests/workflow_serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
55
56
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
56
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=
|
57
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=
|
58
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=
|
59
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py,sha256=
|
60
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py,sha256=
|
61
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py,sha256=
|
57
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=g4R4vnZDcpeZ7jCGpqZhDx8z7Kt1dH7r9iDfCLKJ56A,2252
|
58
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=jCvt_plgTaKlf5H7alWhYHihvc-Y4p635UhHCjQSbmM,7115
|
59
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=hcsK36oU9UvYNOdhdKnn2nO36IPzqM4XOxLcz6od9mE,10228
|
60
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py,sha256=kuJek64zXtrQZPcSFENr12EST_zaypPzFh67xIr6PXU,6260
|
61
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py,sha256=7BRX1Qz1VF_eMqazp6FhlYcOK6sj8p-qu43l7SI4JF0,37351
|
62
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py,sha256=EbVgg_3_ipTt3MOop4RARX0fmNjwqZtkhIXzx9nGw7Y,4487
|
62
63
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py,sha256=bXZWxOKAVjZlbP3iLHPHGA4aPs0EguKlQqmYPNGv3cU,16391
|
63
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py,sha256=
|
64
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py,sha256=
|
64
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py,sha256=uvABhpstyxNNOz50-XJMAr3SKp8gluPp1mUtJjvRL0c,29410
|
65
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py,sha256=n3F_Eyru0DYOszBH4jplz7Mzt2FfBNxGlCkTFqvrX-M,48399
|
65
66
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=QVlkczxzaKuOhwbRvVP70otPDNnJcSGDfN79j92lFyk,5534
|
66
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=
|
67
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=yWDykoHUjuiVYdevcJxWmYDDmbIszpHKYBu19vqR-I8,5746
|
67
68
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py,sha256=mEkvKUrt8U6e9bN65QRG7Zd3KdCdoMvHm96LjGwy96k,7427
|
68
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256
|
69
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=
|
70
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=
|
69
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=CxbnZ3tB8gir9xopixjvT0hNYyjMHvT_m8BzY5kl8Dg,21497
|
70
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=5xXLoUNgGkZvRFPJrdPiD0fErgwdPk-ikI3rP9sCAA4,16145
|
71
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=ON3TQiIFDiCvasQiNEyuAZDwpTYGOtitdLDLj2kejL8,8422
|
71
72
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py,sha256=W_d-hsjSqbqR5BA3aF3KFoEyfLV6x_yhNKmLA1ai2QY,8622
|
72
73
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py,sha256=azUVSdXWoYyAjKuM8m9ikOoJPb5JlEvJtR5nSRR0eaA,12989
|
73
74
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py,sha256=yq98DHxetpbqYnGVTDmcokU0A4XAD7E-NcKhrEMP66M,11295
|
@@ -77,12 +78,12 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_ser
|
|
77
78
|
vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=wQ97k-y9rZwKYlZSA6Z9XGUnGRaJ5BvCFu5QnhuEp4A,7404
|
78
79
|
vellum_ee/workflows/display/types.py,sha256=jWTpfQv3baEWjbP12duc3MBz3TK03Ja1UI5458PVQVY,4211
|
79
80
|
vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
80
|
-
vellum_ee/workflows/display/utils/vellum.py,sha256=
|
81
|
+
vellum_ee/workflows/display/utils/vellum.py,sha256=0H-c3OaQYZ_sGdI4YmyxEcZ77oWn_Rfts-MLs_QWqls,7289
|
81
82
|
vellum_ee/workflows/display/vellum.py,sha256=8xXRI8b8Tt661H-iZreTQTvLNEKUr4lf-XaKhE7_yUY,8147
|
82
83
|
vellum_ee/workflows/display/workflows/__init__.py,sha256=kapXsC67VJcgSuiBMa86FdePG5A9kMB5Pi4Uy1O2ob4,207
|
83
|
-
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=
|
84
|
+
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=x4C621UTH_SZLJYmVBiC1q-D-wadJlTiSGlKAI6CUbA,14082
|
84
85
|
vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=kp0u8LN_2IwshLrhMImhpZx1hRyAcD5gXY-kDuuaGMQ,1269
|
85
|
-
vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=
|
86
|
+
vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=ReEaGb0IBWYeTmEvP5ObcJlTe6RtAogOZlemHkEwBcM,16486
|
86
87
|
vellum_ee/workflows/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
87
88
|
vellum_ee/workflows/server/virtual_file_loader.py,sha256=X_DdNK7MfyOjKWekk6YQpOSCT6klKcdjT6nVJcBH1sM,1481
|
88
89
|
vellum_ee/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -111,7 +112,7 @@ vellum/client/README.md,sha256=JkCJjmMZl4jrPj46pkmL9dpK4gSzQQmP5I7z4aME4LY,4749
|
|
111
112
|
vellum/client/__init__.py,sha256=8nZt88C9SVwWanjLbIQMU3rzb32h5UZfFMBx3VPHB50,111887
|
112
113
|
vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
|
113
114
|
vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
|
114
|
-
vellum/client/core/client_wrapper.py,sha256=
|
115
|
+
vellum/client/core/client_wrapper.py,sha256=QFtPX3r8rOjA_HWWWzqeN6YXR94sGx14HQGv7kmubTA,1869
|
115
116
|
vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
|
116
117
|
vellum/client/core/file.py,sha256=X9IbmkZmB2bB_DpmZAO3crWdXagOakAyn6UCOCImCPg,2322
|
117
118
|
vellum/client/core/http_client.py,sha256=R0pQpCppnEtxccGvXl4uJ76s7ro_65Fo_erlNNLp_AI,19228
|
@@ -691,7 +692,7 @@ vellum/evaluations/utils/paginator.py,sha256=rEED_BJAXAM6tM1yMwHePNzszjq_tTq4NbQ
|
|
691
692
|
vellum/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
692
693
|
vellum/plugins/pydantic.py,sha256=dNtZWHo-IdseG52C2RoTanxyTJg0AhPZrH-9lbNqwYg,2604
|
693
694
|
vellum/plugins/utils.py,sha256=U9ZY9KdE3RRvbcG01hXxu9CvfJD6Fo7nJDgcHjQn0FI,606
|
694
|
-
vellum/plugins/vellum_mypy.py,sha256=
|
695
|
+
vellum/plugins/vellum_mypy.py,sha256=QTuMSq6PiZW1dyTUZ5Bf1d4XkgFj0TKAgZLP8f4UgL4,27914
|
695
696
|
vellum/prompts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
696
697
|
vellum/prompts/blocks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
697
698
|
vellum/prompts/blocks/compilation.py,sha256=ISuvDHaeVCPb1L7l4umORCECkDn0-rvE49hopz6c2gM,9222
|
@@ -1251,7 +1252,7 @@ vellum/workflows/context.py,sha256=R8qdsFbD_0p7B6PWnyvSrZ_aOgMtGw-_uk0P0UAmwLA,1
|
|
1251
1252
|
vellum/workflows/descriptors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1252
1253
|
vellum/workflows/descriptors/base.py,sha256=gSib3vJpcI_UC8y8jhdp-hOK3_TGTF-SuwdhxF6x5iQ,14332
|
1253
1254
|
vellum/workflows/descriptors/tests/test_utils.py,sha256=63w1P6PELNhWzpg1BqL8y2XQZ8XRt0RUkHgLcsXyOQE,4592
|
1254
|
-
vellum/workflows/descriptors/utils.py,sha256=
|
1255
|
+
vellum/workflows/descriptors/utils.py,sha256=nE51MR0KMy3SVHPBg0wjJ3CSJBTLM3tZnVUC_enQEIw,3826
|
1255
1256
|
vellum/workflows/edges/__init__.py,sha256=wSkmAnz9xyi4vZwtDbKxwlplt2skD7n3NsxkvR_pUus,50
|
1256
1257
|
vellum/workflows/edges/edge.py,sha256=N0SnY3gKVuxImPAdCbPMPlHJIXbkQ3fwq_LbJRvVMFc,677
|
1257
1258
|
vellum/workflows/emitters/__init__.py,sha256=YyOgaoLtVW8eFNEWODzCYb0HzL0PoSeNRf4diJ1Y0dk,80
|
@@ -1305,7 +1306,7 @@ vellum/workflows/inputs/base.py,sha256=1kMgr0WqCYdWUqgFvgSoAMw2067FAlgwhGXLgbIOr
|
|
1305
1306
|
vellum/workflows/logging.py,sha256=_a217XogktV4Ncz6xKFz7WfYmZAzkfVRVuC0rWob8ls,437
|
1306
1307
|
vellum/workflows/nodes/__init__.py,sha256=aVdQVv7Y3Ro3JlqXGpxwaU2zrI06plDHD2aumH5WUIs,1157
|
1307
1308
|
vellum/workflows/nodes/bases/__init__.py,sha256=cniHuz_RXdJ4TQgD8CBzoiKDiPxg62ErdVpCbWICX64,58
|
1308
|
-
vellum/workflows/nodes/bases/base.py,sha256=
|
1309
|
+
vellum/workflows/nodes/bases/base.py,sha256=iYn8XmKZKj43vCx_xs5AbnnLgBydmjlElwjb-0xe63I,14459
|
1309
1310
|
vellum/workflows/nodes/bases/base_adornment_node.py,sha256=eFTgsPCYb3eyGS0-kw7C6crFnwFx437R5wh9-8bWYts,2905
|
1310
1311
|
vellum/workflows/nodes/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1311
1312
|
vellum/workflows/nodes/bases/tests/test_base_node.py,sha256=51CueFVty9XYASC0rKr1cXWejho5WElmhfhp6cCONy0,3811
|
@@ -1333,50 +1334,50 @@ vellum/workflows/nodes/core/try_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW
|
|
1333
1334
|
vellum/workflows/nodes/core/try_node/tests/test_node.py,sha256=Wc2kLl-MkffsBxl3IiFaqLd16e2Iosxhk7qBnojPvQg,4092
|
1334
1335
|
vellum/workflows/nodes/displayable/__init__.py,sha256=6F_4DlSwvHuilWnIalp8iDjjDXl0Nmz4QzJV2PYe5RI,1023
|
1335
1336
|
vellum/workflows/nodes/displayable/api_node/__init__.py,sha256=MoxdQSnidIj1Nf_d-hTxlOxcZXaZnsWFDbE-PkTK24o,56
|
1336
|
-
vellum/workflows/nodes/displayable/api_node/node.py,sha256=
|
1337
|
+
vellum/workflows/nodes/displayable/api_node/node.py,sha256=KHuDTzOeXO3lCQm3lQqusAEhj84dhvszVpO1Xsx4qPM,2175
|
1337
1338
|
vellum/workflows/nodes/displayable/bases/__init__.py,sha256=0mWIx3qUrzllV7jqt7wN03vWGMuI1WrrLZeMLT2Cl2c,304
|
1338
1339
|
vellum/workflows/nodes/displayable/bases/api_node/__init__.py,sha256=1jwx4WC358CLA1jgzl_UD-rZmdMm2v9Mps39ndwCD7U,64
|
1339
|
-
vellum/workflows/nodes/displayable/bases/api_node/node.py,sha256=
|
1340
|
+
vellum/workflows/nodes/displayable/bases/api_node/node.py,sha256=kKiwrz8XGJkvFjipBthxs9h1e2ndWPgmpEzZiYs0I5I,2579
|
1340
1341
|
vellum/workflows/nodes/displayable/bases/base_prompt_node/__init__.py,sha256=Org3xTvgp1pA0uUXFfnJr29D3HzCey2lEdYF4zbIUgo,70
|
1341
|
-
vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py,sha256=
|
1342
|
+
vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py,sha256=reDW1aHetmkesyq9iVrbTtesql-SFUsd2LygGLfdJPo,2258
|
1342
1343
|
vellum/workflows/nodes/displayable/bases/inline_prompt_node/__init__.py,sha256=Hl35IAoepRpE-j4cALaXVJIYTYOF3qszyVbxTj4kS1s,82
|
1343
1344
|
vellum/workflows/nodes/displayable/bases/inline_prompt_node/constants.py,sha256=fnjiRWLoRlC4Puo5oQcpZD5Hd-EesxsAo9l5tGAkpZQ,270
|
1344
|
-
vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py,sha256=
|
1345
|
-
vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py,sha256=
|
1346
|
-
vellum/workflows/nodes/displayable/bases/search_node.py,sha256=
|
1345
|
+
vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py,sha256=j6AKAVIl_uU77a6JMGnMTyFnnK-jsfPVthxrgbltQRE,6453
|
1346
|
+
vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py,sha256=FAY6cR3rlIWsufprA6WXefOaU2J1LK0HFfQkBxCQ-yI,5181
|
1347
|
+
vellum/workflows/nodes/displayable/bases/search_node.py,sha256=3UtbqY3QO4kzfJHbmUNZGnEEfJmaoiF892u8H6TGjp8,5381
|
1347
1348
|
vellum/workflows/nodes/displayable/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1348
1349
|
vellum/workflows/nodes/displayable/bases/tests/test_utils.py,sha256=uQM9RTVmC-fMQ4hd4481QZbviokshwYSxk1ee9leh3A,2406
|
1349
1350
|
vellum/workflows/nodes/displayable/bases/types.py,sha256=C37B2Qh2YP7s7pUjd-EYKc2Zl1TbnCgI_mENuUSb8bo,1706
|
1350
1351
|
vellum/workflows/nodes/displayable/bases/utils.py,sha256=hlbIRLAAeqRhzZPLK7WDvBzUT2b6tupaXYOF54iYvS0,4973
|
1351
1352
|
vellum/workflows/nodes/displayable/code_execution_node/__init__.py,sha256=0FLWMMktpzSnmBMizQglBpcPrP80fzVsoJwJgf822Cg,76
|
1352
|
-
vellum/workflows/nodes/displayable/code_execution_node/node.py,sha256=
|
1353
|
+
vellum/workflows/nodes/displayable/code_execution_node/node.py,sha256=Hzc0h9sogX8DfFbJqdDLxGU2CMY1WvGosZ7taJC4sPE,8754
|
1353
1354
|
vellum/workflows/nodes/displayable/code_execution_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1354
1355
|
vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1355
1356
|
vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/main.py,sha256=5QsbmkzSlSbcbWTG_JmIqcP-JNJzOPTKxGzdHos19W4,79
|
1356
1357
|
vellum/workflows/nodes/displayable/code_execution_node/tests/test_code_execution_node.py,sha256=s93M_EnU-4n60iSKv3FCf0kppwzFH5FNi9o9E58fQ3I,7510
|
1357
1358
|
vellum/workflows/nodes/displayable/code_execution_node/utils.py,sha256=LfI3kj2zQz6UGMld_uA9z2LjZobqRcgxQO4jdUWkg7o,376
|
1358
1359
|
vellum/workflows/nodes/displayable/conditional_node/__init__.py,sha256=AS_EIqFdU1F9t8aLmbZU-rLh9ry6LCJ0uj0D8F0L5Uw,72
|
1359
|
-
vellum/workflows/nodes/displayable/conditional_node/node.py,sha256=
|
1360
|
+
vellum/workflows/nodes/displayable/conditional_node/node.py,sha256=Qjfl33gZ3JEgxBA1EgzSUebboGvsARthIxxcQyvx5Gg,1152
|
1360
1361
|
vellum/workflows/nodes/displayable/final_output_node/__init__.py,sha256=G7VXM4OWpubvSJtVkGmMNeqgb9GkM7qZT838eL18XU4,72
|
1361
|
-
vellum/workflows/nodes/displayable/final_output_node/node.py,sha256=
|
1362
|
+
vellum/workflows/nodes/displayable/final_output_node/node.py,sha256=TFbDZLGEtmg2cOQeJ56pUQdAkuHRa_qjBRIOGZU7Fy4,1990
|
1362
1363
|
vellum/workflows/nodes/displayable/guardrail_node/__init__.py,sha256=Ab5eXmOoBhyV4dMWdzh32HLUmnPIBEK_zFCT38C4Fng,68
|
1363
|
-
vellum/workflows/nodes/displayable/guardrail_node/node.py,sha256=
|
1364
|
+
vellum/workflows/nodes/displayable/guardrail_node/node.py,sha256=h5nIBzQxbXTrdTq1wjDcekk1RV4-rKUNCshqdBAiJJY,4025
|
1364
1365
|
vellum/workflows/nodes/displayable/inline_prompt_node/__init__.py,sha256=gSUOoEZLlrx35-tQhSAd3An8WDwBqyiQh-sIebLU9wU,74
|
1365
|
-
vellum/workflows/nodes/displayable/inline_prompt_node/node.py,sha256=
|
1366
|
+
vellum/workflows/nodes/displayable/inline_prompt_node/node.py,sha256=UWOxIa3kizhDa5joAmEDlh0P66EaqatqxzLLbvbUybw,2294
|
1366
1367
|
vellum/workflows/nodes/displayable/inline_prompt_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1367
1368
|
vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py,sha256=57JYbHvfZAjEGfa4CvYSpAt5yLDj0bPIr1_RoG8n9oI,4725
|
1368
1369
|
vellum/workflows/nodes/displayable/merge_node/__init__.py,sha256=J8IC08dSH7P76wKlNuxe1sn7toNGtSQdFirUbtPDEs0,60
|
1369
|
-
vellum/workflows/nodes/displayable/merge_node/node.py,sha256=
|
1370
|
+
vellum/workflows/nodes/displayable/merge_node/node.py,sha256=nZtGGVAvY4fvGg8vwV6sTQ8_QLRnigeXt0vf2FL272A,450
|
1370
1371
|
vellum/workflows/nodes/displayable/note_node/__init__.py,sha256=KWA3P4fyYJ-fOTky8qNGlcOotQ-HeHJ9AjZt6mRQmCE,58
|
1371
|
-
vellum/workflows/nodes/displayable/note_node/node.py,sha256=
|
1372
|
+
vellum/workflows/nodes/displayable/note_node/node.py,sha256=sIN1VBQ7zeT3GhN0kupXbFfdpvgedWV79k4woJNp5IQ,394
|
1372
1373
|
vellum/workflows/nodes/displayable/prompt_deployment_node/__init__.py,sha256=krX1Hds-TSVYZsx0wJFX4wsAKkEFYOX1ifwRGiIM-EA,82
|
1373
|
-
vellum/workflows/nodes/displayable/prompt_deployment_node/node.py,sha256=
|
1374
|
+
vellum/workflows/nodes/displayable/prompt_deployment_node/node.py,sha256=ruOgvpg_9KV_HkovPQeu6TKpur9DT_J4CYQo50tULCY,2680
|
1374
1375
|
vellum/workflows/nodes/displayable/search_node/__init__.py,sha256=hpBpvbrDYf43DElRZFLzieSn8weXiwNiiNOJurERQbs,62
|
1375
|
-
vellum/workflows/nodes/displayable/search_node/node.py,sha256=
|
1376
|
+
vellum/workflows/nodes/displayable/search_node/node.py,sha256=_VHHuTNN4icZBgc7O5U9SVKrv1zgKipU72fOtxTyrQU,1453
|
1376
1377
|
vellum/workflows/nodes/displayable/search_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1377
1378
|
vellum/workflows/nodes/displayable/search_node/tests/test_node.py,sha256=2-QCV7Vk_-YMls33p0GOUtCv3f2uPNZCjkB2CRjek7o,6562
|
1378
1379
|
vellum/workflows/nodes/displayable/subworkflow_deployment_node/__init__.py,sha256=9yYM6001YZeqI1VOk1QuEM_yrffk_EdsO7qaPzINKds,92
|
1379
|
-
vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py,sha256=
|
1380
|
+
vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py,sha256=rDBB94bs9k-I9zmf3C0L_5wO3wW4WBuRXi5ry0rTGRY,7328
|
1380
1381
|
vellum/workflows/nodes/displayable/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1381
1382
|
vellum/workflows/nodes/displayable/tests/test_inline_text_prompt_node.py,sha256=CI7iMyyIlnds1rkVSjICOFg2UY0yV51NTKtKpfeEME4,4677
|
1382
1383
|
vellum/workflows/nodes/displayable/tests/test_search_node_wth_text_output.py,sha256=VepO5z1277c1y5N6LLIC31nnWD1aak2m5oPFplfJHHs,6935
|
@@ -1385,7 +1386,7 @@ vellum/workflows/nodes/experimental/README.md,sha256=eF6DfIL8t-HbF9-mcofOMymKrra
|
|
1385
1386
|
vellum/workflows/nodes/experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1386
1387
|
vellum/workflows/nodes/experimental/openai_chat_completion_node/__init__.py,sha256=lsyD9laR9p7kx5-BXGH2gUTM242UhKy8SMV0SR6S2iE,90
|
1387
1388
|
vellum/workflows/nodes/experimental/openai_chat_completion_node/node.py,sha256=1EGeiaT-Zoo6pttQFKKBcdf3dmhAbjKGaErYD5FFwlc,10185
|
1388
|
-
vellum/workflows/nodes/utils.py,sha256=
|
1389
|
+
vellum/workflows/nodes/utils.py,sha256=tjBsootwm7vUq9qU4ttDL3CWH0C9Sd6QlX7IhfCCy34,2512
|
1389
1390
|
vellum/workflows/outputs/__init__.py,sha256=AyZ4pRh_ACQIGvkf0byJO46EDnSix1ZCAXfvh-ms1QE,94
|
1390
1391
|
vellum/workflows/outputs/base.py,sha256=a7W6rNSDSawwGAXYjNTF2iHb9lnZu7WFSOagZIyy__k,7976
|
1391
1392
|
vellum/workflows/ports/__init__.py,sha256=bZuMt-R7z5bKwpu4uPW7LlJeePOQWmCcDSXe5frUY5g,101
|
@@ -1440,8 +1441,8 @@ vellum/workflows/vellum_client.py,sha256=ODrq_TSl-drX2aezXegf7pizpWDVJuTXH-j6528
|
|
1440
1441
|
vellum/workflows/workflows/__init__.py,sha256=KY45TqvavCCvXIkyCFMEc0dc6jTMOUci93U2DUrlZYc,66
|
1441
1442
|
vellum/workflows/workflows/base.py,sha256=k0kUWWko4fHyCqLSU_1cBK_pXZpl9MXekWiG-bdOAo0,18353
|
1442
1443
|
vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnadGsrSZGa7t7LpJA,2008
|
1443
|
-
vellum_ai-0.13.
|
1444
|
-
vellum_ai-0.13.
|
1445
|
-
vellum_ai-0.13.
|
1446
|
-
vellum_ai-0.13.
|
1447
|
-
vellum_ai-0.13.
|
1444
|
+
vellum_ai-0.13.10.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
|
1445
|
+
vellum_ai-0.13.10.dist-info/METADATA,sha256=qsbrVIIP35E7Q0tVUt2vd_NXWi9dYkUcksWgKYnCPy8,5335
|
1446
|
+
vellum_ai-0.13.10.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
1447
|
+
vellum_ai-0.13.10.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
|
1448
|
+
vellum_ai-0.13.10.dist-info/RECORD,,
|
@@ -16,15 +16,28 @@ from typing import (
|
|
16
16
|
get_origin,
|
17
17
|
)
|
18
18
|
|
19
|
+
from vellum.workflows.descriptors.base import BaseDescriptor
|
20
|
+
from vellum.workflows.expressions.between import BetweenExpression
|
21
|
+
from vellum.workflows.expressions.is_nil import IsNilExpression
|
22
|
+
from vellum.workflows.expressions.is_not_nil import IsNotNilExpression
|
23
|
+
from vellum.workflows.expressions.is_not_null import IsNotNullExpression
|
24
|
+
from vellum.workflows.expressions.is_not_undefined import IsNotUndefinedExpression
|
25
|
+
from vellum.workflows.expressions.is_null import IsNullExpression
|
26
|
+
from vellum.workflows.expressions.is_undefined import IsUndefinedExpression
|
27
|
+
from vellum.workflows.expressions.not_between import NotBetweenExpression
|
19
28
|
from vellum.workflows.nodes.bases.base import BaseNode
|
20
29
|
from vellum.workflows.ports import Port
|
21
30
|
from vellum.workflows.references import OutputReference
|
31
|
+
from vellum.workflows.references.execution_count import ExecutionCountReference
|
32
|
+
from vellum.workflows.references.vellum_secret import VellumSecretReference
|
33
|
+
from vellum.workflows.references.workflow_input import WorkflowInputReference
|
22
34
|
from vellum.workflows.types.core import JsonObject
|
23
35
|
from vellum.workflows.types.generics import NodeType
|
24
36
|
from vellum.workflows.types.utils import get_original_base
|
25
37
|
from vellum.workflows.utils.names import pascal_to_title_case
|
26
38
|
from vellum.workflows.utils.uuids import uuid4_from_hash
|
27
39
|
from vellum_ee.workflows.display.nodes.types import NodeOutputDisplay, PortDisplay, PortDisplayOverrides
|
40
|
+
from vellum_ee.workflows.display.utils.vellum import convert_descriptor_to_operator, primitive_to_vellum_value
|
28
41
|
from vellum_ee.workflows.display.vellum import CodeResourceDefinition
|
29
42
|
|
30
43
|
if TYPE_CHECKING:
|
@@ -76,12 +89,15 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
|
|
76
89
|
)
|
77
90
|
return node_definition
|
78
91
|
|
79
|
-
def
|
92
|
+
def get_trigger_id(self) -> UUID:
|
93
|
+
return uuid4_from_hash(f"{self.node_id}|trigger")
|
94
|
+
|
95
|
+
def get_node_output_display(self, output: OutputReference) -> Tuple[Type[BaseNode], NodeOutputDisplay]:
|
80
96
|
explicit_display = self.output_display.get(output)
|
81
97
|
if explicit_display:
|
82
|
-
return explicit_display
|
98
|
+
return self._node, explicit_display
|
83
99
|
|
84
|
-
return NodeOutputDisplay(id=uuid4_from_hash(f"{self.node_id}|{output.name}"), name=output.name)
|
100
|
+
return (self._node, NodeOutputDisplay(id=uuid4_from_hash(f"{self.node_id}|{output.name}"), name=output.name))
|
85
101
|
|
86
102
|
def get_node_port_display(self, port: Port) -> PortDisplay:
|
87
103
|
overrides = self.port_displays.get(port)
|
@@ -174,3 +190,87 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
|
|
174
190
|
|
175
191
|
node_class = cls.infer_node_class()
|
176
192
|
cls._node_display_registry[node_class] = cls
|
193
|
+
|
194
|
+
def serialize_condition(self, display_context: "WorkflowDisplayContext", condition: BaseDescriptor) -> JsonObject:
|
195
|
+
if isinstance(
|
196
|
+
condition,
|
197
|
+
(
|
198
|
+
IsNullExpression,
|
199
|
+
IsNotNullExpression,
|
200
|
+
IsNilExpression,
|
201
|
+
IsNotNilExpression,
|
202
|
+
IsUndefinedExpression,
|
203
|
+
IsNotUndefinedExpression,
|
204
|
+
),
|
205
|
+
):
|
206
|
+
lhs = self.serialize_value(display_context, condition._expression)
|
207
|
+
return {
|
208
|
+
"type": "UNARY_EXPRESSION",
|
209
|
+
"lhs": lhs,
|
210
|
+
"operator": convert_descriptor_to_operator(condition),
|
211
|
+
}
|
212
|
+
elif isinstance(condition, (BetweenExpression, NotBetweenExpression)):
|
213
|
+
base = self.serialize_value(display_context, condition._value)
|
214
|
+
lhs = self.serialize_value(display_context, condition._start)
|
215
|
+
rhs = self.serialize_value(display_context, condition._end)
|
216
|
+
|
217
|
+
return {
|
218
|
+
"type": "TERNARY_EXPRESSION",
|
219
|
+
"base": base,
|
220
|
+
"operator": convert_descriptor_to_operator(condition),
|
221
|
+
"lhs": lhs,
|
222
|
+
"rhs": rhs,
|
223
|
+
}
|
224
|
+
else:
|
225
|
+
lhs = self.serialize_value(display_context, condition._lhs) # type: ignore[attr-defined]
|
226
|
+
rhs = self.serialize_value(display_context, condition._rhs) # type: ignore[attr-defined]
|
227
|
+
|
228
|
+
return {
|
229
|
+
"type": "BINARY_EXPRESSION",
|
230
|
+
"lhs": lhs,
|
231
|
+
"operator": convert_descriptor_to_operator(condition),
|
232
|
+
"rhs": rhs,
|
233
|
+
}
|
234
|
+
|
235
|
+
def serialize_value(self, display_context: "WorkflowDisplayContext", value: BaseDescriptor) -> JsonObject:
|
236
|
+
if isinstance(value, WorkflowInputReference):
|
237
|
+
workflow_input_display = display_context.global_workflow_input_displays[value]
|
238
|
+
return {
|
239
|
+
"type": "WORKFLOW_INPUT",
|
240
|
+
"input_variable_id": str(workflow_input_display.id),
|
241
|
+
}
|
242
|
+
|
243
|
+
if isinstance(value, OutputReference):
|
244
|
+
upstream_node, output_display = display_context.global_node_output_displays[value]
|
245
|
+
upstream_node_display = display_context.global_node_displays[upstream_node]
|
246
|
+
|
247
|
+
return {
|
248
|
+
"type": "NODE_OUTPUT",
|
249
|
+
"node_id": str(upstream_node_display.node_id),
|
250
|
+
"node_output_id": str(output_display.id),
|
251
|
+
}
|
252
|
+
|
253
|
+
if isinstance(value, VellumSecretReference):
|
254
|
+
return {
|
255
|
+
"type": "VELLUM_SECRET",
|
256
|
+
"vellum_secret_name": value.name,
|
257
|
+
}
|
258
|
+
|
259
|
+
if isinstance(value, ExecutionCountReference):
|
260
|
+
node_class_display = display_context.global_node_displays[value.node_class]
|
261
|
+
|
262
|
+
return {
|
263
|
+
"type": "EXECUTION_COUNTER",
|
264
|
+
"node_id": str(node_class_display.node_id),
|
265
|
+
}
|
266
|
+
|
267
|
+
if not isinstance(value, BaseDescriptor):
|
268
|
+
vellum_value = primitive_to_vellum_value(value)
|
269
|
+
return {
|
270
|
+
"type": "CONSTANT_VALUE",
|
271
|
+
"value": vellum_value.dict(),
|
272
|
+
}
|
273
|
+
|
274
|
+
# If it's not any of the references we know about,
|
275
|
+
# then try to serialize it as a nested value
|
276
|
+
return self.serialize_condition(display_context, value)
|
@@ -1,41 +1,37 @@
|
|
1
|
-
|
1
|
+
import inspect
|
2
|
+
from uuid import UUID
|
3
|
+
from typing import Any, Generic, Optional, TypeVar, cast
|
2
4
|
|
3
5
|
from vellum.workflows.constants import UNDEF
|
4
6
|
from vellum.workflows.descriptors.base import BaseDescriptor
|
5
|
-
from vellum.workflows.expressions.between import BetweenExpression
|
6
|
-
from vellum.workflows.expressions.is_nil import IsNilExpression
|
7
|
-
from vellum.workflows.expressions.is_not_nil import IsNotNilExpression
|
8
|
-
from vellum.workflows.expressions.is_not_null import IsNotNullExpression
|
9
|
-
from vellum.workflows.expressions.is_not_undefined import IsNotUndefinedExpression
|
10
|
-
from vellum.workflows.expressions.is_null import IsNullExpression
|
11
|
-
from vellum.workflows.expressions.is_undefined import IsUndefinedExpression
|
12
|
-
from vellum.workflows.expressions.not_between import NotBetweenExpression
|
13
7
|
from vellum.workflows.nodes.bases.base import BaseNode
|
14
|
-
from vellum.workflows.
|
15
|
-
from vellum.workflows.references.output import OutputReference
|
16
|
-
from vellum.workflows.references.vellum_secret import VellumSecretReference
|
17
|
-
from vellum.workflows.references.workflow_input import WorkflowInputReference
|
8
|
+
from vellum.workflows.nodes.utils import get_wrapped_node
|
18
9
|
from vellum.workflows.types.core import JsonArray, JsonObject
|
19
10
|
from vellum.workflows.utils.uuids import uuid4_from_hash
|
20
11
|
from vellum.workflows.utils.vellum_variables import primitive_type_to_vellum_variable_type
|
12
|
+
from vellum.workflows.workflows.base import BaseWorkflow
|
21
13
|
from vellum_ee.workflows.display.nodes.base_node_vellum_display import BaseNodeVellumDisplay
|
22
|
-
from vellum_ee.workflows.display.nodes.
|
14
|
+
from vellum_ee.workflows.display.nodes.get_node_display_class import get_node_display_class
|
23
15
|
from vellum_ee.workflows.display.types import WorkflowDisplayContext
|
24
|
-
from vellum_ee.workflows.display.utils.vellum import primitive_to_vellum_value
|
25
16
|
from vellum_ee.workflows.display.vellum import GenericNodeDisplayData
|
26
17
|
|
27
18
|
_BaseNodeType = TypeVar("_BaseNodeType", bound=BaseNode)
|
28
19
|
|
29
20
|
|
30
21
|
class BaseNodeDisplay(BaseNodeVellumDisplay[_BaseNodeType], Generic[_BaseNodeType]):
|
31
|
-
def serialize(
|
22
|
+
def serialize(
|
23
|
+
self, display_context: WorkflowDisplayContext, adornments: Optional[JsonArray] = None, **kwargs: Any
|
24
|
+
) -> JsonObject:
|
32
25
|
node = self._node
|
33
26
|
node_id = self.node_id
|
34
27
|
|
35
28
|
attributes: JsonArray = []
|
36
29
|
for attribute in node:
|
37
|
-
|
30
|
+
if inspect.isclass(attribute.instance) and issubclass(attribute.instance, BaseWorkflow):
|
31
|
+
# We don't need to serialize generic node attributes containing a subworkflow
|
32
|
+
continue
|
38
33
|
|
34
|
+
id = str(uuid4_from_hash(f"{node_id}|{attribute.name}"))
|
39
35
|
attributes.append(
|
40
36
|
{
|
41
37
|
"id": id,
|
@@ -44,9 +40,23 @@ class BaseNodeDisplay(BaseNodeVellumDisplay[_BaseNodeType], Generic[_BaseNodeTyp
|
|
44
40
|
}
|
45
41
|
)
|
46
42
|
|
43
|
+
wrapped_node = get_wrapped_node(node)
|
44
|
+
if wrapped_node is not None:
|
45
|
+
display_class = get_node_display_class(BaseNodeDisplay, wrapped_node)
|
46
|
+
|
47
|
+
adornment: JsonObject = {
|
48
|
+
"id": str(node_id),
|
49
|
+
"label": node.__qualname__,
|
50
|
+
"base": self.get_base().dict(),
|
51
|
+
"attributes": attributes,
|
52
|
+
}
|
53
|
+
|
54
|
+
existing_adornments = adornments if adornments is not None else []
|
55
|
+
return display_class().serialize(display_context, adornments=existing_adornments + [adornment])
|
56
|
+
|
47
57
|
ports: JsonArray = []
|
48
|
-
for
|
49
|
-
id = str(
|
58
|
+
for port in node.Ports:
|
59
|
+
id = str(self.get_node_port_display(port).id)
|
50
60
|
|
51
61
|
if port._condition_type:
|
52
62
|
ports.append(
|
@@ -94,99 +104,18 @@ class BaseNodeDisplay(BaseNodeVellumDisplay[_BaseNodeType], Generic[_BaseNodeTyp
|
|
94
104
|
"base": self.get_base().dict(),
|
95
105
|
"definition": self.get_definition().dict(),
|
96
106
|
"trigger": {
|
97
|
-
"id": str(
|
107
|
+
"id": str(self.get_trigger_id()),
|
98
108
|
"merge_behavior": node.Trigger.merge_behavior.value,
|
99
109
|
},
|
100
110
|
"ports": ports,
|
101
|
-
"adornments":
|
111
|
+
"adornments": adornments,
|
102
112
|
"attributes": attributes,
|
103
113
|
"outputs": outputs,
|
104
114
|
}
|
105
115
|
|
116
|
+
def get_target_handle_id(self) -> UUID:
|
117
|
+
return self.get_trigger_id()
|
118
|
+
|
106
119
|
def get_generic_node_display_data(self) -> GenericNodeDisplayData:
|
107
120
|
explicit_value = self._get_explicit_node_display_attr("display_data", GenericNodeDisplayData)
|
108
121
|
return explicit_value if explicit_value else GenericNodeDisplayData()
|
109
|
-
|
110
|
-
def serialize_condition(self, display_context: WorkflowDisplayContext, condition: BaseDescriptor) -> JsonObject:
|
111
|
-
if isinstance(
|
112
|
-
condition,
|
113
|
-
(
|
114
|
-
IsNullExpression,
|
115
|
-
IsNotNullExpression,
|
116
|
-
IsNilExpression,
|
117
|
-
IsNotNilExpression,
|
118
|
-
IsUndefinedExpression,
|
119
|
-
IsNotUndefinedExpression,
|
120
|
-
),
|
121
|
-
):
|
122
|
-
lhs = self.serialize_value(display_context, condition._expression)
|
123
|
-
return {
|
124
|
-
"type": "UNARY_EXPRESSION",
|
125
|
-
"lhs": lhs,
|
126
|
-
"operator": convert_descriptor_to_operator(condition),
|
127
|
-
}
|
128
|
-
elif isinstance(condition, (BetweenExpression, NotBetweenExpression)):
|
129
|
-
base = self.serialize_value(display_context, condition._value)
|
130
|
-
lhs = self.serialize_value(display_context, condition._start)
|
131
|
-
rhs = self.serialize_value(display_context, condition._end)
|
132
|
-
|
133
|
-
return {
|
134
|
-
"type": "TERNARY_EXPRESSION",
|
135
|
-
"base": base,
|
136
|
-
"operator": convert_descriptor_to_operator(condition),
|
137
|
-
"lhs": lhs,
|
138
|
-
"rhs": rhs,
|
139
|
-
}
|
140
|
-
else:
|
141
|
-
lhs = self.serialize_value(display_context, condition._lhs) # type: ignore[attr-defined]
|
142
|
-
rhs = self.serialize_value(display_context, condition._rhs) # type: ignore[attr-defined]
|
143
|
-
|
144
|
-
return {
|
145
|
-
"type": "BINARY_EXPRESSION",
|
146
|
-
"lhs": lhs,
|
147
|
-
"operator": convert_descriptor_to_operator(condition),
|
148
|
-
"rhs": rhs,
|
149
|
-
}
|
150
|
-
|
151
|
-
def serialize_value(self, display_context: WorkflowDisplayContext, value: BaseDescriptor) -> JsonObject:
|
152
|
-
if isinstance(value, WorkflowInputReference):
|
153
|
-
workflow_input_display = display_context.global_workflow_input_displays[value]
|
154
|
-
return {
|
155
|
-
"type": "WORKFLOW_INPUT",
|
156
|
-
"input_variable_id": str(workflow_input_display.id),
|
157
|
-
}
|
158
|
-
|
159
|
-
if isinstance(value, OutputReference):
|
160
|
-
upstream_node, output_display = display_context.global_node_output_displays[value]
|
161
|
-
upstream_node_display = display_context.global_node_displays[upstream_node]
|
162
|
-
|
163
|
-
return {
|
164
|
-
"type": "NODE_OUTPUT",
|
165
|
-
"node_id": str(upstream_node_display.node_id),
|
166
|
-
"node_output_id": str(output_display.id),
|
167
|
-
}
|
168
|
-
|
169
|
-
if isinstance(value, VellumSecretReference):
|
170
|
-
return {
|
171
|
-
"type": "VELLUM_SECRET",
|
172
|
-
"vellum_secret_name": value.name,
|
173
|
-
}
|
174
|
-
|
175
|
-
if isinstance(value, ExecutionCountReference):
|
176
|
-
node_class_display = display_context.global_node_displays[value.node_class]
|
177
|
-
|
178
|
-
return {
|
179
|
-
"type": "EXECUTION_COUNTER",
|
180
|
-
"node_id": str(node_class_display.node_id),
|
181
|
-
}
|
182
|
-
|
183
|
-
if not isinstance(value, BaseDescriptor):
|
184
|
-
vellum_value = primitive_to_vellum_value(value)
|
185
|
-
return {
|
186
|
-
"type": "CONSTANT_VALUE",
|
187
|
-
"value": vellum_value.dict(),
|
188
|
-
}
|
189
|
-
|
190
|
-
# If it's not any of the references we know about,
|
191
|
-
# then try to serialize it as a nested value
|
192
|
-
return self.serialize_condition(display_context, value)
|
@@ -17,8 +17,9 @@ from vellum.workflows.nodes.displayable import ConditionalNode
|
|
17
17
|
from vellum.workflows.types.core import ConditionType, JsonObject
|
18
18
|
from vellum.workflows.utils.uuids import uuid4_from_hash
|
19
19
|
from vellum_ee.workflows.display.nodes.base_node_vellum_display import BaseNodeVellumDisplay
|
20
|
-
from vellum_ee.workflows.display.nodes.vellum.utils import
|
20
|
+
from vellum_ee.workflows.display.nodes.vellum.utils import create_node_input
|
21
21
|
from vellum_ee.workflows.display.types import WorkflowDisplayContext
|
22
|
+
from vellum_ee.workflows.display.utils.vellum import convert_descriptor_to_operator
|
22
23
|
from vellum_ee.workflows.display.vellum import NodeInput
|
23
24
|
|
24
25
|
_ConditionalNodeType = TypeVar("_ConditionalNodeType", bound=ConditionalNode)
|
@@ -0,0 +1,63 @@
|
|
1
|
+
from typing import Any, Dict, cast
|
2
|
+
|
3
|
+
from vellum.workflows import BaseWorkflow
|
4
|
+
from vellum.workflows.nodes.bases.base import BaseNode
|
5
|
+
from vellum.workflows.nodes.core.templating_node.node import TemplatingNode
|
6
|
+
from vellum.workflows.nodes.core.try_node.node import TryNode
|
7
|
+
from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
|
8
|
+
from vellum_ee.workflows.display.workflows.vellum_workflow_display import VellumWorkflowDisplay
|
9
|
+
|
10
|
+
|
11
|
+
def test_try_node_display__serialize_with_error_output() -> None:
|
12
|
+
# GIVEN a Base Node wrapped with a TryNode
|
13
|
+
@TryNode.wrap()
|
14
|
+
class MyNode(BaseNode):
|
15
|
+
class Outputs(BaseNode.Outputs):
|
16
|
+
hello = "world"
|
17
|
+
|
18
|
+
# AND a displayable node referencing
|
19
|
+
class OtherNode(TemplatingNode):
|
20
|
+
template = "{{ hello }} {{ error }}"
|
21
|
+
inputs = {
|
22
|
+
"hello": MyNode.Outputs.hello,
|
23
|
+
"error": MyNode.Outputs.error,
|
24
|
+
}
|
25
|
+
|
26
|
+
# AND a workflow referencing the two nodes
|
27
|
+
class MyWorkflow(BaseWorkflow):
|
28
|
+
graph = MyNode >> OtherNode
|
29
|
+
|
30
|
+
# WHEN we serialize the workflow
|
31
|
+
workflow_display = get_workflow_display(base_display_class=VellumWorkflowDisplay, workflow_class=MyWorkflow)
|
32
|
+
serialized_workflow = cast(Dict[str, Any], workflow_display.serialize())
|
33
|
+
|
34
|
+
# THEN the correct inputs should be serialized on the node
|
35
|
+
serialized_node = next(
|
36
|
+
node for node in serialized_workflow["workflow_raw_data"]["nodes"] if node["id"] == str(OtherNode.__id__)
|
37
|
+
)
|
38
|
+
hello_input_value = next(input["value"] for input in serialized_node["inputs"] if input["key"] == "hello")
|
39
|
+
error_input_value = next(input["value"] for input in serialized_node["inputs"] if input["key"] == "error")
|
40
|
+
assert hello_input_value == {
|
41
|
+
"combinator": "OR",
|
42
|
+
"rules": [
|
43
|
+
{
|
44
|
+
"data": {
|
45
|
+
"node_id": str(MyNode.__wrapped_node__.__id__),
|
46
|
+
"output_id": "c8fbe459-c9ee-4639-a82d-961180cf9411",
|
47
|
+
},
|
48
|
+
"type": "NODE_OUTPUT",
|
49
|
+
}
|
50
|
+
],
|
51
|
+
}
|
52
|
+
assert error_input_value == {
|
53
|
+
"combinator": "OR",
|
54
|
+
"rules": [
|
55
|
+
{
|
56
|
+
"data": {
|
57
|
+
"node_id": str(MyNode.__wrapped_node__.__id__),
|
58
|
+
"output_id": "efe6e307-3ea4-4862-a26f-4c4416bb4537",
|
59
|
+
},
|
60
|
+
"type": "NODE_OUTPUT",
|
61
|
+
}
|
62
|
+
],
|
63
|
+
}
|