vellum-ai 0.13.21__py3-none-any.whl → 0.13.23__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 (51) hide show
  1. vellum/__init__.py +12 -0
  2. vellum/client/__init__.py +170 -5
  3. vellum/client/core/client_wrapper.py +1 -1
  4. vellum/client/types/__init__.py +12 -0
  5. vellum/client/types/execute_api_request_bearer_token.py +6 -0
  6. vellum/client/types/execute_api_request_body.py +5 -0
  7. vellum/client/types/execute_api_request_headers_value.py +6 -0
  8. vellum/client/types/execute_api_response.py +24 -0
  9. vellum/client/types/method_enum.py +5 -0
  10. vellum/client/types/vellum_secret.py +19 -0
  11. vellum/plugins/pydantic.py +13 -1
  12. vellum/types/execute_api_request_bearer_token.py +3 -0
  13. vellum/types/execute_api_request_body.py +3 -0
  14. vellum/types/execute_api_request_headers_value.py +3 -0
  15. vellum/types/execute_api_response.py +3 -0
  16. vellum/types/method_enum.py +3 -0
  17. vellum/types/vellum_secret.py +3 -0
  18. vellum/workflows/nodes/core/inline_subworkflow_node/node.py +1 -0
  19. vellum/workflows/nodes/core/map_node/node.py +1 -0
  20. vellum/workflows/nodes/core/retry_node/node.py +1 -0
  21. vellum/workflows/nodes/core/try_node/node.py +11 -7
  22. vellum/workflows/nodes/displayable/api_node/node.py +12 -3
  23. vellum/workflows/nodes/displayable/api_node/tests/__init__.py +0 -0
  24. vellum/workflows/nodes/displayable/api_node/tests/test_api_node.py +34 -0
  25. vellum/workflows/nodes/displayable/bases/api_node/node.py +25 -4
  26. vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py +11 -3
  27. vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py +27 -12
  28. vellum/workflows/nodes/displayable/code_execution_node/tests/test_code_execution_node.py +33 -0
  29. vellum/workflows/nodes/displayable/code_execution_node/utils.py +14 -12
  30. vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py +49 -0
  31. vellum/workflows/nodes/displayable/prompt_deployment_node/tests/__init__.py +0 -0
  32. vellum/workflows/nodes/displayable/prompt_deployment_node/tests/test_node.py +96 -0
  33. vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py +29 -5
  34. vellum/workflows/nodes/displayable/subworkflow_deployment_node/tests/__init__.py +0 -0
  35. vellum/workflows/nodes/displayable/subworkflow_deployment_node/tests/test_node.py +131 -0
  36. vellum/workflows/nodes/mocks.py +17 -0
  37. vellum/workflows/runner/runner.py +14 -34
  38. vellum/workflows/state/context.py +29 -1
  39. vellum/workflows/workflows/base.py +9 -6
  40. {vellum_ai-0.13.21.dist-info → vellum_ai-0.13.23.dist-info}/METADATA +1 -1
  41. {vellum_ai-0.13.21.dist-info → vellum_ai-0.13.23.dist-info}/RECORD +50 -31
  42. vellum_cli/push.py +5 -6
  43. vellum_cli/tests/test_push.py +81 -1
  44. vellum_ee/workflows/display/types.py +1 -31
  45. vellum_ee/workflows/display/vellum.py +1 -1
  46. vellum_ee/workflows/display/workflows/base_workflow_display.py +46 -2
  47. vellum_ee/workflows/tests/test_server.py +9 -0
  48. vellum/workflows/types/cycle_map.py +0 -34
  49. {vellum_ai-0.13.21.dist-info → vellum_ai-0.13.23.dist-info}/LICENSE +0 -0
  50. {vellum_ai-0.13.21.dist-info → vellum_ai-0.13.23.dist-info}/WHEEL +0 -0
  51. {vellum_ai-0.13.21.dist-info → vellum_ai-0.13.23.dist-info}/entry_points.txt +0 -0
@@ -1,9 +1,12 @@
1
1
  from functools import cached_property
2
2
  from queue import Queue
3
- from typing import TYPE_CHECKING, Optional
3
+ from typing import TYPE_CHECKING, Dict, List, Optional, Type
4
4
 
5
5
  from vellum import Vellum
6
6
  from vellum.workflows.events.types import ParentContext
7
+ from vellum.workflows.nodes.mocks import MockNodeExecution, MockNodeExecutionArg
8
+ from vellum.workflows.outputs.base import BaseOutputs
9
+ from vellum.workflows.references.constant import ConstantValueReference
7
10
  from vellum.workflows.vellum_client import create_vellum_client
8
11
 
9
12
  if TYPE_CHECKING:
@@ -20,6 +23,7 @@ class WorkflowContext:
20
23
  self._vellum_client = vellum_client
21
24
  self._parent_context = parent_context
22
25
  self._event_queue: Optional[Queue["WorkflowEvent"]] = None
26
+ self._node_output_mocks_map: Dict[Type[BaseOutputs], List[MockNodeExecution]] = {}
23
27
 
24
28
  @cached_property
25
29
  def vellum_client(self) -> Vellum:
@@ -34,9 +38,33 @@ class WorkflowContext:
34
38
  return self._parent_context
35
39
  return None
36
40
 
41
+ @cached_property
42
+ def node_output_mocks_map(self) -> Dict[Type[BaseOutputs], List[MockNodeExecution]]:
43
+ return self._node_output_mocks_map
44
+
37
45
  def _emit_subworkflow_event(self, event: "WorkflowEvent") -> None:
38
46
  if self._event_queue:
39
47
  self._event_queue.put(event)
40
48
 
41
49
  def _register_event_queue(self, event_queue: Queue["WorkflowEvent"]) -> None:
42
50
  self._event_queue = event_queue
51
+
52
+ def _register_node_output_mocks(self, node_output_mocks: MockNodeExecutionArg) -> None:
53
+ for mock in node_output_mocks:
54
+ if isinstance(mock, MockNodeExecution):
55
+ key = mock.then_outputs.__class__
56
+ value = mock
57
+ else:
58
+ key = mock.__class__
59
+ value = MockNodeExecution(
60
+ when_condition=ConstantValueReference(True),
61
+ then_outputs=mock,
62
+ )
63
+
64
+ if key not in self._node_output_mocks_map:
65
+ self._node_output_mocks_map[key] = [value]
66
+ else:
67
+ self._node_output_mocks_map[key].append(value)
68
+
69
+ def _get_all_node_output_mocks(self) -> List[MockNodeExecution]:
70
+ return [mock for mocks in self._node_output_mocks_map.values() for mock in mocks]
@@ -61,6 +61,7 @@ from vellum.workflows.events.workflow import (
61
61
  from vellum.workflows.graph import Graph
62
62
  from vellum.workflows.inputs.base import BaseInputs
63
63
  from vellum.workflows.nodes.bases import BaseNode
64
+ from vellum.workflows.nodes.mocks import MockNodeExecutionArg
64
65
  from vellum.workflows.outputs import BaseOutputs
65
66
  from vellum.workflows.resolvers.base import BaseWorkflowResolver
66
67
  from vellum.workflows.runner import WorkflowRunner
@@ -187,7 +188,7 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
187
188
  entrypoint_nodes: Optional[RunFromNodeArg] = None,
188
189
  external_inputs: Optional[ExternalInputsArg] = None,
189
190
  cancel_signal: Optional[ThreadingEvent] = None,
190
- node_output_mocks: Optional[List[BaseOutputs]] = None,
191
+ node_output_mocks: Optional[MockNodeExecutionArg] = None,
191
192
  max_concurrency: Optional[int] = None,
192
193
  ) -> TerminalWorkflowEvent:
193
194
  """
@@ -214,8 +215,9 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
214
215
  cancel_signal: Optional[ThreadingEvent] = None
215
216
  A threading event that can be used to cancel the Workflow Execution.
216
217
 
217
- node_output_mocks: Optional[List[Outputs]] = None
218
- A list of Outputs to mock for Nodes during Workflow Execution.
218
+ node_output_mocks: Optional[MockNodeExecutionArg] = None
219
+ A list of Outputs to mock for Nodes during Workflow Execution. Each mock can include a `when_condition`
220
+ that must be met for the mock to be used.
219
221
 
220
222
  max_concurrency: Optional[int] = None
221
223
  The max number of concurrent threads to run the Workflow with. If not provided, the Workflow will run
@@ -295,7 +297,7 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
295
297
  entrypoint_nodes: Optional[RunFromNodeArg] = None,
296
298
  external_inputs: Optional[ExternalInputsArg] = None,
297
299
  cancel_signal: Optional[ThreadingEvent] = None,
298
- node_output_mocks: Optional[List[BaseOutputs]] = None,
300
+ node_output_mocks: Optional[MockNodeExecutionArg] = None,
299
301
  max_concurrency: Optional[int] = None,
300
302
  ) -> WorkflowEventStream:
301
303
  """
@@ -323,8 +325,9 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
323
325
  cancel_signal: Optional[ThreadingEvent] = None
324
326
  A threading event that can be used to cancel the Workflow Execution.
325
327
 
326
- node_output_mocks: Optional[List[Outputs]] = None
327
- A list of Outputs to mock for Nodes during Workflow Execution.
328
+ node_output_mocks: Optional[MockNodeExecutionArg] = None
329
+ A list of Outputs to mock for Nodes during Workflow Execution. Each mock can include a `when_condition`
330
+ that must be met for the mock to be used.
328
331
 
329
332
  max_concurrency: Optional[int] = None
330
333
  The max number of concurrent threads to run the Workflow with. If not provided, the Workflow will run
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vellum-ai
3
- Version: 0.13.21
3
+ Version: 0.13.23
4
4
  Summary:
5
5
  License: MIT
6
6
  Requires-Python: >=3.9,<4.0
@@ -7,14 +7,14 @@ vellum_cli/image_push.py,sha256=SJwhwWJsLjwGNezNVd_oCVpFMfPsAB3dfLWmriZZUtw,4419
7
7
  vellum_cli/logger.py,sha256=PuRFa0WCh4sAGFS5aqWB0QIYpS6nBWwPJrIXpWxugV4,1022
8
8
  vellum_cli/ping.py,sha256=lWyJw6sziXjyTopTYRdFF5hV-sYPVDdX0yVbG5fzcY4,585
9
9
  vellum_cli/pull.py,sha256=7yvg4oBOgsbBEsgXtCpYlNR4AOR8hPICamY-4HI-3kM,9031
10
- vellum_cli/push.py,sha256=qQCI_cHvVjeDGA8FLYmSN7UE_wIJQnUXX_5cGsm9OTs,9076
10
+ vellum_cli/push.py,sha256=j4XLSircGX3aHz35i3HyJ4jynWiEH6xVm1uspavPeLM,9101
11
11
  vellum_cli/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  vellum_cli/tests/conftest.py,sha256=AFYZryKA2qnUuCPBxBKmHLFoPiE0WhBFFej9tNwSHdc,1526
13
13
  vellum_cli/tests/test_config.py,sha256=uvKGDc8BoVyT9_H0Z-g8469zVxomn6Oi3Zj-vK7O_wU,2631
14
14
  vellum_cli/tests/test_main.py,sha256=qDZG-aQauPwBwM6A2DIu1494n47v3pL28XakTbLGZ-k,272
15
15
  vellum_cli/tests/test_ping.py,sha256=QtbhYKMYn1DFnDyBij2mkQO32j9KOpZ5Pf0yek7k_Ao,1284
16
16
  vellum_cli/tests/test_pull.py,sha256=JURmgGs5lSnpzefSx4K13eF2swv7O8OF86-4df81Zjo,25241
17
- vellum_cli/tests/test_push.py,sha256=kcM8jp6vTRBwfk6cAC_tHa4Eliuy_zZ-X1DfIpSEIW0,18299
17
+ vellum_cli/tests/test_push.py,sha256=e0nJlyRQjfRPjXlHm9uh5Z5eGZMzu1lnpEhO35nGlsc,21330
18
18
  vellum_ee/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  vellum_ee/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
20
  vellum_ee/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -77,12 +77,12 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_n
77
77
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=1HaEwIbxzWl2OEEVlsNcHFQKMhUKQPlsIMaHnjvMODI,3754
78
78
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=5eKEMwrKT5O8dPsOgQ89iZwzpA304jneimQeT9GlpLk,2428
79
79
  vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=xmKyOKqGRhWUXXbTbCAXX40qINcvK7mjpEfXz0Ny21s,7404
80
- vellum_ee/workflows/display/types.py,sha256=jWTpfQv3baEWjbP12duc3MBz3TK03Ja1UI5458PVQVY,4211
80
+ vellum_ee/workflows/display/types.py,sha256=s1w2KELKI2kde4G2M3iniOEdPObNKYgYtr31sAgZqRI,2644
81
81
  vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
82
  vellum_ee/workflows/display/utils/vellum.py,sha256=IGHobHz0QG8TWdJNxlQ81khCmJv7piLjE64l4zc33kI,7743
83
- vellum_ee/workflows/display/vellum.py,sha256=-95xvit30nyP6Md29nHkfIrnFButZyCg8wz76oUHD0M,8105
83
+ vellum_ee/workflows/display/vellum.py,sha256=1mcZQQ4gd5GYrVKgIQ3ejy8SqRss2CWUL0KMf44zgUc,8122
84
84
  vellum_ee/workflows/display/workflows/__init__.py,sha256=kapXsC67VJcgSuiBMa86FdePG5A9kMB5Pi4Uy1O2ob4,207
85
- vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=x4C621UTH_SZLJYmVBiC1q-D-wadJlTiSGlKAI6CUbA,14082
85
+ vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=8inuxnxeJbysEhJIGdxLZTvQ2aPJj-OSGmSeotwe7fo,15782
86
86
  vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=kp0u8LN_2IwshLrhMImhpZx1hRyAcD5gXY-kDuuaGMQ,1269
87
87
  vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=yl1ytpl9_lijOGeDPWSypWYRJ7aOEVA7NgUg81jTuCs,2229
88
88
  vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=IiHfMglir81cwPFYnwvgynp79cgzFyYVkMJAABIi3BQ,17035
@@ -108,13 +108,14 @@ vellum_ee/workflows/tests/local_workflow/nodes/final_output.py,sha256=ZX7zBv87zi
108
108
  vellum_ee/workflows/tests/local_workflow/nodes/templating_node.py,sha256=NQwFN61QkHfI3Vssz-B0NKGfupK8PU0FDSAIAhYBLi0,325
109
109
  vellum_ee/workflows/tests/local_workflow/workflow.py,sha256=A4qOzOPNwePYxWbcAgIPLsmrVS_aVEZEc-wULSv787Q,393
110
110
  vellum_ee/workflows/tests/test_display_meta.py,sha256=pzdqND4KLWs7EUIbpXuqgso7BIRpoUsO3T_bgeENs0Q,2205
111
+ vellum_ee/workflows/tests/test_server.py,sha256=SvKUrUPmOf3sIInXcFjETekql60npb4cAn1GPbF0bPs,391
111
112
  vellum_ee/workflows/tests/test_virtual_files.py,sha256=TJEcMR0v2S8CkloXNmCHA0QW0K6pYNGaIjraJz7sFvY,2762
112
- vellum/__init__.py,sha256=BBb9aN9M6-bsnNIhk9YUVAzdW0e9QTdBaiSM5kr5FGU,35474
113
+ vellum/__init__.py,sha256=NPSLAe9-b6SSiyf-FrvMxVy-cKsAEerg8m_HhINTqmE,35794
113
114
  vellum/client/README.md,sha256=JkCJjmMZl4jrPj46pkmL9dpK4gSzQQmP5I7z4aME4LY,4749
114
- vellum/client/__init__.py,sha256=8nZt88C9SVwWanjLbIQMU3rzb32h5UZfFMBx3VPHB50,111887
115
+ vellum/client/__init__.py,sha256=j6zi0NZ4BMC6JrwckvzMWuG5x8KoOvO4KqsLhvVCa68,117624
115
116
  vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
116
117
  vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
117
- vellum/client/core/client_wrapper.py,sha256=5SwzGdamiAC-bG69Fab06ulKRPF_5B1kp_GF6a4fr3g,1869
118
+ vellum/client/core/client_wrapper.py,sha256=u1VLrEPJQZ055tQYEFf0-nEI5ccFS1CB6MysOmwok5g,1869
118
119
  vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
119
120
  vellum/client/core/file.py,sha256=X9IbmkZmB2bB_DpmZAO3crWdXagOakAyn6UCOCImCPg,2322
120
121
  vellum/client/core/http_client.py,sha256=R0pQpCppnEtxccGvXl4uJ76s7ro_65Fo_erlNNLp_AI,19228
@@ -177,7 +178,7 @@ vellum/client/resources/workspace_secrets/__init__.py,sha256=FTtvy8EDg9nNNg9WCat
177
178
  vellum/client/resources/workspace_secrets/client.py,sha256=h7UzXLyTttPq1t-JZGMg1BWxypxJvBGUdqg7KGT7MK4,8027
178
179
  vellum/client/resources/workspaces/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
179
180
  vellum/client/resources/workspaces/client.py,sha256=RthwzN1o-Jxwg5yyNNodavFyNUSxfLoTv26w3mRR5g8,3595
180
- vellum/client/types/__init__.py,sha256=auehBXD_naQD0W9VJNIGNgDxE6kuc7HQaF6aaymjS4s,53468
181
+ vellum/client/types/__init__.py,sha256=HsQa33k5NOOW9zQdCCxp6REWnFHvqqR-vJl0RlNmxh0,53975
181
182
  vellum/client/types/ad_hoc_execute_prompt_event.py,sha256=bCjujA2XsOgyF3bRZbcEqV2rOIymRgsLoIRtZpB14xg,607
182
183
  vellum/client/types/ad_hoc_expand_meta.py,sha256=1gv-NCsy_6xBYupLvZH979yf2VMdxAU-l0y0ynMKZaw,1331
183
184
  vellum/client/types/ad_hoc_fulfilled_prompt_execution_meta.py,sha256=Bfvf1d_dkmshxRACVM5vcxbH_7AQY23RmrrnPc0ytYY,939
@@ -266,6 +267,10 @@ vellum/client/types/ephemeral_prompt_cache_config_type_enum.py,sha256=houFyNbNr9
266
267
  vellum/client/types/error_input.py,sha256=UiYDo7pxeCmW7REuk80ByzUp1hxEQwQCEA5isZc0ZUc,786
267
268
  vellum/client/types/error_vellum_value.py,sha256=Y7yO8Y1eOlbRyOqbOh6MyPRNHYKH48gIhlZIRcw1UaA,726
268
269
  vellum/client/types/error_vellum_value_request.py,sha256=o0aSn34dRcpnAwAfwW_sgwP7CkODGd5448w2Olg-spg,755
270
+ vellum/client/types/execute_api_request_bearer_token.py,sha256=agAhp9lzfzZcYGZdzg2jHAEHCaHlqzbgp6qeeNebcto,183
271
+ vellum/client/types/execute_api_request_body.py,sha256=MArsO_-H41lU8Lz0dB78MVcFupjWtRV7UBEljY3Dnwk,169
272
+ vellum/client/types/execute_api_request_headers_value.py,sha256=bHtGwOpknQDcQo6qtMKqJxaYpvbinDfwx2uaPzyuZ9s,184
273
+ vellum/client/types/execute_api_response.py,sha256=QpUDx-A2tBELMLjxhcHwJyoNm-I0d8QfdCb5f1TAOEE,804
269
274
  vellum/client/types/execute_prompt_event.py,sha256=wq_TZBDJcmXQhSj25jR9nMTnN-mP8Ku5Vq3rLqmwE5Q,521
270
275
  vellum/client/types/execute_prompt_response.py,sha256=n6ODveXcO8uWG-kr_B9wXziHH8JUaVTUcUAZKifClEo,334
271
276
  vellum/client/types/execute_workflow_response.py,sha256=0Q-NGPv5jpxjq6xNlHa3qUNK7yOmkU8h6Z2vQb6bHsU,1022
@@ -357,6 +362,7 @@ vellum/client/types/metadata_filter_config_request.py,sha256=eFmoTIVv4RB6DRaxqyD
357
362
  vellum/client/types/metadata_filter_rule_combinator.py,sha256=3Vpp1Mnv3As7efkxWTeV8qd4gdJ6OLoLhz_UeVBHAX8,165
358
363
  vellum/client/types/metadata_filter_rule_request.py,sha256=Pcs0TsU7CRnsEUoH0DWb-c9DTP2UW67lJKXlsTLXV48,1135
359
364
  vellum/client/types/metadata_filters_request.py,sha256=Yaiu7rkcrV2bCFk6HrZSjuF6V-6JYjZTpzxv7_MFe70,345
365
+ vellum/client/types/method_enum.py,sha256=PekC3BhlCbdqKHL-M8aMG7zEsHFOY9jrANNxysaKa5g,175
360
366
  vellum/client/types/metric_definition_execution.py,sha256=uLi7Wj1b0f5tjiZWbLGLZMLiNOLZ3ofR57WHne116t8,907
361
367
  vellum/client/types/metric_definition_history_item.py,sha256=oR0m0PG_NGpEBSwJ3n-CFi6TJo3o5Y4D_wfaqpk2VxI,1183
362
368
  vellum/client/types/metric_definition_input.py,sha256=4nmwpPqbeNQYCzLkXCkc-FGV5K2Zfa22xqSUe_L6o5s,331
@@ -611,6 +617,7 @@ vellum/client/types/vellum_error_code_enum.py,sha256=OtW7fuM3RrRIDHbbJtk2FxPf70J
611
617
  vellum/client/types/vellum_error_request.py,sha256=RacXJoIgR8MeXXWDMI76pkxLBhCRgHnbj-aIJytZtP4,650
612
618
  vellum/client/types/vellum_image.py,sha256=wkFRgxOkxFPrmRdWTO58_41_vk0HYn5k4xsc-5ywxEs,637
613
619
  vellum/client/types/vellum_image_request.py,sha256=_Gr4L7PSY8PNQINyTy04hPdwLc8_bR1RTUWZ73RQRYM,644
620
+ vellum/client/types/vellum_secret.py,sha256=jru3nBCquZHZ3wEdpgKZNmy2WFh26PVKrTNaXeVSsZQ,555
614
621
  vellum/client/types/vellum_value.py,sha256=fpLQ84tTHb2OQK162TIqmfwa2_31M9NAmkzA1DIPAGY,969
615
622
  vellum/client/types/vellum_value_logical_condition_group_request.py,sha256=vyr6lhHuS-6YtcFL5TTmPGtKRoNI9w63N7N2RPQwKVQ,1402
616
623
  vellum/client/types/vellum_value_logical_condition_request.py,sha256=HkZfj4X48UHFrPDHgUi3lp0MUGBMfroC0noNqZ_rW8o,1177
@@ -693,7 +700,7 @@ vellum/evaluations/utils/env.py,sha256=Xj_nxsoU5ox06EOTjRopR4lrigQI6Le6qbWGltYoE
693
700
  vellum/evaluations/utils/exceptions.py,sha256=dXMAkzqbHV_AP5FjjbegPlfUE0zQDlpA3qOsoOJUxfg,49
694
701
  vellum/evaluations/utils/paginator.py,sha256=rEED_BJAXAM6tM1yMwHePNzszjq_tTq4NbQvi1jWQ_Q,697
695
702
  vellum/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
696
- vellum/plugins/pydantic.py,sha256=dNtZWHo-IdseG52C2RoTanxyTJg0AhPZrH-9lbNqwYg,2604
703
+ vellum/plugins/pydantic.py,sha256=BMUwC4OkxtNf6hpLwb0T4MBUKgkGy55T_5Ww7GHpHYo,3068
697
704
  vellum/plugins/utils.py,sha256=U9ZY9KdE3RRvbcG01hXxu9CvfJD6Fo7nJDgcHjQn0FI,606
698
705
  vellum/plugins/vellum_mypy.py,sha256=QTuMSq6PiZW1dyTUZ5Bf1d4XkgFj0TKAgZLP8f4UgL4,27914
699
706
  vellum/prompts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -840,6 +847,10 @@ vellum/types/ephemeral_prompt_cache_config_type_enum.py,sha256=2UZs7ueVFNQA-v_40
840
847
  vellum/types/error_input.py,sha256=8ecGTnmZjqmxueqZyOjNkCasQ2Zg7qR0rzhDmFwLF4c,149
841
848
  vellum/types/error_vellum_value.py,sha256=eALdKdSBCedvLdSjhg4xJeoTzjf2fNr-BqlhRG5fS5o,156
842
849
  vellum/types/error_vellum_value_request.py,sha256=4wB0ZFHx9wEluEDqwY8aTYLK5Gy07Gxd6mfJ4YPsP9g,164
850
+ vellum/types/execute_api_request_bearer_token.py,sha256=Xu9SNdqkvilFOWuHnrA688biVOIeiRzuwidHflx5mPg,170
851
+ vellum/types/execute_api_request_body.py,sha256=ulfvgCNEXbzdnuwyRu2qMM93zIZSIGgq1PlB41pFvwQ,162
852
+ vellum/types/execute_api_request_headers_value.py,sha256=lAMglvqWdhpku8kfrNGYbA6QomWunvNS9xZ92sxnIEM,171
853
+ vellum/types/execute_api_response.py,sha256=NNFaOCwse1BGtN6XBTG1h9cU7Iy3ErdIrbgK_pQbs6c,158
843
854
  vellum/types/execute_prompt_event.py,sha256=zLtvzIZijE-L7Nc3jNmvbu9UkKwjEILOs9RjHWYe7qs,158
844
855
  vellum/types/execute_prompt_response.py,sha256=pSfHv_pQjYAudCsMDfsHdAXM0H-5MLAwdVv1145up2A,161
845
856
  vellum/types/execute_workflow_response.py,sha256=zDo_qlLq83gciC7VL-O2C9vw0n4_15eE9iNCcOqUQxA,163
@@ -931,6 +942,7 @@ vellum/types/metadata_filter_config_request.py,sha256=uN2zNxSJxm-2Eehu1LibowL5w4
931
942
  vellum/types/metadata_filter_rule_combinator.py,sha256=bHx8PgGv5n_3cC-blXV20DKekL6YV3_pidyMKkJ8r_I,169
932
943
  vellum/types/metadata_filter_rule_request.py,sha256=LULGRo2_1WXc8GbFQioEzB1BfAfcOONwSgrRpwXlQig,166
933
944
  vellum/types/metadata_filters_request.py,sha256=Czs4HD9ibSdtX026v3NMur6L6wKOYYkvd5Em1-UVI2o,162
945
+ vellum/types/method_enum.py,sha256=ZuFW7Kh-SyyBNT4Kkw3HCj1CL_GBrbLFbN-7XJxw2JM,149
934
946
  vellum/types/metric_definition_execution.py,sha256=Yx5b1CygziiPLjlZDQF0lVVI7ubRLVJn16vT3N7zmHQ,165
935
947
  vellum/types/metric_definition_history_item.py,sha256=OUGYJ9yHc60QiYh_C8-YuA1zHeQ9v5lShdaJ5KEl-1c,168
936
948
  vellum/types/metric_definition_input.py,sha256=TwMwjC_MNiLdodsvT52D7aa_wRY-0kT047flY3sFxII,161
@@ -1185,6 +1197,7 @@ vellum/types/vellum_error_code_enum.py,sha256=as6FP8wBHB5lTQ80x1d_G_i3Vu7i5EWUuk
1185
1197
  vellum/types/vellum_error_request.py,sha256=gjU_A4UWh91mirqIlPzX84iEmMT7JR3DoMPjDw9_2mQ,158
1186
1198
  vellum/types/vellum_image.py,sha256=Aju40iIofNXNiPw0gBG1BuV6FR16ZecNDORCPPB4oio,150
1187
1199
  vellum/types/vellum_image_request.py,sha256=ZNSTZub8Kuy0Arr3CriVgLojE5MZMnIongnx0Pq4QMA,158
1200
+ vellum/types/vellum_secret.py,sha256=-eRj7iUevkqFnRgVIjYTDGZUx9_zhY-olHzBVyWXuvs,151
1188
1201
  vellum/types/vellum_value.py,sha256=me0nmquE3UPpT47q6kzRKFFrTzTw4-q9lR1eK-A-1ow,150
1189
1202
  vellum/types/vellum_value_logical_condition_group_request.py,sha256=cdvckQ3IKVoxNIx2PGyGsBXxOGK39T4P_xEP9fDWJss,182
1190
1203
  vellum/types/vellum_value_logical_condition_request.py,sha256=R3qtJZw6Uo3Qh9MHyIZxWXrVssI3QtQopktdVN2UdSQ,176
@@ -1318,36 +1331,38 @@ vellum/workflows/nodes/core/__init__.py,sha256=5zDMCmyt1v0HTJzlUBwq3U9L825yZGZhT
1318
1331
  vellum/workflows/nodes/core/error_node/__init__.py,sha256=g7RRnlHhqu4qByfLjBwCunmgGA8dI5gNsjS3h6TwlSI,60
1319
1332
  vellum/workflows/nodes/core/error_node/node.py,sha256=MFHU5vITYSK-L9CuMZ49In2ZeNLWnhZD0f8r5dWvb5Y,1270
1320
1333
  vellum/workflows/nodes/core/inline_subworkflow_node/__init__.py,sha256=nKNEH1QTl-1PcvmYoqSWEl0-t6gAur8GLTXHzklRQfM,84
1321
- vellum/workflows/nodes/core/inline_subworkflow_node/node.py,sha256=yOVuY-J2IHCdOwt9VriSZwBRngB9MlFzmAmehqXMqlo,5891
1334
+ vellum/workflows/nodes/core/inline_subworkflow_node/node.py,sha256=q0uuS1Coen5_GgAUlZFKeYmCExjBbKxC74Ove-piTGI,5969
1322
1335
  vellum/workflows/nodes/core/inline_subworkflow_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1323
1336
  vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py,sha256=n0-821Ov9ZfRFX_lbzLy5o2rX8fEw2qoxz0aFWCOxVg,1547
1324
1337
  vellum/workflows/nodes/core/map_node/__init__.py,sha256=MXpZYmGfhsMJHqqlpd64WiJRtbAtAMQz-_3fCU_cLV0,56
1325
- vellum/workflows/nodes/core/map_node/node.py,sha256=bjCVMAzkqJUvaLWVBObjskcutwLGrgfTMHXcAcOnra8,8085
1338
+ vellum/workflows/nodes/core/map_node/node.py,sha256=zL0mN0CAJ8NL-Uaqn4o2kSiw3jYgxrwJraQdMdrz848,8159
1326
1339
  vellum/workflows/nodes/core/map_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1327
1340
  vellum/workflows/nodes/core/map_node/tests/test_node.py,sha256=P7ImQyeLcK-aEJUYCX1gPQyuOxdxnSPpI3mNPpKQ62Y,1919
1328
1341
  vellum/workflows/nodes/core/retry_node/__init__.py,sha256=lN2bIy5a3Uzhs_FYCrooADyYU6ZGShtvLKFWpelwPvo,60
1329
- vellum/workflows/nodes/core/retry_node/node.py,sha256=WD96o-eOj3dwEEe2nqxwBbmLTIyPRYB3Lk4T6XHRX74,4214
1342
+ vellum/workflows/nodes/core/retry_node/node.py,sha256=loIZJUcCsN0y3mr4pw7f23l4eDY69IoTwA2TMnxJlxA,4292
1330
1343
  vellum/workflows/nodes/core/retry_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1331
1344
  vellum/workflows/nodes/core/retry_node/tests/test_node.py,sha256=RM_OHwxrHwyxvlQQBJPqVBxpedFuWQ9h2-Xa3kP75sc,4399
1332
1345
  vellum/workflows/nodes/core/templating_node/__init__.py,sha256=GmyuYo81_A1_Bz6id69ozVFS6FKiuDsZTiA3I6MaL2U,70
1333
1346
  vellum/workflows/nodes/core/templating_node/node.py,sha256=zCYhq88qLTvoC9LetVrD9sLXkwHZsaWekxMhru_nV70,3752
1334
1347
  vellum/workflows/nodes/core/templating_node/tests/test_templating_node.py,sha256=5iZWQWdJKDHMXBY8bhpb-Dpy9FTfW1HXxGUTivykZAA,4621
1335
1348
  vellum/workflows/nodes/core/try_node/__init__.py,sha256=JVD4DrldTIqFQQFrubs9KtWCCc0YCAc7Fzol5ZWIWeM,56
1336
- vellum/workflows/nodes/core/try_node/node.py,sha256=_lTmSYCiz7lktaxpNWUCglNi8_5Sfy8Rpiov5SeKVMw,3920
1349
+ vellum/workflows/nodes/core/try_node/node.py,sha256=bk2uhYUl10yaPJlOBWxiL7igTUrL_7mM9S2nvsdWB68,4242
1337
1350
  vellum/workflows/nodes/core/try_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1338
1351
  vellum/workflows/nodes/core/try_node/tests/test_node.py,sha256=Wc2kLl-MkffsBxl3IiFaqLd16e2Iosxhk7qBnojPvQg,4092
1339
1352
  vellum/workflows/nodes/displayable/__init__.py,sha256=6F_4DlSwvHuilWnIalp8iDjjDXl0Nmz4QzJV2PYe5RI,1023
1340
1353
  vellum/workflows/nodes/displayable/api_node/__init__.py,sha256=MoxdQSnidIj1Nf_d-hTxlOxcZXaZnsWFDbE-PkTK24o,56
1341
- vellum/workflows/nodes/displayable/api_node/node.py,sha256=KHuDTzOeXO3lCQm3lQqusAEhj84dhvszVpO1Xsx4qPM,2175
1354
+ vellum/workflows/nodes/displayable/api_node/node.py,sha256=QdpsyGVxo5PcN8nwGZpcpW_YMKHr3_VvmbK1BlrdOFk,2547
1355
+ vellum/workflows/nodes/displayable/api_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1356
+ vellum/workflows/nodes/displayable/api_node/tests/test_api_node.py,sha256=yo3zTMRxgpSdWmJ68X610A5rrtCchyfqhcDd2X-GJiU,1249
1342
1357
  vellum/workflows/nodes/displayable/bases/__init__.py,sha256=0mWIx3qUrzllV7jqt7wN03vWGMuI1WrrLZeMLT2Cl2c,304
1343
1358
  vellum/workflows/nodes/displayable/bases/api_node/__init__.py,sha256=1jwx4WC358CLA1jgzl_UD-rZmdMm2v9Mps39ndwCD7U,64
1344
- vellum/workflows/nodes/displayable/bases/api_node/node.py,sha256=kKiwrz8XGJkvFjipBthxs9h1e2ndWPgmpEzZiYs0I5I,2579
1359
+ vellum/workflows/nodes/displayable/bases/api_node/node.py,sha256=nIFkP7eeXXSzOVUoQgjPPCzy3_P083X_F5fCm2OAjdU,3798
1345
1360
  vellum/workflows/nodes/displayable/bases/base_prompt_node/__init__.py,sha256=Org3xTvgp1pA0uUXFfnJr29D3HzCey2lEdYF4zbIUgo,70
1346
1361
  vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py,sha256=r_gOmeGFQQfzhAc1_bmzcwUvH-Xllc93gE7miTV4rQE,2824
1347
1362
  vellum/workflows/nodes/displayable/bases/inline_prompt_node/__init__.py,sha256=Hl35IAoepRpE-j4cALaXVJIYTYOF3qszyVbxTj4kS1s,82
1348
1363
  vellum/workflows/nodes/displayable/bases/inline_prompt_node/constants.py,sha256=fnjiRWLoRlC4Puo5oQcpZD5Hd-EesxsAo9l5tGAkpZQ,270
1349
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py,sha256=j6AKAVIl_uU77a6JMGnMTyFnnK-jsfPVthxrgbltQRE,6453
1350
- vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py,sha256=FAY6cR3rlIWsufprA6WXefOaU2J1LK0HFfQkBxCQ-yI,5181
1364
+ vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py,sha256=UrmI8NkNJFGq9f59gD12S1e8D_R3ROHc934JmtfQk9I,6841
1365
+ vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py,sha256=NbwLOoWG5VVcnwL63WmaYck87y2QW36-JQWerOlKyx4,5713
1351
1366
  vellum/workflows/nodes/displayable/bases/search_node.py,sha256=3UtbqY3QO4kzfJHbmUNZGnEEfJmaoiF892u8H6TGjp8,5381
1352
1367
  vellum/workflows/nodes/displayable/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1353
1368
  vellum/workflows/nodes/displayable/bases/tests/test_utils.py,sha256=eqdqbKNRWVMDPevgwLg1i6YK0g4L4bCy-7xCBN5yYZI,3156
@@ -1358,8 +1373,8 @@ vellum/workflows/nodes/displayable/code_execution_node/node.py,sha256=KZ5d3_mdps
1358
1373
  vellum/workflows/nodes/displayable/code_execution_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1359
1374
  vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1360
1375
  vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/main.py,sha256=5QsbmkzSlSbcbWTG_JmIqcP-JNJzOPTKxGzdHos19W4,79
1361
- vellum/workflows/nodes/displayable/code_execution_node/tests/test_code_execution_node.py,sha256=ueVDw0GTSGzBZMFLs0NTir_0AE-pUrAYvpgg3Stex7Q,12350
1362
- vellum/workflows/nodes/displayable/code_execution_node/utils.py,sha256=zRYM7B2t7355LzaAn6LkIn4tM5K7eQ0Kvje4NO6Kq30,3443
1376
+ vellum/workflows/nodes/displayable/code_execution_node/tests/test_code_execution_node.py,sha256=zrSgkUGaaTy-cv9h5kLBnao1Aobcn02w39wmcUx7X3I,13224
1377
+ vellum/workflows/nodes/displayable/code_execution_node/utils.py,sha256=hF9tdCpta7WN1ANz467Q9LNlISOSmp79jDIkR5d2iQM,3542
1363
1378
  vellum/workflows/nodes/displayable/conditional_node/__init__.py,sha256=AS_EIqFdU1F9t8aLmbZU-rLh9ry6LCJ0uj0D8F0L5Uw,72
1364
1379
  vellum/workflows/nodes/displayable/conditional_node/node.py,sha256=Qjfl33gZ3JEgxBA1EgzSUebboGvsARthIxxcQyvx5Gg,1152
1365
1380
  vellum/workflows/nodes/displayable/final_output_node/__init__.py,sha256=G7VXM4OWpubvSJtVkGmMNeqgb9GkM7qZT838eL18XU4,72
@@ -1369,19 +1384,23 @@ vellum/workflows/nodes/displayable/guardrail_node/node.py,sha256=h5nIBzQxbXTrdTq
1369
1384
  vellum/workflows/nodes/displayable/inline_prompt_node/__init__.py,sha256=gSUOoEZLlrx35-tQhSAd3An8WDwBqyiQh-sIebLU9wU,74
1370
1385
  vellum/workflows/nodes/displayable/inline_prompt_node/node.py,sha256=UWOxIa3kizhDa5joAmEDlh0P66EaqatqxzLLbvbUybw,2294
1371
1386
  vellum/workflows/nodes/displayable/inline_prompt_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1372
- vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py,sha256=BEKdts18soB6gaW_d3VbhDy7IFzFmC76j5lRYiTOj44,6643
1387
+ vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py,sha256=BoUdteHm582tnVaWnums69uJ3GIbE7M-vgQSHl7VSJs,8539
1373
1388
  vellum/workflows/nodes/displayable/merge_node/__init__.py,sha256=J8IC08dSH7P76wKlNuxe1sn7toNGtSQdFirUbtPDEs0,60
1374
1389
  vellum/workflows/nodes/displayable/merge_node/node.py,sha256=nZtGGVAvY4fvGg8vwV6sTQ8_QLRnigeXt0vf2FL272A,450
1375
1390
  vellum/workflows/nodes/displayable/note_node/__init__.py,sha256=KWA3P4fyYJ-fOTky8qNGlcOotQ-HeHJ9AjZt6mRQmCE,58
1376
1391
  vellum/workflows/nodes/displayable/note_node/node.py,sha256=sIN1VBQ7zeT3GhN0kupXbFfdpvgedWV79k4woJNp5IQ,394
1377
1392
  vellum/workflows/nodes/displayable/prompt_deployment_node/__init__.py,sha256=krX1Hds-TSVYZsx0wJFX4wsAKkEFYOX1ifwRGiIM-EA,82
1378
1393
  vellum/workflows/nodes/displayable/prompt_deployment_node/node.py,sha256=ruOgvpg_9KV_HkovPQeu6TKpur9DT_J4CYQo50tULCY,2680
1394
+ vellum/workflows/nodes/displayable/prompt_deployment_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1395
+ vellum/workflows/nodes/displayable/prompt_deployment_node/tests/test_node.py,sha256=ymEwMwrwRuQGyvkTnqeRZvfK7dhnf-kmRJTuwlycNjI,3939
1379
1396
  vellum/workflows/nodes/displayable/search_node/__init__.py,sha256=hpBpvbrDYf43DElRZFLzieSn8weXiwNiiNOJurERQbs,62
1380
1397
  vellum/workflows/nodes/displayable/search_node/node.py,sha256=_VHHuTNN4icZBgc7O5U9SVKrv1zgKipU72fOtxTyrQU,1453
1381
1398
  vellum/workflows/nodes/displayable/search_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1382
1399
  vellum/workflows/nodes/displayable/search_node/tests/test_node.py,sha256=2-QCV7Vk_-YMls33p0GOUtCv3f2uPNZCjkB2CRjek7o,6562
1383
1400
  vellum/workflows/nodes/displayable/subworkflow_deployment_node/__init__.py,sha256=9yYM6001YZeqI1VOk1QuEM_yrffk_EdsO7qaPzINKds,92
1384
- vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py,sha256=rDBB94bs9k-I9zmf3C0L_5wO3wW4WBuRXi5ry0rTGRY,7328
1401
+ vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py,sha256=sSRo_zX5QVI7V0qmReWMBkEa78HfQfjNIKwvKh7-Om8,8307
1402
+ vellum/workflows/nodes/displayable/subworkflow_deployment_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1403
+ vellum/workflows/nodes/displayable/subworkflow_deployment_node/tests/test_node.py,sha256=c8RP-QnsERzIinVytAc0jVZ9nd7Jl3hbc9-_yG91Ros,5445
1385
1404
  vellum/workflows/nodes/displayable/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1386
1405
  vellum/workflows/nodes/displayable/tests/test_inline_text_prompt_node.py,sha256=CI7iMyyIlnds1rkVSjICOFg2UY0yV51NTKtKpfeEME4,4677
1387
1406
  vellum/workflows/nodes/displayable/tests/test_search_node_wth_text_output.py,sha256=VepO5z1277c1y5N6LLIC31nnWD1aak2m5oPFplfJHHs,6935
@@ -1390,6 +1409,7 @@ vellum/workflows/nodes/experimental/README.md,sha256=eF6DfIL8t-HbF9-mcofOMymKrra
1390
1409
  vellum/workflows/nodes/experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1391
1410
  vellum/workflows/nodes/experimental/openai_chat_completion_node/__init__.py,sha256=lsyD9laR9p7kx5-BXGH2gUTM242UhKy8SMV0SR6S2iE,90
1392
1411
  vellum/workflows/nodes/experimental/openai_chat_completion_node/node.py,sha256=1EGeiaT-Zoo6pttQFKKBcdf3dmhAbjKGaErYD5FFwlc,10185
1412
+ vellum/workflows/nodes/mocks.py,sha256=gvM2tyoe-V84jFbFdhQsyGAPyQBzmjn_CkhT_yxccgY,499
1393
1413
  vellum/workflows/nodes/utils.py,sha256=T7krLipDSI007JkkH2zsfyQ-tfOBH4hyFzQ0YJKYpuw,4025
1394
1414
  vellum/workflows/outputs/__init__.py,sha256=AyZ4pRh_ACQIGvkf0byJO46EDnSix1ZCAXfvh-ms1QE,94
1395
1415
  vellum/workflows/outputs/base.py,sha256=Wu48tqyQoxpflBUcwzKeZjSVp1LPKrBwuIvnx__9H90,8459
@@ -1412,11 +1432,11 @@ vellum/workflows/references/workflow_input.py,sha256=86IuhlBz-9cGxeUzizyjdp482aj
1412
1432
  vellum/workflows/resolvers/__init__.py,sha256=eH6hTvZO4IciDaf_cf7aM2vs-DkBDyJPycOQevJxQnI,82
1413
1433
  vellum/workflows/resolvers/base.py,sha256=WHra9LRtlTuB1jmuNqkfVE2JUgB61Cyntn8f0b0WZg4,411
1414
1434
  vellum/workflows/runner/__init__.py,sha256=i1iG5sAhtpdsrlvwgH6B-m49JsINkiWyPWs8vyT-bqM,72
1415
- vellum/workflows/runner/runner.py,sha256=vGd5yfx4udwvGHkbFElDtsre__3JD8zIqhx6ZreRwN4,29172
1435
+ vellum/workflows/runner/runner.py,sha256=kgfNtVGMdx3nLM0K4upflz-k5iJMKQuwm9MkKDygSuE,28845
1416
1436
  vellum/workflows/sandbox.py,sha256=GVJzVjMuYzOBnSrboB0_6MMRZWBluAyQ2o7syeaeBd0,2235
1417
1437
  vellum/workflows/state/__init__.py,sha256=yUUdR-_Vl7UiixNDYQZ-GEM_kJI9dnOia75TtuNEsnE,60
1418
1438
  vellum/workflows/state/base.py,sha256=IIl76sJtn0GfbFWBqMnpGuvtZyVyQMEXv0QKDfLy8Wg,14763
1419
- vellum/workflows/state/context.py,sha256=_NeGQpYo8yNuh0Tfh3OvcB_bG_-GC8b3ZLLl83Pf8-I,1279
1439
+ vellum/workflows/state/context.py,sha256=80b7j11AuG6engdur-AH0dUPnbwu8QyzF_-crWmvUvI,2588
1420
1440
  vellum/workflows/state/encoder.py,sha256=WdUidpOaBDx5lilJl8V8McFDHQYiCLCJR9dmktdzdZY,1836
1421
1441
  vellum/workflows/state/store.py,sha256=VYGBQgN1bpd1as5eGiouV_7scg8QsRs4_1aqZAGIsRQ,793
1422
1442
  vellum/workflows/state/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1425,7 +1445,6 @@ vellum/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
1425
1445
  vellum/workflows/tests/test_sandbox.py,sha256=JKwaluI-lODQo7Ek9sjDstjL_WTdSqUlVik6ZVTfVOA,1826
1426
1446
  vellum/workflows/types/__init__.py,sha256=KxUTMBGzuRCfiMqzzsykOeVvrrkaZmTTo1a7SLu8gRM,68
1427
1447
  vellum/workflows/types/core.py,sha256=kMQremh_I8egXpiKmtMQbB6e3OczAWiRnnTq5V6xlD0,928
1428
- vellum/workflows/types/cycle_map.py,sha256=-ZMQsKzZBpCi0bchJrkuN_dtCFuz9uFABy7Fq2PI58E,928
1429
1448
  vellum/workflows/types/generics.py,sha256=9HzFvtcF8qpn1wcsly7er250MMwdS9r-BjSVco9UBj4,584
1430
1449
  vellum/workflows/types/stack.py,sha256=RDSGLkcV612ge8UuAH9TZiEGXxJt0Av2-H5rfzrTVVI,1014
1431
1450
  vellum/workflows/types/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1443,10 +1462,10 @@ vellum/workflows/utils/uuids.py,sha256=DFzPv9RCvsKhvdTEIQyfSek2A31D6S_QcmeLPbgrg
1443
1462
  vellum/workflows/utils/vellum_variables.py,sha256=g5xHYB8etfHE32ek19nP6Anf8NyjhmUtOwO2KmQ5xZU,3111
1444
1463
  vellum/workflows/vellum_client.py,sha256=ODrq_TSl-drX2aezXegf7pizpWDVJuTXH-j6528t75s,683
1445
1464
  vellum/workflows/workflows/__init__.py,sha256=KY45TqvavCCvXIkyCFMEc0dc6jTMOUci93U2DUrlZYc,66
1446
- vellum/workflows/workflows/base.py,sha256=kL4lxTdhaupw58sqzCutI5K8tDSfk2gHXDddCrg6FGA,18265
1465
+ vellum/workflows/workflows/base.py,sha256=uYT0TQnEDtVaH3pErq785FhxxEEmk7C5ZGfuSO3QK8c,18537
1447
1466
  vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnadGsrSZGa7t7LpJA,2008
1448
- vellum_ai-0.13.21.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1449
- vellum_ai-0.13.21.dist-info/METADATA,sha256=DVUX-LtxUw5KFTUz0NzF92v-sCkAczyHJ9zDeDfD3og,5335
1450
- vellum_ai-0.13.21.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1451
- vellum_ai-0.13.21.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1452
- vellum_ai-0.13.21.dist-info/RECORD,,
1467
+ vellum_ai-0.13.23.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1468
+ vellum_ai-0.13.23.dist-info/METADATA,sha256=xeS3VmSv44WirfJlZ93OLirCl4GNlureoXjhZfDymC4,5335
1469
+ vellum_ai-0.13.23.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1470
+ vellum_ai-0.13.23.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1471
+ vellum_ai-0.13.23.dist-info/RECORD,,
vellum_cli/push.py CHANGED
@@ -49,6 +49,9 @@ def push_command(
49
49
  else config.workflows
50
50
  )
51
51
 
52
+ if len(workflow_configs) > 1 and workspace:
53
+ workflow_configs = [w for w in workflow_configs if w.workspace == workspace]
54
+
52
55
  if len(workflow_configs) == 0:
53
56
  raise ValueError(f"No workflow config for '{module}' found in project to push.")
54
57
 
@@ -230,15 +233,11 @@ def push_command(
230
233
  Visit at: https://app.vellum.ai/workflow-sandboxes/{response.workflow_sandbox_id}"""
231
234
  )
232
235
 
233
- requires_save = False
234
236
  if not workflow_config.workflow_sandbox_id:
235
237
  workflow_config.workflow_sandbox_id = response.workflow_sandbox_id
236
- requires_save = True
237
238
 
238
239
  if not workflow_config.deployments and response.workflow_deployment_id:
239
240
  workflow_config.deployments.append(WorkflowDeploymentConfig(id=UUID(response.workflow_deployment_id)))
240
- requires_save = True
241
241
 
242
- if requires_save:
243
- config.save()
244
- logger.info("Updated vellum.lock file.")
242
+ config.save()
243
+ logger.info("Updated vellum.lock.json file.")
@@ -489,7 +489,7 @@ MY_OTHER_VELLUM_API_KEY=aaabbbcccddd
489
489
 
490
490
  # AND the workflow sandbox id arg passed in should be `None`
491
491
  call_args = vellum_client_class.return_value.workflows.push.call_args.kwargs
492
- assert call_args["workflow_sandbox_id"] is None
492
+ assert call_args["workflow_sandbox_id"] is None, result.output
493
493
 
494
494
  # AND with the correct api key
495
495
  vellum_client_class.assert_called_once_with(
@@ -509,3 +509,83 @@ MY_OTHER_VELLUM_API_KEY=aaabbbcccddd
509
509
  "deployments": [],
510
510
  "ignore": None,
511
511
  }
512
+
513
+
514
+ def test_push__workspace_option__both_options_already_configured(mock_module, vellum_client_class):
515
+ # GIVEN a single workflow configured
516
+ temp_dir = mock_module.temp_dir
517
+ module = mock_module.module
518
+ workflow_sandbox_id = mock_module.workflow_sandbox_id
519
+ set_pyproject_toml = mock_module.set_pyproject_toml
520
+ second_workflow_sandbox_id = str(uuid4())
521
+
522
+ # AND the module is configured twice
523
+ set_pyproject_toml(
524
+ {
525
+ "workflows": [
526
+ {
527
+ "module": module,
528
+ "workflow_sandbox_id": workflow_sandbox_id,
529
+ },
530
+ {
531
+ "module": module,
532
+ "workflow_sandbox_id": second_workflow_sandbox_id,
533
+ "workspace": "my_other_workspace",
534
+ },
535
+ ],
536
+ "workspaces": [
537
+ {
538
+ "name": "my_other_workspace",
539
+ "api_key": "MY_OTHER_VELLUM_API_KEY",
540
+ }
541
+ ],
542
+ }
543
+ )
544
+
545
+ # AND the .env file has the other api key stored
546
+ with open(os.path.join(temp_dir, ".env"), "w") as f:
547
+ f.write(
548
+ """\
549
+ VELLUM_API_KEY=abcdef123456
550
+ MY_OTHER_VELLUM_API_KEY=aaabbbcccddd
551
+ """
552
+ )
553
+
554
+ # AND a workflow exists in the module
555
+ _ensure_workflow_py(temp_dir, module)
556
+
557
+ # AND the push API call returns workflow sandbox id
558
+ vellum_client_class.return_value.workflows.push.return_value = WorkflowPushResponse(
559
+ workflow_sandbox_id=second_workflow_sandbox_id,
560
+ )
561
+
562
+ # WHEN calling `vellum push` on strict mode
563
+ runner = CliRunner()
564
+ result = runner.invoke(cli_main, ["push", module, "--workspace", "my_other_workspace"])
565
+
566
+ # THEN it should succeed
567
+ assert result.exit_code == 0, result.output
568
+
569
+ # AND we should have called the push API once
570
+ vellum_client_class.return_value.workflows.push.assert_called_once()
571
+
572
+ # AND the workflow sandbox id arg passed in should be `None`
573
+ call_args = vellum_client_class.return_value.workflows.push.call_args.kwargs
574
+ assert call_args["workflow_sandbox_id"] == second_workflow_sandbox_id
575
+
576
+ # AND with the correct api key
577
+ vellum_client_class.assert_called_once_with(
578
+ api_key="aaabbbcccddd",
579
+ environment=mock.ANY,
580
+ )
581
+
582
+ # AND the vellum lock file should have the same two workflows
583
+ with open(os.path.join(temp_dir, "vellum.lock.json")) as f:
584
+ lock_file_content = json.load(f)
585
+ assert len(lock_file_content["workflows"]) == 2
586
+ assert lock_file_content["workflows"][0]["module"] == module
587
+ assert lock_file_content["workflows"][0]["workflow_sandbox_id"] == workflow_sandbox_id
588
+ assert lock_file_content["workflows"][0]["workspace"] == "default"
589
+ assert lock_file_content["workflows"][1]["module"] == module
590
+ assert lock_file_content["workflows"][1]["workflow_sandbox_id"] == second_workflow_sandbox_id
591
+ assert lock_file_content["workflows"][1]["workspace"] == "my_other_workspace"
@@ -14,11 +14,10 @@ from vellum_ee.workflows.display.base import (
14
14
  WorkflowMetaDisplayType,
15
15
  WorkflowOutputDisplayType,
16
16
  )
17
- from vellum_ee.workflows.display.nodes.base_node_vellum_display import BaseNodeVellumDisplay
18
- from vellum_ee.workflows.display.nodes.types import NodeOutputDisplay, PortDisplay
19
17
 
20
18
  if TYPE_CHECKING:
21
19
  from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
20
+ from vellum_ee.workflows.display.nodes.types import NodeOutputDisplay, PortDisplay
22
21
  from vellum_ee.workflows.display.workflows import BaseWorkflowDisplay
23
22
 
24
23
  NodeDisplayType = TypeVar("NodeDisplayType", bound="BaseNodeDisplay")
@@ -63,32 +62,3 @@ class WorkflowDisplayContext(
63
62
  workflow_output_displays: Dict[BaseDescriptor, WorkflowOutputDisplayType] = field(default_factory=dict)
64
63
  edge_displays: Dict[Tuple[Port, Type[BaseNode]], EdgeDisplayType] = field(default_factory=dict)
65
64
  port_displays: Dict[Port, "PortDisplay"] = field(default_factory=dict)
66
-
67
- def build_event_display_context(self) -> WorkflowEventDisplayContext:
68
- workflow_outputs = {
69
- output.name: self.workflow_output_displays[output].id for output in self.workflow_output_displays
70
- }
71
- workflow_inputs = {input.name: self.workflow_input_displays[input].id for input in self.workflow_input_displays}
72
- node_displays = {str(node.__id__): self.node_displays[node] for node in self.node_displays}
73
- temp_node_displays = {}
74
- for node in node_displays:
75
- current_node = node_displays[node]
76
- input_display = {}
77
- if issubclass(current_node.__class__, BaseNodeVellumDisplay):
78
- input_display = current_node.node_input_ids_by_name # type: ignore[attr-defined]
79
- node_display_meta = {
80
- output.name: current_node.output_display[output].id for output in current_node.output_display
81
- }
82
- port_display_meta = {port.name: current_node.port_displays[port].id for port in current_node.port_displays}
83
-
84
- temp_node_displays[node] = NodeDisplay(
85
- input_display=input_display,
86
- output_display=node_display_meta,
87
- port_display=port_display_meta,
88
- )
89
- display_meta = WorkflowEventDisplayContext(
90
- workflow_outputs=workflow_outputs,
91
- workflow_inputs=workflow_inputs,
92
- node_displays=temp_node_displays,
93
- )
94
- return display_meta
@@ -113,8 +113,8 @@ class WorkflowOutputVellumDisplayOverrides(WorkflowOutputDisplay, WorkflowOutput
113
113
  name: str
114
114
  label: str
115
115
  node_id: UUID
116
- target_handle_id: UUID
117
116
  display_data: NodeDisplayData
117
+ target_handle_id: Optional[UUID] = None
118
118
 
119
119
 
120
120
  @dataclass
@@ -29,9 +29,15 @@ from vellum_ee.workflows.display.base import (
29
29
  WorkflowOutputDisplayOverridesType,
30
30
  WorkflowOutputDisplayType,
31
31
  )
32
+ from vellum_ee.workflows.display.nodes.base_node_vellum_display import BaseNodeVellumDisplay
32
33
  from vellum_ee.workflows.display.nodes.get_node_display_class import get_node_display_class
33
34
  from vellum_ee.workflows.display.nodes.types import NodeOutputDisplay, PortDisplay, PortDisplayOverrides
34
- from vellum_ee.workflows.display.types import NodeDisplayType, WorkflowDisplayContext, WorkflowEventDisplayContext
35
+ from vellum_ee.workflows.display.types import (
36
+ NodeDisplay,
37
+ NodeDisplayType,
38
+ WorkflowDisplayContext,
39
+ WorkflowEventDisplayContext,
40
+ )
35
41
 
36
42
  logger = logging.getLogger(__name__)
37
43
 
@@ -343,4 +349,42 @@ class BaseWorkflowDisplay(
343
349
  display_class = importlib.import_module(workflow_display_module)
344
350
  except ModuleNotFoundError:
345
351
  return None
346
- return display_class.WorkflowDisplay(workflow_class).display_context.build_event_display_context()
352
+
353
+ display_context = display_class.WorkflowDisplay(workflow_class).display_context
354
+ if not isinstance(display_context, WorkflowDisplayContext):
355
+ return None
356
+
357
+ workflow_outputs = {
358
+ output.name: display_context.workflow_output_displays[output].id
359
+ for output in display_context.workflow_output_displays
360
+ }
361
+ workflow_inputs = {
362
+ input.name: display_context.workflow_input_displays[input].id
363
+ for input in display_context.workflow_input_displays
364
+ }
365
+ node_displays = {
366
+ str(node.__id__): display_context.node_displays[node] for node in display_context.node_displays
367
+ }
368
+ temp_node_displays = {}
369
+ for node in node_displays:
370
+ current_node = node_displays[node]
371
+ input_display = {}
372
+ if isinstance(current_node, BaseNodeVellumDisplay):
373
+ input_display = current_node.node_input_ids_by_name
374
+ node_display_meta = {
375
+ output.name: current_node.output_display[output].id for output in current_node.output_display
376
+ }
377
+ port_display_meta = {port.name: current_node.port_displays[port].id for port in current_node.port_displays}
378
+
379
+ temp_node_displays[node] = NodeDisplay(
380
+ input_display=input_display,
381
+ output_display=node_display_meta,
382
+ port_display=port_display_meta,
383
+ )
384
+
385
+ display_meta = WorkflowEventDisplayContext(
386
+ workflow_outputs=workflow_outputs,
387
+ workflow_inputs=workflow_inputs,
388
+ node_displays=temp_node_displays,
389
+ )
390
+ return display_meta
@@ -0,0 +1,9 @@
1
+ from vellum.client.core.pydantic_utilities import UniversalBaseModel
2
+
3
+
4
+ def test_load_workflow_event_display_context():
5
+ from vellum_ee.workflows.display.types import WorkflowEventDisplayContext
6
+
7
+ # We are actually just ensuring there are no circular dependencies when
8
+ # our Workflow Server imports this class.
9
+ assert issubclass(WorkflowEventDisplayContext, UniversalBaseModel)