vellum-ai 0.12.8__py3-none-any.whl → 0.12.11__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 -2
- vellum/client/__init__.py +14 -4
- vellum/client/core/client_wrapper.py +1 -1
- vellum/client/types/__init__.py +2 -2
- vellum/client/types/function_call.py +0 -2
- vellum/client/types/function_call_request.py +0 -2
- vellum/client/types/metric_definition_execution.py +6 -0
- vellum/client/types/test_suite_run_execution_metric_result.py +6 -0
- vellum/client/types/test_suite_run_metric_array_output.py +32 -0
- vellum/client/types/test_suite_run_metric_output.py +2 -0
- vellum/evaluations/resources.py +1 -1
- vellum/prompts/blocks/compilation.py +4 -4
- vellum/types/{fulfilled_enum.py → test_suite_run_metric_array_output.py} +1 -1
- vellum/workflows/nodes/bases/__init__.py +0 -2
- vellum/workflows/nodes/bases/base.py +2 -6
- vellum/workflows/nodes/core/inline_subworkflow_node/node.py +13 -7
- vellum/workflows/nodes/core/inline_subworkflow_node/tests/__init__.py +0 -0
- vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py +41 -0
- vellum/workflows/nodes/core/map_node/node.py +1 -1
- vellum/workflows/nodes/core/templating_node/node.py +8 -1
- vellum/workflows/nodes/core/templating_node/tests/test_templating_node.py +66 -0
- vellum/workflows/nodes/core/try_node/node.py +1 -3
- vellum/workflows/nodes/core/try_node/tests/test_node.py +1 -1
- vellum/workflows/nodes/displayable/bases/api_node/node.py +2 -2
- vellum/workflows/nodes/displayable/bases/search_node.py +1 -2
- vellum/workflows/nodes/displayable/inline_prompt_node/node.py +17 -10
- vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py +13 -3
- vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py +4 -2
- vellum/workflows/nodes/displayable/tests/test_search_node_wth_text_output.py +1 -2
- vellum/workflows/sandbox.py +4 -5
- vellum/workflows/state/context.py +5 -4
- vellum/workflows/state/encoder.py +4 -0
- vellum/workflows/state/tests/test_state.py +19 -0
- vellum/workflows/tests/test_sandbox.py +2 -2
- vellum/workflows/utils/tests/test_vellum_variables.py +3 -0
- vellum/workflows/utils/vellum_variables.py +5 -4
- vellum/workflows/workflows/base.py +5 -2
- {vellum_ai-0.12.8.dist-info → vellum_ai-0.12.11.dist-info}/METADATA +1 -1
- {vellum_ai-0.12.8.dist-info → vellum_ai-0.12.11.dist-info}/RECORD +46 -45
- vellum_cli/tests/test_push.py +1 -1
- vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py +6 -1
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py +207 -0
- vellum/client/types/fulfilled_enum.py +0 -5
- vellum/workflows/nodes/bases/base_subworkflow_node/__init__.py +0 -5
- vellum/workflows/nodes/bases/base_subworkflow_node/node.py +0 -10
- /vellum/{evaluations/utils → utils}/uuid.py +0 -0
- {vellum_ai-0.12.8.dist-info → vellum_ai-0.12.11.dist-info}/LICENSE +0 -0
- {vellum_ai-0.12.8.dist-info → vellum_ai-0.12.11.dist-info}/WHEEL +0 -0
- {vellum_ai-0.12.8.dist-info → vellum_ai-0.12.11.dist-info}/entry_points.txt +0 -0
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py
ADDED
@@ -0,0 +1,207 @@
|
|
1
|
+
from deepdiff import DeepDiff
|
2
|
+
|
3
|
+
from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
|
4
|
+
from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
|
5
|
+
|
6
|
+
from tests.workflows.basic_templating_node.workflow_with_json_input import BasicTemplatingNodeWorkflowWithJson
|
7
|
+
|
8
|
+
|
9
|
+
def test_serialize_workflow():
|
10
|
+
# GIVEN a Workflow that uses a vellum templating node",
|
11
|
+
|
12
|
+
# WHEN we serialize it
|
13
|
+
workflow_display = get_workflow_display(
|
14
|
+
base_display_class=VellumWorkflowDisplay, workflow_class=BasicTemplatingNodeWorkflowWithJson
|
15
|
+
)
|
16
|
+
|
17
|
+
serialized_workflow: dict = workflow_display.serialize()
|
18
|
+
|
19
|
+
# THEN we should get a serialized representation of the Workflow
|
20
|
+
assert serialized_workflow.keys() == {
|
21
|
+
"workflow_raw_data",
|
22
|
+
"input_variables",
|
23
|
+
"output_variables",
|
24
|
+
}
|
25
|
+
|
26
|
+
# AND its input variables should be what we expect
|
27
|
+
input_variables = serialized_workflow["input_variables"]
|
28
|
+
assert len(input_variables) == 1
|
29
|
+
assert input_variables == [
|
30
|
+
{
|
31
|
+
"id": "f4435f88-703f-40e5-9197-d39b0e43ab72",
|
32
|
+
"key": "info",
|
33
|
+
"type": "JSON",
|
34
|
+
"default": None,
|
35
|
+
"required": True,
|
36
|
+
"extensions": {"color": None},
|
37
|
+
}
|
38
|
+
]
|
39
|
+
|
40
|
+
# AND its output variables should be what we expect
|
41
|
+
output_variables = serialized_workflow["output_variables"]
|
42
|
+
assert len(output_variables) == 1
|
43
|
+
assert not DeepDiff(
|
44
|
+
[{"id": "62ec9b08-6437-4f8d-bc20-983d317bc348", "key": "result", "type": "JSON"}],
|
45
|
+
output_variables,
|
46
|
+
ignore_order=True,
|
47
|
+
)
|
48
|
+
|
49
|
+
# AND its raw data should be what we expect
|
50
|
+
workflow_raw_data = serialized_workflow["workflow_raw_data"]
|
51
|
+
assert workflow_raw_data.keys() == {"edges", "nodes", "display_data", "definition"}
|
52
|
+
assert len(workflow_raw_data["edges"]) == 2
|
53
|
+
assert len(workflow_raw_data["nodes"]) == 3
|
54
|
+
|
55
|
+
# AND each node should be serialized correctly
|
56
|
+
entrypoint_node = workflow_raw_data["nodes"][0]
|
57
|
+
assert entrypoint_node == {
|
58
|
+
"id": "09579c0a-acbf-4e04-8724-2230a8aa6534",
|
59
|
+
"type": "ENTRYPOINT",
|
60
|
+
"inputs": [],
|
61
|
+
"data": {"label": "Entrypoint Node", "source_handle_id": "34069190-0942-4e0c-8700-b33b9dea4ea0"},
|
62
|
+
"display_data": {"position": {"x": 0.0, "y": 0.0}},
|
63
|
+
"definition": {"name": "BaseNode", "module": ["vellum", "workflows", "nodes", "bases", "base"], "bases": []},
|
64
|
+
}
|
65
|
+
|
66
|
+
templating_node = workflow_raw_data["nodes"][1]
|
67
|
+
assert not DeepDiff(
|
68
|
+
{
|
69
|
+
"id": "51cbe21d-0232-4362-bc54-5bc283297aa6",
|
70
|
+
"type": "TEMPLATING",
|
71
|
+
"inputs": [
|
72
|
+
{
|
73
|
+
"id": "7c775379-d589-4d79-b876-dcd224d72966",
|
74
|
+
"key": "template",
|
75
|
+
"value": {
|
76
|
+
"rules": [
|
77
|
+
{
|
78
|
+
"type": "CONSTANT_VALUE",
|
79
|
+
"data": {"type": "STRING", "value": "The meaning of {{ info }} is not known"},
|
80
|
+
}
|
81
|
+
],
|
82
|
+
"combinator": "OR",
|
83
|
+
},
|
84
|
+
},
|
85
|
+
{
|
86
|
+
"id": "bb712499-4265-4d71-bc14-0c3d8ca6a7de",
|
87
|
+
"key": "info",
|
88
|
+
"value": {
|
89
|
+
"rules": [
|
90
|
+
{
|
91
|
+
"type": "INPUT_VARIABLE",
|
92
|
+
"data": {"input_variable_id": "f4435f88-703f-40e5-9197-d39b0e43ab72"},
|
93
|
+
}
|
94
|
+
],
|
95
|
+
"combinator": "OR",
|
96
|
+
},
|
97
|
+
},
|
98
|
+
],
|
99
|
+
"data": {
|
100
|
+
"label": "Example Templating Node",
|
101
|
+
"output_id": "6834cae4-8173-4fa6-88f7-bc09d335bdd1",
|
102
|
+
"error_output_id": None,
|
103
|
+
"source_handle_id": "39317827-df43-4f5a-bfbc-20bffc839748",
|
104
|
+
"target_handle_id": "58427684-3848-498a-8299-c6b0fc70265d",
|
105
|
+
"template_node_input_id": "7c775379-d589-4d79-b876-dcd224d72966",
|
106
|
+
"output_type": "JSON",
|
107
|
+
},
|
108
|
+
"display_data": {"position": {"x": 0.0, "y": 0.0}},
|
109
|
+
"definition": {
|
110
|
+
"name": "ExampleTemplatingNode",
|
111
|
+
"module": ["tests", "workflows", "basic_templating_node", "workflow_with_json_input"],
|
112
|
+
"bases": [
|
113
|
+
{
|
114
|
+
"name": "TemplatingNode",
|
115
|
+
"module": ["vellum", "workflows", "nodes", "core", "templating_node", "node"],
|
116
|
+
}
|
117
|
+
],
|
118
|
+
},
|
119
|
+
},
|
120
|
+
templating_node,
|
121
|
+
)
|
122
|
+
|
123
|
+
final_output_node = workflow_raw_data["nodes"][-1]
|
124
|
+
assert not DeepDiff(
|
125
|
+
{
|
126
|
+
"id": "9f75228b-1d5b-4c30-a581-6087e6a1b738",
|
127
|
+
"type": "TERMINAL",
|
128
|
+
"data": {
|
129
|
+
"label": "Final Output",
|
130
|
+
"name": "result",
|
131
|
+
"target_handle_id": "16ba108e-61a8-4338-8a5b-4f1278d7fd7b",
|
132
|
+
"output_id": "62ec9b08-6437-4f8d-bc20-983d317bc348",
|
133
|
+
"output_type": "JSON",
|
134
|
+
"node_input_id": "310072db-6d07-4d29-8e5c-9c6909300925",
|
135
|
+
},
|
136
|
+
"inputs": [
|
137
|
+
{
|
138
|
+
"id": "310072db-6d07-4d29-8e5c-9c6909300925",
|
139
|
+
"key": "node_input",
|
140
|
+
"value": {
|
141
|
+
"rules": [
|
142
|
+
{
|
143
|
+
"type": "NODE_OUTPUT",
|
144
|
+
"data": {
|
145
|
+
"node_id": "51cbe21d-0232-4362-bc54-5bc283297aa6",
|
146
|
+
"output_id": "6834cae4-8173-4fa6-88f7-bc09d335bdd1",
|
147
|
+
},
|
148
|
+
}
|
149
|
+
],
|
150
|
+
"combinator": "OR",
|
151
|
+
},
|
152
|
+
}
|
153
|
+
],
|
154
|
+
"display_data": {"position": {"x": 0.0, "y": 0.0}},
|
155
|
+
"definition": {
|
156
|
+
"name": "FinalOutputNode",
|
157
|
+
"module": ["vellum", "workflows", "nodes", "displayable", "final_output_node", "node"],
|
158
|
+
"bases": [
|
159
|
+
{"name": "BaseNode", "module": ["vellum", "workflows", "nodes", "bases", "base"], "bases": []}
|
160
|
+
],
|
161
|
+
},
|
162
|
+
},
|
163
|
+
final_output_node,
|
164
|
+
ignore_order=True,
|
165
|
+
)
|
166
|
+
|
167
|
+
# AND each edge should be serialized correctly
|
168
|
+
serialized_edges = workflow_raw_data["edges"]
|
169
|
+
assert not DeepDiff(
|
170
|
+
[
|
171
|
+
{
|
172
|
+
"id": "9f753b40-68de-4186-838e-806a14853935",
|
173
|
+
"source_node_id": "09579c0a-acbf-4e04-8724-2230a8aa6534",
|
174
|
+
"source_handle_id": "34069190-0942-4e0c-8700-b33b9dea4ea0",
|
175
|
+
"target_node_id": "51cbe21d-0232-4362-bc54-5bc283297aa6",
|
176
|
+
"target_handle_id": "58427684-3848-498a-8299-c6b0fc70265d",
|
177
|
+
"type": "DEFAULT",
|
178
|
+
},
|
179
|
+
{
|
180
|
+
"id": "00cbff5c-5cce-4ef4-81b2-1a11d9b42597",
|
181
|
+
"source_node_id": "51cbe21d-0232-4362-bc54-5bc283297aa6",
|
182
|
+
"source_handle_id": "39317827-df43-4f5a-bfbc-20bffc839748",
|
183
|
+
"target_node_id": "9f75228b-1d5b-4c30-a581-6087e6a1b738",
|
184
|
+
"target_handle_id": "16ba108e-61a8-4338-8a5b-4f1278d7fd7b",
|
185
|
+
"type": "DEFAULT",
|
186
|
+
},
|
187
|
+
],
|
188
|
+
serialized_edges,
|
189
|
+
ignore_order=True,
|
190
|
+
)
|
191
|
+
|
192
|
+
# AND the display data should be what we expect
|
193
|
+
display_data = workflow_raw_data["display_data"]
|
194
|
+
assert display_data == {
|
195
|
+
"viewport": {
|
196
|
+
"x": 0.0,
|
197
|
+
"y": 0.0,
|
198
|
+
"zoom": 1.0,
|
199
|
+
}
|
200
|
+
}
|
201
|
+
|
202
|
+
# AND the definition should be what we expect
|
203
|
+
definition = workflow_raw_data["definition"]
|
204
|
+
assert definition == {
|
205
|
+
"name": "BasicTemplatingNodeWorkflowWithJson",
|
206
|
+
"module": ["tests", "workflows", "basic_templating_node", "workflow_with_json_input"],
|
207
|
+
}
|
@@ -1,10 +0,0 @@
|
|
1
|
-
from typing import ClassVar, Generic
|
2
|
-
|
3
|
-
from vellum.workflows.nodes.bases import BaseNode
|
4
|
-
from vellum.workflows.types.core import EntityInputsInterface
|
5
|
-
from vellum.workflows.types.generics import StateType
|
6
|
-
|
7
|
-
|
8
|
-
class BaseSubworkflowNode(BaseNode[StateType], Generic[StateType]):
|
9
|
-
# Inputs that are passed to the Subworkflow
|
10
|
-
subworkflow_inputs: ClassVar[EntityInputsInterface] = {}
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|