vellum-ai 0.14.65__py3-none-any.whl → 0.14.67__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 (33) hide show
  1. vellum/client/README.md +1 -1
  2. vellum/client/core/client_wrapper.py +1 -1
  3. vellum/client/reference.md +2767 -0
  4. vellum/client/types/document_read.py +0 -1
  5. vellum/client/types/folder_entity_prompt_sandbox_data.py +1 -0
  6. vellum/client/types/folder_entity_workflow_sandbox_data.py +1 -0
  7. vellum/workflows/expressions/accessor.py +22 -5
  8. vellum/workflows/expressions/tests/test_accessor.py +189 -0
  9. vellum/workflows/nodes/bases/base.py +30 -39
  10. vellum/workflows/nodes/bases/tests/test_base_node.py +48 -2
  11. vellum/workflows/nodes/displayable/api_node/node.py +3 -1
  12. vellum/workflows/nodes/displayable/api_node/tests/test_api_node.py +32 -0
  13. vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py +28 -0
  14. vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/test_inline_prompt_node.py +26 -23
  15. vellum/workflows/nodes/displayable/conditional_node/node.py +1 -2
  16. vellum/workflows/nodes/displayable/final_output_node/node.py +2 -0
  17. vellum/workflows/nodes/displayable/inline_prompt_node/node.py +4 -14
  18. vellum/workflows/nodes/displayable/search_node/node.py +8 -0
  19. vellum/workflows/nodes/displayable/search_node/tests/test_node.py +19 -0
  20. vellum/workflows/nodes/experimental/tool_calling_node/utils.py +4 -13
  21. vellum/workflows/runner/runner.py +13 -17
  22. vellum/workflows/state/base.py +0 -4
  23. {vellum_ai-0.14.65.dist-info → vellum_ai-0.14.67.dist-info}/METADATA +2 -2
  24. {vellum_ai-0.14.65.dist-info → vellum_ai-0.14.67.dist-info}/RECORD +33 -30
  25. vellum_cli/image_push.py +62 -7
  26. vellum_cli/pull.py +38 -9
  27. vellum_cli/tests/test_image_push_error_handling.py +184 -0
  28. vellum_cli/tests/test_pull.py +12 -9
  29. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py +661 -0
  30. vellum_ee/workflows/display/utils/expressions.py +17 -0
  31. {vellum_ai-0.14.65.dist-info → vellum_ai-0.14.67.dist-info}/LICENSE +0 -0
  32. {vellum_ai-0.14.65.dist-info → vellum_ai-0.14.67.dist-info}/WHEEL +0 -0
  33. {vellum_ai-0.14.65.dist-info → vellum_ai-0.14.67.dist-info}/entry_points.txt +0 -0
@@ -1,3 +1,4 @@
1
+ import pytest
1
2
  import json
2
3
 
3
4
  from vellum import SearchResponse, SearchResult, SearchResultDocument
@@ -10,6 +11,8 @@ from vellum.client.types.search_weights_request import SearchWeightsRequest
10
11
  from vellum.client.types.string_vellum_value_request import StringVellumValueRequest
11
12
  from vellum.client.types.vellum_value_logical_condition_group_request import VellumValueLogicalConditionGroupRequest
12
13
  from vellum.client.types.vellum_value_logical_condition_request import VellumValueLogicalConditionRequest
14
+ from vellum.workflows.errors import WorkflowErrorCode
15
+ from vellum.workflows.exceptions import NodeException
13
16
  from vellum.workflows.nodes.displayable.bases.types import (
14
17
  MetadataLogicalCondition,
15
18
  MetadataLogicalConditionGroup,
@@ -215,3 +218,19 @@ def test_run_workflow__chat_history_as_query(vellum_client):
215
218
  assert json.loads(vellum_client.search.call_args.kwargs["query"]) == [
216
219
  {"role": "USER", "text": "Hello, world!", "source": None, "content": None}
217
220
  ]
221
+
222
+
223
+ @pytest.mark.parametrize("invalid_query", [None, ""])
224
+ def test_run_workflow__invalid_query_raises_validation_error(invalid_query):
225
+ """Confirm that missing/None/empty query raises proper user-facing validation error"""
226
+
227
+ class MySearchNode(SearchNode):
228
+ query = invalid_query # type: ignore[assignment]
229
+ document_index = "document_index"
230
+
231
+ with pytest.raises(NodeException) as exc_info:
232
+ MySearchNode().run()
233
+
234
+ assert exc_info.value.code == WorkflowErrorCode.INVALID_INPUTS
235
+ assert "query" in exc_info.value.message.lower()
236
+ assert "required" in exc_info.value.message.lower() or "missing" in exc_info.value.message.lower()
@@ -15,7 +15,6 @@ from vellum.client.types.string_chat_message_content import StringChatMessageCon
15
15
  from vellum.client.types.variable_prompt_block import VariablePromptBlock
16
16
  from vellum.workflows.errors.types import WorkflowErrorCode
17
17
  from vellum.workflows.exceptions import NodeException
18
- from vellum.workflows.inputs.base import BaseInputs
19
18
  from vellum.workflows.nodes.bases import BaseNode
20
19
  from vellum.workflows.nodes.displayable.code_execution_node.node import CodeExecutionNode
21
20
  from vellum.workflows.nodes.displayable.inline_prompt_node.node import InlinePromptNode
@@ -143,24 +142,16 @@ def create_function_node(
143
142
  packages: Optional list of packages to install for code execution (only used for regular functions)
144
143
  runtime: The runtime to use for code execution (default: "PYTHON_3_11_6")
145
144
  """
146
-
147
145
  if is_workflow_class(function):
148
-
146
+ # Create a class-level wrapper that calls the original function
149
147
  def execute_function(self) -> BaseNode.Outputs:
150
148
  outputs = self.state.meta.node_outputs.get(tool_router_node.Outputs.text)
151
- # first parse into json
149
+
152
150
  outputs = json.loads(outputs)
153
151
  arguments = outputs["arguments"]
154
152
 
155
- # Dynamically define an Inputs subclass of BaseInputs
156
- Inputs = type(
157
- "Inputs",
158
- (BaseInputs,),
159
- {"__annotations__": {k: type(v) for k, v in arguments.items()}},
160
- )
161
-
162
- # Create an instance with arguments
163
- inputs_instance = Inputs(**arguments)
153
+ # Call the function based on its type
154
+ inputs_instance = function.get_inputs_class()(**arguments)
164
155
 
165
156
  workflow = function()
166
157
  terminal_event = workflow.run(
@@ -398,9 +398,7 @@ class WorkflowRunner(Generic[StateType]):
398
398
  return
399
399
 
400
400
  for port in ports:
401
- nodes_to_fork = []
402
401
  for edge in port.edges:
403
- nodes_to_fork.append(edge.to_node)
404
402
  if port.fork_state:
405
403
  next_state = deepcopy(state)
406
404
  self._state_forks.add(next_state)
@@ -411,21 +409,6 @@ class WorkflowRunner(Generic[StateType]):
411
409
  self._concurrency_queue.put((next_state, edge.to_node, invoked_by))
412
410
  else:
413
411
  self._run_node_if_ready(next_state, edge.to_node, invoked_by)
414
- if invoked_by:
415
- previous_node = state.meta.node_execution_cache.__node_execution_lookup__.get(invoked_by)
416
- if previous_node:
417
- previous_node_fork_id = state.meta.node_execution_cache.__node_to_fork_id__.get(previous_node)
418
- if previous_node_fork_id:
419
- state.meta.node_execution_cache.__node_to_fork_id__[edge.to_node] = previous_node_fork_id
420
- # Remove previous node fork in __node_to_fork_id__
421
- state.meta.node_execution_cache.__node_to_fork_id__.pop(previous_node, None)
422
-
423
- # If there are multiple edges, we need to create a fork ID
424
- if len(nodes_to_fork) > 1:
425
- fork_id = uuid4()
426
- state.meta.node_execution_cache.__all_fork_ids__.add(fork_id)
427
- for node in nodes_to_fork:
428
- state.meta.node_execution_cache.__node_to_fork_id__[node] = fork_id
429
412
 
430
413
  if self._max_concurrency:
431
414
  num_nodes_to_run = self._max_concurrency - len(self._active_nodes_by_execution_id)
@@ -484,6 +467,19 @@ class WorkflowRunner(Generic[StateType]):
484
467
 
485
468
  if event.name == "node.execution.streaming":
486
469
  for workflow_output_descriptor in self.workflow.Outputs:
470
+ if node.__directly_emit_workflow_output__(event, workflow_output_descriptor):
471
+ active_node.was_outputs_streamed = True
472
+ self._workflow_event_outer_queue.put(
473
+ self._stream_workflow_event(
474
+ BaseOutput(
475
+ name=workflow_output_descriptor.name,
476
+ value=event.output.value,
477
+ delta=event.output.delta,
478
+ )
479
+ )
480
+ )
481
+ return None
482
+
487
483
  node_output_descriptor = workflow_output_descriptor.instance
488
484
  if not isinstance(node_output_descriptor, OutputReference):
489
485
  continue
@@ -105,8 +105,6 @@ class NodeExecutionCache:
105
105
 
106
106
  # Derived fields - no need to serialize
107
107
  __node_execution_lookup__: NodeExecutionLookup # execution_id -> node_class
108
- __node_to_fork_id__: Dict[Type["BaseNode"], UUID] # node_class -> fork_id
109
- __all_fork_ids__: Set[UUID]
110
108
 
111
109
  def __init__(self) -> None:
112
110
  self._dependencies_invoked = defaultdict(set)
@@ -114,8 +112,6 @@ class NodeExecutionCache:
114
112
  self._node_executions_initiated = defaultdict(set)
115
113
  self._node_executions_queued = defaultdict(list)
116
114
  self.__node_execution_lookup__ = {}
117
- self.__node_to_fork_id__ = {}
118
- self.__all_fork_ids__ = set()
119
115
 
120
116
  @classmethod
121
117
  def deserialize(cls, raw_data: dict, nodes: Dict[Union[str, UUID], Type["BaseNode"]]):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vellum-ai
3
- Version: 0.14.65
3
+ Version: 0.14.67
4
4
  Summary:
5
5
  License: MIT
6
6
  Requires-Python: >=3.9,<4.0
@@ -21,7 +21,7 @@ Classifier: Programming Language :: Python :: 3.8
21
21
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
22
  Classifier: Typing :: Typed
23
23
  Requires-Dist: Jinja2 (>=3.1.0,<4.0.0)
24
- Requires-Dist: click (>=8.1.0,<9.0.0)
24
+ Requires-Dist: click (>=8.1.7,<9.0.0)
25
25
  Requires-Dist: docker (>=7.1.0,<8.0.0)
26
26
  Requires-Dist: httpx (>=0.21.2)
27
27
  Requires-Dist: openai (>=1.0.0,<2.0.0)
@@ -3,20 +3,21 @@ vellum_cli/README.md,sha256=2NudRoLzWxNKqnuVy1JuQ7DerIaxWGYkrH8kMd-asIE,90
3
3
  vellum_cli/__init__.py,sha256=2_6oGoVcLFUh4L63Kz4SBL4Y6XevJ70oYbg7BJ3cb5Q,12569
4
4
  vellum_cli/aliased_group.py,sha256=ugW498j0yv4ALJ8vS9MsO7ctDW7Jlir9j6nE_uHAP8c,3363
5
5
  vellum_cli/config.py,sha256=v5BmZ-t_v4Jmqd7KVuQMZF2pRI-rbMspSkVYXIRoTmI,9448
6
- vellum_cli/image_push.py,sha256=skFXf25ixMOX1yfcyAtii-RivYYv-_hsv-Z-bVB6m5Q,7380
6
+ vellum_cli/image_push.py,sha256=mjK3Fj3_MIhIGmurYVz_OC-hCoAef5LqDb0OppKJIJc,9909
7
7
  vellum_cli/init.py,sha256=WpnMXPItPmh0f0bBGIer3p-e5gu8DUGwSArT_FuoMEw,5093
8
8
  vellum_cli/logger.py,sha256=dcM_OmgqXLo93vDYswO5ylyUQQcTfnA5GTd5tbIt3wM,1446
9
9
  vellum_cli/ping.py,sha256=p_BCCRjgPhng6JktuECtkDQLbhopt6JpmrtGoLnLJT8,1161
10
- vellum_cli/pull.py,sha256=M50yXzA_35N35gk1Y8KjLbXrzdRG86--XFQvEukxGtA,13371
10
+ vellum_cli/pull.py,sha256=udYyPlJ6VKDdh78rApNJOZgxHl82fcV6iGnRPSdX1LY,14750
11
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
15
15
  vellum_cli/tests/test_image_push.py,sha256=QM-JlR_aJappvwbCLteQZZf76sd7SE1sRj3armvFK-I,5706
16
+ vellum_cli/tests/test_image_push_error_handling.py,sha256=_Wjfkn1orI2K4Ahzqz4u8T13or7NOX01K4BtcTuTIOM,7107
16
17
  vellum_cli/tests/test_init.py,sha256=8UOc_ThfouR4ja5cCl_URuLk7ohr9JXfCnG4yka1OUQ,18754
17
18
  vellum_cli/tests/test_main.py,sha256=qDZG-aQauPwBwM6A2DIu1494n47v3pL28XakTbLGZ-k,272
18
19
  vellum_cli/tests/test_ping.py,sha256=3ucVRThEmTadlV9LrJdCCrr1Ofj3rOjG6ue0BNR2UC0,2523
19
- vellum_cli/tests/test_pull.py,sha256=7HRAhIdkVW5mR2VckEaNDjp4rt-MlIxOWMMI2XNUPE8,49814
20
+ vellum_cli/tests/test_pull.py,sha256=hxMbW_j0weDDrkzVGpvLpFcwNQdn-fxTv4wBHeYizzc,49904
20
21
  vellum_cli/tests/test_push.py,sha256=I8XICg3pUb3yxAFLXziVHHf5CRm354LO-uUfwtca3bU,33897
21
22
  vellum_ee/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
23
  vellum_ee/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -90,13 +91,14 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_
90
91
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py,sha256=KkYZc_bZuq1lmDcvUz3QxIqJLpQPCZioD1FHUNsMJY8,11211
91
92
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py,sha256=aZaqRDrkO3ytcmdM2eKJqHSt60MF070NMj6M2vgzOKc,7711
92
93
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=r748dpS13HtwY7t_KQFExFssxRy0xI2d-wxmhiUHRe0,3850
94
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py,sha256=DzoDdmAwabMTuNu2gCgAyO0KjZxFr9JlkQRz2koUAJ8,46504
93
95
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256=Cx3oY6vPVap0xm_mChqfQw4zzR4pqV36o_SyD8g6jPY,8727
94
96
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=EL5kfakuoEcwD85dGjhMta-J-PpCHRSDoc80SdbBrQk,2769
95
97
  vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=RmFUDx8dYdfsOE2CGLvdXqNNRtLLpVzXDN8dqZyMcZ8,5822
96
98
  vellum_ee/workflows/display/types.py,sha256=i4T7ElU5b5h-nA1i3scmEhO1BqmNDc4eJDHavATD88w,2821
97
99
  vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
100
  vellum_ee/workflows/display/utils/exceptions.py,sha256=LSwwxCYNxFkf5XMUcFkaZKpQ13OSrI7y_bpEUwbKVk0,169
99
- vellum_ee/workflows/display/utils/expressions.py,sha256=7gWOsow_fkayY7GnByv1cN_XhbI24dJT-VQ5-WP46FU,12894
101
+ vellum_ee/workflows/display/utils/expressions.py,sha256=Y0WMn0V3GjVTJShMSWIe3Z75NzrRfs4_qPytUTiqbhQ,13489
100
102
  vellum_ee/workflows/display/utils/registry.py,sha256=fWIm5Jj-10gNFjgn34iBu4RWv3Vd15ijtSN0V97bpW8,1513
101
103
  vellum_ee/workflows/display/utils/vellum.py,sha256=mtoXmSYwR7rvrq-d6CzCW_auaJXTct0Mi1F0xpRCiNQ,5627
102
104
  vellum_ee/workflows/display/vellum.py,sha256=o7mq_vk2Yapu9DDKRz5l76h8EmCAypWGQYe6pryrbB8,3576
@@ -130,11 +132,11 @@ vellum_ee/workflows/tests/test_display_meta.py,sha256=DIzjNbwK1-4mlttPML6NskQ4rP
130
132
  vellum_ee/workflows/tests/test_server.py,sha256=SsOkS6sGO7uGC4mxvk4iv8AtcXs058P9hgFHzTWmpII,14519
131
133
  vellum_ee/workflows/tests/test_virtual_files.py,sha256=TJEcMR0v2S8CkloXNmCHA0QW0K6pYNGaIjraJz7sFvY,2762
132
134
  vellum/__init__.py,sha256=U4MVBzBx8I8-rOG_feluSz5U8_hD969e85F4cRgmVv4,42104
133
- vellum/client/README.md,sha256=qmaVIP42MnxAu8jV7u-CsgVFfs3-pHQODrXdZdFxtaw,4749
135
+ vellum/client/README.md,sha256=CuGUYnaE0Imt0KqQ4sIPaUghCjLHkF3DdEvZWu14-8s,4807
134
136
  vellum/client/__init__.py,sha256=AYopGv2ZRVn3zsU8_km6KOvEHDbXiTPCVuYVI7bWvdA,120166
135
137
  vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
136
138
  vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
137
- vellum/client/core/client_wrapper.py,sha256=955wHqaBcVMDsbO3pyETLDv2SnobfTnBs5g2chqn4cE,1869
139
+ vellum/client/core/client_wrapper.py,sha256=UG87pjP1tGHRW2I49o0n-MZgePLXL1Ay39COyiMKCSQ,1869
138
140
  vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
139
141
  vellum/client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
140
142
  vellum/client/core/http_client.py,sha256=Z77OIxIbL4OAB2IDqjRq_sYa5yNYAWfmdhdCSSvh6Y4,19552
@@ -150,7 +152,7 @@ vellum/client/errors/bad_request_error.py,sha256=_EbO8mWqN9kFZPvIap8qa1lL_EWkRcs
150
152
  vellum/client/errors/forbidden_error.py,sha256=QO1kKlhClAPES6zsEK7g9pglWnxn3KWaOCAawWOg6Aw,263
151
153
  vellum/client/errors/internal_server_error.py,sha256=8USCagXyJJ1MOm9snpcXIUt6eNXvrd_aq7Gfcu1vlOI,268
152
154
  vellum/client/errors/not_found_error.py,sha256=tBVCeBC8n3C811WHRj_n-hs3h8MqwR5gp0vLiobk7W8,262
153
- vellum/client/reference.md,sha256=8JwIEywKFcq7r6YmD8fpb4hG8qq9xTZgjLbVkzDoADQ,53008
155
+ vellum/client/reference.md,sha256=I-z_aZGJKDQh443ywv92ezeI9w_XsiLh-vHULu8RsDg,91011
154
156
  vellum/client/resources/__init__.py,sha256=XgQao4rJxyYu71j64RFIsshz4op9GE8-i-C5GCv-KVE,1555
155
157
  vellum/client/resources/ad_hoc/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
156
158
  vellum/client/resources/ad_hoc/client.py,sha256=rtpiGR6j8CcXSnN6UW_jYwLLdfJ9dwkTm_nta9oRzno,25933
@@ -288,7 +290,7 @@ vellum/client/types/document_index_indexing_config_request.py,sha256=Wt-ys1o_acH
288
290
  vellum/client/types/document_index_read.py,sha256=ePngiRszr65HLl9D0_FUdhAdMe84nRwyM3cKbr8rFpg,1177
289
291
  vellum/client/types/document_processing_state.py,sha256=ISlurj7jQzwHzxPzDZTqeAIgSIIGMBBPgcOSoe04pTU,211
290
292
  vellum/client/types/document_prompt_block.py,sha256=sgFxN48PILFuuF2KUIwks6PbJ3XH6sCE_8ydLEE_doU,1019
291
- vellum/client/types/document_read.py,sha256=6nwEvVvVe-6y2vtPNYB7KtcFoaydH2ow-WhCmCAvMQ8,1713
293
+ vellum/client/types/document_read.py,sha256=U3YcFLF9exeZYAhLErEdAc_vVTtWZ8efXDKmmcabshg,1661
292
294
  vellum/client/types/document_status.py,sha256=GD_TSoFmZUBJnPl-chAmaQFzQ2_TYO3PSqi3-9QfEHE,122
293
295
  vellum/client/types/document_vellum_value.py,sha256=a8WQhyntwy80iN9j8L9F5v6Jmq1L4j0ETJo9c9VGabs,768
294
296
  vellum/client/types/document_vellum_value_request.py,sha256=utpoRMMVhMIsa4S4ZOaOr2lX76BgrOVolPxCwy9-pUw,797
@@ -329,11 +331,11 @@ vellum/client/types/folder_entity_document_index_data.py,sha256=UceusLf7dLYDHq4Z
329
331
  vellum/client/types/folder_entity_folder.py,sha256=1GWfyHdenyAI2GXiouIbnFhPK4ADqZGFh-6fpp_C6-U,792
330
332
  vellum/client/types/folder_entity_folder_data.py,sha256=JLYkhvRY63-ojNY84lfRTaUg25KjslSE-iNAC2NYCTI,674
331
333
  vellum/client/types/folder_entity_prompt_sandbox.py,sha256=7CGVcK5maoqO7CC7sFfi6F5X0QWdHVbEygqLyci_VDY,839
332
- vellum/client/types/folder_entity_prompt_sandbox_data.py,sha256=4u-t-p2-h7Z1SacNOQnEnY3tt-au5WB0hIDrB1HOeKk,781
334
+ vellum/client/types/folder_entity_prompt_sandbox_data.py,sha256=LMTtOshCdp0MpYHdKtrtBSdpXw9B9id5BfIpkg9SsY4,826
333
335
  vellum/client/types/folder_entity_test_suite.py,sha256=M5sb7ntUX2VsCyD0AYnz7dalt7G1ejOYQZvsUU33q2w,811
334
336
  vellum/client/types/folder_entity_test_suite_data.py,sha256=RGITy3Pip6NeIb77YGavDWgRr8GLFDB9sXrTU_Dm2OI,719
335
337
  vellum/client/types/folder_entity_workflow_sandbox.py,sha256=gFmkwKZGh5O9-9y4w6VGK1IRsKLf7NZ4SCC-pgucm8M,853
336
- vellum/client/types/folder_entity_workflow_sandbox_data.py,sha256=MW0nLAvetgnsm6KWiGcYcKB9llR-UfosSNz0MtokN38,783
338
+ vellum/client/types/folder_entity_workflow_sandbox_data.py,sha256=4_kzQSDrFXVJCSF1st73jo0LxKOicn_gE82XAk-QKJI,828
337
339
  vellum/client/types/fulfilled_ad_hoc_execute_prompt_event.py,sha256=19rFjVrzobaaAQhZlP_WGV9f_Rwrz4EPRXbT2aYkaJw,1016
338
340
  vellum/client/types/fulfilled_execute_prompt_event.py,sha256=E-iBwlMWvwQyRfzqPlgtX8KurE3IYsTRd5vWjXtbOmk,994
339
341
  vellum/client/types/fulfilled_execute_prompt_response.py,sha256=nKhDk2ZloCuE0uijX5XOE63_cq8PBo4UWs4hK4e3jUE,1227
@@ -1505,7 +1507,7 @@ vellum/workflows/events/types.py,sha256=LwgFlMRbptJvdPtPO1POUtGtbhGw7BSuvgHxNSgS
1505
1507
  vellum/workflows/events/workflow.py,sha256=i9JSCANjAhf5uc57gYspdII2V2OLItbc0BfT8yB9mF0,7728
1506
1508
  vellum/workflows/exceptions.py,sha256=NiBiR3ggfmPxBVqD-H1SqmjI-7mIn0EStSN1BqApvCM,1213
1507
1509
  vellum/workflows/expressions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1508
- vellum/workflows/expressions/accessor.py,sha256=ItZF7fMLzVTqsdAiaXb5SiDupXmX0X9xbIus1W6hRds,1870
1510
+ vellum/workflows/expressions/accessor.py,sha256=1kY0sYfednQ_u0kh1Df2WTsDREVIOzU7UuZc5jvj5xw,2861
1509
1511
  vellum/workflows/expressions/and_.py,sha256=I7lNqrUM3-m_5hmjjiMhaHhJtKcLj39kEFVWPDOqwfo,916
1510
1512
  vellum/workflows/expressions/begins_with.py,sha256=FnWsQXbENm0ZwkfEP7dR8Qx4_MMrzj6C1yqAV2KaNHw,1123
1511
1513
  vellum/workflows/expressions/between.py,sha256=dVeddT6YA91eOAlE1Utg7C7gnCiYE7WP-dg17yXUeAY,1492
@@ -1535,6 +1537,7 @@ vellum/workflows/expressions/not_in.py,sha256=pFvwkFPsn3WJw61ssFgM2U1dqWEeglfz4F
1535
1537
  vellum/workflows/expressions/or_.py,sha256=s-8YdMSSCDS2yijR38kguwok3iqmDMMgDYKV93b4O4s,914
1536
1538
  vellum/workflows/expressions/parse_json.py,sha256=xsk6j3HF7bU1yF6fwt5P9Ugcyd5D9ZXrdng11FRilUI,1088
1537
1539
  vellum/workflows/expressions/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1540
+ vellum/workflows/expressions/tests/test_accessor.py,sha256=ijmGjS1pipdurAgYGmfV8Gcle4HIJ5lQHVG18xHjNiQ,5839
1538
1541
  vellum/workflows/expressions/tests/test_expressions.py,sha256=3b6k8xs-CItBBw95NygFLUNoNPKxI4VA1GyWbkMtqyI,11623
1539
1542
  vellum/workflows/expressions/tests/test_parse_json.py,sha256=zpB_qE5_EwWQL7ULQUJm0o1PRSfWZdAqZNW6Ah13oJE,1059
1540
1543
  vellum/workflows/graph/__init__.py,sha256=3sHlay5d_-uD7j3QJXiGl0WHFZZ_QScRvgyDhN2GhHY,74
@@ -1548,11 +1551,11 @@ vellum/workflows/inputs/tests/test_inputs.py,sha256=lioA8917mFLYq7Ml69UNkqUjcWbb
1548
1551
  vellum/workflows/logging.py,sha256=_a217XogktV4Ncz6xKFz7WfYmZAzkfVRVuC0rWob8ls,437
1549
1552
  vellum/workflows/nodes/__init__.py,sha256=aVdQVv7Y3Ro3JlqXGpxwaU2zrI06plDHD2aumH5WUIs,1157
1550
1553
  vellum/workflows/nodes/bases/__init__.py,sha256=cniHuz_RXdJ4TQgD8CBzoiKDiPxg62ErdVpCbWICX64,58
1551
- vellum/workflows/nodes/bases/base.py,sha256=TtvfbGnAB8fYfQlhBM-sF3fwZLYn_Nq-dqU9m1fAbBU,21923
1554
+ vellum/workflows/nodes/bases/base.py,sha256=FHZ5_pzN9NJ5Vpj1uo2QP-BzxCtVCUvcDo-taoqmasw,21095
1552
1555
  vellum/workflows/nodes/bases/base_adornment_node.py,sha256=hrgzuTetM4ynPd9YGHoK8Vwwn4XITi3aZZ_OCnQrq4Y,3433
1553
1556
  vellum/workflows/nodes/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1554
1557
  vellum/workflows/nodes/bases/tests/test_base_adornment_node.py,sha256=fXZI9KqpS4XMBrBnIEkK3foHaBVvyHwYcQWWDKay7ic,1148
1555
- vellum/workflows/nodes/bases/tests/test_base_node.py,sha256=KRrgjXfzxf1ecE55-jwbQqPnOlNii-i2iaHJUW6oWcI,9358
1558
+ vellum/workflows/nodes/bases/tests/test_base_node.py,sha256=Qk54NIuNa-eAtkq2AVeyl1AjZbotWlqdxTXrlZ3pIe0,10935
1556
1559
  vellum/workflows/nodes/core/__init__.py,sha256=5zDMCmyt1v0HTJzlUBwq3U9L825yZGZhT9JL18-mRR4,455
1557
1560
  vellum/workflows/nodes/core/error_node/__init__.py,sha256=g7RRnlHhqu4qByfLjBwCunmgGA8dI5gNsjS3h6TwlSI,60
1558
1561
  vellum/workflows/nodes/core/error_node/node.py,sha256=MFHU5vITYSK-L9CuMZ49In2ZeNLWnhZD0f8r5dWvb5Y,1270
@@ -1577,19 +1580,19 @@ vellum/workflows/nodes/core/try_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW
1577
1580
  vellum/workflows/nodes/core/try_node/tests/test_node.py,sha256=h6eUc3SggvhzBWlOD0PrPUlkoCSQHwjqYn81VkxSIxU,4948
1578
1581
  vellum/workflows/nodes/displayable/__init__.py,sha256=6F_4DlSwvHuilWnIalp8iDjjDXl0Nmz4QzJV2PYe5RI,1023
1579
1582
  vellum/workflows/nodes/displayable/api_node/__init__.py,sha256=MoxdQSnidIj1Nf_d-hTxlOxcZXaZnsWFDbE-PkTK24o,56
1580
- vellum/workflows/nodes/displayable/api_node/node.py,sha256=KOSEicUQScliWEnKyQdfuB-5Lw5ScG9PUd3WFP2nlSQ,2835
1583
+ vellum/workflows/nodes/displayable/api_node/node.py,sha256=CjbQJp9tGRgS-ebQqm3eoxmEeeSzrxousIawo3woUYw,2896
1581
1584
  vellum/workflows/nodes/displayable/api_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1582
- vellum/workflows/nodes/displayable/api_node/tests/test_api_node.py,sha256=CDoFRRCOYwmoLU5Kvv9pRrxYYuk29Lm4DBt_bKYZHcE,5677
1585
+ vellum/workflows/nodes/displayable/api_node/tests/test_api_node.py,sha256=s7-r3oGKeoQUaJ5w6FY8SXwuiafNpE6nvNT1gNJIBnM,6734
1583
1586
  vellum/workflows/nodes/displayable/bases/__init__.py,sha256=0mWIx3qUrzllV7jqt7wN03vWGMuI1WrrLZeMLT2Cl2c,304
1584
1587
  vellum/workflows/nodes/displayable/bases/api_node/__init__.py,sha256=1jwx4WC358CLA1jgzl_UD-rZmdMm2v9Mps39ndwCD7U,64
1585
1588
  vellum/workflows/nodes/displayable/bases/api_node/node.py,sha256=70pLGU0UzWvSbKwNkx3YlUYrDSkl7MmhVHoI8bzN79c,4343
1586
1589
  vellum/workflows/nodes/displayable/bases/base_prompt_node/__init__.py,sha256=Org3xTvgp1pA0uUXFfnJr29D3HzCey2lEdYF4zbIUgo,70
1587
- vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py,sha256=amBXi7Tv50AbGLhfWbwX83PlOdV1XyYRyQmpa6_afE4,3511
1590
+ vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py,sha256=ZW3tm5Ka_q39Tp70nMLl1L9aJymbeakxaeuxPwm8bKc,4450
1588
1591
  vellum/workflows/nodes/displayable/bases/inline_prompt_node/__init__.py,sha256=Hl35IAoepRpE-j4cALaXVJIYTYOF3qszyVbxTj4kS1s,82
1589
1592
  vellum/workflows/nodes/displayable/bases/inline_prompt_node/constants.py,sha256=fnjiRWLoRlC4Puo5oQcpZD5Hd-EesxsAo9l5tGAkpZQ,270
1590
1593
  vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py,sha256=cD2RzOX9WE6xTKgm09dsEw4xHATZbOjeGyYCSdl8fjU,11785
1591
1594
  vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1592
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/test_inline_prompt_node.py,sha256=5CNag1_aEFZbCL0nrOC5e1L-t90-4rp2xDwh0h52hVI,21407
1595
+ vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/test_inline_prompt_node.py,sha256=terQtPqLGiKKGtU7zbkM3XkbVddLQI87bBj31M0zaRE,21356
1593
1596
  vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py,sha256=0a40fkkZkFMmZN0CsWf6EP_y1H6x36EGa3WcfVNyOsM,9797
1594
1597
  vellum/workflows/nodes/displayable/bases/search_node.py,sha256=3UtbqY3QO4kzfJHbmUNZGnEEfJmaoiF892u8H6TGjp8,5381
1595
1598
  vellum/workflows/nodes/displayable/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1604,10 +1607,10 @@ vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/main.py,sh
1604
1607
  vellum/workflows/nodes/displayable/code_execution_node/tests/test_node.py,sha256=DRd-nOC04RGjXz-ctxADVq7b-hgdiFN3ZfhK6Ld7J8I,36634
1605
1608
  vellum/workflows/nodes/displayable/code_execution_node/utils.py,sha256=VRTKms59vrSR9mDk99cojParZVAP4lzjEeDwDNXU1tk,3837
1606
1609
  vellum/workflows/nodes/displayable/conditional_node/__init__.py,sha256=AS_EIqFdU1F9t8aLmbZU-rLh9ry6LCJ0uj0D8F0L5Uw,72
1607
- vellum/workflows/nodes/displayable/conditional_node/node.py,sha256=Qjfl33gZ3JEgxBA1EgzSUebboGvsARthIxxcQyvx5Gg,1152
1610
+ vellum/workflows/nodes/displayable/conditional_node/node.py,sha256=71ZUNfTiD7t2Kai2ypw0tmv1lSf1brQaHAQD-SeUrGE,1101
1608
1611
  vellum/workflows/nodes/displayable/conftest.py,sha256=K2kLM2JGAfcrmmd92u8DXInUO5klFdggPWblg5RVcx4,5729
1609
1612
  vellum/workflows/nodes/displayable/final_output_node/__init__.py,sha256=G7VXM4OWpubvSJtVkGmMNeqgb9GkM7qZT838eL18XU4,72
1610
- vellum/workflows/nodes/displayable/final_output_node/node.py,sha256=PuQ0RvtAmoSIZ5En_92tym7gpSMEoiHgwu20-UDbC7o,2368
1613
+ vellum/workflows/nodes/displayable/final_output_node/node.py,sha256=AfonKXEoT5kpTo4kVyhgZs0kf-7x7zyg2H2CGlj9eMQ,2410
1611
1614
  vellum/workflows/nodes/displayable/final_output_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1612
1615
  vellum/workflows/nodes/displayable/final_output_node/tests/test_node.py,sha256=E6LQ74qZjY4Xi4avx2qdOCgGhF8pEcNLBh8cqYRkzMI,709
1613
1616
  vellum/workflows/nodes/displayable/guardrail_node/__init__.py,sha256=Ab5eXmOoBhyV4dMWdzh32HLUmnPIBEK_zFCT38C4Fng,68
@@ -1616,7 +1619,7 @@ vellum/workflows/nodes/displayable/guardrail_node/test_node.py,sha256=SAGv6hSFcB
1616
1619
  vellum/workflows/nodes/displayable/guardrail_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1617
1620
  vellum/workflows/nodes/displayable/guardrail_node/tests/test_node.py,sha256=X2pd6TI8miYxIa7rgvs1pHTEreyWcf77EyR0_Jsa700,2055
1618
1621
  vellum/workflows/nodes/displayable/inline_prompt_node/__init__.py,sha256=gSUOoEZLlrx35-tQhSAd3An8WDwBqyiQh-sIebLU9wU,74
1619
- vellum/workflows/nodes/displayable/inline_prompt_node/node.py,sha256=8RXZqWMzViUjFfbpmcy1gkSsKnEpci8BGwsuPYv4xMQ,3380
1622
+ vellum/workflows/nodes/displayable/inline_prompt_node/node.py,sha256=ST_V1Z3-7lzZ__Ntfm6iry70u9D3GD2a2vxsl2d4Q_c,2843
1620
1623
  vellum/workflows/nodes/displayable/inline_prompt_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1621
1624
  vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py,sha256=bBHs90mV5SZ3rJPAL0wx4WWyawUA406LgMPOdvpZC_A,10923
1622
1625
  vellum/workflows/nodes/displayable/merge_node/__init__.py,sha256=J8IC08dSH7P76wKlNuxe1sn7toNGtSQdFirUbtPDEs0,60
@@ -1628,9 +1631,9 @@ vellum/workflows/nodes/displayable/prompt_deployment_node/node.py,sha256=eUiQYdq
1628
1631
  vellum/workflows/nodes/displayable/prompt_deployment_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1629
1632
  vellum/workflows/nodes/displayable/prompt_deployment_node/tests/test_node.py,sha256=c_nuuqrwiIjgj4qIbVypfDuOc-3TlgO6CbXFqQl2Nqw,19725
1630
1633
  vellum/workflows/nodes/displayable/search_node/__init__.py,sha256=hpBpvbrDYf43DElRZFLzieSn8weXiwNiiNOJurERQbs,62
1631
- vellum/workflows/nodes/displayable/search_node/node.py,sha256=vUTDyurYKw6KLABuVml_N_fbnNBDv5dBtejdoj82hWs,1646
1634
+ vellum/workflows/nodes/displayable/search_node/node.py,sha256=1dGCB1kb7MvX3fUJ5zP__Bh02mdPdRRsx_vwGyQFBVc,1981
1632
1635
  vellum/workflows/nodes/displayable/search_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1633
- vellum/workflows/nodes/displayable/search_node/tests/test_node.py,sha256=OserVd6jPe6t49MQF0cxphI2irBLaC_GceMr0acFqoY,8075
1636
+ vellum/workflows/nodes/displayable/search_node/tests/test_node.py,sha256=WVZR3BI_CvxBG9hulv0-tcAc_gW5ozs0nH4uVNRJa2U,8863
1634
1637
  vellum/workflows/nodes/displayable/subworkflow_deployment_node/__init__.py,sha256=9yYM6001YZeqI1VOk1QuEM_yrffk_EdsO7qaPzINKds,92
1635
1638
  vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py,sha256=lq8_USZkNiYktH0oJSW2jOuXyRtVwVoq1CKFdCek5-M,9719
1636
1639
  vellum/workflows/nodes/displayable/subworkflow_deployment_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1646,7 +1649,7 @@ vellum/workflows/nodes/experimental/openai_chat_completion_node/node.py,sha256=c
1646
1649
  vellum/workflows/nodes/experimental/tool_calling_node/__init__.py,sha256=S7OzT3I4cyOU5Beoz87nPwCejCMP2FsHBFL8OcVmxJ4,118
1647
1650
  vellum/workflows/nodes/experimental/tool_calling_node/node.py,sha256=FkhaJccpCbx2be_IZ5V2v6Lo-jPJ0WgSC5tveLvAW4A,5774
1648
1651
  vellum/workflows/nodes/experimental/tool_calling_node/tests/test_node.py,sha256=sxG26mOwt4N36RLoPJ-ngginPqC5qFzD_kGj9izdCFI,1833
1649
- vellum/workflows/nodes/experimental/tool_calling_node/utils.py,sha256=DjFn33XuomM-EiojCFzTlOsWMdF_uYyHzNayBok6X-k,10055
1652
+ vellum/workflows/nodes/experimental/tool_calling_node/utils.py,sha256=vB-tdN-44iVrTFvwGLVZW3dv62imIp5fPo0FYCW0l3M,9815
1650
1653
  vellum/workflows/nodes/mocks.py,sha256=a1FjWEIocseMfjzM-i8DNozpUsaW0IONRpZmXBoWlyc,10455
1651
1654
  vellum/workflows/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1652
1655
  vellum/workflows/nodes/tests/test_mocks.py,sha256=mfPvrs75PKcsNsbJLQAN6PDFoVqs9TmQxpdyFKDdO60,7837
@@ -1674,10 +1677,10 @@ vellum/workflows/references/workflow_input.py,sha256=W3rOK1EPd2gYHb04WJwmNm1CUSd
1674
1677
  vellum/workflows/resolvers/__init__.py,sha256=eH6hTvZO4IciDaf_cf7aM2vs-DkBDyJPycOQevJxQnI,82
1675
1678
  vellum/workflows/resolvers/base.py,sha256=WHra9LRtlTuB1jmuNqkfVE2JUgB61Cyntn8f0b0WZg4,411
1676
1679
  vellum/workflows/runner/__init__.py,sha256=i1iG5sAhtpdsrlvwgH6B-m49JsINkiWyPWs8vyT-bqM,72
1677
- vellum/workflows/runner/runner.py,sha256=F-FIioGcWOXwl93id4QkcSwoYgSW_XnTZd7FDICWRvk,34129
1680
+ vellum/workflows/runner/runner.py,sha256=j2LGHb4fDWR1pB__C1efIMxptq_C49fcOpz893bQHVQ,33645
1678
1681
  vellum/workflows/sandbox.py,sha256=GVJzVjMuYzOBnSrboB0_6MMRZWBluAyQ2o7syeaeBd0,2235
1679
1682
  vellum/workflows/state/__init__.py,sha256=yUUdR-_Vl7UiixNDYQZ-GEM_kJI9dnOia75TtuNEsnE,60
1680
- vellum/workflows/state/base.py,sha256=mYldAAUxWBGhXW-dWCljkfabBtNsh_qNj1XGJq22PSg,22376
1683
+ vellum/workflows/state/base.py,sha256=WIMJYyuHUrP4zt0Nudk66HAK1L6GgGmsU_GQp7BGE2U,22189
1681
1684
  vellum/workflows/state/context.py,sha256=KOAI1wEGn8dGmhmAemJaf4SZbitP3jpIBcwKfznQaRE,3076
1682
1685
  vellum/workflows/state/encoder.py,sha256=8NPQ8iz5qJeT5fafnZ2Pko98b-FtTjsgMNV4Zi3g2bE,2438
1683
1686
  vellum/workflows/state/store.py,sha256=uVe-oN73KwGV6M6YLhwZMMUQhzTQomsVfVnb8V91gVo,1147
@@ -1712,8 +1715,8 @@ vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnad
1712
1715
  vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1713
1716
  vellum/workflows/workflows/tests/test_base_workflow.py,sha256=fROqff6AZpCIzaSwOKSdtYy4XR0UZQ6ejxL3RJOSJVs,20447
1714
1717
  vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
1715
- vellum_ai-0.14.65.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1716
- vellum_ai-0.14.65.dist-info/METADATA,sha256=kYXF0TPnW90jthw0xtqtK8eTzOQo-bRqiD_Tmssv7dU,5556
1717
- vellum_ai-0.14.65.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1718
- vellum_ai-0.14.65.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1719
- vellum_ai-0.14.65.dist-info/RECORD,,
1718
+ vellum_ai-0.14.67.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1719
+ vellum_ai-0.14.67.dist-info/METADATA,sha256=Db8ryoXbUKuF3JFftIoP1q6KRkDfnDJfmBGl1tg5nUA,5556
1720
+ vellum_ai-0.14.67.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1721
+ vellum_ai-0.14.67.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1722
+ vellum_ai-0.14.67.dist-info/RECORD,,
vellum_cli/image_push.py CHANGED
@@ -9,9 +9,10 @@ import docker
9
9
  from docker import DockerClient
10
10
  from dotenv import load_dotenv
11
11
 
12
+ from vellum.client.core.api_error import ApiError
12
13
  from vellum.workflows.vellum_client import create_vellum_client, create_vellum_environment
13
14
  from vellum_cli.config import DEFAULT_WORKSPACE_CONFIG, load_vellum_cli_config
14
- from vellum_cli.logger import load_cli_logger
15
+ from vellum_cli.logger import handle_cli_error, load_cli_logger
15
16
 
16
17
  _SUPPORTED_ARCHITECTURE = "amd64"
17
18
 
@@ -82,7 +83,34 @@ def image_push_command(image: str, tags: Optional[List[str]] = None, workspace:
82
83
  exit(1)
83
84
  else:
84
85
  logger.info("Authenticating...")
85
- auth = vellum_client.container_images.docker_service_token()
86
+ try:
87
+ auth = vellum_client.container_images.docker_service_token()
88
+ except ApiError as e:
89
+ if e.status_code == 401 or e.status_code == 403:
90
+ handle_cli_error(
91
+ logger,
92
+ title="Authentication failed",
93
+ message="Unable to authenticate with Vellum API. Please check your API key.",
94
+ suggestion="Make sure your VELLUM_API_KEY environment variable is set correctly.",
95
+ )
96
+ return
97
+ elif e.status_code == 500:
98
+ handle_cli_error(
99
+ logger,
100
+ title="Server error",
101
+ message="The Vellum API failed with an unexpected server error.",
102
+ suggestion="Please try again later and contact support if the problem persists.",
103
+ )
104
+ return
105
+ else:
106
+ handle_cli_error(
107
+ logger,
108
+ title="API request failed",
109
+ message=f"Failed to get Docker service token from Vellum API (HTTP {e.status_code}).",
110
+ suggestion="Please check your configuration and try again. If the problem persists, "
111
+ "contact support.",
112
+ )
113
+ return
86
114
 
87
115
  docker_client.login(
88
116
  username="oauth2accesstoken",
@@ -143,11 +171,38 @@ def image_push_command(image: str, tags: Optional[List[str]] = None, workspace:
143
171
 
144
172
  logger.info(f"Updating Vellum metadata and validating image works in our system with image digest: {sha}...")
145
173
 
146
- vellum_client.container_images.push_container_image(
147
- name=image_name,
148
- sha=sha,
149
- tags=all_tags,
150
- )
174
+ try:
175
+ vellum_client.container_images.push_container_image(
176
+ name=image_name,
177
+ sha=sha,
178
+ tags=all_tags,
179
+ )
180
+ except ApiError as e:
181
+ if e.status_code == 401 or e.status_code == 403:
182
+ handle_cli_error(
183
+ logger,
184
+ title="Authentication failed",
185
+ message="Unable to push container image metadata to Vellum API. Please check your API key.",
186
+ suggestion="Make sure your VELLUM_API_KEY environment variable is set correctly.",
187
+ )
188
+ return
189
+ elif e.status_code == 500:
190
+ handle_cli_error(
191
+ logger,
192
+ title="Server error",
193
+ message="The Vellum API failed with an unexpected server error while pushing container image metadata.",
194
+ suggestion="Please try again later and contact support if the problem persists.",
195
+ )
196
+ return
197
+ else:
198
+ handle_cli_error(
199
+ logger,
200
+ title="API request failed",
201
+ message=f"Failed to push container image metadata to Vellum API (HTTP {e.status_code}).",
202
+ suggestion="Please check your configuration and try again. If the problem persists, contact support.",
203
+ )
204
+ return
205
+
151
206
  logger.info(f"Image successfully pushed as {image_name} to vellum with tags: {all_tags}.")
152
207
 
153
208
 
vellum_cli/pull.py CHANGED
@@ -20,7 +20,7 @@ from vellum_cli.config import (
20
20
  WorkflowDeploymentConfig,
21
21
  load_vellum_cli_config,
22
22
  )
23
- from vellum_cli.logger import load_cli_logger
23
+ from vellum_cli.logger import handle_cli_error, load_cli_logger
24
24
 
25
25
  ERROR_LOG_FILE_NAME = "error.log"
26
26
  METADATA_FILE_NAME = "metadata.json"
@@ -201,16 +201,42 @@ def pull_command(
201
201
  zip_bytes = b"".join(response)
202
202
  except ApiError as e:
203
203
  if e.status_code == 401 or e.status_code == 403:
204
- raise Exception("Please make sure your `VELLUM_API_KEY` environment variable is set correctly.")
204
+ handle_cli_error(
205
+ logger,
206
+ title="Authentication failed",
207
+ message="Unable to authenticate with the Vellum API.",
208
+ suggestion="Please make sure your `VELLUM_API_KEY` environment variable is set correctly and that you have access to this workflow.", # noqa: E501
209
+ )
210
+
211
+ if e.status_code == 404:
212
+ handle_cli_error(
213
+ logger,
214
+ title="Workflow not found",
215
+ message=f"The workflow with ID '{pk}' could not be found.",
216
+ suggestion="Please verify the workflow ID is correct and that you have access to it in your workspace.",
217
+ )
205
218
 
206
219
  if e.status_code == 500:
207
- raise Exception(
208
- "The Pull API failed with an unexpected error. Please try again later and contact support if the problem persists." # noqa: E501
220
+ handle_cli_error(
221
+ logger,
222
+ title="Server error occurred",
223
+ message="The Vellum API encountered an internal server error while processing your request.",
224
+ suggestion="Please try again in a few moments. If the problem persists, contact Vellum support with the workflow ID and timestamp.", # noqa: E501
225
+ )
226
+
227
+ if e.status_code == 502 or e.status_code == 503 or e.status_code == 504:
228
+ handle_cli_error(
229
+ logger,
230
+ title="Service temporarily unavailable",
231
+ message="The Vellum API is temporarily unavailable or experiencing high load.",
232
+ suggestion="Please wait a moment and try again. If the issue continues, check the Vellum status page or contact support.", # noqa: E501
209
233
  )
210
234
 
211
- # TODO: We should return an Origin header in to validate this case
212
- raise Exception(
213
- "The API we tried to pull is invalid. Please make sure your `VELLUM_API_URL` environment variable is set correctly." # noqa: E501
235
+ handle_cli_error(
236
+ logger,
237
+ title="API request failed",
238
+ message=f"The API request failed with status code {e.status_code}.",
239
+ suggestion="Please verify your `VELLUM_API_URL` environment variable is set correctly and try again.",
214
240
  )
215
241
 
216
242
  zip_buffer = io.BytesIO(zip_bytes)
@@ -299,8 +325,11 @@ def pull_command(
299
325
  logger.info(f"Writing to {target_file}...")
300
326
  target.write(content)
301
327
  except zipfile.BadZipFile:
302
- raise Exception(
303
- "The API we tried to pull from returned an invalid zip file. Please make sure your `VELLUM_API_URL` environment variable is set correctly." # noqa: E501
328
+ handle_cli_error(
329
+ logger,
330
+ title="Invalid response format",
331
+ message="The API returned an invalid zip file format.",
332
+ suggestion="Please verify your `VELLUM_API_URL` environment variable is set correctly and try again.",
304
333
  )
305
334
 
306
335
  if include_json: