vellum-ai 0.14.19__py3-none-any.whl → 0.14.20__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/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/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.20.dist-info}/METADATA +1 -1
- {vellum_ai-0.14.19.dist-info → vellum_ai-0.14.20.dist-info}/RECORD +37 -35
- vellum_ee/workflows/display/base.py +6 -2
- 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/code_execution_node.py +7 -3
- vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py +2 -6
- 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 +10 -2
- vellum_ee/workflows/display/workflows/base_workflow_display.py +60 -32
- vellum_ee/workflows/display/workflows/vellum_workflow_display.py +33 -78
- vellum_ee/workflows/server/virtual_file_loader.py +52 -22
- vellum_ee/workflows/tests/test_server.py +61 -0
- {vellum_ai-0.14.19.dist-info → vellum_ai-0.14.20.dist-info}/LICENSE +0 -0
- {vellum_ai-0.14.19.dist-info → vellum_ai-0.14.20.dist-info}/WHEEL +0 -0
- {vellum_ai-0.14.19.dist-info → vellum_ai-0.14.20.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.20",
|
22
22
|
}
|
23
23
|
headers["X_API_KEY"] = self.api_key
|
24
24
|
return headers
|
@@ -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,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,11 +22,11 @@ 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=-IR5QuWaZKAQHC-8L7T7FLqOYsjzz-tgmKrXOO7OKhY,2040
|
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
|
@@ -34,22 +34,23 @@ vellum_ee/workflows/display/nodes/utils.py,sha256=sloya5TpXsnot1HURc9L51INwflRqU
|
|
34
34
|
vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=nUIgH2s0-7IbQRNrBhLPyRNe8YIrx3Yo9HeeW-aXXFk,1668
|
35
35
|
vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=hoV-cUtS6H9kmRQXHd2py95GRWI_dAnnaPwvlNBkDOQ,8571
|
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
45
|
vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=HkNMgdQELiON42jdO-xDLmqrEKdGx1RVqrz2DXNTLS8,3239
|
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=NeaISY7bzq6yeBSeG8XblkOIKakm2dS-modocGGMnkc,2526
|
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=JBdPRAaHxn-_NCsCLZbeWoiquhsj5DcAYgoUxdSHpzg,5168
|
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=9IRGsoTJN4T1aLuVkfF6IW7gXYKesW32nT_jTgOhZvw,21175
|
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=kr3fpegZOE4eAR6w543hpsv8GbYdMiSa1edku-PgnfI,16910
|
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
|
@@ -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=pleLWhyzDudDyYZo53X7C5M9jfmgGjkQ4KateNHPl7U,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
|
@@ -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
|
@@ -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.20.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
|
1526
|
+
vellum_ai-0.14.20.dist-info/METADATA,sha256=S1TOATNmyIpyOm-Jhj28lJQ-hYaJUtQ7FZMmfVo2Neo,5408
|
1527
|
+
vellum_ai-0.14.20.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
1528
|
+
vellum_ai-0.14.20.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
|
1529
|
+
vellum_ai-0.14.20.dist-info/RECORD,,
|
@@ -46,12 +46,16 @@ 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
|
54
|
+
class EdgeDisplayOverrides(EdgeDisplay):
|
55
|
+
"""
|
56
|
+
DEPRECATED: Use EdgeDisplay instead. Will be removed in 0.15.0
|
57
|
+
"""
|
58
|
+
|
55
59
|
pass
|
56
60
|
|
57
61
|
|
@@ -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):
|
@@ -24,17 +24,20 @@ class BaseCodeExecutionNodeDisplay(BaseNodeVellumDisplay[_CodeExecutionNodeType]
|
|
24
24
|
node = self._node
|
25
25
|
node_id = self.node_id
|
26
26
|
raw_code = raise_if_descriptor(node.code)
|
27
|
+
filepath = raise_if_descriptor(node.filepath)
|
27
28
|
|
28
29
|
code_value: Optional[str]
|
29
30
|
if raw_code:
|
30
31
|
code_value = raw_code
|
31
|
-
|
32
|
+
elif filepath:
|
32
33
|
node_file_path = inspect.getfile(node)
|
33
34
|
file_code = read_file_from_path(
|
34
35
|
node_filepath=node_file_path,
|
35
|
-
script_filepath=
|
36
|
+
script_filepath=filepath,
|
36
37
|
)
|
37
38
|
code_value = file_code
|
39
|
+
else:
|
40
|
+
code_value = ""
|
38
41
|
|
39
42
|
code_inputs = raise_if_descriptor(node.code_inputs)
|
40
43
|
|
@@ -44,7 +47,8 @@ class BaseCodeExecutionNodeDisplay(BaseNodeVellumDisplay[_CodeExecutionNodeType]
|
|
44
47
|
input_name=variable_name,
|
45
48
|
value=variable_value,
|
46
49
|
display_context=display_context,
|
47
|
-
input_id=self.node_input_ids_by_name.get(variable_name)
|
50
|
+
input_id=self.node_input_ids_by_name.get(f"{CodeExecutionNode.code_inputs.name}.{variable_name}")
|
51
|
+
or self.node_input_ids_by_name.get(variable_name),
|
48
52
|
)
|
49
53
|
for variable_name, variable_value in code_inputs.items()
|
50
54
|
]
|
@@ -1,5 +1,5 @@
|
|
1
1
|
from uuid import UUID
|
2
|
-
from typing import Callable,
|
2
|
+
from typing import Callable, Dict, Generic, List, Optional, Tuple, Type, TypeVar, Union
|
3
3
|
|
4
4
|
from vellum import FunctionDefinition, PromptBlock, RichTextChildBlock, VellumVariable
|
5
5
|
from vellum.workflows.nodes import InlinePromptNode
|
@@ -17,10 +17,6 @@ _InlinePromptNodeType = TypeVar("_InlinePromptNodeType", bound=InlinePromptNode)
|
|
17
17
|
|
18
18
|
|
19
19
|
class BaseInlinePromptNodeDisplay(BaseNodeVellumDisplay[_InlinePromptNodeType], Generic[_InlinePromptNodeType]):
|
20
|
-
output_id: ClassVar[Optional[UUID]] = None
|
21
|
-
array_output_id: ClassVar[Optional[UUID]] = None
|
22
|
-
prompt_input_ids_by_name: ClassVar[Dict[str, UUID]] = {}
|
23
|
-
|
24
20
|
def serialize(
|
25
21
|
self, display_context: WorkflowDisplayContext, error_output_id: Optional[UUID] = None, **kwargs
|
26
22
|
) -> JsonObject:
|
@@ -98,7 +94,7 @@ class BaseInlinePromptNodeDisplay(BaseNodeVellumDisplay[_InlinePromptNodeType],
|
|
98
94
|
input_name=variable_name,
|
99
95
|
value=variable_value,
|
100
96
|
display_context=display_context,
|
101
|
-
input_id=self.
|
97
|
+
input_id=self.node_input_ids_by_name.get(variable_name),
|
102
98
|
)
|
103
99
|
vellum_variable_type = infer_vellum_variable_type(variable_value)
|
104
100
|
node_inputs.append(node_input)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
from uuid import UUID
|
2
|
-
from typing import
|
2
|
+
from typing import Generic, Optional, TypeVar, cast
|
3
3
|
|
4
4
|
from vellum.workflows.nodes.displayable.prompt_deployment_node import PromptDeploymentNode
|
5
5
|
from vellum.workflows.references import OutputReference
|
@@ -16,10 +16,6 @@ _PromptDeploymentNodeType = TypeVar("_PromptDeploymentNodeType", bound=PromptDep
|
|
16
16
|
class BasePromptDeploymentNodeDisplay(
|
17
17
|
BaseNodeVellumDisplay[_PromptDeploymentNodeType], Generic[_PromptDeploymentNodeType]
|
18
18
|
):
|
19
|
-
output_id: ClassVar[Optional[UUID]] = None
|
20
|
-
array_output_id: ClassVar[Optional[UUID]] = None
|
21
|
-
prompt_input_ids_by_name: ClassVar[Dict[str, UUID]] = {}
|
22
|
-
|
23
19
|
def serialize(
|
24
20
|
self, display_context: WorkflowDisplayContext, error_output_id: Optional[UUID] = None, **kwargs
|
25
21
|
) -> JsonObject:
|
@@ -34,7 +30,7 @@ class BasePromptDeploymentNodeDisplay(
|
|
34
30
|
input_name=variable_name,
|
35
31
|
value=variable_value,
|
36
32
|
display_context=display_context,
|
37
|
-
input_id=self.
|
33
|
+
input_id=self.node_input_ids_by_name.get(variable_name),
|
38
34
|
)
|
39
35
|
for variable_name, variable_value in prompt_inputs.items()
|
40
36
|
]
|