vellum-ai 0.14.39__py3-none-any.whl → 0.14.41__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 (85) hide show
  1. vellum/client/core/client_wrapper.py +1 -1
  2. vellum/client/reference.md +138 -1
  3. vellum/client/resources/ad_hoc/client.py +311 -1
  4. vellum/client/resources/deployments/client.py +2 -2
  5. vellum/workflows/nodes/bases/tests/test_base_node.py +24 -0
  6. vellum/workflows/nodes/core/try_node/node.py +1 -2
  7. vellum/workflows/nodes/experimental/tool_calling_node/__init__.py +3 -0
  8. vellum/workflows/nodes/experimental/tool_calling_node/node.py +125 -0
  9. vellum/workflows/nodes/experimental/tool_calling_node/utils.py +128 -0
  10. vellum/workflows/nodes/utils.py +4 -2
  11. vellum/workflows/outputs/base.py +3 -2
  12. vellum/workflows/references/output.py +20 -0
  13. vellum/workflows/state/base.py +36 -14
  14. vellum/workflows/state/tests/test_state.py +5 -2
  15. vellum/workflows/types/stack.py +11 -0
  16. vellum/workflows/workflows/base.py +5 -0
  17. vellum/workflows/workflows/tests/test_base_workflow.py +96 -9
  18. {vellum_ai-0.14.39.dist-info → vellum_ai-0.14.41.dist-info}/METADATA +1 -1
  19. {vellum_ai-0.14.39.dist-info → vellum_ai-0.14.41.dist-info}/RECORD +84 -80
  20. vellum_cli/push.py +0 -2
  21. vellum_ee/workflows/display/base.py +14 -1
  22. vellum_ee/workflows/display/nodes/base_node_display.py +91 -19
  23. vellum_ee/workflows/display/nodes/get_node_display_class.py +9 -15
  24. vellum_ee/workflows/display/nodes/tests/test_base_node_display.py +54 -0
  25. vellum_ee/workflows/display/nodes/vellum/api_node.py +2 -2
  26. vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py +4 -4
  27. vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +2 -2
  28. vellum_ee/workflows/display/nodes/vellum/conditional_node.py +2 -2
  29. vellum_ee/workflows/display/nodes/vellum/error_node.py +2 -2
  30. vellum_ee/workflows/display/nodes/vellum/final_output_node.py +2 -2
  31. vellum_ee/workflows/display/nodes/vellum/guardrail_node.py +2 -2
  32. vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py +2 -2
  33. vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py +2 -2
  34. vellum_ee/workflows/display/nodes/vellum/merge_node.py +2 -2
  35. vellum_ee/workflows/display/nodes/vellum/note_node.py +2 -2
  36. vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py +2 -4
  37. vellum_ee/workflows/display/nodes/vellum/retry_node.py +1 -2
  38. vellum_ee/workflows/display/nodes/vellum/search_node.py +2 -2
  39. vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py +2 -2
  40. vellum_ee/workflows/display/nodes/vellum/templating_node.py +2 -2
  41. vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py +1 -2
  42. vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py +1 -2
  43. vellum_ee/workflows/display/nodes/vellum/tests/test_note_node.py +1 -2
  44. vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py +55 -3
  45. vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py +1 -2
  46. vellum_ee/workflows/display/nodes/vellum/tests/test_templating_node.py +1 -2
  47. vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py +1 -2
  48. vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py +4 -4
  49. vellum_ee/workflows/display/nodes/vellum/try_node.py +1 -2
  50. vellum_ee/workflows/display/nodes/vellum/utils.py +7 -1
  51. vellum_ee/workflows/display/tests/{test_vellum_workflow_display.py → test_base_workflow_display.py} +10 -22
  52. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py +4 -6
  53. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py +7 -16
  54. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +2 -6
  55. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py +1 -2
  56. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py +3 -10
  57. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py +4 -5
  58. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py +1 -4
  59. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py +1 -4
  60. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py +2 -5
  61. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py +7 -5
  62. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py +1 -4
  63. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py +1 -4
  64. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +1 -2
  65. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py +1 -4
  66. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py +1 -4
  67. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py +7 -5
  68. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py +1 -4
  69. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py +1 -4
  70. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py +1 -4
  71. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py +2 -5
  72. vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py +2 -7
  73. vellum_ee/workflows/display/types.py +5 -4
  74. vellum_ee/workflows/display/utils/exceptions.py +7 -0
  75. vellum_ee/workflows/display/utils/registry.py +37 -0
  76. vellum_ee/workflows/display/utils/vellum.py +2 -1
  77. vellum_ee/workflows/display/workflows/base_workflow_display.py +277 -47
  78. vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py +34 -21
  79. vellum_ee/workflows/display/workflows/tests/test_workflow_display.py +58 -20
  80. vellum_ee/workflows/display/workflows/vellum_workflow_display.py +4 -257
  81. vellum_ee/workflows/tests/local_workflow/display/workflow.py +2 -2
  82. vellum_ee/workflows/display/nodes/base_node_vellum_display.py +0 -40
  83. {vellum_ai-0.14.39.dist-info → vellum_ai-0.14.41.dist-info}/LICENSE +0 -0
  84. {vellum_ai-0.14.39.dist-info → vellum_ai-0.14.41.dist-info}/WHEEL +0 -0
  85. {vellum_ai-0.14.39.dist-info → vellum_ai-0.14.41.dist-info}/entry_points.txt +0 -0
@@ -8,7 +8,7 @@ vellum_cli/init.py,sha256=WpnMXPItPmh0f0bBGIer3p-e5gu8DUGwSArT_FuoMEw,5093
8
8
  vellum_cli/logger.py,sha256=PuRFa0WCh4sAGFS5aqWB0QIYpS6nBWwPJrIXpWxugV4,1022
9
9
  vellum_cli/ping.py,sha256=p_BCCRjgPhng6JktuECtkDQLbhopt6JpmrtGoLnLJT8,1161
10
10
  vellum_cli/pull.py,sha256=27Mh10aQ8H1OkTmQOJcOuJ5cQcYbNjkkuQrBmtkRe0o,12262
11
- vellum_cli/push.py,sha256=e2zo4PsQgEhXR3Eeg7sVJ_pdV6Rv-MswQEdCMIEdIqY,9654
11
+ vellum_cli/push.py,sha256=0bHAhp6B67JUFuiL9sSekrLOw-x2Dp6VsrzhFbOy7e4,9508
12
12
  vellum_cli/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  vellum_cli/tests/conftest.py,sha256=AFYZryKA2qnUuCPBxBKmHLFoPiE0WhBFFej9tNwSHdc,1526
14
14
  vellum_cli/tests/test_config.py,sha256=uvKGDc8BoVyT9_H0Z-g8469zVxomn6Oi3Zj-vK7O_wU,2631
@@ -22,84 +22,85 @@ 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=em2kgLWBk74fiDoDDp-smL0IFmDjMPtd8F4mx10NPTg,2229
25
+ vellum_ee/workflows/display/base.py,sha256=EqlQFD56kpqMY02ZBJBQajzJKh33Dwi60Wo779kJlec,2880
26
26
  vellum_ee/workflows/display/editor/__init__.py,sha256=MSAgY91xCEg2neH5d8jXx5wRdR962ftZVa6vO9BGq9k,167
27
27
  vellum_ee/workflows/display/editor/types.py,sha256=x-tOOCJ6CF4HmiKDfCmcc3bOVfc1EBlP5o6u5WEfLoY,567
28
28
  vellum_ee/workflows/display/nodes/__init__.py,sha256=jI1aPBQf8DkmrYoZ4O-wR1duqZByOf5mDFmo_wFJPE4,307
29
- vellum_ee/workflows/display/nodes/base_node_display.py,sha256=cHK2OxeM2gWOshMHjaDHxWbRxvjkNHxOXbajjkrgk1w,19094
30
- vellum_ee/workflows/display/nodes/base_node_vellum_display.py,sha256=WXbfVoGHTfl_owas2WKHwcRhfLeu0cAI4qLmKxfxjOs,1707
31
- vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=59Nht1XAxMcNESFV1VmECrF01lZMnGkB_9JWaTAFnv0,2214
29
+ vellum_ee/workflows/display/nodes/base_node_display.py,sha256=zCcCEzpTLXOWbe9zGFF_mWmouJ9zwnTY0dkjepbuZrs,22269
30
+ vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=5QuXpMth0HmZuC-e8LRKOLbrVXSL-ylMR5IWae8eNmc,2113
32
31
  vellum_ee/workflows/display/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- vellum_ee/workflows/display/nodes/tests/test_base_node_display.py,sha256=QqR3Ly0RNrXwOeLdW5nERDFt0gRPf76n1bPES6o5UN4,1093
32
+ vellum_ee/workflows/display/nodes/tests/test_base_node_display.py,sha256=Z4Mf7xLCNiblSbpKI0BrV5modQr-ZcFzhfir_OSyTTs,2997
34
33
  vellum_ee/workflows/display/nodes/types.py,sha256=St1BB6no528OyELGiyRabWao0GGw6mLhstQAvEACbGk,247
35
34
  vellum_ee/workflows/display/nodes/utils.py,sha256=sloya5TpXsnot1HURc9L51INwflRqUzHxRVnCS9Cd-4,973
36
35
  vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=nUIgH2s0-7IbQRNrBhLPyRNe8YIrx3Yo9HeeW-aXXFk,1668
37
- vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=RDsxyubod_zYc72_VaHUTfOZXsgrKv8g3fqZFS2_j8Y,8538
38
- vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py,sha256=Bzqplrnx-bDIRD1JgU7036m8pSWSO45zEReNv8RJTu4,6379
39
- vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=IYx0nll0t-tsPcjfgpfHMZE4FJgMFIsOiaQanGLYF0Q,4410
40
- vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=ybLIa4uclqVIy3VAQvI1ivg2tnK5Ug_1R5a69DFqL7E,11104
41
- vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=I1Jkp2htRINJATtv1e-zs9BrReFX842djpiVgBPHDYg,2186
42
- vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=BJ--Y-LCbGFJve3OFEKHVxrw8TKvgb342opYLJibToc,3128
43
- vellum_ee/workflows/display/nodes/vellum/guardrail_node.py,sha256=IuJPKZoZT7lXhQkPH-wlut9-FsGtr8dIHM4jz8rp7BU,2228
44
- vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=86hkneLIBS4Jel3GWsPVIIFqXGD3RHIpXw0iGa_Zues,8843
45
- vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py,sha256=MU9I8CB1X1TgL1aa1eT6DHWwNJ-2v79t74xl0oy-fBo,5510
36
+ vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=ke2_t-E6BdsbZlYgAQCxCqbM01owtgKmI1H62AYGWw4,8519
37
+ vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py,sha256=rJbHZBg9A_v2bjk-R6MfWzShcrS2gcKIOyYGoqwTx8s,6353
38
+ vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=NMlgXgglewZ-k7DolHDAcUnOK68EetmI8EjhYI3ciRg,4391
39
+ vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=slsDIxkuKD2b3XptcGhd8aCKrvYqUSeNmkeCJ23CXXY,11085
40
+ vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=eJ_nw0u63vJ7fxxMCrfNyKx8JTOcRoujrJsvsxo_FJ4,2167
41
+ vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=WL5At9pRRODV9kOZnY2HtF1zkf7tig7O-x1BhPtI9S8,3109
42
+ vellum_ee/workflows/display/nodes/vellum/guardrail_node.py,sha256=Mc2QilBaGWinOoNItVkkeNkIrV2Yn8vaLN83z8ajC_0,2209
43
+ vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=uprXxAph7oavh3ARupcZZ8Rvwv1KtzyUP-x0cSzWJC0,8824
44
+ vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py,sha256=5P5Y3fkRo9o7ITONY_T3Wibfx03z5BopNl7NG19hEOM,5491
46
45
  vellum_ee/workflows/display/nodes/vellum/map_node.py,sha256=8CPnn06HIBxBOiECevUffeVmQmCpec6WtPQnNl9gj9Y,3748
47
- vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=xtyecs9mJ_WEwVpP12jxYwvehLXynhqLrPJ-Ahdk2GA,3232
48
- vellum_ee/workflows/display/nodes/vellum/note_node.py,sha256=DQzzhVGVZf812DkpQZoVYJcDsIOtjkm_sCX3oDLks2Y,1103
49
- vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=yAiWMeKs6jEecRdWfTjqxLmnGLeBPguaVsBD7xcOV94,3263
50
- vellum_ee/workflows/display/nodes/vellum/retry_node.py,sha256=LgokATi7sSS38Fil-XjqoR4t7AMOJ-GzXRw6p606Svo,3397
51
- vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=Hn55mKO1Q6BBspQtbsurvJJqX7RjSSuEyRjUW29xvg0,9279
52
- vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=62baAElKoRKIoba0lLhnrXGWWx96B73VxKGxh7BaIxc,2612
53
- vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=5EWzdA3TSUPlbJhs4uo1KGH6eGtDXZucVhlUoc_xpl4,3242
46
+ vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=Qirs9cWx7LXKXgUtZBncZ1gou3EIMZ1m9146t9RCC3o,3213
47
+ vellum_ee/workflows/display/nodes/vellum/note_node.py,sha256=3E0UqmgVYdtbj4nyq8gKju8EpMsRHMCQ0KLrJhug3XU,1084
48
+ vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=mkvc8CPts1d9CZkubT1eg75grQjrmgngMy9Ll99a9ds,3238
49
+ vellum_ee/workflows/display/nodes/vellum/retry_node.py,sha256=TjBpRERmkmm1myZTWKAxxD1F0dWSc7U1sih8g9sqq2Q,3300
50
+ vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=BgphkaSEeUeNXu71mSse-d0QHtXs6989BKEe9OtceGw,9260
51
+ vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=GI2d9W0S72NxZykdyCHDoCfgpiVye7g9fG3wcQ01O8Q,2593
52
+ vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=otA0D2vXnfNIktjp4RvWL5pzsqSQiPeCinJy7weTg9g,3223
54
53
  vellum_ee/workflows/display/nodes/vellum/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
- vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py,sha256=p0fCvbKzpGvVrg67QmJd14m9E8_DG0u5s6SYIhzlkNA,4018
56
- vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py,sha256=ulrpoYUW-5kIxfG4Lf5F2p0k_EoYKhmahEbF3P_eruM,1648
57
- vellum_ee/workflows/display/nodes/vellum/tests/test_note_node.py,sha256=Xx_2qi956tc6QoWr3MxlTBp48xJEErj8LHIsMfEi1vU,1356
58
- vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py,sha256=fu9nxD4FInSfKbipJJ7UE617VkeUWs_uS6SeEz_8-Iw,4691
59
- vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py,sha256=NuIw8Yb42KUdoGi3Ur8_7VPg50IC4hNrwAkCociwqNk,2091
60
- vellum_ee/workflows/display/nodes/vellum/tests/test_templating_node.py,sha256=Us32jf_FQnLuT4Bs2o5JyHxihCTAN8ozZghWIR0pl9k,3459
61
- vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py,sha256=mtzB8LJlFCHVFM4H5AanLp29gQfaVmnN4A4iaRGJHoI,2427
62
- vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py,sha256=8_4b_U2l60b3TPLTHiDd_lzk6gi-30FmNJreDVeG0oM,4876
63
- vellum_ee/workflows/display/nodes/vellum/try_node.py,sha256=0ipBZMYm521tuwefQFgHOvTyTgiWVTkzxpQtnnmOAI0,4203
64
- vellum_ee/workflows/display/nodes/vellum/utils.py,sha256=MAoHDSURlLRJ9V8D6I6icclqGq2hExU_h7ABx6BWuJY,4733
54
+ vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py,sha256=OoNO-BstB96F-VMK6FZ9aXyi-0wyNePo6HiaJC6SYRw,3880
55
+ vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py,sha256=HoIph_rNlHFNBMqBq1a_eyFwPzBIazdH1yQeRhgba14,1510
56
+ vellum_ee/workflows/display/nodes/vellum/tests/test_note_node.py,sha256=uiMB0cOxKZzos7YKnj4ef4DFa2bOvZJWIv-hfbUV6Go,1218
57
+ vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py,sha256=6Q6rfEwjjSEgSX24aFZjS3K6l8G2YRYBUNC2o5BE8Tk,6101
58
+ vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py,sha256=h93ysolmbo2viisyhRnXKHPxiDK0I_dSAbYoHFYIoO4,1953
59
+ vellum_ee/workflows/display/nodes/vellum/tests/test_templating_node.py,sha256=PK7v0AWCgH9gWRfAwGPUGCRLbIH3NSyoAYa9W15ggAo,3321
60
+ vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py,sha256=Khjsb53PKpZuyhKoRMgKAL45eGp5hZqXvHmVeQWRw4w,2289
61
+ vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py,sha256=3LS1O4DGPWit05oj_ubeW8AlHGnoBxdUMferGQuAiZs,4851
62
+ vellum_ee/workflows/display/nodes/vellum/try_node.py,sha256=o6wL17XVm6Wj4sHoJkBW54Y5fY9ZwhD7ry0xkNWRu5c,4106
63
+ vellum_ee/workflows/display/nodes/vellum/utils.py,sha256=oICunzyaXPs0tYnW5zH1r93Bx35MSH7mcD-n0DEWRok,4978
65
64
  vellum_ee/workflows/display/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
- vellum_ee/workflows/display/tests/test_vellum_workflow_display.py,sha256=VD-4USiRlCcdC3Qe9WfdkxwFdircai0vqvuZCbELR84,9556
65
+ vellum_ee/workflows/display/tests/test_base_workflow_display.py,sha256=1R9BAjbfRX7tV3hEwDebzUqzzXoFLfZ-f2WI8Bj4oLI,9286
67
66
  vellum_ee/workflows/display/tests/workflow_serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
67
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=GzDx9JX9yBDgsHk1x58cmjChC9tPMUtlaqOSxO5CJxQ,2069
70
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=4R8cZ98JsGmIq-kmt3q519c4nCI7wCy5ynAUCUNnvuI,15605
71
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=PXoNUAgqfyNCAoYGWoo5D-_5SLEannn7SD08nxZmVe8,19781
68
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=XOQDDRiG46etxTC7-_RUEutoNumXc02fo7oho4GYM0c,1900
69
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=ixu_VHgpigvKXj2uQu2_EUn4bkpRy0390LGoRKBJ6iU,15262
70
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=m9KpVN55_bHiooZOJLm7doRewhcTK53weVYRiglCJX0,19578
72
71
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py,sha256=s6_mnk0pkztU59wYpSfOFpMhAJaRjmyfxM6WJGtnD4Y,6456
73
72
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py,sha256=PkSgghJDz0fpDB72HHPjLjo8LkZk-HpUkCQzRLX-iVw,40611
74
73
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py,sha256=dsJr8I9AdPwMOGszirfNDzZP2Ychd94aAKuPXAzknMk,4632
75
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py,sha256=EdLwx6iUEMrQd68UIlACa9DQguomcu621MOYuXmunig,15908
76
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py,sha256=V__y7uu-dy6TJjPeu4UDvaoO2yYwBRbPiW9uJdzWRx4,29828
77
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py,sha256=6ejs_C1cuaRHtc8Qb2qh8-b-juDwLwdfTBd-6CSDDYw,47672
78
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py,sha256=FKojL_YddJ-PEZ9n0IKedD2qI0JQtnXRTfMXBPPB9HU,8821
79
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=wgedEa2IVP2ssH_FLghoEmLgpJR41AY-iNIw1SESeqA,6106
80
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=THQB73vAgdiRRk7GKWwzw99G-X3LLgEEVCb4QCQrrMQ,5773
81
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py,sha256=aWZ3XIquyKeS199VayYVA7qVjXdvPepGG8UkNt0osIU,7446
82
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py,sha256=XRtXTWtNXHe1g8E_mNcAhYZVjc0UcGlJRjq34_sd0jo,787
83
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=nZ3IOZSX3cOg4XV5-PW-Hsu806vfzmOZyCpZyl1I50w,20605
84
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=3uWphk9TeyZ5Ila2wBIDIjQfbr62bHQ6TNpRgBVIP98,16150
85
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=QifoIZja04F1ulMhKlfZHtOqhAWrbUXlnQpybBBzNdw,8449
86
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py,sha256=J7BQnYNjS8EFy6y4hYRFKoh33EGXz7vFSCKPOM6v2Zk,8713
87
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py,sha256=elc4ak2OyI4y5P6GPnK2RwuZLcx4FL6hHlmhY3ARk6k,13008
88
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py,sha256=BzFNl9ECeGh0krm-CUjbBQQq0g7krANsp0Sh-j5dAkc,11322
89
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py,sha256=qjaXGw0JTnPnQmDAFm7jkB3bVkApf-WQ0Gd6kptqdPA,7818
90
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=UrueKI15Ez-DRfZpZH82o127v0LRXLP-s308kjDTPMI,4084
91
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=eD5686C9nWC5s6t08vbAnm9qf9t53gYQM-E1FwAa75c,3035
92
- vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=zXTjfjUdji0WBu6ZhocvM4UiXEWFJIpds24sxV9TZT0,7714
93
- vellum_ee/workflows/display/types.py,sha256=nERYzMC-TqoQuRN8QtF2ZLr-56G7XgXJqLtn8qQMQqs,2442
74
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py,sha256=h8LANc1wOj5wDzyFYhsn_defoJL7EjIcw5U_dYdjsuM,15794
75
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py,sha256=G4rfMSAttEtxos2ZgVJ0j4a2kqMeKrc1D1FaqYT4vzw,29588
76
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py,sha256=Ofo4pU9dO57UceejBPsTzPDRMR5XkiLqpTiNevDtkCU,47432
77
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py,sha256=3GloR_5CwBYIpIkRNqJ6-AvwXe9acwyjU-xz1yN-Xws,8693
78
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=8WnzAu4HceKcIcp-Tdnrkdwq9zC6an5-92khTxNm1uk,5978
79
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=jSUfw4iSfyu9-Yift1Lb_oBDC1WnD7FwSPnNzPyQlOI,5632
80
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py,sha256=1dLkx5e-rhRQ6Ap0lma4sA_ZGByQW1W9BUwPhvsazjc,7357
81
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py,sha256=8NiFJLd9vVK8MheYs7TJ3PqYDmtWVXrUNz40E33Y4gA,659
82
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=xS7gjdp_ABfXYU89qz6B_i94cKiDivDm2DlQdWgZhQc,20477
83
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=EDWp_yXZ67IFv5KMCR7Zzvs7rQ456NtPCR-cdCWwqeQ,16036
84
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=aWxEPd6Xsorm36ILyJWMh7UO-bMwYgRc6BciqyYto64,8321
85
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py,sha256=G8qjDAKO_-OGEg8dSqs4hp1Pf67RCy7MnecLbZYnsuU,8585
86
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py,sha256=gvtlKvMK7U9P6P_sc1nTVcMbDEwaDqBjCxqpsh7tV-U,12919
87
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py,sha256=E9UaEdNDG6baHVxg0v7kYHLxiJNVMzPCbVbt4gXBhFw,11194
88
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py,sha256=8J-KdCUiC8AgzbRQgT_1t_eWrMOaPSgK3XQfXV_hiE0,7690
89
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=2MIf-929wze_gDoYSTwZVT74tBi09m2MihtX-EcxFRg,3956
90
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=NIq7pa8EBR0ZmhTc3k_akwGuOKih8mwurkyIbc0dNTg,2857
91
+ vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=DsWHUyh_GfCvFShbBh7GQnjq5j5NlMc1q_VubE5NikY,7530
92
+ vellum_ee/workflows/display/types.py,sha256=NKtEGFhvgz1i_oAayXFIS06QZautixnS3id5DckCIjg,2637
94
93
  vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
+ vellum_ee/workflows/display/utils/exceptions.py,sha256=LSwwxCYNxFkf5XMUcFkaZKpQ13OSrI7y_bpEUwbKVk0,169
95
95
  vellum_ee/workflows/display/utils/expressions.py,sha256=2u2o8Fqr-2C45FII01ej5rt6i8n2EEGiliXugK7buVw,1210
96
- vellum_ee/workflows/display/utils/vellum.py,sha256=Pzmg9Xiq-hRaYxbOSDaJhIAQ4A0apQN6dURn_h5DnWI,9364
96
+ vellum_ee/workflows/display/utils/registry.py,sha256=fWIm5Jj-10gNFjgn34iBu4RWv3Vd15ijtSN0V97bpW8,1513
97
+ vellum_ee/workflows/display/utils/vellum.py,sha256=VSWB3RA3RWQwQ7nMsU9gLfgpX3_BK9ARBIT36i52r9k,9478
97
98
  vellum_ee/workflows/display/vellum.py,sha256=o7mq_vk2Yapu9DDKRz5l76h8EmCAypWGQYe6pryrbB8,3576
98
99
  vellum_ee/workflows/display/workflows/__init__.py,sha256=kapXsC67VJcgSuiBMa86FdePG5A9kMB5Pi4Uy1O2ob4,207
99
- vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=UbUalLL_CDFIEnqN-uFv8Ms06AMxDmQPx9HQ1oocBno,20979
100
- vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=kp0u8LN_2IwshLrhMImhpZx1hRyAcD5gXY-kDuuaGMQ,1269
101
- vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=nD6_lZnNp56siVJwhlWzSEHdMaSKjvWlsJa31SqfQAE,10623
102
- vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=f-Js7M_WbFp_3mPTv191xC4GoGyWbITrvZSGdiqDcU4,12436
100
+ vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=qjdATqHawQ1IWkyQ3aRlQQAFixNsS-X4ewpmKSnSwvI,32001
101
+ vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=s6yMO0RxoM8scmfT8TJ-9cwl-WHFe7JSyEJA0alCeEs,1913
102
+ vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=uWBMmd_2BlDpymGoo5FB2LBeFQKHmPWJAPvSPZHk94o,11869
103
+ vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=aaKdmWrgEe5YyV4zuDY_4E3y-l59rIHQnNGiPj2OWxQ,359
103
104
  vellum_ee/workflows/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
105
  vellum_ee/workflows/server/virtual_file_loader.py,sha256=7JphJcSO3H85qiC2DpFfBWjC3JjrbRmoynBC6KKHVsA,2710
105
106
  vellum_ee/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -114,7 +115,7 @@ vellum_ee/workflows/tests/local_workflow/display/__init__.py,sha256=xo75Uqb4aErO
114
115
  vellum_ee/workflows/tests/local_workflow/display/nodes/__init__.py,sha256=szW_mgOUriyZ6v1vlnevBgkzNi8g83-ihS98UOLHVcE,155
115
116
  vellum_ee/workflows/tests/local_workflow/display/nodes/final_output.py,sha256=Kv92TCREiZsB9531KZYaBIq83uHn7e_ECw_yAbD1qfk,1017
116
117
  vellum_ee/workflows/tests/local_workflow/display/nodes/templating_node.py,sha256=5cankEe1rDZlXKgILFSPbmN0tUZhIdmcFgz_AguXTJc,1229
117
- vellum_ee/workflows/tests/local_workflow/display/workflow.py,sha256=rYjUO0TN6GPCDldD4liWFPOLquJmw-sP4HYtyGspe08,2024
118
+ vellum_ee/workflows/tests/local_workflow/display/workflow.py,sha256=ZqOwUFaS6vQAOWRsAq02cno5ULXFKsnXFwWPMfqH8uw,1996
118
119
  vellum_ee/workflows/tests/local_workflow/inputs.py,sha256=4cgsZBoUbIY0Rs8gknC9yqxQ-sSoULclx_SAm1FT2RA,96
119
120
  vellum_ee/workflows/tests/local_workflow/metadata.json,sha256=rdu3h5qkFZiqhCAMxoyoWyMI0O8QALC5-URvSIW6F00,24
120
121
  vellum_ee/workflows/tests/local_workflow/nodes/__init__.py,sha256=1F6jxUpSKfPXPj4ZZKSbnX6Mg-VwF3euLJSZfGn6xkM,127
@@ -129,7 +130,7 @@ vellum/client/README.md,sha256=JkCJjmMZl4jrPj46pkmL9dpK4gSzQQmP5I7z4aME4LY,4749
129
130
  vellum/client/__init__.py,sha256=Z-JHK2jGxhtTtmkLeOaUGGJWIUNYGNVBLvUewC6lp6w,118148
130
131
  vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
131
132
  vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
132
- vellum/client/core/client_wrapper.py,sha256=KIJivfBpItYrCWMBe54yxwrVv0jkHzTimMkbw06mEAg,1869
133
+ vellum/client/core/client_wrapper.py,sha256=woJ1T678VkPNsh73oqH8PD5x3z8EX9S3qLVPszexkzc,1869
133
134
  vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
134
135
  vellum/client/core/file.py,sha256=X9IbmkZmB2bB_DpmZAO3crWdXagOakAyn6UCOCImCPg,2322
135
136
  vellum/client/core/http_client.py,sha256=R0pQpCppnEtxccGvXl4uJ76s7ro_65Fo_erlNNLp_AI,19228
@@ -145,14 +146,14 @@ vellum/client/errors/bad_request_error.py,sha256=_EbO8mWqN9kFZPvIap8qa1lL_EWkRcs
145
146
  vellum/client/errors/forbidden_error.py,sha256=QO1kKlhClAPES6zsEK7g9pglWnxn3KWaOCAawWOg6Aw,263
146
147
  vellum/client/errors/internal_server_error.py,sha256=8USCagXyJJ1MOm9snpcXIUt6eNXvrd_aq7Gfcu1vlOI,268
147
148
  vellum/client/errors/not_found_error.py,sha256=tBVCeBC8n3C811WHRj_n-hs3h8MqwR5gp0vLiobk7W8,262
148
- vellum/client/reference.md,sha256=iTxdizCeS4bP5BFv_sR6BUI0gzHA8cMkA9KHpQq0ZD4,88081
149
+ vellum/client/reference.md,sha256=Nue7qK61ewnH9QTLxLOm9GLGPdBRqiWz1PTerxBiDyI,89717
149
150
  vellum/client/resources/__init__.py,sha256=XgQao4rJxyYu71j64RFIsshz4op9GE8-i-C5GCv-KVE,1555
150
151
  vellum/client/resources/ad_hoc/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
151
- vellum/client/resources/ad_hoc/client.py,sha256=_liorv4AsoJ55kVu0a5oWB3Qeff0iUKXqoHEIyDWLxc,14173
152
+ vellum/client/resources/ad_hoc/client.py,sha256=93FXK-Wpvh72G8ji2__2Dmc5OYl9G5GRHiknyGIjeX4,25557
152
153
  vellum/client/resources/container_images/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
153
154
  vellum/client/resources/container_images/client.py,sha256=g8X3IkWFj43-sJMvirjDrh1-yjOFYV2C9xsGC20Xfjo,15003
154
155
  vellum/client/resources/deployments/__init__.py,sha256=m64MNuPx3qVazOnTNwOY8oEeDrAkNwMJvUEe5xoMDvs,239
155
- vellum/client/resources/deployments/client.py,sha256=ssXaHJXBxO_I8JLuijusDVWwsfYadTw3j7o41ICYtrY,38777
156
+ vellum/client/resources/deployments/client.py,sha256=_sK5DgxGTksPDDWONoOrNHpYcNyk6YuoFuwE9CKQm70,38745
156
157
  vellum/client/resources/deployments/types/__init__.py,sha256=29GVdoLOJsADSSSqZwb6CQPeEmPjkKrbsWfru1bemj8,321
157
158
  vellum/client/resources/deployments/types/deployments_list_request_status.py,sha256=CxlQD16KZXme7x31YYCe_3aAgEueutDTeJo5A4Au-aU,174
158
159
  vellum/client/resources/deployments/types/list_deployment_release_tags_request_source.py,sha256=hRGgWMYZL9uKCmD_2dU8-u9RCPUUGItpNn1tUY-NXKY,180
@@ -1538,7 +1539,7 @@ vellum/workflows/nodes/bases/__init__.py,sha256=cniHuz_RXdJ4TQgD8CBzoiKDiPxg62Er
1538
1539
  vellum/workflows/nodes/bases/base.py,sha256=eW-3RSkBgtuGY8x2nmbHYiUg_HXS5U57n3k6Fh-dJ9s,15330
1539
1540
  vellum/workflows/nodes/bases/base_adornment_node.py,sha256=afMwJLHK2Ke7sBpceVLnNdZMlU2O-6UgyG7lBt9SAQ8,3039
1540
1541
  vellum/workflows/nodes/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1541
- vellum/workflows/nodes/bases/tests/test_base_node.py,sha256=4PGjzFh4ZkvffOn-7xhqzsqfdLsYe_2IGqn002TL4LE,7099
1542
+ vellum/workflows/nodes/bases/tests/test_base_node.py,sha256=6J85q-vtfG-NHzCndMKLk5_sEEDiI52sTGaxefcUCOU,7892
1542
1543
  vellum/workflows/nodes/core/__init__.py,sha256=5zDMCmyt1v0HTJzlUBwq3U9L825yZGZhT9JL18-mRR4,455
1543
1544
  vellum/workflows/nodes/core/error_node/__init__.py,sha256=g7RRnlHhqu4qByfLjBwCunmgGA8dI5gNsjS3h6TwlSI,60
1544
1545
  vellum/workflows/nodes/core/error_node/node.py,sha256=MFHU5vITYSK-L9CuMZ49In2ZeNLWnhZD0f8r5dWvb5Y,1270
@@ -1558,7 +1559,7 @@ vellum/workflows/nodes/core/templating_node/__init__.py,sha256=GmyuYo81_A1_Bz6id
1558
1559
  vellum/workflows/nodes/core/templating_node/node.py,sha256=iqBmr2i-f-BqhisNQJiDfewjol0ur7-XpupLStyMJsg,3731
1559
1560
  vellum/workflows/nodes/core/templating_node/tests/test_templating_node.py,sha256=nXkgGDBg4wP36NwykdMEVWwx_xjv8oGT2rYkwuCB_VU,10075
1560
1561
  vellum/workflows/nodes/core/try_node/__init__.py,sha256=JVD4DrldTIqFQQFrubs9KtWCCc0YCAc7Fzol5ZWIWeM,56
1561
- vellum/workflows/nodes/core/try_node/node.py,sha256=2r2I70j30IyZPvn3Q3zP2VgLbx3WQ1DdOr8NUlXjcq0,4429
1562
+ vellum/workflows/nodes/core/try_node/node.py,sha256=XdyOvlwQ3m4h0-_WNtaBl2t_CdlzPXclulkLOtUcX3E,4388
1562
1563
  vellum/workflows/nodes/core/try_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1563
1564
  vellum/workflows/nodes/core/try_node/tests/test_node.py,sha256=h6eUc3SggvhzBWlOD0PrPUlkoCSQHwjqYn81VkxSIxU,4948
1564
1565
  vellum/workflows/nodes/displayable/__init__.py,sha256=6F_4DlSwvHuilWnIalp8iDjjDXl0Nmz4QzJV2PYe5RI,1023
@@ -1629,13 +1630,16 @@ vellum/workflows/nodes/experimental/README.md,sha256=eF6DfIL8t-HbF9-mcofOMymKrra
1629
1630
  vellum/workflows/nodes/experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1630
1631
  vellum/workflows/nodes/experimental/openai_chat_completion_node/__init__.py,sha256=lsyD9laR9p7kx5-BXGH2gUTM242UhKy8SMV0SR6S2iE,90
1631
1632
  vellum/workflows/nodes/experimental/openai_chat_completion_node/node.py,sha256=cKI2Ls25L-JVt4z4a2ozQa-YBeVy21Z7BQ32Sj7iBPE,10460
1633
+ vellum/workflows/nodes/experimental/tool_calling_node/__init__.py,sha256=S7OzT3I4cyOU5Beoz87nPwCejCMP2FsHBFL8OcVmxJ4,118
1634
+ vellum/workflows/nodes/experimental/tool_calling_node/node.py,sha256=w73v2pfpqFaTOYbtHkH7nFuGgqQebLO6dr_Mxn1n7Dc,4848
1635
+ vellum/workflows/nodes/experimental/tool_calling_node/utils.py,sha256=hwJ1GjoNOEWoCdT1R0b6gVRAAGWGTUlKutTgBF7GRP4,4664
1632
1636
  vellum/workflows/nodes/mocks.py,sha256=a1FjWEIocseMfjzM-i8DNozpUsaW0IONRpZmXBoWlyc,10455
1633
1637
  vellum/workflows/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1634
1638
  vellum/workflows/nodes/tests/test_mocks.py,sha256=mfPvrs75PKcsNsbJLQAN6PDFoVqs9TmQxpdyFKDdO60,7837
1635
1639
  vellum/workflows/nodes/tests/test_utils.py,sha256=qNB6ApIsnFtE_9HDaEah9KD-zX8e10FhDixewS1uRcc,5199
1636
- vellum/workflows/nodes/utils.py,sha256=Tc3TAmAytb-gi30BAyzGY7DG0uS1_7KTGYdjrvKUSt0,8362
1640
+ vellum/workflows/nodes/utils.py,sha256=wVn68jhAQ9ev9LV3c0XEH276CiqcY9-fVgUFY_K9izQ,8409
1637
1641
  vellum/workflows/outputs/__init__.py,sha256=AyZ4pRh_ACQIGvkf0byJO46EDnSix1ZCAXfvh-ms1QE,94
1638
- vellum/workflows/outputs/base.py,sha256=jOvSr44GEmtldits-bysJoxme7js6aN_LkdV-PpA7Dk,8631
1642
+ vellum/workflows/outputs/base.py,sha256=1OGHqBJVk7i8cW8uewFWOhIjuMlRRpzCDrGE30ZwDjw,8763
1639
1643
  vellum/workflows/ports/__init__.py,sha256=bZuMt-R7z5bKwpu4uPW7LlJeePOQWmCcDSXe5frUY5g,101
1640
1644
  vellum/workflows/ports/node_ports.py,sha256=g4A-8iUAvEJSkaWppbvzAR8XU02R9U-qLN4rP2Kq4Aw,2743
1641
1645
  vellum/workflows/ports/port.py,sha256=eI2SOZPZ5rsC3jMsxW6Rbn0NpaYQsrR7AapiIbbiy8Q,3635
@@ -1648,7 +1652,7 @@ vellum/workflows/references/external_input.py,sha256=c_4SojTpykCSbGS1Pjmx9FfquyY
1648
1652
  vellum/workflows/references/input.py,sha256=3INu-TLTi4dziWmva6LO3WvgDlPzsjayUx61cVvqLJA,325
1649
1653
  vellum/workflows/references/lazy.py,sha256=jgUYmgt-yAybzPf_R-74MzdU8VuNwMYI8EQqrj9lVR0,2948
1650
1654
  vellum/workflows/references/node.py,sha256=LP854wDVs-9I_aZ7-nkbwXqL2H7W2_3LED2e9FixNS8,1418
1651
- vellum/workflows/references/output.py,sha256=-g97wkZDf-6_l_-NM4C_8v1VBt2c7NCPhtrG2lBLKSc,2808
1655
+ vellum/workflows/references/output.py,sha256=QWrqLGpeo6mFxC_fKmL3LHIfrcDD9SzOhQdHvG99I9Y,3379
1652
1656
  vellum/workflows/references/state_value.py,sha256=bInUF0A3Pt4-zhA0f6LdSuyv8tz7n5QRkHAEn4gsmqI,711
1653
1657
  vellum/workflows/references/tests/test_lazy.py,sha256=0s50-LizMTlSTBQahpK0fg_xqCucA8YTp6QmIMqPvMk,919
1654
1658
  vellum/workflows/references/vellum_secret.py,sha256=Od4d19a5yletWMqNfJR5d_mZQUkVcFzj29mE-T9J7yE,480
@@ -1659,12 +1663,12 @@ vellum/workflows/runner/__init__.py,sha256=i1iG5sAhtpdsrlvwgH6B-m49JsINkiWyPWs8v
1659
1663
  vellum/workflows/runner/runner.py,sha256=1ozidWAFecR7nfpj_Uw33SBGJVZY54JyU0AA3wySqaA,32826
1660
1664
  vellum/workflows/sandbox.py,sha256=GVJzVjMuYzOBnSrboB0_6MMRZWBluAyQ2o7syeaeBd0,2235
1661
1665
  vellum/workflows/state/__init__.py,sha256=yUUdR-_Vl7UiixNDYQZ-GEM_kJI9dnOia75TtuNEsnE,60
1662
- vellum/workflows/state/base.py,sha256=Rj4UWh_YfPNZ4ISGv5ltVf8s0zdu4yGXhwYwEhO1Wf4,21353
1666
+ vellum/workflows/state/base.py,sha256=ZXDmVafs6sExcbx1azrZjEGQsmuY68mSRWfI7t2PT4c,22330
1663
1667
  vellum/workflows/state/context.py,sha256=KOAI1wEGn8dGmhmAemJaf4SZbitP3jpIBcwKfznQaRE,3076
1664
1668
  vellum/workflows/state/encoder.py,sha256=TnOQojc5lTQ83g9QbpA4UCqShJvutmTMxbpKt-9gNe4,1911
1665
1669
  vellum/workflows/state/store.py,sha256=uVe-oN73KwGV6M6YLhwZMMUQhzTQomsVfVnb8V91gVo,1147
1666
1670
  vellum/workflows/state/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1667
- vellum/workflows/state/tests/test_state.py,sha256=hkxaGBfsbWyzSfMM-hfFktMQEFI3kIdfm5a4XQwk-Z8,6684
1671
+ vellum/workflows/state/tests/test_state.py,sha256=YOiC9qZAzkdiqb7nRarNWeDwxo7xHv3y3czlHl81ezg,6741
1668
1672
  vellum/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1669
1673
  vellum/workflows/tests/test_sandbox.py,sha256=JKwaluI-lODQo7Ek9sjDstjL_WTdSqUlVik6ZVTfVOA,1826
1670
1674
  vellum/workflows/tests/test_undefined.py,sha256=zMCVliCXVNLrlC6hEGyOWDnQADJ2g83yc5FIM33zuo8,353
@@ -1672,7 +1676,7 @@ vellum/workflows/types/__init__.py,sha256=KxUTMBGzuRCfiMqzzsykOeVvrrkaZmTTo1a7SL
1672
1676
  vellum/workflows/types/core.py,sha256=kMQremh_I8egXpiKmtMQbB6e3OczAWiRnnTq5V6xlD0,928
1673
1677
  vellum/workflows/types/definition.py,sha256=z81CL_u0FJol-9yUIqoXNTYAARtU8x__c6s-f4rb5c8,2335
1674
1678
  vellum/workflows/types/generics.py,sha256=tKXz0LwWJGKw1YGudyl9_yFDrRgU6yYV1yJV1Zv-LTw,1430
1675
- vellum/workflows/types/stack.py,sha256=RDSGLkcV612ge8UuAH9TZiEGXxJt0Av2-H5rfzrTVVI,1014
1679
+ vellum/workflows/types/stack.py,sha256=h7NE0vXR7l9DevFBIzIAk1Zh59K-kECQtDTKOUunwMY,1314
1676
1680
  vellum/workflows/types/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1677
1681
  vellum/workflows/types/tests/test_utils.py,sha256=y2bj4O8-ykPRRRocdD98NdnQz6ydSCoMBp6rECPPqE8,2536
1678
1682
  vellum/workflows/types/utils.py,sha256=mSlcgIr8q_qMCtSCdPxcduRntL_5hk4ptFGq3K0EVgw,5801
@@ -1688,13 +1692,13 @@ vellum/workflows/utils/uuids.py,sha256=DFzPv9RCvsKhvdTEIQyfSek2A31D6S_QcmeLPbgrg
1688
1692
  vellum/workflows/utils/vellum_variables.py,sha256=UiGlUh0a8vel2FbW3w-xbHxSv_jNutkDdqMVtP_b42A,3385
1689
1693
  vellum/workflows/vellum_client.py,sha256=GxOy3dX6A04xiY69vPv1S4YGuQ_TMxwHi6WRMimQBBE,762
1690
1694
  vellum/workflows/workflows/__init__.py,sha256=KY45TqvavCCvXIkyCFMEc0dc6jTMOUci93U2DUrlZYc,66
1691
- vellum/workflows/workflows/base.py,sha256=X2X2-v_kN9dqkkhHfkPFpZ3k-ldURBF3CBKmi8js7A8,23392
1695
+ vellum/workflows/workflows/base.py,sha256=j9o6eXueXEwsueNMlZwYP4HhZPQjMgXIgHcRqWHNaDI,23584
1692
1696
  vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnadGsrSZGa7t7LpJA,2008
1693
1697
  vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1694
- vellum/workflows/workflows/tests/test_base_workflow.py,sha256=rBLsUsoLdRRQ-JBEfUivV9qVCjdqaiDsCPNyHvqz9fc,17361
1698
+ vellum/workflows/workflows/tests/test_base_workflow.py,sha256=8P5YIsNMO78_CR1NNK6wkEdkMB4b3Q_Ni1qxh78OnHo,20481
1695
1699
  vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
1696
- vellum_ai-0.14.39.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1697
- vellum_ai-0.14.39.dist-info/METADATA,sha256=j--ftKNWYCJ3_QoC58vOMR75cDgcc0XqjmkFgo0Sp90,5484
1698
- vellum_ai-0.14.39.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1699
- vellum_ai-0.14.39.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1700
- vellum_ai-0.14.39.dist-info/RECORD,,
1700
+ vellum_ai-0.14.41.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1701
+ vellum_ai-0.14.41.dist-info/METADATA,sha256=KZufZ6Z5vdimywz8zeA6QW6OMaIa82TopA1biRjbVqE,5484
1702
+ vellum_ai-0.14.41.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1703
+ vellum_ai-0.14.41.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1704
+ vellum_ai-0.14.41.dist-info/RECORD,,
vellum_cli/push.py CHANGED
@@ -17,7 +17,6 @@ from vellum.workflows.workflows.base import BaseWorkflow
17
17
  from vellum_cli.config import DEFAULT_WORKSPACE_CONFIG, WorkflowConfig, WorkflowDeploymentConfig, load_vellum_cli_config
18
18
  from vellum_cli.logger import load_cli_logger
19
19
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
20
- from vellum_ee.workflows.display.workflows.vellum_workflow_display import VellumWorkflowDisplay
21
20
 
22
21
 
23
22
  def push_command(
@@ -105,7 +104,6 @@ def push_command(
105
104
  # https://app.shortcut.com/vellum/story/5585
106
105
  workflow = BaseWorkflow.load_from_module(workflow_config.module)
107
106
  workflow_display = get_workflow_display(
108
- base_display_class=VellumWorkflowDisplay,
109
107
  workflow_class=workflow,
110
108
  dry_run=dry_run or False,
111
109
  )
@@ -1,10 +1,12 @@
1
1
  from dataclasses import dataclass, field
2
2
  from uuid import UUID
3
- from typing import Optional
3
+ from typing import Optional, Type
4
4
 
5
5
  from pydantic import Field
6
6
 
7
7
  from vellum.client.core.pydantic_utilities import UniversalBaseModel
8
+ from vellum.workflows.utils.uuids import uuid4_from_hash
9
+ from vellum.workflows.workflows.base import BaseWorkflow
8
10
  from vellum_ee.workflows.display.editor.types import NodeDisplayData
9
11
 
10
12
 
@@ -25,6 +27,17 @@ class WorkflowMetaDisplay:
25
27
  entrypoint_node_display: NodeDisplayData = Field(default_factory=NodeDisplayData)
26
28
  display_data: WorkflowDisplayData = field(default_factory=WorkflowDisplayData)
27
29
 
30
+ @classmethod
31
+ def get_default(cls, workflow: Type[BaseWorkflow]) -> "WorkflowMetaDisplay":
32
+ entrypoint_node_id = uuid4_from_hash(f"{workflow.__id__}|entrypoint_node_id")
33
+ entrypoint_node_source_handle_id = uuid4_from_hash(f"{workflow.__id__}|entrypoint_node_source_handle_id")
34
+
35
+ return WorkflowMetaDisplay(
36
+ entrypoint_node_id=entrypoint_node_id,
37
+ entrypoint_node_source_handle_id=entrypoint_node_source_handle_id,
38
+ entrypoint_node_display=NodeDisplayData(),
39
+ )
40
+
28
41
 
29
42
  @dataclass
30
43
  class WorkflowMetaDisplayOverrides(WorkflowMetaDisplay):
@@ -21,18 +21,35 @@ from vellum.client.types.code_resource_definition import CodeResourceDefinition
21
21
  from vellum.workflows import BaseWorkflow
22
22
  from vellum.workflows.constants import undefined
23
23
  from vellum.workflows.descriptors.base import BaseDescriptor
24
+ from vellum.workflows.expressions.accessor import AccessorExpression
25
+ from vellum.workflows.expressions.and_ import AndExpression
26
+ from vellum.workflows.expressions.begins_with import BeginsWithExpression
24
27
  from vellum.workflows.expressions.between import BetweenExpression
28
+ from vellum.workflows.expressions.coalesce_expression import CoalesceExpression
29
+ from vellum.workflows.expressions.contains import ContainsExpression
30
+ from vellum.workflows.expressions.does_not_begin_with import DoesNotBeginWithExpression
31
+ from vellum.workflows.expressions.does_not_contain import DoesNotContainExpression
32
+ from vellum.workflows.expressions.does_not_end_with import DoesNotEndWithExpression
33
+ from vellum.workflows.expressions.ends_with import EndsWithExpression
34
+ from vellum.workflows.expressions.equals import EqualsExpression
35
+ from vellum.workflows.expressions.greater_than import GreaterThanExpression
36
+ from vellum.workflows.expressions.greater_than_or_equal_to import GreaterThanOrEqualToExpression
37
+ from vellum.workflows.expressions.in_ import InExpression
25
38
  from vellum.workflows.expressions.is_nil import IsNilExpression
26
39
  from vellum.workflows.expressions.is_not_nil import IsNotNilExpression
27
40
  from vellum.workflows.expressions.is_not_null import IsNotNullExpression
28
41
  from vellum.workflows.expressions.is_not_undefined import IsNotUndefinedExpression
29
42
  from vellum.workflows.expressions.is_null import IsNullExpression
30
43
  from vellum.workflows.expressions.is_undefined import IsUndefinedExpression
44
+ from vellum.workflows.expressions.less_than import LessThanExpression
45
+ from vellum.workflows.expressions.less_than_or_equal_to import LessThanOrEqualToExpression
31
46
  from vellum.workflows.expressions.not_between import NotBetweenExpression
47
+ from vellum.workflows.expressions.not_in import NotInExpression
48
+ from vellum.workflows.expressions.or_ import OrExpression
32
49
  from vellum.workflows.expressions.parse_json import ParseJsonExpression
33
50
  from vellum.workflows.nodes.bases.base import BaseNode
34
51
  from vellum.workflows.nodes.displayable.bases.utils import primitive_to_vellum_value
35
- from vellum.workflows.nodes.utils import get_wrapped_node
52
+ from vellum.workflows.nodes.utils import get_unadorned_node, get_wrapped_node
36
53
  from vellum.workflows.ports import Port
37
54
  from vellum.workflows.references import OutputReference
38
55
  from vellum.workflows.references.constant import ConstantValueReference
@@ -47,10 +64,12 @@ from vellum.workflows.types.utils import get_original_base
47
64
  from vellum.workflows.utils.names import pascal_to_title_case
48
65
  from vellum.workflows.utils.uuids import uuid4_from_hash
49
66
  from vellum.workflows.utils.vellum_variables import primitive_type_to_vellum_variable_type
50
- from vellum_ee.workflows.display.editor.types import NodeDisplayData
67
+ from vellum_ee.workflows.display.editor.types import NodeDisplayComment, NodeDisplayData
51
68
  from vellum_ee.workflows.display.nodes.get_node_display_class import get_node_display_class
52
69
  from vellum_ee.workflows.display.nodes.types import NodeOutputDisplay, PortDisplay, PortDisplayOverrides
70
+ from vellum_ee.workflows.display.utils.exceptions import UnsupportedSerializationException
53
71
  from vellum_ee.workflows.display.utils.expressions import get_child_descriptor
72
+ from vellum_ee.workflows.display.utils.registry import register_node_display_class
54
73
  from vellum_ee.workflows.display.utils.vellum import convert_descriptor_to_operator
55
74
 
56
75
  if TYPE_CHECKING:
@@ -121,9 +140,6 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
121
140
  # Once all nodes are Generic Nodes, we may replace this with a trigger_id or trigger attribute
122
141
  target_handle_id: ClassVar[Optional[UUID]] = None
123
142
 
124
- # Used to store the mapping between node types and their display classes
125
- _node_display_registry: Dict[Type[NodeType], Type["BaseNodeDisplay"]] = {}
126
-
127
143
  def serialize(self, display_context: "WorkflowDisplayContext", **kwargs: Any) -> JsonObject:
128
144
  node = self._node
129
145
  node_id = self.node_id
@@ -149,7 +165,7 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
149
165
  adornments = kwargs.get("adornments", None)
150
166
  wrapped_node = get_wrapped_node(node)
151
167
  if wrapped_node is not None:
152
- display_class = get_node_display_class(BaseNodeDisplay, wrapped_node)
168
+ display_class = get_node_display_class(wrapped_node)
153
169
 
154
170
  adornment: JsonObject = {
155
171
  "id": str(node_id),
@@ -207,7 +223,7 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
207
223
  "id": str(node_id),
208
224
  "label": node.__qualname__,
209
225
  "type": "GENERIC",
210
- "display_data": self._get_generic_node_display_data().dict(),
226
+ "display_data": self.get_display_data().dict(),
211
227
  "base": self.get_base().dict(),
212
228
  "definition": self.get_definition().dict(),
213
229
  "trigger": {
@@ -260,6 +276,13 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
260
276
 
261
277
  return PortDisplay(id=port_id, node_id=self.node_id)
262
278
 
279
+ def get_source_handle_id(self, port_displays: Dict[Port, PortDisplay]) -> UUID:
280
+ unadorned_node = get_unadorned_node(self._node)
281
+ default_port = unadorned_node.Ports.default
282
+
283
+ default_port_display = port_displays[default_port]
284
+ return default_port_display.id
285
+
263
286
  def get_trigger_id(self) -> UUID:
264
287
  return self.get_target_handle_id()
265
288
 
@@ -280,10 +303,6 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
280
303
 
281
304
  return self.get_target_handle_id()
282
305
 
283
- @classmethod
284
- def get_from_node_display_registry(cls, node_class: Type[NodeType]) -> Optional[Type["BaseNodeDisplay"]]:
285
- return cls._node_display_registry.get(node_class)
286
-
287
306
  @cached_property
288
307
  def node_id(self) -> UUID:
289
308
  """Can be overridden as a class attribute to specify a custom node id."""
@@ -344,18 +363,39 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
344
363
 
345
364
  def __init_subclass__(cls, **kwargs: Any) -> None:
346
365
  super().__init_subclass__(**kwargs)
347
- if not cls._node_display_registry:
348
- cls._node_display_registry[BaseNode] = BaseNodeDisplay
349
366
 
350
367
  node_class = cls.infer_node_class()
351
368
  if node_class is BaseNode:
352
369
  return
353
370
 
354
- cls._node_display_registry[node_class] = cls
371
+ register_node_display_class(node_class=node_class, node_display_class=cls)
355
372
 
356
- def _get_generic_node_display_data(self) -> NodeDisplayData:
373
+ def get_display_data(self) -> NodeDisplayData:
357
374
  explicit_value = self._get_explicit_node_display_attr("display_data", NodeDisplayData)
358
- return explicit_value if explicit_value else NodeDisplayData()
375
+ docstring = self._node.__doc__
376
+
377
+ if explicit_value and explicit_value.comment and docstring:
378
+ comment = (
379
+ NodeDisplayComment(value=docstring, expanded=explicit_value.comment.expanded)
380
+ if explicit_value.comment.expanded
381
+ else NodeDisplayComment(value=docstring)
382
+ )
383
+ return NodeDisplayData(
384
+ position=explicit_value.position,
385
+ width=explicit_value.width,
386
+ height=explicit_value.height,
387
+ comment=comment,
388
+ )
389
+
390
+ if explicit_value:
391
+ return explicit_value
392
+
393
+ if docstring:
394
+ return NodeDisplayData(
395
+ comment=NodeDisplayComment(value=docstring),
396
+ )
397
+
398
+ return NodeDisplayData()
359
399
 
360
400
  def serialize_condition(self, display_context: "WorkflowDisplayContext", condition: BaseDescriptor) -> JsonObject:
361
401
  if isinstance(
@@ -388,9 +428,29 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
388
428
  "lhs": lhs,
389
429
  "rhs": rhs,
390
430
  }
391
- else:
392
- lhs = self.serialize_value(display_context, condition._lhs) # type: ignore[attr-defined]
393
- rhs = self.serialize_value(display_context, condition._rhs) # type: ignore[attr-defined]
431
+ elif isinstance(
432
+ condition,
433
+ (
434
+ AndExpression,
435
+ BeginsWithExpression,
436
+ CoalesceExpression,
437
+ ContainsExpression,
438
+ DoesNotBeginWithExpression,
439
+ DoesNotContainExpression,
440
+ DoesNotEndWithExpression,
441
+ EndsWithExpression,
442
+ EqualsExpression,
443
+ GreaterThanExpression,
444
+ GreaterThanOrEqualToExpression,
445
+ InExpression,
446
+ LessThanExpression,
447
+ LessThanOrEqualToExpression,
448
+ NotInExpression,
449
+ OrExpression,
450
+ ),
451
+ ):
452
+ lhs = self.serialize_value(display_context, condition._lhs)
453
+ rhs = self.serialize_value(display_context, condition._rhs)
394
454
 
395
455
  return {
396
456
  "type": "BINARY_EXPRESSION",
@@ -398,6 +458,15 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
398
458
  "operator": convert_descriptor_to_operator(condition),
399
459
  "rhs": rhs,
400
460
  }
461
+ elif isinstance(condition, AccessorExpression):
462
+ return {
463
+ "type": "BINARY_EXPRESSION",
464
+ "lhs": self.serialize_value(display_context, condition._base),
465
+ "operator": "accessField",
466
+ "rhs": self.serialize_value(display_context, condition._field),
467
+ }
468
+
469
+ raise UnsupportedSerializationException(f"Unsupported condition type: {condition.__class__.__name__}")
401
470
 
402
471
  def serialize_value(self, display_context: "WorkflowDisplayContext", value: Any) -> JsonObject:
403
472
  if isinstance(value, ConstantValueReference):
@@ -458,3 +527,6 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
458
527
  # If it's not any of the references we know about,
459
528
  # then try to serialize it as a nested value
460
529
  return self.serialize_condition(display_context, value)
530
+
531
+
532
+ register_node_display_class(node_class=BaseNode, node_display_class=BaseNodeDisplay)
@@ -1,33 +1,27 @@
1
1
  import types
2
2
  from uuid import UUID
3
- from typing import TYPE_CHECKING, Any, Dict, Optional, Type
3
+ from typing import TYPE_CHECKING, Any, Dict, Generic, Type, TypeVar
4
4
 
5
5
  from vellum.workflows.descriptors.base import BaseDescriptor
6
6
  from vellum.workflows.types.generics import NodeType
7
7
  from vellum.workflows.utils.uuids import uuid4_from_hash
8
+ from vellum_ee.workflows.display.utils.registry import get_from_node_display_registry
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
11
12
 
12
13
 
13
- def get_node_display_class(
14
- base_class: Type["BaseNodeDisplay"], node_class: Type[NodeType], root_node_class: Optional[Type[NodeType]] = None
15
- ) -> Type["BaseNodeDisplay"]:
16
- node_display_class = base_class.get_from_node_display_registry(node_class)
14
+ def get_node_display_class(node_class: Type[NodeType]) -> Type["BaseNodeDisplay"]:
15
+ node_display_class = get_from_node_display_registry(node_class)
17
16
  if node_display_class:
18
- if not issubclass(node_display_class, base_class):
19
- raise TypeError(
20
- f"Expected to find a subclass of '{base_class.__name__}' for node class '{node_class.__name__}'"
21
- )
22
-
23
17
  return node_display_class
24
18
 
25
- base_node_display_class = get_node_display_class(
26
- base_class, node_class.__bases__[0], node_class if root_node_class is None else root_node_class
27
- )
19
+ base_node_display_class = get_node_display_class(node_class.__bases__[0])
28
20
 
21
+ # mypy gets upset at dynamic TypeVar's, but it's technically allowed by python
22
+ _NodeClassType = TypeVar(f"_{node_class.__name__}Type", bound=node_class) # type: ignore[misc]
29
23
  # `base_node_display_class` is always a Generic class, so it's safe to index into it
30
- NodeDisplayBaseClass = base_node_display_class[node_class] # type: ignore[index]
24
+ NodeDisplayBaseClass = base_node_display_class[_NodeClassType] # type: ignore[index]
31
25
 
32
26
  def _get_node_input_ids_by_ref(path: str, inst: Any):
33
27
  if isinstance(inst, dict):
@@ -51,7 +45,7 @@ def get_node_display_class(
51
45
 
52
46
  NodeDisplayClass = types.new_class(
53
47
  f"{node_class.__name__}Display",
54
- bases=(NodeDisplayBaseClass,),
48
+ bases=(NodeDisplayBaseClass, Generic[_NodeClassType]),
55
49
  exec_body=exec_body,
56
50
  )
57
51