vellum-ai 0.14.23__py3-none-any.whl → 0.14.24__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.
Files changed (26) hide show
  1. vellum/client/core/client_wrapper.py +1 -1
  2. vellum/plugins/pydantic.py +2 -0
  3. vellum/workflows/nodes/core/inline_subworkflow_node/node.py +6 -0
  4. vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py +27 -0
  5. {vellum_ai-0.14.23.dist-info → vellum_ai-0.14.24.dist-info}/METADATA +1 -1
  6. {vellum_ai-0.14.23.dist-info → vellum_ai-0.14.24.dist-info}/RECORD +26 -24
  7. vellum_ee/workflows/display/base.py +26 -4
  8. vellum_ee/workflows/display/editor/__init__.py +7 -0
  9. vellum_ee/workflows/display/editor/types.py +22 -0
  10. vellum_ee/workflows/display/nodes/base_node_display.py +2 -1
  11. vellum_ee/workflows/display/nodes/base_node_vellum_display.py +1 -1
  12. vellum_ee/workflows/display/nodes/vellum/api_node.py +1 -1
  13. vellum_ee/workflows/display/nodes/vellum/search_node.py +2 -1
  14. vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py +5 -11
  15. vellum_ee/workflows/display/nodes/vellum/utils.py +3 -4
  16. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py +2 -1
  17. vellum_ee/workflows/display/types.py +16 -13
  18. vellum_ee/workflows/display/utils/expressions.py +6 -2
  19. vellum_ee/workflows/display/utils/vellum.py +59 -13
  20. vellum_ee/workflows/display/vellum.py +18 -95
  21. vellum_ee/workflows/display/workflows/base_workflow_display.py +54 -40
  22. vellum_ee/workflows/display/workflows/tests/test_workflow_display.py +1 -1
  23. vellum_ee/workflows/display/workflows/vellum_workflow_display.py +2 -4
  24. {vellum_ai-0.14.23.dist-info → vellum_ai-0.14.24.dist-info}/LICENSE +0 -0
  25. {vellum_ai-0.14.23.dist-info → vellum_ai-0.14.24.dist-info}/WHEEL +0 -0
  26. {vellum_ai-0.14.23.dist-info → vellum_ai-0.14.24.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.23",
21
+ "X-Fern-SDK-Version": "0.14.24",
22
22
  }
23
23
  headers["X_API_KEY"] = self.api_key
24
24
  return headers
@@ -46,6 +46,8 @@ class OnValidatePython(ValidatePythonHandlerProtocol):
46
46
  context: Optional[Dict[str, Any]] = None,
47
47
  self_instance: Optional[Any] = None,
48
48
  allow_partial: Union[bool, Literal["off", "on", "trailing-strings"]] = False,
49
+ by_alias: Optional[bool] = None,
50
+ by_name: Optional[bool] = None,
49
51
  ) -> None:
50
52
  if not isinstance(input, dict):
51
53
  return
@@ -13,6 +13,7 @@ from vellum.workflows.state.base import BaseState
13
13
  from vellum.workflows.state.context import WorkflowContext
14
14
  from vellum.workflows.types.core import EntityInputsInterface
15
15
  from vellum.workflows.types.generics import InputsType, StateType
16
+ from vellum.workflows.utils.uuids import uuid4_from_hash
16
17
  from vellum.workflows.workflows.event_filters import all_workflow_event_filter
17
18
 
18
19
  if TYPE_CHECKING:
@@ -140,3 +141,8 @@ class InlineSubworkflowNode(
140
141
  # Subclasses of InlineSubworkflowNode can override this method to provider their own
141
142
  # approach to annotating the outputs class based on the `subworkflow.Outputs`
142
143
  setattr(outputs_class, reference.name, reference)
144
+
145
+ if cls.__output_ids__ is None:
146
+ cls.__output_ids__ = {}
147
+
148
+ cls.__output_ids__[reference.name] = uuid4_from_hash(f"{cls.__id__}|{reference.name}")
@@ -116,3 +116,30 @@ def test_inline_subworkflow_node__base_inputs_validation():
116
116
  # AND the error message should indicate the missing required input
117
117
  assert e.value.code == WorkflowErrorCode.INVALID_INPUTS
118
118
  assert "Required input variables required_input should have defined value" == str(e.value)
119
+
120
+
121
+ def test_inline_subworkflow_node__with_adornment():
122
+ # GIVEN a simple inline subworkflow with an output
123
+ class InnerNode(BaseNode):
124
+ class Outputs(BaseNode.Outputs):
125
+ final_output = "hello"
126
+
127
+ class TestSubworkflow(BaseWorkflow):
128
+ graph = InnerNode
129
+
130
+ class Outputs(BaseWorkflow.Outputs):
131
+ final_output = InnerNode.Outputs.final_output
132
+
133
+ # AND it's wrapped in a TryNode
134
+ @TryNode.wrap()
135
+ class TestNode(InlineSubworkflowNode):
136
+ subworkflow = TestSubworkflow
137
+
138
+ # THEN the wrapped node should have the correct output IDs
139
+ assert "final_output" in TestNode.__output_ids__
140
+
141
+ # AND when we run the node
142
+ node = TestNode()
143
+ outputs = list(node.run())
144
+
145
+ assert outputs[-1].name == "final_output" and outputs[-1].value == "hello"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vellum-ai
3
- Version: 0.14.23
3
+ Version: 0.14.24
4
4
  Summary:
5
5
  License: MIT
6
6
  Requires-Python: >=3.9,<4.0
@@ -22,17 +22,19 @@ 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=xhrMfirVLBuIeDuxdOUmtJ6CcfCx8DChFo-4HfMY6uc,1883
25
+ vellum_ee/workflows/display/base.py,sha256=rIycT9p18XWng7cpJwcjXXNvJq3bPObQ0GN4fuQO_Wk,2633
26
+ vellum_ee/workflows/display/editor/__init__.py,sha256=MSAgY91xCEg2neH5d8jXx5wRdR962ftZVa6vO9BGq9k,167
27
+ vellum_ee/workflows/display/editor/types.py,sha256=x-tOOCJ6CF4HmiKDfCmcc3bOVfc1EBlP5o6u5WEfLoY,567
26
28
  vellum_ee/workflows/display/nodes/__init__.py,sha256=436iSAh_Ex5tC68oEYvNgPu05ZVIAVXnS4PKGrQeZ0Y,321
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/base_node_display.py,sha256=APdax1M8isohM-B8j2E0OFL-4v2L17scZ0ynpkYgVek,19036
30
+ vellum_ee/workflows/display/nodes/base_node_vellum_display.py,sha256=WXbfVoGHTfl_owas2WKHwcRhfLeu0cAI4qLmKxfxjOs,1707
29
31
  vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=59Nht1XAxMcNESFV1VmECrF01lZMnGkB_9JWaTAFnv0,2214
30
32
  vellum_ee/workflows/display/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
33
  vellum_ee/workflows/display/nodes/tests/test_base_node_display.py,sha256=QqR3Ly0RNrXwOeLdW5nERDFt0gRPf76n1bPES6o5UN4,1093
32
34
  vellum_ee/workflows/display/nodes/types.py,sha256=St1BB6no528OyELGiyRabWao0GGw6mLhstQAvEACbGk,247
33
35
  vellum_ee/workflows/display/nodes/utils.py,sha256=sloya5TpXsnot1HURc9L51INwflRqUzHxRVnCS9Cd-4,973
34
36
  vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=nUIgH2s0-7IbQRNrBhLPyRNe8YIrx3Yo9HeeW-aXXFk,1668
35
- vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=lumtypr0JEZfiA32hcs_olTmnT0wIUzPBy0pnZVfyU4,8532
37
+ vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=RDsxyubod_zYc72_VaHUTfOZXsgrKv8g3fqZFS2_j8Y,8538
36
38
  vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py,sha256=Bzqplrnx-bDIRD1JgU7036m8pSWSO45zEReNv8RJTu4,6379
37
39
  vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=IYx0nll0t-tsPcjfgpfHMZE4FJgMFIsOiaQanGLYF0Q,4410
38
40
  vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=ybLIa4uclqVIy3VAQvI1ivg2tnK5Ug_1R5a69DFqL7E,11104
@@ -46,7 +48,7 @@ vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=xtyecs9mJ_WEwVpP12
46
48
  vellum_ee/workflows/display/nodes/vellum/note_node.py,sha256=TMb8txILu2uWjzoxaghjgjlzeBAgzn4vkP_8zSh2qoE,1151
47
49
  vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=9YR6MtxVq8Bavb0ud2lZX0t2Y_NUd-dY9kRgq8WBz-Y,3093
48
50
  vellum_ee/workflows/display/nodes/vellum/retry_node.py,sha256=LgokATi7sSS38Fil-XjqoR4t7AMOJ-GzXRw6p606Svo,3397
49
- vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=TxcAGZDl_hvJ7Y1hUi9YVEVrj9Ie0hKkASdpfRL4_cs,9227
51
+ vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=Hn55mKO1Q6BBspQtbsurvJJqX7RjSSuEyRjUW29xvg0,9279
50
52
  vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=62baAElKoRKIoba0lLhnrXGWWx96B73VxKGxh7BaIxc,2612
51
53
  vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=5EWzdA3TSUPlbJhs4uo1KGH6eGtDXZucVhlUoc_xpl4,3242
52
54
  vellum_ee/workflows/display/nodes/vellum/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -56,14 +58,14 @@ vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py,sha256=bg9INs
56
58
  vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py,sha256=NuIw8Yb42KUdoGi3Ur8_7VPg50IC4hNrwAkCociwqNk,2091
57
59
  vellum_ee/workflows/display/nodes/vellum/tests/test_templating_node.py,sha256=Us32jf_FQnLuT4Bs2o5JyHxihCTAN8ozZghWIR0pl9k,3459
58
60
  vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py,sha256=mtzB8LJlFCHVFM4H5AanLp29gQfaVmnN4A4iaRGJHoI,2427
59
- vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py,sha256=4YUaTeD_OWF-UaPMyOTBTu9skGC1jgSHlAYrzbH7Z04,5039
61
+ vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py,sha256=8_4b_U2l60b3TPLTHiDd_lzk6gi-30FmNJreDVeG0oM,4876
60
62
  vellum_ee/workflows/display/nodes/vellum/try_node.py,sha256=0ipBZMYm521tuwefQFgHOvTyTgiWVTkzxpQtnnmOAI0,4203
61
- vellum_ee/workflows/display/nodes/vellum/utils.py,sha256=lY3YsvzawDy15-8w3Brb4oSnVpVaMe5FQtgMi3BE3Mo,4737
63
+ vellum_ee/workflows/display/nodes/vellum/utils.py,sha256=MAoHDSURlLRJ9V8D6I6icclqGq2hExU_h7ABx6BWuJY,4733
62
64
  vellum_ee/workflows/display/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
65
  vellum_ee/workflows/display/tests/test_vellum_workflow_display.py,sha256=VD-4USiRlCcdC3Qe9WfdkxwFdircai0vqvuZCbELR84,9556
64
66
  vellum_ee/workflows/display/tests/workflow_serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
67
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=iR9vt-Xf8NSLHptrp1uTd_qbhHz-LrWkrRyKN96aqGM,2492
68
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=lXw_Zvhlf7b1z3dsZoDznDweF1O-AStibV7BYrEtr0M,2544
67
69
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=4R8cZ98JsGmIq-kmt3q519c4nCI7wCy5ynAUCUNnvuI,15605
68
70
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=PXoNUAgqfyNCAoYGWoo5D-_5SLEannn7SD08nxZmVe8,19781
69
71
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py,sha256=s6_mnk0pkztU59wYpSfOFpMhAJaRjmyfxM6WJGtnD4Y,6456
@@ -87,16 +89,16 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_n
87
89
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=UrueKI15Ez-DRfZpZH82o127v0LRXLP-s308kjDTPMI,4084
88
90
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=eD5686C9nWC5s6t08vbAnm9qf9t53gYQM-E1FwAa75c,3035
89
91
  vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=zXTjfjUdji0WBu6ZhocvM4UiXEWFJIpds24sxV9TZT0,7714
90
- vellum_ee/workflows/display/types.py,sha256=UZ23Hv2ULWFrMaG1mRSbVnPEa9YvuLlv0dOMkA2j5_Y,2466
92
+ vellum_ee/workflows/display/types.py,sha256=13gGBga5p1Tufe2h3aKBmr2mXlnGDtL8RqWKhW9LaDk,2543
91
93
  vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
- vellum_ee/workflows/display/utils/expressions.py,sha256=9FpOslDI-RCR5m4TgAu9KCHh4aTVnh7CHR2ykyMUDw0,1151
93
- vellum_ee/workflows/display/utils/vellum.py,sha256=EVPQUSsZ3OIeLTEbV6LHPor37t9fnj9kJxDqP4PmTLQ,8234
94
- vellum_ee/workflows/display/vellum.py,sha256=bevbLCd2KqJBKqJ3lQayeRfjY7x1Djf57F9iJ-6KBJw,5162
94
+ vellum_ee/workflows/display/utils/expressions.py,sha256=2u2o8Fqr-2C45FII01ej5rt6i8n2EEGiliXugK7buVw,1210
95
+ vellum_ee/workflows/display/utils/vellum.py,sha256=Pzmg9Xiq-hRaYxbOSDaJhIAQ4A0apQN6dURn_h5DnWI,9364
96
+ vellum_ee/workflows/display/vellum.py,sha256=3Hri8-MGNhRSoNBC-u6hiot_9-k92a_NzrYgYJVY1CQ,3547
95
97
  vellum_ee/workflows/display/workflows/__init__.py,sha256=kapXsC67VJcgSuiBMa86FdePG5A9kMB5Pi4Uy1O2ob4,207
96
- vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=YRz485jI0O_eDx3QRZYdf3jFtbPamBglMPS2EZKXTeE,19603
98
+ vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=rYpvUVGnQNFOnsk6OUhh_2GXDojQtKmuRElNjwQujDk,19486
97
99
  vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=kp0u8LN_2IwshLrhMImhpZx1hRyAcD5gXY-kDuuaGMQ,1269
98
- vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=zHpeXrSFPtiQuoaLwbfMUJAmtxvEiReeOYVwXzD1qIQ,10617
99
- vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=AS-vMrM93KEjb02-ye0Il29l3bX74o0Q8P2Nvf9NIZ0,16683
100
+ vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=nD6_lZnNp56siVJwhlWzSEHdMaSKjvWlsJa31SqfQAE,10623
101
+ vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=cSQybNy6qBiEv2WtPRh1-hSNuwvdWQtjvAGW6vNBSmU,16623
100
102
  vellum_ee/workflows/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
101
103
  vellum_ee/workflows/server/virtual_file_loader.py,sha256=ET-Q83W5Cgqzqz3qtFNwtS2nJEIcm3VtvR5kffsT3VY,2262
102
104
  vellum_ee/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -126,7 +128,7 @@ vellum/client/README.md,sha256=JkCJjmMZl4jrPj46pkmL9dpK4gSzQQmP5I7z4aME4LY,4749
126
128
  vellum/client/__init__.py,sha256=tKtdM1_GqmGq1gpi9ydWD_T-MM7fPn8QdHh8ww19cNI,117564
127
129
  vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
128
130
  vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
129
- vellum/client/core/client_wrapper.py,sha256=ZreSjScbQcW_5PwQSZMU9AXIjX1VTwTOWrmoCvLNq-I,1869
131
+ vellum/client/core/client_wrapper.py,sha256=8wv6fQx1EwJtvzVuLS-i7sPo_b87mIrTj43SWrHA6fM,1869
130
132
  vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
131
133
  vellum/client/core/file.py,sha256=X9IbmkZmB2bB_DpmZAO3crWdXagOakAyn6UCOCImCPg,2322
132
134
  vellum/client/core/http_client.py,sha256=R0pQpCppnEtxccGvXl4uJ76s7ro_65Fo_erlNNLp_AI,19228
@@ -785,7 +787,7 @@ vellum/evaluations/utils/env.py,sha256=Xj_nxsoU5ox06EOTjRopR4lrigQI6Le6qbWGltYoE
785
787
  vellum/evaluations/utils/exceptions.py,sha256=dXMAkzqbHV_AP5FjjbegPlfUE0zQDlpA3qOsoOJUxfg,49
786
788
  vellum/evaluations/utils/paginator.py,sha256=rEED_BJAXAM6tM1yMwHePNzszjq_tTq4NbQvi1jWQ_Q,697
787
789
  vellum/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
788
- vellum/plugins/pydantic.py,sha256=XpQQs_o8DQY_5gFFDzJzaXahUqR_l5TEI4b5ZoH9ob8,3528
790
+ vellum/plugins/pydantic.py,sha256=_kx82JIA050R67QAimgR7NQTuweSP7xLGW4qHLIepo4,3609
789
791
  vellum/plugins/utils.py,sha256=cPmxE9R2CK1bki2jKE8rB-G9zMf2pzHjSPDHFPXwd3Q,878
790
792
  vellum/plugins/vellum_mypy.py,sha256=QTuMSq6PiZW1dyTUZ5Bf1d4XkgFj0TKAgZLP8f4UgL4,27914
791
793
  vellum/prompts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1499,9 +1501,9 @@ vellum/workflows/nodes/core/__init__.py,sha256=5zDMCmyt1v0HTJzlUBwq3U9L825yZGZhT
1499
1501
  vellum/workflows/nodes/core/error_node/__init__.py,sha256=g7RRnlHhqu4qByfLjBwCunmgGA8dI5gNsjS3h6TwlSI,60
1500
1502
  vellum/workflows/nodes/core/error_node/node.py,sha256=MFHU5vITYSK-L9CuMZ49In2ZeNLWnhZD0f8r5dWvb5Y,1270
1501
1503
  vellum/workflows/nodes/core/inline_subworkflow_node/__init__.py,sha256=nKNEH1QTl-1PcvmYoqSWEl0-t6gAur8GLTXHzklRQfM,84
1502
- vellum/workflows/nodes/core/inline_subworkflow_node/node.py,sha256=1RZ9x69qwziPupR5pkUQVTQnEaF4ieaJ8Uvx2gSbiow,6382
1504
+ vellum/workflows/nodes/core/inline_subworkflow_node/node.py,sha256=e-Mal5tZ6JXJdWn8MspoBbXC8LBaCVxKb4RjoHnuZ0A,6611
1503
1505
  vellum/workflows/nodes/core/inline_subworkflow_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1504
- vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py,sha256=BLmwLeWxgn6RgRKL8gi8bvV2ZfWnCTsqZDykTgJOjXg,3529
1506
+ vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py,sha256=kUqwcRMMxjTHALbwGUXCJT_aJBrHS1bkg49oL8R0JO8,4337
1505
1507
  vellum/workflows/nodes/core/map_node/__init__.py,sha256=MXpZYmGfhsMJHqqlpd64WiJRtbAtAMQz-_3fCU_cLV0,56
1506
1508
  vellum/workflows/nodes/core/map_node/node.py,sha256=dY27Xm11LHsqD7hnZnVYYDIazZ-XfL4_zatvWKTi6CU,9243
1507
1509
  vellum/workflows/nodes/core/map_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1644,8 +1646,8 @@ vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnad
1644
1646
  vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1645
1647
  vellum/workflows/workflows/tests/test_base_workflow.py,sha256=tCxrV3QBHL8wfdEO3bvKteDdw32xBlUl1_WxkAwaONw,8344
1646
1648
  vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
1647
- vellum_ai-0.14.23.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1648
- vellum_ai-0.14.23.dist-info/METADATA,sha256=0Xb69QSCT3eV6id9Yn6oCfyj2LW_IQcxuYwJZW293zU,5484
1649
- vellum_ai-0.14.23.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1650
- vellum_ai-0.14.23.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1651
- vellum_ai-0.14.23.dist-info/RECORD,,
1649
+ vellum_ai-0.14.24.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1650
+ vellum_ai-0.14.24.dist-info/METADATA,sha256=eb9VJttYaBZqKdHGOIIAv6Pz2XxjEgZXBddFHyrXNNo,5484
1651
+ vellum_ai-0.14.24.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1652
+ vellum_ai-0.14.24.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1653
+ vellum_ai-0.14.24.dist-info/RECORD,,
@@ -1,15 +1,37 @@
1
- from dataclasses import dataclass
1
+ from dataclasses import dataclass, field
2
2
  from uuid import UUID
3
3
  from typing import TypeVar
4
4
 
5
+ from pydantic import Field
6
+
7
+ from vellum.client.core.pydantic_utilities import UniversalBaseModel
8
+ from vellum_ee.workflows.display.editor.types import NodeDisplayData
9
+
10
+
11
+ class WorkflowDisplayDataViewport(UniversalBaseModel):
12
+ x: float = 0.0
13
+ y: float = 0.0
14
+ zoom: float = 1.0
15
+
16
+
17
+ class WorkflowDisplayData(UniversalBaseModel):
18
+ viewport: WorkflowDisplayDataViewport = Field(default_factory=WorkflowDisplayDataViewport)
19
+
5
20
 
6
21
  @dataclass
7
- class WorkflowMetaDisplayOverrides:
8
- pass
22
+ class WorkflowMetaDisplay:
23
+ entrypoint_node_id: UUID
24
+ entrypoint_node_source_handle_id: UUID
25
+ entrypoint_node_display: NodeDisplayData = Field(default_factory=NodeDisplayData)
26
+ display_data: WorkflowDisplayData = field(default_factory=WorkflowDisplayData)
9
27
 
10
28
 
11
29
  @dataclass
12
- class WorkflowMetaDisplay(WorkflowMetaDisplayOverrides):
30
+ class WorkflowMetaDisplayOverrides(WorkflowMetaDisplay):
31
+ """
32
+ DEPRECATED: Use WorkflowMetaDisplay instead. Will be removed in 0.15.0
33
+ """
34
+
13
35
  pass
14
36
 
15
37
 
@@ -0,0 +1,7 @@
1
+ from .types import NodeDisplayComment, NodeDisplayData, NodeDisplayPosition
2
+
3
+ __all__ = [
4
+ "NodeDisplayComment",
5
+ "NodeDisplayData",
6
+ "NodeDisplayPosition",
7
+ ]
@@ -0,0 +1,22 @@
1
+ from typing import Optional
2
+
3
+ from pydantic import Field
4
+
5
+ from vellum.client.core.pydantic_utilities import UniversalBaseModel
6
+
7
+
8
+ class NodeDisplayPosition(UniversalBaseModel):
9
+ x: float = 0.0
10
+ y: float = 0.0
11
+
12
+
13
+ class NodeDisplayComment(UniversalBaseModel):
14
+ value: Optional[str] = None
15
+ expanded: Optional[bool] = None
16
+
17
+
18
+ class NodeDisplayData(UniversalBaseModel):
19
+ position: NodeDisplayPosition = Field(default_factory=NodeDisplayPosition)
20
+ width: Optional[int] = None
21
+ height: Optional[int] = None
22
+ comment: Optional[NodeDisplayComment] = None
@@ -17,6 +17,7 @@ from typing import (
17
17
  get_origin,
18
18
  )
19
19
 
20
+ from vellum.client.types.code_resource_definition import CodeResourceDefinition
20
21
  from vellum.workflows import BaseWorkflow
21
22
  from vellum.workflows.constants import undefined
22
23
  from vellum.workflows.descriptors.base import BaseDescriptor
@@ -45,11 +46,11 @@ from vellum.workflows.types.utils import get_original_base
45
46
  from vellum.workflows.utils.names import pascal_to_title_case
46
47
  from vellum.workflows.utils.uuids import uuid4_from_hash
47
48
  from vellum.workflows.utils.vellum_variables import primitive_type_to_vellum_variable_type
49
+ from vellum_ee.workflows.display.editor.types import NodeDisplayData
48
50
  from vellum_ee.workflows.display.nodes.get_node_display_class import get_node_display_class
49
51
  from vellum_ee.workflows.display.nodes.types import NodeOutputDisplay, PortDisplay, PortDisplayOverrides
50
52
  from vellum_ee.workflows.display.utils.expressions import get_child_descriptor
51
53
  from vellum_ee.workflows.display.utils.vellum import convert_descriptor_to_operator, primitive_to_vellum_value
52
- from vellum_ee.workflows.display.vellum import CodeResourceDefinition, NodeDisplayData
53
54
 
54
55
  if TYPE_CHECKING:
55
56
  from vellum_ee.workflows.display.types import WorkflowDisplayContext
@@ -4,9 +4,9 @@ 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_ee.workflows.display.editor.types import NodeDisplayComment, NodeDisplayData
7
8
  from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
8
9
  from vellum_ee.workflows.display.nodes.types import PortDisplay
9
- from vellum_ee.workflows.display.vellum import NodeDisplayComment, NodeDisplayData
10
10
 
11
11
 
12
12
  class BaseNodeVellumDisplay(BaseNodeDisplay[NodeType]):
@@ -8,7 +8,7 @@ from vellum_ee.workflows.display.nodes.base_node_vellum_display import BaseNodeV
8
8
  from vellum_ee.workflows.display.nodes.utils import raise_if_descriptor
9
9
  from vellum_ee.workflows.display.nodes.vellum.utils import create_node_input
10
10
  from vellum_ee.workflows.display.types import WorkflowDisplayContext
11
- from vellum_ee.workflows.display.vellum import WorkspaceSecretPointer
11
+ from vellum_ee.workflows.display.utils.vellum import WorkspaceSecretPointer
12
12
 
13
13
  _APINodeType = TypeVar("_APINodeType", bound=APINode)
14
14
 
@@ -15,7 +15,8 @@ from vellum_ee.workflows.display.nodes.base_node_vellum_display import BaseNodeV
15
15
  from vellum_ee.workflows.display.nodes.utils import raise_if_descriptor
16
16
  from vellum_ee.workflows.display.nodes.vellum.utils import create_node_input
17
17
  from vellum_ee.workflows.display.types import WorkflowDisplayContext
18
- from vellum_ee.workflows.display.vellum import InputVariablePointer, NodeInput
18
+ from vellum_ee.workflows.display.utils.vellum import InputVariablePointer
19
+ from vellum_ee.workflows.display.vellum import NodeInput
19
20
 
20
21
  _SearchNodeType = TypeVar("_SearchNodeType", bound=SearchNode)
21
22
 
@@ -8,21 +8,20 @@ from vellum.workflows.inputs import BaseInputs
8
8
  from vellum.workflows.nodes.bases import BaseNode
9
9
  from vellum.workflows.outputs import BaseOutputs
10
10
  from vellum.workflows.references import LazyReference
11
+ from vellum_ee.workflows.display.editor.types import NodeDisplayData
11
12
  from vellum_ee.workflows.display.nodes.base_node_vellum_display import BaseNodeVellumDisplay
12
13
  from vellum_ee.workflows.display.nodes.types import NodeOutputDisplay
13
14
  from vellum_ee.workflows.display.nodes.vellum.utils import create_node_input_value_pointer_rules
14
15
  from vellum_ee.workflows.display.types import WorkflowDisplayContext
15
- from vellum_ee.workflows.display.vellum import (
16
+ from vellum_ee.workflows.display.utils.vellum import (
16
17
  ConstantValuePointer,
17
18
  InputVariableData,
18
19
  InputVariablePointer,
19
- NodeDisplayData,
20
20
  NodeInputValuePointerRule,
21
21
  NodeOutputData,
22
22
  NodeOutputPointer,
23
- WorkflowInputsVellumDisplayOverrides,
24
- WorkflowMetaVellumDisplay,
25
23
  )
24
+ from vellum_ee.workflows.display.vellum import WorkflowInputsVellumDisplayOverrides, WorkflowMetaVellumDisplay
26
25
  from vellum_ee.workflows.display.workflows.vellum_workflow_display import VellumWorkflowDisplay
27
26
 
28
27
 
@@ -68,41 +67,36 @@ class MyNodeB(BaseNode):
68
67
  MyNodeB.fallback_example,
69
68
  [
70
69
  NodeOutputPointer(
71
- type="NODE_OUTPUT",
72
70
  data=NodeOutputData(
73
71
  node_id="b48fa5e0-d7d3-4fe3-ae48-615415011cc5",
74
72
  output_id="4b16a629-11a1-4b3f-a965-a57b872d13b8",
75
73
  ),
76
74
  ),
77
75
  InputVariablePointer(
78
- type="INPUT_VARIABLE",
79
76
  data=InputVariableData(input_variable_id="a154c29d-fac0-4cd0-ba88-bc52034f5470"),
80
77
  ),
81
- ConstantValuePointer(type="CONSTANT_VALUE", data=StringVellumValue(value="fallback")),
78
+ ConstantValuePointer(data=StringVellumValue(value="fallback")),
82
79
  ],
83
80
  ),
84
81
  (
85
82
  MyNodeB.constant_coalesce,
86
83
  [
87
84
  InputVariablePointer(
88
- type="INPUT_VARIABLE",
89
85
  data=InputVariableData(input_variable_id="a154c29d-fac0-4cd0-ba88-bc52034f5470"),
90
86
  ),
91
- ConstantValuePointer(type="CONSTANT_VALUE", data=StringVellumValue(value="default_value")),
87
+ ConstantValuePointer(data=StringVellumValue(value="default_value")),
92
88
  ],
93
89
  ),
94
90
  (
95
91
  MyNodeB.lazy_coalesce,
96
92
  [
97
93
  NodeOutputPointer(
98
- type="NODE_OUTPUT",
99
94
  data=NodeOutputData(
100
95
  node_id="b48fa5e0-d7d3-4fe3-ae48-615415011cc5",
101
96
  output_id="4b16a629-11a1-4b3f-a965-a57b872d13b8",
102
97
  ),
103
98
  ),
104
99
  InputVariablePointer(
105
- type="INPUT_VARIABLE",
106
100
  data=InputVariableData(input_variable_id="a154c29d-fac0-4cd0-ba88-bc52034f5470"),
107
101
  ),
108
102
  ],
@@ -9,19 +9,18 @@ from vellum.workflows.references.lazy import LazyReference
9
9
  from vellum.workflows.utils.uuids import uuid4_from_hash
10
10
  from vellum_ee.workflows.display.types import WorkflowDisplayContext
11
11
  from vellum_ee.workflows.display.utils.expressions import get_child_descriptor
12
- from vellum_ee.workflows.display.utils.vellum import create_node_input_value_pointer_rule
13
- from vellum_ee.workflows.display.vellum import (
12
+ from vellum_ee.workflows.display.utils.vellum import (
14
13
  ConstantValuePointer,
15
14
  ExecutionCounterData,
16
15
  ExecutionCounterPointer,
17
16
  InputVariableData,
18
17
  InputVariablePointer,
19
- NodeInput,
20
- NodeInputValuePointer,
21
18
  NodeInputValuePointerRule,
22
19
  WorkspaceSecretData,
23
20
  WorkspaceSecretPointer,
21
+ create_node_input_value_pointer_rule,
24
22
  )
23
+ from vellum_ee.workflows.display.vellum import NodeInput, NodeInputValuePointer
25
24
 
26
25
 
27
26
  def create_node_input(
@@ -9,11 +9,12 @@ from vellum.workflows.references.workflow_input import WorkflowInputReference
9
9
  from vellum.workflows.types.core import JsonObject
10
10
  from vellum.workflows.types.generics import NodeType
11
11
  from vellum_ee.workflows.display.base import StateValueDisplayType, WorkflowInputsDisplayType
12
+ from vellum_ee.workflows.display.editor.types import NodeDisplayData
12
13
  from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
13
14
  from vellum_ee.workflows.display.nodes.get_node_display_class import get_node_display_class
14
15
  from vellum_ee.workflows.display.nodes.types import NodeOutputDisplay
15
16
  from vellum_ee.workflows.display.types import WorkflowDisplayContext
16
- from vellum_ee.workflows.display.vellum import NodeDisplayData, WorkflowMetaVellumDisplay
17
+ from vellum_ee.workflows.display.vellum import WorkflowMetaVellumDisplay
17
18
  from vellum_ee.workflows.display.workflows.vellum_workflow_display import VellumWorkflowDisplay
18
19
 
19
20
 
@@ -11,41 +11,44 @@ from vellum_ee.workflows.display.base import (
11
11
  EntrypointDisplayType,
12
12
  StateValueDisplayType,
13
13
  WorkflowInputsDisplayType,
14
- WorkflowMetaDisplayType,
14
+ WorkflowMetaDisplay,
15
15
  WorkflowOutputDisplay,
16
16
  )
17
+ from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
18
+ from vellum_ee.workflows.display.nodes.types import NodeOutputDisplay, PortDisplay
17
19
 
18
20
  if TYPE_CHECKING:
19
- from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
20
- from vellum_ee.workflows.display.nodes.types import NodeOutputDisplay, PortDisplay
21
21
  from vellum_ee.workflows.display.workflows import BaseWorkflowDisplay
22
22
 
23
23
  WorkflowDisplayType = TypeVar("WorkflowDisplayType", bound="BaseWorkflowDisplay")
24
24
 
25
+ NodeDisplays = Dict[Type[BaseNode], BaseNodeDisplay]
26
+ NodeOutputDisplays = Dict[OutputReference, Tuple[Type[BaseNode], NodeOutputDisplay]]
27
+ WorkflowOutputDisplays = Dict[BaseDescriptor, WorkflowOutputDisplay]
28
+ EdgeDisplays = Dict[Tuple[Port, Type[BaseNode]], EdgeDisplay]
29
+ PortDisplays = Dict[Port, PortDisplay]
30
+
25
31
 
26
32
  @dataclass
27
33
  class WorkflowDisplayContext(
28
34
  Generic[
29
- WorkflowMetaDisplayType,
30
35
  WorkflowInputsDisplayType,
31
36
  StateValueDisplayType,
32
37
  EntrypointDisplayType,
33
38
  ]
34
39
  ):
35
40
  workflow_display_class: Type["BaseWorkflowDisplay"]
36
- workflow_display: WorkflowMetaDisplayType
41
+ workflow_display: WorkflowMetaDisplay
37
42
  workflow_input_displays: Dict[WorkflowInputReference, WorkflowInputsDisplayType] = field(default_factory=dict)
38
43
  global_workflow_input_displays: Dict[WorkflowInputReference, WorkflowInputsDisplayType] = field(
39
44
  default_factory=dict
40
45
  )
41
46
  state_value_displays: Dict[StateValueReference, StateValueDisplayType] = field(default_factory=dict)
42
47
  global_state_value_displays: Dict[StateValueReference, StateValueDisplayType] = field(default_factory=dict)
43
- node_displays: Dict[Type[BaseNode], "BaseNodeDisplay"] = field(default_factory=dict)
44
- global_node_displays: Dict[Type[BaseNode], "BaseNodeDisplay"] = field(default_factory=dict)
45
- global_node_output_displays: Dict[OutputReference, Tuple[Type[BaseNode], "NodeOutputDisplay"]] = field(
46
- default_factory=dict
47
- )
48
+ node_displays: NodeDisplays = field(default_factory=dict)
49
+ global_node_displays: NodeDisplays = field(default_factory=dict)
50
+ global_node_output_displays: NodeOutputDisplays = field(default_factory=dict)
48
51
  entrypoint_displays: Dict[Type[BaseNode], EntrypointDisplayType] = field(default_factory=dict)
49
- workflow_output_displays: Dict[BaseDescriptor, WorkflowOutputDisplay] = field(default_factory=dict)
50
- edge_displays: Dict[Tuple[Port, Type[BaseNode]], EdgeDisplay] = field(default_factory=dict)
51
- port_displays: Dict[Port, "PortDisplay"] = field(default_factory=dict)
52
+ workflow_output_displays: WorkflowOutputDisplays = field(default_factory=dict)
53
+ edge_displays: EdgeDisplays = field(default_factory=dict)
54
+ port_displays: PortDisplays = field(default_factory=dict)
@@ -1,9 +1,13 @@
1
+ from typing import TYPE_CHECKING
2
+
1
3
  from vellum.workflows.descriptors.base import BaseDescriptor
2
4
  from vellum.workflows.references.lazy import LazyReference
3
- from vellum_ee.workflows.display.types import WorkflowDisplayContext
5
+
6
+ if TYPE_CHECKING:
7
+ from vellum_ee.workflows.display.types import WorkflowDisplayContext
4
8
 
5
9
 
6
- def get_child_descriptor(value: LazyReference, display_context: WorkflowDisplayContext) -> BaseDescriptor:
10
+ def get_child_descriptor(value: LazyReference, display_context: "WorkflowDisplayContext") -> BaseDescriptor:
7
11
  if isinstance(value._get, str):
8
12
  reference_parts = value._get.split(".")
9
13
  if len(reference_parts) < 3:
@@ -1,6 +1,9 @@
1
- from typing import TYPE_CHECKING, Any
1
+ from typing import TYPE_CHECKING, Any, Literal, Optional, Union
2
2
 
3
+ from vellum.client.core.pydantic_utilities import UniversalBaseModel
4
+ from vellum.client.types.array_vellum_value import ArrayVellumValue
3
5
  from vellum.client.types.logical_operator import LogicalOperator
6
+ from vellum.client.types.vellum_value import VellumValue
4
7
  from vellum.client.types.vellum_variable_type import VellumVariableType
5
8
  from vellum.workflows.descriptors.base import BaseDescriptor
6
9
  from vellum.workflows.expressions.and_ import AndExpression
@@ -39,23 +42,66 @@ from vellum.workflows.references.vellum_secret import VellumSecretReference
39
42
  from vellum.workflows.utils.vellum_variables import primitive_type_to_vellum_variable_type
40
43
  from vellum.workflows.vellum_client import create_vellum_client
41
44
  from vellum_ee.workflows.display.utils.expressions import get_child_descriptor
42
- from vellum_ee.workflows.display.vellum import (
43
- ConstantValuePointer,
44
- ExecutionCounterData,
45
- ExecutionCounterPointer,
46
- InputVariableData,
47
- InputVariablePointer,
48
- NodeInputValuePointerRule,
49
- NodeOutputData,
50
- NodeOutputPointer,
51
- WorkspaceSecretData,
52
- WorkspaceSecretPointer,
53
- )
54
45
 
55
46
  if TYPE_CHECKING:
56
47
  from vellum_ee.workflows.display.types import WorkflowDisplayContext
57
48
 
58
49
 
50
+ class ConstantValuePointer(UniversalBaseModel):
51
+ type: Literal["CONSTANT_VALUE"] = "CONSTANT_VALUE"
52
+ data: VellumValue
53
+
54
+
55
+ ArrayVellumValue.model_rebuild()
56
+
57
+
58
+ class NodeOutputData(UniversalBaseModel):
59
+ node_id: str
60
+ output_id: str
61
+
62
+
63
+ class NodeOutputPointer(UniversalBaseModel):
64
+ type: Literal["NODE_OUTPUT"] = "NODE_OUTPUT"
65
+ data: NodeOutputData
66
+
67
+
68
+ class InputVariableData(UniversalBaseModel):
69
+ input_variable_id: str
70
+
71
+
72
+ class InputVariablePointer(UniversalBaseModel):
73
+ type: Literal["INPUT_VARIABLE"] = "INPUT_VARIABLE"
74
+ data: InputVariableData
75
+
76
+
77
+ class WorkspaceSecretData(UniversalBaseModel):
78
+ type: VellumVariableType
79
+ workspace_secret_id: Optional[str] = None
80
+
81
+
82
+ class WorkspaceSecretPointer(UniversalBaseModel):
83
+ type: Literal["WORKSPACE_SECRET"] = "WORKSPACE_SECRET"
84
+ data: WorkspaceSecretData
85
+
86
+
87
+ class ExecutionCounterData(UniversalBaseModel):
88
+ node_id: str
89
+
90
+
91
+ class ExecutionCounterPointer(UniversalBaseModel):
92
+ type: Literal["EXECUTION_COUNTER"] = "EXECUTION_COUNTER"
93
+ data: ExecutionCounterData
94
+
95
+
96
+ NodeInputValuePointerRule = Union[
97
+ NodeOutputPointer,
98
+ InputVariablePointer,
99
+ ConstantValuePointer,
100
+ WorkspaceSecretPointer,
101
+ ExecutionCounterPointer,
102
+ ]
103
+
104
+
59
105
  def infer_vellum_variable_type(value: Any) -> VellumVariableType:
60
106
  inferred_type: VellumVariableType
61
107
 
@@ -1,12 +1,7 @@
1
- from dataclasses import dataclass, field
1
+ from dataclasses import dataclass
2
2
  from uuid import UUID
3
- from typing import List, Literal, Optional, Union
3
+ from typing import List, Literal, Optional
4
4
 
5
- from pydantic import Field
6
-
7
- from vellum import VellumVariableType
8
- from vellum.client.types.array_vellum_value import ArrayVellumValue
9
- from vellum.client.types.vellum_value import VellumValue
10
5
  from vellum.core import UniversalBaseModel
11
6
  from vellum_ee.workflows.display.base import (
12
7
  EdgeDisplay,
@@ -17,27 +12,15 @@ from vellum_ee.workflows.display.base import (
17
12
  StateValueDisplayOverrides,
18
13
  WorkflowInputsDisplay,
19
14
  WorkflowInputsDisplayOverrides,
20
- WorkflowMetaDisplay,
21
15
  WorkflowMetaDisplayOverrides,
22
16
  WorkflowOutputDisplayOverrides,
23
17
  )
24
-
25
-
26
- class NodeDisplayPosition(UniversalBaseModel):
27
- x: float = 0.0
28
- y: float = 0.0
29
-
30
-
31
- class NodeDisplayComment(UniversalBaseModel):
32
- value: Optional[str] = None
33
- expanded: Optional[bool] = None
34
-
35
-
36
- class NodeDisplayData(UniversalBaseModel):
37
- position: NodeDisplayPosition = Field(default_factory=NodeDisplayPosition)
38
- width: Optional[int] = None
39
- height: Optional[int] = None
40
- comment: Optional[NodeDisplayComment] = None
18
+ from vellum_ee.workflows.display.base import WorkflowDisplayData # noqa: F401 - Remove in 0.15.0
19
+ from vellum_ee.workflows.display.base import WorkflowDisplayDataViewport # noqa: F401 - Remove in 0.15.0
20
+ from vellum_ee.workflows.display.editor.types import NodeDisplayComment # noqa: F401 - Remove in 0.15.0
21
+ from vellum_ee.workflows.display.editor.types import NodeDisplayData
22
+ from vellum_ee.workflows.display.editor.types import NodeDisplayPosition # noqa: F401 - Remove in 0.15.0
23
+ from vellum_ee.workflows.display.utils.vellum import NodeInputValuePointerRule
41
24
 
42
25
 
43
26
  class CodeResourceDefinition(UniversalBaseModel):
@@ -45,26 +28,21 @@ class CodeResourceDefinition(UniversalBaseModel):
45
28
  module: List[str]
46
29
 
47
30
 
48
- class WorkflowDisplayDataViewport(UniversalBaseModel):
49
- x: float = 0.0
50
- y: float = 0.0
51
- zoom: float = 1.0
52
-
53
-
54
- class WorkflowDisplayData(UniversalBaseModel):
55
- viewport: WorkflowDisplayDataViewport = Field(default_factory=WorkflowDisplayDataViewport)
56
-
57
-
58
31
  @dataclass
59
- class WorkflowMetaVellumDisplayOverrides(WorkflowMetaDisplay, WorkflowMetaDisplayOverrides):
60
- entrypoint_node_id: UUID
61
- entrypoint_node_source_handle_id: UUID
62
- entrypoint_node_display: NodeDisplayData
63
- display_data: WorkflowDisplayData = field(default_factory=WorkflowDisplayData)
32
+ class WorkflowMetaVellumDisplayOverrides(WorkflowMetaDisplayOverrides):
33
+ """
34
+ DEPRECATED: Use WorkflowMetaDisplay instead. Will be removed in 0.15.0
35
+ """
36
+
37
+ pass
64
38
 
65
39
 
66
40
  @dataclass
67
41
  class WorkflowMetaVellumDisplay(WorkflowMetaVellumDisplayOverrides):
42
+ """
43
+ DEPRECATED: Use WorkflowMetaDisplay instead. Will be removed in 0.15.0
44
+ """
45
+
68
46
  pass
69
47
 
70
48
 
@@ -145,61 +123,6 @@ class WorkflowOutputVellumDisplay(WorkflowOutputVellumDisplayOverrides):
145
123
  pass
146
124
 
147
125
 
148
- class ConstantValuePointer(UniversalBaseModel):
149
- type: Literal["CONSTANT_VALUE"] = "CONSTANT_VALUE"
150
- data: VellumValue
151
-
152
-
153
- ArrayVellumValue.model_rebuild()
154
-
155
-
156
- class NodeOutputData(UniversalBaseModel):
157
- node_id: str
158
- output_id: str
159
-
160
-
161
- class NodeOutputPointer(UniversalBaseModel):
162
- type: Literal["NODE_OUTPUT"] = "NODE_OUTPUT"
163
- data: NodeOutputData
164
-
165
-
166
- class InputVariableData(UniversalBaseModel):
167
- input_variable_id: str
168
-
169
-
170
- class InputVariablePointer(UniversalBaseModel):
171
- type: Literal["INPUT_VARIABLE"] = "INPUT_VARIABLE"
172
- data: InputVariableData
173
-
174
-
175
- class WorkspaceSecretData(UniversalBaseModel):
176
- type: VellumVariableType
177
- workspace_secret_id: Optional[str] = None
178
-
179
-
180
- class WorkspaceSecretPointer(UniversalBaseModel):
181
- type: Literal["WORKSPACE_SECRET"] = "WORKSPACE_SECRET"
182
- data: WorkspaceSecretData
183
-
184
-
185
- class ExecutionCounterData(UniversalBaseModel):
186
- node_id: str
187
-
188
-
189
- class ExecutionCounterPointer(UniversalBaseModel):
190
- type: Literal["EXECUTION_COUNTER"] = "EXECUTION_COUNTER"
191
- data: ExecutionCounterData
192
-
193
-
194
- NodeInputValuePointerRule = Union[
195
- NodeOutputPointer,
196
- InputVariablePointer,
197
- ConstantValuePointer,
198
- WorkspaceSecretPointer,
199
- ExecutionCounterPointer,
200
- ]
201
-
202
-
203
126
  class NodeInputValuePointer(UniversalBaseModel):
204
127
  rules: List[NodeInputValuePointerRule]
205
128
  combinator: Literal["OR"] = "OR"
@@ -25,16 +25,22 @@ from vellum_ee.workflows.display.base import (
25
25
  StateValueDisplayType,
26
26
  WorkflowInputsDisplayOverridesType,
27
27
  WorkflowInputsDisplayType,
28
- WorkflowMetaDisplayOverridesType,
29
- WorkflowMetaDisplayType,
28
+ WorkflowMetaDisplay,
30
29
  WorkflowOutputDisplay,
31
30
  )
32
31
  from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
33
32
  from vellum_ee.workflows.display.nodes.base_node_vellum_display import BaseNodeVellumDisplay
34
33
  from vellum_ee.workflows.display.nodes.get_node_display_class import get_node_display_class
35
- from vellum_ee.workflows.display.nodes.types import NodeOutputDisplay, PortDisplay, PortDisplayOverrides
34
+ from vellum_ee.workflows.display.nodes.types import NodeOutputDisplay, PortDisplay
36
35
  from vellum_ee.workflows.display.nodes.utils import raise_if_descriptor
37
- from vellum_ee.workflows.display.types import WorkflowDisplayContext
36
+ from vellum_ee.workflows.display.types import (
37
+ EdgeDisplays,
38
+ NodeDisplays,
39
+ NodeOutputDisplays,
40
+ PortDisplays,
41
+ WorkflowDisplayContext,
42
+ WorkflowOutputDisplays,
43
+ )
38
44
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
39
45
 
40
46
  logger = logging.getLogger(__name__)
@@ -43,8 +49,6 @@ logger = logging.getLogger(__name__)
43
49
  class BaseWorkflowDisplay(
44
50
  Generic[
45
51
  WorkflowType,
46
- WorkflowMetaDisplayType,
47
- WorkflowMetaDisplayOverridesType,
48
52
  WorkflowInputsDisplayType,
49
53
  WorkflowInputsDisplayOverridesType,
50
54
  StateValueDisplayType,
@@ -54,7 +58,7 @@ class BaseWorkflowDisplay(
54
58
  ]
55
59
  ):
56
60
  # Used to specify the display data for a workflow.
57
- workflow_display: Optional[WorkflowMetaDisplayOverridesType] = None
61
+ workflow_display: Optional[WorkflowMetaDisplay] = None
58
62
 
59
63
  # Used to explicitly specify display data for a workflow's inputs.
60
64
  inputs_display: Dict[WorkflowInputReference, WorkflowInputsDisplayOverridesType] = {}
@@ -66,13 +70,13 @@ class BaseWorkflowDisplay(
66
70
  entrypoint_displays: Dict[Type[BaseNode], EntrypointDisplayOverridesType] = {}
67
71
 
68
72
  # Used to explicitly specify display data for a workflow's outputs.
69
- output_displays: Dict[BaseDescriptor, WorkflowOutputDisplay] = {}
73
+ output_displays: WorkflowOutputDisplays = {}
70
74
 
71
75
  # Used to explicitly specify display data for a workflow's edges.
72
- edge_displays: Dict[Tuple[Port, Type[BaseNode]], EdgeDisplay] = {}
76
+ edge_displays: EdgeDisplays = {}
73
77
 
74
78
  # Used to explicitly specify display data for a workflow's ports.
75
- port_displays: Dict[Port, PortDisplayOverrides] = {}
79
+ port_displays: PortDisplays = {}
76
80
 
77
81
  # Used to store the mapping between workflows and their display classes
78
82
  _workflow_display_registry: Dict[Type[WorkflowType], Type["BaseWorkflowDisplay"]] = {}
@@ -87,7 +91,6 @@ class BaseWorkflowDisplay(
87
91
  *,
88
92
  parent_display_context: Optional[
89
93
  WorkflowDisplayContext[
90
- WorkflowMetaDisplayType,
91
94
  WorkflowInputsDisplayType,
92
95
  StateValueDisplayType,
93
96
  EntrypointDisplayType,
@@ -183,50 +186,41 @@ class BaseWorkflowDisplay(
183
186
  def display_context(
184
187
  self,
185
188
  ) -> WorkflowDisplayContext[
186
- WorkflowMetaDisplayType,
187
189
  WorkflowInputsDisplayType,
188
190
  StateValueDisplayType,
189
191
  EntrypointDisplayType,
190
192
  ]:
191
193
  workflow_display = self._generate_workflow_meta_display()
192
194
 
193
- global_node_output_displays: Dict[OutputReference, Tuple[Type[BaseNode], NodeOutputDisplay]] = (
195
+ global_node_output_displays: NodeOutputDisplays = (
194
196
  copy(self._parent_display_context.global_node_output_displays) if self._parent_display_context else {}
195
197
  )
196
198
 
197
- node_displays: Dict[Type[BaseNode], BaseNodeDisplay] = {}
199
+ node_displays: NodeDisplays = {}
198
200
 
199
- global_node_displays: Dict[Type[BaseNode], BaseNodeDisplay] = (
201
+ global_node_displays: NodeDisplays = (
200
202
  copy(self._parent_display_context.global_node_displays) if self._parent_display_context else {}
201
203
  )
202
204
 
203
- port_displays: Dict[Port, PortDisplay] = {}
205
+ port_displays: PortDisplays = {}
204
206
 
205
207
  for node in self._workflow.get_nodes():
206
- extracted_node_displays = self._extract_node_displays(node)
207
-
208
- for extracted_node, extracted_node_display in extracted_node_displays.items():
209
- if extracted_node not in node_displays:
210
- node_displays[extracted_node] = extracted_node_display
211
-
212
- if extracted_node not in global_node_displays:
213
- global_node_displays[extracted_node] = extracted_node_display
214
-
215
- self._enrich_global_node_output_displays(node, extracted_node_displays[node], global_node_output_displays)
216
- self._enrich_node_port_displays(node, extracted_node_displays[node], port_displays)
208
+ self._enrich_node_displays(
209
+ node=node,
210
+ node_displays=node_displays,
211
+ global_node_displays=global_node_displays,
212
+ global_node_output_displays=global_node_output_displays,
213
+ port_displays=port_displays,
214
+ )
217
215
 
218
216
  for node in self._workflow.get_unused_nodes():
219
- extracted_node_displays = self._extract_node_displays(node)
220
-
221
- for extracted_node, extracted_node_display in extracted_node_displays.items():
222
- if extracted_node not in node_displays:
223
- node_displays[extracted_node] = extracted_node_display
224
-
225
- if extracted_node not in global_node_displays:
226
- global_node_displays[extracted_node] = extracted_node_display
227
-
228
- self._enrich_global_node_output_displays(node, extracted_node_displays[node], global_node_output_displays)
229
- self._enrich_node_port_displays(node, extracted_node_displays[node], port_displays)
217
+ self._enrich_node_displays(
218
+ node=node,
219
+ node_displays=node_displays,
220
+ global_node_displays=global_node_displays,
221
+ global_node_output_displays=global_node_output_displays,
222
+ port_displays=port_displays,
223
+ )
230
224
 
231
225
  workflow_input_displays: Dict[WorkflowInputReference, WorkflowInputsDisplayType] = {}
232
226
  # If we're dealing with a nested workflow, then it should have access to the inputs of its parents.
@@ -312,7 +306,7 @@ class BaseWorkflowDisplay(
312
306
  )
313
307
 
314
308
  @abstractmethod
315
- def _generate_workflow_meta_display(self) -> WorkflowMetaDisplayType:
309
+ def _generate_workflow_meta_display(self) -> WorkflowMetaDisplay:
316
310
  pass
317
311
 
318
312
  @abstractmethod
@@ -331,7 +325,7 @@ class BaseWorkflowDisplay(
331
325
  def _generate_entrypoint_display(
332
326
  self,
333
327
  entrypoint: Type[BaseNode],
334
- workflow_display: WorkflowMetaDisplayType,
328
+ workflow_display: WorkflowMetaDisplay,
335
329
  node_displays: Dict[Type[BaseNode], BaseNodeDisplay],
336
330
  overrides: Optional[EntrypointDisplayOverridesType] = None,
337
331
  ) -> EntrypointDisplayType:
@@ -418,6 +412,26 @@ class BaseWorkflowDisplay(
418
412
  )
419
413
  return display_meta
420
414
 
415
+ def _enrich_node_displays(
416
+ self,
417
+ node: Type[BaseNode],
418
+ node_displays: NodeDisplays,
419
+ global_node_displays: NodeDisplays,
420
+ global_node_output_displays: NodeOutputDisplays,
421
+ port_displays: PortDisplays,
422
+ ) -> None:
423
+ extracted_node_displays = self._extract_node_displays(node)
424
+
425
+ for extracted_node, extracted_node_display in extracted_node_displays.items():
426
+ if extracted_node not in node_displays:
427
+ node_displays[extracted_node] = extracted_node_display
428
+
429
+ if extracted_node not in global_node_displays:
430
+ global_node_displays[extracted_node] = extracted_node_display
431
+
432
+ self._enrich_global_node_output_displays(node, extracted_node_displays[node], global_node_output_displays)
433
+ self._enrich_node_port_displays(node, extracted_node_displays[node], port_displays)
434
+
421
435
  def _extract_node_displays(self, node: Type[BaseNode]) -> Dict[Type[BaseNode], BaseNodeDisplay]:
422
436
  node_display = self._get_node_display(node)
423
437
  additional_node_displays: Dict[Type[BaseNode], BaseNodeDisplay] = {
@@ -7,10 +7,10 @@ from vellum.workflows.nodes.core.retry_node.node import RetryNode
7
7
  from vellum.workflows.nodes.core.templating_node.node import TemplatingNode
8
8
  from vellum.workflows.nodes.core.try_node.node import TryNode
9
9
  from vellum.workflows.workflows.base import BaseWorkflow
10
+ from vellum_ee.workflows.display.editor.types import NodeDisplayData, NodeDisplayPosition
10
11
  from vellum_ee.workflows.display.nodes import BaseNodeDisplay
11
12
  from vellum_ee.workflows.display.nodes.vellum.retry_node import BaseRetryNodeDisplay
12
13
  from vellum_ee.workflows.display.nodes.vellum.try_node import BaseTryNodeDisplay
13
- from vellum_ee.workflows.display.vellum import NodeDisplayData, NodeDisplayPosition
14
14
  from vellum_ee.workflows.display.workflows import VellumWorkflowDisplay
15
15
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
16
16
 
@@ -12,6 +12,7 @@ from vellum.workflows.references.output import OutputReference
12
12
  from vellum.workflows.types.core import JsonArray, JsonObject
13
13
  from vellum.workflows.types.generics import WorkflowType
14
14
  from vellum.workflows.utils.uuids import uuid4_from_hash
15
+ from vellum_ee.workflows.display.base import WorkflowMetaDisplay
15
16
  from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
16
17
  from vellum_ee.workflows.display.nodes.base_node_vellum_display import BaseNodeVellumDisplay
17
18
  from vellum_ee.workflows.display.nodes.vellum.utils import create_node_input
@@ -25,7 +26,6 @@ from vellum_ee.workflows.display.vellum import (
25
26
  WorkflowInputsVellumDisplay,
26
27
  WorkflowInputsVellumDisplayOverrides,
27
28
  WorkflowMetaVellumDisplay,
28
- WorkflowMetaVellumDisplayOverrides,
29
29
  )
30
30
  from vellum_ee.workflows.display.workflows.base_workflow_display import BaseWorkflowDisplay
31
31
 
@@ -35,8 +35,6 @@ logger = logging.getLogger(__name__)
35
35
  class VellumWorkflowDisplay(
36
36
  BaseWorkflowDisplay[
37
37
  WorkflowType,
38
- WorkflowMetaVellumDisplay,
39
- WorkflowMetaVellumDisplayOverrides,
40
38
  WorkflowInputsVellumDisplay,
41
39
  WorkflowInputsVellumDisplayOverrides,
42
40
  StateValueVellumDisplay,
@@ -346,7 +344,7 @@ class VellumWorkflowDisplay(
346
344
  def _generate_entrypoint_display(
347
345
  self,
348
346
  entrypoint: Type[BaseNode],
349
- workflow_display: WorkflowMetaVellumDisplay,
347
+ workflow_display: WorkflowMetaDisplay,
350
348
  node_displays: Dict[Type[BaseNode], BaseNodeDisplay],
351
349
  overrides: Optional[EntrypointVellumDisplayOverrides] = None,
352
350
  ) -> EntrypointVellumDisplay: