vellum-ai 1.3.2__py3-none-any.whl → 1.3.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- vellum/client/core/client_wrapper.py +2 -2
- vellum/client/types/function_definition.py +5 -0
- vellum/client/types/scenario_input_audio_variable_value.py +1 -1
- vellum/client/types/scenario_input_document_variable_value.py +1 -1
- vellum/client/types/scenario_input_image_variable_value.py +1 -1
- vellum/client/types/scenario_input_video_variable_value.py +1 -1
- vellum/workflows/emitters/vellum_emitter.py +55 -9
- vellum/workflows/events/node.py +1 -1
- vellum/workflows/events/tests/test_event.py +1 -1
- vellum/workflows/events/workflow.py +1 -1
- vellum/workflows/nodes/core/retry_node/tests/test_node.py +1 -2
- vellum/workflows/nodes/displayable/tool_calling_node/utils.py +21 -15
- vellum/workflows/resolvers/resolver.py +18 -2
- vellum/workflows/resolvers/tests/test_resolver.py +121 -0
- vellum/workflows/runner/runner.py +17 -17
- vellum/workflows/state/encoder.py +0 -37
- vellum/workflows/state/tests/test_state.py +14 -0
- vellum/workflows/types/code_execution_node_wrappers.py +3 -0
- vellum/workflows/utils/functions.py +35 -0
- vellum/workflows/utils/vellum_variables.py +11 -2
- {vellum_ai-1.3.2.dist-info → vellum_ai-1.3.4.dist-info}/METADATA +1 -1
- {vellum_ai-1.3.2.dist-info → vellum_ai-1.3.4.dist-info}/RECORD +39 -37
- vellum_cli/__init__.py +21 -0
- vellum_cli/move.py +56 -0
- vellum_cli/tests/test_move.py +154 -0
- vellum_ee/workflows/display/base.py +1 -0
- vellum_ee/workflows/display/editor/types.py +1 -0
- vellum_ee/workflows/display/nodes/base_node_display.py +1 -0
- vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +18 -2
- vellum_ee/workflows/display/tests/test_base_workflow_display.py +52 -2
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py +17 -5
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py +1 -0
- vellum_ee/workflows/display/utils/events.py +1 -0
- vellum_ee/workflows/display/utils/expressions.py +44 -0
- vellum_ee/workflows/display/utils/tests/test_events.py +11 -1
- vellum_ee/workflows/display/workflows/base_workflow_display.py +32 -22
- {vellum_ai-1.3.2.dist-info → vellum_ai-1.3.4.dist-info}/LICENSE +0 -0
- {vellum_ai-1.3.2.dist-info → vellum_ai-1.3.4.dist-info}/WHEEL +0 -0
- {vellum_ai-1.3.2.dist-info → vellum_ai-1.3.4.dist-info}/entry_points.txt +0 -0
@@ -135,6 +135,9 @@ def _compile_workflow_deployment_input(input_var: Any) -> dict[str, Any]:
|
|
135
135
|
def compile_function_definition(function: Callable) -> FunctionDefinition:
|
136
136
|
"""
|
137
137
|
Converts a Python function into our Vellum-native FunctionDefinition type.
|
138
|
+
|
139
|
+
Args:
|
140
|
+
function: The Python function to compile
|
138
141
|
"""
|
139
142
|
|
140
143
|
try:
|
@@ -142,10 +145,18 @@ def compile_function_definition(function: Callable) -> FunctionDefinition:
|
|
142
145
|
except ValueError as e:
|
143
146
|
raise ValueError(f"Failed to get signature for function {function.__name__}: {str(e)}")
|
144
147
|
|
148
|
+
# Get inputs from the decorator if present
|
149
|
+
inputs = getattr(function, "__vellum_inputs__", {})
|
150
|
+
exclude_params = set(inputs.keys())
|
151
|
+
|
145
152
|
properties = {}
|
146
153
|
required = []
|
147
154
|
defs: dict[str, Any] = {}
|
148
155
|
for param in signature.parameters.values():
|
156
|
+
# Skip parameters that are in the exclude_params set
|
157
|
+
if exclude_params and param.name in exclude_params:
|
158
|
+
continue
|
159
|
+
|
149
160
|
# Check if parameter uses Annotated type hint
|
150
161
|
if get_origin(param.annotation) is Annotated:
|
151
162
|
args = get_args(param.annotation)
|
@@ -248,3 +259,27 @@ def compile_workflow_deployment_function_definition(
|
|
248
259
|
description=description,
|
249
260
|
parameters=parameters,
|
250
261
|
)
|
262
|
+
|
263
|
+
|
264
|
+
def use_tool_inputs(**inputs):
|
265
|
+
"""
|
266
|
+
Decorator to specify which parameters of a tool function should be provided
|
267
|
+
from the parent workflow inputs rather than from the LLM.
|
268
|
+
|
269
|
+
Args:
|
270
|
+
**inputs: Mapping of parameter names to parent input references
|
271
|
+
|
272
|
+
Example:
|
273
|
+
@use_tool_inputs(
|
274
|
+
parent_input=ParentInputs.parent_input,
|
275
|
+
)
|
276
|
+
def get_string(parent_input: str, user_query: str) -> str:
|
277
|
+
return f"Parent: {parent_input}, Query: {user_query}"
|
278
|
+
"""
|
279
|
+
|
280
|
+
def decorator(func: Callable) -> Callable:
|
281
|
+
# Store the inputs mapping on the function for later use
|
282
|
+
setattr(func, "__vellum_inputs__", inputs)
|
283
|
+
return func
|
284
|
+
|
285
|
+
return decorator
|
@@ -22,6 +22,7 @@ from vellum import (
|
|
22
22
|
VellumVideo,
|
23
23
|
VellumVideoRequest,
|
24
24
|
)
|
25
|
+
from vellum.workflows.constants import undefined
|
25
26
|
from vellum.workflows.descriptors.base import BaseDescriptor
|
26
27
|
from vellum.workflows.types.core import Json
|
27
28
|
|
@@ -29,8 +30,16 @@ from vellum.workflows.types.core import Json
|
|
29
30
|
def primitive_type_to_vellum_variable_type(type_: Union[Type, BaseDescriptor]) -> VellumVariableType:
|
30
31
|
"""Converts a python primitive to a VellumVariableType"""
|
31
32
|
if isinstance(type_, BaseDescriptor):
|
32
|
-
# Ignore None because those just make types optional
|
33
|
-
types = [
|
33
|
+
# Ignore None and undefined because those just make types optional
|
34
|
+
types = []
|
35
|
+
for t in type_.types:
|
36
|
+
if t is type(None):
|
37
|
+
continue
|
38
|
+
if t is undefined or t is type(undefined):
|
39
|
+
continue
|
40
|
+
if get_origin(t) is type and len(get_args(t)) == 1 and get_args(t)[0] is undefined:
|
41
|
+
continue
|
42
|
+
types.append(t)
|
34
43
|
|
35
44
|
# default to JSON for typevars where the types is empty tuple
|
36
45
|
if len(types) == 0:
|
@@ -1,11 +1,12 @@
|
|
1
1
|
vellum_cli/CONTRIBUTING.md,sha256=FtDC7BGxSeMnwCXAUssFsAIElXtmJE-O5Z7BpolcgvI,2935
|
2
2
|
vellum_cli/README.md,sha256=2NudRoLzWxNKqnuVy1JuQ7DerIaxWGYkrH8kMd-asIE,90
|
3
|
-
vellum_cli/__init__.py,sha256=
|
3
|
+
vellum_cli/__init__.py,sha256=CCTCiCvwxjFHXVSKhzUtZ3GE_h4HrbLEX_XC3qjPuAk,13618
|
4
4
|
vellum_cli/aliased_group.py,sha256=ugW498j0yv4ALJ8vS9MsO7ctDW7Jlir9j6nE_uHAP8c,3363
|
5
5
|
vellum_cli/config.py,sha256=qJrd8W__UZZaUMAG6BO3sxfkgpCoOS4NA3QfqneW-jE,9588
|
6
6
|
vellum_cli/image_push.py,sha256=eeOBqKtKkPu6Kgm_jQCVCivogzAcdlIlkv61-QxH67c,11006
|
7
7
|
vellum_cli/init.py,sha256=WpnMXPItPmh0f0bBGIer3p-e5gu8DUGwSArT_FuoMEw,5093
|
8
8
|
vellum_cli/logger.py,sha256=dcM_OmgqXLo93vDYswO5ylyUQQcTfnA5GTd5tbIt3wM,1446
|
9
|
+
vellum_cli/move.py,sha256=lCHQ-U4BspgS512GxFFvUrglitaHkWfuKn1Hpfcn7-Q,2053
|
9
10
|
vellum_cli/ping.py,sha256=p_BCCRjgPhng6JktuECtkDQLbhopt6JpmrtGoLnLJT8,1161
|
10
11
|
vellum_cli/pull.py,sha256=udYyPlJ6VKDdh78rApNJOZgxHl82fcV6iGnRPSdX1LY,14750
|
11
12
|
vellum_cli/push.py,sha256=KpBGq7B-ffwa9QTHsTRSk73l-tfKc3gyiBSn9Pwlsak,11878
|
@@ -16,6 +17,7 @@ vellum_cli/tests/test_image_push.py,sha256=X0YOPdoaAnWtK9IQTxaN_wWpw08-5G3v76k1W
|
|
16
17
|
vellum_cli/tests/test_image_push_error_handling.py,sha256=QRH0eYNEEIkD2-EVFQWYexOKlhMB6puh1GouovrE-VU,7647
|
17
18
|
vellum_cli/tests/test_init.py,sha256=C_rV4lu-ab5iFoLRizs1XAUnSPdMf7oFuc1i4N4udOU,18285
|
18
19
|
vellum_cli/tests/test_main.py,sha256=qDZG-aQauPwBwM6A2DIu1494n47v3pL28XakTbLGZ-k,272
|
20
|
+
vellum_cli/tests/test_move.py,sha256=FIrL1xlH5oFKGX2MugcTKL8JilpopmUC7hP5OaqF5zw,5213
|
19
21
|
vellum_cli/tests/test_ping.py,sha256=b3aQLd-N59_8w2rRiWqwpB1rlHaKEYVbAj1Y3hi7A-g,2605
|
20
22
|
vellum_cli/tests/test_pull.py,sha256=f7dK61y82LlJm-FAv-IpfmscJijIfZZrR-rzN1TKkU0,49421
|
21
23
|
vellum_cli/tests/test_push.py,sha256=10G-H88tdiYvg9CaC8OXOf25UEzWkWWB01vNhuxzjog,41944
|
@@ -23,12 +25,12 @@ vellum_ee/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
25
|
vellum_ee/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
24
26
|
vellum_ee/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
25
27
|
vellum_ee/workflows/display/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
26
|
-
vellum_ee/workflows/display/base.py,sha256=
|
28
|
+
vellum_ee/workflows/display/base.py,sha256=R3f2T8FlZrXn2FawAmpVuLB3fKFWw11mCUulWAyIKA0,1912
|
27
29
|
vellum_ee/workflows/display/editor/__init__.py,sha256=MSAgY91xCEg2neH5d8jXx5wRdR962ftZVa6vO9BGq9k,167
|
28
|
-
vellum_ee/workflows/display/editor/types.py,sha256=
|
30
|
+
vellum_ee/workflows/display/editor/types.py,sha256=JXpd8E7dsInbDp5T7ra0-T6XvdQB9RAHhZ1Lc8_0Fk4,601
|
29
31
|
vellum_ee/workflows/display/exceptions.py,sha256=Oys39dHoW-s-1dnlRSZxTntMq8_macj-b2CT_6dqzJs,355
|
30
32
|
vellum_ee/workflows/display/nodes/__init__.py,sha256=jI1aPBQf8DkmrYoZ4O-wR1duqZByOf5mDFmo_wFJPE4,307
|
31
|
-
vellum_ee/workflows/display/nodes/base_node_display.py,sha256=
|
33
|
+
vellum_ee/workflows/display/nodes/base_node_display.py,sha256=98vszulLRvYz0kAh7ZEOeWOqzMtlpnOZM2lAViOUieA,18393
|
32
34
|
vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=jI_kUi9LnNLDpY63QtlC4TfN8P571VN4LpzH0I1ZtLk,1149
|
33
35
|
vellum_ee/workflows/display/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
34
36
|
vellum_ee/workflows/display/nodes/tests/test_base_node_display.py,sha256=wBoCqULS4XO3s9Vwhd9v4g10opfBFqeZgRqB8CoFz0c,3015
|
@@ -37,7 +39,7 @@ vellum_ee/workflows/display/nodes/utils.py,sha256=sloya5TpXsnot1HURc9L51INwflRqU
|
|
37
39
|
vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=nUIgH2s0-7IbQRNrBhLPyRNe8YIrx3Yo9HeeW-aXXFk,1668
|
38
40
|
vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=TD23uXA4vhRvsfiq7B10XHpFnsS1CA9M7WH9jsOYNB0,9242
|
39
41
|
vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py,sha256=FHhPoGmmny4Xcxi2pm12Sk3ZOREanWEVrOWcjRhncH4,6337
|
40
|
-
vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=
|
42
|
+
vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=GfwA2Tn0OpdIUiPW9tD2dyv33e3M8yhGt9VfOeN81bU,5146
|
41
43
|
vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=dtO9A-rjbDEJrywwrOxwEXahqrW-S493OIDHOti9Sjs,11498
|
42
44
|
vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=8tSb8qGVoRIELubu0qPeoDlt1LpiIqc6d9_30GWRd_k,2266
|
43
45
|
vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=eeu8i01HbLDvO3KwHnAfaMrYKiEchNAdDdjufjCi6OU,2991
|
@@ -70,7 +72,7 @@ vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py,sha256=rHybfUAWwa0L
|
|
70
72
|
vellum_ee/workflows/display/nodes/vellum/try_node.py,sha256=47fOnSCEFnY8th9m2yTYlgnoUuzgyRZdjg-SXwn--lk,4079
|
71
73
|
vellum_ee/workflows/display/nodes/vellum/utils.py,sha256=oICunzyaXPs0tYnW5zH1r93Bx35MSH7mcD-n0DEWRok,4978
|
72
74
|
vellum_ee/workflows/display/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
73
|
-
vellum_ee/workflows/display/tests/test_base_workflow_display.py,sha256=
|
75
|
+
vellum_ee/workflows/display/tests/test_base_workflow_display.py,sha256=KUxFl04uZv1xPfnLHsMOjPKygwJkf6fRvPj0JvV8Des,14190
|
74
76
|
vellum_ee/workflows/display/tests/workflow_serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
75
77
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
76
78
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=Y-ajeT65b5varmrZCw6L3hir4hJCFq-eO0jZfRcrs7g,1886
|
@@ -86,7 +88,7 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_stat
|
|
86
88
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=03Mk8OE3kWcoZW9lNBe7v4KThCYN-pXg5Rjbkfx-jOQ,6031
|
87
89
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=-T0cd2jx1bC0ZNtAESF78fnYD_0nOqo8zMMLwRHUTRM,6227
|
88
90
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py,sha256=LnZp1YXDn-AaaxiYgxrhCQeH-rLgmlu_r_lvM65EQ5w,7517
|
89
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py,sha256=
|
91
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py,sha256=9w90pk1DzX2PDRML401bZpD9hdTW53Dw5oGb58mxpiw,26358
|
90
92
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=yKmOyunzt5_0cUcqhvCmV2pu81TTkshVi_uN3yt76Wc,21816
|
91
93
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=W4--Ldih7mRMnfyJ9G7kdyeoKkeebSu_5d33TJQzShU,16735
|
92
94
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=UnfWTfKN8DrOLpjCfWMgENJBjgNLWcRVfexbwERKY-c,8501
|
@@ -98,7 +100,7 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_nod
|
|
98
100
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_composio_serialization.py,sha256=oVXCjkU0G56QJmqnd_xIwF3D9bhJwALFibM2wmRhwUk,3739
|
99
101
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py,sha256=Sg82qV5NCzQDy-RD90hA6QaHgFHOq6ESNkbWXygsnNw,26367
|
100
102
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_mcp_serialization.py,sha256=QhQbijeCnFeX1i3SMjHJg2WVAEt5JEO3dhFRv-mofdA,2458
|
101
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256
|
103
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256=cvjHGrgN1LbRvuSKq2U7eLrRFDK4Rb6VJt8L2HIC8HY,10137
|
102
104
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_workflow_deployment_serialization.py,sha256=XIZZr5POo2NLn2uEWm9EC3rejeBMoO4X-JtzTH6mvp4,4074
|
103
105
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=pLCyMScV88DTBXRH7jXaXOEA1GBq8NIipCUFwIAWnwI,2771
|
104
106
|
vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=exT7U-axwtYgFylagScflSQLJEND51qIAx2UATju6JM,6023
|
@@ -107,17 +109,17 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_workflow_input_par
|
|
107
109
|
vellum_ee/workflows/display/types.py,sha256=cyZruu4sXAdHjwuFc7dydM4DcFNf-pp_CmulXItxac4,3679
|
108
110
|
vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
109
111
|
vellum_ee/workflows/display/utils/auto_layout.py,sha256=f4GiLn_LazweupfqTpubcdtdfE_vrOcmZudSsnYIY9E,3906
|
110
|
-
vellum_ee/workflows/display/utils/events.py,sha256=
|
112
|
+
vellum_ee/workflows/display/utils/events.py,sha256=MEG2BT6GgAzkbv1dMaFpov5OShtaAZeAb1-g3xDFsAM,1826
|
111
113
|
vellum_ee/workflows/display/utils/exceptions.py,sha256=LSwwxCYNxFkf5XMUcFkaZKpQ13OSrI7y_bpEUwbKVk0,169
|
112
|
-
vellum_ee/workflows/display/utils/expressions.py,sha256=
|
114
|
+
vellum_ee/workflows/display/utils/expressions.py,sha256=5DwluPppoJSsMf0pfbRafPIisZHZ4VFueXR1YeLcRwY,18593
|
113
115
|
vellum_ee/workflows/display/utils/registry.py,sha256=1qXiBTdsnro6FeCX0FGBEK7CIf6wa--Jt50iZ_nEp_M,3460
|
114
116
|
vellum_ee/workflows/display/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
115
117
|
vellum_ee/workflows/display/utils/tests/test_auto_layout.py,sha256=vfXI769418s9vda5Gb5NFBH747WMOwSgHRXeLCTLVm8,2356
|
116
|
-
vellum_ee/workflows/display/utils/tests/test_events.py,sha256=
|
118
|
+
vellum_ee/workflows/display/utils/tests/test_events.py,sha256=Qze6wEmFJx23_sKQhX-i329apWgMeS9zTptWlRca6Ko,4528
|
117
119
|
vellum_ee/workflows/display/utils/vellum.py,sha256=mtoXmSYwR7rvrq-d6CzCW_auaJXTct0Mi1F0xpRCiNQ,5627
|
118
120
|
vellum_ee/workflows/display/vellum.py,sha256=J2mdJZ1sdLW535DDUkq_Vm8Z572vhuxHxVZF9deKSdk,391
|
119
121
|
vellum_ee/workflows/display/workflows/__init__.py,sha256=JTB9ObEV3l4gGGdtfBHwVJtTTKC22uj-a-XjTVwXCyA,148
|
120
|
-
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=
|
122
|
+
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=o1yKDaBv3dECPcJnEtjDZw8Nt9Y5kjijGc7FQi5IhOQ,43745
|
121
123
|
vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=gxz76AeCqgAZ9D2lZeTiZzxY9eMgn3qOSfVgiqYcOh8,2028
|
122
124
|
vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=pb7BTH-ivRnya1LQU3j-MApWk_m8POpPNOdD0oEK82A,37847
|
123
125
|
vellum_ee/workflows/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -151,7 +153,7 @@ vellum/client/README.md,sha256=b6XKeYBBbhQx0v1sHWfM0gIJeJhUFF-aqL2ig7ADa08,5564
|
|
151
153
|
vellum/client/__init__.py,sha256=T5Ht_w-Mk_9nzGqdadhQB8V20M0vYj7am06ut0A3P1o,73401
|
152
154
|
vellum/client/core/__init__.py,sha256=lTcqUPXcx4112yLDd70RAPeqq6tu3eFMe1pKOqkW9JQ,1562
|
153
155
|
vellum/client/core/api_error.py,sha256=44vPoTyWN59gonCIZMdzw7M1uspygiLnr3GNFOoVL2Q,614
|
154
|
-
vellum/client/core/client_wrapper.py,sha256=
|
156
|
+
vellum/client/core/client_wrapper.py,sha256=7aJQmDvTC5-vD5Qkr7IPOm7wV5Tj_nzD5SlG1cAUg9g,2840
|
155
157
|
vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
|
156
158
|
vellum/client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
|
157
159
|
vellum/client/core/force_multipart.py,sha256=awxh5MtcRYe74ehY8U76jzv6fYM_w_D3Rur7KQQzSDk,429
|
@@ -418,7 +420,7 @@ vellum/client/types/function_call_prompt_block.py,sha256=YcuS0ndY-avXWIcG5UE9mNa
|
|
418
420
|
vellum/client/types/function_call_request.py,sha256=5nPW3gx-l9UN-9puJuDaEZKIkUJUd0glcRLaF0j1x_k,684
|
419
421
|
vellum/client/types/function_call_vellum_value.py,sha256=ITXP69WEE3yELyDylbpmLgIxnh4FWdNI14KkIX8boKA,723
|
420
422
|
vellum/client/types/function_call_vellum_value_request.py,sha256=9Xz4AZDQhtrUCICXdlq0IS9hpFr0bFHE6haf3g3Bn9c,752
|
421
|
-
vellum/client/types/function_definition.py,sha256=
|
423
|
+
vellum/client/types/function_definition.py,sha256=G4mQtdrJzC3I9984YfiyNmvozppEyWqt66NdZBqrgKc,1840
|
422
424
|
vellum/client/types/generate_options_request.py,sha256=2ZXU_zNraXRqcUwky8GqDAnhR10qb2NmcrIUaBFeF6w,746
|
423
425
|
vellum/client/types/generate_request.py,sha256=R_l2CmLeEF-GVIZHyV93Cbt6BBh2WklTslsyNbI3Vfo,1250
|
424
426
|
vellum/client/types/generate_response.py,sha256=_7F1PqE1aQLIBYqKLgw3UDQx7etR15sZgW-VzHfaaWA,1099
|
@@ -633,13 +635,13 @@ vellum/client/types/rich_text_child_block.py,sha256=JCC-6FLdxHG--gE-L6lJtRNI0pmn
|
|
633
635
|
vellum/client/types/rich_text_prompt_block.py,sha256=Te2qnJOiCgqV0gaiui8mVjnATX7mFNJjHqXDX4fd5jA,1000
|
634
636
|
vellum/client/types/sandbox_scenario.py,sha256=gaHbNzufZhibRGoo42Ryo6xZNRo30lLU39oSDS6mqIs,808
|
635
637
|
vellum/client/types/scenario_input.py,sha256=BxKRtG7u9boXbavG0kD-_-pFVk19LPzNFPZyfw64Lfo,967
|
636
|
-
vellum/client/types/scenario_input_audio_variable_value.py,sha256=
|
638
|
+
vellum/client/types/scenario_input_audio_variable_value.py,sha256=YsJ9vgdZtZ2KJkB-zK6xSQpg4LzRahQMdnIQVnqLTUw,680
|
637
639
|
vellum/client/types/scenario_input_chat_history_variable_value.py,sha256=FzXccgtyH9iTyGJJ6XcOM0TmzCMaPKWr1FmGtFCvxsQ,799
|
638
|
-
vellum/client/types/scenario_input_document_variable_value.py,sha256=
|
639
|
-
vellum/client/types/scenario_input_image_variable_value.py,sha256=
|
640
|
+
vellum/client/types/scenario_input_document_variable_value.py,sha256=xg-OOAbs7uegG9_O5fV3WhcUsM8hGXFeVL88-FJovec,698
|
641
|
+
vellum/client/types/scenario_input_image_variable_value.py,sha256=o3rwhVnXp3XCOKYSgLRzUXDo7k9WVIvqRCgL1hjyO18,680
|
640
642
|
vellum/client/types/scenario_input_json_variable_value.py,sha256=07_Fj9UOzMGvz1H0j1awmMz0Q6ErliwjgKVU_iUyZb8,716
|
641
643
|
vellum/client/types/scenario_input_string_variable_value.py,sha256=PI_pk-WOXVRBSW6PZKDZW11svxd2r9E6bCpl0zC0MTM,717
|
642
|
-
vellum/client/types/scenario_input_video_variable_value.py,sha256=
|
644
|
+
vellum/client/types/scenario_input_video_variable_value.py,sha256=6AxOsLtHNZv-1UyBue6fMs5_vLFCXidx7e_9kP0hHrs,680
|
643
645
|
vellum/client/types/search_filters_request.py,sha256=Moxewgl8KwjIy-VBistrchXQAqfsn5fkqO5R2UzLlI8,1276
|
644
646
|
vellum/client/types/search_node_result.py,sha256=2DbnKCus81-fj56IoGZqIL6Tw6hjf5jH0O2P_AXah8o,713
|
645
647
|
vellum/client/types/search_node_result_data.py,sha256=rXs0R0OG2pjTcE6bMp5lN6_cUusFiVUDwkC3pVo5l6o,810
|
@@ -1720,21 +1722,21 @@ vellum/workflows/edges/__init__.py,sha256=wSkmAnz9xyi4vZwtDbKxwlplt2skD7n3NsxkvR
|
|
1720
1722
|
vellum/workflows/edges/edge.py,sha256=N0SnY3gKVuxImPAdCbPMPlHJIXbkQ3fwq_LbJRvVMFc,677
|
1721
1723
|
vellum/workflows/emitters/__init__.py,sha256=d9QFOI3eVg6rzpSFLvrjkDYXWikf1tcp3ruTRa2Boyc,143
|
1722
1724
|
vellum/workflows/emitters/base.py,sha256=Tcp13VMB-GMwEJdl-6XTPckspdOdwpMgBx22-PcQxds,892
|
1723
|
-
vellum/workflows/emitters/vellum_emitter.py,sha256=
|
1725
|
+
vellum/workflows/emitters/vellum_emitter.py,sha256=ECBIRA48WS5rIJd1iWUfye7B5Up7ujL98BTlZwWALKs,4430
|
1724
1726
|
vellum/workflows/environment/__init__.py,sha256=TJz0m9dwIs6YOwCTeuN0HHsU-ecyjc1OJXx4AFy83EQ,121
|
1725
1727
|
vellum/workflows/environment/environment.py,sha256=Ck3RPKXJvtMGx_toqYQQQF-ZwXm5ijVwJpEPTeIJ4_Q,471
|
1726
1728
|
vellum/workflows/errors/__init__.py,sha256=tWGPu5xyAU8gRb8_bl0fL7OfU3wxQ9UH6qVwy4X4P_Q,113
|
1727
1729
|
vellum/workflows/errors/types.py,sha256=nUWuniEfrhdtb-_2GzoDGlYnSJ_yuNUGjVkaKLNr-rM,4049
|
1728
1730
|
vellum/workflows/events/__init__.py,sha256=V4mh766fyA70WvHelm9kfVZGrUgEKcJ9tJt8EepfQYU,832
|
1729
1731
|
vellum/workflows/events/context.py,sha256=vCfMIPmz4j9Om36rRWa35A_JU_VccWWS52_mZkkqxak,3345
|
1730
|
-
vellum/workflows/events/node.py,sha256=
|
1732
|
+
vellum/workflows/events/node.py,sha256=yHVd-rX2E3qc2XLnZr0fW6uq4ZCMm34mnY2tzYceyOg,5884
|
1731
1733
|
vellum/workflows/events/relational_threads.py,sha256=zmLrBCBYpdpQV0snKH3HleST-_hWAMy2LIT0xScfzi4,1516
|
1732
1734
|
vellum/workflows/events/stream.py,sha256=xhXJTZirFi0xad5neAQNogrIQ4h47fpnKbVC3vCM5Js,889
|
1733
1735
|
vellum/workflows/events/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1734
1736
|
vellum/workflows/events/tests/test_basic_workflow.py,sha256=Pj6orHsXz37jWC5FARi0Sx2Gjf99Owri2Cvr6Chb79k,1765
|
1735
|
-
vellum/workflows/events/tests/test_event.py,sha256=
|
1737
|
+
vellum/workflows/events/tests/test_event.py,sha256=V26TNmbo2aL4sDvcY3nPxCWgcoS4ejF-7VuesMeD04U,18451
|
1736
1738
|
vellum/workflows/events/types.py,sha256=mVrqAH9Hs9SpXm08Hcxdyap_ImQPwGsxRr56rSNMP34,5043
|
1737
|
-
vellum/workflows/events/workflow.py,sha256=
|
1739
|
+
vellum/workflows/events/workflow.py,sha256=kLSWFXiDZH0TELWoDjQ_kHVomFnw8MVVUPDGIzgyosw,8997
|
1738
1740
|
vellum/workflows/exceptions.py,sha256=NiBiR3ggfmPxBVqD-H1SqmjI-7mIn0EStSN1BqApvCM,1213
|
1739
1741
|
vellum/workflows/expressions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1740
1742
|
vellum/workflows/expressions/accessor.py,sha256=3lu1-_-dBfZdJvtX-q66jbmRAZtqIfdsh_3_JNuzg1E,4462
|
@@ -1814,7 +1816,7 @@ vellum/workflows/nodes/core/map_node/tests/test_node.py,sha256=Xc2xZY5ShSy-bsIQe
|
|
1814
1816
|
vellum/workflows/nodes/core/retry_node/__init__.py,sha256=lN2bIy5a3Uzhs_FYCrooADyYU6ZGShtvLKFWpelwPvo,60
|
1815
1817
|
vellum/workflows/nodes/core/retry_node/node.py,sha256=EM4ya8Myr7ADllpjt9q-BAhB3hGrsF8MLZhp5eh4lyo,5590
|
1816
1818
|
vellum/workflows/nodes/core/retry_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1817
|
-
vellum/workflows/nodes/core/retry_node/tests/test_node.py,sha256=
|
1819
|
+
vellum/workflows/nodes/core/retry_node/tests/test_node.py,sha256=XyMtL_ZI6zcqCe0mG4DYjeuZGqX9zm35lnpLUZxsNUk,4368
|
1818
1820
|
vellum/workflows/nodes/core/templating_node/__init__.py,sha256=GmyuYo81_A1_Bz6id69ozVFS6FKiuDsZTiA3I6MaL2U,70
|
1819
1821
|
vellum/workflows/nodes/core/templating_node/node.py,sha256=mn0JEbORWaM-mR7fgUZy-BItZCup8CaxZQaY_g3TSEE,3855
|
1820
1822
|
vellum/workflows/nodes/core/templating_node/tests/test_templating_node.py,sha256=gfLi8lJpTU5jGO1Kt6UuzVz1fQN8dcNhHBZG90enP-s,15013
|
@@ -1895,7 +1897,7 @@ vellum/workflows/nodes/displayable/tool_calling_node/tests/__init__.py,sha256=47
|
|
1895
1897
|
vellum/workflows/nodes/displayable/tool_calling_node/tests/test_composio_service.py,sha256=in1fbEz5x1tx3uKv9YXdvOncsHucNL8Ro6Go7lBuuOQ,8962
|
1896
1898
|
vellum/workflows/nodes/displayable/tool_calling_node/tests/test_node.py,sha256=GZoeybB9uM7ai8sBLAtUMHrMVgh-WrJDWrKZci6feDs,11892
|
1897
1899
|
vellum/workflows/nodes/displayable/tool_calling_node/tests/test_utils.py,sha256=SIu5GCj4tIE4fz-cAcdULtQfqZIhrcc3Doo6TWLXBws,8804
|
1898
|
-
vellum/workflows/nodes/displayable/tool_calling_node/utils.py,sha256=
|
1900
|
+
vellum/workflows/nodes/displayable/tool_calling_node/utils.py,sha256=Y2MlODE0lRQ4Fci-G3eYZBpI7CQYe5cIykTLcF4jrbE,23602
|
1899
1901
|
vellum/workflows/nodes/displayable/web_search_node/__init__.py,sha256=8FOnEP-n-U68cvxTlJW9wphIAGHq5aqjzLM-DoSSXnU,61
|
1900
1902
|
vellum/workflows/nodes/displayable/web_search_node/node.py,sha256=NQYux2bOtuBF5E4tn-fXi5y3btURPRrNqMSM9MAZYI4,5091
|
1901
1903
|
vellum/workflows/nodes/displayable/web_search_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -1930,25 +1932,25 @@ vellum/workflows/references/vellum_secret.py,sha256=Od4d19a5yletWMqNfJR5d_mZQUkV
|
|
1930
1932
|
vellum/workflows/references/workflow_input.py,sha256=W3rOK1EPd2gYHb04WJwmNm1CUSdvZ9LKrs8RMKxACBs,1751
|
1931
1933
|
vellum/workflows/resolvers/__init__.py,sha256=eH6hTvZO4IciDaf_cf7aM2vs-DkBDyJPycOQevJxQnI,82
|
1932
1934
|
vellum/workflows/resolvers/base.py,sha256=wrQiSC02Bw4-dBwgFjJIHsjpe-4xz4rUJs_1RdErKA0,1164
|
1933
|
-
vellum/workflows/resolvers/resolver.py,sha256=
|
1934
|
-
vellum/workflows/resolvers/tests/test_resolver.py,sha256=
|
1935
|
+
vellum/workflows/resolvers/resolver.py,sha256=yK-oY0HDsFJcjlNKAm3vpsPKRIFerIh59FcTwuEN5RY,4839
|
1936
|
+
vellum/workflows/resolvers/tests/test_resolver.py,sha256=jXkJBb9SwtoH__bBN-ECohpyD0aTIB9ErEvtFhuTMQM,9750
|
1935
1937
|
vellum/workflows/resolvers/types.py,sha256=Hndhlk69g6EKLh_LYg5ILepW5U_h_BYNllfzhS9k8p4,237
|
1936
1938
|
vellum/workflows/runner/__init__.py,sha256=i1iG5sAhtpdsrlvwgH6B-m49JsINkiWyPWs8vyT-bqM,72
|
1937
|
-
vellum/workflows/runner/runner.py,sha256=
|
1939
|
+
vellum/workflows/runner/runner.py,sha256=UJPCSddeczBcGu06j63KGM2IbbQ5xISTOwP-tFDptaI,40341
|
1938
1940
|
vellum/workflows/sandbox.py,sha256=jwlFFQjHDwmbVoBah_Q3i8K_BrzOt-F6TXFauiyVyIk,3021
|
1939
1941
|
vellum/workflows/state/__init__.py,sha256=yUUdR-_Vl7UiixNDYQZ-GEM_kJI9dnOia75TtuNEsnE,60
|
1940
1942
|
vellum/workflows/state/base.py,sha256=m9fCqbZn21GshCVCjJTD1dPZEQjFrsMXqlg7tM9fIwM,24283
|
1941
1943
|
vellum/workflows/state/context.py,sha256=khM30U1iDNts5Xp8LXa_WfpkITNITexrDUUFJ5wZ2W4,8445
|
1942
1944
|
vellum/workflows/state/delta.py,sha256=7h8wR10lRCm15SykaPj-gSEvvsMjCwYLPsOx3nsvBQg,440
|
1943
|
-
vellum/workflows/state/encoder.py,sha256=
|
1945
|
+
vellum/workflows/state/encoder.py,sha256=EynuS9aCt9Neb-H6HRCinEVZX5olCzME03W1TSXfpxs,1961
|
1944
1946
|
vellum/workflows/state/store.py,sha256=uVe-oN73KwGV6M6YLhwZMMUQhzTQomsVfVnb8V91gVo,1147
|
1945
1947
|
vellum/workflows/state/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1946
|
-
vellum/workflows/state/tests/test_state.py,sha256=
|
1948
|
+
vellum/workflows/state/tests/test_state.py,sha256=zEVFIY2any41X2BA5Us_qqKpzH5HRqmyrUJ04GTO0pU,7484
|
1947
1949
|
vellum/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1948
1950
|
vellum/workflows/tests/test_sandbox.py,sha256=JKwaluI-lODQo7Ek9sjDstjL_WTdSqUlVik6ZVTfVOA,1826
|
1949
1951
|
vellum/workflows/tests/test_undefined.py,sha256=zMCVliCXVNLrlC6hEGyOWDnQADJ2g83yc5FIM33zuo8,353
|
1950
1952
|
vellum/workflows/types/__init__.py,sha256=KxUTMBGzuRCfiMqzzsykOeVvrrkaZmTTo1a7SLu8gRM,68
|
1951
|
-
vellum/workflows/types/code_execution_node_wrappers.py,sha256=
|
1953
|
+
vellum/workflows/types/code_execution_node_wrappers.py,sha256=fewX9bqF_4TZuK-gZYIn12s31-k03vHMGRpvFAPm11Y,3206
|
1952
1954
|
vellum/workflows/types/core.py,sha256=TggDVs2lVya33xvu374EDhMC1b7RRlAAs0zWLaF46BA,1385
|
1953
1955
|
vellum/workflows/types/definition.py,sha256=2vq3uGT-m994zRcla0yTUsMiPLKSDuzEZs7H6U9QbiE,4993
|
1954
1956
|
vellum/workflows/types/generics.py,sha256=8jptbEx1fnJV0Lhj0MpCJOT6yNiEWeTOYOwrEAb5CRU,1576
|
@@ -1958,7 +1960,7 @@ vellum/workflows/types/tests/test_definition.py,sha256=rvDYjdJ1rvAv0qHBN7i7s-_WA
|
|
1958
1960
|
vellum/workflows/types/tests/test_utils.py,sha256=UnZog59tR577mVwqZRqqWn2fScoOU1H6up0EzS8zYhw,2536
|
1959
1961
|
vellum/workflows/types/utils.py,sha256=mTctHITBybpt4855x32oCKALBEcMNLn-9cCmfEKgJHQ,6498
|
1960
1962
|
vellum/workflows/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1961
|
-
vellum/workflows/utils/functions.py,sha256=
|
1963
|
+
vellum/workflows/utils/functions.py,sha256=6WRRMb_XbxtvhUKOJq5ZChy0KKvlBaQCBiPhvecXT7I,10029
|
1962
1964
|
vellum/workflows/utils/hmac.py,sha256=JJCczc6pyV6DuE1Oa0QVfYPUN_of3zEYmGFib3OZnrE,1135
|
1963
1965
|
vellum/workflows/utils/names.py,sha256=QLUqfJ1tmSEeUwBKTTiv_Qk3QGbInC2RSmlXfGXc8Wo,380
|
1964
1966
|
vellum/workflows/utils/pydantic_schema.py,sha256=eR_bBtY-T0pttJP-ARwagSdCOnwPUtiT3cegm2lzDTQ,1310
|
@@ -1968,7 +1970,7 @@ vellum/workflows/utils/tests/test_names.py,sha256=aOqpyvMsOEK_9mg_-yaNxQDW7QQfwq
|
|
1968
1970
|
vellum/workflows/utils/tests/test_uuids.py,sha256=i77ABQ0M3S-aFLzDXHJq_yr5FPkJEWCMBn1HJ3DObrE,437
|
1969
1971
|
vellum/workflows/utils/tests/test_vellum_variables.py,sha256=vbnKgm41aB5OXlO-ZIPbhQ6xDiZkT8KMxCLqz4zocWY,1791
|
1970
1972
|
vellum/workflows/utils/uuids.py,sha256=IaZQANz7fhF7la0_J1O50Y6D2PIYv_taRDTRzBT9aWw,1284
|
1971
|
-
vellum/workflows/utils/vellum_variables.py,sha256
|
1973
|
+
vellum/workflows/utils/vellum_variables.py,sha256=YHLNiQGWDNssGH1FQoG9Z1jUFZ-zYebWqTLBG4cS-Fg,5837
|
1972
1974
|
vellum/workflows/utils/zip.py,sha256=HVg_YZLmBOTXKaDV3Xhaf3V6sYnfqqZXQ8CpuafkbPY,1181
|
1973
1975
|
vellum/workflows/vellum_client.py,sha256=xkfoucodxNK5JR2-lbRqZx3xzDgExWkP6kySrpi_Ubc,1079
|
1974
1976
|
vellum/workflows/workflows/__init__.py,sha256=KY45TqvavCCvXIkyCFMEc0dc6jTMOUci93U2DUrlZYc,66
|
@@ -1977,8 +1979,8 @@ vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnad
|
|
1977
1979
|
vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1978
1980
|
vellum/workflows/workflows/tests/test_base_workflow.py,sha256=ptMntHzVyy8ZuzNgeTuk7hREgKQ5UBdgq8VJFSGaW4Y,20832
|
1979
1981
|
vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
|
1980
|
-
vellum_ai-1.3.
|
1981
|
-
vellum_ai-1.3.
|
1982
|
-
vellum_ai-1.3.
|
1983
|
-
vellum_ai-1.3.
|
1984
|
-
vellum_ai-1.3.
|
1982
|
+
vellum_ai-1.3.4.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
|
1983
|
+
vellum_ai-1.3.4.dist-info/METADATA,sha256=b4vvPio8YVqk9c6RUtdneolPn9VxgV12Es1eAIxG0qM,5547
|
1984
|
+
vellum_ai-1.3.4.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
1985
|
+
vellum_ai-1.3.4.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
|
1986
|
+
vellum_ai-1.3.4.dist-info/RECORD,,
|
vellum_cli/__init__.py
CHANGED
@@ -5,6 +5,7 @@ import click
|
|
5
5
|
from vellum_cli.aliased_group import ClickAliasedGroup
|
6
6
|
from vellum_cli.image_push import image_push_command
|
7
7
|
from vellum_cli.init import init_command
|
8
|
+
from vellum_cli.move import move_command
|
8
9
|
from vellum_cli.ping import ping_command
|
9
10
|
from vellum_cli.pull import pull_command
|
10
11
|
from vellum_cli.push import push_command
|
@@ -376,6 +377,26 @@ def image_push(
|
|
376
377
|
image_push_command(image, tag, workspace, source)
|
377
378
|
|
378
379
|
|
380
|
+
@workflows.command(name="move")
|
381
|
+
@click.argument("old_module", required=True)
|
382
|
+
@click.argument("new_module", required=True)
|
383
|
+
@click.option("--workspace", type=str, help="The specific Workspace config to use when moving")
|
384
|
+
def workflows_move(
|
385
|
+
old_module: str,
|
386
|
+
new_module: str,
|
387
|
+
workspace: Optional[str],
|
388
|
+
) -> None:
|
389
|
+
"""
|
390
|
+
Move/rename a Workflow module. Updates both the filesystem structure and configuration.
|
391
|
+
"""
|
392
|
+
|
393
|
+
move_command(
|
394
|
+
old_module=old_module,
|
395
|
+
new_module=new_module,
|
396
|
+
workspace=workspace,
|
397
|
+
)
|
398
|
+
|
399
|
+
|
379
400
|
@workflows.command(name="init")
|
380
401
|
@click.argument("template_name", required=False)
|
381
402
|
@click.option(
|
vellum_cli/move.py
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
import os
|
2
|
+
import shutil
|
3
|
+
from typing import Optional
|
4
|
+
|
5
|
+
from dotenv import load_dotenv
|
6
|
+
|
7
|
+
from vellum_cli.config import DEFAULT_WORKSPACE_CONFIG, load_vellum_cli_config
|
8
|
+
from vellum_cli.logger import load_cli_logger
|
9
|
+
from vellum_cli.push import module_exists
|
10
|
+
|
11
|
+
|
12
|
+
def move_command(
|
13
|
+
old_module: str,
|
14
|
+
new_module: str,
|
15
|
+
workspace: Optional[str] = None,
|
16
|
+
) -> None:
|
17
|
+
load_dotenv(dotenv_path=os.path.join(os.getcwd(), ".env"))
|
18
|
+
logger = load_cli_logger()
|
19
|
+
config = load_vellum_cli_config()
|
20
|
+
|
21
|
+
if not module_exists(old_module):
|
22
|
+
raise ValueError(f"Module '{old_module}' does not exist in the filesystem.")
|
23
|
+
|
24
|
+
if module_exists(new_module):
|
25
|
+
raise ValueError(f"Module '{new_module}' already exists. Cannot move to existing module.")
|
26
|
+
|
27
|
+
matching_configs = [w for w in config.workflows if w.module == old_module]
|
28
|
+
|
29
|
+
if workspace:
|
30
|
+
matching_configs = [w for w in matching_configs if w.workspace == workspace]
|
31
|
+
else:
|
32
|
+
matching_configs = [w for w in matching_configs if w.workspace == DEFAULT_WORKSPACE_CONFIG.name]
|
33
|
+
|
34
|
+
if not matching_configs:
|
35
|
+
workspace_msg = (
|
36
|
+
f" in workspace '{workspace}'" if workspace else f" in workspace '{DEFAULT_WORKSPACE_CONFIG.name}'"
|
37
|
+
)
|
38
|
+
raise ValueError(f"No workflow configuration found for module '{old_module}'{workspace_msg}.")
|
39
|
+
|
40
|
+
logger.info(f"Moving module from '{old_module}' to '{new_module}'...")
|
41
|
+
|
42
|
+
old_path = os.path.join(os.getcwd(), *old_module.split("."))
|
43
|
+
new_path = os.path.join(os.getcwd(), *new_module.split("."))
|
44
|
+
|
45
|
+
os.makedirs(os.path.dirname(new_path), exist_ok=True)
|
46
|
+
|
47
|
+
shutil.move(old_path, new_path)
|
48
|
+
logger.info(f"Moved filesystem directory from '{old_path}' to '{new_path}'")
|
49
|
+
|
50
|
+
for workflow_config in matching_configs:
|
51
|
+
workflow_config.module = new_module
|
52
|
+
logger.info(f"Updated workflow configuration: {workflow_config.workflow_sandbox_id}")
|
53
|
+
|
54
|
+
config.save()
|
55
|
+
logger.info("Updated vellum.lock.json file.")
|
56
|
+
logger.info(f"Successfully moved module from '{old_module}' to '{new_module}'")
|
@@ -0,0 +1,154 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from click.testing import CliRunner
|
4
|
+
|
5
|
+
from vellum_cli import main
|
6
|
+
from vellum_cli.config import load_vellum_cli_config
|
7
|
+
|
8
|
+
|
9
|
+
def test_move__happy_path(mock_module):
|
10
|
+
"""
|
11
|
+
Test that the move command successfully moves a module and updates configuration.
|
12
|
+
"""
|
13
|
+
|
14
|
+
temp_dir = mock_module.temp_dir
|
15
|
+
old_module = mock_module.module
|
16
|
+
new_module = "examples.new.workflow"
|
17
|
+
|
18
|
+
old_module_dir = os.path.join(temp_dir, *old_module.split("."))
|
19
|
+
os.makedirs(old_module_dir, exist_ok=True)
|
20
|
+
with open(os.path.join(old_module_dir, "workflow.py"), "w") as f:
|
21
|
+
f.write("# test workflow")
|
22
|
+
|
23
|
+
runner = CliRunner()
|
24
|
+
result = runner.invoke(main, ["workflows", "move", old_module, new_module])
|
25
|
+
|
26
|
+
assert result.exit_code == 0
|
27
|
+
|
28
|
+
assert not os.path.exists(old_module_dir)
|
29
|
+
|
30
|
+
new_module_dir = os.path.join(temp_dir, *new_module.split("."))
|
31
|
+
assert os.path.exists(new_module_dir)
|
32
|
+
assert os.path.exists(os.path.join(new_module_dir, "workflow.py"))
|
33
|
+
|
34
|
+
config = load_vellum_cli_config()
|
35
|
+
workflow_config = next((w for w in config.workflows if w.module == new_module), None)
|
36
|
+
assert workflow_config is not None
|
37
|
+
assert workflow_config.workflow_sandbox_id == mock_module.workflow_sandbox_id
|
38
|
+
|
39
|
+
|
40
|
+
def test_move__old_module_not_exists(mock_module):
|
41
|
+
"""
|
42
|
+
Test that the move command fails when the old module doesn't exist.
|
43
|
+
"""
|
44
|
+
|
45
|
+
old_module = "nonexistent.module"
|
46
|
+
new_module = "examples.new.workflow"
|
47
|
+
|
48
|
+
runner = CliRunner()
|
49
|
+
result = runner.invoke(main, ["workflows", "move", old_module, new_module])
|
50
|
+
|
51
|
+
assert result.exit_code != 0
|
52
|
+
assert "does not exist in the filesystem" in str(result.exception)
|
53
|
+
|
54
|
+
|
55
|
+
def test_move__new_module_already_exists(mock_module):
|
56
|
+
"""
|
57
|
+
Test that the move command fails when the new module already exists.
|
58
|
+
"""
|
59
|
+
|
60
|
+
temp_dir = mock_module.temp_dir
|
61
|
+
old_module = mock_module.module
|
62
|
+
new_module = "examples.existing.workflow"
|
63
|
+
|
64
|
+
old_module_dir = os.path.join(temp_dir, *old_module.split("."))
|
65
|
+
new_module_dir = os.path.join(temp_dir, *new_module.split("."))
|
66
|
+
os.makedirs(old_module_dir, exist_ok=True)
|
67
|
+
os.makedirs(new_module_dir, exist_ok=True)
|
68
|
+
|
69
|
+
runner = CliRunner()
|
70
|
+
result = runner.invoke(main, ["workflows", "move", old_module, new_module])
|
71
|
+
|
72
|
+
assert result.exit_code != 0
|
73
|
+
assert "already exists" in str(result.exception)
|
74
|
+
|
75
|
+
|
76
|
+
def test_move__no_workflow_config_found(mock_module):
|
77
|
+
"""
|
78
|
+
Test that the move command fails when no workflow config is found.
|
79
|
+
"""
|
80
|
+
|
81
|
+
temp_dir = mock_module.temp_dir
|
82
|
+
old_module = "examples.unconfigured.workflow"
|
83
|
+
new_module = "examples.new.workflow"
|
84
|
+
|
85
|
+
old_module_dir = os.path.join(temp_dir, *old_module.split("."))
|
86
|
+
os.makedirs(old_module_dir, exist_ok=True)
|
87
|
+
|
88
|
+
runner = CliRunner()
|
89
|
+
result = runner.invoke(main, ["workflows", "move", old_module, new_module])
|
90
|
+
|
91
|
+
assert result.exit_code != 0
|
92
|
+
assert "No workflow configuration found" in str(result.exception)
|
93
|
+
|
94
|
+
|
95
|
+
def test_move__with_workspace_filter(mock_module):
|
96
|
+
"""
|
97
|
+
Test that the move command works with workspace filtering.
|
98
|
+
"""
|
99
|
+
|
100
|
+
temp_dir = mock_module.temp_dir
|
101
|
+
old_module = mock_module.module
|
102
|
+
new_module = "examples.new.workflow"
|
103
|
+
workspace = "default"
|
104
|
+
|
105
|
+
old_module_dir = os.path.join(temp_dir, *old_module.split("."))
|
106
|
+
os.makedirs(old_module_dir, exist_ok=True)
|
107
|
+
with open(os.path.join(old_module_dir, "workflow.py"), "w") as f:
|
108
|
+
f.write("# test workflow")
|
109
|
+
|
110
|
+
runner = CliRunner()
|
111
|
+
result = runner.invoke(main, ["workflows", "move", old_module, new_module, "--workspace", workspace])
|
112
|
+
|
113
|
+
assert result.exit_code == 0
|
114
|
+
|
115
|
+
config = load_vellum_cli_config()
|
116
|
+
workflow_config = next((w for w in config.workflows if w.module == new_module), None)
|
117
|
+
assert workflow_config is not None
|
118
|
+
assert workflow_config.workspace == workspace
|
119
|
+
|
120
|
+
|
121
|
+
def test_move__preserves_workflow_metadata(mock_module):
|
122
|
+
"""
|
123
|
+
Test that the move command preserves all workflow metadata except the module name.
|
124
|
+
"""
|
125
|
+
|
126
|
+
temp_dir = mock_module.temp_dir
|
127
|
+
old_module = mock_module.module
|
128
|
+
new_module = "examples.new.workflow"
|
129
|
+
|
130
|
+
config = load_vellum_cli_config()
|
131
|
+
original_config = next((w for w in config.workflows if w.module == old_module), None)
|
132
|
+
assert original_config is not None
|
133
|
+
original_config.container_image_name = "test-image"
|
134
|
+
original_config.container_image_tag = "v1.0"
|
135
|
+
original_config.ignore = "sandbox.py"
|
136
|
+
config.save()
|
137
|
+
|
138
|
+
old_module_dir = os.path.join(temp_dir, *old_module.split("."))
|
139
|
+
os.makedirs(old_module_dir, exist_ok=True)
|
140
|
+
with open(os.path.join(old_module_dir, "workflow.py"), "w") as f:
|
141
|
+
f.write("# test workflow")
|
142
|
+
|
143
|
+
runner = CliRunner()
|
144
|
+
result = runner.invoke(main, ["workflows", "move", old_module, new_module])
|
145
|
+
|
146
|
+
assert result.exit_code == 0
|
147
|
+
|
148
|
+
config = load_vellum_cli_config()
|
149
|
+
workflow_config = next((w for w in config.workflows if w.module == new_module), None)
|
150
|
+
assert workflow_config is not None
|
151
|
+
assert workflow_config.workflow_sandbox_id == mock_module.workflow_sandbox_id
|
152
|
+
assert workflow_config.container_image_name == "test-image"
|
153
|
+
assert workflow_config.container_image_tag == "v1.0"
|
154
|
+
assert workflow_config.ignore == "sandbox.py"
|
@@ -17,6 +17,7 @@ class NodeDisplayComment(UniversalBaseModel):
|
|
17
17
|
|
18
18
|
class NodeDisplayData(UniversalBaseModel):
|
19
19
|
position: NodeDisplayPosition = Field(default_factory=NodeDisplayPosition)
|
20
|
+
z_index: Optional[int] = None
|
20
21
|
width: Optional[int] = None
|
21
22
|
height: Optional[int] = None
|
22
23
|
comment: Optional[NodeDisplayComment] = None
|
@@ -431,6 +431,7 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
|
|
431
431
|
)
|
432
432
|
return NodeDisplayData(
|
433
433
|
position=explicit_value.position,
|
434
|
+
z_index=explicit_value.z_index,
|
434
435
|
width=explicit_value.width,
|
435
436
|
height=explicit_value.height,
|
436
437
|
comment=comment,
|