vellum-ai 0.14.24__py3-none-any.whl → 0.14.26__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 (40) hide show
  1. vellum/__init__.py +2 -4
  2. vellum/client/core/client_wrapper.py +1 -1
  3. vellum/client/resources/__init__.py +0 -2
  4. vellum/client/resources/workflows/__init__.py +0 -3
  5. vellum/client/resources/workflows/client.py +0 -9
  6. vellum/client/types/__init__.py +2 -2
  7. vellum/client/types/deployment_release_tag_read.py +7 -1
  8. vellum/client/types/{release.py → release_tag_release.py} +1 -1
  9. vellum/client/types/vellum_sdk_error.py +1 -1
  10. vellum/client/types/workflow_execution_event_error_code.py +1 -0
  11. vellum/client/types/workflow_release_tag_read.py +2 -2
  12. vellum/client/types/workflow_release_tag_workflow_deployment_history_item.py +3 -10
  13. vellum/types/{release.py → release_tag_release.py} +1 -1
  14. vellum/workflows/events/types.py +10 -7
  15. vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py +2 -4
  16. vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py +2 -4
  17. vellum/workflows/nodes/displayable/conftest.py +117 -0
  18. vellum/workflows/nodes/displayable/guardrail_node/node.py +13 -1
  19. vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py +49 -0
  20. vellum/workflows/nodes/displayable/prompt_deployment_node/tests/test_node.py +49 -0
  21. vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py +2 -5
  22. vellum/workflows/nodes/displayable/subworkflow_deployment_node/tests/test_node.py +63 -0
  23. vellum/workflows/references/workflow_input.py +3 -0
  24. {vellum_ai-0.14.24.dist-info → vellum_ai-0.14.26.dist-info}/METADATA +1 -1
  25. {vellum_ai-0.14.24.dist-info → vellum_ai-0.14.26.dist-info}/RECORD +36 -39
  26. vellum_ee/workflows/display/base.py +16 -17
  27. vellum_ee/workflows/display/nodes/base_node_display.py +2 -1
  28. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py +11 -10
  29. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py +1 -1
  30. vellum_ee/workflows/display/types.py +8 -12
  31. vellum_ee/workflows/display/vellum.py +20 -9
  32. vellum_ee/workflows/display/workflows/base_workflow_display.py +65 -38
  33. vellum_ee/workflows/display/workflows/vellum_workflow_display.py +9 -89
  34. vellum/client/resources/workflows/types/__init__.py +0 -5
  35. vellum/client/resources/workflows/types/workflows_pull_request_format.py +0 -5
  36. vellum/resources/workflows/types/__init__.py +0 -3
  37. vellum/resources/workflows/types/workflows_pull_request_format.py +0 -3
  38. {vellum_ai-0.14.24.dist-info → vellum_ai-0.14.26.dist-info}/LICENSE +0 -0
  39. {vellum_ai-0.14.24.dist-info → vellum_ai-0.14.26.dist-info}/WHEEL +0 -0
  40. {vellum_ai-0.14.24.dist-info → vellum_ai-0.14.26.dist-info}/entry_points.txt +0 -0
@@ -13,21 +13,20 @@ from vellum.workflows.events.workflow import NodeEventDisplayContext, WorkflowEv
13
13
  from vellum.workflows.nodes.bases import BaseNode
14
14
  from vellum.workflows.nodes.utils import get_unadorned_node, get_wrapped_node
15
15
  from vellum.workflows.ports import Port
16
- from vellum.workflows.references import OutputReference, StateValueReference, WorkflowInputReference
16
+ from vellum.workflows.references import OutputReference, WorkflowInputReference
17
17
  from vellum.workflows.types.core import JsonObject
18
18
  from vellum.workflows.types.generics import WorkflowType
19
19
  from vellum.workflows.utils.uuids import uuid4_from_hash
20
20
  from vellum_ee.workflows.display.base import (
21
21
  EdgeDisplay,
22
- EntrypointDisplayOverridesType,
23
- EntrypointDisplayType,
24
- StateValueDisplayOverridesType,
25
- StateValueDisplayType,
22
+ EntrypointDisplay,
23
+ StateValueDisplay,
26
24
  WorkflowInputsDisplayOverridesType,
27
25
  WorkflowInputsDisplayType,
28
26
  WorkflowMetaDisplay,
29
27
  WorkflowOutputDisplay,
30
28
  )
29
+ from vellum_ee.workflows.display.editor.types import NodeDisplayData
31
30
  from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
32
31
  from vellum_ee.workflows.display.nodes.base_node_vellum_display import BaseNodeVellumDisplay
33
32
  from vellum_ee.workflows.display.nodes.get_node_display_class import get_node_display_class
@@ -35,9 +34,11 @@ from vellum_ee.workflows.display.nodes.types import NodeOutputDisplay, PortDispl
35
34
  from vellum_ee.workflows.display.nodes.utils import raise_if_descriptor
36
35
  from vellum_ee.workflows.display.types import (
37
36
  EdgeDisplays,
37
+ EntrypointDisplays,
38
38
  NodeDisplays,
39
39
  NodeOutputDisplays,
40
40
  PortDisplays,
41
+ StateValueDisplays,
41
42
  WorkflowDisplayContext,
42
43
  WorkflowOutputDisplays,
43
44
  )
@@ -51,10 +52,6 @@ class BaseWorkflowDisplay(
51
52
  WorkflowType,
52
53
  WorkflowInputsDisplayType,
53
54
  WorkflowInputsDisplayOverridesType,
54
- StateValueDisplayType,
55
- StateValueDisplayOverridesType,
56
- EntrypointDisplayType,
57
- EntrypointDisplayOverridesType,
58
55
  ]
59
56
  ):
60
57
  # Used to specify the display data for a workflow.
@@ -64,10 +61,10 @@ class BaseWorkflowDisplay(
64
61
  inputs_display: Dict[WorkflowInputReference, WorkflowInputsDisplayOverridesType] = {}
65
62
 
66
63
  # Used to explicitly specify display data for a workflow's state values.
67
- state_value_displays: Dict[StateValueReference, StateValueDisplayOverridesType] = {}
64
+ state_value_displays: StateValueDisplays = {}
68
65
 
69
66
  # Used to explicitly specify display data for a workflow's entrypoints.
70
- entrypoint_displays: Dict[Type[BaseNode], EntrypointDisplayOverridesType] = {}
67
+ entrypoint_displays: EntrypointDisplays = {}
71
68
 
72
69
  # Used to explicitly specify display data for a workflow's outputs.
73
70
  output_displays: WorkflowOutputDisplays = {}
@@ -89,13 +86,7 @@ class BaseWorkflowDisplay(
89
86
  self,
90
87
  workflow: Type[WorkflowType],
91
88
  *,
92
- parent_display_context: Optional[
93
- WorkflowDisplayContext[
94
- WorkflowInputsDisplayType,
95
- StateValueDisplayType,
96
- EntrypointDisplayType,
97
- ]
98
- ] = None,
89
+ parent_display_context: Optional[WorkflowDisplayContext[WorkflowInputsDisplayType,]] = None,
99
90
  dry_run: bool = False,
100
91
  ):
101
92
  self._workflow = workflow
@@ -185,12 +176,8 @@ class BaseWorkflowDisplay(
185
176
  @cached_property
186
177
  def display_context(
187
178
  self,
188
- ) -> WorkflowDisplayContext[
189
- WorkflowInputsDisplayType,
190
- StateValueDisplayType,
191
- EntrypointDisplayType,
192
- ]:
193
- workflow_display = self._generate_workflow_meta_display()
179
+ ) -> WorkflowDisplayContext[WorkflowInputsDisplayType]:
180
+ workflow_meta_display = self._generate_workflow_meta_display()
194
181
 
195
182
  global_node_output_displays: NodeOutputDisplays = (
196
183
  copy(self._parent_display_context.global_node_output_displays) if self._parent_display_context else {}
@@ -235,7 +222,7 @@ class BaseWorkflowDisplay(
235
222
  workflow_input_displays[workflow_input] = input_display
236
223
  global_workflow_input_displays[workflow_input] = input_display
237
224
 
238
- state_value_displays: Dict[StateValueReference, StateValueDisplayType] = {}
225
+ state_value_displays: StateValueDisplays = {}
239
226
  global_state_value_displays = (
240
227
  copy(self._parent_display_context.global_state_value_displays) if self._parent_display_context else {}
241
228
  )
@@ -247,14 +234,14 @@ class BaseWorkflowDisplay(
247
234
  state_value_displays[state_value] = state_value_display
248
235
  global_state_value_displays[state_value] = state_value_display
249
236
 
250
- entrypoint_displays: Dict[Type[BaseNode], EntrypointDisplayType] = {}
237
+ entrypoint_displays: EntrypointDisplays = {}
251
238
  for entrypoint in self._workflow.get_entrypoints():
252
239
  if entrypoint in entrypoint_displays:
253
240
  continue
254
241
 
255
242
  entrypoint_display_overrides = self.entrypoint_displays.get(entrypoint)
256
243
  entrypoint_displays[entrypoint] = self._generate_entrypoint_display(
257
- entrypoint, workflow_display, node_displays, overrides=entrypoint_display_overrides
244
+ entrypoint, workflow_meta_display, node_displays, overrides=entrypoint_display_overrides
258
245
  )
259
246
 
260
247
  edge_displays: Dict[Tuple[Port, Type[BaseNode]], EdgeDisplay] = {}
@@ -290,7 +277,7 @@ class BaseWorkflowDisplay(
290
277
  )
291
278
 
292
279
  return WorkflowDisplayContext(
293
- workflow_display=workflow_display,
280
+ workflow_display=workflow_meta_display,
294
281
  workflow_input_displays=workflow_input_displays,
295
282
  global_workflow_input_displays=global_workflow_input_displays,
296
283
  state_value_displays=state_value_displays,
@@ -305,9 +292,24 @@ class BaseWorkflowDisplay(
305
292
  workflow_display_class=self.__class__,
306
293
  )
307
294
 
308
- @abstractmethod
309
295
  def _generate_workflow_meta_display(self) -> WorkflowMetaDisplay:
310
- pass
296
+ overrides = self.workflow_display
297
+ if overrides:
298
+ return WorkflowMetaDisplay(
299
+ entrypoint_node_id=overrides.entrypoint_node_id,
300
+ entrypoint_node_source_handle_id=overrides.entrypoint_node_source_handle_id,
301
+ entrypoint_node_display=overrides.entrypoint_node_display,
302
+ display_data=overrides.display_data,
303
+ )
304
+
305
+ entrypoint_node_id = uuid4_from_hash(f"{self.workflow_id}|entrypoint_node_id")
306
+ entrypoint_node_source_handle_id = uuid4_from_hash(f"{self.workflow_id}|entrypoint_node_source_handle_id")
307
+
308
+ return WorkflowMetaDisplay(
309
+ entrypoint_node_id=entrypoint_node_id,
310
+ entrypoint_node_source_handle_id=entrypoint_node_source_handle_id,
311
+ entrypoint_node_display=NodeDisplayData(),
312
+ )
311
313
 
312
314
  @abstractmethod
313
315
  def _generate_workflow_input_display(
@@ -315,21 +317,46 @@ class BaseWorkflowDisplay(
315
317
  ) -> WorkflowInputsDisplayType:
316
318
  pass
317
319
 
318
- @abstractmethod
319
320
  def _generate_state_value_display(
320
- self, state_value: StateValueReference, overrides: Optional[StateValueDisplayOverridesType] = None
321
- ) -> StateValueDisplayType:
322
- pass
321
+ self, state_value: BaseDescriptor, overrides: Optional[StateValueDisplay] = None
322
+ ) -> StateValueDisplay:
323
+ state_value_id: UUID
324
+ name = None
325
+ color = None
326
+ if overrides:
327
+ state_value_id = overrides.id
328
+ name = overrides.name
329
+ color = overrides.color
330
+ else:
331
+ state_value_id = uuid4_from_hash(f"{self.workflow_id}|state_values|id|{state_value.name}")
332
+
333
+ return StateValueDisplay(id=state_value_id, name=name, color=color)
323
334
 
324
- @abstractmethod
325
335
  def _generate_entrypoint_display(
326
336
  self,
327
337
  entrypoint: Type[BaseNode],
328
338
  workflow_display: WorkflowMetaDisplay,
329
339
  node_displays: Dict[Type[BaseNode], BaseNodeDisplay],
330
- overrides: Optional[EntrypointDisplayOverridesType] = None,
331
- ) -> EntrypointDisplayType:
332
- pass
340
+ overrides: Optional[EntrypointDisplay] = None,
341
+ ) -> EntrypointDisplay:
342
+ entrypoint_node_id = workflow_display.entrypoint_node_id
343
+
344
+ edge_display_overrides = overrides.edge_display if overrides else None
345
+ entrypoint_id = (
346
+ edge_display_overrides.id
347
+ if edge_display_overrides
348
+ else uuid4_from_hash(f"{self.workflow_id}|id|{entrypoint_node_id}")
349
+ )
350
+
351
+ entrypoint_target = get_unadorned_node(entrypoint)
352
+ target_node_display = node_displays[entrypoint_target]
353
+ target_node_id = target_node_display.node_id
354
+
355
+ edge_display = edge_display_overrides or self._generate_edge_display_from_source(
356
+ entrypoint_node_id, target_node_id
357
+ )
358
+
359
+ return EntrypointDisplay(id=entrypoint_id, edge_display=edge_display)
333
360
 
334
361
  def _generate_workflow_output_display(self, output: BaseDescriptor) -> WorkflowOutputDisplay:
335
362
  output_id = uuid4_from_hash(f"{self.workflow_id}|id|{output.name}")
@@ -1,9 +1,7 @@
1
1
  import logging
2
2
  from uuid import UUID
3
- from typing import Dict, Optional, Type, cast
3
+ from typing import Optional, cast
4
4
 
5
- from vellum.workflows.descriptors.base import BaseDescriptor
6
- from vellum.workflows.nodes.bases import BaseNode
7
5
  from vellum.workflows.nodes.displayable.bases.utils import primitive_to_vellum_value
8
6
  from vellum.workflows.nodes.displayable.final_output_node import FinalOutputNode
9
7
  from vellum.workflows.nodes.utils import get_unadorned_node, get_unadorned_port
@@ -12,21 +10,12 @@ from vellum.workflows.references.output import OutputReference
12
10
  from vellum.workflows.types.core import JsonArray, JsonObject
13
11
  from vellum.workflows.types.generics import WorkflowType
14
12
  from vellum.workflows.utils.uuids import uuid4_from_hash
15
- from vellum_ee.workflows.display.base import WorkflowMetaDisplay
13
+ from vellum_ee.workflows.display.editor.types import NodeDisplayData
16
14
  from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
17
15
  from vellum_ee.workflows.display.nodes.base_node_vellum_display import BaseNodeVellumDisplay
18
16
  from vellum_ee.workflows.display.nodes.vellum.utils import create_node_input
19
17
  from vellum_ee.workflows.display.utils.vellum import infer_vellum_variable_type
20
- from vellum_ee.workflows.display.vellum import (
21
- EntrypointVellumDisplay,
22
- EntrypointVellumDisplayOverrides,
23
- NodeDisplayData,
24
- StateValueVellumDisplay,
25
- StateValueVellumDisplayOverrides,
26
- WorkflowInputsVellumDisplay,
27
- WorkflowInputsVellumDisplayOverrides,
28
- WorkflowMetaVellumDisplay,
29
- )
18
+ from vellum_ee.workflows.display.vellum import WorkflowInputsVellumDisplay, WorkflowInputsVellumDisplayOverrides
30
19
  from vellum_ee.workflows.display.workflows.base_workflow_display import BaseWorkflowDisplay
31
20
 
32
21
  logger = logging.getLogger(__name__)
@@ -37,10 +26,6 @@ class VellumWorkflowDisplay(
37
26
  WorkflowType,
38
27
  WorkflowInputsVellumDisplay,
39
28
  WorkflowInputsVellumDisplayOverrides,
40
- StateValueVellumDisplay,
41
- StateValueVellumDisplayOverrides,
42
- EntrypointVellumDisplay,
43
- EntrypointVellumDisplayOverrides,
44
29
  ]
45
30
  ):
46
31
  node_display_base_class = BaseNodeDisplay
@@ -67,20 +52,17 @@ class VellumWorkflowDisplay(
67
52
  )
68
53
 
69
54
  state_variables: JsonArray = []
70
- for state_value, state_value_display in self.display_context.state_value_displays.items():
71
- default = primitive_to_vellum_value(state_value.instance) if state_value.instance else None
72
- required = (
73
- state_value_display.required
74
- if state_value_display.required is not None
75
- else type(None) not in state_value.types
55
+ for state_value_reference, state_value_display in self.display_context.state_value_displays.items():
56
+ default = (
57
+ primitive_to_vellum_value(state_value_reference.instance) if state_value_reference.instance else None
76
58
  )
77
59
  state_variables.append(
78
60
  {
79
61
  "id": str(state_value_display.id),
80
- "key": state_value_display.name or state_value.name,
81
- "type": infer_vellum_variable_type(state_value),
62
+ "key": state_value_display.name or state_value_reference.name,
63
+ "type": infer_vellum_variable_type(state_value_reference),
82
64
  "default": default.dict() if default else None,
83
- "required": required,
65
+ "required": state_value_reference.instance is None,
84
66
  "extensions": {"color": state_value_display.color},
85
67
  }
86
68
  )
@@ -288,25 +270,6 @@ class VellumWorkflowDisplay(
288
270
  "output_variables": output_variables,
289
271
  }
290
272
 
291
- def _generate_workflow_meta_display(self) -> WorkflowMetaVellumDisplay:
292
- overrides = self.workflow_display
293
- if overrides:
294
- return WorkflowMetaVellumDisplay(
295
- entrypoint_node_id=overrides.entrypoint_node_id,
296
- entrypoint_node_source_handle_id=overrides.entrypoint_node_source_handle_id,
297
- entrypoint_node_display=overrides.entrypoint_node_display,
298
- display_data=overrides.display_data,
299
- )
300
-
301
- entrypoint_node_id = uuid4_from_hash(f"{self.workflow_id}|entrypoint_node_id")
302
- entrypoint_node_source_handle_id = uuid4_from_hash(f"{self.workflow_id}|entrypoint_node_source_handle_id")
303
-
304
- return WorkflowMetaVellumDisplay(
305
- entrypoint_node_id=entrypoint_node_id,
306
- entrypoint_node_source_handle_id=entrypoint_node_source_handle_id,
307
- entrypoint_node_display=NodeDisplayData(),
308
- )
309
-
310
273
  def _generate_workflow_input_display(
311
274
  self, workflow_input: WorkflowInputReference, overrides: Optional[WorkflowInputsVellumDisplayOverrides] = None
312
275
  ) -> WorkflowInputsVellumDisplay:
@@ -323,46 +286,3 @@ class VellumWorkflowDisplay(
323
286
  workflow_input_id = uuid4_from_hash(f"{self.workflow_id}|inputs|id|{workflow_input.name}")
324
287
 
325
288
  return WorkflowInputsVellumDisplay(id=workflow_input_id, name=name, required=required, color=color)
326
-
327
- def _generate_state_value_display(
328
- self, state_value: BaseDescriptor, overrides: Optional[StateValueVellumDisplayOverrides] = None
329
- ) -> StateValueVellumDisplay:
330
- state_value_id: UUID
331
- name = None
332
- required = None
333
- color = None
334
- if overrides:
335
- state_value_id = overrides.id
336
- name = overrides.name
337
- required = overrides.required
338
- color = overrides.color
339
- else:
340
- state_value_id = uuid4_from_hash(f"{self.workflow_id}|state_values|id|{state_value.name}")
341
-
342
- return StateValueVellumDisplay(id=state_value_id, name=name, required=required, color=color)
343
-
344
- def _generate_entrypoint_display(
345
- self,
346
- entrypoint: Type[BaseNode],
347
- workflow_display: WorkflowMetaDisplay,
348
- node_displays: Dict[Type[BaseNode], BaseNodeDisplay],
349
- overrides: Optional[EntrypointVellumDisplayOverrides] = None,
350
- ) -> EntrypointVellumDisplay:
351
- entrypoint_node_id = workflow_display.entrypoint_node_id
352
-
353
- edge_display_overrides = overrides.edge_display if overrides else None
354
- entrypoint_id = (
355
- edge_display_overrides.id
356
- if edge_display_overrides
357
- else uuid4_from_hash(f"{self.workflow_id}|id|{entrypoint_node_id}")
358
- )
359
-
360
- entrypoint_target = get_unadorned_node(entrypoint)
361
- target_node_display = node_displays[entrypoint_target]
362
- target_node_id = target_node_display.node_id
363
-
364
- edge_display = edge_display_overrides or self._generate_edge_display_from_source(
365
- entrypoint_node_id, target_node_id
366
- )
367
-
368
- return EntrypointVellumDisplay(id=entrypoint_id, edge_display=edge_display)
@@ -1,5 +0,0 @@
1
- # This file was auto-generated by Fern from our API Definition.
2
-
3
- from .workflows_pull_request_format import WorkflowsPullRequestFormat
4
-
5
- __all__ = ["WorkflowsPullRequestFormat"]
@@ -1,5 +0,0 @@
1
- # This file was auto-generated by Fern from our API Definition.
2
-
3
- import typing
4
-
5
- WorkflowsPullRequestFormat = typing.Union[typing.Literal["json", "zip"], typing.Any]
@@ -1,3 +0,0 @@
1
- # WARNING: This file will be removed in a future release. Please import from "vellum.client" instead.
2
-
3
- from vellum.client.resources.workflows.types import *
@@ -1,3 +0,0 @@
1
- # WARNING: This file will be removed in a future release. Please import from "vellum.client" instead.
2
-
3
- from vellum.client.resources.workflows.types.workflows_pull_request_format import *