vellum-ai 1.3.8__py3-none-any.whl → 1.3.10__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 (38) hide show
  1. vellum/client/core/client_wrapper.py +2 -2
  2. vellum/client/reference.md +71 -0
  3. vellum/client/resources/workflows/client.py +80 -0
  4. vellum/client/resources/workflows/raw_client.py +98 -0
  5. vellum/client/types/vellum_error.py +2 -1
  6. vellum/client/types/vellum_error_request.py +2 -1
  7. vellum/workflows/errors/types.py +3 -1
  8. vellum/workflows/events/tests/test_event.py +1 -0
  9. vellum/workflows/exceptions.py +11 -2
  10. vellum/workflows/nodes/displayable/tests/test_inline_text_prompt_node.py +2 -0
  11. vellum/workflows/types/definition.py +32 -1
  12. vellum/workflows/utils/tests/test_vellum_variables.py +7 -1
  13. vellum/workflows/utils/vellum_variables.py +42 -3
  14. {vellum_ai-1.3.8.dist-info → vellum_ai-1.3.10.dist-info}/METADATA +1 -1
  15. {vellum_ai-1.3.8.dist-info → vellum_ai-1.3.10.dist-info}/RECORD +38 -38
  16. vellum_ee/workflows/display/editor/types.py +2 -0
  17. vellum_ee/workflows/display/nodes/base_node_display.py +42 -14
  18. vellum_ee/workflows/display/nodes/tests/test_base_node_display.py +64 -0
  19. vellum_ee/workflows/display/nodes/vellum/final_output_node.py +1 -1
  20. vellum_ee/workflows/display/nodes/vellum/retry_node.py +1 -1
  21. vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py +12 -12
  22. vellum_ee/workflows/display/nodes/vellum/tests/test_tool_calling_node.py +4 -4
  23. vellum_ee/workflows/display/nodes/vellum/try_node.py +1 -1
  24. vellum_ee/workflows/display/tests/test_base_workflow_display.py +46 -0
  25. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +1 -1
  26. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py +8 -8
  27. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py +1 -0
  28. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +1 -0
  29. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py +2 -1
  30. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py +2 -1
  31. vellum_ee/workflows/display/utils/events.py +7 -1
  32. vellum_ee/workflows/display/utils/expressions.py +35 -42
  33. vellum_ee/workflows/display/utils/tests/test_events.py +4 -4
  34. vellum_ee/workflows/display/workflows/base_workflow_display.py +1 -1
  35. vellum_ee/workflows/display/workflows/tests/test_workflow_display.py +10 -10
  36. {vellum_ai-1.3.8.dist-info → vellum_ai-1.3.10.dist-info}/LICENSE +0 -0
  37. {vellum_ai-1.3.8.dist-info → vellum_ai-1.3.10.dist-info}/WHEEL +0 -0
  38. {vellum_ai-1.3.8.dist-info → vellum_ai-1.3.10.dist-info}/entry_points.txt +0 -0
@@ -27,13 +27,13 @@ vellum_ee/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
27
27
  vellum_ee/workflows/display/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
28
  vellum_ee/workflows/display/base.py,sha256=R3f2T8FlZrXn2FawAmpVuLB3fKFWw11mCUulWAyIKA0,1912
29
29
  vellum_ee/workflows/display/editor/__init__.py,sha256=MSAgY91xCEg2neH5d8jXx5wRdR962ftZVa6vO9BGq9k,167
30
- vellum_ee/workflows/display/editor/types.py,sha256=JXpd8E7dsInbDp5T7ra0-T6XvdQB9RAHhZ1Lc8_0Fk4,601
30
+ vellum_ee/workflows/display/editor/types.py,sha256=rmaNXkNZUNRgK-mJJ_g1-Fm3OGxoQfqEB7zn-zzgJtc,664
31
31
  vellum_ee/workflows/display/exceptions.py,sha256=Oys39dHoW-s-1dnlRSZxTntMq8_macj-b2CT_6dqzJs,355
32
32
  vellum_ee/workflows/display/nodes/__init__.py,sha256=jI1aPBQf8DkmrYoZ4O-wR1duqZByOf5mDFmo_wFJPE4,307
33
- vellum_ee/workflows/display/nodes/base_node_display.py,sha256=98vszulLRvYz0kAh7ZEOeWOqzMtlpnOZM2lAViOUieA,18393
33
+ vellum_ee/workflows/display/nodes/base_node_display.py,sha256=TVzb7NMGsid4HMss7iAeUwdxYXJ7-cW5KBiQXmFA2ns,19453
34
34
  vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=jI_kUi9LnNLDpY63QtlC4TfN8P571VN4LpzH0I1ZtLk,1149
35
35
  vellum_ee/workflows/display/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- vellum_ee/workflows/display/nodes/tests/test_base_node_display.py,sha256=Cg5Ker3amAn2wraeNW4t_puvIZdvRB-P8XIL-p4GGL0,3571
36
+ vellum_ee/workflows/display/nodes/tests/test_base_node_display.py,sha256=JLa9nlG38dLfCo1Y8ISsJ21hrfDyy4-ae3pZ9H01yFs,5578
37
37
  vellum_ee/workflows/display/nodes/types.py,sha256=St1BB6no528OyELGiyRabWao0GGw6mLhstQAvEACbGk,247
38
38
  vellum_ee/workflows/display/nodes/utils.py,sha256=sloya5TpXsnot1HURc9L51INwflRqUzHxRVnCS9Cd-4,973
39
39
  vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=nUIgH2s0-7IbQRNrBhLPyRNe8YIrx3Yo9HeeW-aXXFk,1668
@@ -42,7 +42,7 @@ vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py,sha256=FHhPoGmmn
42
42
  vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=GfwA2Tn0OpdIUiPW9tD2dyv33e3M8yhGt9VfOeN81bU,5146
43
43
  vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=dtO9A-rjbDEJrywwrOxwEXahqrW-S493OIDHOti9Sjs,11498
44
44
  vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=8tSb8qGVoRIELubu0qPeoDlt1LpiIqc6d9_30GWRd_k,2266
45
- vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=eeu8i01HbLDvO3KwHnAfaMrYKiEchNAdDdjufjCi6OU,2991
45
+ vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=z4oeTgKnMGVaGig8XOZm5B_xYL4H7zweYlFweCbhnyA,3000
46
46
  vellum_ee/workflows/display/nodes/vellum/guardrail_node.py,sha256=9_AslWjzj4RHH2sq3SIaq9FU0NCg7ex5TIWrNMybqXg,2173
47
47
  vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=20tahU75zKImm6sAwLIYA9VEC6aNATjZdwA2beNnCIk,11949
48
48
  vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py,sha256=qy_EtBIAHIhju68PA-skm-WbFnaNEuDoxkSMWRl2SpQ,5870
@@ -50,7 +50,7 @@ vellum_ee/workflows/display/nodes/vellum/map_node.py,sha256=kwLqptup7bzYUDkGDbpc
50
50
  vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=xMHaPfTSZWYprQenlHm2g47u0a5O9Me_dhAjfqo8nKQ,3116
51
51
  vellum_ee/workflows/display/nodes/vellum/note_node.py,sha256=6PcAFA_EJn7vEMdqgoRjYTLHwnXCrJv80B10zuUx4jE,1026
52
52
  vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=uo4YZRV48iX4peGAA1xkGniSPrepywvW_gS7codt-VQ,3378
53
- vellum_ee/workflows/display/nodes/vellum/retry_node.py,sha256=3tkrZu7LczrD6KwdtU3g3xGOyVR3KKSbG5_H3Lbqvho,3274
53
+ vellum_ee/workflows/display/nodes/vellum/retry_node.py,sha256=NtCvRblVJDSpbm9qCNZ-zgJ-iKEc5tOrQbbtwjrDr_Q,3283
54
54
  vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=RMBW2cKbwCBPXqrkEo8zAHlMltotZJz3S8QjWnBgiEg,12161
55
55
  vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=n6gaTWOkiycUExbO5Vk_ZYNXRW6_V4LNfXdxPDevWIs,2800
56
56
  vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=NwyFvpkk87nBI5KbncAVQZdyimvN2q4Ko7hDg7jmbnA,3181
@@ -61,23 +61,23 @@ vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py,sha256=540FoWM
61
61
  vellum_ee/workflows/display/nodes/vellum/tests/test_inline_subworkflow_node.py,sha256=SKOYan-dxY4gsO0R4JyQUyWrABHBN8XImKw9Eeo4wGo,3535
62
62
  vellum_ee/workflows/display/nodes/vellum/tests/test_note_node.py,sha256=uiMB0cOxKZzos7YKnj4ef4DFa2bOvZJWIv-hfbUV6Go,1218
63
63
  vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_deployment_node.py,sha256=54oatuBB98Dfbr08NqZU8ZNhfQdJWhODIwjsegPPJJw,6376
64
- vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py,sha256=h3rXIfB349w11cMgNpqEWCI3ucTsTb30cWskXN8FoV0,14053
64
+ vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py,sha256=kXp0ZqTXEsEvSs2emM1a5C0-y6KZKhj0iWTCNtZ_8m8,14053
65
65
  vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py,sha256=WyqX_g-jN4BOVHIto_HDRVb-uWCmDTaiCwHho4uYKOM,1954
66
66
  vellum_ee/workflows/display/nodes/vellum/tests/test_search_node.py,sha256=KvByxgbUkVyfPIVxTUBUk6a92JiJMi8eReZWxzfPExU,3864
67
67
  vellum_ee/workflows/display/nodes/vellum/tests/test_subworkflow_deployment_node.py,sha256=BUzHJgjdWnPeZxjFjHfDBKnbFjYjnbXPjc-1hne1B2Y,3965
68
68
  vellum_ee/workflows/display/nodes/vellum/tests/test_templating_node.py,sha256=LSk2gx9TpGXbAqKe8dggQW8yJZqj-Cf0EGJFeGGlEcw,3321
69
- vellum_ee/workflows/display/nodes/vellum/tests/test_tool_calling_node.py,sha256=0D1q5yyt5fr1sC2UgBC-1OWXvGcwRx40xvpM7qXyDIA,24819
69
+ vellum_ee/workflows/display/nodes/vellum/tests/test_tool_calling_node.py,sha256=GGEthHhl819cs5QJGNL47bC6wdQpkf-S_EXYhtahQJA,24819
70
70
  vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py,sha256=Khjsb53PKpZuyhKoRMgKAL45eGp5hZqXvHmVeQWRw4w,2289
71
71
  vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py,sha256=rHybfUAWwa0LlstQTNthGb-zYXrUCLADFtn_4SGsbw8,4807
72
- vellum_ee/workflows/display/nodes/vellum/try_node.py,sha256=47fOnSCEFnY8th9m2yTYlgnoUuzgyRZdjg-SXwn--lk,4079
72
+ vellum_ee/workflows/display/nodes/vellum/try_node.py,sha256=SspL3yL8e1HvqwDJ7Vt11ZOYxEjT2jbmEFKs8M57VvE,4088
73
73
  vellum_ee/workflows/display/nodes/vellum/utils.py,sha256=oICunzyaXPs0tYnW5zH1r93Bx35MSH7mcD-n0DEWRok,4978
74
74
  vellum_ee/workflows/display/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
- vellum_ee/workflows/display/tests/test_base_workflow_display.py,sha256=fh-F7TmzOSiWEBwhtd3Nm_Ix9v5W4LhMNhiIxT7G100,15990
75
+ vellum_ee/workflows/display/tests/test_base_workflow_display.py,sha256=-LYQw5nWqTehhlCN0IxfurPNFyGQJB4KnlxwJzQozFI,17624
76
76
  vellum_ee/workflows/display/tests/workflow_serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
77
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
78
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=Y-ajeT65b5varmrZCw6L3hir4hJCFq-eO0jZfRcrs7g,1886
79
79
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=bD9AtBo7Pz1Drbh420NR0VSiHBfExw_UtNRPCiAqki0,13967
80
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=xEGh4RXGMR06M5s6rD6GjsloNslsRaH4UhIg7Djyw7Q,25144
80
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=TwJ8N8H2gJJ-gQ5YURNoCBrykN4pKxlrloEtkRHPlzY,25144
81
81
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py,sha256=O1CIKMmRTaMaT3IhjwCAiMz1ZThPg9lAUbSiZkx_E8c,6321
82
82
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py,sha256=fPXcX-tWQ0UMuEyOFAylgi7pWiE7lZWk9vrShlTExik,40053
83
83
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py,sha256=FLvcD8eoABHUPv08oSpIp_P-65sw2gl4whMXEJJj4f8,6785
@@ -88,9 +88,9 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_stat
88
88
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=03Mk8OE3kWcoZW9lNBe7v4KThCYN-pXg5Rjbkfx-jOQ,6031
89
89
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=-T0cd2jx1bC0ZNtAESF78fnYD_0nOqo8zMMLwRHUTRM,6227
90
90
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py,sha256=LnZp1YXDn-AaaxiYgxrhCQeH-rLgmlu_r_lvM65EQ5w,7517
91
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py,sha256=9w90pk1DzX2PDRML401bZpD9hdTW53Dw5oGb58mxpiw,26358
92
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=yKmOyunzt5_0cUcqhvCmV2pu81TTkshVi_uN3yt76Wc,21816
93
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=W4--Ldih7mRMnfyJ9G7kdyeoKkeebSu_5d33TJQzShU,16735
91
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py,sha256=-A9CAnzIhPMn44l_dwZcofBXBPNFa-oHke9p0w3W5PA,26358
92
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=gn7kisqAEG9JCZ18V88qMGvlcsTulSwpWvvEwjCfh6Y,21871
93
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=ALNOn5BdcWxw0myi6pXi5IwWtTE9H2CGrodP1BANuAg,16790
94
94
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=UnfWTfKN8DrOLpjCfWMgENJBjgNLWcRVfexbwERKY-c,8501
95
95
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py,sha256=SGlBiwohTTuf7oXqO3R1lP6u7gPea8Elt1CpZU_W9Bk,21482
96
96
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py,sha256=JKfYNBCmy7n6v2fd6NyYGHI1_TJRlfDNWiZMvHrdCWU,13079
@@ -98,10 +98,10 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_
98
98
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py,sha256=ddPa8gNBYH2tWk92ymngY7M8n74J-8CEre50HISP_-g,7877
99
99
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=A7Ef8P1-Nyvsb97bumKT9W2R1LuZaY9IKFV-7iRueog,4010
100
100
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_composio_serialization.py,sha256=oVXCjkU0G56QJmqnd_xIwF3D9bhJwALFibM2wmRhwUk,3739
101
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py,sha256=Sg82qV5NCzQDy-RD90hA6QaHgFHOq6ESNkbWXygsnNw,26367
101
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py,sha256=1GiF3XgJ85vE05_nZFo66snNuqTt0p1c22gNI9c_BXY,26442
102
102
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_mcp_serialization.py,sha256=QhQbijeCnFeX1i3SMjHJg2WVAEt5JEO3dhFRv-mofdA,2458
103
103
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_parent_input.py,sha256=__LX4cuzbyZp_1wc-SI8X_J0tnhOkCEmRVUWLKI5aQM,4578
104
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256=cKaxme5vUIvKa8aBU7xdeFxXF9wVZ5fW3T5Ie5vToU0,10152
104
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256=VB5c6U0GRUxPm9FbzgKYIpoZfoIU9szAWUQJ5L-4Lug,10187
105
105
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_workflow_deployment_serialization.py,sha256=XIZZr5POo2NLn2uEWm9EC3rejeBMoO4X-JtzTH6mvp4,4074
106
106
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=pLCyMScV88DTBXRH7jXaXOEA1GBq8NIipCUFwIAWnwI,2771
107
107
  vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=exT7U-axwtYgFylagScflSQLJEND51qIAx2UATju6JM,6023
@@ -111,19 +111,19 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_workflow_input_par
111
111
  vellum_ee/workflows/display/types.py,sha256=cyZruu4sXAdHjwuFc7dydM4DcFNf-pp_CmulXItxac4,3679
112
112
  vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
113
113
  vellum_ee/workflows/display/utils/auto_layout.py,sha256=f4GiLn_LazweupfqTpubcdtdfE_vrOcmZudSsnYIY9E,3906
114
- vellum_ee/workflows/display/utils/events.py,sha256=MEG2BT6GgAzkbv1dMaFpov5OShtaAZeAb1-g3xDFsAM,1826
114
+ vellum_ee/workflows/display/utils/events.py,sha256=DE33uoKW78BZtITJ6L22dMZN3KR1BuZBVC98C_gIyzU,1943
115
115
  vellum_ee/workflows/display/utils/exceptions.py,sha256=LSwwxCYNxFkf5XMUcFkaZKpQ13OSrI7y_bpEUwbKVk0,169
116
- vellum_ee/workflows/display/utils/expressions.py,sha256=80TcSWhT249cvT_NRobwelWCLWKgeFQEpXCvjFq0fwY,19743
116
+ vellum_ee/workflows/display/utils/expressions.py,sha256=K_9CVZJkwkYtLEPwaOA3Sb0wMmi0KbmJUGNkpXsRSbE,19506
117
117
  vellum_ee/workflows/display/utils/registry.py,sha256=1qXiBTdsnro6FeCX0FGBEK7CIf6wa--Jt50iZ_nEp_M,3460
118
118
  vellum_ee/workflows/display/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
119
  vellum_ee/workflows/display/utils/tests/test_auto_layout.py,sha256=vfXI769418s9vda5Gb5NFBH747WMOwSgHRXeLCTLVm8,2356
120
- vellum_ee/workflows/display/utils/tests/test_events.py,sha256=Qze6wEmFJx23_sKQhX-i329apWgMeS9zTptWlRca6Ko,4528
120
+ vellum_ee/workflows/display/utils/tests/test_events.py,sha256=42IEBnMbaQrH8gigw5hXIt_kG3rVvrSMop9QYiL2xDs,4586
121
121
  vellum_ee/workflows/display/utils/vellum.py,sha256=sZwU0KdmZZTKWW62SyxJTl2tC8tN6p_BpZ-lDoinV-U,5670
122
122
  vellum_ee/workflows/display/vellum.py,sha256=J2mdJZ1sdLW535DDUkq_Vm8Z572vhuxHxVZF9deKSdk,391
123
123
  vellum_ee/workflows/display/workflows/__init__.py,sha256=JTB9ObEV3l4gGGdtfBHwVJtTTKC22uj-a-XjTVwXCyA,148
124
- vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=HEwhGlQ6AllU_SpGSVCYgRc0RXev4iuHxXX3Rl18Xzs,43674
124
+ vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=4aC042Fmy9h-QUD6Z6inLbrR-7wE0t_V3NMb44Y0wek,43692
125
125
  vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=gxz76AeCqgAZ9D2lZeTiZzxY9eMgn3qOSfVgiqYcOh8,2028
126
- vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=pb7BTH-ivRnya1LQU3j-MApWk_m8POpPNOdD0oEK82A,37847
126
+ vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=OKf_WVoPkYPrielOz8CyI5AjWt9MS2nSbWQKpF7HSLI,37847
127
127
  vellum_ee/workflows/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
128
  vellum_ee/workflows/server/virtual_file_loader.py,sha256=7JphJcSO3H85qiC2DpFfBWjC3JjrbRmoynBC6KKHVsA,2710
129
129
  vellum_ee/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -155,7 +155,7 @@ vellum/client/README.md,sha256=flqu57ubZNTfpq60CdLtJC9gp4WEkyjb_n_eZ4OYf9w,6497
155
155
  vellum/client/__init__.py,sha256=T5Ht_w-Mk_9nzGqdadhQB8V20M0vYj7am06ut0A3P1o,73401
156
156
  vellum/client/core/__init__.py,sha256=lTcqUPXcx4112yLDd70RAPeqq6tu3eFMe1pKOqkW9JQ,1562
157
157
  vellum/client/core/api_error.py,sha256=44vPoTyWN59gonCIZMdzw7M1uspygiLnr3GNFOoVL2Q,614
158
- vellum/client/core/client_wrapper.py,sha256=3jamH9TZmnQVnQ_3AONYmIgWDW0mHBDzFiOfpCYnSXk,2840
158
+ vellum/client/core/client_wrapper.py,sha256=r-GaDOv2AZPXjGOGdRTzl4QBhv3rREaY-YqQLoi27ds,2842
159
159
  vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
160
160
  vellum/client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
161
161
  vellum/client/core/force_multipart.py,sha256=awxh5MtcRYe74ehY8U76jzv6fYM_w_D3Rur7KQQzSDk,429
@@ -176,7 +176,7 @@ vellum/client/errors/not_found_error.py,sha256=YrqVM0oc3qkQbFbmmm6xr300VGfUNxMSy
176
176
  vellum/client/errors/too_many_requests_error.py,sha256=SJJemdgUlQHV_VpxK8UfFNexgZebNT5_MTOeQs6oVgc,397
177
177
  vellum/client/errors/unauthorized_error.py,sha256=waPl5Swiqsk3FQK-Lljzx4KDh4RPZ0wL6BLHjM8onQ8,394
178
178
  vellum/client/raw_client.py,sha256=cmMR0t87iUYvkIE9L4g0dcCmw3uUQNze9rD9CBv5rzs,113481
179
- vellum/client/reference.md,sha256=IS1XNL62s3_Xz49ncvPJVZNvOMKyi36AYp2gYBt7xx8,95967
179
+ vellum/client/reference.md,sha256=2t9tdvJPj80W63POYe4Eyw1zoioJQmSwspbZIaJgX5o,96761
180
180
  vellum/client/resources/__init__.py,sha256=R10JFtO6U6QRvNubrmDIjncT7e5q4AiOKjXSK4wFuXc,1609
181
181
  vellum/client/resources/ad_hoc/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
182
182
  vellum/client/resources/ad_hoc/client.py,sha256=v5I_YzJaaPezsE4KVuMSUXJISstKuJ_9-VUeXakIJhw,14353
@@ -242,8 +242,8 @@ vellum/client/resources/workflow_sandboxes/raw_client.py,sha256=iQpaFR-D96ygLLh4
242
242
  vellum/client/resources/workflow_sandboxes/types/__init__.py,sha256=mZxwNpOmBfllmNZrhp8e_M62hUFI73B2fNlvgG8vi3Y,232
243
243
  vellum/client/resources/workflow_sandboxes/types/list_workflow_sandbox_examples_request_tag.py,sha256=TEwWit20W3X-zWPPLAhmUG05UudG9gaBSJ4Q4-rNJws,188
244
244
  vellum/client/resources/workflows/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
245
- vellum/client/resources/workflows/client.py,sha256=QggcuBCRJ5LdiROPT45F8bLZL9kFcWkPm9PBN_3wA1E,8275
246
- vellum/client/resources/workflows/raw_client.py,sha256=R0uLlLudu-YNiqIhieBcj1wQIVkBvNEa8E7Bk-szGTI,13558
245
+ vellum/client/resources/workflows/client.py,sha256=vEu33ooKfiZs-Uj0xxAwKweABoXBgI39TIN0HSuq0J4,10433
246
+ vellum/client/resources/workflows/raw_client.py,sha256=4-4YRpl2v0AOzgZl1E-fVOX18VVsa-he8d3imTEtWdo,17187
247
247
  vellum/client/resources/workspace_secrets/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
248
248
  vellum/client/resources/workspace_secrets/client.py,sha256=rKyHM9EJalA0adkQ0SDN5CmXjiddgVCO73y7Q4qqRP0,5722
249
249
  vellum/client/resources/workspace_secrets/raw_client.py,sha256=ZfiNd1NisolmK07QPyojW_KFlIWpnjVNLA8Aq5JC-zQ,7832
@@ -800,9 +800,9 @@ vellum/client/types/vellum_audio_request.py,sha256=vtkd49BVlLrY9UF3Yk52P5sDbtdY7
800
800
  vellum/client/types/vellum_code_resource_definition.py,sha256=XdueTR342BDjevZ3ktJJI99RqRED4A5SUOyzPt2K6us,661
801
801
  vellum/client/types/vellum_document.py,sha256=qwXqMS2Eud2a5KmF8QHhU_vJzDX0g5cesrCpmBqREsA,604
802
802
  vellum/client/types/vellum_document_request.py,sha256=P9vA7ZDNeaHNlMqyzfl-ZD4bpdf-xA5mH8R1QuOAmOY,611
803
- vellum/client/types/vellum_error.py,sha256=C2nOwYaKh1DdQE32y45SkD8kLnEPvWQlm8khYdsRjS4,607
803
+ vellum/client/types/vellum_error.py,sha256=G4WSD-w_skoDDnsAt-TtImt-hZT-Sc8LjHvERBUVnhE,691
804
804
  vellum/client/types/vellum_error_code_enum.py,sha256=OtW7fuM3RrRIDHbbJtk2FxPf70JjP4XYCBdc6lKPIVA,330
805
- vellum/client/types/vellum_error_request.py,sha256=1kIZ_pAOBQlESbwZK-t5uRuYZp0U1X7sfpWIUYZOYTQ,614
805
+ vellum/client/types/vellum_error_request.py,sha256=7l4Ux6wj3C9BdSXUPBrtxECsAirmvaLU42Y23VqncBU,698
806
806
  vellum/client/types/vellum_image.py,sha256=LAGUYBDsT0bmMOqgbaeCTCy2w4zAeHEyUIgPtmdjjJ4,601
807
807
  vellum/client/types/vellum_image_request.py,sha256=6DoI2AdJIG8NShHSslpHvsFUw5PwIMconjlHSipOP5Q,608
808
808
  vellum/client/types/vellum_node_execution_event.py,sha256=-MXat2wAZx4sx3JRp7gwJIOInPNwPMDpZmXtP8NC3O8,736
@@ -1728,7 +1728,7 @@ vellum/workflows/emitters/vellum_emitter.py,sha256=ECBIRA48WS5rIJd1iWUfye7B5Up7u
1728
1728
  vellum/workflows/environment/__init__.py,sha256=TJz0m9dwIs6YOwCTeuN0HHsU-ecyjc1OJXx4AFy83EQ,121
1729
1729
  vellum/workflows/environment/environment.py,sha256=Ck3RPKXJvtMGx_toqYQQQF-ZwXm5ijVwJpEPTeIJ4_Q,471
1730
1730
  vellum/workflows/errors/__init__.py,sha256=tWGPu5xyAU8gRb8_bl0fL7OfU3wxQ9UH6qVwy4X4P_Q,113
1731
- vellum/workflows/errors/types.py,sha256=nUWuniEfrhdtb-_2GzoDGlYnSJ_yuNUGjVkaKLNr-rM,4049
1731
+ vellum/workflows/errors/types.py,sha256=n89vGaCdRYKxv-JngGm9nkR5yXeWnR48CJ9L1iABLaQ,4144
1732
1732
  vellum/workflows/events/__init__.py,sha256=V4mh766fyA70WvHelm9kfVZGrUgEKcJ9tJt8EepfQYU,832
1733
1733
  vellum/workflows/events/context.py,sha256=vCfMIPmz4j9Om36rRWa35A_JU_VccWWS52_mZkkqxak,3345
1734
1734
  vellum/workflows/events/node.py,sha256=yHVd-rX2E3qc2XLnZr0fW6uq4ZCMm34mnY2tzYceyOg,5884
@@ -1736,10 +1736,10 @@ vellum/workflows/events/relational_threads.py,sha256=zmLrBCBYpdpQV0snKH3HleST-_h
1736
1736
  vellum/workflows/events/stream.py,sha256=xhXJTZirFi0xad5neAQNogrIQ4h47fpnKbVC3vCM5Js,889
1737
1737
  vellum/workflows/events/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1738
1738
  vellum/workflows/events/tests/test_basic_workflow.py,sha256=Pj6orHsXz37jWC5FARi0Sx2Gjf99Owri2Cvr6Chb79k,1765
1739
- vellum/workflows/events/tests/test_event.py,sha256=V26TNmbo2aL4sDvcY3nPxCWgcoS4ejF-7VuesMeD04U,18451
1739
+ vellum/workflows/events/tests/test_event.py,sha256=RGVGz0DXMTvwCgdjua8rpPpCuCLDM5-8ET_3q4yH8_8,18493
1740
1740
  vellum/workflows/events/types.py,sha256=mVrqAH9Hs9SpXm08Hcxdyap_ImQPwGsxRr56rSNMP34,5043
1741
1741
  vellum/workflows/events/workflow.py,sha256=kLSWFXiDZH0TELWoDjQ_kHVomFnw8MVVUPDGIzgyosw,8997
1742
- vellum/workflows/exceptions.py,sha256=NiBiR3ggfmPxBVqD-H1SqmjI-7mIn0EStSN1BqApvCM,1213
1742
+ vellum/workflows/exceptions.py,sha256=Y7EULLN0kss8jxTLFNWEiOLMnyr1uKG83wiMvmtQ9Ak,1438
1743
1743
  vellum/workflows/executable.py,sha256=um-gLJMVYfGJwGJfZIPlCRHhHIYm6pn8PUEfeqrNx5k,218
1744
1744
  vellum/workflows/expressions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1745
1745
  vellum/workflows/expressions/accessor.py,sha256=3lu1-_-dBfZdJvtX-q66jbmRAZtqIfdsh_3_JNuzg1E,4462
@@ -1889,7 +1889,7 @@ vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py,sha256=ZB
1889
1889
  vellum/workflows/nodes/displayable/subworkflow_deployment_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1890
1890
  vellum/workflows/nodes/displayable/subworkflow_deployment_node/tests/test_node.py,sha256=c98nMPogZ6iN_pTvVUMTB3J72Hj--H-XVgvvRXhdSQE,19085
1891
1891
  vellum/workflows/nodes/displayable/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1892
- vellum/workflows/nodes/displayable/tests/test_inline_text_prompt_node.py,sha256=MHuIolSsrY9ziwoXWsye3XOODncL9DLZOkNYzQMLhRw,4696
1892
+ vellum/workflows/nodes/displayable/tests/test_inline_text_prompt_node.py,sha256=E6PQ9OKcDlsJbWoxVKWgiAPgz9p59g1ONMgNggfOeiI,4868
1893
1893
  vellum/workflows/nodes/displayable/tests/test_search_node_error_handling.py,sha256=8aw8hDFL0ZXThvAa7yxrJN026EYGD4-Q1si3Phu9-_0,6307
1894
1894
  vellum/workflows/nodes/displayable/tests/test_search_node_wth_text_output.py,sha256=VepO5z1277c1y5N6LLIC31nnWD1aak2m5oPFplfJHHs,6935
1895
1895
  vellum/workflows/nodes/displayable/tests/test_text_prompt_deployment_node.py,sha256=Bjv-wZyFgNaVZb9KEMMZd9lFoLzbPEPjEMpANizMZw4,2413
@@ -1955,7 +1955,7 @@ vellum/workflows/tests/test_undefined.py,sha256=zMCVliCXVNLrlC6hEGyOWDnQADJ2g83y
1955
1955
  vellum/workflows/types/__init__.py,sha256=KxUTMBGzuRCfiMqzzsykOeVvrrkaZmTTo1a7SLu8gRM,68
1956
1956
  vellum/workflows/types/code_execution_node_wrappers.py,sha256=fewX9bqF_4TZuK-gZYIn12s31-k03vHMGRpvFAPm11Y,3206
1957
1957
  vellum/workflows/types/core.py,sha256=TggDVs2lVya33xvu374EDhMC1b7RRlAAs0zWLaF46BA,1385
1958
- vellum/workflows/types/definition.py,sha256=2vq3uGT-m994zRcla0yTUsMiPLKSDuzEZs7H6U9QbiE,4993
1958
+ vellum/workflows/types/definition.py,sha256=esmlFZFA6wnzNtSYUWpIMFmhhLs_kCm_h_THroL3Zd8,6196
1959
1959
  vellum/workflows/types/generics.py,sha256=8jptbEx1fnJV0Lhj0MpCJOT6yNiEWeTOYOwrEAb5CRU,1576
1960
1960
  vellum/workflows/types/stack.py,sha256=h7NE0vXR7l9DevFBIzIAk1Zh59K-kECQtDTKOUunwMY,1314
1961
1961
  vellum/workflows/types/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1971,9 +1971,9 @@ vellum/workflows/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
1971
1971
  vellum/workflows/utils/tests/test_functions.py,sha256=TlNhD0OBJ-aeYn4qUqmApuajkx9sJx0lIQRMfT8Xf0w,23688
1972
1972
  vellum/workflows/utils/tests/test_names.py,sha256=DnRRnuORxQXx9ESegCzkxiWcHy2_bBi7lXgbFi3FZK8,757
1973
1973
  vellum/workflows/utils/tests/test_uuids.py,sha256=i77ABQ0M3S-aFLzDXHJq_yr5FPkJEWCMBn1HJ3DObrE,437
1974
- vellum/workflows/utils/tests/test_vellum_variables.py,sha256=vbnKgm41aB5OXlO-ZIPbhQ6xDiZkT8KMxCLqz4zocWY,1791
1974
+ vellum/workflows/utils/tests/test_vellum_variables.py,sha256=X7b-bbN3bFRx0WG31bowcaOgsXxEPYnh2sgpsqgKIsQ,2096
1975
1975
  vellum/workflows/utils/uuids.py,sha256=IaZQANz7fhF7la0_J1O50Y6D2PIYv_taRDTRzBT9aWw,1284
1976
- vellum/workflows/utils/vellum_variables.py,sha256=YHLNiQGWDNssGH1FQoG9Z1jUFZ-zYebWqTLBG4cS-Fg,5837
1976
+ vellum/workflows/utils/vellum_variables.py,sha256=Tgv09yYROgq8QZbrKKIOEdg0IQ8Vfgz_vRjY4tYzaTQ,7152
1977
1977
  vellum/workflows/utils/zip.py,sha256=HVg_YZLmBOTXKaDV3Xhaf3V6sYnfqqZXQ8CpuafkbPY,1181
1978
1978
  vellum/workflows/vellum_client.py,sha256=xkfoucodxNK5JR2-lbRqZx3xzDgExWkP6kySrpi_Ubc,1079
1979
1979
  vellum/workflows/workflows/__init__.py,sha256=KY45TqvavCCvXIkyCFMEc0dc6jTMOUci93U2DUrlZYc,66
@@ -1982,8 +1982,8 @@ vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnad
1982
1982
  vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1983
1983
  vellum/workflows/workflows/tests/test_base_workflow.py,sha256=ptMntHzVyy8ZuzNgeTuk7hREgKQ5UBdgq8VJFSGaW4Y,20832
1984
1984
  vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
1985
- vellum_ai-1.3.8.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1986
- vellum_ai-1.3.8.dist-info/METADATA,sha256=KV_O-jG8Vwr7C8sWo7lhOV_jCflTi2AJQJKTBkxftN8,5547
1987
- vellum_ai-1.3.8.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1988
- vellum_ai-1.3.8.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1989
- vellum_ai-1.3.8.dist-info/RECORD,,
1985
+ vellum_ai-1.3.10.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1986
+ vellum_ai-1.3.10.dist-info/METADATA,sha256=rMxCNVxzMICH4KL7PndzBmRPdyejUvPmvuJnCS7goJc,5548
1987
+ vellum_ai-1.3.10.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1988
+ vellum_ai-1.3.10.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1989
+ vellum_ai-1.3.10.dist-info/RECORD,,
@@ -21,3 +21,5 @@ class NodeDisplayData(UniversalBaseModel):
21
21
  width: Optional[int] = None
22
22
  height: Optional[int] = None
23
23
  comment: Optional[NodeDisplayComment] = None
24
+ icon: Optional[str] = None
25
+ color: Optional[str] = None
@@ -162,7 +162,7 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
162
162
  {
163
163
  "id": id,
164
164
  "name": attribute.name,
165
- "value": serialize_value(display_context, attribute.instance),
165
+ "value": serialize_value(node_id, display_context, attribute.instance),
166
166
  }
167
167
  )
168
168
  except ValueError as e:
@@ -187,7 +187,7 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
187
187
  for output in node.Outputs:
188
188
  type = primitive_type_to_vellum_variable_type(output)
189
189
  value = (
190
- serialize_value(display_context, output.instance)
190
+ serialize_value(node_id, display_context, output.instance)
191
191
  if output.instance is not None and output.instance != undefined
192
192
  else None
193
193
  )
@@ -214,6 +214,7 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
214
214
  def serialize_ports(self, display_context: "WorkflowDisplayContext") -> JsonArray:
215
215
  """Serialize the ports of the node."""
216
216
  node = self._node
217
+ node_id = self.node_id
217
218
  ports: JsonArray = []
218
219
 
219
220
  for port in node.Ports:
@@ -224,7 +225,9 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
224
225
  "id": id,
225
226
  "name": port.name,
226
227
  "type": port._condition_type.value,
227
- "expression": (serialize_value(display_context, port._condition) if port._condition else None),
228
+ "expression": (
229
+ serialize_value(node_id, display_context, port._condition) if port._condition else None
230
+ ),
228
231
  }
229
232
  )
230
233
  else:
@@ -248,21 +251,23 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
248
251
 
249
252
  def _serialize_attributes(self, display_context: "WorkflowDisplayContext") -> JsonArray:
250
253
  """Serialize node attributes, skipping unserializable ones."""
254
+ node = self._node
255
+ node_id = self.node_id
251
256
  attributes: JsonArray = []
252
- for attribute in self._node:
257
+ for attribute in node:
253
258
  if attribute in self.__unserializable_attributes__:
254
259
  continue
255
260
 
256
261
  id = (
257
262
  str(self.attribute_ids_by_name[attribute.name])
258
263
  if self.attribute_ids_by_name.get(attribute.name)
259
- else str(uuid4_from_hash(f"{self.node_id}|{attribute.name}"))
264
+ else str(uuid4_from_hash(f"{node_id}|{attribute.name}"))
260
265
  )
261
266
  try:
262
267
  attribute_dict: JsonObject = {
263
268
  "id": id,
264
269
  "name": attribute.name,
265
- "value": serialize_value(display_context, attribute.instance),
270
+ "value": serialize_value(node_id, display_context, attribute.instance),
266
271
  }
267
272
  attributes.append(attribute_dict)
268
273
  except ValueError as e:
@@ -272,7 +277,7 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
272
277
 
273
278
  def serialize_generic_fields(self, display_context: "WorkflowDisplayContext") -> JsonObject:
274
279
  """Serialize generic fields that are common to all nodes."""
275
- return {
280
+ result: JsonObject = {
276
281
  "display_data": self.get_display_data().dict(),
277
282
  "base": self.get_base().dict(),
278
283
  "definition": self.get_definition().dict(),
@@ -280,6 +285,22 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
280
285
  "ports": self.serialize_ports(display_context),
281
286
  }
282
287
 
288
+ # Only include should_file_merge if there are custom methods defined
289
+ try:
290
+ node_class = self.__class__.infer_node_class()
291
+ has_custom_methods = any(
292
+ callable(getattr(node_class, name, None)) and inspect.isfunction(getattr(node_class, name, None))
293
+ for name in node_class.__dict__.keys()
294
+ if not name.startswith("__")
295
+ )
296
+
297
+ if has_custom_methods:
298
+ result["should_file_merge"] = True
299
+ except Exception:
300
+ pass
301
+
302
+ return result
303
+
283
304
  def get_base(self) -> CodeResourceDefinition:
284
305
  node = self._node
285
306
 
@@ -429,13 +450,20 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
429
450
  if explicit_value.comment.expanded is not None
430
451
  else NodeDisplayComment(value=docstring, expanded=True)
431
452
  )
432
- return NodeDisplayData(
433
- position=explicit_value.position,
434
- z_index=explicit_value.z_index,
435
- width=explicit_value.width,
436
- height=explicit_value.height,
437
- comment=comment,
438
- )
453
+ from typing import Any, Dict
454
+
455
+ kwargs: Dict[str, Any] = {
456
+ "position": explicit_value.position,
457
+ "z_index": explicit_value.z_index,
458
+ "width": explicit_value.width,
459
+ "height": explicit_value.height,
460
+ "comment": comment,
461
+ }
462
+ if explicit_value.icon is not None:
463
+ kwargs["icon"] = explicit_value.icon
464
+ if explicit_value.color is not None:
465
+ kwargs["color"] = explicit_value.color
466
+ return NodeDisplayData(**kwargs)
439
467
 
440
468
  if explicit_value:
441
469
  return explicit_value
@@ -4,6 +4,7 @@ from uuid import UUID
4
4
  from vellum.workflows.nodes.bases import BaseNode
5
5
  from vellum.workflows.ports.port import Port
6
6
  from vellum.workflows.references.constant import ConstantValueReference
7
+ from vellum_ee.workflows.display.editor.types import NodeDisplayData, NodeDisplayPosition
7
8
  from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
8
9
  from vellum_ee.workflows.display.nodes.get_node_display_class import get_node_display_class
9
10
  from vellum_ee.workflows.display.types import WorkflowDisplayContext
@@ -117,3 +118,66 @@ def test_serialize_node_label_with_pascal_case():
117
118
 
118
119
  # THEN the label should be converted to proper title case with spaces
119
120
  assert data["label"] == "My Custom Node"
121
+
122
+
123
+ def test_serialize_display_data_with_icon_and_color():
124
+ """
125
+ Tests that nodes with icon and color serialize display_data correctly.
126
+ """
127
+
128
+ # GIVEN a node with icon and color in display data
129
+ class MyNode(BaseNode):
130
+ pass
131
+
132
+ class MyNodeDisplay(BaseNodeDisplay[MyNode]):
133
+ display_data = NodeDisplayData(
134
+ position=NodeDisplayPosition(x=100, y=200), icon="vellum:icon:star", color="navy"
135
+ )
136
+
137
+ # WHEN we serialize the node
138
+ data = MyNodeDisplay().serialize(WorkflowDisplayContext())
139
+
140
+ # THEN the display_data should include icon and color
141
+ assert data["display_data"] == {"position": {"x": 100, "y": 200}, "icon": "vellum:icon:star", "color": "navy"}
142
+
143
+
144
+ def test_serialize_display_data_with_various_icon_formats():
145
+ """
146
+ Tests that different icon formats are serialized correctly.
147
+ """
148
+
149
+ # GIVEN a node with a vellum icon format
150
+ class MyNode(BaseNode):
151
+ pass
152
+
153
+ class MyNodeDisplay(BaseNodeDisplay[MyNode]):
154
+ display_data = NodeDisplayData(icon="vellum:icon:home")
155
+
156
+ # WHEN we serialize the node
157
+ data = MyNodeDisplay().serialize(WorkflowDisplayContext())
158
+
159
+ # THEN the icon should be preserved as-is
160
+ display_data = data["display_data"]
161
+ assert isinstance(display_data, dict)
162
+ assert display_data["icon"] == "vellum:icon:home"
163
+
164
+
165
+ def test_serialize_display_data_with_navy_color():
166
+ """
167
+ Tests that navy color values are serialized correctly.
168
+ """
169
+
170
+ # GIVEN a node with a navy color
171
+ class MyNode(BaseNode):
172
+ pass
173
+
174
+ class MyNodeDisplay(BaseNodeDisplay[MyNode]):
175
+ display_data = NodeDisplayData(color="navy")
176
+
177
+ # WHEN we serialize the node
178
+ data = MyNodeDisplay().serialize(WorkflowDisplayContext())
179
+
180
+ # THEN the color should be preserved as-is
181
+ display_data = data["display_data"]
182
+ assert isinstance(display_data, dict)
183
+ assert display_data["color"] == "navy"
@@ -51,7 +51,7 @@ class BaseFinalOutputNodeDisplay(BaseNodeDisplay[_FinalOutputNodeType], Generic[
51
51
  "id": str(self._get_output_id()),
52
52
  "name": node.Outputs.value.name,
53
53
  "type": inferred_type,
54
- "value": serialize_value(display_context, node.Outputs.value.instance),
54
+ "value": serialize_value(node_id, display_context, node.Outputs.value.instance),
55
55
  }
56
56
  ],
57
57
  }
@@ -33,7 +33,7 @@ class BaseRetryNodeDisplay(BaseAdornmentNodeDisplay[_RetryNodeType], Generic[_Re
33
33
  {
34
34
  "id": id,
35
35
  "name": attribute.name,
36
- "value": serialize_value(display_context, attribute.instance),
36
+ "value": serialize_value(node_id, display_context, attribute.instance),
37
37
  }
38
38
  )
39
39
 
@@ -197,7 +197,7 @@ def test_serialize_node__prompt_inputs__state_reference():
197
197
  "type": "DICTIONARY_REFERENCE",
198
198
  "entries": [
199
199
  {
200
- "id": "feadab18-07c6-4790-adf0-28be20a5447a",
200
+ "id": "52559b9e-4e8e-438a-8246-cfa30c98d5d1",
201
201
  "key": "foo",
202
202
  "value": {
203
203
  "type": "WORKFLOW_STATE",
@@ -205,7 +205,7 @@ def test_serialize_node__prompt_inputs__state_reference():
205
205
  },
206
206
  },
207
207
  {
208
- "id": "4f252277-d0a5-48ad-8cc5-be03bf0dbd19",
208
+ "id": "3750feb9-5d5c-4150-b62d-a9924f466888",
209
209
  "key": "bar",
210
210
  "value": {
211
211
  "type": "CONSTANT_VALUE",
@@ -325,52 +325,52 @@ def test_serialize_node__prompt_parameters__dynamic_references():
325
325
  assert parameters_attribute["value"]["type"] == "DICTIONARY_REFERENCE"
326
326
  assert parameters_attribute["value"]["entries"] == [
327
327
  {
328
- "id": "6b63ff96-a2eb-4c6e-bad1-bde01605fa86",
328
+ "id": "24703d3a-ee6c-4b1b-80f8-6c19ef16723a",
329
329
  "key": "stop",
330
330
  "value": {"type": "CONSTANT_VALUE", "value": {"type": "JSON", "value": None}},
331
331
  },
332
332
  {
333
- "id": "265a1c17-2089-4ac1-b2ce-361b6b9a3335",
333
+ "id": "88a3bf5d-f42b-4895-850e-ad843945a003",
334
334
  "key": "temperature",
335
335
  "value": {"type": "CONSTANT_VALUE", "value": {"type": "JSON", "value": None}},
336
336
  },
337
337
  {
338
- "id": "699976ec-8ec2-476a-a011-7cf810a8a307",
338
+ "id": "ede3e0c2-3033-4d0a-bd72-e52595bdc916",
339
339
  "key": "max_tokens",
340
340
  "value": {"type": "CONSTANT_VALUE", "value": {"type": "JSON", "value": None}},
341
341
  },
342
342
  {
343
- "id": "a87e23da-9794-41ff-ba80-c3a77e976e75",
343
+ "id": "0013cd8f-7658-4908-80fc-b8995d8ca4cc",
344
344
  "key": "top_p",
345
345
  "value": {"type": "CONSTANT_VALUE", "value": {"type": "JSON", "value": None}},
346
346
  },
347
347
  {
348
- "id": "18eb53c2-ec1a-4115-9f21-083af430df67",
348
+ "id": "98eb2e57-d4ec-4c27-b39b-0b8086918a0f",
349
349
  "key": "top_k",
350
350
  "value": {"type": "CONSTANT_VALUE", "value": {"type": "JSON", "value": None}},
351
351
  },
352
352
  {
353
- "id": "295509a2-5837-452c-893d-f47b67c63c8a",
353
+ "id": "04accc66-888c-4145-8b4f-d8ff99e38172",
354
354
  "key": "frequency_penalty",
355
355
  "value": {"type": "CONSTANT_VALUE", "value": {"type": "JSON", "value": None}},
356
356
  },
357
357
  {
358
- "id": "5fc64379-5566-426a-a909-dd56c3305aa5",
358
+ "id": "9236d564-0637-48de-8423-cdf3617dd6b4",
359
359
  "key": "presence_penalty",
360
360
  "value": {"type": "CONSTANT_VALUE", "value": {"type": "JSON", "value": None}},
361
361
  },
362
362
  {
363
- "id": "5d326da0-c096-4425-8bf1-3a18764e96e3",
363
+ "id": "74f3e80a-3935-45af-a9b3-d49e310a4c03",
364
364
  "key": "logit_bias",
365
365
  "value": {"type": "CONSTANT_VALUE", "value": {"type": "JSON", "value": None}},
366
366
  },
367
367
  {
368
- "id": "cd1a0e1b-6667-48a0-9964-257e1ec8851d",
368
+ "id": "69a7ebf7-d21a-44e9-a0fa-43eb9b2815df",
369
369
  "key": "custom_parameters",
370
370
  "value": {
371
371
  "entries": [
372
372
  {
373
- "id": "a9a3092e-dd18-4533-b6b5-24588ebd8f7f",
373
+ "id": "e709dc4d-f2db-4dc9-b912-401b52fbb7b4",
374
374
  "key": "json_schema",
375
375
  "value": {
376
376
  "input_variable_id": "c02d1201-86d1-4364-b3b3-4fc6824db8a4",
@@ -92,7 +92,7 @@ def test_serialize_node__prompt_inputs__input_reference():
92
92
  "type": "DICTIONARY_REFERENCE",
93
93
  "entries": [
94
94
  {
95
- "id": "ab7902ef-de14-4edc-835c-366d3ef6a70e",
95
+ "id": "845009c8-03f8-4de4-b956-841309457d37",
96
96
  "key": "foo",
97
97
  "value": {"type": "WORKFLOW_INPUT", "input_variable_id": "e3657390-fd3c-4fea-8cdd-fc5ea79f3278"},
98
98
  }
@@ -134,12 +134,12 @@ def test_serialize_node__prompt_inputs__mixed_values():
134
134
  "type": "DICTIONARY_REFERENCE",
135
135
  "entries": [
136
136
  {
137
- "id": "0fc7e25e-075c-4849-b89b-9729d1aeada1",
137
+ "id": "a4016385-3cab-4c01-b9d2-7865cd54bdb0",
138
138
  "key": "foo",
139
139
  "value": {"type": "CONSTANT_VALUE", "value": {"type": "STRING", "value": "bar"}},
140
140
  },
141
141
  {
142
- "id": "bba42c89-fa7b-4cb7-bc16-0d21ce060a4b",
142
+ "id": "828928b1-24e3-4457-9d6f-4f0692dfa355",
143
143
  "key": "baz",
144
144
  "value": {"type": "WORKFLOW_INPUT", "input_variable_id": "8d57cf1d-147c-427b-9a5e-e5f6ab76e2eb"},
145
145
  },
@@ -540,7 +540,7 @@ def test_serialize_tool_prompt_node_with_inline_workflow():
540
540
  "type": "DICTIONARY_REFERENCE",
541
541
  "entries": [
542
542
  {
543
- "id": "76ceec7b-ec37-474f-ba38-2bfd27cecc5d",
543
+ "id": "b1dfaf2b-b9fb-4fea-ad04-a988e5223d06",
544
544
  "key": "chat_history",
545
545
  "value": {
546
546
  "type": "BINARY_EXPRESSION",
@@ -37,7 +37,7 @@ class BaseTryNodeDisplay(BaseAdornmentNodeDisplay[_TryNodeType], Generic[_TryNod
37
37
  {
38
38
  "id": id,
39
39
  "name": attribute.name,
40
- "value": serialize_value(display_context, attribute.instance),
40
+ "value": serialize_value(node_id, display_context, attribute.instance),
41
41
  }
42
42
  )
43
43