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.
- vellum/__init__.py +2 -4
- vellum/client/core/client_wrapper.py +1 -1
- vellum/client/resources/__init__.py +0 -2
- vellum/client/resources/workflows/__init__.py +0 -3
- vellum/client/resources/workflows/client.py +0 -9
- vellum/client/types/__init__.py +2 -2
- vellum/client/types/deployment_release_tag_read.py +7 -1
- vellum/client/types/{release.py → release_tag_release.py} +1 -1
- vellum/client/types/vellum_sdk_error.py +1 -1
- vellum/client/types/workflow_execution_event_error_code.py +1 -0
- vellum/client/types/workflow_release_tag_read.py +2 -2
- vellum/client/types/workflow_release_tag_workflow_deployment_history_item.py +3 -10
- vellum/types/{release.py → release_tag_release.py} +1 -1
- vellum/workflows/events/types.py +10 -7
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py +2 -4
- vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py +2 -4
- vellum/workflows/nodes/displayable/conftest.py +117 -0
- vellum/workflows/nodes/displayable/guardrail_node/node.py +13 -1
- vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py +49 -0
- vellum/workflows/nodes/displayable/prompt_deployment_node/tests/test_node.py +49 -0
- vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py +2 -5
- vellum/workflows/nodes/displayable/subworkflow_deployment_node/tests/test_node.py +63 -0
- vellum/workflows/references/workflow_input.py +3 -0
- {vellum_ai-0.14.24.dist-info → vellum_ai-0.14.26.dist-info}/METADATA +1 -1
- {vellum_ai-0.14.24.dist-info → vellum_ai-0.14.26.dist-info}/RECORD +36 -39
- vellum_ee/workflows/display/base.py +16 -17
- vellum_ee/workflows/display/nodes/base_node_display.py +2 -1
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py +11 -10
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py +1 -1
- vellum_ee/workflows/display/types.py +8 -12
- vellum_ee/workflows/display/vellum.py +20 -9
- vellum_ee/workflows/display/workflows/base_workflow_display.py +65 -38
- vellum_ee/workflows/display/workflows/vellum_workflow_display.py +9 -89
- vellum/client/resources/workflows/types/__init__.py +0 -5
- vellum/client/resources/workflows/types/workflows_pull_request_format.py +0 -5
- vellum/resources/workflows/types/__init__.py +0 -3
- vellum/resources/workflows/types/workflows_pull_request_format.py +0 -3
- {vellum_ai-0.14.24.dist-info → vellum_ai-0.14.26.dist-info}/LICENSE +0 -0
- {vellum_ai-0.14.24.dist-info → vellum_ai-0.14.26.dist-info}/WHEEL +0 -0
- {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,
|
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
|
-
|
23
|
-
|
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:
|
64
|
+
state_value_displays: StateValueDisplays = {}
|
68
65
|
|
69
66
|
# Used to explicitly specify display data for a workflow's entrypoints.
|
70
|
-
entrypoint_displays:
|
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
|
-
|
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:
|
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:
|
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,
|
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=
|
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
|
-
|
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:
|
321
|
-
) ->
|
322
|
-
|
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[
|
331
|
-
) ->
|
332
|
-
|
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
|
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.
|
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
|
71
|
-
default =
|
72
|
-
|
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
|
81
|
-
"type": infer_vellum_variable_type(
|
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":
|
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)
|
File without changes
|
File without changes
|
File without changes
|