vellum-ai 0.14.0__py3-none-any.whl → 0.14.2__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/client/core/client_wrapper.py +1 -1
- vellum/prompts/blocks/compilation.py +23 -16
- vellum/prompts/blocks/tests/test_compilation.py +29 -0
- vellum/utils/templating/constants.py +6 -2
- vellum/utils/templating/custom_filters.py +22 -1
- vellum/utils/templating/render.py +5 -2
- vellum/utils/templating/tests/__init__.py +0 -0
- vellum/utils/templating/tests/test_custom_filters.py +19 -0
- vellum/workflows/errors/types.py +3 -0
- vellum/workflows/nodes/core/templating_node/node.py +3 -3
- vellum/workflows/nodes/core/templating_node/tests/test_templating_node.py +66 -1
- vellum/workflows/nodes/displayable/code_execution_node/node.py +5 -4
- vellum/workflows/nodes/displayable/code_execution_node/tests/test_code_execution_node.py +51 -0
- vellum/workflows/nodes/displayable/code_execution_node/utils.py +13 -11
- vellum/workflows/nodes/utils.py +9 -1
- vellum/workflows/state/base.py +21 -1
- {vellum_ai-0.14.0.dist-info → vellum_ai-0.14.2.dist-info}/METADATA +1 -1
- {vellum_ai-0.14.0.dist-info → vellum_ai-0.14.2.dist-info}/RECORD +51 -46
- vellum_cli/pull.py +3 -11
- vellum_ee/workflows/display/base.py +14 -0
- vellum_ee/workflows/display/nodes/base_node_display.py +11 -22
- vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py +52 -0
- vellum_ee/workflows/display/tests/test_vellum_workflow_display.py +1 -0
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py +4 -1
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py +1 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py +3 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py +4 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py +243 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py +1 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py +1 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py +1 -1
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py +1 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +1 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py +1 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py +1 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py +1 -1
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py +1 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py +1 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py +1 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py +1 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py +1 -0
- vellum_ee/workflows/display/types.py +5 -1
- vellum_ee/workflows/display/utils/expressions.py +26 -0
- vellum_ee/workflows/display/utils/vellum.py +5 -0
- vellum_ee/workflows/display/vellum.py +15 -1
- vellum_ee/workflows/display/workflows/base_workflow_display.py +30 -1
- vellum_ee/workflows/display/workflows/vellum_workflow_display.py +54 -6
- vellum_ee/workflows/tests/local_workflow/display/workflow.py +0 -2
- {vellum_ai-0.14.0.dist-info → vellum_ai-0.14.2.dist-info}/LICENSE +0 -0
- {vellum_ai-0.14.0.dist-info → vellum_ai-0.14.2.dist-info}/WHEEL +0 -0
- {vellum_ai-0.14.0.dist-info → vellum_ai-0.14.2.dist-info}/entry_points.txt +0 -0
@@ -25,6 +25,8 @@ from vellum_ee.workflows.display.vellum import (
|
|
25
25
|
EntrypointVellumDisplay,
|
26
26
|
EntrypointVellumDisplayOverrides,
|
27
27
|
NodeDisplayData,
|
28
|
+
StateValueVellumDisplay,
|
29
|
+
StateValueVellumDisplayOverrides,
|
28
30
|
WorkflowInputsVellumDisplay,
|
29
31
|
WorkflowInputsVellumDisplayOverrides,
|
30
32
|
WorkflowMetaVellumDisplay,
|
@@ -44,6 +46,8 @@ class VellumWorkflowDisplay(
|
|
44
46
|
WorkflowMetaVellumDisplayOverrides,
|
45
47
|
WorkflowInputsVellumDisplay,
|
46
48
|
WorkflowInputsVellumDisplayOverrides,
|
49
|
+
StateValueVellumDisplay,
|
50
|
+
StateValueVellumDisplayOverrides,
|
47
51
|
BaseNodeDisplay,
|
48
52
|
EntrypointVellumDisplay,
|
49
53
|
EntrypointVellumDisplayOverrides,
|
@@ -76,6 +80,25 @@ class VellumWorkflowDisplay(
|
|
76
80
|
}
|
77
81
|
)
|
78
82
|
|
83
|
+
state_variables: JsonArray = []
|
84
|
+
for state_value, state_value_display in self.display_context.state_value_displays.items():
|
85
|
+
default = primitive_to_vellum_value(state_value.instance) if state_value.instance else None
|
86
|
+
required = (
|
87
|
+
state_value_display.required
|
88
|
+
if state_value_display.required is not None
|
89
|
+
else type(None) not in state_value.types
|
90
|
+
)
|
91
|
+
state_variables.append(
|
92
|
+
{
|
93
|
+
"id": str(state_value_display.id),
|
94
|
+
"key": state_value_display.name or state_value.name,
|
95
|
+
"type": infer_vellum_variable_type(state_value),
|
96
|
+
"default": default.dict() if default else None,
|
97
|
+
"required": required,
|
98
|
+
"extensions": {"color": state_value_display.color},
|
99
|
+
}
|
100
|
+
)
|
101
|
+
|
79
102
|
nodes: JsonArray = []
|
80
103
|
edges: JsonArray = []
|
81
104
|
|
@@ -153,6 +176,16 @@ class VellumWorkflowDisplay(
|
|
153
176
|
except IndexError:
|
154
177
|
source_node_display = None
|
155
178
|
|
179
|
+
synthetic_target_handle_id = (
|
180
|
+
str(workflow_output_display.target_handle_id)
|
181
|
+
if workflow_output_display.target_handle_id
|
182
|
+
else str(uuid4_from_hash(f"{self.workflow_id}|target_handle_id|{workflow_output_display.name}"))
|
183
|
+
)
|
184
|
+
synthetic_display_data = (
|
185
|
+
workflow_output_display.display_data.dict()
|
186
|
+
if workflow_output_display.display_data
|
187
|
+
else NodeDisplayData().dict()
|
188
|
+
)
|
156
189
|
nodes.append(
|
157
190
|
{
|
158
191
|
"id": str(final_output_node_id),
|
@@ -160,13 +193,13 @@ class VellumWorkflowDisplay(
|
|
160
193
|
"data": {
|
161
194
|
"label": workflow_output_display.label,
|
162
195
|
"name": workflow_output_display.name,
|
163
|
-
"target_handle_id":
|
196
|
+
"target_handle_id": synthetic_target_handle_id,
|
164
197
|
"output_id": str(workflow_output_display.id),
|
165
198
|
"output_type": inferred_type,
|
166
199
|
"node_input_id": str(node_input.id),
|
167
200
|
},
|
168
201
|
"inputs": [node_input.dict()],
|
169
|
-
"display_data":
|
202
|
+
"display_data": synthetic_display_data,
|
170
203
|
"base": final_output_node_base,
|
171
204
|
"definition": None,
|
172
205
|
}
|
@@ -188,7 +221,7 @@ class VellumWorkflowDisplay(
|
|
188
221
|
"source_node_id": str(source_node_display.node_id),
|
189
222
|
"source_handle_id": str(source_handle_id),
|
190
223
|
"target_node_id": str(workflow_output_display.node_id),
|
191
|
-
"target_handle_id":
|
224
|
+
"target_handle_id": synthetic_target_handle_id,
|
192
225
|
"type": "DEFAULT",
|
193
226
|
}
|
194
227
|
)
|
@@ -244,6 +277,7 @@ class VellumWorkflowDisplay(
|
|
244
277
|
},
|
245
278
|
},
|
246
279
|
"input_variables": input_variables,
|
280
|
+
"state_variables": state_variables,
|
247
281
|
"output_variables": output_variables,
|
248
282
|
}
|
249
283
|
|
@@ -283,6 +317,23 @@ class VellumWorkflowDisplay(
|
|
283
317
|
|
284
318
|
return WorkflowInputsVellumDisplay(id=workflow_input_id, name=name, required=required, color=color)
|
285
319
|
|
320
|
+
def _generate_state_value_display(
|
321
|
+
self, state_value: BaseDescriptor, overrides: Optional[StateValueVellumDisplayOverrides] = None
|
322
|
+
) -> StateValueVellumDisplay:
|
323
|
+
state_value_id: UUID
|
324
|
+
name = None
|
325
|
+
required = None
|
326
|
+
color = None
|
327
|
+
if overrides:
|
328
|
+
state_value_id = overrides.id
|
329
|
+
name = overrides.name
|
330
|
+
required = overrides.required
|
331
|
+
color = overrides.color
|
332
|
+
else:
|
333
|
+
state_value_id = uuid4_from_hash(f"{self.workflow_id}|state_values|id|{state_value.name}")
|
334
|
+
|
335
|
+
return StateValueVellumDisplay(id=state_value_id, name=name, required=required, color=color)
|
336
|
+
|
286
337
|
def _generate_entrypoint_display(
|
287
338
|
self,
|
288
339
|
entrypoint: Type[BaseNode],
|
@@ -331,15 +382,12 @@ class VellumWorkflowDisplay(
|
|
331
382
|
|
332
383
|
output_id = uuid4_from_hash(f"{self.workflow_id}|id|{output.name}")
|
333
384
|
node_id = uuid4_from_hash(f"{self.workflow_id}|node_id|{output.name}")
|
334
|
-
target_handle_id = uuid4_from_hash(f"{self.workflow_id}|target_handle_id|{output.name}")
|
335
385
|
|
336
386
|
return WorkflowOutputVellumDisplay(
|
337
387
|
id=output_id,
|
338
388
|
node_id=node_id,
|
339
389
|
name=output.name,
|
340
390
|
label="Final Output",
|
341
|
-
target_handle_id=target_handle_id,
|
342
|
-
display_data=NodeDisplayData(),
|
343
391
|
)
|
344
392
|
|
345
393
|
def _generate_edge_display(
|
@@ -50,7 +50,5 @@ class WorkflowDisplay(VellumWorkflowDisplay[Workflow]):
|
|
50
50
|
node_id=UUID("f3ef4b2b-fec9-4026-9cc6-e5eac295307f"),
|
51
51
|
name="final-output",
|
52
52
|
label="Final Output",
|
53
|
-
target_handle_id=UUID("3ec34f6e-da48-40d5-a65b-a48fefa75763"),
|
54
|
-
display_data=NodeDisplayData(position=NodeDisplayPosition(x=2750, y=210), width=459, height=234),
|
55
53
|
)
|
56
54
|
}
|
File without changes
|
File without changes
|
File without changes
|