vellum-ai 0.14.17__py3-none-any.whl → 0.14.19__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 +1 -1
- vellum/client/types/__init__.py +2 -0
- vellum/client/types/node_input_compiled_secret_value.py +23 -0
- vellum/client/types/node_input_variable_compiled_value.py +2 -0
- vellum/types/node_input_compiled_secret_value.py +3 -0
- vellum/workflows/events/workflow.py +15 -1
- vellum/workflows/nodes/core/inline_subworkflow_node/node.py +16 -14
- vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py +29 -0
- vellum/workflows/nodes/core/retry_node/node.py +59 -39
- vellum/workflows/nodes/core/templating_node/node.py +2 -2
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/test_inline_prompt_node.py +116 -0
- vellum/workflows/nodes/displayable/inline_prompt_node/node.py +20 -0
- vellum/workflows/runner/runner.py +16 -1
- {vellum_ai-0.14.17.dist-info → vellum_ai-0.14.19.dist-info}/METADATA +1 -1
- {vellum_ai-0.14.17.dist-info → vellum_ai-0.14.19.dist-info}/RECORD +31 -28
- vellum_ee/workflows/display/nodes/base_node_display.py +14 -8
- vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +7 -7
- vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py +6 -1
- vellum_ee/workflows/display/nodes/vellum/templating_node.py +6 -7
- vellum_ee/workflows/display/nodes/vellum/tests/test_templating_node.py +97 -0
- vellum_ee/workflows/display/nodes/vellum/utils.py +1 -1
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +31 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py +1 -1
- vellum_ee/workflows/display/vellum.py +1 -148
- vellum_ee/workflows/display/workflows/base_workflow_display.py +1 -1
- vellum_ee/workflows/display/workflows/tests/test_workflow_display.py +13 -13
- vellum_ee/workflows/tests/test_display_meta.py +10 -10
- {vellum_ai-0.14.17.dist-info → vellum_ai-0.14.19.dist-info}/LICENSE +0 -0
- {vellum_ai-0.14.17.dist-info → vellum_ai-0.14.19.dist-info}/WHEEL +0 -0
- {vellum_ai-0.14.17.dist-info → vellum_ai-0.14.19.dist-info}/entry_points.txt +0 -0
@@ -24,7 +24,7 @@ vellum_ee/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
|
|
24
24
|
vellum_ee/workflows/display/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
25
25
|
vellum_ee/workflows/display/base.py,sha256=ak29FIsawhaFa9_paZUHThlZRFJ1xB486JWKuSt1PYY,1965
|
26
26
|
vellum_ee/workflows/display/nodes/__init__.py,sha256=436iSAh_Ex5tC68oEYvNgPu05ZVIAVXnS4PKGrQeZ0Y,321
|
27
|
-
vellum_ee/workflows/display/nodes/base_node_display.py,sha256=
|
27
|
+
vellum_ee/workflows/display/nodes/base_node_display.py,sha256=qBF1uZybN8dHzyMRvjqf3rWlAl0fdODV5h6WblhGJP8,17703
|
28
28
|
vellum_ee/workflows/display/nodes/base_node_vellum_display.py,sha256=ZLKQ8Xa3h9nGkj4t4V_7OeU7CBFWY3gXB9CkaCLOhEk,2699
|
29
29
|
vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=LhV2wSo07iOTUj1clKwH2zzCzKdLiW2gk22R3Qco81E,2196
|
30
30
|
vellum_ee/workflows/display/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -34,12 +34,12 @@ vellum_ee/workflows/display/nodes/utils.py,sha256=sloya5TpXsnot1HURc9L51INwflRqU
|
|
34
34
|
vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=nUIgH2s0-7IbQRNrBhLPyRNe8YIrx3Yo9HeeW-aXXFk,1668
|
35
35
|
vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=hoV-cUtS6H9kmRQXHd2py95GRWI_dAnnaPwvlNBkDOQ,8571
|
36
36
|
vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py,sha256=oJAQrAm5iFQq0_fX94sMbS3RQEK1M1VsoUck4vsPs9A,5820
|
37
|
-
vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=
|
37
|
+
vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=uIEpWxO8SYA_sb-EK_4wdyYEwGQOnykAOExFRkZcFaE,4241
|
38
38
|
vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=ybLIa4uclqVIy3VAQvI1ivg2tnK5Ug_1R5a69DFqL7E,11104
|
39
39
|
vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=I1Jkp2htRINJATtv1e-zs9BrReFX842djpiVgBPHDYg,2186
|
40
40
|
vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=p-PvlnxpBQ7IKskZi2A19jKAtKnSxJ8LPbGMA83VkFk,2805
|
41
41
|
vellum_ee/workflows/display/nodes/vellum/guardrail_node.py,sha256=aYZSJTxknU4LMiQdWk9LcK6CkhdozeDEMiRxfAyUNEc,2202
|
42
|
-
vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=
|
42
|
+
vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=grb2iDxZ8DiNlo1nfO3KPxs8saM_JZAskOFp-C4ZEq4,8908
|
43
43
|
vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py,sha256=MU9I8CB1X1TgL1aa1eT6DHWwNJ-2v79t74xl0oy-fBo,5510
|
44
44
|
vellum_ee/workflows/display/nodes/vellum/map_node.py,sha256=8CPnn06HIBxBOiECevUffeVmQmCpec6WtPQnNl9gj9Y,3748
|
45
45
|
vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=HkNMgdQELiON42jdO-xDLmqrEKdGx1RVqrz2DXNTLS8,3239
|
@@ -48,22 +48,23 @@ vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=LFjLUr
|
|
48
48
|
vellum_ee/workflows/display/nodes/vellum/retry_node.py,sha256=LgokATi7sSS38Fil-XjqoR4t7AMOJ-GzXRw6p606Svo,3397
|
49
49
|
vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=TxcAGZDl_hvJ7Y1hUi9YVEVrj9Ie0hKkASdpfRL4_cs,9227
|
50
50
|
vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=62baAElKoRKIoba0lLhnrXGWWx96B73VxKGxh7BaIxc,2612
|
51
|
-
vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=
|
51
|
+
vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=5EWzdA3TSUPlbJhs4uo1KGH6eGtDXZucVhlUoc_xpl4,3242
|
52
52
|
vellum_ee/workflows/display/nodes/vellum/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
53
53
|
vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py,sha256=ulrpoYUW-5kIxfG4Lf5F2p0k_EoYKhmahEbF3P_eruM,1648
|
54
54
|
vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py,sha256=bg9INsXiWfyK047u8TD1oEOFYrqDq8GC7Hvgz69n7BE,1988
|
55
55
|
vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py,sha256=NuIw8Yb42KUdoGi3Ur8_7VPg50IC4hNrwAkCociwqNk,2091
|
56
|
+
vellum_ee/workflows/display/nodes/vellum/tests/test_templating_node.py,sha256=Us32jf_FQnLuT4Bs2o5JyHxihCTAN8ozZghWIR0pl9k,3459
|
56
57
|
vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py,sha256=mtzB8LJlFCHVFM4H5AanLp29gQfaVmnN4A4iaRGJHoI,2427
|
57
58
|
vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py,sha256=4YUaTeD_OWF-UaPMyOTBTu9skGC1jgSHlAYrzbH7Z04,5039
|
58
59
|
vellum_ee/workflows/display/nodes/vellum/try_node.py,sha256=0ipBZMYm521tuwefQFgHOvTyTgiWVTkzxpQtnnmOAI0,4203
|
59
|
-
vellum_ee/workflows/display/nodes/vellum/utils.py,sha256=
|
60
|
+
vellum_ee/workflows/display/nodes/vellum/utils.py,sha256=lY3YsvzawDy15-8w3Brb4oSnVpVaMe5FQtgMi3BE3Mo,4737
|
60
61
|
vellum_ee/workflows/display/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
61
62
|
vellum_ee/workflows/display/tests/test_vellum_workflow_display.py,sha256=VD-4USiRlCcdC3Qe9WfdkxwFdircai0vqvuZCbELR84,9556
|
62
63
|
vellum_ee/workflows/display/tests/workflow_serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
63
64
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
64
65
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=A1-tIpC5KIKG9JA_rkd1nLS8zUG3Kb4QiVdvb3boFxE,2509
|
65
66
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=2ZDTmpiU2CcZe4ukxoQ79SJx8V8kDRQHgUxP5Vtesus,15605
|
66
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=
|
67
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=oEtjTovI6-T_OGND7UBDnBig0kjVm0bPwWMUbRCV1OU,19781
|
67
68
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py,sha256=KgxSN8L5AWPL8EpQfSZiTqK428nAIElcWrV-sR17528,6456
|
68
69
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py,sha256=yS8GpjbH0objjcNYK73j8rDHbhqinIbG7CcoNjnolBg,40611
|
69
70
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py,sha256=_-ADur28OkVy4YEgMHkkVYqMbS1j3GcOtX9MTYmmvf0,4632
|
@@ -81,7 +82,7 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_s
|
|
81
82
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py,sha256=-bGp82C5_XgcVxeM80zWL9viogxvE4DGk7-5H__wwxA,8649
|
82
83
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py,sha256=elc4ak2OyI4y5P6GPnK2RwuZLcx4FL6hHlmhY3ARk6k,13008
|
83
84
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py,sha256=BzFNl9ECeGh0krm-CUjbBQQq0g7krANsp0Sh-j5dAkc,11322
|
84
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py,sha256=
|
85
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py,sha256=qjaXGw0JTnPnQmDAFm7jkB3bVkApf-WQ0Gd6kptqdPA,7818
|
85
86
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=NdhE3lm7RMQ8DqkraPSq24IbOxNla9unbs4tsMWRzm4,3781
|
86
87
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=eD5686C9nWC5s6t08vbAnm9qf9t53gYQM-E1FwAa75c,3035
|
87
88
|
vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=huKAOeMJ2MKmp6XtbvMJTUadqynoV40Ypoz9jsBEBEQ,7431
|
@@ -89,11 +90,11 @@ vellum_ee/workflows/display/types.py,sha256=ixfmcQn51Rhsm4_0hWfG0_WpzLE89ZrDZpeY
|
|
89
90
|
vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
90
91
|
vellum_ee/workflows/display/utils/expressions.py,sha256=9FpOslDI-RCR5m4TgAu9KCHh4aTVnh7CHR2ykyMUDw0,1151
|
91
92
|
vellum_ee/workflows/display/utils/vellum.py,sha256=EVPQUSsZ3OIeLTEbV6LHPor37t9fnj9kJxDqP4PmTLQ,8234
|
92
|
-
vellum_ee/workflows/display/vellum.py,sha256=
|
93
|
+
vellum_ee/workflows/display/vellum.py,sha256=ROvXFoLmnEXmJJ_Nc0ZVz94LZf6opU4O1TWbGnAfHug,5028
|
93
94
|
vellum_ee/workflows/display/workflows/__init__.py,sha256=kapXsC67VJcgSuiBMa86FdePG5A9kMB5Pi4Uy1O2ob4,207
|
94
|
-
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256
|
95
|
+
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=-14UlLZlmfWDqNtxhY9GxXlrlPcgzEpAIffd94QPEvU,19932
|
95
96
|
vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=kp0u8LN_2IwshLrhMImhpZx1hRyAcD5gXY-kDuuaGMQ,1269
|
96
|
-
vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=
|
97
|
+
vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=Ny9VWjCxc1_w8Z5xiQEJmNmEwtjlDlxgFCrmCWSmFmA,8511
|
97
98
|
vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=mbAzCpswOek34ITeTkesbVreCXpulj4NFjIg3RcdVZ8,18243
|
98
99
|
vellum_ee/workflows/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
99
100
|
vellum_ee/workflows/server/virtual_file_loader.py,sha256=X_DdNK7MfyOjKWekk6YQpOSCT6klKcdjT6nVJcBH1sM,1481
|
@@ -116,15 +117,15 @@ vellum_ee/workflows/tests/local_workflow/nodes/__init__.py,sha256=1F6jxUpSKfPXPj
|
|
116
117
|
vellum_ee/workflows/tests/local_workflow/nodes/final_output.py,sha256=ZX7zBv87zirg0w9VKUW3QVDSdBLDqcqAMZjCL_oWbpU,297
|
117
118
|
vellum_ee/workflows/tests/local_workflow/nodes/templating_node.py,sha256=NQwFN61QkHfI3Vssz-B0NKGfupK8PU0FDSAIAhYBLi0,325
|
118
119
|
vellum_ee/workflows/tests/local_workflow/workflow.py,sha256=A4qOzOPNwePYxWbcAgIPLsmrVS_aVEZEc-wULSv787Q,393
|
119
|
-
vellum_ee/workflows/tests/test_display_meta.py,sha256=
|
120
|
+
vellum_ee/workflows/tests/test_display_meta.py,sha256=C25dErwghPNXio49pvSRxyOuc96srH6eYEwTAWdE2zY,2258
|
120
121
|
vellum_ee/workflows/tests/test_server.py,sha256=M6vvQ2hjIpDWtQdDM9EPbMvUrZ93niAuYnxMNJWOjPA,511
|
121
122
|
vellum_ee/workflows/tests/test_virtual_files.py,sha256=TJEcMR0v2S8CkloXNmCHA0QW0K6pYNGaIjraJz7sFvY,2762
|
122
|
-
vellum/__init__.py,sha256=
|
123
|
+
vellum/__init__.py,sha256=qJRjommzKdcsfZUNkqN2k1BuOwVVSuX4Nuv9ITCz1AM,36536
|
123
124
|
vellum/client/README.md,sha256=JkCJjmMZl4jrPj46pkmL9dpK4gSzQQmP5I7z4aME4LY,4749
|
124
125
|
vellum/client/__init__.py,sha256=tKtdM1_GqmGq1gpi9ydWD_T-MM7fPn8QdHh8ww19cNI,117564
|
125
126
|
vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
|
126
127
|
vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
|
127
|
-
vellum/client/core/client_wrapper.py,sha256=
|
128
|
+
vellum/client/core/client_wrapper.py,sha256=ZLOoZbFrHfMWTwl3j2UlsGsUsTrHJM0L9ZyltUPXo1g,1869
|
128
129
|
vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
|
129
130
|
vellum/client/core/file.py,sha256=X9IbmkZmB2bB_DpmZAO3crWdXagOakAyn6UCOCImCPg,2322
|
130
131
|
vellum/client/core/http_client.py,sha256=R0pQpCppnEtxccGvXl4uJ76s7ro_65Fo_erlNNLp_AI,19228
|
@@ -189,7 +190,7 @@ vellum/client/resources/workspace_secrets/__init__.py,sha256=FTtvy8EDg9nNNg9WCat
|
|
189
190
|
vellum/client/resources/workspace_secrets/client.py,sha256=h7UzXLyTttPq1t-JZGMg1BWxypxJvBGUdqg7KGT7MK4,8027
|
190
191
|
vellum/client/resources/workspaces/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
|
191
192
|
vellum/client/resources/workspaces/client.py,sha256=RthwzN1o-Jxwg5yyNNodavFyNUSxfLoTv26w3mRR5g8,3595
|
192
|
-
vellum/client/types/__init__.py,sha256=
|
193
|
+
vellum/client/types/__init__.py,sha256=H2K-qwJM2gg5ZOMIXT56gwK1Vr0iV45hb11ON5z_dL4,55005
|
193
194
|
vellum/client/types/ad_hoc_execute_prompt_event.py,sha256=bCjujA2XsOgyF3bRZbcEqV2rOIymRgsLoIRtZpB14xg,607
|
194
195
|
vellum/client/types/ad_hoc_expand_meta.py,sha256=1gv-NCsy_6xBYupLvZH979yf2VMdxAU-l0y0ynMKZaw,1331
|
195
196
|
vellum/client/types/ad_hoc_fulfilled_prompt_execution_meta.py,sha256=Bfvf1d_dkmshxRACVM5vcxbH_7AQY23RmrrnPc0ytYY,939
|
@@ -415,8 +416,9 @@ vellum/client/types/node_input_compiled_function_call_value.py,sha256=Q9vrORvrPD
|
|
415
416
|
vellum/client/types/node_input_compiled_json_value.py,sha256=ketb8FNY9DQjAxgJd4SPDE6ErHJYY0NEkW0-STapBkw,679
|
416
417
|
vellum/client/types/node_input_compiled_number_value.py,sha256=Olc4UpYsm-v7ZhlTVXsp7JVQE0ytLsBSd9HolCYWmZ4,680
|
417
418
|
vellum/client/types/node_input_compiled_search_results_value.py,sha256=A2SnHYZAt2_VsQDXL4B2CF3KYgDJeUAQ5L0RbI8flH0,763
|
419
|
+
vellum/client/types/node_input_compiled_secret_value.py,sha256=yY-OBwHZ4k9uCf_1dQpV6wFZTW_tcC7RSq41Xj-ToPU,703
|
418
420
|
vellum/client/types/node_input_compiled_string_value.py,sha256=V4HKhHW6B2iUvYqYbuwcOHTxiui3nfOe0DKOiTXshJQ,678
|
419
|
-
vellum/client/types/node_input_variable_compiled_value.py,sha256=
|
421
|
+
vellum/client/types/node_input_variable_compiled_value.py,sha256=h3AovF98U2Wkuo35DAjD6GlUSBo8KbdNt2hyMBDEJuM,1155
|
420
422
|
vellum/client/types/node_output_compiled_array_value.py,sha256=-lUee9E-IrlndzNS-tzfAQrEOZv-ZcgAmm06_kcqOr8,1176
|
421
423
|
vellum/client/types/node_output_compiled_chat_history_value.py,sha256=rAAnJ2PcXGxKusMpq2NEhJdBSRrPB9da5uN19x92Wu4,962
|
422
424
|
vellum/client/types/node_output_compiled_error_value.py,sha256=dkgT_h463S8AF3QHVZdvy9HGF3A2LhxuNnAQouAYQlE,922
|
@@ -1007,6 +1009,7 @@ vellum/types/node_input_compiled_function_call_value.py,sha256=KAQGyfyBZCsMZUxRI
|
|
1007
1009
|
vellum/types/node_input_compiled_json_value.py,sha256=RZ0qcWJ8XgTxQuOxTNaJmzObEaTDE66797ySeKrr6Hg,168
|
1008
1010
|
vellum/types/node_input_compiled_number_value.py,sha256=H-92wifgPNQxIWzxBBpPO6x8i_HRfHaJWn5xPDDB_qk,170
|
1009
1011
|
vellum/types/node_input_compiled_search_results_value.py,sha256=5pqbGkgX_r4fKiMlnPcovPzHhkl9yhenoPx_zz1rizc,178
|
1012
|
+
vellum/types/node_input_compiled_secret_value.py,sha256=FGS_HTzO41MQ0g-RH0hp61ePLDIoClHZ5yQgBrw5QrM,170
|
1010
1013
|
vellum/types/node_input_compiled_string_value.py,sha256=lZfKVBkffPKbONZjljxKMrcBUXvSwBpKb2YSq9TiApo,170
|
1011
1014
|
vellum/types/node_input_variable_compiled_value.py,sha256=DHrIaSM4AOAzy5JCjSNoQnlr_yvarntDWjpVgo3Ni7w,172
|
1012
1015
|
vellum/types/node_output_compiled_array_value.py,sha256=6sodx6QYM2IyVtPiYsAm6g4vQ4U_tqBXcQ6_OeBkmYQ,170
|
@@ -1319,7 +1322,7 @@ vellum/workflows/events/node.py,sha256=jbmNHjdp331Q1IRK-AWtAxwF6Lidb9R7__N5rQuil
|
|
1319
1322
|
vellum/workflows/events/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1320
1323
|
vellum/workflows/events/tests/test_event.py,sha256=sHcKhZPDPtzZfTmehL4NORA_StR4M6nZDcx9kz3Avo0,16866
|
1321
1324
|
vellum/workflows/events/types.py,sha256=AeTJaQt_fNHDLI4nyBzo7XrW9QQybRC09AKzu3kEYEE,3575
|
1322
|
-
vellum/workflows/events/workflow.py,sha256=
|
1325
|
+
vellum/workflows/events/workflow.py,sha256=xdqU6WOexaAqzJbU2Zw42o2LJhK7SDPtTFO5REGv17I,7293
|
1323
1326
|
vellum/workflows/exceptions.py,sha256=NiBiR3ggfmPxBVqD-H1SqmjI-7mIn0EStSN1BqApvCM,1213
|
1324
1327
|
vellum/workflows/expressions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1325
1328
|
vellum/workflows/expressions/accessor.py,sha256=ItZF7fMLzVTqsdAiaXb5SiDupXmX0X9xbIus1W6hRds,1870
|
@@ -1373,19 +1376,19 @@ vellum/workflows/nodes/core/__init__.py,sha256=5zDMCmyt1v0HTJzlUBwq3U9L825yZGZhT
|
|
1373
1376
|
vellum/workflows/nodes/core/error_node/__init__.py,sha256=g7RRnlHhqu4qByfLjBwCunmgGA8dI5gNsjS3h6TwlSI,60
|
1374
1377
|
vellum/workflows/nodes/core/error_node/node.py,sha256=MFHU5vITYSK-L9CuMZ49In2ZeNLWnhZD0f8r5dWvb5Y,1270
|
1375
1378
|
vellum/workflows/nodes/core/inline_subworkflow_node/__init__.py,sha256=nKNEH1QTl-1PcvmYoqSWEl0-t6gAur8GLTXHzklRQfM,84
|
1376
|
-
vellum/workflows/nodes/core/inline_subworkflow_node/node.py,sha256=
|
1379
|
+
vellum/workflows/nodes/core/inline_subworkflow_node/node.py,sha256=1RZ9x69qwziPupR5pkUQVTQnEaF4ieaJ8Uvx2gSbiow,6382
|
1377
1380
|
vellum/workflows/nodes/core/inline_subworkflow_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1378
|
-
vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py,sha256=
|
1381
|
+
vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py,sha256=BLmwLeWxgn6RgRKL8gi8bvV2ZfWnCTsqZDykTgJOjXg,3529
|
1379
1382
|
vellum/workflows/nodes/core/map_node/__init__.py,sha256=MXpZYmGfhsMJHqqlpd64WiJRtbAtAMQz-_3fCU_cLV0,56
|
1380
1383
|
vellum/workflows/nodes/core/map_node/node.py,sha256=dY27Xm11LHsqD7hnZnVYYDIazZ-XfL4_zatvWKTi6CU,9243
|
1381
1384
|
vellum/workflows/nodes/core/map_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1382
1385
|
vellum/workflows/nodes/core/map_node/tests/test_node.py,sha256=uMR0AyIFn539LqTKHdwuBswnx1i-PHyqPpgtYrnmYMY,3496
|
1383
1386
|
vellum/workflows/nodes/core/retry_node/__init__.py,sha256=lN2bIy5a3Uzhs_FYCrooADyYU6ZGShtvLKFWpelwPvo,60
|
1384
|
-
vellum/workflows/nodes/core/retry_node/node.py,sha256=
|
1387
|
+
vellum/workflows/nodes/core/retry_node/node.py,sha256=SoDQaizjoj6kKLr454rkXu4bdzN7hXrBBn7T2_cp1CA,5261
|
1385
1388
|
vellum/workflows/nodes/core/retry_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1386
1389
|
vellum/workflows/nodes/core/retry_node/tests/test_node.py,sha256=fNgDufkIsrTC-6ftvogqSpWhqqBj9iNESdfK19B1Yx0,5159
|
1387
1390
|
vellum/workflows/nodes/core/templating_node/__init__.py,sha256=GmyuYo81_A1_Bz6id69ozVFS6FKiuDsZTiA3I6MaL2U,70
|
1388
|
-
vellum/workflows/nodes/core/templating_node/node.py,sha256
|
1391
|
+
vellum/workflows/nodes/core/templating_node/node.py,sha256=iqBmr2i-f-BqhisNQJiDfewjol0ur7-XpupLStyMJsg,3731
|
1389
1392
|
vellum/workflows/nodes/core/templating_node/tests/test_templating_node.py,sha256=MHofz-BwAgt7EXkab8VIyacYznDEIJ7Er7MJUaxNQQo,9614
|
1390
1393
|
vellum/workflows/nodes/core/try_node/__init__.py,sha256=JVD4DrldTIqFQQFrubs9KtWCCc0YCAc7Fzol5ZWIWeM,56
|
1391
1394
|
vellum/workflows/nodes/core/try_node/node.py,sha256=RbxL0NRXS0IxRP0MJAnLABolF6dkwVniiqsagzy-lwk,4445
|
@@ -1405,7 +1408,7 @@ vellum/workflows/nodes/displayable/bases/inline_prompt_node/__init__.py,sha256=H
|
|
1405
1408
|
vellum/workflows/nodes/displayable/bases/inline_prompt_node/constants.py,sha256=fnjiRWLoRlC4Puo5oQcpZD5Hd-EesxsAo9l5tGAkpZQ,270
|
1406
1409
|
vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py,sha256=fTQ7KS5u7xCO_nJsWT5_LWgwGnYZg4U06slvXxHAzTU,8449
|
1407
1410
|
vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1408
|
-
vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/test_inline_prompt_node.py,sha256=
|
1411
|
+
vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/test_inline_prompt_node.py,sha256=ZCXCZs-_OyPk4nqCpuWY-vw87lg92TDZ2tK_gckJ7mg,10450
|
1409
1412
|
vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py,sha256=UIyNUUr8ii6rIx1gQL5vIPqTAww4ExxxJkFMoglc8LE,5794
|
1410
1413
|
vellum/workflows/nodes/displayable/bases/search_node.py,sha256=3UtbqY3QO4kzfJHbmUNZGnEEfJmaoiF892u8H6TGjp8,5381
|
1411
1414
|
vellum/workflows/nodes/displayable/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -1428,7 +1431,7 @@ vellum/workflows/nodes/displayable/final_output_node/tests/test_node.py,sha256=E
|
|
1428
1431
|
vellum/workflows/nodes/displayable/guardrail_node/__init__.py,sha256=Ab5eXmOoBhyV4dMWdzh32HLUmnPIBEK_zFCT38C4Fng,68
|
1429
1432
|
vellum/workflows/nodes/displayable/guardrail_node/node.py,sha256=h5nIBzQxbXTrdTq1wjDcekk1RV4-rKUNCshqdBAiJJY,4025
|
1430
1433
|
vellum/workflows/nodes/displayable/inline_prompt_node/__init__.py,sha256=gSUOoEZLlrx35-tQhSAd3An8WDwBqyiQh-sIebLU9wU,74
|
1431
|
-
vellum/workflows/nodes/displayable/inline_prompt_node/node.py,sha256=
|
1434
|
+
vellum/workflows/nodes/displayable/inline_prompt_node/node.py,sha256=8RXZqWMzViUjFfbpmcy1gkSsKnEpci8BGwsuPYv4xMQ,3380
|
1432
1435
|
vellum/workflows/nodes/displayable/inline_prompt_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1433
1436
|
vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py,sha256=Qg1oGXecGH2Hp9oBAY42bTfKHBvNHHoJ6vUPPEj8Lq0,8539
|
1434
1437
|
vellum/workflows/nodes/displayable/merge_node/__init__.py,sha256=J8IC08dSH7P76wKlNuxe1sn7toNGtSQdFirUbtPDEs0,60
|
@@ -1481,7 +1484,7 @@ vellum/workflows/references/workflow_input.py,sha256=86IuhlBz-9cGxeUzizyjdp482aj
|
|
1481
1484
|
vellum/workflows/resolvers/__init__.py,sha256=eH6hTvZO4IciDaf_cf7aM2vs-DkBDyJPycOQevJxQnI,82
|
1482
1485
|
vellum/workflows/resolvers/base.py,sha256=WHra9LRtlTuB1jmuNqkfVE2JUgB61Cyntn8f0b0WZg4,411
|
1483
1486
|
vellum/workflows/runner/__init__.py,sha256=i1iG5sAhtpdsrlvwgH6B-m49JsINkiWyPWs8vyT-bqM,72
|
1484
|
-
vellum/workflows/runner/runner.py,sha256=
|
1487
|
+
vellum/workflows/runner/runner.py,sha256=pK_cRWS75x_sX7zrnltz3IykCTgoAWA7AW19Ih5BaB4,31759
|
1485
1488
|
vellum/workflows/sandbox.py,sha256=GVJzVjMuYzOBnSrboB0_6MMRZWBluAyQ2o7syeaeBd0,2235
|
1486
1489
|
vellum/workflows/state/__init__.py,sha256=yUUdR-_Vl7UiixNDYQZ-GEM_kJI9dnOia75TtuNEsnE,60
|
1487
1490
|
vellum/workflows/state/base.py,sha256=Vkhneko3VlQrPsMLU1PYSzXU_W1u7_AraJsghiv5O-4,15512
|
@@ -1517,8 +1520,8 @@ vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnad
|
|
1517
1520
|
vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1518
1521
|
vellum/workflows/workflows/tests/test_base_workflow.py,sha256=NRteiICyJvDM5zrtUfq2fZoXcGQVaWC9xmNlLLVW0cU,7979
|
1519
1522
|
vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
|
1520
|
-
vellum_ai-0.14.
|
1521
|
-
vellum_ai-0.14.
|
1522
|
-
vellum_ai-0.14.
|
1523
|
-
vellum_ai-0.14.
|
1524
|
-
vellum_ai-0.14.
|
1523
|
+
vellum_ai-0.14.19.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
|
1524
|
+
vellum_ai-0.14.19.dist-info/METADATA,sha256=_Ot_Bgq5LluSkVWep3mE9BIZn1f5WMD1VbDLEhGECw0,5408
|
1525
|
+
vellum_ai-0.14.19.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
1526
|
+
vellum_ai-0.14.19.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
|
1527
|
+
vellum_ai-0.14.19.dist-info/RECORD,,
|
@@ -129,13 +129,16 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
|
|
129
129
|
continue
|
130
130
|
|
131
131
|
id = str(uuid4_from_hash(f"{node_id}|{attribute.name}"))
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
132
|
+
try:
|
133
|
+
attributes.append(
|
134
|
+
{
|
135
|
+
"id": id,
|
136
|
+
"name": attribute.name,
|
137
|
+
"value": self.serialize_value(display_context, attribute.instance),
|
138
|
+
}
|
139
|
+
)
|
140
|
+
except ValueError as e:
|
141
|
+
raise ValueError(f"Failed to serialize attribute '{attribute.name}': {e}")
|
139
142
|
|
140
143
|
adornments = kwargs.get("adornments", None)
|
141
144
|
wrapped_node = get_wrapped_node(node)
|
@@ -369,7 +372,7 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
|
|
369
372
|
"rhs": rhs,
|
370
373
|
}
|
371
374
|
|
372
|
-
def serialize_value(self, display_context: "WorkflowDisplayContext", value:
|
375
|
+
def serialize_value(self, display_context: "WorkflowDisplayContext", value: Any) -> JsonObject:
|
373
376
|
if isinstance(value, ConstantValueReference):
|
374
377
|
return self.serialize_value(display_context, value._value)
|
375
378
|
|
@@ -415,6 +418,9 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
|
|
415
418
|
"node_id": str(node_class_display.node_id),
|
416
419
|
}
|
417
420
|
|
421
|
+
if isinstance(value, dict) and any(isinstance(v, BaseDescriptor) for v in value.values()):
|
422
|
+
raise ValueError("Nested references are not supported.")
|
423
|
+
|
418
424
|
if not isinstance(value, BaseDescriptor):
|
419
425
|
vellum_value = primitive_to_vellum_value(value)
|
420
426
|
return {
|
@@ -15,9 +15,6 @@ _CodeExecutionNodeType = TypeVar("_CodeExecutionNodeType", bound=CodeExecutionNo
|
|
15
15
|
|
16
16
|
|
17
17
|
class BaseCodeExecutionNodeDisplay(BaseNodeVellumDisplay[_CodeExecutionNodeType], Generic[_CodeExecutionNodeType]):
|
18
|
-
code_input_id: ClassVar[Optional[UUID]] = None
|
19
|
-
runtime_input_id: ClassVar[Optional[UUID]] = None
|
20
|
-
|
21
18
|
output_id: ClassVar[Optional[UUID]] = None
|
22
19
|
log_output_id: ClassVar[Optional[UUID]] = None
|
23
20
|
|
@@ -52,19 +49,22 @@ class BaseCodeExecutionNodeDisplay(BaseNodeVellumDisplay[_CodeExecutionNodeType]
|
|
52
49
|
for variable_name, variable_value in code_inputs.items()
|
53
50
|
]
|
54
51
|
|
52
|
+
code_input_id = self.node_input_ids_by_name.get(CodeExecutionNode.code.name)
|
55
53
|
code_node_input = create_node_input(
|
56
54
|
node_id=node_id,
|
57
55
|
input_name="code",
|
58
56
|
value=code_value,
|
59
57
|
display_context=display_context,
|
60
|
-
input_id=
|
58
|
+
input_id=code_input_id,
|
61
59
|
)
|
60
|
+
|
61
|
+
runtime_input_id = self.node_input_ids_by_name.get(CodeExecutionNode.runtime.name)
|
62
62
|
runtime_node_input = create_node_input(
|
63
63
|
node_id=node_id,
|
64
64
|
input_name="runtime",
|
65
65
|
value=node.runtime,
|
66
66
|
display_context=display_context,
|
67
|
-
input_id=
|
67
|
+
input_id=runtime_input_id,
|
68
68
|
)
|
69
69
|
inputs.extend([code_node_input, runtime_node_input])
|
70
70
|
|
@@ -84,8 +84,8 @@ class BaseCodeExecutionNodeDisplay(BaseNodeVellumDisplay[_CodeExecutionNodeType]
|
|
84
84
|
"error_output_id": str(error_output_id) if error_output_id else None,
|
85
85
|
"source_handle_id": str(self.get_source_handle_id(display_context.port_displays)),
|
86
86
|
"target_handle_id": str(self.get_target_handle_id()),
|
87
|
-
"code_input_id":
|
88
|
-
"runtime_input_id":
|
87
|
+
"code_input_id": code_node_input.id,
|
88
|
+
"runtime_input_id": runtime_node_input.id,
|
89
89
|
"output_type": output_type,
|
90
90
|
"packages": [package.dict() for package in packages] if packages is not None else [],
|
91
91
|
"output_id": str(self.output_id) if self.output_id else str(output_display.id),
|
@@ -19,7 +19,6 @@ _InlinePromptNodeType = TypeVar("_InlinePromptNodeType", bound=InlinePromptNode)
|
|
19
19
|
class BaseInlinePromptNodeDisplay(BaseNodeVellumDisplay[_InlinePromptNodeType], Generic[_InlinePromptNodeType]):
|
20
20
|
output_id: ClassVar[Optional[UUID]] = None
|
21
21
|
array_output_id: ClassVar[Optional[UUID]] = None
|
22
|
-
json_output_id: ClassVar[Optional[UUID]] = None
|
23
22
|
prompt_input_ids_by_name: ClassVar[Dict[str, UUID]] = {}
|
24
23
|
|
25
24
|
def serialize(
|
@@ -33,6 +32,7 @@ class BaseInlinePromptNodeDisplay(BaseNodeVellumDisplay[_InlinePromptNodeType],
|
|
33
32
|
|
34
33
|
_, output_display = display_context.global_node_output_displays[node.Outputs.text]
|
35
34
|
_, array_display = display_context.global_node_output_displays[node.Outputs.results]
|
35
|
+
_, json_display = display_context.global_node_output_displays[node.Outputs.json]
|
36
36
|
node_blocks = raise_if_descriptor(node.blocks)
|
37
37
|
function_definitions = raise_if_descriptor(node.functions)
|
38
38
|
|
@@ -71,6 +71,11 @@ class BaseInlinePromptNodeDisplay(BaseNodeVellumDisplay[_InlinePromptNodeType],
|
|
71
71
|
"display_data": self.get_display_data().dict(),
|
72
72
|
"base": self.get_base().dict(),
|
73
73
|
"definition": self.get_definition().dict(),
|
74
|
+
"outputs": [
|
75
|
+
{"id": str(json_display.id), "name": "json", "type": "JSON", "value": None},
|
76
|
+
{"id": str(output_display.id), "name": "text", "type": "STRING", "value": None},
|
77
|
+
{"id": str(array_display.id), "name": "results", "type": "ARRAY", "value": None},
|
78
|
+
],
|
74
79
|
}
|
75
80
|
|
76
81
|
def _generate_node_and_prompt_inputs(
|
@@ -1,5 +1,5 @@
|
|
1
1
|
from uuid import UUID
|
2
|
-
from typing import
|
2
|
+
from typing import Generic, Optional, TypeVar
|
3
3
|
|
4
4
|
from vellum.workflows.nodes.core.templating_node import TemplatingNode
|
5
5
|
from vellum.workflows.types.core import JsonObject
|
@@ -11,23 +11,21 @@ from vellum_ee.workflows.display.types import WorkflowDisplayContext
|
|
11
11
|
|
12
12
|
_TemplatingNodeType = TypeVar("_TemplatingNodeType", bound=TemplatingNode)
|
13
13
|
|
14
|
-
TEMPLATE_INPUT_NAME =
|
14
|
+
TEMPLATE_INPUT_NAME = TemplatingNode.template.name
|
15
15
|
|
16
16
|
|
17
17
|
class BaseTemplatingNodeDisplay(BaseNodeVellumDisplay[_TemplatingNodeType], Generic[_TemplatingNodeType]):
|
18
|
-
template_input_id: ClassVar[Optional[UUID]] = None
|
19
|
-
|
20
18
|
def serialize(
|
21
19
|
self, display_context: WorkflowDisplayContext, error_output_id: Optional[UUID] = None, **kwargs
|
22
20
|
) -> JsonObject:
|
23
21
|
node = self._node
|
24
22
|
node_id = self.node_id
|
25
23
|
|
26
|
-
template_input_id = self.
|
24
|
+
template_input_id = self.node_input_ids_by_name.get(TEMPLATE_INPUT_NAME)
|
27
25
|
|
28
26
|
template_node_input = create_node_input(
|
29
27
|
node_id=node_id,
|
30
|
-
input_name=
|
28
|
+
input_name=TEMPLATE_INPUT_NAME,
|
31
29
|
value=node.template,
|
32
30
|
display_context=display_context,
|
33
31
|
input_id=template_input_id,
|
@@ -39,7 +37,8 @@ class BaseTemplatingNodeDisplay(BaseNodeVellumDisplay[_TemplatingNodeType], Gene
|
|
39
37
|
input_name=variable_name,
|
40
38
|
value=variable_value,
|
41
39
|
display_context=display_context,
|
42
|
-
input_id=self.node_input_ids_by_name.get(variable_name)
|
40
|
+
input_id=self.node_input_ids_by_name.get(f"{TemplatingNode.inputs.name}.{variable_name}")
|
41
|
+
or self.node_input_ids_by_name.get(variable_name),
|
43
42
|
)
|
44
43
|
for variable_name, variable_value in template_node_inputs.items()
|
45
44
|
if variable_name != TEMPLATE_INPUT_NAME
|
@@ -0,0 +1,97 @@
|
|
1
|
+
import pytest
|
2
|
+
from uuid import UUID
|
3
|
+
from typing import Type
|
4
|
+
|
5
|
+
from vellum.workflows import BaseWorkflow
|
6
|
+
from vellum.workflows.nodes.core.templating_node.node import TemplatingNode
|
7
|
+
from vellum_ee.workflows.display.nodes.vellum.templating_node import BaseTemplatingNodeDisplay
|
8
|
+
from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
|
9
|
+
from vellum_ee.workflows.display.workflows.vellum_workflow_display import VellumWorkflowDisplay
|
10
|
+
|
11
|
+
|
12
|
+
def _no_display_class(Node: Type[TemplatingNode]):
|
13
|
+
return None
|
14
|
+
|
15
|
+
|
16
|
+
def _display_class_with_node_input_ids_by_name(Node: Type[TemplatingNode]):
|
17
|
+
class TemplatingNodeDisplay(BaseTemplatingNodeDisplay[Node]): # type: ignore[valid-type]
|
18
|
+
node_input_ids_by_name = {"foo": UUID("fba6a4d5-835a-4e99-afb7-f6a4aed15110")}
|
19
|
+
|
20
|
+
return TemplatingNodeDisplay
|
21
|
+
|
22
|
+
|
23
|
+
def _display_class_with_node_input_ids_by_name_with_inputs_prefix(Node: Type[TemplatingNode]):
|
24
|
+
class TemplatingNodeDisplay(BaseTemplatingNodeDisplay[Node]): # type: ignore[valid-type]
|
25
|
+
node_input_ids_by_name = {"inputs.foo": UUID("fba6a4d5-835a-4e99-afb7-f6a4aed15110")}
|
26
|
+
|
27
|
+
return TemplatingNodeDisplay
|
28
|
+
|
29
|
+
|
30
|
+
@pytest.mark.parametrize(
|
31
|
+
["GetDisplayClass", "expected_input_id"],
|
32
|
+
[
|
33
|
+
(_no_display_class, "d3519cec-590c-416d-8eb1-96051aed5ddd"),
|
34
|
+
(_display_class_with_node_input_ids_by_name, "fba6a4d5-835a-4e99-afb7-f6a4aed15110"),
|
35
|
+
(_display_class_with_node_input_ids_by_name_with_inputs_prefix, "fba6a4d5-835a-4e99-afb7-f6a4aed15110"),
|
36
|
+
],
|
37
|
+
ids=[
|
38
|
+
"no_display_class",
|
39
|
+
"display_class_with_node_input_ids_by_name",
|
40
|
+
"display_class_with_node_input_ids_by_name_with_inputs_prefix",
|
41
|
+
],
|
42
|
+
)
|
43
|
+
def test_serialize_node__templating_node_inputs(GetDisplayClass, expected_input_id):
|
44
|
+
# GIVEN a templating node with inputs
|
45
|
+
class MyTemplatingNode(TemplatingNode):
|
46
|
+
inputs = {"foo": "bar"}
|
47
|
+
|
48
|
+
# AND a workflow with the templating node
|
49
|
+
class Workflow(BaseWorkflow):
|
50
|
+
graph = MyTemplatingNode
|
51
|
+
|
52
|
+
# AND a display class
|
53
|
+
GetDisplayClass(MyTemplatingNode)
|
54
|
+
|
55
|
+
# WHEN the workflow is serialized
|
56
|
+
workflow_display = get_workflow_display(base_display_class=VellumWorkflowDisplay, workflow_class=Workflow)
|
57
|
+
serialized_workflow: dict = workflow_display.serialize()
|
58
|
+
|
59
|
+
# THEN the node should properly serialize the inputs
|
60
|
+
my_templating_node = next(
|
61
|
+
node for node in serialized_workflow["workflow_raw_data"]["nodes"] if node["type"] == "TEMPLATING"
|
62
|
+
)
|
63
|
+
|
64
|
+
assert my_templating_node["inputs"] == [
|
65
|
+
{
|
66
|
+
"id": "b7d971ee-9156-46b2-9bf0-9292875211f8",
|
67
|
+
"key": "template",
|
68
|
+
"value": {
|
69
|
+
"combinator": "OR",
|
70
|
+
"rules": [
|
71
|
+
{
|
72
|
+
"type": "CONSTANT_VALUE",
|
73
|
+
"data": {
|
74
|
+
"type": "STRING",
|
75
|
+
"value": "",
|
76
|
+
},
|
77
|
+
}
|
78
|
+
],
|
79
|
+
},
|
80
|
+
},
|
81
|
+
{
|
82
|
+
"id": expected_input_id,
|
83
|
+
"key": "foo",
|
84
|
+
"value": {
|
85
|
+
"combinator": "OR",
|
86
|
+
"rules": [
|
87
|
+
{
|
88
|
+
"type": "CONSTANT_VALUE",
|
89
|
+
"data": {
|
90
|
+
"type": "STRING",
|
91
|
+
"value": "bar",
|
92
|
+
},
|
93
|
+
}
|
94
|
+
],
|
95
|
+
},
|
96
|
+
},
|
97
|
+
]
|
@@ -54,7 +54,7 @@ def create_node_input_value_pointer_rules(
|
|
54
54
|
|
55
55
|
if isinstance(value, BaseDescriptor):
|
56
56
|
if isinstance(value, NodeReference):
|
57
|
-
if
|
57
|
+
if value.instance is None:
|
58
58
|
raise ValueError(f"Expected NodeReference {value.name} to have an instance")
|
59
59
|
value = cast(BaseDescriptor, value.instance)
|
60
60
|
|
@@ -1,12 +1,16 @@
|
|
1
|
+
import pytest
|
1
2
|
from uuid import uuid4
|
3
|
+
from typing import List
|
2
4
|
|
3
5
|
from deepdiff import DeepDiff
|
4
6
|
|
7
|
+
from vellum.client.types.chat_message import ChatMessage
|
5
8
|
from vellum.workflows.inputs.base import BaseInputs
|
6
9
|
from vellum.workflows.nodes.bases.base import BaseNode
|
7
10
|
from vellum.workflows.references.constant import ConstantValueReference
|
8
11
|
from vellum.workflows.references.lazy import LazyReference
|
9
12
|
from vellum.workflows.references.vellum_secret import VellumSecretReference
|
13
|
+
from vellum.workflows.state.base import BaseState
|
10
14
|
from vellum.workflows.workflows.base import BaseWorkflow
|
11
15
|
from vellum_ee.workflows.display.base import WorkflowInputsDisplay
|
12
16
|
from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
|
@@ -237,6 +241,33 @@ def test_serialize_node__workflow_input(serialize_node):
|
|
237
241
|
)
|
238
242
|
|
239
243
|
|
244
|
+
def test_serialize_node__workflow_input_as_nested_chat_history():
|
245
|
+
# GIVEN workflow inputs as chat history
|
246
|
+
class Inputs(BaseInputs):
|
247
|
+
chat_history: List[ChatMessage]
|
248
|
+
|
249
|
+
# AND a node referencing the workflow input
|
250
|
+
class GenericNode(BaseNode):
|
251
|
+
attr = {
|
252
|
+
"hello": Inputs.chat_history,
|
253
|
+
}
|
254
|
+
|
255
|
+
# AND a workflow with the node
|
256
|
+
class Workflow(BaseWorkflow[Inputs, BaseState]):
|
257
|
+
graph = GenericNode
|
258
|
+
|
259
|
+
# WHEN the workflow is serialized
|
260
|
+
workflow_display = get_workflow_display(
|
261
|
+
base_display_class=VellumWorkflowDisplay,
|
262
|
+
workflow_class=Workflow,
|
263
|
+
)
|
264
|
+
with pytest.raises(Exception) as exc_info:
|
265
|
+
workflow_display.serialize()
|
266
|
+
|
267
|
+
# THEN we should raise a user facing error
|
268
|
+
assert str(exc_info.value) == "Failed to serialize attribute 'attr': Nested references are not supported."
|
269
|
+
|
270
|
+
|
240
271
|
def test_serialize_node__node_output(serialize_node):
|
241
272
|
class NodeWithOutput(BaseNode):
|
242
273
|
class Outputs(BaseNode.Outputs):
|