vellum-ai 0.14.19__py3-none-any.whl → 0.14.21__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/workflows/nodes/displayable/api_node/node.py +1 -1
- vellum/workflows/nodes/displayable/bases/api_node/node.py +7 -2
- vellum/workflows/nodes/displayable/code_execution_node/node.py +1 -1
- vellum/workflows/nodes/displayable/code_execution_node/tests/test_code_execution_node.py +41 -0
- vellum/workflows/nodes/displayable/code_execution_node/utils.py +6 -1
- vellum/workflows/nodes/tests/test_utils.py +34 -2
- vellum/workflows/nodes/utils.py +26 -0
- vellum/workflows/references/lazy.py +9 -1
- vellum/workflows/references/tests/test_lazy.py +30 -0
- {vellum_ai-0.14.19.dist-info → vellum_ai-0.14.21.dist-info}/METADATA +1 -1
- {vellum_ai-0.14.19.dist-info → vellum_ai-0.14.21.dist-info}/RECORD +44 -42
- vellum_ee/workflows/display/base.py +6 -6
- vellum_ee/workflows/display/nodes/base_node_display.py +27 -2
- vellum_ee/workflows/display/nodes/base_node_vellum_display.py +0 -20
- vellum_ee/workflows/display/nodes/get_node_display_class.py +3 -3
- vellum_ee/workflows/display/nodes/vellum/api_node.py +9 -16
- vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +7 -3
- vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py +2 -6
- vellum_ee/workflows/display/nodes/vellum/merge_node.py +8 -5
- vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py +2 -6
- vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py +113 -0
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py +2 -2
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py +4 -4
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +8 -8
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py +3 -3
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py +14 -14
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py +3 -3
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py +5 -5
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py +1 -1
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py +1 -1
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py +2 -2
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +2 -2
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py +3 -3
- vellum_ee/workflows/display/types.py +4 -7
- vellum_ee/workflows/display/vellum.py +11 -3
- vellum_ee/workflows/display/workflows/base_workflow_display.py +45 -34
- vellum_ee/workflows/display/workflows/vellum_workflow_display.py +33 -80
- vellum_ee/workflows/server/virtual_file_loader.py +52 -22
- vellum_ee/workflows/tests/local_workflow/display/workflow.py +3 -5
- vellum_ee/workflows/tests/test_server.py +61 -0
- {vellum_ai-0.14.19.dist-info → vellum_ai-0.14.21.dist-info}/LICENSE +0 -0
- {vellum_ai-0.14.19.dist-info → vellum_ai-0.14.21.dist-info}/WHEEL +0 -0
- {vellum_ai-0.14.19.dist-info → vellum_ai-0.14.21.dist-info}/entry_points.txt +0 -0
@@ -18,7 +18,7 @@ class BaseClientWrapper:
|
|
18
18
|
headers: typing.Dict[str, str] = {
|
19
19
|
"X-Fern-Language": "Python",
|
20
20
|
"X-Fern-SDK-Name": "vellum-ai",
|
21
|
-
"X-Fern-SDK-Version": "0.14.
|
21
|
+
"X-Fern-SDK-Version": "0.14.21",
|
22
22
|
}
|
23
23
|
headers["X_API_KEY"] = self.api_key
|
24
24
|
return headers
|
@@ -28,7 +28,7 @@ class BaseAPINode(BaseNode, Generic[StateType]):
|
|
28
28
|
class Trigger(BaseNode.Trigger):
|
29
29
|
merge_behavior = MergeBehavior.AWAIT_ANY
|
30
30
|
|
31
|
-
url: str
|
31
|
+
url: str = ""
|
32
32
|
method: Optional[APIRequestMethod] = APIRequestMethod.GET
|
33
33
|
data: Optional[str] = None
|
34
34
|
json: Optional[Json] = None
|
@@ -63,7 +63,12 @@ class BaseAPINode(BaseNode, Generic[StateType]):
|
|
63
63
|
|
64
64
|
def _local_execute_api(self, data, headers, json, method, url):
|
65
65
|
try:
|
66
|
-
|
66
|
+
if data is not None:
|
67
|
+
prepped = Request(method=method.value, url=url, data=data, headers=headers).prepare()
|
68
|
+
elif json is not None:
|
69
|
+
prepped = Request(method=method.value, url=url, json=json, headers=headers).prepare()
|
70
|
+
else:
|
71
|
+
prepped = Request(method=method.value, url=url, headers=headers).prepare()
|
67
72
|
except Exception as e:
|
68
73
|
raise NodeException(f"Failed to prepare HTTP request: {e}", code=WorkflowErrorCode.PROVIDER_ERROR)
|
69
74
|
try:
|
@@ -78,7 +78,7 @@ class CodeExecutionNode(BaseNode[StateType], Generic[StateType, _OutputType], me
|
|
78
78
|
filepath: ClassVar[Optional[str]] = None
|
79
79
|
code: ClassVar[Optional[str]] = None
|
80
80
|
|
81
|
-
code_inputs: ClassVar[EntityInputsInterface]
|
81
|
+
code_inputs: ClassVar[EntityInputsInterface] = {}
|
82
82
|
runtime: CodeExecutionRuntime = "PYTHON_3_11_6"
|
83
83
|
packages: Optional[Sequence[CodeExecutionPackage]] = None
|
84
84
|
|
@@ -777,3 +777,44 @@ def main():
|
|
777
777
|
|
778
778
|
# AND the result should be the correct output
|
779
779
|
assert outputs == {"result": "hello", "log": "<class 'int'>\n"}
|
780
|
+
|
781
|
+
|
782
|
+
def test_run_node__execute_code__invalid_key_access():
|
783
|
+
# GIVEN a node that will access an invalid key
|
784
|
+
class ExampleCodeExecutionNode(CodeExecutionNode[BaseState, str]):
|
785
|
+
code = """\
|
786
|
+
def main(arg1: list) -> str:
|
787
|
+
return arg1["invalid"]
|
788
|
+
"""
|
789
|
+
code_inputs = {
|
790
|
+
"arg1": {"foo": "bar"},
|
791
|
+
}
|
792
|
+
runtime = "PYTHON_3_11_6"
|
793
|
+
|
794
|
+
# WHEN we run the node
|
795
|
+
with pytest.raises(NodeException) as exc_info:
|
796
|
+
node = ExampleCodeExecutionNode()
|
797
|
+
node.run()
|
798
|
+
|
799
|
+
# AND the result should be the correct output
|
800
|
+
assert exc_info.value.message == "dict has no key: 'invalid'"
|
801
|
+
|
802
|
+
|
803
|
+
def test_run_node__execute_code__value_key_access():
|
804
|
+
# GIVEN a node that will access the value key before the nested key
|
805
|
+
class ExampleCodeExecutionNode(CodeExecutionNode[BaseState, str]):
|
806
|
+
code = """\
|
807
|
+
def main(arg1: list) -> str:
|
808
|
+
return arg1["value"]["foo"]
|
809
|
+
"""
|
810
|
+
code_inputs = {
|
811
|
+
"arg1": {"foo": "bar"},
|
812
|
+
}
|
813
|
+
runtime = "PYTHON_3_11_6"
|
814
|
+
|
815
|
+
# WHEN we run the node
|
816
|
+
node = ExampleCodeExecutionNode()
|
817
|
+
outputs = node.run()
|
818
|
+
|
819
|
+
# AND the result should be the correct output
|
820
|
+
assert outputs == {"result": "bar", "log": ""}
|
@@ -41,7 +41,12 @@ class DictWrapper(dict):
|
|
41
41
|
|
42
42
|
def __getattr__(self, attr):
|
43
43
|
if attr not in self:
|
44
|
-
|
44
|
+
if attr == "value":
|
45
|
+
# In order to be backwards compatible with legacy Workflows, which wrapped
|
46
|
+
# several values as VellumValue objects, we use the "value" key to return itself
|
47
|
+
return self
|
48
|
+
|
49
|
+
raise AttributeError(f"dict has no key: '{attr}'")
|
45
50
|
|
46
51
|
item = super().__getitem__(attr)
|
47
52
|
if not isinstance(item, DictWrapper) and not isinstance(item, ListWrapper):
|
@@ -1,11 +1,14 @@
|
|
1
1
|
import pytest
|
2
|
-
from typing import List, Union
|
2
|
+
from typing import Any, List, Union
|
3
3
|
|
4
4
|
from pydantic import BaseModel
|
5
5
|
|
6
|
+
from vellum.client.types.chat_message import ChatMessage
|
7
|
+
from vellum.client.types.function_call import FunctionCall as FunctionCallType
|
8
|
+
from vellum.client.types.vellum_value import VellumValue
|
6
9
|
from vellum.workflows.errors.types import WorkflowErrorCode
|
7
10
|
from vellum.workflows.exceptions import NodeException
|
8
|
-
from vellum.workflows.nodes.utils import parse_type_from_str
|
11
|
+
from vellum.workflows.nodes.utils import cast_to_output_type, parse_type_from_str
|
9
12
|
from vellum.workflows.types.core import Json
|
10
13
|
|
11
14
|
|
@@ -131,3 +134,32 @@ def test_parse_type_from_str_error_cases(input_str, output_type, expected_except
|
|
131
134
|
assert excinfo.value.code == expected_code
|
132
135
|
|
133
136
|
assert expected_message in str(excinfo.value)
|
137
|
+
|
138
|
+
|
139
|
+
@pytest.mark.parametrize(
|
140
|
+
"output_type,expected_result",
|
141
|
+
[
|
142
|
+
(str, ""), # String
|
143
|
+
(int, 0), # Number
|
144
|
+
(float, 0.0), # Number
|
145
|
+
(Any, None), # Json
|
146
|
+
(FunctionCallType, {}), # FunctionCall
|
147
|
+
(List[ChatMessage], []), # Chat History
|
148
|
+
(List[VellumValue], []), # Array
|
149
|
+
(Union[float, int], 0.0), # Union
|
150
|
+
],
|
151
|
+
ids=[
|
152
|
+
"string",
|
153
|
+
"integer",
|
154
|
+
"float",
|
155
|
+
"json",
|
156
|
+
"function_call",
|
157
|
+
"chat_history",
|
158
|
+
"array",
|
159
|
+
"union",
|
160
|
+
],
|
161
|
+
)
|
162
|
+
def test_cast_to_output_type_none_value(output_type, expected_result):
|
163
|
+
"""Test that cast_to_output_type returns appropriate default values when None is provided."""
|
164
|
+
result = cast_to_output_type(None, output_type)
|
165
|
+
assert result == expected_result
|
vellum/workflows/nodes/utils.py
CHANGED
@@ -6,6 +6,7 @@ from typing import Any, Callable, Dict, ForwardRef, List, Optional, Type, TypeVa
|
|
6
6
|
|
7
7
|
from pydantic import BaseModel, create_model
|
8
8
|
|
9
|
+
from vellum.client.types.function_call import FunctionCall
|
9
10
|
from vellum.workflows.errors.types import WorkflowErrorCode
|
10
11
|
from vellum.workflows.exceptions import NodeException
|
11
12
|
from vellum.workflows.nodes import BaseNode
|
@@ -195,7 +196,32 @@ def _clean_output_type(output_type: Any) -> Any:
|
|
195
196
|
return output_type
|
196
197
|
|
197
198
|
|
199
|
+
def _get_default_value(output_type: Any) -> Any:
|
200
|
+
origin = get_origin(output_type)
|
201
|
+
args = get_args(output_type)
|
202
|
+
|
203
|
+
if output_type is int or output_type is float:
|
204
|
+
return 0.0
|
205
|
+
elif output_type is str:
|
206
|
+
return ""
|
207
|
+
elif origin is list:
|
208
|
+
return []
|
209
|
+
elif output_type is FunctionCall:
|
210
|
+
return {}
|
211
|
+
elif origin is Union:
|
212
|
+
# Always use the first argument type's default value
|
213
|
+
if args:
|
214
|
+
return _get_default_value(args[0])
|
215
|
+
return None
|
216
|
+
else:
|
217
|
+
# We defined Json as Any now which is why it returns None
|
218
|
+
return None
|
219
|
+
|
220
|
+
|
198
221
|
def cast_to_output_type(result: Any, output_type: Any) -> Any:
|
222
|
+
if result is None:
|
223
|
+
return _get_default_value(output_type)
|
224
|
+
|
199
225
|
clean_output_type = _clean_output_type(output_type)
|
200
226
|
DynamicModel = create_model("Output", output_type=(clean_output_type, ...))
|
201
227
|
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import ast
|
2
2
|
import inspect
|
3
|
+
import logging
|
3
4
|
from typing import TYPE_CHECKING, Callable, Generic, TypeVar, Union, get_args
|
4
5
|
|
5
6
|
from vellum.workflows.constants import undefined
|
@@ -10,6 +11,8 @@ if TYPE_CHECKING:
|
|
10
11
|
|
11
12
|
_T = TypeVar("_T")
|
12
13
|
|
14
|
+
logger = logging.getLogger(__name__)
|
15
|
+
|
13
16
|
|
14
17
|
class LazyReference(BaseDescriptor[_T], Generic[_T]):
|
15
18
|
def __init__(
|
@@ -50,7 +53,12 @@ class LazyReference(BaseDescriptor[_T], Generic[_T]):
|
|
50
53
|
if isinstance(self._get, str):
|
51
54
|
return self._get
|
52
55
|
|
53
|
-
|
56
|
+
try:
|
57
|
+
source = inspect.getsource(self._get).strip()
|
58
|
+
except Exception:
|
59
|
+
logger.exception("Error getting source for lazy reference")
|
60
|
+
return self._get.__name__
|
61
|
+
|
54
62
|
try:
|
55
63
|
parsed = ast.parse(source)
|
56
64
|
assignment = parsed.body[0]
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import pytest
|
2
|
+
|
3
|
+
from vellum.workflows.nodes import BaseNode
|
4
|
+
from vellum.workflows.references.lazy import LazyReference
|
5
|
+
|
6
|
+
|
7
|
+
@pytest.fixture
|
8
|
+
def mock_inspect_getsource(mocker):
|
9
|
+
return mocker.patch("inspect.getsource")
|
10
|
+
|
11
|
+
|
12
|
+
@pytest.fixture
|
13
|
+
def mock_logger(mocker):
|
14
|
+
return mocker.patch("vellum.workflows.references.lazy.logger")
|
15
|
+
|
16
|
+
|
17
|
+
def test_lazy_reference__inspect_getsource_fails(mock_inspect_getsource, mock_logger):
|
18
|
+
# GIVEN getsource fails to resolve the lambda's source code
|
19
|
+
mock_inspect_getsource.side_effect = Exception("test")
|
20
|
+
|
21
|
+
# WHEN a node with a lazy reference is defined
|
22
|
+
class MyNode(BaseNode):
|
23
|
+
lazy_reference = LazyReference(lambda: MyNode.Outputs.foo)
|
24
|
+
|
25
|
+
# THEN the name is the lambda function's name
|
26
|
+
assert MyNode.lazy_reference.instance
|
27
|
+
assert MyNode.lazy_reference.instance.name == "<lambda>"
|
28
|
+
|
29
|
+
# AND sentry is notified
|
30
|
+
assert mock_logger.exception.call_count == 1
|
@@ -22,34 +22,35 @@ vellum_ee/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
22
|
vellum_ee/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
23
23
|
vellum_ee/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
24
24
|
vellum_ee/workflows/display/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
25
|
-
vellum_ee/workflows/display/base.py,sha256=
|
25
|
+
vellum_ee/workflows/display/base.py,sha256=xhrMfirVLBuIeDuxdOUmtJ6CcfCx8DChFo-4HfMY6uc,1883
|
26
26
|
vellum_ee/workflows/display/nodes/__init__.py,sha256=436iSAh_Ex5tC68oEYvNgPu05ZVIAVXnS4PKGrQeZ0Y,321
|
27
|
-
vellum_ee/workflows/display/nodes/base_node_display.py,sha256=
|
28
|
-
vellum_ee/workflows/display/nodes/base_node_vellum_display.py,sha256=
|
29
|
-
vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=
|
27
|
+
vellum_ee/workflows/display/nodes/base_node_display.py,sha256=4xIkrKXVryaD0fPd7RxSpzIqPg6Y14NEB7j7m0DrJvM,18974
|
28
|
+
vellum_ee/workflows/display/nodes/base_node_vellum_display.py,sha256=rhbWYBQSXkpEPIvTa--LPwhsl8RnX4KyU6Ax0M0A0pU,1701
|
29
|
+
vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=59Nht1XAxMcNESFV1VmECrF01lZMnGkB_9JWaTAFnv0,2214
|
30
30
|
vellum_ee/workflows/display/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
31
31
|
vellum_ee/workflows/display/nodes/tests/test_base_node_display.py,sha256=QqR3Ly0RNrXwOeLdW5nERDFt0gRPf76n1bPES6o5UN4,1093
|
32
32
|
vellum_ee/workflows/display/nodes/types.py,sha256=St1BB6no528OyELGiyRabWao0GGw6mLhstQAvEACbGk,247
|
33
33
|
vellum_ee/workflows/display/nodes/utils.py,sha256=sloya5TpXsnot1HURc9L51INwflRqUzHxRVnCS9Cd-4,973
|
34
34
|
vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=nUIgH2s0-7IbQRNrBhLPyRNe8YIrx3Yo9HeeW-aXXFk,1668
|
35
|
-
vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=
|
35
|
+
vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=lumtypr0JEZfiA32hcs_olTmnT0wIUzPBy0pnZVfyU4,8532
|
36
36
|
vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py,sha256=oJAQrAm5iFQq0_fX94sMbS3RQEK1M1VsoUck4vsPs9A,5820
|
37
|
-
vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=
|
37
|
+
vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=IYx0nll0t-tsPcjfgpfHMZE4FJgMFIsOiaQanGLYF0Q,4410
|
38
38
|
vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=ybLIa4uclqVIy3VAQvI1ivg2tnK5Ug_1R5a69DFqL7E,11104
|
39
39
|
vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=I1Jkp2htRINJATtv1e-zs9BrReFX842djpiVgBPHDYg,2186
|
40
40
|
vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=p-PvlnxpBQ7IKskZi2A19jKAtKnSxJ8LPbGMA83VkFk,2805
|
41
41
|
vellum_ee/workflows/display/nodes/vellum/guardrail_node.py,sha256=aYZSJTxknU4LMiQdWk9LcK6CkhdozeDEMiRxfAyUNEc,2202
|
42
|
-
vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=
|
42
|
+
vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=3fJzrFoGJX_igzWKgXp7f7-owdVBG6xuy-kBSWNbNxc,8734
|
43
43
|
vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py,sha256=MU9I8CB1X1TgL1aa1eT6DHWwNJ-2v79t74xl0oy-fBo,5510
|
44
44
|
vellum_ee/workflows/display/nodes/vellum/map_node.py,sha256=8CPnn06HIBxBOiECevUffeVmQmCpec6WtPQnNl9gj9Y,3748
|
45
|
-
vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=
|
45
|
+
vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=xtyecs9mJ_WEwVpP12jxYwvehLXynhqLrPJ-Ahdk2GA,3232
|
46
46
|
vellum_ee/workflows/display/nodes/vellum/note_node.py,sha256=TMb8txILu2uWjzoxaghjgjlzeBAgzn4vkP_8zSh2qoE,1151
|
47
|
-
vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=
|
47
|
+
vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=9YR6MtxVq8Bavb0ud2lZX0t2Y_NUd-dY9kRgq8WBz-Y,3093
|
48
48
|
vellum_ee/workflows/display/nodes/vellum/retry_node.py,sha256=LgokATi7sSS38Fil-XjqoR4t7AMOJ-GzXRw6p606Svo,3397
|
49
49
|
vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=TxcAGZDl_hvJ7Y1hUi9YVEVrj9Ie0hKkASdpfRL4_cs,9227
|
50
50
|
vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=62baAElKoRKIoba0lLhnrXGWWx96B73VxKGxh7BaIxc,2612
|
51
51
|
vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=5EWzdA3TSUPlbJhs4uo1KGH6eGtDXZucVhlUoc_xpl4,3242
|
52
52
|
vellum_ee/workflows/display/nodes/vellum/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
53
|
+
vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py,sha256=p0fCvbKzpGvVrg67QmJd14m9E8_DG0u5s6SYIhzlkNA,4018
|
53
54
|
vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py,sha256=ulrpoYUW-5kIxfG4Lf5F2p0k_EoYKhmahEbF3P_eruM,1648
|
54
55
|
vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py,sha256=bg9INsXiWfyK047u8TD1oEOFYrqDq8GC7Hvgz69n7BE,1988
|
55
56
|
vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py,sha256=NuIw8Yb42KUdoGi3Ur8_7VPg50IC4hNrwAkCociwqNk,2091
|
@@ -62,23 +63,23 @@ vellum_ee/workflows/display/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
|
|
62
63
|
vellum_ee/workflows/display/tests/test_vellum_workflow_display.py,sha256=VD-4USiRlCcdC3Qe9WfdkxwFdircai0vqvuZCbELR84,9556
|
63
64
|
vellum_ee/workflows/display/tests/workflow_serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
64
65
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
65
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=
|
66
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=
|
67
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=
|
68
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py,sha256=
|
69
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py,sha256=
|
70
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py,sha256=
|
66
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=iR9vt-Xf8NSLHptrp1uTd_qbhHz-LrWkrRyKN96aqGM,2492
|
67
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=4R8cZ98JsGmIq-kmt3q519c4nCI7wCy5ynAUCUNnvuI,15605
|
68
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=PXoNUAgqfyNCAoYGWoo5D-_5SLEannn7SD08nxZmVe8,19781
|
69
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py,sha256=s6_mnk0pkztU59wYpSfOFpMhAJaRjmyfxM6WJGtnD4Y,6456
|
70
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py,sha256=PkSgghJDz0fpDB72HHPjLjo8LkZk-HpUkCQzRLX-iVw,40611
|
71
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py,sha256=dsJr8I9AdPwMOGszirfNDzZP2Ychd94aAKuPXAzknMk,4632
|
71
72
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py,sha256=IRazH2QR6F8RGqNemEnHueyj5DtEa6rFTYhT16S4jI8,15917
|
72
73
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py,sha256=V__y7uu-dy6TJjPeu4UDvaoO2yYwBRbPiW9uJdzWRx4,29828
|
73
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py,sha256=
|
74
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py,sha256=
|
74
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py,sha256=6ejs_C1cuaRHtc8Qb2qh8-b-juDwLwdfTBd-6CSDDYw,47672
|
75
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py,sha256=spaPscLDjlwR7_2JxB5HzsLp0ss7_GsAgdiS5qUQ_6o,8819
|
75
76
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=wgedEa2IVP2ssH_FLghoEmLgpJR41AY-iNIw1SESeqA,6106
|
76
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=
|
77
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=THQB73vAgdiRRk7GKWwzw99G-X3LLgEEVCb4QCQrrMQ,5773
|
77
78
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py,sha256=0N7lqB2WMvSItUY78EWpF-g4fXvhkc4NCY-Ws57OYsQ,7446
|
78
79
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py,sha256=XRtXTWtNXHe1g8E_mNcAhYZVjc0UcGlJRjq34_sd0jo,787
|
79
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=
|
80
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=
|
81
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=
|
80
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=nZ3IOZSX3cOg4XV5-PW-Hsu806vfzmOZyCpZyl1I50w,20605
|
81
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=8GakAJmf140XzQRZyr-BbZUt22h0lZKUFhNZY4zlD4g,16172
|
82
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=QifoIZja04F1ulMhKlfZHtOqhAWrbUXlnQpybBBzNdw,8449
|
82
83
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py,sha256=-bGp82C5_XgcVxeM80zWL9viogxvE4DGk7-5H__wwxA,8649
|
83
84
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py,sha256=elc4ak2OyI4y5P6GPnK2RwuZLcx4FL6hHlmhY3ARk6k,13008
|
84
85
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py,sha256=BzFNl9ECeGh0krm-CUjbBQQq0g7krANsp0Sh-j5dAkc,11322
|
@@ -86,18 +87,18 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_n
|
|
86
87
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=NdhE3lm7RMQ8DqkraPSq24IbOxNla9unbs4tsMWRzm4,3781
|
87
88
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=eD5686C9nWC5s6t08vbAnm9qf9t53gYQM-E1FwAa75c,3035
|
88
89
|
vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=huKAOeMJ2MKmp6XtbvMJTUadqynoV40Ypoz9jsBEBEQ,7431
|
89
|
-
vellum_ee/workflows/display/types.py,sha256=
|
90
|
+
vellum_ee/workflows/display/types.py,sha256=UZ23Hv2ULWFrMaG1mRSbVnPEa9YvuLlv0dOMkA2j5_Y,2466
|
90
91
|
vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
91
92
|
vellum_ee/workflows/display/utils/expressions.py,sha256=9FpOslDI-RCR5m4TgAu9KCHh4aTVnh7CHR2ykyMUDw0,1151
|
92
93
|
vellum_ee/workflows/display/utils/vellum.py,sha256=EVPQUSsZ3OIeLTEbV6LHPor37t9fnj9kJxDqP4PmTLQ,8234
|
93
|
-
vellum_ee/workflows/display/vellum.py,sha256=
|
94
|
+
vellum_ee/workflows/display/vellum.py,sha256=bevbLCd2KqJBKqJ3lQayeRfjY7x1Djf57F9iJ-6KBJw,5162
|
94
95
|
vellum_ee/workflows/display/workflows/__init__.py,sha256=kapXsC67VJcgSuiBMa86FdePG5A9kMB5Pi4Uy1O2ob4,207
|
95
|
-
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256
|
96
|
+
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=2PyHM8bpgRqNtImCtN9fi5VqYvkOi5saVM9OXlwGmGQ,20400
|
96
97
|
vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=kp0u8LN_2IwshLrhMImhpZx1hRyAcD5gXY-kDuuaGMQ,1269
|
97
98
|
vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=Ny9VWjCxc1_w8Z5xiQEJmNmEwtjlDlxgFCrmCWSmFmA,8511
|
98
|
-
vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=
|
99
|
+
vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=wLXrYY0ccR37IG2MWwV49ELmwquVwDlDe3W4KXwOitM,16691
|
99
100
|
vellum_ee/workflows/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
100
|
-
vellum_ee/workflows/server/virtual_file_loader.py,sha256=
|
101
|
+
vellum_ee/workflows/server/virtual_file_loader.py,sha256=ET-Q83W5Cgqzqz3qtFNwtS2nJEIcm3VtvR5kffsT3VY,2262
|
101
102
|
vellum_ee/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
102
103
|
vellum_ee/workflows/tests/local_files/__init__.py,sha256=UyP6kKkRqr9cTKHQF4MVLdLk5MM9GGcLuqxXsQGm22Y,51
|
103
104
|
vellum_ee/workflows/tests/local_files/base_class.py,sha256=UuiC7J68MVr6A4949QYiBpXOLdsvFG_Cw1muEPiHT6I,298
|
@@ -110,7 +111,7 @@ vellum_ee/workflows/tests/local_workflow/display/__init__.py,sha256=xo75Uqb4aErO
|
|
110
111
|
vellum_ee/workflows/tests/local_workflow/display/nodes/__init__.py,sha256=szW_mgOUriyZ6v1vlnevBgkzNi8g83-ihS98UOLHVcE,155
|
111
112
|
vellum_ee/workflows/tests/local_workflow/display/nodes/final_output.py,sha256=Kv92TCREiZsB9531KZYaBIq83uHn7e_ECw_yAbD1qfk,1017
|
112
113
|
vellum_ee/workflows/tests/local_workflow/display/nodes/templating_node.py,sha256=5cankEe1rDZlXKgILFSPbmN0tUZhIdmcFgz_AguXTJc,1229
|
113
|
-
vellum_ee/workflows/tests/local_workflow/display/workflow.py,sha256=
|
114
|
+
vellum_ee/workflows/tests/local_workflow/display/workflow.py,sha256=rYjUO0TN6GPCDldD4liWFPOLquJmw-sP4HYtyGspe08,2024
|
114
115
|
vellum_ee/workflows/tests/local_workflow/inputs.py,sha256=4cgsZBoUbIY0Rs8gknC9yqxQ-sSoULclx_SAm1FT2RA,96
|
115
116
|
vellum_ee/workflows/tests/local_workflow/metadata.json,sha256=rdu3h5qkFZiqhCAMxoyoWyMI0O8QALC5-URvSIW6F00,24
|
116
117
|
vellum_ee/workflows/tests/local_workflow/nodes/__init__.py,sha256=1F6jxUpSKfPXPj4ZZKSbnX6Mg-VwF3euLJSZfGn6xkM,127
|
@@ -118,14 +119,14 @@ vellum_ee/workflows/tests/local_workflow/nodes/final_output.py,sha256=ZX7zBv87zi
|
|
118
119
|
vellum_ee/workflows/tests/local_workflow/nodes/templating_node.py,sha256=NQwFN61QkHfI3Vssz-B0NKGfupK8PU0FDSAIAhYBLi0,325
|
119
120
|
vellum_ee/workflows/tests/local_workflow/workflow.py,sha256=A4qOzOPNwePYxWbcAgIPLsmrVS_aVEZEc-wULSv787Q,393
|
120
121
|
vellum_ee/workflows/tests/test_display_meta.py,sha256=C25dErwghPNXio49pvSRxyOuc96srH6eYEwTAWdE2zY,2258
|
121
|
-
vellum_ee/workflows/tests/test_server.py,sha256=
|
122
|
+
vellum_ee/workflows/tests/test_server.py,sha256=IWqjJXSbVFuV3w6b9lB3N6yoVAHJicmJuubASvw5QQM,2276
|
122
123
|
vellum_ee/workflows/tests/test_virtual_files.py,sha256=TJEcMR0v2S8CkloXNmCHA0QW0K6pYNGaIjraJz7sFvY,2762
|
123
124
|
vellum/__init__.py,sha256=qJRjommzKdcsfZUNkqN2k1BuOwVVSuX4Nuv9ITCz1AM,36536
|
124
125
|
vellum/client/README.md,sha256=JkCJjmMZl4jrPj46pkmL9dpK4gSzQQmP5I7z4aME4LY,4749
|
125
126
|
vellum/client/__init__.py,sha256=tKtdM1_GqmGq1gpi9ydWD_T-MM7fPn8QdHh8ww19cNI,117564
|
126
127
|
vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
|
127
128
|
vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
|
128
|
-
vellum/client/core/client_wrapper.py,sha256=
|
129
|
+
vellum/client/core/client_wrapper.py,sha256=r9FX6fq7T8lmJtpc4VW9IORBb0_3s14dOpTkKYA_l68,1869
|
129
130
|
vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
|
130
131
|
vellum/client/core/file.py,sha256=X9IbmkZmB2bB_DpmZAO3crWdXagOakAyn6UCOCImCPg,2322
|
131
132
|
vellum/client/core/http_client.py,sha256=R0pQpCppnEtxccGvXl4uJ76s7ro_65Fo_erlNNLp_AI,19228
|
@@ -1396,12 +1397,12 @@ vellum/workflows/nodes/core/try_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW
|
|
1396
1397
|
vellum/workflows/nodes/core/try_node/tests/test_node.py,sha256=h6eUc3SggvhzBWlOD0PrPUlkoCSQHwjqYn81VkxSIxU,4948
|
1397
1398
|
vellum/workflows/nodes/displayable/__init__.py,sha256=6F_4DlSwvHuilWnIalp8iDjjDXl0Nmz4QzJV2PYe5RI,1023
|
1398
1399
|
vellum/workflows/nodes/displayable/api_node/__init__.py,sha256=MoxdQSnidIj1Nf_d-hTxlOxcZXaZnsWFDbE-PkTK24o,56
|
1399
|
-
vellum/workflows/nodes/displayable/api_node/node.py,sha256=
|
1400
|
+
vellum/workflows/nodes/displayable/api_node/node.py,sha256=cp0nAukcOpM6TcNhbz12h08TMJxp_LM-MLDl1dAzYsk,2534
|
1400
1401
|
vellum/workflows/nodes/displayable/api_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1401
1402
|
vellum/workflows/nodes/displayable/api_node/tests/test_api_node.py,sha256=fiskhfcI4c6CxFlbSWb1JKsuq-98zAeUWOExc848ALw,3130
|
1402
1403
|
vellum/workflows/nodes/displayable/bases/__init__.py,sha256=0mWIx3qUrzllV7jqt7wN03vWGMuI1WrrLZeMLT2Cl2c,304
|
1403
1404
|
vellum/workflows/nodes/displayable/bases/api_node/__init__.py,sha256=1jwx4WC358CLA1jgzl_UD-rZmdMm2v9Mps39ndwCD7U,64
|
1404
|
-
vellum/workflows/nodes/displayable/bases/api_node/node.py,sha256=
|
1405
|
+
vellum/workflows/nodes/displayable/bases/api_node/node.py,sha256=I4zdxSXJ7-pjVcNNrSAEN_hAnhQGUBM6u5RczCActkw,4343
|
1405
1406
|
vellum/workflows/nodes/displayable/bases/base_prompt_node/__init__.py,sha256=Org3xTvgp1pA0uUXFfnJr29D3HzCey2lEdYF4zbIUgo,70
|
1406
1407
|
vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py,sha256=HGNoGLJ9lbqflGdYFDIiuHFyi0iJ-agJu4kkJ7D3dGs,3212
|
1407
1408
|
vellum/workflows/nodes/displayable/bases/inline_prompt_node/__init__.py,sha256=Hl35IAoepRpE-j4cALaXVJIYTYOF3qszyVbxTj4kS1s,82
|
@@ -1416,12 +1417,12 @@ vellum/workflows/nodes/displayable/bases/tests/test_utils.py,sha256=eqdqbKNRWVMD
|
|
1416
1417
|
vellum/workflows/nodes/displayable/bases/types.py,sha256=C37B2Qh2YP7s7pUjd-EYKc2Zl1TbnCgI_mENuUSb8bo,1706
|
1417
1418
|
vellum/workflows/nodes/displayable/bases/utils.py,sha256=ckMUenSsNkiYmSw6FmjSMHYaCk8Y8_sUjL6lkFFEqts,5412
|
1418
1419
|
vellum/workflows/nodes/displayable/code_execution_node/__init__.py,sha256=0FLWMMktpzSnmBMizQglBpcPrP80fzVsoJwJgf822Cg,76
|
1419
|
-
vellum/workflows/nodes/displayable/code_execution_node/node.py,sha256=
|
1420
|
+
vellum/workflows/nodes/displayable/code_execution_node/node.py,sha256=oUBfghBMe6JzrPm5e3tGNuBqILwnaBfnCnOSUX-HfOE,9552
|
1420
1421
|
vellum/workflows/nodes/displayable/code_execution_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1421
1422
|
vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1422
1423
|
vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/main.py,sha256=5QsbmkzSlSbcbWTG_JmIqcP-JNJzOPTKxGzdHos19W4,79
|
1423
|
-
vellum/workflows/nodes/displayable/code_execution_node/tests/test_code_execution_node.py,sha256=
|
1424
|
-
vellum/workflows/nodes/displayable/code_execution_node/utils.py,sha256
|
1424
|
+
vellum/workflows/nodes/displayable/code_execution_node/tests/test_code_execution_node.py,sha256=xAaoOfQHQUlp0iKlig87t0aT2cJM-8PxiTb1QDg8VmY,24641
|
1425
|
+
vellum/workflows/nodes/displayable/code_execution_node/utils.py,sha256=tBuR9cV1caFtpGuQrw_LcPDAfzLI-Mpmi1Klzpr34KM,3870
|
1425
1426
|
vellum/workflows/nodes/displayable/conditional_node/__init__.py,sha256=AS_EIqFdU1F9t8aLmbZU-rLh9ry6LCJ0uj0D8F0L5Uw,72
|
1426
1427
|
vellum/workflows/nodes/displayable/conditional_node/node.py,sha256=Qjfl33gZ3JEgxBA1EgzSUebboGvsARthIxxcQyvx5Gg,1152
|
1427
1428
|
vellum/workflows/nodes/displayable/final_output_node/__init__.py,sha256=G7VXM4OWpubvSJtVkGmMNeqgb9GkM7qZT838eL18XU4,72
|
@@ -1461,8 +1462,8 @@ vellum/workflows/nodes/experimental/openai_chat_completion_node/node.py,sha256=c
|
|
1461
1462
|
vellum/workflows/nodes/mocks.py,sha256=a1FjWEIocseMfjzM-i8DNozpUsaW0IONRpZmXBoWlyc,10455
|
1462
1463
|
vellum/workflows/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1463
1464
|
vellum/workflows/nodes/tests/test_mocks.py,sha256=mfPvrs75PKcsNsbJLQAN6PDFoVqs9TmQxpdyFKDdO60,7837
|
1464
|
-
vellum/workflows/nodes/tests/test_utils.py,sha256=
|
1465
|
-
vellum/workflows/nodes/utils.py,sha256=
|
1465
|
+
vellum/workflows/nodes/tests/test_utils.py,sha256=qNB6ApIsnFtE_9HDaEah9KD-zX8e10FhDixewS1uRcc,5199
|
1466
|
+
vellum/workflows/nodes/utils.py,sha256=Tc3TAmAytb-gi30BAyzGY7DG0uS1_7KTGYdjrvKUSt0,8362
|
1466
1467
|
vellum/workflows/outputs/__init__.py,sha256=AyZ4pRh_ACQIGvkf0byJO46EDnSix1ZCAXfvh-ms1QE,94
|
1467
1468
|
vellum/workflows/outputs/base.py,sha256=b4Dnha1miKu3uFJYptKKflIHNuajPF2BNKy0BTt8Tjc,8622
|
1468
1469
|
vellum/workflows/ports/__init__.py,sha256=bZuMt-R7z5bKwpu4uPW7LlJeePOQWmCcDSXe5frUY5g,101
|
@@ -1475,10 +1476,11 @@ vellum/workflows/references/environment_variable.py,sha256=-gfOcdYwVp9ztSUYz6h2W
|
|
1475
1476
|
vellum/workflows/references/execution_count.py,sha256=JILHqt8ELdc9ct-WsVCA5X-rKiP1rmJODw-XTf4kpHI,722
|
1476
1477
|
vellum/workflows/references/external_input.py,sha256=c_4SojTpykCSbGS1Pjmx9FfquyYGMPksoj0AbrWv7Go,2064
|
1477
1478
|
vellum/workflows/references/input.py,sha256=3INu-TLTi4dziWmva6LO3WvgDlPzsjayUx61cVvqLJA,325
|
1478
|
-
vellum/workflows/references/lazy.py,sha256=
|
1479
|
+
vellum/workflows/references/lazy.py,sha256=abGEQ7EUKEAZqUrQtt0YLq6Ipi7vqc-oDJhUkwAFW8c,3116
|
1479
1480
|
vellum/workflows/references/node.py,sha256=LP854wDVs-9I_aZ7-nkbwXqL2H7W2_3LED2e9FixNS8,1418
|
1480
1481
|
vellum/workflows/references/output.py,sha256=-g97wkZDf-6_l_-NM4C_8v1VBt2c7NCPhtrG2lBLKSc,2808
|
1481
1482
|
vellum/workflows/references/state_value.py,sha256=bInUF0A3Pt4-zhA0f6LdSuyv8tz7n5QRkHAEn4gsmqI,711
|
1483
|
+
vellum/workflows/references/tests/test_lazy.py,sha256=0s50-LizMTlSTBQahpK0fg_xqCucA8YTp6QmIMqPvMk,919
|
1482
1484
|
vellum/workflows/references/vellum_secret.py,sha256=Od4d19a5yletWMqNfJR5d_mZQUkVcFzj29mE-T9J7yE,480
|
1483
1485
|
vellum/workflows/references/workflow_input.py,sha256=86IuhlBz-9cGxeUzizyjdp482ajcl7h8MnX1soNFMII,1415
|
1484
1486
|
vellum/workflows/resolvers/__init__.py,sha256=eH6hTvZO4IciDaf_cf7aM2vs-DkBDyJPycOQevJxQnI,82
|
@@ -1520,8 +1522,8 @@ vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnad
|
|
1520
1522
|
vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1521
1523
|
vellum/workflows/workflows/tests/test_base_workflow.py,sha256=NRteiICyJvDM5zrtUfq2fZoXcGQVaWC9xmNlLLVW0cU,7979
|
1522
1524
|
vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
|
1523
|
-
vellum_ai-0.14.
|
1524
|
-
vellum_ai-0.14.
|
1525
|
-
vellum_ai-0.14.
|
1526
|
-
vellum_ai-0.14.
|
1527
|
-
vellum_ai-0.14.
|
1525
|
+
vellum_ai-0.14.21.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
|
1526
|
+
vellum_ai-0.14.21.dist-info/METADATA,sha256=UqD3qeDGaeZTzlZPvYTpGbLEGaN7RYFGaTsxUDoboCo,5408
|
1527
|
+
vellum_ai-0.14.21.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
1528
|
+
vellum_ai-0.14.21.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
|
1529
|
+
vellum_ai-0.14.21.dist-info/RECORD,,
|
@@ -46,17 +46,17 @@ StateValueDisplayOverridesType = TypeVar("StateValueDisplayOverridesType", bound
|
|
46
46
|
|
47
47
|
|
48
48
|
@dataclass
|
49
|
-
class
|
49
|
+
class EdgeDisplay:
|
50
50
|
id: UUID
|
51
51
|
|
52
52
|
|
53
53
|
@dataclass
|
54
|
-
class EdgeDisplay
|
55
|
-
|
56
|
-
|
54
|
+
class EdgeDisplayOverrides(EdgeDisplay):
|
55
|
+
"""
|
56
|
+
DEPRECATED: Use EdgeDisplay instead. Will be removed in 0.15.0
|
57
|
+
"""
|
57
58
|
|
58
|
-
|
59
|
-
EdgeDisplayOverridesType = TypeVar("EdgeDisplayOverridesType", bound=EdgeDisplayOverrides)
|
59
|
+
pass
|
60
60
|
|
61
61
|
|
62
62
|
@dataclass
|
@@ -115,6 +115,10 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
|
|
115
115
|
port_displays: Dict[Port, PortDisplayOverrides] = {}
|
116
116
|
node_input_ids_by_name: ClassVar[Dict[str, UUID]] = {}
|
117
117
|
|
118
|
+
# Used to explicitly set the target handle id for a node
|
119
|
+
# Once all nodes are Generic Nodes, we may replace this with a trigger_id or trigger attribute
|
120
|
+
target_handle_id: ClassVar[Optional[UUID]] = None
|
121
|
+
|
118
122
|
# Used to store the mapping between node types and their display classes
|
119
123
|
_node_display_registry: Dict[Type[NodeType], Type["BaseNodeDisplay"]] = {}
|
120
124
|
|
@@ -205,7 +209,7 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
|
|
205
209
|
"base": self.get_base().dict(),
|
206
210
|
"definition": self.get_definition().dict(),
|
207
211
|
"trigger": {
|
208
|
-
"id": str(self.
|
212
|
+
"id": str(self.get_target_handle_id()),
|
209
213
|
"merge_behavior": node.Trigger.merge_behavior.value,
|
210
214
|
},
|
211
215
|
"ports": ports,
|
@@ -255,7 +259,24 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
|
|
255
259
|
return PortDisplay(id=port_id, node_id=self.node_id)
|
256
260
|
|
257
261
|
def get_trigger_id(self) -> UUID:
|
258
|
-
return
|
262
|
+
return self.get_target_handle_id()
|
263
|
+
|
264
|
+
def get_target_handle_id(self) -> UUID:
|
265
|
+
"""
|
266
|
+
Is the same as `get_trigger_id()` but kept for legacy workflows. Once all workflows have been updated to
|
267
|
+
become Generic Nodes, we should be able to drive off of only `get_trigger_id()` going forward
|
268
|
+
"""
|
269
|
+
|
270
|
+
return self._get_node_display_uuid("target_handle_id")
|
271
|
+
|
272
|
+
def get_target_handle_id_by_source_node_id(self, source_node_id: UUID) -> UUID:
|
273
|
+
"""
|
274
|
+
In the vast majority of cases, nodes will only have a single target handle and can be retrieved independently
|
275
|
+
of the source node. However, in rare cases (such as legacy Merge nodes), this method can be overridden to
|
276
|
+
account for the case of retrieving one amongst multiple target handles on a node.
|
277
|
+
"""
|
278
|
+
|
279
|
+
return self.get_target_handle_id()
|
259
280
|
|
260
281
|
@classmethod
|
261
282
|
def get_from_node_display_registry(cls, node_class: Type[NodeType]) -> Optional[Type["BaseNodeDisplay"]]:
|
@@ -315,6 +336,10 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
|
|
315
336
|
|
316
337
|
raise ValueError(f"Node {cls.__name__} must define an explicit {attribute} of type {attribute_type.__name__}.")
|
317
338
|
|
339
|
+
def _get_node_display_uuid(self, attribute: str) -> UUID:
|
340
|
+
explicit_value = self._get_explicit_node_display_attr(attribute, UUID)
|
341
|
+
return explicit_value if explicit_value else uuid4_from_hash(f"{self.node_id}|{attribute}")
|
342
|
+
|
318
343
|
def __init_subclass__(cls, **kwargs: Any) -> None:
|
319
344
|
super().__init_subclass__(**kwargs)
|
320
345
|
if not cls._node_display_registry:
|
@@ -4,7 +4,6 @@ from typing import ClassVar, Dict, Optional
|
|
4
4
|
from vellum.workflows.nodes.utils import get_unadorned_node
|
5
5
|
from vellum.workflows.ports import Port
|
6
6
|
from vellum.workflows.types.generics import NodeType
|
7
|
-
from vellum.workflows.utils.uuids import uuid4_from_hash
|
8
7
|
from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
|
9
8
|
from vellum_ee.workflows.display.nodes.types import PortDisplay
|
10
9
|
from vellum_ee.workflows.display.vellum import NodeDisplayComment, NodeDisplayData
|
@@ -14,13 +13,6 @@ class BaseNodeVellumDisplay(BaseNodeDisplay[NodeType]):
|
|
14
13
|
# Used to explicitly set display data for a node
|
15
14
|
display_data: ClassVar[Optional[NodeDisplayData]] = None
|
16
15
|
|
17
|
-
# Used to explicitly set the target handle id for a node
|
18
|
-
target_handle_id: ClassVar[Optional[UUID]] = None
|
19
|
-
|
20
|
-
def _get_node_display_uuid(self, attribute: str) -> UUID:
|
21
|
-
explicit_value = self._get_explicit_node_display_attr(attribute, UUID)
|
22
|
-
return explicit_value if explicit_value else uuid4_from_hash(f"{self.node_id}|{attribute}")
|
23
|
-
|
24
16
|
def get_display_data(self) -> NodeDisplayData:
|
25
17
|
explicit_value = self._get_explicit_node_display_attr("display_data", NodeDisplayData)
|
26
18
|
docstring = self._node.__doc__
|
@@ -40,18 +32,6 @@ class BaseNodeVellumDisplay(BaseNodeDisplay[NodeType]):
|
|
40
32
|
|
41
33
|
return explicit_value if explicit_value else NodeDisplayData()
|
42
34
|
|
43
|
-
def get_target_handle_id(self) -> UUID:
|
44
|
-
return self._get_node_display_uuid("target_handle_id")
|
45
|
-
|
46
|
-
def get_target_handle_id_by_source_node_id(self, source_node_id: UUID) -> UUID:
|
47
|
-
"""
|
48
|
-
In the vast majority of cases, nodes will only have a single target handle and can be retrieved independently
|
49
|
-
of the source node. However, in rare cases (such as legacy Merge nodes), this method can be overridden to
|
50
|
-
account for the case of retrieving one amongst multiple target handles on a node.
|
51
|
-
"""
|
52
|
-
|
53
|
-
return self.get_target_handle_id()
|
54
|
-
|
55
35
|
def get_source_handle_id(self, port_displays: Dict[Port, PortDisplay]) -> UUID:
|
56
36
|
unadorned_node = get_unadorned_node(self._node)
|
57
37
|
default_port = unadorned_node.Ports.default
|
@@ -7,12 +7,12 @@ from vellum.workflows.types.generics import NodeType
|
|
7
7
|
from vellum.workflows.utils.uuids import uuid4_from_hash
|
8
8
|
|
9
9
|
if TYPE_CHECKING:
|
10
|
-
from vellum_ee.workflows.display.
|
10
|
+
from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
|
11
11
|
|
12
12
|
|
13
13
|
def get_node_display_class(
|
14
|
-
base_class: Type["
|
15
|
-
) -> Type["
|
14
|
+
base_class: Type["BaseNodeDisplay"], node_class: Type[NodeType], root_node_class: Optional[Type[NodeType]] = None
|
15
|
+
) -> Type["BaseNodeDisplay"]:
|
16
16
|
node_display_class = base_class.get_from_node_display_registry(node_class)
|
17
17
|
if node_display_class:
|
18
18
|
if not issubclass(node_display_class, base_class):
|