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.
Files changed (39) hide show
  1. vellum/client/core/client_wrapper.py +2 -2
  2. vellum/client/types/function_definition.py +5 -0
  3. vellum/client/types/scenario_input_audio_variable_value.py +1 -1
  4. vellum/client/types/scenario_input_document_variable_value.py +1 -1
  5. vellum/client/types/scenario_input_image_variable_value.py +1 -1
  6. vellum/client/types/scenario_input_video_variable_value.py +1 -1
  7. vellum/workflows/emitters/vellum_emitter.py +55 -9
  8. vellum/workflows/events/node.py +1 -1
  9. vellum/workflows/events/tests/test_event.py +1 -1
  10. vellum/workflows/events/workflow.py +1 -1
  11. vellum/workflows/nodes/core/retry_node/tests/test_node.py +1 -2
  12. vellum/workflows/nodes/displayable/tool_calling_node/utils.py +21 -15
  13. vellum/workflows/resolvers/resolver.py +18 -2
  14. vellum/workflows/resolvers/tests/test_resolver.py +121 -0
  15. vellum/workflows/runner/runner.py +17 -17
  16. vellum/workflows/state/encoder.py +0 -37
  17. vellum/workflows/state/tests/test_state.py +14 -0
  18. vellum/workflows/types/code_execution_node_wrappers.py +3 -0
  19. vellum/workflows/utils/functions.py +35 -0
  20. vellum/workflows/utils/vellum_variables.py +11 -2
  21. {vellum_ai-1.3.2.dist-info → vellum_ai-1.3.4.dist-info}/METADATA +1 -1
  22. {vellum_ai-1.3.2.dist-info → vellum_ai-1.3.4.dist-info}/RECORD +39 -37
  23. vellum_cli/__init__.py +21 -0
  24. vellum_cli/move.py +56 -0
  25. vellum_cli/tests/test_move.py +154 -0
  26. vellum_ee/workflows/display/base.py +1 -0
  27. vellum_ee/workflows/display/editor/types.py +1 -0
  28. vellum_ee/workflows/display/nodes/base_node_display.py +1 -0
  29. vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +18 -2
  30. vellum_ee/workflows/display/tests/test_base_workflow_display.py +52 -2
  31. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py +17 -5
  32. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py +1 -0
  33. vellum_ee/workflows/display/utils/events.py +1 -0
  34. vellum_ee/workflows/display/utils/expressions.py +44 -0
  35. vellum_ee/workflows/display/utils/tests/test_events.py +11 -1
  36. vellum_ee/workflows/display/workflows/base_workflow_display.py +32 -22
  37. {vellum_ai-1.3.2.dist-info → vellum_ai-1.3.4.dist-info}/LICENSE +0 -0
  38. {vellum_ai-1.3.2.dist-info → vellum_ai-1.3.4.dist-info}/WHEEL +0 -0
  39. {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 = [t for t in type_.types if t is not type(None)]
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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vellum-ai
3
- Version: 1.3.2
3
+ Version: 1.3.4
4
4
  Summary:
5
5
  License: MIT
6
6
  Requires-Python: >=3.9,<4.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=rHcUFsfu-nivhX02R-6dmYr9ee6LMA-wy2DrFnOhC4Q,13030
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=po1YIXOupglAFi1-_zsgNH-VwIjHfy5GCvii6Wzntu0,1878
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=x-tOOCJ6CF4HmiKDfCmcc3bOVfc1EBlP5o6u5WEfLoY,567
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=bxDJxtNqcyy1LwFltggm63W1ZHZPuwK1NyA6KPLHRQQ,18345
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=w8tO4EZj4Swy5e_2lIYTeoWzghj8ikMLnjML5OqevLg,4570
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=l0ljTRBpoTJ5oKL-fNcU5qeruLw2pUvQLOJodg0yYLg,12436
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=zOv-CzFZs_9NqlINQ7hzJmd4o8ArDBKB7Eyr1Rfd-BU,25767
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=-7NvpYUZEl2T15AS9MPt_scyhKmUmS3wEPa320sgWOI,10085
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=KC684ZWODHRGgJtik_KjGXIjM5x4_58_1dGuco_9O8c,1748
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=yPrUIEQKL5fDwUC9NpVO9yjL6emTOdFJw8VjoZgZ0E0,16942
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=BHRq2Or_z1ri7EVWFdVbhDxSWRsCVI87VeqqJN8YnIQ,3995
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=_s7mYr56vdavU-CR1FtOQKQlcSpepVgJia84w2OEOUk,43042
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=U9SkO9ewIIRiSsS9pT50GwmBH-rMjpV3QS5Htj-ipqs,2840
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=cdDwCBQcW5iXgHF7ZBRsLYEitx7oyDLNEwV2CVSWDZA,1657
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=n5dF5IxRPsE-x4MiH-2hiiOlZSBFD8WbY8cTzOmKyHs,656
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=yMQtXkCuaQ-A30YJFQzgiFZx5LKk-MBi4zniO_xqxDs,674
639
- vellum/client/types/scenario_input_image_variable_value.py,sha256=0Hjj9e0qTAw8DO5Yob4oR9JN_d3SVTImyjpCOX3pRSc,656
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=IoTqaDZFEgdKUI9ACg-UAUdVFGsl6x76ky_c9GbJQB8,656
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=hhMX8uXZFH2ZYHJP77uA6U4ECisacwdTBKI7papU79Y,2899
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=2R5Yk86v6DNNfgPiCCQjrQ9JYKc71xKNokW2f2EFUUU,5883
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=6R3RuN_lMJ9ooHQ9-HE1p0j2xL0FtGiRxkQ7PucFbD0,18450
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=XW9tpAmDb9BPj2RLYpdbN-SJz_UhwqKBTaMJkZM2ahM,8996
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=PCvD_XROP26k4cVYOdSQUfkDdbTljAJxtOTFzOUoS8c,4450
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=ACEfl2pY65sO0DaMYxuecx2Kxg32HpSh7XXpp8U1J84,23459
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=0Y9ArmN_2Gu62TpgYjFvSzhFMMFy7oGWOJh9zg3jaFk,4085
1934
- vellum/workflows/resolvers/tests/test_resolver.py,sha256=JX6-zjIQShNvt4XYmub6zmY0iUf6z90KZynqvEd33qA,5202
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=kuW28ozlBi2thQRhgrKigxXtAcOYoGp0M6lYucYsrMw,40321
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=HdNlabmBOcFSeY_dgn4LNtQEugyzsw3p4mvn2ChC1Io,3380
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=SjQZgovETrosPUeFohaPB9egAkSVe8ptJO5O4Fk2E04,6920
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=m6C4cNEfPZFuqsS9qaJHOKq7UviOBDIYdAJalMWmabQ,3089
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=_mJ7vGxHLIByPbfMpDVKsWVEUGlCof1Bc2aZefF56Ns,8967
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=-CohqD3AeyCYzqwyrPZ7mt_lt7ibWLyx0MuS484feJk,5503
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.2.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1981
- vellum_ai-1.3.2.dist-info/METADATA,sha256=tnrvX2iEEP0vTsPk5wc2h5nOtdqyExs5bW8fBNV1-7U,5547
1982
- vellum_ai-1.3.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1983
- vellum_ai-1.3.2.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1984
- vellum_ai-1.3.2.dist-info/RECORD,,
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"
@@ -56,6 +56,7 @@ class StateValueDisplay:
56
56
  @dataclass
57
57
  class EdgeDisplay:
58
58
  id: UUID
59
+ z_index: Optional[int] = None
59
60
 
60
61
 
61
62
  @dataclass
@@ -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,