vellum-ai 0.14.53__py3-none-any.whl → 0.14.55__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 +4 -0
- vellum/client/__init__.py +4 -4
- vellum/client/core/client_wrapper.py +1 -1
- vellum/client/reference.md +116 -114
- vellum/client/resources/deployments/client.py +121 -2
- vellum/client/resources/release_reviews/client.py +1 -118
- vellum/client/resources/workflow_deployments/client.py +4 -2
- vellum/client/types/__init__.py +4 -0
- vellum/client/types/components_schemas_prompt_version_build_config_sandbox.py +5 -0
- vellum/client/types/execute_api_request_body.py +3 -1
- vellum/client/types/prompt_deployment_release_prompt_version.py +6 -1
- vellum/client/types/prompt_version_build_config_sandbox.py +22 -0
- vellum/types/components_schemas_prompt_version_build_config_sandbox.py +3 -0
- vellum/types/prompt_version_build_config_sandbox.py +3 -0
- vellum/workflows/nodes/bases/base.py +32 -1
- vellum/workflows/nodes/displayable/code_execution_node/tests/{test_code_execution_node.py → test_node.py} +139 -16
- vellum/workflows/nodes/experimental/tool_calling_node/node.py +6 -6
- vellum/workflows/nodes/experimental/tool_calling_node/utils.py +4 -1
- vellum/workflows/nodes/tests/test_utils.py +8 -21
- vellum/workflows/nodes/utils.py +4 -1
- vellum/workflows/runner/runner.py +1 -1
- vellum/workflows/state/base.py +0 -18
- vellum/workflows/types/code_execution_node_wrappers.py +28 -0
- vellum/workflows/utils/functions.py +1 -0
- vellum/workflows/utils/tests/test_functions.py +14 -0
- {vellum_ai-0.14.53.dist-info → vellum_ai-0.14.55.dist-info}/METADATA +1 -1
- {vellum_ai-0.14.53.dist-info → vellum_ai-0.14.55.dist-info}/RECORD +36 -32
- vellum_cli/logger.py +11 -0
- vellum_cli/push.py +36 -32
- vellum_cli/tests/test_push.py +31 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py +2 -7
- vellum_ee/workflows/display/workflows/base_workflow_display.py +20 -4
- vellum_ee/workflows/tests/test_display_meta.py +48 -0
- {vellum_ai-0.14.53.dist-info → vellum_ai-0.14.55.dist-info}/LICENSE +0 -0
- {vellum_ai-0.14.53.dist-info → vellum_ai-0.14.55.dist-info}/WHEEL +0 -0
- {vellum_ai-0.14.53.dist-info → vellum_ai-0.14.55.dist-info}/entry_points.txt +0 -0
vellum/workflows/state/base.py
CHANGED
@@ -16,7 +16,6 @@ from pydantic_core import core_schema
|
|
16
16
|
from vellum.core.pydantic_utilities import UniversalBaseModel
|
17
17
|
from vellum.utils.uuid import is_valid_uuid
|
18
18
|
from vellum.workflows.constants import undefined
|
19
|
-
from vellum.workflows.edges.edge import Edge
|
20
19
|
from vellum.workflows.inputs.base import BaseInputs
|
21
20
|
from vellum.workflows.references import ExternalInputReference, OutputReference, StateValueReference
|
22
21
|
from vellum.workflows.types.definition import CodeResourceDefinition, serialize_type_encoder_with_id
|
@@ -174,23 +173,6 @@ class NodeExecutionCache:
|
|
174
173
|
if all(dep in self._dependencies_invoked[execution_id] for dep in dependencies):
|
175
174
|
self._node_executions_queued[node].remove(execution_id)
|
176
175
|
|
177
|
-
def queue_node_execution(
|
178
|
-
self, node: Type["BaseNode"], dependencies: Set["Type[BaseNode]"], invoked_by: Optional[Edge] = None
|
179
|
-
) -> UUID:
|
180
|
-
execution_id = uuid4()
|
181
|
-
if not invoked_by:
|
182
|
-
return execution_id
|
183
|
-
|
184
|
-
source_node = invoked_by.from_port.node_class
|
185
|
-
for queued_node_execution_id in self._node_executions_queued[node]:
|
186
|
-
if source_node not in self._dependencies_invoked[queued_node_execution_id]:
|
187
|
-
self._invoke_dependency(queued_node_execution_id, node, source_node, dependencies)
|
188
|
-
return queued_node_execution_id
|
189
|
-
|
190
|
-
self._node_executions_queued[node].append(execution_id)
|
191
|
-
self._invoke_dependency(execution_id, node, source_node, dependencies)
|
192
|
-
return execution_id
|
193
|
-
|
194
176
|
def is_node_execution_initiated(self, node: Type["BaseNode"], execution_id: UUID) -> bool:
|
195
177
|
return execution_id in self._node_executions_initiated[node]
|
196
178
|
|
@@ -1,15 +1,41 @@
|
|
1
|
+
from vellum.client.types.function_call import FunctionCall
|
2
|
+
|
3
|
+
|
1
4
|
class StringValueWrapper(str):
|
2
5
|
def __getitem__(self, key):
|
3
6
|
if key == "value":
|
4
7
|
return self
|
8
|
+
if key == "type":
|
9
|
+
return "STRING"
|
5
10
|
return super().__getitem__(key)
|
6
11
|
|
7
12
|
def __getattr__(self, attr):
|
8
13
|
if attr == "value":
|
9
14
|
return self
|
15
|
+
if attr == "type":
|
16
|
+
return "STRING"
|
10
17
|
raise AttributeError(f"'str' object has no attribute '{attr}'")
|
11
18
|
|
12
19
|
|
20
|
+
class FunctionCallWrapper(FunctionCall):
|
21
|
+
def __init__(self, obj):
|
22
|
+
super().__init__(arguments=obj.arguments, name=obj.name, id=obj.id)
|
23
|
+
|
24
|
+
def __getitem__(self, key):
|
25
|
+
if key == "value":
|
26
|
+
return self
|
27
|
+
if key == "type":
|
28
|
+
return "FUNCTION_CALL"
|
29
|
+
raise KeyError(key)
|
30
|
+
|
31
|
+
def __getattr__(self, attr):
|
32
|
+
if attr == "value":
|
33
|
+
return self
|
34
|
+
if attr == "type":
|
35
|
+
return "FUNCTION_CALL"
|
36
|
+
raise AttributeError(f"'FunctionCall' object has no attribute '{attr}'")
|
37
|
+
|
38
|
+
|
13
39
|
class ListWrapper(list):
|
14
40
|
def __getitem__(self, key):
|
15
41
|
item = super().__getitem__(key)
|
@@ -73,5 +99,7 @@ def clean_for_dict_wrapper(obj):
|
|
73
99
|
return ListWrapper(map(lambda item: clean_for_dict_wrapper(item), obj))
|
74
100
|
elif isinstance(obj, str):
|
75
101
|
return StringValueWrapper(obj)
|
102
|
+
elif isinstance(obj, FunctionCall):
|
103
|
+
return FunctionCallWrapper(obj)
|
76
104
|
|
77
105
|
return obj
|
@@ -262,3 +262,17 @@ def test_compile_function_definition__default_pydantic():
|
|
262
262
|
},
|
263
263
|
},
|
264
264
|
)
|
265
|
+
|
266
|
+
|
267
|
+
def test_compile_function_definition__lambda():
|
268
|
+
# GIVEN a lambda
|
269
|
+
lambda_function = lambda x: x + 1 # noqa: E731
|
270
|
+
|
271
|
+
# WHEN compiling the function
|
272
|
+
compiled_function = compile_function_definition(lambda_function)
|
273
|
+
|
274
|
+
# THEN it should return the compiled function definition
|
275
|
+
assert compiled_function == FunctionDefinition(
|
276
|
+
name="<lambda>",
|
277
|
+
parameters={"type": "object", "properties": {"x": {"type": "null"}}, "required": ["x"]},
|
278
|
+
)
|
@@ -5,10 +5,10 @@ vellum_cli/aliased_group.py,sha256=ugW498j0yv4ALJ8vS9MsO7ctDW7Jlir9j6nE_uHAP8c,3
|
|
5
5
|
vellum_cli/config.py,sha256=v5BmZ-t_v4Jmqd7KVuQMZF2pRI-rbMspSkVYXIRoTmI,9448
|
6
6
|
vellum_cli/image_push.py,sha256=skFXf25ixMOX1yfcyAtii-RivYYv-_hsv-Z-bVB6m5Q,7380
|
7
7
|
vellum_cli/init.py,sha256=WpnMXPItPmh0f0bBGIer3p-e5gu8DUGwSArT_FuoMEw,5093
|
8
|
-
vellum_cli/logger.py,sha256=
|
8
|
+
vellum_cli/logger.py,sha256=dcM_OmgqXLo93vDYswO5ylyUQQcTfnA5GTd5tbIt3wM,1446
|
9
9
|
vellum_cli/ping.py,sha256=p_BCCRjgPhng6JktuECtkDQLbhopt6JpmrtGoLnLJT8,1161
|
10
10
|
vellum_cli/pull.py,sha256=M50yXzA_35N35gk1Y8KjLbXrzdRG86--XFQvEukxGtA,13371
|
11
|
-
vellum_cli/push.py,sha256=
|
11
|
+
vellum_cli/push.py,sha256=wxRlFu2mYW9SvwODYxwajri1mDQ2be0n-9i0d9QAc30,10194
|
12
12
|
vellum_cli/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
13
|
vellum_cli/tests/conftest.py,sha256=AFYZryKA2qnUuCPBxBKmHLFoPiE0WhBFFej9tNwSHdc,1526
|
14
14
|
vellum_cli/tests/test_config.py,sha256=uvKGDc8BoVyT9_H0Z-g8469zVxomn6Oi3Zj-vK7O_wU,2631
|
@@ -17,7 +17,7 @@ vellum_cli/tests/test_init.py,sha256=8UOc_ThfouR4ja5cCl_URuLk7ohr9JXfCnG4yka1OUQ
|
|
17
17
|
vellum_cli/tests/test_main.py,sha256=qDZG-aQauPwBwM6A2DIu1494n47v3pL28XakTbLGZ-k,272
|
18
18
|
vellum_cli/tests/test_ping.py,sha256=3ucVRThEmTadlV9LrJdCCrr1Ofj3rOjG6ue0BNR2UC0,2523
|
19
19
|
vellum_cli/tests/test_pull.py,sha256=7HRAhIdkVW5mR2VckEaNDjp4rt-MlIxOWMMI2XNUPE8,49814
|
20
|
-
vellum_cli/tests/test_push.py,sha256=
|
20
|
+
vellum_cli/tests/test_push.py,sha256=I8XICg3pUb3yxAFLXziVHHf5CRm354LO-uUfwtca3bU,33897
|
21
21
|
vellum_ee/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
22
22
|
vellum_ee/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
23
23
|
vellum_ee/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -89,7 +89,7 @@ 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=
|
92
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256=Lws9-tWRsbtiS_WqRrO03BLMMRe5_6reXX_XfkkHkJs,7478
|
93
93
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=EL5kfakuoEcwD85dGjhMta-J-PpCHRSDoc80SdbBrQk,2769
|
94
94
|
vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=RmFUDx8dYdfsOE2CGLvdXqNNRtLLpVzXDN8dqZyMcZ8,5822
|
95
95
|
vellum_ee/workflows/display/types.py,sha256=i4T7ElU5b5h-nA1i3scmEhO1BqmNDc4eJDHavATD88w,2821
|
@@ -100,7 +100,7 @@ vellum_ee/workflows/display/utils/registry.py,sha256=fWIm5Jj-10gNFjgn34iBu4RWv3V
|
|
100
100
|
vellum_ee/workflows/display/utils/vellum.py,sha256=mtoXmSYwR7rvrq-d6CzCW_auaJXTct0Mi1F0xpRCiNQ,5627
|
101
101
|
vellum_ee/workflows/display/vellum.py,sha256=o7mq_vk2Yapu9DDKRz5l76h8EmCAypWGQYe6pryrbB8,3576
|
102
102
|
vellum_ee/workflows/display/workflows/__init__.py,sha256=kapXsC67VJcgSuiBMa86FdePG5A9kMB5Pi4Uy1O2ob4,207
|
103
|
-
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=
|
103
|
+
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=dVOe3TOV00uvllxsDziM3pFfL2HYTkWRq9iKDlj_xyU,33162
|
104
104
|
vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=gxz76AeCqgAZ9D2lZeTiZzxY9eMgn3qOSfVgiqYcOh8,2028
|
105
105
|
vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=rRwXLgsXqiaSn3jzP7lc--pytRW3Jmnj2-zNq5l-FQ4,29472
|
106
106
|
vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=aaKdmWrgEe5YyV4zuDY_4E3y-l59rIHQnNGiPj2OWxQ,359
|
@@ -125,15 +125,15 @@ vellum_ee/workflows/tests/local_workflow/nodes/__init__.py,sha256=1F6jxUpSKfPXPj
|
|
125
125
|
vellum_ee/workflows/tests/local_workflow/nodes/final_output.py,sha256=ZX7zBv87zirg0w9VKUW3QVDSdBLDqcqAMZjCL_oWbpU,297
|
126
126
|
vellum_ee/workflows/tests/local_workflow/nodes/templating_node.py,sha256=NQwFN61QkHfI3Vssz-B0NKGfupK8PU0FDSAIAhYBLi0,325
|
127
127
|
vellum_ee/workflows/tests/local_workflow/workflow.py,sha256=A4qOzOPNwePYxWbcAgIPLsmrVS_aVEZEc-wULSv787Q,393
|
128
|
-
vellum_ee/workflows/tests/test_display_meta.py,sha256=
|
128
|
+
vellum_ee/workflows/tests/test_display_meta.py,sha256=DIzjNbwK1-4mlttPML6NskQ4rPVMXhj5zeOmBEyPqKI,3728
|
129
129
|
vellum_ee/workflows/tests/test_server.py,sha256=SsOkS6sGO7uGC4mxvk4iv8AtcXs058P9hgFHzTWmpII,14519
|
130
130
|
vellum_ee/workflows/tests/test_virtual_files.py,sha256=TJEcMR0v2S8CkloXNmCHA0QW0K6pYNGaIjraJz7sFvY,2762
|
131
|
-
vellum/__init__.py,sha256=
|
131
|
+
vellum/__init__.py,sha256=U4MVBzBx8I8-rOG_feluSz5U8_hD969e85F4cRgmVv4,42104
|
132
132
|
vellum/client/README.md,sha256=qmaVIP42MnxAu8jV7u-CsgVFfs3-pHQODrXdZdFxtaw,4749
|
133
|
-
vellum/client/__init__.py,sha256=
|
133
|
+
vellum/client/__init__.py,sha256=AYopGv2ZRVn3zsU8_km6KOvEHDbXiTPCVuYVI7bWvdA,120166
|
134
134
|
vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
|
135
135
|
vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
|
136
|
-
vellum/client/core/client_wrapper.py,sha256=
|
136
|
+
vellum/client/core/client_wrapper.py,sha256=GMn5XtiuHqXf7vTEZMBtzd-oj9clWCurZASqSMpcAcI,1869
|
137
137
|
vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
|
138
138
|
vellum/client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
|
139
139
|
vellum/client/core/http_client.py,sha256=Z77OIxIbL4OAB2IDqjRq_sYa5yNYAWfmdhdCSSvh6Y4,19552
|
@@ -149,14 +149,14 @@ vellum/client/errors/bad_request_error.py,sha256=_EbO8mWqN9kFZPvIap8qa1lL_EWkRcs
|
|
149
149
|
vellum/client/errors/forbidden_error.py,sha256=QO1kKlhClAPES6zsEK7g9pglWnxn3KWaOCAawWOg6Aw,263
|
150
150
|
vellum/client/errors/internal_server_error.py,sha256=8USCagXyJJ1MOm9snpcXIUt6eNXvrd_aq7Gfcu1vlOI,268
|
151
151
|
vellum/client/errors/not_found_error.py,sha256=tBVCeBC8n3C811WHRj_n-hs3h8MqwR5gp0vLiobk7W8,262
|
152
|
-
vellum/client/reference.md,sha256=
|
152
|
+
vellum/client/reference.md,sha256=WCBi7X9xzilw6EivAydV27LRdFtxFuJHo4i7akhGr_k,90952
|
153
153
|
vellum/client/resources/__init__.py,sha256=XgQao4rJxyYu71j64RFIsshz4op9GE8-i-C5GCv-KVE,1555
|
154
154
|
vellum/client/resources/ad_hoc/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
|
155
155
|
vellum/client/resources/ad_hoc/client.py,sha256=rtpiGR6j8CcXSnN6UW_jYwLLdfJ9dwkTm_nta9oRzno,25933
|
156
156
|
vellum/client/resources/container_images/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
|
157
157
|
vellum/client/resources/container_images/client.py,sha256=N9Xe-IyuZigbZum3MZFqgZrVKgfNOTGFxK83alHra04,15181
|
158
158
|
vellum/client/resources/deployments/__init__.py,sha256=m64MNuPx3qVazOnTNwOY8oEeDrAkNwMJvUEe5xoMDvs,239
|
159
|
-
vellum/client/resources/deployments/client.py,sha256=
|
159
|
+
vellum/client/resources/deployments/client.py,sha256=6RhEkPNtb1UBDRYWOxnK7CpO1bTLqn6ZOKKGCw7WOZA,43498
|
160
160
|
vellum/client/resources/deployments/types/__init__.py,sha256=29GVdoLOJsADSSSqZwb6CQPeEmPjkKrbsWfru1bemj8,321
|
161
161
|
vellum/client/resources/deployments/types/deployments_list_request_status.py,sha256=CxlQD16KZXme7x31YYCe_3aAgEueutDTeJo5A4Au-aU,174
|
162
162
|
vellum/client/resources/deployments/types/list_deployment_release_tags_request_source.py,sha256=hRGgWMYZL9uKCmD_2dU8-u9RCPUUGItpNn1tUY-NXKY,180
|
@@ -179,7 +179,7 @@ vellum/client/resources/organizations/client.py,sha256=Uye92moqjAcOCs4astmuFpT92
|
|
179
179
|
vellum/client/resources/prompts/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
|
180
180
|
vellum/client/resources/prompts/client.py,sha256=Z9Q9zvoCI8onkEbGSr5xVpNzzstV7xU9MmTwBnNoX98,14222
|
181
181
|
vellum/client/resources/release_reviews/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
|
182
|
-
vellum/client/resources/release_reviews/client.py,sha256=
|
182
|
+
vellum/client/resources/release_reviews/client.py,sha256=6u7qYK_fpRZzizYnFtUS06Q41RqEzSsre6RQwRimf8w,5088
|
183
183
|
vellum/client/resources/sandboxes/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
|
184
184
|
vellum/client/resources/sandboxes/client.py,sha256=_LInSBP67ON8ykUcdiUd5vxHYZkAPX4RkJbR5Ph6l_s,18026
|
185
185
|
vellum/client/resources/test_suite_runs/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
|
@@ -187,7 +187,7 @@ vellum/client/resources/test_suite_runs/client.py,sha256=xHN3c9eIaSGWoeEdD2Jmi-e
|
|
187
187
|
vellum/client/resources/test_suites/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
|
188
188
|
vellum/client/resources/test_suites/client.py,sha256=aBReUOWcerq7vnjXEDbpDH1OMc6INMr0XUBaXE07umw,25989
|
189
189
|
vellum/client/resources/workflow_deployments/__init__.py,sha256=_duH6m1CDWcfqX6DTBNjO3ar4Xrl-f5PozMaTcT4Kow,251
|
190
|
-
vellum/client/resources/workflow_deployments/client.py,sha256=
|
190
|
+
vellum/client/resources/workflow_deployments/client.py,sha256=bh8vYpy_ycI7gH964CPOEwbP8nFsl78kJw7oXE9s6NY,35480
|
191
191
|
vellum/client/resources/workflow_deployments/types/__init__.py,sha256=W7DKJ1nduwhRckYLvH7wHLdaGH9MXHTZkxwG7FdTngY,340
|
192
192
|
vellum/client/resources/workflow_deployments/types/list_workflow_release_tags_request_source.py,sha256=LPETHLX9Ygha_JRT9oWZAZR6clv-W1tTelXzktkTBX8,178
|
193
193
|
vellum/client/resources/workflow_deployments/types/workflow_deployments_list_request_status.py,sha256=FXVkVmGM6DZ2RpTGnZXWJYiVlLQ-K5fDtX3WMaBPaWk,182
|
@@ -201,7 +201,7 @@ vellum/client/resources/workspace_secrets/__init__.py,sha256=FTtvy8EDg9nNNg9WCat
|
|
201
201
|
vellum/client/resources/workspace_secrets/client.py,sha256=zlBdbeTP6sqvtyl_DlrpfG-W5hSP7tJ1NYLSygi4CLU,8205
|
202
202
|
vellum/client/resources/workspaces/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
|
203
203
|
vellum/client/resources/workspaces/client.py,sha256=RthwzN1o-Jxwg5yyNNodavFyNUSxfLoTv26w3mRR5g8,3595
|
204
|
-
vellum/client/types/__init__.py,sha256=
|
204
|
+
vellum/client/types/__init__.py,sha256=6YfOKPZ7rGwTipcHjrv71MVVtARtlAPClzVDsEcsjac,63767
|
205
205
|
vellum/client/types/ad_hoc_execute_prompt_event.py,sha256=bCjujA2XsOgyF3bRZbcEqV2rOIymRgsLoIRtZpB14xg,607
|
206
206
|
vellum/client/types/ad_hoc_expand_meta.py,sha256=1gv-NCsy_6xBYupLvZH979yf2VMdxAU-l0y0ynMKZaw,1331
|
207
207
|
vellum/client/types/ad_hoc_fulfilled_prompt_execution_meta.py,sha256=oDG60TpwK1YNSKhRsBbiP2O3ZF9PKR-M9chGIfKw4R4,1004
|
@@ -263,6 +263,7 @@ vellum/client/types/compile_prompt_deployment_expand_meta_request.py,sha256=z0iM
|
|
263
263
|
vellum/client/types/compile_prompt_meta.py,sha256=lQOFdrhMpzMOf_hasn4vb1AKnX2VuASr-1evaugJ4ro,848
|
264
264
|
vellum/client/types/components_schemas_pdf_search_result_meta_source.py,sha256=WEB3B__R6zLakrJMMn_1z9FIylBcxencQ6JHVPs7HSg,206
|
265
265
|
vellum/client/types/components_schemas_pdf_search_result_meta_source_request.py,sha256=FbgAsvMARYuSub2QQwFEkkbVeYwKkNmVi98nk7CxC-Q,235
|
266
|
+
vellum/client/types/components_schemas_prompt_version_build_config_sandbox.py,sha256=OquKc9g8mgyxmNPKXcEq9E6PCgtKSbNi-RQqp2go9VI,230
|
266
267
|
vellum/client/types/condition_combinator.py,sha256=NQ6-F85juf21jsRuZRA6PjIFv7ITVWG5myuuZdLxeQI,156
|
267
268
|
vellum/client/types/conditional_node_result.py,sha256=vx8xo9F1KoJqOnYPtSevfOcBxKYAk8J8JGWFr1c4UO8,784
|
268
269
|
vellum/client/types/conditional_node_result_data.py,sha256=yk4E7KHSzmKlweI9ce9eN_iW08V70KGmG1Z0K5455T0,604
|
@@ -300,7 +301,7 @@ vellum/client/types/error_input.py,sha256=UiYDo7pxeCmW7REuk80ByzUp1hxEQwQCEA5isZ
|
|
300
301
|
vellum/client/types/error_vellum_value.py,sha256=Y7yO8Y1eOlbRyOqbOh6MyPRNHYKH48gIhlZIRcw1UaA,726
|
301
302
|
vellum/client/types/error_vellum_value_request.py,sha256=o0aSn34dRcpnAwAfwW_sgwP7CkODGd5448w2Olg-spg,755
|
302
303
|
vellum/client/types/execute_api_request_bearer_token.py,sha256=agAhp9lzfzZcYGZdzg2jHAEHCaHlqzbgp6qeeNebcto,183
|
303
|
-
vellum/client/types/execute_api_request_body.py,sha256=
|
304
|
+
vellum/client/types/execute_api_request_body.py,sha256=WySF2yj9rtx2vF4En0dfZkzPF2FNFtVRFW7P8Mw-hF8,217
|
304
305
|
vellum/client/types/execute_api_request_headers_value.py,sha256=bHtGwOpknQDcQo6qtMKqJxaYpvbinDfwx2uaPzyuZ9s,184
|
305
306
|
vellum/client/types/execute_api_response.py,sha256=TBBLTgllRBiIq4moOVylUqwmk7kpVqGlPV5y5iquq2g,843
|
306
307
|
vellum/client/types/execute_api_response_json.py,sha256=80J1Du-JQGlVXIEECClC-IMYhTpcSTMtlYP_2Pq64kA,213
|
@@ -500,7 +501,7 @@ vellum/client/types/prompt_deployment_input_request.py,sha256=KrT4-Ew2VvTWXEkYQz
|
|
500
501
|
vellum/client/types/prompt_deployment_parent_context.py,sha256=xlZKf3_FU0lB5YPb1q0s79DNbz0d51laAgIJTIO2J-s,1693
|
501
502
|
vellum/client/types/prompt_deployment_release.py,sha256=H6sluuxANsoaX6gA9lw76lJkTECuxFofSeetKF00ze0,1346
|
502
503
|
vellum/client/types/prompt_deployment_release_prompt_deployment.py,sha256=tj8g0qEJyAuijxRBUV6nO2IITEorqVY-C37oqiWg6Po,582
|
503
|
-
vellum/client/types/prompt_deployment_release_prompt_version.py,sha256=
|
504
|
+
vellum/client/types/prompt_deployment_release_prompt_version.py,sha256=MRiTZ13hMHbhFCJ859CkT231_zFcWo2b_0kDs2G4RWQ,849
|
504
505
|
vellum/client/types/prompt_exec_config.py,sha256=2-hbAa_zeXl0V6oAZXZzE0ipcFoOU0WnPSePRXYRlfo,1143
|
505
506
|
vellum/client/types/prompt_execution_meta.py,sha256=3hhMZgdAR5mKfnh2e_eVN3oKfT0E9w26khVPrpjn7jk,1141
|
506
507
|
vellum/client/types/prompt_node_execution_meta.py,sha256=IyWH__nCp5uwS0N32b2ZEsA-Fv7AZDB4nnlRZayU2Gc,888
|
@@ -514,6 +515,7 @@ vellum/client/types/prompt_request_input.py,sha256=brEdYhYm74Ac8XjK9wF0rKOLgnqd_
|
|
514
515
|
vellum/client/types/prompt_request_json_input.py,sha256=vLhwvCWL_yjVfDzT4921xK4Ql92OkvG-ruvOC_uppFI,739
|
515
516
|
vellum/client/types/prompt_request_string_input.py,sha256=8GSFhtN3HeYssbDRY7B5SCh5Qrp67340D9c3oINpCmw,714
|
516
517
|
vellum/client/types/prompt_settings.py,sha256=gITevU-SWiStXFKLfpwG5dQJ-bic5CxnM0OHsT9KR0s,635
|
518
|
+
vellum/client/types/prompt_version_build_config_sandbox.py,sha256=SXU62bAueVpoWo178bLIMYi8aNVpsBGTtOQxHcg6Dmo,678
|
517
519
|
vellum/client/types/raw_prompt_execution_overrides_request.py,sha256=x4Chkm_NxXySOEyA6s6J_mhhiM91KCcQbu6pQETB8RI,927
|
518
520
|
vellum/client/types/reducto_chunker_config.py,sha256=by_Dj0hZPkLQAf7l1KAudRB8X2XnlfHiRTsyiR-DTRY,654
|
519
521
|
vellum/client/types/reducto_chunker_config_request.py,sha256=RnulU2a_PUtvRE2qhARQhsCkWI--K_MYkobzLNRGEz4,661
|
@@ -939,6 +941,7 @@ vellum/types/compile_prompt_deployment_expand_meta_request.py,sha256=gXZJpYawKJ2
|
|
939
941
|
vellum/types/compile_prompt_meta.py,sha256=3WBjvEVnAqbIf-TajGtEWm0D-L_ZHm7MHo5_dD4N8jc,157
|
940
942
|
vellum/types/components_schemas_pdf_search_result_meta_source.py,sha256=JuW2DXM7vd33IEpbrFF3NBVucydn_Lb96PqRbO5khsk,186
|
941
943
|
vellum/types/components_schemas_pdf_search_result_meta_source_request.py,sha256=SQoJprykGG4h6xFphGMwyMKvtuoHAsv7o_6pBj9yPgI,194
|
944
|
+
vellum/types/components_schemas_prompt_version_build_config_sandbox.py,sha256=7uNb2ZzYojSaUy7i8kBFAaqhvgriAjEIkoZhGx7k87k,192
|
942
945
|
vellum/types/condition_combinator.py,sha256=1wNfjIPngHhdUbhMpjNVZqUI8LEu0XIExUX4Rtln1Tg,158
|
943
946
|
vellum/types/conditional_node_result.py,sha256=zcfDgqzQWXVcqEQi_ozC_7l2to8Y3uNZ5mFN_uIVDW8,161
|
944
947
|
vellum/types/conditional_node_result_data.py,sha256=z7Mtn_iKkan2jrGc2Q7fx-anx3ijHSSqnZwAb1w4ouk,166
|
@@ -1190,6 +1193,7 @@ vellum/types/prompt_request_input.py,sha256=kjHHbam1HcDm9_1br9iqlZhrke3nRJYh4UNZ
|
|
1190
1193
|
vellum/types/prompt_request_json_input.py,sha256=OlXiUPchxe184SWbmIvbmARpY9YWPi8yPqWaVC8xoBU,163
|
1191
1194
|
vellum/types/prompt_request_string_input.py,sha256=1V-fTtuyhEw5H4EpqIkCqX7aHGJivUzzc_LMeszPjnc,165
|
1192
1195
|
vellum/types/prompt_settings.py,sha256=6_AzrH73lBHSDxKxidI6zhDjAeWh_nZcaIGlrzJhypU,153
|
1196
|
+
vellum/types/prompt_version_build_config_sandbox.py,sha256=thz3Ty7FMZr1NWrrtPS1QN32kPpZo9hg9VIN6c6biuc,173
|
1193
1197
|
vellum/types/raw_prompt_execution_overrides_request.py,sha256=NvCoHH8ehO0UortbDuDQvwOdxQzXw0_PMGsJc7DtvoA,176
|
1194
1198
|
vellum/types/reducto_chunker_config.py,sha256=6hu2m_WTavxTfKs46BWZGiuOsLE4HYgoP-VdDGS6KTI,160
|
1195
1199
|
vellum/types/reducto_chunker_config_request.py,sha256=KjIZYQu27OIA--0e6RjgUwWmY3iE8s9rlehdhfZRzhQ,168
|
@@ -1543,7 +1547,7 @@ vellum/workflows/inputs/tests/test_inputs.py,sha256=lioA8917mFLYq7Ml69UNkqUjcWbb
|
|
1543
1547
|
vellum/workflows/logging.py,sha256=_a217XogktV4Ncz6xKFz7WfYmZAzkfVRVuC0rWob8ls,437
|
1544
1548
|
vellum/workflows/nodes/__init__.py,sha256=aVdQVv7Y3Ro3JlqXGpxwaU2zrI06plDHD2aumH5WUIs,1157
|
1545
1549
|
vellum/workflows/nodes/bases/__init__.py,sha256=cniHuz_RXdJ4TQgD8CBzoiKDiPxg62ErdVpCbWICX64,58
|
1546
|
-
vellum/workflows/nodes/bases/base.py,sha256=
|
1550
|
+
vellum/workflows/nodes/bases/base.py,sha256=3yWWY6ZYpUIMzGyKeu_7xs8qC58uef0ly6EVUbWIAQ0,17170
|
1547
1551
|
vellum/workflows/nodes/bases/base_adornment_node.py,sha256=Ao2opOW4kgNoYXFF9Pk7IMpVZdy6luwrjcqEwU5Q9V0,3404
|
1548
1552
|
vellum/workflows/nodes/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1549
1553
|
vellum/workflows/nodes/bases/tests/test_base_adornment_node.py,sha256=fXZI9KqpS4XMBrBnIEkK3foHaBVvyHwYcQWWDKay7ic,1148
|
@@ -1596,7 +1600,7 @@ vellum/workflows/nodes/displayable/code_execution_node/node.py,sha256=U21jXW8XZo
|
|
1596
1600
|
vellum/workflows/nodes/displayable/code_execution_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1597
1601
|
vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1598
1602
|
vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/main.py,sha256=5QsbmkzSlSbcbWTG_JmIqcP-JNJzOPTKxGzdHos19W4,79
|
1599
|
-
vellum/workflows/nodes/displayable/code_execution_node/tests/
|
1603
|
+
vellum/workflows/nodes/displayable/code_execution_node/tests/test_node.py,sha256=mOVOD9UL2X0BpURn3vTI0ZPE7MGyVNo0XIwNKqxxbrM,34723
|
1600
1604
|
vellum/workflows/nodes/displayable/code_execution_node/utils.py,sha256=VRTKms59vrSR9mDk99cojParZVAP4lzjEeDwDNXU1tk,3837
|
1601
1605
|
vellum/workflows/nodes/displayable/conditional_node/__init__.py,sha256=AS_EIqFdU1F9t8aLmbZU-rLh9ry6LCJ0uj0D8F0L5Uw,72
|
1602
1606
|
vellum/workflows/nodes/displayable/conditional_node/node.py,sha256=Qjfl33gZ3JEgxBA1EgzSUebboGvsARthIxxcQyvx5Gg,1152
|
@@ -1639,14 +1643,14 @@ vellum/workflows/nodes/experimental/__init__.py,sha256=_tpZGWAZLydcKxfrj1-plrZeT
|
|
1639
1643
|
vellum/workflows/nodes/experimental/openai_chat_completion_node/__init__.py,sha256=lsyD9laR9p7kx5-BXGH2gUTM242UhKy8SMV0SR6S2iE,90
|
1640
1644
|
vellum/workflows/nodes/experimental/openai_chat_completion_node/node.py,sha256=cKI2Ls25L-JVt4z4a2ozQa-YBeVy21Z7BQ32Sj7iBPE,10460
|
1641
1645
|
vellum/workflows/nodes/experimental/tool_calling_node/__init__.py,sha256=S7OzT3I4cyOU5Beoz87nPwCejCMP2FsHBFL8OcVmxJ4,118
|
1642
|
-
vellum/workflows/nodes/experimental/tool_calling_node/node.py,sha256=
|
1646
|
+
vellum/workflows/nodes/experimental/tool_calling_node/node.py,sha256=Vxa0hs_tK1zdU-ux5j1XtwQkTph8crdd56wrMfAqWUY,4849
|
1643
1647
|
vellum/workflows/nodes/experimental/tool_calling_node/tests/test_tool_calling_node.py,sha256=sxG26mOwt4N36RLoPJ-ngginPqC5qFzD_kGj9izdCFI,1833
|
1644
|
-
vellum/workflows/nodes/experimental/tool_calling_node/utils.py,sha256=
|
1648
|
+
vellum/workflows/nodes/experimental/tool_calling_node/utils.py,sha256=mIQpAxLT2IF4SNQvUpRsX-t0jODxQ3Xvb_LEF7bRMF8,5214
|
1645
1649
|
vellum/workflows/nodes/mocks.py,sha256=a1FjWEIocseMfjzM-i8DNozpUsaW0IONRpZmXBoWlyc,10455
|
1646
1650
|
vellum/workflows/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1647
1651
|
vellum/workflows/nodes/tests/test_mocks.py,sha256=mfPvrs75PKcsNsbJLQAN6PDFoVqs9TmQxpdyFKDdO60,7837
|
1648
|
-
vellum/workflows/nodes/tests/test_utils.py,sha256=
|
1649
|
-
vellum/workflows/nodes/utils.py,sha256=
|
1652
|
+
vellum/workflows/nodes/tests/test_utils.py,sha256=OPVZo9yi8qt0rVqayKhfgh4Hk-dVdIzqfbS89fDhRiE,4913
|
1653
|
+
vellum/workflows/nodes/utils.py,sha256=K2gf05eM-EKkKHf2SPpvEly8cBL4RftWSMvIZJIMlso,9455
|
1650
1654
|
vellum/workflows/outputs/__init__.py,sha256=AyZ4pRh_ACQIGvkf0byJO46EDnSix1ZCAXfvh-ms1QE,94
|
1651
1655
|
vellum/workflows/outputs/base.py,sha256=1OGHqBJVk7i8cW8uewFWOhIjuMlRRpzCDrGE30ZwDjw,8763
|
1652
1656
|
vellum/workflows/ports/__init__.py,sha256=bZuMt-R7z5bKwpu4uPW7LlJeePOQWmCcDSXe5frUY5g,101
|
@@ -1669,10 +1673,10 @@ vellum/workflows/references/workflow_input.py,sha256=W3rOK1EPd2gYHb04WJwmNm1CUSd
|
|
1669
1673
|
vellum/workflows/resolvers/__init__.py,sha256=eH6hTvZO4IciDaf_cf7aM2vs-DkBDyJPycOQevJxQnI,82
|
1670
1674
|
vellum/workflows/resolvers/base.py,sha256=WHra9LRtlTuB1jmuNqkfVE2JUgB61Cyntn8f0b0WZg4,411
|
1671
1675
|
vellum/workflows/runner/__init__.py,sha256=i1iG5sAhtpdsrlvwgH6B-m49JsINkiWyPWs8vyT-bqM,72
|
1672
|
-
vellum/workflows/runner/runner.py,sha256=
|
1676
|
+
vellum/workflows/runner/runner.py,sha256=0Ufxyl3nwWVI--w_iVTAVXUOKJXuZiEn6-BrrUAGVBs,32983
|
1673
1677
|
vellum/workflows/sandbox.py,sha256=GVJzVjMuYzOBnSrboB0_6MMRZWBluAyQ2o7syeaeBd0,2235
|
1674
1678
|
vellum/workflows/state/__init__.py,sha256=yUUdR-_Vl7UiixNDYQZ-GEM_kJI9dnOia75TtuNEsnE,60
|
1675
|
-
vellum/workflows/state/base.py,sha256
|
1679
|
+
vellum/workflows/state/base.py,sha256=-0b-nNBEXvGVau4c1BUwmCsXfo5wZD5VjLb8-eqi0Y8,21502
|
1676
1680
|
vellum/workflows/state/context.py,sha256=KOAI1wEGn8dGmhmAemJaf4SZbitP3jpIBcwKfznQaRE,3076
|
1677
1681
|
vellum/workflows/state/encoder.py,sha256=z7Mk6jQC-92wCj6XTK7VEnJ8px_lU8qy0BINqwGDN4I,2063
|
1678
1682
|
vellum/workflows/state/store.py,sha256=uVe-oN73KwGV6M6YLhwZMMUQhzTQomsVfVnb8V91gVo,1147
|
@@ -1682,7 +1686,7 @@ vellum/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
|
|
1682
1686
|
vellum/workflows/tests/test_sandbox.py,sha256=JKwaluI-lODQo7Ek9sjDstjL_WTdSqUlVik6ZVTfVOA,1826
|
1683
1687
|
vellum/workflows/tests/test_undefined.py,sha256=zMCVliCXVNLrlC6hEGyOWDnQADJ2g83yc5FIM33zuo8,353
|
1684
1688
|
vellum/workflows/types/__init__.py,sha256=KxUTMBGzuRCfiMqzzsykOeVvrrkaZmTTo1a7SLu8gRM,68
|
1685
|
-
vellum/workflows/types/code_execution_node_wrappers.py,sha256=
|
1689
|
+
vellum/workflows/types/code_execution_node_wrappers.py,sha256=sPo7fLSyf92n6OFsrNLAsaNs0_I3AH-fXkEw3KrbWmc,3162
|
1686
1690
|
vellum/workflows/types/core.py,sha256=kMQremh_I8egXpiKmtMQbB6e3OczAWiRnnTq5V6xlD0,928
|
1687
1691
|
vellum/workflows/types/definition.py,sha256=z81CL_u0FJol-9yUIqoXNTYAARtU8x__c6s-f4rb5c8,2335
|
1688
1692
|
vellum/workflows/types/generics.py,sha256=tKXz0LwWJGKw1YGudyl9_yFDrRgU6yYV1yJV1Zv-LTw,1430
|
@@ -1691,10 +1695,10 @@ vellum/workflows/types/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
|
|
1691
1695
|
vellum/workflows/types/tests/test_utils.py,sha256=UnZog59tR577mVwqZRqqWn2fScoOU1H6up0EzS8zYhw,2536
|
1692
1696
|
vellum/workflows/types/utils.py,sha256=axxHbPLsnjhEOnMZrc5YarFd-P2bnsacBDQGNCvY8OY,6367
|
1693
1697
|
vellum/workflows/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1694
|
-
vellum/workflows/utils/functions.py,sha256=
|
1698
|
+
vellum/workflows/utils/functions.py,sha256=uWeD3MQfPsiPDCbecl8y8KU-B1ALnSSdYkv-YiyuWAs,4079
|
1695
1699
|
vellum/workflows/utils/names.py,sha256=QLUqfJ1tmSEeUwBKTTiv_Qk3QGbInC2RSmlXfGXc8Wo,380
|
1696
1700
|
vellum/workflows/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1697
|
-
vellum/workflows/utils/tests/test_functions.py,sha256=
|
1701
|
+
vellum/workflows/utils/tests/test_functions.py,sha256=Qt33YfSqQ28JFAR46twuyQwZMJ2fuzKzt74eE01QAd8,8552
|
1698
1702
|
vellum/workflows/utils/tests/test_names.py,sha256=aOqpyvMsOEK_9mg_-yaNxQDW7QQfwqsYs37PseyLhxw,402
|
1699
1703
|
vellum/workflows/utils/tests/test_uuids.py,sha256=i77ABQ0M3S-aFLzDXHJq_yr5FPkJEWCMBn1HJ3DObrE,437
|
1700
1704
|
vellum/workflows/utils/tests/test_vellum_variables.py,sha256=maI5e7Od7UlpMwlrOrcdlXqnFhonkXGnWq8G2-YQLi8,1155
|
@@ -1707,8 +1711,8 @@ vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnad
|
|
1707
1711
|
vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1708
1712
|
vellum/workflows/workflows/tests/test_base_workflow.py,sha256=8P5YIsNMO78_CR1NNK6wkEdkMB4b3Q_Ni1qxh78OnHo,20481
|
1709
1713
|
vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
|
1710
|
-
vellum_ai-0.14.
|
1711
|
-
vellum_ai-0.14.
|
1712
|
-
vellum_ai-0.14.
|
1713
|
-
vellum_ai-0.14.
|
1714
|
-
vellum_ai-0.14.
|
1714
|
+
vellum_ai-0.14.55.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
|
1715
|
+
vellum_ai-0.14.55.dist-info/METADATA,sha256=ApsBqWl_U1jFrSqdnv2Rksz_onftgT0T2yu6KxfOpPc,5484
|
1716
|
+
vellum_ai-0.14.55.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
1717
|
+
vellum_ai-0.14.55.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
|
1718
|
+
vellum_ai-0.14.55.dist-info/RECORD,,
|
vellum_cli/logger.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import logging
|
2
2
|
import os
|
3
|
+
from typing import Optional
|
3
4
|
|
4
5
|
|
5
6
|
class CLIFormatter(logging.Formatter):
|
@@ -34,3 +35,13 @@ def load_cli_logger() -> logging.Logger:
|
|
34
35
|
logger.addHandler(handler)
|
35
36
|
|
36
37
|
return logger
|
38
|
+
|
39
|
+
|
40
|
+
def handle_cli_error(logger: logging.Logger, title: str, message: str, suggestion: Optional[str] = None):
|
41
|
+
logger.error("\n\033[1;31m✖ {}\033[0m".format(title)) # Bold red X and title
|
42
|
+
logger.error("\n\033[1m{}\033[0m".format(message)) # Bold message
|
43
|
+
if suggestion:
|
44
|
+
logger.error("\n\033[1;34mNext steps:\033[0m") # Bold blue
|
45
|
+
logger.error(suggestion)
|
46
|
+
|
47
|
+
exit(1)
|
vellum_cli/push.py
CHANGED
@@ -15,7 +15,7 @@ from vellum.types import WorkflowPushDeploymentConfigRequest
|
|
15
15
|
from vellum.workflows.vellum_client import create_vellum_client
|
16
16
|
from vellum.workflows.workflows.base import BaseWorkflow
|
17
17
|
from vellum_cli.config import DEFAULT_WORKSPACE_CONFIG, WorkflowConfig, WorkflowDeploymentConfig, load_vellum_cli_config
|
18
|
-
from vellum_cli.logger import load_cli_logger
|
18
|
+
from vellum_cli.logger import handle_cli_error, load_cli_logger
|
19
19
|
from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
|
20
20
|
|
21
21
|
|
@@ -178,41 +178,39 @@ def push_command(
|
|
178
178
|
strict=strict,
|
179
179
|
)
|
180
180
|
except ApiError as e:
|
181
|
-
if e.status_code
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
181
|
+
if e.status_code == 400 and isinstance(e.body, dict) and "diffs" in e.body:
|
182
|
+
diffs: dict = e.body["diffs"]
|
183
|
+
generated_only = diffs.get("generated_only", [])
|
184
|
+
generated_only_str = (
|
185
|
+
"\n".join(
|
186
|
+
["Files that were generated but not found in the original project:"]
|
187
|
+
+ [f"- {file}" for file in generated_only]
|
188
|
+
)
|
189
|
+
if generated_only
|
190
|
+
else ""
|
190
191
|
)
|
191
|
-
if generated_only
|
192
|
-
else ""
|
193
|
-
)
|
194
192
|
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
193
|
+
original_only = diffs.get("original_only", [])
|
194
|
+
original_only_str = (
|
195
|
+
"\n".join(
|
196
|
+
["Files that were found in the original project but not generated:"]
|
197
|
+
+ [f"- {file}" for file in original_only]
|
198
|
+
)
|
199
|
+
if original_only
|
200
|
+
else ""
|
200
201
|
)
|
201
|
-
if original_only
|
202
|
-
else ""
|
203
|
-
)
|
204
202
|
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
203
|
+
modified = diffs.get("modified", {})
|
204
|
+
modified_str = (
|
205
|
+
"\n\n".join(
|
206
|
+
["Files that were different between the original project and the generated artifact:"]
|
207
|
+
+ ["\n".join(line.strip() for line in lines) for lines in modified.values()]
|
208
|
+
)
|
209
|
+
if modified
|
210
|
+
else ""
|
210
211
|
)
|
211
|
-
if modified
|
212
|
-
else ""
|
213
|
-
)
|
214
212
|
|
215
|
-
|
213
|
+
reported_diffs = f"""\
|
216
214
|
{e.body.get("detail")}
|
217
215
|
|
218
216
|
{generated_only_str}
|
@@ -221,8 +219,14 @@ def push_command(
|
|
221
219
|
|
222
220
|
{modified_str}
|
223
221
|
"""
|
224
|
-
|
225
|
-
|
222
|
+
logger.error(reported_diffs)
|
223
|
+
return
|
224
|
+
|
225
|
+
if e.status_code == 400 and isinstance(e.body, dict) and "detail" in e.body:
|
226
|
+
handle_cli_error(logger, title="API request to /workflows/push failed.", message=e.body["detail"])
|
227
|
+
return
|
228
|
+
|
229
|
+
raise e
|
226
230
|
|
227
231
|
if dry_run:
|
228
232
|
error_messages = [str(e) for e in workflow_display.errors]
|
vellum_cli/tests/test_push.py
CHANGED
@@ -525,6 +525,37 @@ Files that were different between the original project and the generated artifac
|
|
525
525
|
)
|
526
526
|
|
527
527
|
|
528
|
+
def test_push__push_fails_due_to_400_error(mock_module, vellum_client):
|
529
|
+
# GIVEN a single workflow configured
|
530
|
+
temp_dir = mock_module.temp_dir
|
531
|
+
module = mock_module.module
|
532
|
+
|
533
|
+
# AND a workflow exists in the module successfully
|
534
|
+
_ensure_workflow_py(temp_dir, module)
|
535
|
+
|
536
|
+
# AND the push API call returns a 4xx response
|
537
|
+
vellum_client.workflows.push.side_effect = ApiError(
|
538
|
+
status_code=400,
|
539
|
+
body={
|
540
|
+
"detail": "Pushing the Workflow failed because you did something wrong",
|
541
|
+
},
|
542
|
+
)
|
543
|
+
|
544
|
+
# WHEN calling `vellum push` on strict mode
|
545
|
+
runner = CliRunner()
|
546
|
+
result = runner.invoke(cli_main, ["push", module])
|
547
|
+
|
548
|
+
# THEN it should fail with a user error code
|
549
|
+
assert result.exit_code == 1
|
550
|
+
|
551
|
+
# AND the error message should be in the error message
|
552
|
+
assert "API request to /workflows/push failed." in result.output
|
553
|
+
assert "Pushing the Workflow failed because you did something wrong" in result.output
|
554
|
+
|
555
|
+
# AND the stack trace should not be
|
556
|
+
assert "Traceback" not in result.output
|
557
|
+
|
558
|
+
|
528
559
|
@pytest.mark.parametrize(
|
529
560
|
"file_data",
|
530
561
|
[
|
@@ -161,17 +161,12 @@ def test_serialize_workflow():
|
|
161
161
|
},
|
162
162
|
],
|
163
163
|
"outputs": [
|
164
|
-
{
|
165
|
-
"id": "e62bc785-a914-4066-b79e-8c89a5d0ec6c",
|
166
|
-
"name": "text",
|
167
|
-
"type": "STRING",
|
168
|
-
"value": {"type": "CONSTANT_VALUE", "value": {"type": "STRING", "value": ""}},
|
169
|
-
},
|
164
|
+
{"id": "e62bc785-a914-4066-b79e-8c89a5d0ec6c", "name": "text", "type": "STRING", "value": None},
|
170
165
|
{
|
171
166
|
"id": "4674f1d9-e3af-411f-8a55-40a3a3ab5394",
|
172
167
|
"name": "chat_history",
|
173
168
|
"type": "CHAT_HISTORY",
|
174
|
-
"value":
|
169
|
+
"value": None,
|
175
170
|
},
|
176
171
|
],
|
177
172
|
}
|
@@ -583,14 +583,30 @@ class BaseWorkflowDisplay(Generic[WorkflowType]):
|
|
583
583
|
# DEPRECATED: This will be removed in the 0.15.0 release
|
584
584
|
workflow_class: Optional[Type[BaseWorkflow]] = None,
|
585
585
|
) -> Union[WorkflowEventDisplayContext, None]:
|
586
|
-
|
586
|
+
full_workflow_display_module_path = f"{module_path}.display.workflow"
|
587
587
|
try:
|
588
|
-
|
588
|
+
display_module = importlib.import_module(full_workflow_display_module_path)
|
589
589
|
except ModuleNotFoundError:
|
590
|
+
logger.exception("Failed to import workflow display module: %s", full_workflow_display_module_path)
|
590
591
|
return None
|
591
592
|
|
592
|
-
WorkflowDisplayClass =
|
593
|
-
|
593
|
+
WorkflowDisplayClass: Optional[Type[BaseWorkflowDisplay]] = None
|
594
|
+
for name, definition in display_module.__dict__.items():
|
595
|
+
if name.startswith("_"):
|
596
|
+
continue
|
597
|
+
|
598
|
+
if (
|
599
|
+
not isinstance(definition, type)
|
600
|
+
or not issubclass(definition, BaseWorkflowDisplay)
|
601
|
+
or definition == BaseWorkflowDisplay
|
602
|
+
):
|
603
|
+
continue
|
604
|
+
|
605
|
+
WorkflowDisplayClass = definition
|
606
|
+
break
|
607
|
+
|
608
|
+
if not WorkflowDisplayClass:
|
609
|
+
logger.exception("No workflow display class found in module: %s", full_workflow_display_module_path)
|
594
610
|
return None
|
595
611
|
|
596
612
|
return WorkflowDisplayClass().get_event_display_context()
|
@@ -54,3 +54,51 @@ def test_base_class_dynamic_import(files):
|
|
54
54
|
}
|
55
55
|
assert display_meta
|
56
56
|
assert display_meta.model_dump(mode="json") == expected_result
|
57
|
+
|
58
|
+
|
59
|
+
def test_gather_event_display_context__custom_workflow_name():
|
60
|
+
# GIVEN a workflow module with a custom workflow name
|
61
|
+
workflow_output_id = uuid4()
|
62
|
+
files = {
|
63
|
+
"__init__.py": "",
|
64
|
+
"workflow.py": """\
|
65
|
+
from vellum.workflows import BaseWorkflow
|
66
|
+
|
67
|
+
class MyCustomWorkflow(BaseWorkflow):
|
68
|
+
class Outputs(BaseWorkflow.Outputs):
|
69
|
+
answer = "foo"
|
70
|
+
""",
|
71
|
+
"display/__init__.py": """\
|
72
|
+
# flake8: noqa: F401, F403
|
73
|
+
|
74
|
+
from .workflow import *
|
75
|
+
""",
|
76
|
+
"display/workflow.py": f"""\
|
77
|
+
from uuid import UUID
|
78
|
+
from vellum_ee.workflows.display.workflows import BaseWorkflowDisplay
|
79
|
+
from vellum_ee.workflows.display.base import WorkflowOutputDisplay
|
80
|
+
from ..workflow import MyCustomWorkflow
|
81
|
+
|
82
|
+
class MyCustomWorkflowDisplay(BaseWorkflowDisplay[MyCustomWorkflow]):
|
83
|
+
output_displays = {{
|
84
|
+
MyCustomWorkflow.Outputs.answer: WorkflowOutputDisplay(
|
85
|
+
id=UUID("{workflow_output_id}"), name="answer"
|
86
|
+
)
|
87
|
+
}}
|
88
|
+
""",
|
89
|
+
}
|
90
|
+
|
91
|
+
namespace = str(uuid4())
|
92
|
+
|
93
|
+
# AND the virtual file loader is registered
|
94
|
+
sys.meta_path.append(VirtualFileFinder(files, namespace))
|
95
|
+
|
96
|
+
# WHEN the workflow display context is gathered
|
97
|
+
Workflow = BaseWorkflow.load_from_module(namespace)
|
98
|
+
display_meta = BaseWorkflowDisplay.gather_event_display_context(namespace, Workflow)
|
99
|
+
|
100
|
+
# THEN the workflow display context is successfully gathered
|
101
|
+
assert display_meta
|
102
|
+
assert display_meta.workflow_outputs == {
|
103
|
+
"answer": workflow_output_id,
|
104
|
+
}
|
File without changes
|
File without changes
|
File without changes
|