vellum-ai 0.14.48__py3-none-any.whl → 0.14.50__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 +6 -2
- vellum/client/core/client_wrapper.py +1 -1
- vellum/client/types/__init__.py +6 -2
- vellum/client/types/deployment_read.py +1 -1
- vellum/client/types/slim_workflow_execution_read.py +2 -2
- vellum/client/types/workflow_event_execution_read.py +2 -2
- vellum/client/types/{workflow_execution_usage_calculation_fulfilled_body.py → workflow_execution_usage_calculation_error.py} +5 -6
- vellum/client/types/workflow_execution_usage_calculation_error_code_enum.py +7 -0
- vellum/client/types/workflow_execution_usage_result.py +24 -0
- vellum/types/{workflow_execution_usage_calculation_fulfilled_body.py → workflow_execution_usage_calculation_error.py} +1 -1
- vellum/types/workflow_execution_usage_calculation_error_code_enum.py +3 -0
- vellum/types/workflow_execution_usage_result.py +3 -0
- vellum/workflows/nodes/core/map_node/node.py +74 -87
- vellum/workflows/nodes/core/map_node/tests/test_node.py +49 -0
- vellum/workflows/nodes/displayable/code_execution_node/node.py +6 -5
- vellum/workflows/nodes/displayable/code_execution_node/tests/test_code_execution_node.py +112 -1
- vellum/workflows/nodes/displayable/code_execution_node/utils.py +23 -2
- vellum/workflows/state/encoder.py +4 -0
- vellum/workflows/types/code_execution_node_wrappers.py +10 -2
- vellum/workflows/workflows/base.py +8 -0
- {vellum_ai-0.14.48.dist-info → vellum_ai-0.14.50.dist-info}/METADATA +1 -1
- {vellum_ai-0.14.48.dist-info → vellum_ai-0.14.50.dist-info}/RECORD +35 -30
- vellum_ee/workflows/display/nodes/base_node_display.py +23 -1
- vellum_ee/workflows/display/nodes/get_node_display_class.py +1 -24
- vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +2 -2
- vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py +43 -0
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +51 -5
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py +177 -0
- vellum_ee/workflows/display/utils/expressions.py +22 -3
- vellum_ee/workflows/display/utils/vellum.py +10 -4
- vellum_ee/workflows/display/workflows/base_workflow_display.py +3 -24
- vellum_ee/workflows/display/workflows/tests/test_workflow_display.py +187 -3
- {vellum_ai-0.14.48.dist-info → vellum_ai-0.14.50.dist-info}/LICENSE +0 -0
- {vellum_ai-0.14.48.dist-info → vellum_ai-0.14.50.dist-info}/WHEEL +0 -0
- {vellum_ai-0.14.48.dist-info → vellum_ai-0.14.50.dist-info}/entry_points.txt +0 -0
@@ -2,7 +2,7 @@ class StringValueWrapper(str):
|
|
2
2
|
def __getitem__(self, key):
|
3
3
|
if key == "value":
|
4
4
|
return self
|
5
|
-
|
5
|
+
return super().__getitem__(key)
|
6
6
|
|
7
7
|
def __getattr__(self, attr):
|
8
8
|
if attr == "value":
|
@@ -23,6 +23,10 @@ class ListWrapper(list):
|
|
23
23
|
return self
|
24
24
|
raise AttributeError(f"'list' object has no attribute '{attr}'")
|
25
25
|
|
26
|
+
def __iter__(self):
|
27
|
+
for i in range(len(self)):
|
28
|
+
yield self[i]
|
29
|
+
|
26
30
|
|
27
31
|
class DictWrapper(dict):
|
28
32
|
"""
|
@@ -52,11 +56,15 @@ class DictWrapper(dict):
|
|
52
56
|
def __setattr__(self, name, value):
|
53
57
|
self[name] = value
|
54
58
|
|
59
|
+
def __iter__(self):
|
60
|
+
for key in super().keys():
|
61
|
+
yield self[key]
|
62
|
+
|
55
63
|
|
56
64
|
def clean_for_dict_wrapper(obj):
|
57
65
|
if isinstance(obj, dict):
|
58
66
|
wrapped = DictWrapper(obj)
|
59
|
-
for key in wrapped:
|
67
|
+
for key in wrapped.keys():
|
60
68
|
wrapped[key] = clean_for_dict_wrapper(wrapped[key])
|
61
69
|
|
62
70
|
return wrapped
|
@@ -276,6 +276,14 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
276
276
|
"""
|
277
277
|
return cls._get_edges_from_subgraphs(cls.get_unused_subgraphs())
|
278
278
|
|
279
|
+
@classmethod
|
280
|
+
def get_all_nodes(cls) -> Iterator[Type[BaseNode]]:
|
281
|
+
"""
|
282
|
+
Returns an iterator over all nodes in the Workflow, used or unused.
|
283
|
+
"""
|
284
|
+
yield from cls.get_nodes()
|
285
|
+
yield from cls.get_unused_nodes()
|
286
|
+
|
279
287
|
@classmethod
|
280
288
|
def get_entrypoints(cls) -> Iterable[Type[BaseNode]]:
|
281
289
|
return iter({e for g in cls.get_subgraphs() for e in g.entrypoints})
|
@@ -26,8 +26,8 @@ vellum_ee/workflows/display/base.py,sha256=EqlQFD56kpqMY02ZBJBQajzJKh33Dwi60Wo77
|
|
26
26
|
vellum_ee/workflows/display/editor/__init__.py,sha256=MSAgY91xCEg2neH5d8jXx5wRdR962ftZVa6vO9BGq9k,167
|
27
27
|
vellum_ee/workflows/display/editor/types.py,sha256=x-tOOCJ6CF4HmiKDfCmcc3bOVfc1EBlP5o6u5WEfLoY,567
|
28
28
|
vellum_ee/workflows/display/nodes/__init__.py,sha256=jI1aPBQf8DkmrYoZ4O-wR1duqZByOf5mDFmo_wFJPE4,307
|
29
|
-
vellum_ee/workflows/display/nodes/base_node_display.py,sha256=
|
30
|
-
vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=
|
29
|
+
vellum_ee/workflows/display/nodes/base_node_display.py,sha256=mzODbbNfrjOi7rVQb6FFCEjQHZkTs76nAc8L-Q5yCnQ,16491
|
30
|
+
vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=jI_kUi9LnNLDpY63QtlC4TfN8P571VN4LpzH0I1ZtLk,1149
|
31
31
|
vellum_ee/workflows/display/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
32
32
|
vellum_ee/workflows/display/nodes/tests/test_base_node_display.py,sha256=Z4Mf7xLCNiblSbpKI0BrV5modQr-ZcFzhfir_OSyTTs,2997
|
33
33
|
vellum_ee/workflows/display/nodes/types.py,sha256=St1BB6no528OyELGiyRabWao0GGw6mLhstQAvEACbGk,247
|
@@ -35,7 +35,7 @@ vellum_ee/workflows/display/nodes/utils.py,sha256=sloya5TpXsnot1HURc9L51INwflRqU
|
|
35
35
|
vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=nUIgH2s0-7IbQRNrBhLPyRNe8YIrx3Yo9HeeW-aXXFk,1668
|
36
36
|
vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=ZiOJsSovftbH1eVFdU0-UE4DUliIHPQZkwrFcooN-Vk,8856
|
37
37
|
vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py,sha256=rJbHZBg9A_v2bjk-R6MfWzShcrS2gcKIOyYGoqwTx8s,6353
|
38
|
-
vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=
|
38
|
+
vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=L308T4U6eaL0WUJ_hQ0qrH-i8IuMBCm5XjRO2_b-Mro,4507
|
39
39
|
vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=MrvyiYD0qgQf3-ZYFcurQtin3FagAHGRoT7zYGiIao0,11150
|
40
40
|
vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=m2DmOXm9-jiiIl6zwkXHNfsYp5PTpBHEdt5xaIsabWo,2363
|
41
41
|
vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=jUDI2FwVaw0Or4zJL58J_g0S--i59Hzik60s_Es_M-8,3098
|
@@ -51,7 +51,7 @@ vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=3n1qa-zWIk0p_H94u
|
|
51
51
|
vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=MWLZBXHsmj5vKgqOgI2HHcHAJzLS0sqybn6idhwug8Y,2669
|
52
52
|
vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=J84_EUfwWwpeOfUFBdRorrD1Bod0jDBFdQ6xnRyp9Ho,3338
|
53
53
|
vellum_ee/workflows/display/nodes/vellum/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
54
|
-
vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py,sha256
|
54
|
+
vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py,sha256=ZasoqG8FmqnZDj2FfL5BGPq9fafOTJqV_4xjOKLi1gc,5434
|
55
55
|
vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py,sha256=540FoWMpJ3EN_DPjHsr9ODJWCRVcUa5hZBn-5T2GiHU,1665
|
56
56
|
vellum_ee/workflows/display/nodes/vellum/tests/test_note_node.py,sha256=uiMB0cOxKZzos7YKnj4ef4DFa2bOvZJWIv-hfbUV6Go,1218
|
57
57
|
vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_deployment_node.py,sha256=G-qJyTNJkpqJiEZ3kCJl86CXJINLeFyf2lM0bQHCCOs,3822
|
@@ -69,7 +69,7 @@ vellum_ee/workflows/display/tests/workflow_serialization/__init__.py,sha256=47DE
|
|
69
69
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
70
70
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=XOQDDRiG46etxTC7-_RUEutoNumXc02fo7oho4GYM0c,1900
|
71
71
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=tsjGM-jOurPSkDIbrDFdjNLmkI1fPNPAw3J9-l9knCw,12848
|
72
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=
|
72
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=rV7_NOUIsyHUrdSJ0pJFt7ha-uIC1nSLqdYpRhE9Zfg,21430
|
73
73
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py,sha256=s6_mnk0pkztU59wYpSfOFpMhAJaRjmyfxM6WJGtnD4Y,6456
|
74
74
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py,sha256=PkSgghJDz0fpDB72HHPjLjo8LkZk-HpUkCQzRLX-iVw,40611
|
75
75
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py,sha256=dsJr8I9AdPwMOGszirfNDzZP2Ychd94aAKuPXAzknMk,4632
|
@@ -89,19 +89,20 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_
|
|
89
89
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py,sha256=KkYZc_bZuq1lmDcvUz3QxIqJLpQPCZioD1FHUNsMJY8,11211
|
90
90
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py,sha256=aZaqRDrkO3ytcmdM2eKJqHSt60MF070NMj6M2vgzOKc,7711
|
91
91
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=r748dpS13HtwY7t_KQFExFssxRy0xI2d-wxmhiUHRe0,3850
|
92
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256=rp9suYcwVZPpIQ3ChlWWvahMlaUd7u-31VmesR0Mn8w,7683
|
92
93
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=EL5kfakuoEcwD85dGjhMta-J-PpCHRSDoc80SdbBrQk,2769
|
93
94
|
vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=RmFUDx8dYdfsOE2CGLvdXqNNRtLLpVzXDN8dqZyMcZ8,5822
|
94
95
|
vellum_ee/workflows/display/types.py,sha256=i4T7ElU5b5h-nA1i3scmEhO1BqmNDc4eJDHavATD88w,2821
|
95
96
|
vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
96
97
|
vellum_ee/workflows/display/utils/exceptions.py,sha256=LSwwxCYNxFkf5XMUcFkaZKpQ13OSrI7y_bpEUwbKVk0,169
|
97
|
-
vellum_ee/workflows/display/utils/expressions.py,sha256=
|
98
|
+
vellum_ee/workflows/display/utils/expressions.py,sha256=qsKRgxm9zKFgAgjc9LqKEWP1rtdzXA1NDsXu9kyhf60,12416
|
98
99
|
vellum_ee/workflows/display/utils/registry.py,sha256=fWIm5Jj-10gNFjgn34iBu4RWv3Vd15ijtSN0V97bpW8,1513
|
99
|
-
vellum_ee/workflows/display/utils/vellum.py,sha256=
|
100
|
+
vellum_ee/workflows/display/utils/vellum.py,sha256=mtoXmSYwR7rvrq-d6CzCW_auaJXTct0Mi1F0xpRCiNQ,5627
|
100
101
|
vellum_ee/workflows/display/vellum.py,sha256=o7mq_vk2Yapu9DDKRz5l76h8EmCAypWGQYe6pryrbB8,3576
|
101
102
|
vellum_ee/workflows/display/workflows/__init__.py,sha256=kapXsC67VJcgSuiBMa86FdePG5A9kMB5Pi4Uy1O2ob4,207
|
102
|
-
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=
|
103
|
+
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=DbjLChDtlNAs86sWL5-ojYYzwFsOjACAGfquxM3VYcw,32563
|
103
104
|
vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=gxz76AeCqgAZ9D2lZeTiZzxY9eMgn3qOSfVgiqYcOh8,2028
|
104
|
-
vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=
|
105
|
+
vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=rRwXLgsXqiaSn3jzP7lc--pytRW3Jmnj2-zNq5l-FQ4,29472
|
105
106
|
vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=aaKdmWrgEe5YyV4zuDY_4E3y-l59rIHQnNGiPj2OWxQ,359
|
106
107
|
vellum_ee/workflows/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
107
108
|
vellum_ee/workflows/server/virtual_file_loader.py,sha256=7JphJcSO3H85qiC2DpFfBWjC3JjrbRmoynBC6KKHVsA,2710
|
@@ -127,12 +128,12 @@ vellum_ee/workflows/tests/local_workflow/workflow.py,sha256=A4qOzOPNwePYxWbcAgIP
|
|
127
128
|
vellum_ee/workflows/tests/test_display_meta.py,sha256=C25dErwghPNXio49pvSRxyOuc96srH6eYEwTAWdE2zY,2258
|
128
129
|
vellum_ee/workflows/tests/test_server.py,sha256=SsOkS6sGO7uGC4mxvk4iv8AtcXs058P9hgFHzTWmpII,14519
|
129
130
|
vellum_ee/workflows/tests/test_virtual_files.py,sha256=TJEcMR0v2S8CkloXNmCHA0QW0K6pYNGaIjraJz7sFvY,2762
|
130
|
-
vellum/__init__.py,sha256=
|
131
|
+
vellum/__init__.py,sha256=Hqfl49WZJzzqOKzVsTGi-j9twIqFOoRmACJsrEsjL44,41918
|
131
132
|
vellum/client/README.md,sha256=qmaVIP42MnxAu8jV7u-CsgVFfs3-pHQODrXdZdFxtaw,4749
|
132
133
|
vellum/client/__init__.py,sha256=PEnFl7LbXQcvAi3bVN2qyt5xm2FtVtq7xWKkcWM3Tg4,120166
|
133
134
|
vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
|
134
135
|
vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
|
135
|
-
vellum/client/core/client_wrapper.py,sha256=
|
136
|
+
vellum/client/core/client_wrapper.py,sha256=0Uo8ifbV1rC2jIjuU95Td5DeLVDs0xqQP3DETAbhbEU,1869
|
136
137
|
vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
|
137
138
|
vellum/client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
|
138
139
|
vellum/client/core/http_client.py,sha256=Z77OIxIbL4OAB2IDqjRq_sYa5yNYAWfmdhdCSSvh6Y4,19552
|
@@ -200,7 +201,7 @@ vellum/client/resources/workspace_secrets/__init__.py,sha256=FTtvy8EDg9nNNg9WCat
|
|
200
201
|
vellum/client/resources/workspace_secrets/client.py,sha256=zlBdbeTP6sqvtyl_DlrpfG-W5hSP7tJ1NYLSygi4CLU,8205
|
201
202
|
vellum/client/resources/workspaces/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
|
202
203
|
vellum/client/resources/workspaces/client.py,sha256=RthwzN1o-Jxwg5yyNNodavFyNUSxfLoTv26w3mRR5g8,3595
|
203
|
-
vellum/client/types/__init__.py,sha256=
|
204
|
+
vellum/client/types/__init__.py,sha256=wFQ3c_Pu8mGQFHIUy5dORq6Afmp5jdl9pnfUizIXjtI,63474
|
204
205
|
vellum/client/types/ad_hoc_execute_prompt_event.py,sha256=bCjujA2XsOgyF3bRZbcEqV2rOIymRgsLoIRtZpB14xg,607
|
205
206
|
vellum/client/types/ad_hoc_expand_meta.py,sha256=1gv-NCsy_6xBYupLvZH979yf2VMdxAU-l0y0ynMKZaw,1331
|
206
207
|
vellum/client/types/ad_hoc_fulfilled_prompt_execution_meta.py,sha256=oDG60TpwK1YNSKhRsBbiP2O3ZF9PKR-M9chGIfKw4R4,1004
|
@@ -271,7 +272,7 @@ vellum/client/types/create_test_suite_test_case_request.py,sha256=3LmAy6U8tUJ75d
|
|
271
272
|
vellum/client/types/deployment_history_item.py,sha256=-u7UYEFpVOlFijErPLGO99WYQxAnctZK52W-GM4KJJU,1132
|
272
273
|
vellum/client/types/deployment_provider_payload_response.py,sha256=b0lkt0rK88ARQaMWn9MAHeWtMBsZKofDMlOAUsQvv7g,818
|
273
274
|
vellum/client/types/deployment_provider_payload_response_payload.py,sha256=xHLQnWFN0AZRZdrOiKawwpoKK7BTmnZfp0P7FCc2ZqE,188
|
274
|
-
vellum/client/types/deployment_read.py,sha256=
|
275
|
+
vellum/client/types/deployment_read.py,sha256=l6cy00p4y7JncJ-BwVl_NdCVWPNRjZqFz6DdL2vTTqY,1977
|
275
276
|
vellum/client/types/deployment_release_tag_deployment_history_item.py,sha256=df4qKHT1f-z0jnRS4UmP8MQe6u3PwYej_d8KDF7EL88,631
|
276
277
|
vellum/client/types/deployment_release_tag_read.py,sha256=dUrTOz9LH1gAvC_ktMB_7NztkeBnlNSX_9x15Ld3D3I,1278
|
277
278
|
vellum/client/types/docker_service_token.py,sha256=T0icNHBKsIs6TrEiDRjckM_f37hcF1DMwEE8161tTvY,614
|
@@ -565,7 +566,7 @@ vellum/client/types/slim_document.py,sha256=HJiymYPvRxfxhBUkD8epW0hQ2Vt9PQtv398Q
|
|
565
566
|
vellum/client/types/slim_document_document_to_document_index.py,sha256=vo7WbRRzbApQxT0MZu_NkjQmsFD8LoezmyeKBeGZpI8,1346
|
566
567
|
vellum/client/types/slim_release_review.py,sha256=7DXmD1AVa_Wj7e0qiR7GUN9cSqwkk1JloYmp_3oluQQ,783
|
567
568
|
vellum/client/types/slim_workflow_deployment.py,sha256=Js-ycMFZ8-kNFPsd4bZew9nI_eN2M_58LzDHeCjkfTg,2009
|
568
|
-
vellum/client/types/slim_workflow_execution_read.py,sha256=
|
569
|
+
vellum/client/types/slim_workflow_execution_read.py,sha256=Opm1HTYVMz_D2USQCB-5ZoJ4EjKKfrDhoXc0hETldVM,1936
|
569
570
|
vellum/client/types/span_link.py,sha256=2NISI8V94W0MeIdos7aSKFmpVJgEEunuSEnKlWTUH5c,1353
|
570
571
|
vellum/client/types/span_link_type_enum.py,sha256=NaBXnHnOKMZvgHfjhwJJNqM4wuTOxtGkMIXjN2hU-6A,130
|
571
572
|
vellum/client/types/streaming_ad_hoc_execute_prompt_event.py,sha256=NdgmJ3AZMp6io-whZIGnGb49aiqz6__KafsrzjEF_9o,1183
|
@@ -717,7 +718,7 @@ vellum/client/types/workflow_deployment_release_workflow_deployment.py,sha256=ir
|
|
717
718
|
vellum/client/types/workflow_deployment_release_workflow_version.py,sha256=V1Eb3goBX2lle851LkhR1tbCFa0z_O-yhMuQWCN6c-g,773
|
718
719
|
vellum/client/types/workflow_error.py,sha256=EQajkEmLS64T0wYm0goHQl0rT7Lguurk8pLwkhjsgAI,282
|
719
720
|
vellum/client/types/workflow_event_error.py,sha256=HIewu_kh3KNPpWegAQArvAGHCp-cBIXqlUAAc_dBZhc,687
|
720
|
-
vellum/client/types/workflow_event_execution_read.py,sha256=
|
721
|
+
vellum/client/types/workflow_event_execution_read.py,sha256=TQaBs2ZkOOJOjCkdmgI9ZX7c4XgIaNIBozCmZlOoZp8,2008
|
721
722
|
vellum/client/types/workflow_execution_actual.py,sha256=YL5WL4O4CyaZWSrxqpE4chJ28EJlyScj5JeaLttegEg,843
|
722
723
|
vellum/client/types/workflow_execution_actual_chat_history_request.py,sha256=L6U8tgM7SiU4qGJMZChFzj6HfHgO-YAlTXfbT7ZIaE4,1993
|
723
724
|
vellum/client/types/workflow_execution_actual_json_request.py,sha256=5QYaPCSOwFnjH_kTrB2bTznTMFExSZdBhTkmelf1h4Q,1931
|
@@ -741,7 +742,9 @@ vellum/client/types/workflow_execution_span.py,sha256=3vHEx3k31fLacQaV2iMT-vibjw
|
|
741
742
|
vellum/client/types/workflow_execution_span_attributes.py,sha256=SRW7mD-6uS8eA57EU6q2thBqSFfJSH4tXI9H3szZwYQ,575
|
742
743
|
vellum/client/types/workflow_execution_streaming_body.py,sha256=phni9pJKkFGsQ5IcS4ogtG1EjBzpdBiYpN9CPbkjxH8,746
|
743
744
|
vellum/client/types/workflow_execution_streaming_event.py,sha256=_xazehYJ5ZwTDc5cC7rpX7nDir_4glPOnx9c9ZPod1g,1551
|
744
|
-
vellum/client/types/
|
745
|
+
vellum/client/types/workflow_execution_usage_calculation_error.py,sha256=O44pAaA3pOpn6dqxfsAFx4QnXeVfIggGWbgmTzQV4Ms,754
|
746
|
+
vellum/client/types/workflow_execution_usage_calculation_error_code_enum.py,sha256=O8CGCaWKuhnRjmQXTsw4gQn5hfDFiKED8bJYzP8R0LM,258
|
747
|
+
vellum/client/types/workflow_execution_usage_result.py,sha256=wZdRqzG_Lwi8gqDHGEU6ayx3pvO9oe8hIPzDDePELz8,928
|
745
748
|
vellum/client/types/workflow_execution_view_online_eval_metric_result.py,sha256=1qxIHqBRhEMfbOhBpztOPhcH3mqe7bfezO7PUHUfDg4,759
|
746
749
|
vellum/client/types/workflow_execution_workflow_result_event.py,sha256=gjyXmojwtAOtAzpILpFkJB9tM02okSXqYRw9-3rTVDA,939
|
747
750
|
vellum/client/types/workflow_expand_meta_request.py,sha256=-6I1Zveo3wFJEWbmSsN9OiOI7ekCJxF4xEL_ApB6XE8,1151
|
@@ -1415,7 +1418,9 @@ vellum/types/workflow_execution_span.py,sha256=qnyiKgPrKKl0lvVtmpm09zOMTWKDBZ9nD
|
|
1415
1418
|
vellum/types/workflow_execution_span_attributes.py,sha256=LCyfr-e1lwrTpMge9agbjtVDxt1l1FTZK8koMqxy6VM,172
|
1416
1419
|
vellum/types/workflow_execution_streaming_body.py,sha256=MjkV8RLMtFj1r0yGPIuhf4Dz_EFeVU2tN8Oz6-cPssQ,171
|
1417
1420
|
vellum/types/workflow_execution_streaming_event.py,sha256=XDEyaGRMfR9cpaRJ-WCb0O-o4LAdoMPCbjRLdYI1r-0,172
|
1418
|
-
vellum/types/
|
1421
|
+
vellum/types/workflow_execution_usage_calculation_error.py,sha256=tMF1PYRRKjC0N-GL_Az2A8Mv-1H8tS3oln_NPh6k3zo,180
|
1422
|
+
vellum/types/workflow_execution_usage_calculation_error_code_enum.py,sha256=HMqRue9gC5NRgbqt_FhANKGeNz8Vgu9fjZpEvRTek9o,190
|
1423
|
+
vellum/types/workflow_execution_usage_result.py,sha256=SrVrcv5xngwbS-6eCWU4XJ9QyyUwGJ1mPfgHPOhNqbs,169
|
1419
1424
|
vellum/types/workflow_execution_view_online_eval_metric_result.py,sha256=dLnk3CfQOAeYIO5kiR0U8SY4JcqFWvVYwkDL-LkA5Co,187
|
1420
1425
|
vellum/types/workflow_execution_workflow_result_event.py,sha256=3bNxtChEfqny5eEazFcGmqQpmC8283Q0J2hxLje-uks,178
|
1421
1426
|
vellum/types/workflow_expand_meta_request.py,sha256=Ahb7gjZekJ5qI0HGHLCbn3hCpkX08EnzeXEH_3ivB4E,166
|
@@ -1551,9 +1556,9 @@ vellum/workflows/nodes/core/inline_subworkflow_node/node.py,sha256=rgcjc3gaCEX9u
|
|
1551
1556
|
vellum/workflows/nodes/core/inline_subworkflow_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1552
1557
|
vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py,sha256=kUqwcRMMxjTHALbwGUXCJT_aJBrHS1bkg49oL8R0JO8,4337
|
1553
1558
|
vellum/workflows/nodes/core/map_node/__init__.py,sha256=MXpZYmGfhsMJHqqlpd64WiJRtbAtAMQz-_3fCU_cLV0,56
|
1554
|
-
vellum/workflows/nodes/core/map_node/node.py,sha256=
|
1559
|
+
vellum/workflows/nodes/core/map_node/node.py,sha256=rbF7fLAU0vUDEpgtWqeQTZFlhWOhJw38tgxWJ6exud8,9313
|
1555
1560
|
vellum/workflows/nodes/core/map_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1556
|
-
vellum/workflows/nodes/core/map_node/tests/test_node.py,sha256=
|
1561
|
+
vellum/workflows/nodes/core/map_node/tests/test_node.py,sha256=f3lSPYAU1vJUCLCujNOo0EAeBbOM9hnY5A1Wy58korc,6905
|
1557
1562
|
vellum/workflows/nodes/core/retry_node/__init__.py,sha256=lN2bIy5a3Uzhs_FYCrooADyYU6ZGShtvLKFWpelwPvo,60
|
1558
1563
|
vellum/workflows/nodes/core/retry_node/node.py,sha256=abtGvinLfi1tKqYIsWQKZtBUisF2Qw2yT1YoPw9cVk4,5297
|
1559
1564
|
vellum/workflows/nodes/core/retry_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -1587,12 +1592,12 @@ vellum/workflows/nodes/displayable/bases/tests/test_utils.py,sha256=eqdqbKNRWVMD
|
|
1587
1592
|
vellum/workflows/nodes/displayable/bases/types.py,sha256=C37B2Qh2YP7s7pUjd-EYKc2Zl1TbnCgI_mENuUSb8bo,1706
|
1588
1593
|
vellum/workflows/nodes/displayable/bases/utils.py,sha256=ckMUenSsNkiYmSw6FmjSMHYaCk8Y8_sUjL6lkFFEqts,5412
|
1589
1594
|
vellum/workflows/nodes/displayable/code_execution_node/__init__.py,sha256=0FLWMMktpzSnmBMizQglBpcPrP80fzVsoJwJgf822Cg,76
|
1590
|
-
vellum/workflows/nodes/displayable/code_execution_node/node.py,sha256=
|
1595
|
+
vellum/workflows/nodes/displayable/code_execution_node/node.py,sha256=U21jXW8XZoC51vP0pvbbUQzQidR6Ej2lMdGypIUyF3I,9708
|
1591
1596
|
vellum/workflows/nodes/displayable/code_execution_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1592
1597
|
vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1593
1598
|
vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/main.py,sha256=5QsbmkzSlSbcbWTG_JmIqcP-JNJzOPTKxGzdHos19W4,79
|
1594
|
-
vellum/workflows/nodes/displayable/code_execution_node/tests/test_code_execution_node.py,sha256=
|
1595
|
-
vellum/workflows/nodes/displayable/code_execution_node/utils.py,sha256=
|
1599
|
+
vellum/workflows/nodes/displayable/code_execution_node/tests/test_code_execution_node.py,sha256=N5SZeYyxEDrkbTagEvbnsTLgOeqrYEfIUOheM5qgjiU,31423
|
1600
|
+
vellum/workflows/nodes/displayable/code_execution_node/utils.py,sha256=VRTKms59vrSR9mDk99cojParZVAP4lzjEeDwDNXU1tk,3837
|
1596
1601
|
vellum/workflows/nodes/displayable/conditional_node/__init__.py,sha256=AS_EIqFdU1F9t8aLmbZU-rLh9ry6LCJ0uj0D8F0L5Uw,72
|
1597
1602
|
vellum/workflows/nodes/displayable/conditional_node/node.py,sha256=Qjfl33gZ3JEgxBA1EgzSUebboGvsARthIxxcQyvx5Gg,1152
|
1598
1603
|
vellum/workflows/nodes/displayable/conftest.py,sha256=K2kLM2JGAfcrmmd92u8DXInUO5klFdggPWblg5RVcx4,5729
|
@@ -1668,7 +1673,7 @@ vellum/workflows/sandbox.py,sha256=GVJzVjMuYzOBnSrboB0_6MMRZWBluAyQ2o7syeaeBd0,2
|
|
1668
1673
|
vellum/workflows/state/__init__.py,sha256=yUUdR-_Vl7UiixNDYQZ-GEM_kJI9dnOia75TtuNEsnE,60
|
1669
1674
|
vellum/workflows/state/base.py,sha256=ZXDmVafs6sExcbx1azrZjEGQsmuY68mSRWfI7t2PT4c,22330
|
1670
1675
|
vellum/workflows/state/context.py,sha256=KOAI1wEGn8dGmhmAemJaf4SZbitP3jpIBcwKfznQaRE,3076
|
1671
|
-
vellum/workflows/state/encoder.py,sha256=
|
1676
|
+
vellum/workflows/state/encoder.py,sha256=z7Mk6jQC-92wCj6XTK7VEnJ8px_lU8qy0BINqwGDN4I,2063
|
1672
1677
|
vellum/workflows/state/store.py,sha256=uVe-oN73KwGV6M6YLhwZMMUQhzTQomsVfVnb8V91gVo,1147
|
1673
1678
|
vellum/workflows/state/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1674
1679
|
vellum/workflows/state/tests/test_state.py,sha256=YOiC9qZAzkdiqb7nRarNWeDwxo7xHv3y3czlHl81ezg,6741
|
@@ -1676,7 +1681,7 @@ vellum/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
|
|
1676
1681
|
vellum/workflows/tests/test_sandbox.py,sha256=JKwaluI-lODQo7Ek9sjDstjL_WTdSqUlVik6ZVTfVOA,1826
|
1677
1682
|
vellum/workflows/tests/test_undefined.py,sha256=zMCVliCXVNLrlC6hEGyOWDnQADJ2g83yc5FIM33zuo8,353
|
1678
1683
|
vellum/workflows/types/__init__.py,sha256=KxUTMBGzuRCfiMqzzsykOeVvrrkaZmTTo1a7SLu8gRM,68
|
1679
|
-
vellum/workflows/types/code_execution_node_wrappers.py,sha256=
|
1684
|
+
vellum/workflows/types/code_execution_node_wrappers.py,sha256=zPnfvhxpDS3vvM6hX1X6sPfvo1bu1kcPQfhNoJD9vtM,2362
|
1680
1685
|
vellum/workflows/types/core.py,sha256=kMQremh_I8egXpiKmtMQbB6e3OczAWiRnnTq5V6xlD0,928
|
1681
1686
|
vellum/workflows/types/definition.py,sha256=z81CL_u0FJol-9yUIqoXNTYAARtU8x__c6s-f4rb5c8,2335
|
1682
1687
|
vellum/workflows/types/generics.py,sha256=tKXz0LwWJGKw1YGudyl9_yFDrRgU6yYV1yJV1Zv-LTw,1430
|
@@ -1696,13 +1701,13 @@ vellum/workflows/utils/uuids.py,sha256=DFzPv9RCvsKhvdTEIQyfSek2A31D6S_QcmeLPbgrg
|
|
1696
1701
|
vellum/workflows/utils/vellum_variables.py,sha256=UiGlUh0a8vel2FbW3w-xbHxSv_jNutkDdqMVtP_b42A,3385
|
1697
1702
|
vellum/workflows/vellum_client.py,sha256=xkfoucodxNK5JR2-lbRqZx3xzDgExWkP6kySrpi_Ubc,1079
|
1698
1703
|
vellum/workflows/workflows/__init__.py,sha256=KY45TqvavCCvXIkyCFMEc0dc6jTMOUci93U2DUrlZYc,66
|
1699
|
-
vellum/workflows/workflows/base.py,sha256=
|
1704
|
+
vellum/workflows/workflows/base.py,sha256=V60RZat8mG0XmMuIjprkHnacD_MpUdxGcN9t4TaP_Pg,24044
|
1700
1705
|
vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnadGsrSZGa7t7LpJA,2008
|
1701
1706
|
vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1702
1707
|
vellum/workflows/workflows/tests/test_base_workflow.py,sha256=8P5YIsNMO78_CR1NNK6wkEdkMB4b3Q_Ni1qxh78OnHo,20481
|
1703
1708
|
vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
|
1704
|
-
vellum_ai-0.14.
|
1705
|
-
vellum_ai-0.14.
|
1706
|
-
vellum_ai-0.14.
|
1707
|
-
vellum_ai-0.14.
|
1708
|
-
vellum_ai-0.14.
|
1709
|
+
vellum_ai-0.14.50.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
|
1710
|
+
vellum_ai-0.14.50.dist-info/METADATA,sha256=E3j3kzjmM-9HAa1xAKCgCf5JsoBVzbm7vadnxywpahY,5484
|
1711
|
+
vellum_ai-0.14.50.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
1712
|
+
vellum_ai-0.14.50.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
|
1713
|
+
vellum_ai-0.14.50.dist-info/RECORD,,
|
@@ -44,18 +44,40 @@ if TYPE_CHECKING:
|
|
44
44
|
_NodeDisplayAttrType = TypeVar("_NodeDisplayAttrType")
|
45
45
|
|
46
46
|
|
47
|
+
def _get_node_input_ids_by_ref(node_class: Type[BaseNode], path: str, inst: Any):
|
48
|
+
if isinstance(inst, dict):
|
49
|
+
node_input_ids_by_name: Dict[str, UUID] = {}
|
50
|
+
for key, value in inst.items():
|
51
|
+
node_input_ids_by_name.update(_get_node_input_ids_by_ref(node_class, f"{path}.{key}", value))
|
52
|
+
return node_input_ids_by_name
|
53
|
+
|
54
|
+
return {path: uuid4_from_hash(f"{node_class.__id__}|{path}")}
|
55
|
+
|
56
|
+
|
47
57
|
class BaseNodeDisplayMeta(type):
|
48
58
|
def __new__(mcs, name: str, bases: Tuple[Type, ...], dct: Dict[str, Any]) -> Any:
|
49
59
|
cls = cast(Type["BaseNodeDisplay"], super().__new__(mcs, name, bases, dct))
|
60
|
+
# This cast shouldn't be necessary, but it's a workaround for a mypy bug
|
61
|
+
node_class = cast(Type[BaseNode], cls.infer_node_class() if name != "BaseNodeDisplay" else BaseNode)
|
50
62
|
|
51
63
|
if not dct.get("output_display"):
|
52
|
-
node_class = cls.infer_node_class()
|
53
64
|
cls.output_display = {
|
54
65
|
ref: NodeOutputDisplay(id=node_class.__output_ids__[ref.name], name=ref.name)
|
55
66
|
for ref in node_class.Outputs
|
56
67
|
if ref.name in node_class.__output_ids__
|
57
68
|
}
|
58
69
|
|
70
|
+
if not dct.get("node_input_ids_by_name"):
|
71
|
+
node_input_ids_by_name: Dict[str, UUID] = {}
|
72
|
+
for ref in node_class:
|
73
|
+
if ref not in cls.__serializable_inputs__:
|
74
|
+
continue
|
75
|
+
|
76
|
+
node_input_ids_by_name.update(_get_node_input_ids_by_ref(node_class, ref.name, ref.instance))
|
77
|
+
|
78
|
+
if node_input_ids_by_name:
|
79
|
+
cls.node_input_ids_by_name = node_input_ids_by_name
|
80
|
+
|
59
81
|
return cls.__annotate_node__()
|
60
82
|
|
61
83
|
def __annotate_node__(cls):
|
@@ -1,9 +1,7 @@
|
|
1
1
|
import types
|
2
|
-
from
|
3
|
-
from typing import TYPE_CHECKING, Any, Dict, Generic, Type, TypeVar
|
2
|
+
from typing import TYPE_CHECKING, Generic, Type, TypeVar
|
4
3
|
|
5
4
|
from vellum.workflows.types.generics import NodeType
|
6
|
-
from vellum.workflows.utils.uuids import uuid4_from_hash
|
7
5
|
from vellum_ee.workflows.display.utils.registry import get_from_node_display_registry
|
8
6
|
|
9
7
|
if TYPE_CHECKING:
|
@@ -22,30 +20,9 @@ def get_node_display_class(node_class: Type[NodeType]) -> Type["BaseNodeDisplay"
|
|
22
20
|
# `base_node_display_class` is always a Generic class, so it's safe to index into it
|
23
21
|
NodeDisplayBaseClass = base_node_display_class[_NodeClassType] # type: ignore[index]
|
24
22
|
|
25
|
-
def _get_node_input_ids_by_ref(path: str, inst: Any):
|
26
|
-
if isinstance(inst, dict):
|
27
|
-
node_input_ids_by_name: Dict[str, UUID] = {}
|
28
|
-
for key, value in inst.items():
|
29
|
-
node_input_ids_by_name.update(_get_node_input_ids_by_ref(f"{path}.{key}", value))
|
30
|
-
return node_input_ids_by_name
|
31
|
-
|
32
|
-
return {path: uuid4_from_hash(f"{node_class.__id__}|{path}")}
|
33
|
-
|
34
|
-
def exec_body(ns: Dict):
|
35
|
-
node_input_ids_by_name: Dict[str, UUID] = {}
|
36
|
-
for ref in node_class:
|
37
|
-
if ref not in base_node_display_class.__serializable_inputs__:
|
38
|
-
continue
|
39
|
-
|
40
|
-
node_input_ids_by_name.update(_get_node_input_ids_by_ref(ref.name, ref.instance))
|
41
|
-
|
42
|
-
if node_input_ids_by_name:
|
43
|
-
ns["node_input_ids_by_name"] = node_input_ids_by_name
|
44
|
-
|
45
23
|
NodeDisplayClass = types.new_class(
|
46
24
|
f"{node_class.__name__}Display",
|
47
25
|
bases=(NodeDisplayBaseClass, Generic[_NodeClassType]),
|
48
|
-
exec_body=exec_body,
|
49
26
|
)
|
50
27
|
|
51
28
|
return NodeDisplayClass
|
@@ -79,8 +79,8 @@ class BaseCodeExecutionNodeDisplay(BaseNodeDisplay[_CodeExecutionNodeType], Gene
|
|
79
79
|
|
80
80
|
packages = raise_if_descriptor(node.packages)
|
81
81
|
|
82
|
-
|
83
|
-
|
82
|
+
output_display = self.output_display[node.Outputs.result]
|
83
|
+
log_output_display = self.output_display[node.Outputs.log]
|
84
84
|
|
85
85
|
output_type = primitive_type_to_vellum_variable_type(node.get_output_type())
|
86
86
|
|
@@ -2,7 +2,9 @@ import pytest
|
|
2
2
|
from uuid import UUID
|
3
3
|
from typing import Type
|
4
4
|
|
5
|
+
from vellum.client.core.api_error import ApiError
|
5
6
|
from vellum.workflows.nodes.displayable.code_execution_node.node import CodeExecutionNode
|
7
|
+
from vellum.workflows.references.vellum_secret import VellumSecretReference
|
6
8
|
from vellum.workflows.workflows.base import BaseWorkflow
|
7
9
|
from vellum_ee.workflows.display.nodes.vellum.code_execution_node import BaseCodeExecutionNodeDisplay
|
8
10
|
from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
|
@@ -110,3 +112,44 @@ def test_serialize_node__code_node_inputs(GetDisplayClass, expected_input_id):
|
|
110
112
|
},
|
111
113
|
},
|
112
114
|
]
|
115
|
+
|
116
|
+
|
117
|
+
def test_serialize_node__with_unresolved_secret_references(vellum_client):
|
118
|
+
# GIVEN a node has access to a secret reference
|
119
|
+
class MyNode(CodeExecutionNode):
|
120
|
+
code_inputs = {"api_key": VellumSecretReference("MY_API_KEY")}
|
121
|
+
|
122
|
+
# AND the secret is not found
|
123
|
+
vellum_client.workspace_secrets.retrieve.side_effect = ApiError(
|
124
|
+
status_code=404,
|
125
|
+
body="Secret not found",
|
126
|
+
)
|
127
|
+
|
128
|
+
# AND a workflow with the code node
|
129
|
+
class Workflow(BaseWorkflow):
|
130
|
+
graph = MyNode
|
131
|
+
|
132
|
+
# WHEN we serialize the workflow
|
133
|
+
workflow_display = get_workflow_display(workflow_class=Workflow)
|
134
|
+
data: dict = workflow_display.serialize()
|
135
|
+
|
136
|
+
# THEN the condition should be serialized correctly
|
137
|
+
node = next(node for node in data["workflow_raw_data"]["nodes"] if node["type"] == "CODE_EXECUTION")
|
138
|
+
assert node["inputs"][0]["value"] == {
|
139
|
+
"combinator": "OR",
|
140
|
+
"rules": [
|
141
|
+
{
|
142
|
+
"type": "WORKSPACE_SECRET",
|
143
|
+
"data": {
|
144
|
+
"type": "STRING",
|
145
|
+
"workspace_secret_id": None,
|
146
|
+
},
|
147
|
+
}
|
148
|
+
],
|
149
|
+
}
|
150
|
+
|
151
|
+
# AND we should have a warning of the invalid reference
|
152
|
+
# TODO: Come up with a proposal for how nodes should propagate warnings
|
153
|
+
# warnings = list(workflow_display.errors)
|
154
|
+
# assert len(warnings) == 1
|
155
|
+
# assert "Failed to resolve secret reference 'MY_API_KEY'" in str(warnings[0])
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import pytest
|
2
1
|
from uuid import uuid4
|
3
2
|
from typing import List
|
4
3
|
|
@@ -257,11 +256,58 @@ def test_serialize_node__workflow_input_as_nested_chat_history():
|
|
257
256
|
|
258
257
|
# WHEN the workflow is serialized
|
259
258
|
workflow_display = get_workflow_display(workflow_class=Workflow)
|
260
|
-
|
261
|
-
|
259
|
+
serialized_workflow: dict = workflow_display.serialize()
|
260
|
+
|
261
|
+
# THEN the node should properly serialize the attribute reference
|
262
|
+
generic_node = next(
|
263
|
+
node for node in serialized_workflow["workflow_raw_data"]["nodes"] if node["id"] == str(GenericNode.__id__)
|
264
|
+
)
|
262
265
|
|
263
|
-
|
264
|
-
|
266
|
+
assert not DeepDiff(
|
267
|
+
{
|
268
|
+
"id": "11be9d37-0069-4695-a317-14a3b6519d4e",
|
269
|
+
"label": "test_serialize_node__workflow_input_as_nested_chat_history.<locals>.GenericNode",
|
270
|
+
"type": "GENERIC",
|
271
|
+
"display_data": {"position": {"x": 0.0, "y": 0.0}},
|
272
|
+
"base": {"name": "BaseNode", "module": ["vellum", "workflows", "nodes", "bases", "base"]},
|
273
|
+
"definition": {
|
274
|
+
"name": "GenericNode",
|
275
|
+
"module": [
|
276
|
+
"vellum_ee",
|
277
|
+
"workflows",
|
278
|
+
"display",
|
279
|
+
"tests",
|
280
|
+
"workflow_serialization",
|
281
|
+
"generic_nodes",
|
282
|
+
"test_attributes_serialization",
|
283
|
+
],
|
284
|
+
},
|
285
|
+
"trigger": {"id": "d4548468-85a4-449e-92e0-e2d8b8fd097c", "merge_behavior": "AWAIT_ATTRIBUTES"},
|
286
|
+
"ports": [{"id": "c4a9a57d-1380-4689-8500-e8a0b6477291", "name": "default", "type": "DEFAULT"}],
|
287
|
+
"adornments": None,
|
288
|
+
"attributes": [
|
289
|
+
{
|
290
|
+
"id": "e878bbc9-1231-461e-9e9d-947604da116e",
|
291
|
+
"name": "attr",
|
292
|
+
"value": {
|
293
|
+
"type": "DICTIONARY_REFERENCE",
|
294
|
+
"entries": [
|
295
|
+
{
|
296
|
+
"key": "hello",
|
297
|
+
"value": {
|
298
|
+
"type": "WORKFLOW_INPUT",
|
299
|
+
"input_variable_id": "f727c3f9-f27f-4ac9-abd7-12bf612a094e",
|
300
|
+
},
|
301
|
+
}
|
302
|
+
],
|
303
|
+
},
|
304
|
+
}
|
305
|
+
],
|
306
|
+
"outputs": [],
|
307
|
+
},
|
308
|
+
generic_node,
|
309
|
+
ignore_order=True,
|
310
|
+
)
|
265
311
|
|
266
312
|
|
267
313
|
def test_serialize_node__node_output(serialize_node):
|