vellum-ai 0.14.73__py3-none-any.whl → 0.14.75__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 (33) hide show
  1. vellum/client/core/client_wrapper.py +1 -1
  2. vellum/client/core/serialization.py +0 -1
  3. vellum/client/reference.md +9 -1
  4. vellum/client/resources/prompts/client.py +16 -4
  5. vellum/client/types/secret_type_enum.py +3 -1
  6. vellum/workflows/nodes/bases/base.py +0 -15
  7. vellum/workflows/nodes/core/map_node/tests/test_node.py +54 -0
  8. vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py +2 -2
  9. vellum/workflows/nodes/displayable/bases/utils.py +2 -0
  10. vellum/workflows/nodes/experimental/tool_calling_node/node.py +5 -1
  11. vellum/workflows/nodes/experimental/tool_calling_node/tests/test_node.py +13 -0
  12. vellum/workflows/nodes/experimental/tool_calling_node/utils.py +14 -4
  13. vellum/workflows/outputs/base.py +26 -2
  14. vellum/workflows/state/encoder.py +2 -0
  15. vellum/workflows/types/definition.py +1 -1
  16. vellum/workflows/types/generics.py +5 -0
  17. vellum/workflows/utils/functions.py +3 -3
  18. vellum/workflows/utils/tests/test_functions.py +7 -7
  19. {vellum_ai-0.14.73.dist-info → vellum_ai-0.14.75.dist-info}/METADATA +1 -1
  20. {vellum_ai-0.14.73.dist-info → vellum_ai-0.14.75.dist-info}/RECORD +33 -32
  21. vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py +36 -7
  22. vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py +102 -0
  23. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +90 -0
  24. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py +117 -0
  25. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py +7 -0
  26. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py +7 -0
  27. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_workflow_deployment_serialization.py +62 -0
  28. vellum_ee/workflows/display/utils/expressions.py +33 -2
  29. vellum_ee/workflows/display/workflows/base_workflow_display.py +20 -6
  30. vellum_ee/workflows/tests/test_display_meta.py +41 -0
  31. {vellum_ai-0.14.73.dist-info → vellum_ai-0.14.75.dist-info}/LICENSE +0 -0
  32. {vellum_ai-0.14.73.dist-info → vellum_ai-0.14.75.dist-info}/WHEEL +0 -0
  33. {vellum_ai-0.14.73.dist-info → vellum_ai-0.14.75.dist-info}/entry_points.txt +0 -0
@@ -41,7 +41,7 @@ vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=9GtbvSJUNF62
41
41
  vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=YhMsi2TG1zSR8E7IpxzzSncOyVLcvqTuGa3mr4RqHd8,2364
42
42
  vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=zo-nalsuayMqeb2GwR2OB9SFK3y2U5aG-rtwrsjdasQ,3089
43
43
  vellum_ee/workflows/display/nodes/vellum/guardrail_node.py,sha256=IniO5KvO0Rw9zghFg3RFvbXBTv6Zi1iuQhaA1DLazqU,2331
44
- vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=1ydd1-SXCuJdPDquMrvV5JXIIhf7eBdvY2dXqDz_r5o,11035
44
+ vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=O4crEYQYJ6XGiN7pEQKxJCGGUQCQKf3rSjKYE4D-iCY,12079
45
45
  vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py,sha256=f7MeoxgKrdyb1dSJsvdDtZPlp1J2Pa4njPvN3qHVktA,6028
46
46
  vellum_ee/workflows/display/nodes/vellum/map_node.py,sha256=uaZ2wcZR1J9C9iI0QWAsgNK9IlcuCz1808oxXmiYsLY,3908
47
47
  vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=RTP_raQWL8ZKoRKLpxLfpyXzw61TZeTCkTuM1uRLIkI,3274
@@ -57,7 +57,7 @@ vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py,sha256=540FoWM
57
57
  vellum_ee/workflows/display/nodes/vellum/tests/test_inline_subworkflow_node.py,sha256=SKOYan-dxY4gsO0R4JyQUyWrABHBN8XImKw9Eeo4wGo,3535
58
58
  vellum_ee/workflows/display/nodes/vellum/tests/test_note_node.py,sha256=uiMB0cOxKZzos7YKnj4ef4DFa2bOvZJWIv-hfbUV6Go,1218
59
59
  vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_deployment_node.py,sha256=G-qJyTNJkpqJiEZ3kCJl86CXJINLeFyf2lM0bQHCCOs,3822
60
- vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py,sha256=TtzUj3Zk3ZhwtXE_WyctCC-CmcLB1RxntyF7u-a3i6I,10077
60
+ vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py,sha256=h3rXIfB349w11cMgNpqEWCI3ucTsTb30cWskXN8FoV0,14053
61
61
  vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py,sha256=h93ysolmbo2viisyhRnXKHPxiDK0I_dSAbYoHFYIoO4,1953
62
62
  vellum_ee/workflows/display/nodes/vellum/tests/test_search_node.py,sha256=KvByxgbUkVyfPIVxTUBUk6a92JiJMi8eReZWxzfPExU,3864
63
63
  vellum_ee/workflows/display/nodes/vellum/tests/test_subworkflow_deployment_node.py,sha256=BUzHJgjdWnPeZxjFjHfDBKnbFjYjnbXPjc-1hne1B2Y,3965
@@ -73,7 +73,7 @@ vellum_ee/workflows/display/tests/workflow_serialization/__init__.py,sha256=47DE
73
73
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
74
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=XOQDDRiG46etxTC7-_RUEutoNumXc02fo7oho4GYM0c,1900
75
75
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=IuoR3QrsnshZSb1ggLBvQJnTw244lHBo70KmKLd0fwk,12852
76
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=-I0LvhaLZUrdjSzb232Jd1Qp79mVGw8-8vjLOf33tIU,22066
76
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=DFNp_iUxlyE-zCJBH9ab3e1jQEK-NSE9M2CQd4NCjY8,24853
77
77
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py,sha256=s6_mnk0pkztU59wYpSfOFpMhAJaRjmyfxM6WJGtnD4Y,6456
78
78
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py,sha256=PkSgghJDz0fpDB72HHPjLjo8LkZk-HpUkCQzRLX-iVw,40611
79
79
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py,sha256=dsJr8I9AdPwMOGszirfNDzZP2Ychd94aAKuPXAzknMk,4632
@@ -84,7 +84,7 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_stat
84
84
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=w1BYEZXIMjWmcKGQXzhelHnKFlEAXmsgjkI9fcgqKXA,5850
85
85
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=-T0cd2jx1bC0ZNtAESF78fnYD_0nOqo8zMMLwRHUTRM,6227
86
86
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py,sha256=PZ9Yec8D6e9wM2kh5eWtNvK5BghTf1RdvoSW5_pw3FM,7384
87
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py,sha256=V1HtvMavVd8KkSow5D8gVPGoDNw9XGQ_7_rCZ90EaxM,18436
87
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py,sha256=tljn-ueIMEW3j2q6Ni9O852sdQMjut05ox4paBeJjm8,23714
88
88
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=3Djct7lIr2TPW-wDd_t6eoNdsE0hBOj9OwKWRroXMUo,21659
89
89
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=91u9FWLErrNGfUkZ22ifk6IazGtaYoDFbZYjhxEESgI,16579
90
90
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=rtkAQw5awOFX3pWh0qz3f766-tTnPhToGsXVSHO4M4U,8352
@@ -93,8 +93,9 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_
93
93
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py,sha256=XWrhHg_acLsRHwjstBAii9Pmes9oXFtAUWSAVF1oSBc,11225
94
94
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py,sha256=V8b6gKghLlO7PJI8xeNdnfn8aII0W_IFQvSQBQM62UQ,7721
95
95
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=hDWtKXmGI1CKhTwTNqpu_d5RkE5n7SolMLtgd87KqTI,3856
96
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py,sha256=cBkVVCfXKhPYV9azlGYdNX1yD3V39D6hcgqiFLT1JjI,25274
97
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256=FgtOfaI_9rnypCG4aSt5UGDrpBdKlCp6-QV21MZNsHw,8731
96
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py,sha256=6q-lTGMp5HbQba3NsHUFSit8_zEBxIVPGE8yCw4SVx0,25720
97
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256=36-fpwj53JcRmo7RuHrsS6ZjJ3q4j8BC1wuKruBjIt8,9137
98
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_workflow_deployment_serialization.py,sha256=zlb0Kfg1zqJsz1tD_1O-hkSKhV4-gfYI6AkK4-Yjk7U,2315
98
99
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=pLCyMScV88DTBXRH7jXaXOEA1GBq8NIipCUFwIAWnwI,2771
99
100
  vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=J4ouI8KxbMfxQP2Zq_9cWMGYgbjCWmKzjCJEtnSJb0I,5829
100
101
  vellum_ee/workflows/display/tests/workflow_serialization/test_workflow_input_parameterization_error.py,sha256=vAdmn3YTBDpo55znbydQxsgg9ASqHcvsUPwiBR_7wfo,1461
@@ -102,14 +103,14 @@ vellum_ee/workflows/display/types.py,sha256=i4T7ElU5b5h-nA1i3scmEhO1BqmNDc4eJDHa
102
103
  vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
104
  vellum_ee/workflows/display/utils/auto_layout.py,sha256=f4GiLn_LazweupfqTpubcdtdfE_vrOcmZudSsnYIY9E,3906
104
105
  vellum_ee/workflows/display/utils/exceptions.py,sha256=LSwwxCYNxFkf5XMUcFkaZKpQ13OSrI7y_bpEUwbKVk0,169
105
- vellum_ee/workflows/display/utils/expressions.py,sha256=bSZ-sRByLCsut8XcRkCFbbqYvw9p7tlIeF-HFnEm664,14354
106
+ vellum_ee/workflows/display/utils/expressions.py,sha256=KxEl8yNx0yPvy0y84qABef5DwxRYGm0jgDd89i6PhSE,15534
106
107
  vellum_ee/workflows/display/utils/registry.py,sha256=fWIm5Jj-10gNFjgn34iBu4RWv3Vd15ijtSN0V97bpW8,1513
107
108
  vellum_ee/workflows/display/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
109
  vellum_ee/workflows/display/utils/tests/test_auto_layout.py,sha256=vfXI769418s9vda5Gb5NFBH747WMOwSgHRXeLCTLVm8,2356
109
110
  vellum_ee/workflows/display/utils/vellum.py,sha256=mtoXmSYwR7rvrq-d6CzCW_auaJXTct0Mi1F0xpRCiNQ,5627
110
111
  vellum_ee/workflows/display/vellum.py,sha256=o7mq_vk2Yapu9DDKRz5l76h8EmCAypWGQYe6pryrbB8,3576
111
112
  vellum_ee/workflows/display/workflows/__init__.py,sha256=kapXsC67VJcgSuiBMa86FdePG5A9kMB5Pi4Uy1O2ob4,207
112
- vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=4Acuh71NPso48RaihHApX27aQJWP37nhq4DVzYaG3_E,40285
113
+ vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=ZFZ8E2mIA-2aWnP9eRT_Z1s4efh7mTcdS8TQMlsICMY,40890
113
114
  vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=gxz76AeCqgAZ9D2lZeTiZzxY9eMgn3qOSfVgiqYcOh8,2028
114
115
  vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=L7SKWJ26Ex-XXTNfHYXux7KP6I-dxE1EMQylap4Mhjs,31762
115
116
  vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=aaKdmWrgEe5YyV4zuDY_4E3y-l59rIHQnNGiPj2OWxQ,359
@@ -134,7 +135,7 @@ vellum_ee/workflows/tests/local_workflow/nodes/__init__.py,sha256=1F6jxUpSKfPXPj
134
135
  vellum_ee/workflows/tests/local_workflow/nodes/final_output.py,sha256=ZX7zBv87zirg0w9VKUW3QVDSdBLDqcqAMZjCL_oWbpU,297
135
136
  vellum_ee/workflows/tests/local_workflow/nodes/templating_node.py,sha256=NQwFN61QkHfI3Vssz-B0NKGfupK8PU0FDSAIAhYBLi0,325
136
137
  vellum_ee/workflows/tests/local_workflow/workflow.py,sha256=A4qOzOPNwePYxWbcAgIPLsmrVS_aVEZEc-wULSv787Q,393
137
- vellum_ee/workflows/tests/test_display_meta.py,sha256=DIzjNbwK1-4mlttPML6NskQ4rPVMXhj5zeOmBEyPqKI,3728
138
+ vellum_ee/workflows/tests/test_display_meta.py,sha256=PkXJVnMZs9GNooDkd59n4YTBAX3XGPQWeSSVbhehVFM,5112
138
139
  vellum_ee/workflows/tests/test_serialize_module.py,sha256=qcHbl6YaKtJebQJvw0OXCVlJXLkj6sjkbSMu05zXI0U,1874
139
140
  vellum_ee/workflows/tests/test_server.py,sha256=SsOkS6sGO7uGC4mxvk4iv8AtcXs058P9hgFHzTWmpII,14519
140
141
  vellum_ee/workflows/tests/test_virtual_files.py,sha256=TJEcMR0v2S8CkloXNmCHA0QW0K6pYNGaIjraJz7sFvY,2762
@@ -143,7 +144,7 @@ vellum/client/README.md,sha256=CuGUYnaE0Imt0KqQ4sIPaUghCjLHkF3DdEvZWu14-8s,4807
143
144
  vellum/client/__init__.py,sha256=AYopGv2ZRVn3zsU8_km6KOvEHDbXiTPCVuYVI7bWvdA,120166
144
145
  vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
145
146
  vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
146
- vellum/client/core/client_wrapper.py,sha256=NZGCmazGkAcH9HD3LVtp7biFxQCStGNJDV4zWkgIQLw,1869
147
+ vellum/client/core/client_wrapper.py,sha256=cx7FO_qUE2Qlz3HNnJqi2W7mb70YPGjdNeHhflWGylY,1869
147
148
  vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
148
149
  vellum/client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
149
150
  vellum/client/core/http_client.py,sha256=Z77OIxIbL4OAB2IDqjRq_sYa5yNYAWfmdhdCSSvh6Y4,19552
@@ -152,14 +153,14 @@ vellum/client/core/pydantic_utilities.py,sha256=lnpQ0SFnoVDtFp7vSHt5lmBXWeqgg03V
152
153
  vellum/client/core/query_encoder.py,sha256=ekulqNd0j8TgD7ox-Qbz7liqX8-KP9blvT9DsRCenYM,2144
153
154
  vellum/client/core/remove_none_from_dict.py,sha256=EU9SGgYidWq7SexuJbNs4-PZ-5Bl3Vppd864mS6vQZw,342
154
155
  vellum/client/core/request_options.py,sha256=h0QUNCFVdCW_7GclVySCAY2w4NhtXVBUCmHgmzaxpcg,1681
155
- vellum/client/core/serialization.py,sha256=7mRS2A0qm29_wI4e7fdpXuz0tC-UUqMbn4T4_MBDrA0,9602
156
+ vellum/client/core/serialization.py,sha256=D9h_t-RQON3-CHWs1C4ESY9B-Yd5d-l5lnTLb_X896g,9601
156
157
  vellum/client/environment.py,sha256=bcAFjoE9XXd7tiysYS90Os669IJmUMZS2JZ_ZQn0Dpg,498
157
158
  vellum/client/errors/__init__.py,sha256=HZB8vVqzDNx0M2uFJ05S5RcGTH95iVDl4v3rQ4xRqSw,343
158
159
  vellum/client/errors/bad_request_error.py,sha256=_EbO8mWqN9kFZPvIap8qa1lL_EWkRcsZe1HKV9GDWJY,264
159
160
  vellum/client/errors/forbidden_error.py,sha256=QO1kKlhClAPES6zsEK7g9pglWnxn3KWaOCAawWOg6Aw,263
160
161
  vellum/client/errors/internal_server_error.py,sha256=8USCagXyJJ1MOm9snpcXIUt6eNXvrd_aq7Gfcu1vlOI,268
161
162
  vellum/client/errors/not_found_error.py,sha256=tBVCeBC8n3C811WHRj_n-hs3h8MqwR5gp0vLiobk7W8,262
162
- vellum/client/reference.md,sha256=I-z_aZGJKDQh443ywv92ezeI9w_XsiLh-vHULu8RsDg,91011
163
+ vellum/client/reference.md,sha256=AG_zpL_pTZNHF9fEU-3I74QxAfCfCAsUrOXizL2PWig,91317
163
164
  vellum/client/resources/__init__.py,sha256=XgQao4rJxyYu71j64RFIsshz4op9GE8-i-C5GCv-KVE,1555
164
165
  vellum/client/resources/ad_hoc/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
165
166
  vellum/client/resources/ad_hoc/client.py,sha256=rtpiGR6j8CcXSnN6UW_jYwLLdfJ9dwkTm_nta9oRzno,25933
@@ -187,7 +188,7 @@ vellum/client/resources/ml_models/client.py,sha256=XIYapTEY6GRNr7V0Kjy5bEeKmrhv9
187
188
  vellum/client/resources/organizations/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
188
189
  vellum/client/resources/organizations/client.py,sha256=Uye92moqjAcOCs4astmuFpT92QdC5SLMunA-C8_G-gA,3675
189
190
  vellum/client/resources/prompts/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
190
- vellum/client/resources/prompts/client.py,sha256=Z9Q9zvoCI8onkEbGSr5xVpNzzstV7xU9MmTwBnNoX98,14222
191
+ vellum/client/resources/prompts/client.py,sha256=Kr_AZdPQUSesk_JtjHl6c7vIWp7TG2PcKC74NrpW6rQ,15060
191
192
  vellum/client/resources/release_reviews/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
192
193
  vellum/client/resources/release_reviews/client.py,sha256=nb-EC7c7Y0Rklvg6CnlUKO1EWrnK26osnYJ9Z5Yw9fA,5094
193
194
  vellum/client/resources/sandboxes/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
@@ -574,7 +575,7 @@ vellum/client/types/search_results_input.py,sha256=kUfXw_NttVClGdEu9qGiZWXggFBKa
574
575
  vellum/client/types/search_results_vellum_value.py,sha256=i_7d5cANsjuFSRwI3qUgzNdz6ZyrhakuxP4lMQeUFu4,774
575
576
  vellum/client/types/search_results_vellum_value_request.py,sha256=Y36g5iLmweV4k_UiTDI9gSXf9Pn_aCwho0Z7dUNiVZU,803
576
577
  vellum/client/types/search_weights_request.py,sha256=7YdTanQ82sDztyOwZGh6Iu9HJaTiAX3QnfxDQZJUzyE,828
577
- vellum/client/types/secret_type_enum.py,sha256=wziBD_xCh-ywlrQhrGjppxiro_awjWKdIHmbHNK6-ZE,182
578
+ vellum/client/types/secret_type_enum.py,sha256=riVAwmIZxW39waRAr8at9RATpqPkBdEMTQqifHDyMOs,214
578
579
  vellum/client/types/sentence_chunker_config.py,sha256=is3t8niS19gjRtqewSkLYpskJCbRloCZ78Kfe7zs3vE,709
579
580
  vellum/client/types/sentence_chunker_config_request.py,sha256=EpGTP4z3YttiThYmdjwIBOI5YfsOlNP17dI9yiYqi3I,716
580
581
  vellum/client/types/sentence_chunking.py,sha256=guqU3072X4h8Laf6LhTWQ5lpjBpTgoXRxKp5iXJby2U,783
@@ -1571,7 +1572,7 @@ vellum/workflows/inputs/tests/test_inputs.py,sha256=lioA8917mFLYq7Ml69UNkqUjcWbb
1571
1572
  vellum/workflows/logging.py,sha256=_a217XogktV4Ncz6xKFz7WfYmZAzkfVRVuC0rWob8ls,437
1572
1573
  vellum/workflows/nodes/__init__.py,sha256=aVdQVv7Y3Ro3JlqXGpxwaU2zrI06plDHD2aumH5WUIs,1157
1573
1574
  vellum/workflows/nodes/bases/__init__.py,sha256=cniHuz_RXdJ4TQgD8CBzoiKDiPxg62ErdVpCbWICX64,58
1574
- vellum/workflows/nodes/bases/base.py,sha256=FHZ5_pzN9NJ5Vpj1uo2QP-BzxCtVCUvcDo-taoqmasw,21095
1575
+ vellum/workflows/nodes/bases/base.py,sha256=OLnt140jfqRHxg4xyzdiBd3TciqNPfuNNH2iXCpv7a4,20422
1575
1576
  vellum/workflows/nodes/bases/base_adornment_node.py,sha256=hrgzuTetM4ynPd9YGHoK8Vwwn4XITi3aZZ_OCnQrq4Y,3433
1576
1577
  vellum/workflows/nodes/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1577
1578
  vellum/workflows/nodes/bases/tests/test_base_adornment_node.py,sha256=fXZI9KqpS4XMBrBnIEkK3foHaBVvyHwYcQWWDKay7ic,1148
@@ -1586,7 +1587,7 @@ vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py,sha256=kU
1586
1587
  vellum/workflows/nodes/core/map_node/__init__.py,sha256=MXpZYmGfhsMJHqqlpd64WiJRtbAtAMQz-_3fCU_cLV0,56
1587
1588
  vellum/workflows/nodes/core/map_node/node.py,sha256=rbF7fLAU0vUDEpgtWqeQTZFlhWOhJw38tgxWJ6exud8,9313
1588
1589
  vellum/workflows/nodes/core/map_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1589
- vellum/workflows/nodes/core/map_node/tests/test_node.py,sha256=rf7CCDtjHxoPKeEtm9a8v_MNvkvu5UThH4xRXYrdEl8,6904
1590
+ vellum/workflows/nodes/core/map_node/tests/test_node.py,sha256=v80IwAZl3w6WVhMXMV-4fGnwre2_S1Z6zL5HoYZrTz8,8787
1590
1591
  vellum/workflows/nodes/core/retry_node/__init__.py,sha256=lN2bIy5a3Uzhs_FYCrooADyYU6ZGShtvLKFWpelwPvo,60
1591
1592
  vellum/workflows/nodes/core/retry_node/node.py,sha256=EM4ya8Myr7ADllpjt9q-BAhB3hGrsF8MLZhp5eh4lyo,5590
1592
1593
  vellum/workflows/nodes/core/retry_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1610,7 +1611,7 @@ vellum/workflows/nodes/displayable/bases/base_prompt_node/__init__.py,sha256=Org
1610
1611
  vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py,sha256=lGAWxTf02rRBgyxAFJNGldRX6sCRAZUDiUllg6zogHY,4459
1611
1612
  vellum/workflows/nodes/displayable/bases/inline_prompt_node/__init__.py,sha256=Hl35IAoepRpE-j4cALaXVJIYTYOF3qszyVbxTj4kS1s,82
1612
1613
  vellum/workflows/nodes/displayable/bases/inline_prompt_node/constants.py,sha256=fnjiRWLoRlC4Puo5oQcpZD5Hd-EesxsAo9l5tGAkpZQ,270
1613
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py,sha256=bxCDBOF5HR17-YCSAqEkCJKYU50TYx1C15XaAb7Xxw8,12896
1614
+ vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py,sha256=6zzgeBTUwCiYTLRhrZAqmi-nU2r4q0gX-ytnatY5kwY,12896
1614
1615
  vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1615
1616
  vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/test_inline_prompt_node.py,sha256=H1xEaL3vgEPAGQaF_rt8kLl46qmVJEEhcORXT7oRdPk,22626
1616
1617
  vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py,sha256=0a40fkkZkFMmZN0CsWf6EP_y1H6x36EGa3WcfVNyOsM,9797
@@ -1618,7 +1619,7 @@ vellum/workflows/nodes/displayable/bases/search_node.py,sha256=-BxQtuPgq8NZfUf5X
1618
1619
  vellum/workflows/nodes/displayable/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1619
1620
  vellum/workflows/nodes/displayable/bases/tests/test_utils.py,sha256=eqdqbKNRWVMDPevgwLg1i6YK0g4L4bCy-7xCBN5yYZI,3156
1620
1621
  vellum/workflows/nodes/displayable/bases/types.py,sha256=C37B2Qh2YP7s7pUjd-EYKc2Zl1TbnCgI_mENuUSb8bo,1706
1621
- vellum/workflows/nodes/displayable/bases/utils.py,sha256=ckMUenSsNkiYmSw6FmjSMHYaCk8Y8_sUjL6lkFFEqts,5412
1622
+ vellum/workflows/nodes/displayable/bases/utils.py,sha256=7L5wdQVm0ZMLpTJ7IBbTOzPhany7wSYPLYuY-0FBhvg,5490
1622
1623
  vellum/workflows/nodes/displayable/code_execution_node/__init__.py,sha256=0FLWMMktpzSnmBMizQglBpcPrP80fzVsoJwJgf822Cg,76
1623
1624
  vellum/workflows/nodes/displayable/code_execution_node/node.py,sha256=Qh4SPafzdRKbVKQH3h9SgH4vKeQQjvHAfP8ttUxLA2M,10304
1624
1625
  vellum/workflows/nodes/displayable/code_execution_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1668,18 +1669,18 @@ vellum/workflows/nodes/experimental/__init__.py,sha256=_tpZGWAZLydcKxfrj1-plrZeT
1668
1669
  vellum/workflows/nodes/experimental/openai_chat_completion_node/__init__.py,sha256=lsyD9laR9p7kx5-BXGH2gUTM242UhKy8SMV0SR6S2iE,90
1669
1670
  vellum/workflows/nodes/experimental/openai_chat_completion_node/node.py,sha256=cKI2Ls25L-JVt4z4a2ozQa-YBeVy21Z7BQ32Sj7iBPE,10460
1670
1671
  vellum/workflows/nodes/experimental/tool_calling_node/__init__.py,sha256=S7OzT3I4cyOU5Beoz87nPwCejCMP2FsHBFL8OcVmxJ4,118
1671
- vellum/workflows/nodes/experimental/tool_calling_node/node.py,sha256=CkSVbTHWX70MikBKMWfDRLb2xDhEl4K4qpIrNmRVVRU,5689
1672
+ vellum/workflows/nodes/experimental/tool_calling_node/node.py,sha256=jwL1sbitmm1CpTOAEI0IIuc6VRr8d7yxUpS4Y5s9Bk8,5966
1672
1673
  vellum/workflows/nodes/experimental/tool_calling_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1673
- vellum/workflows/nodes/experimental/tool_calling_node/tests/test_node.py,sha256=7x_o81vT7gWtVw3zDppcWnlJbakgxx_oI1esqhs2gpI,4551
1674
+ vellum/workflows/nodes/experimental/tool_calling_node/tests/test_node.py,sha256=XK1H_QAT_nVFmFP442RYyPvpTfSgtU6kSGu3-OQPBNU,5072
1674
1675
  vellum/workflows/nodes/experimental/tool_calling_node/tests/test_utils.py,sha256=sF4ZfGK2uQNBVXC9yrnbFVzKIM-HWvXO1wak160MUTE,1386
1675
- vellum/workflows/nodes/experimental/tool_calling_node/utils.py,sha256=1wjOayk35rMEQWItpCUwP0UTtgdB27u1WzjsNAD0f4o,12052
1676
+ vellum/workflows/nodes/experimental/tool_calling_node/utils.py,sha256=ut3cdC7ezbxSvjMqHP0Km9yAVqOYoRztZVHShiq6zhk,12579
1676
1677
  vellum/workflows/nodes/mocks.py,sha256=a1FjWEIocseMfjzM-i8DNozpUsaW0IONRpZmXBoWlyc,10455
1677
1678
  vellum/workflows/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1678
1679
  vellum/workflows/nodes/tests/test_mocks.py,sha256=mfPvrs75PKcsNsbJLQAN6PDFoVqs9TmQxpdyFKDdO60,7837
1679
1680
  vellum/workflows/nodes/tests/test_utils.py,sha256=OPVZo9yi8qt0rVqayKhfgh4Hk-dVdIzqfbS89fDhRiE,4913
1680
1681
  vellum/workflows/nodes/utils.py,sha256=K2gf05eM-EKkKHf2SPpvEly8cBL4RftWSMvIZJIMlso,9455
1681
1682
  vellum/workflows/outputs/__init__.py,sha256=AyZ4pRh_ACQIGvkf0byJO46EDnSix1ZCAXfvh-ms1QE,94
1682
- vellum/workflows/outputs/base.py,sha256=1OGHqBJVk7i8cW8uewFWOhIjuMlRRpzCDrGE30ZwDjw,8763
1683
+ vellum/workflows/outputs/base.py,sha256=PUn0zhGzYCSZL34JXtXg9zALlXS_cqxZldLilPxDzb8,9614
1683
1684
  vellum/workflows/ports/__init__.py,sha256=bZuMt-R7z5bKwpu4uPW7LlJeePOQWmCcDSXe5frUY5g,101
1684
1685
  vellum/workflows/ports/node_ports.py,sha256=2Uo9gwNVCuH86J-GXcpc95QSDh5I-XVvhHJCMSWe-S8,2825
1685
1686
  vellum/workflows/ports/port.py,sha256=j_qiZlpx-a1cK5E7sxXwPcb_9NS-KUM-JoP8mgqg32k,4073
@@ -1705,7 +1706,7 @@ vellum/workflows/sandbox.py,sha256=GVJzVjMuYzOBnSrboB0_6MMRZWBluAyQ2o7syeaeBd0,2
1705
1706
  vellum/workflows/state/__init__.py,sha256=yUUdR-_Vl7UiixNDYQZ-GEM_kJI9dnOia75TtuNEsnE,60
1706
1707
  vellum/workflows/state/base.py,sha256=WIMJYyuHUrP4zt0Nudk66HAK1L6GgGmsU_GQp7BGE2U,22189
1707
1708
  vellum/workflows/state/context.py,sha256=KOAI1wEGn8dGmhmAemJaf4SZbitP3jpIBcwKfznQaRE,3076
1708
- vellum/workflows/state/encoder.py,sha256=8NPQ8iz5qJeT5fafnZ2Pko98b-FtTjsgMNV4Zi3g2bE,2438
1709
+ vellum/workflows/state/encoder.py,sha256=I21qwYW3edIqlp78jdbjQgtou0hXYKvmofF-5_BCIlU,2552
1709
1710
  vellum/workflows/state/store.py,sha256=uVe-oN73KwGV6M6YLhwZMMUQhzTQomsVfVnb8V91gVo,1147
1710
1711
  vellum/workflows/state/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1711
1712
  vellum/workflows/state/tests/test_state.py,sha256=YOiC9qZAzkdiqb7nRarNWeDwxo7xHv3y3czlHl81ezg,6741
@@ -1715,18 +1716,18 @@ vellum/workflows/tests/test_undefined.py,sha256=zMCVliCXVNLrlC6hEGyOWDnQADJ2g83y
1715
1716
  vellum/workflows/types/__init__.py,sha256=KxUTMBGzuRCfiMqzzsykOeVvrrkaZmTTo1a7SLu8gRM,68
1716
1717
  vellum/workflows/types/code_execution_node_wrappers.py,sha256=3MNIoFZKzVzNS5qFLVuDwMV17QJw72zo7NRf52yMq5A,3074
1717
1718
  vellum/workflows/types/core.py,sha256=iLJkMKf417kjwRncWdT_qsfJ-qBv5x58um7SfrydJbs,1266
1718
- vellum/workflows/types/definition.py,sha256=8DyNh3KP3p4Gsi-HJqai0f4sc9P-E2lDbp_0krsrE7g,2516
1719
- vellum/workflows/types/generics.py,sha256=tKXz0LwWJGKw1YGudyl9_yFDrRgU6yYV1yJV1Zv-LTw,1430
1719
+ vellum/workflows/types/definition.py,sha256=guuCHZkto8bkknoMcjfXRhSaDuiNjx3SNkutPf1makc,2506
1720
+ vellum/workflows/types/generics.py,sha256=8jptbEx1fnJV0Lhj0MpCJOT6yNiEWeTOYOwrEAb5CRU,1576
1720
1721
  vellum/workflows/types/stack.py,sha256=h7NE0vXR7l9DevFBIzIAk1Zh59K-kECQtDTKOUunwMY,1314
1721
1722
  vellum/workflows/types/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1722
1723
  vellum/workflows/types/tests/test_utils.py,sha256=UnZog59tR577mVwqZRqqWn2fScoOU1H6up0EzS8zYhw,2536
1723
1724
  vellum/workflows/types/utils.py,sha256=axxHbPLsnjhEOnMZrc5YarFd-P2bnsacBDQGNCvY8OY,6367
1724
1725
  vellum/workflows/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1725
- vellum/workflows/utils/functions.py,sha256=eRtqQaxtv6NFe5v2pRO-b7kOH2_NOQS8tsKGOEEEdxY,7168
1726
+ vellum/workflows/utils/functions.py,sha256=W4t-IXvCoIn_oVY_wEkph1xjpd_xpGzBwExWqgJXeho,7168
1726
1727
  vellum/workflows/utils/names.py,sha256=QLUqfJ1tmSEeUwBKTTiv_Qk3QGbInC2RSmlXfGXc8Wo,380
1727
1728
  vellum/workflows/utils/pydantic_schema.py,sha256=eR_bBtY-T0pttJP-ARwagSdCOnwPUtiT3cegm2lzDTQ,1310
1728
1729
  vellum/workflows/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1729
- vellum/workflows/utils/tests/test_functions.py,sha256=bDobzPtxrFpkSBsR86BE4Zb8rD44y6tiTe6HXrLtOqU,18445
1730
+ vellum/workflows/utils/tests/test_functions.py,sha256=6AQt2Wu2Uj6UAxYzwi1Zd0YL4-ZOL47Yc_X3iE8ol9U,18445
1730
1731
  vellum/workflows/utils/tests/test_names.py,sha256=aOqpyvMsOEK_9mg_-yaNxQDW7QQfwqsYs37PseyLhxw,402
1731
1732
  vellum/workflows/utils/tests/test_uuids.py,sha256=i77ABQ0M3S-aFLzDXHJq_yr5FPkJEWCMBn1HJ3DObrE,437
1732
1733
  vellum/workflows/utils/tests/test_vellum_variables.py,sha256=vbnKgm41aB5OXlO-ZIPbhQ6xDiZkT8KMxCLqz4zocWY,1791
@@ -1739,8 +1740,8 @@ vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnad
1739
1740
  vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1740
1741
  vellum/workflows/workflows/tests/test_base_workflow.py,sha256=fROqff6AZpCIzaSwOKSdtYy4XR0UZQ6ejxL3RJOSJVs,20447
1741
1742
  vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
1742
- vellum_ai-0.14.73.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1743
- vellum_ai-0.14.73.dist-info/METADATA,sha256=XoU3nebnJNAQ7L7BEvZpXjoLwW0JMAUx88t4TikRG3s,5556
1744
- vellum_ai-0.14.73.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1745
- vellum_ai-0.14.73.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1746
- vellum_ai-0.14.73.dist-info/RECORD,,
1743
+ vellum_ai-0.14.75.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1744
+ vellum_ai-0.14.75.dist-info/METADATA,sha256=Wclzf2hGrdv0YvzbG76xaKSH1JyLVRISdFarQai4Lks,5556
1745
+ vellum_ai-0.14.75.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1746
+ vellum_ai-0.14.75.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1747
+ vellum_ai-0.14.75.dist-info/RECORD,,
@@ -15,6 +15,20 @@ from vellum_ee.workflows.display.utils.expressions import serialize_value
15
15
  from vellum_ee.workflows.display.utils.vellum import infer_vellum_variable_type
16
16
  from vellum_ee.workflows.display.vellum import NodeInput
17
17
 
18
+
19
+ def _contains_descriptors(obj):
20
+ """Check if an object contains any descriptors or references that need special handling."""
21
+ if isinstance(obj, BaseDescriptor):
22
+ return True
23
+ elif isinstance(obj, dict):
24
+ return any(_contains_descriptors(v) for v in obj.values())
25
+ elif isinstance(obj, (list, tuple)):
26
+ return any(_contains_descriptors(item) for item in obj)
27
+ elif hasattr(obj, "__dict__"):
28
+ return any(_contains_descriptors(getattr(obj, field)) for field in obj.__dict__)
29
+ return False
30
+
31
+
18
32
  _InlinePromptNodeType = TypeVar("_InlinePromptNodeType", bound=InlinePromptNode)
19
33
 
20
34
 
@@ -23,7 +37,6 @@ class BaseInlinePromptNodeDisplay(BaseNodeDisplay[_InlinePromptNodeType], Generi
23
37
  InlinePromptNode.prompt_inputs,
24
38
  }
25
39
  __unserializable_attributes__ = {
26
- InlinePromptNode.parameters,
27
40
  InlinePromptNode.settings,
28
41
  InlinePromptNode.expand_meta,
29
42
  InlinePromptNode.request_options,
@@ -46,11 +59,15 @@ class BaseInlinePromptNodeDisplay(BaseNodeDisplay[_InlinePromptNodeType], Generi
46
59
 
47
60
  ml_model = str(raise_if_descriptor(node.ml_model))
48
61
 
49
- blocks: list = [
50
- self._generate_prompt_block(block, input_variable_id_by_name, [i])
51
- for i, block in enumerate(node_blocks)
52
- if not isinstance(block, BaseDescriptor)
53
- ]
62
+ has_descriptors = _contains_descriptors(node_blocks)
63
+
64
+ blocks: list = []
65
+ if not has_descriptors:
66
+ blocks = [
67
+ self._generate_prompt_block(block, input_variable_id_by_name, [i])
68
+ for i, block in enumerate(node_blocks)
69
+ if not isinstance(block, BaseDescriptor)
70
+ ]
54
71
 
55
72
  functions = (
56
73
  [self._generate_function_tools(function, i) for i, function in enumerate(function_definitions)]
@@ -72,7 +89,7 @@ class BaseInlinePromptNodeDisplay(BaseNodeDisplay[_InlinePromptNodeType], Generi
72
89
  "target_handle_id": str(self.get_target_handle_id()),
73
90
  "variant": "INLINE",
74
91
  "exec_config": {
75
- "parameters": raise_if_descriptor(node.parameters).dict(),
92
+ "parameters": self._serialize_parameters(node.parameters, display_context),
76
93
  "input_variables": [prompt_input.dict() for prompt_input in prompt_inputs],
77
94
  "prompt_template_block_data": {
78
95
  "version": 1,
@@ -156,6 +173,7 @@ class BaseInlinePromptNodeDisplay(BaseNodeDisplay[_InlinePromptNodeType], Generi
156
173
  }
157
174
 
158
175
  elif prompt_block.block_type == "CHAT_MESSAGE":
176
+
159
177
  chat_properties: JsonObject = {
160
178
  "chat_role": prompt_block.chat_role,
161
179
  "chat_source": prompt_block.chat_source,
@@ -253,3 +271,14 @@ class BaseInlinePromptNodeDisplay(BaseNodeDisplay[_InlinePromptNodeType], Generi
253
271
  raise ValueError(f"Failed to serialize attribute '{attribute.name}': {e}")
254
272
 
255
273
  return attributes
274
+
275
+ def _serialize_parameters(self, parameters, display_context: "WorkflowDisplayContext") -> JsonObject:
276
+ """Serialize parameters, returning empty object when nested descriptors are detected."""
277
+ params = raise_if_descriptor(parameters)
278
+ if not params:
279
+ return {}
280
+
281
+ if _contains_descriptors(params):
282
+ return {}
283
+
284
+ return params.dict()
@@ -2,6 +2,7 @@ import pytest
2
2
  from uuid import UUID
3
3
  from typing import Type
4
4
 
5
+ from vellum.client.types.prompt_parameters import PromptParameters
5
6
  from vellum.client.types.variable_prompt_block import VariablePromptBlock
6
7
  from vellum.workflows import BaseWorkflow
7
8
  from vellum.workflows.inputs import BaseInputs
@@ -280,3 +281,104 @@ def test_serialize_node__port_groups():
280
281
 
281
282
  # AND the legacy source_handle_id should be the default port
282
283
  assert my_prompt_node["data"]["source_handle_id"] == "149d97a4-3da3-44a9-95f7-ea7b8d38b877"
284
+
285
+
286
+ def test_serialize_node__prompt_parameters__dynamic_references():
287
+ # GIVEN input definition
288
+ class MyInputs(BaseInputs):
289
+ input_value: str
290
+
291
+ # AND a prompt node with PromptParameters containing dynamic references
292
+ class DynamicPromptNode(InlinePromptNode):
293
+ blocks = []
294
+ ml_model = "gpt-4o"
295
+ parameters = PromptParameters(custom_parameters={"json_schema": MyInputs.input_value})
296
+
297
+ # AND a workflow with the prompt node
298
+ class Workflow(BaseWorkflow[MyInputs, BaseState]):
299
+ graph = DynamicPromptNode
300
+
301
+ # WHEN the workflow is serialized
302
+ workflow_display = get_workflow_display(workflow_class=Workflow)
303
+ serialized_workflow: dict = workflow_display.serialize()
304
+
305
+ # THEN the node should properly serialize the PromptParameters
306
+ dynamic_prompt_node = next(
307
+ node
308
+ for node in serialized_workflow["workflow_raw_data"]["nodes"]
309
+ if node["id"] == str(DynamicPromptNode.__id__)
310
+ )
311
+
312
+ # AND the parameters should be properly serialized in exec_config
313
+ exec_config = dynamic_prompt_node["data"]["exec_config"]
314
+ assert "parameters" in exec_config
315
+
316
+ parameters = exec_config["parameters"]
317
+ assert parameters == {}
318
+
319
+ # AND the parameters should also be serialized in the attributes array
320
+ parameters_attribute = next(
321
+ (attr for attr in dynamic_prompt_node.get("attributes", []) if attr["name"] == "parameters"), None
322
+ )
323
+ assert parameters_attribute is not None
324
+ assert parameters_attribute["name"] == "parameters"
325
+ assert parameters_attribute["value"]["type"] == "DICTIONARY_REFERENCE"
326
+ assert parameters_attribute["value"]["entries"] == [
327
+ {
328
+ "id": "6b63ff96-a2eb-4c6e-bad1-bde01605fa86",
329
+ "key": "stop",
330
+ "value": {"type": "CONSTANT_VALUE", "value": {"type": "JSON", "value": None}},
331
+ },
332
+ {
333
+ "id": "265a1c17-2089-4ac1-b2ce-361b6b9a3335",
334
+ "key": "temperature",
335
+ "value": {"type": "CONSTANT_VALUE", "value": {"type": "JSON", "value": None}},
336
+ },
337
+ {
338
+ "id": "699976ec-8ec2-476a-a011-7cf810a8a307",
339
+ "key": "max_tokens",
340
+ "value": {"type": "CONSTANT_VALUE", "value": {"type": "JSON", "value": None}},
341
+ },
342
+ {
343
+ "id": "a87e23da-9794-41ff-ba80-c3a77e976e75",
344
+ "key": "top_p",
345
+ "value": {"type": "CONSTANT_VALUE", "value": {"type": "JSON", "value": None}},
346
+ },
347
+ {
348
+ "id": "18eb53c2-ec1a-4115-9f21-083af430df67",
349
+ "key": "top_k",
350
+ "value": {"type": "CONSTANT_VALUE", "value": {"type": "JSON", "value": None}},
351
+ },
352
+ {
353
+ "id": "295509a2-5837-452c-893d-f47b67c63c8a",
354
+ "key": "frequency_penalty",
355
+ "value": {"type": "CONSTANT_VALUE", "value": {"type": "JSON", "value": None}},
356
+ },
357
+ {
358
+ "id": "5fc64379-5566-426a-a909-dd56c3305aa5",
359
+ "key": "presence_penalty",
360
+ "value": {"type": "CONSTANT_VALUE", "value": {"type": "JSON", "value": None}},
361
+ },
362
+ {
363
+ "id": "5d326da0-c096-4425-8bf1-3a18764e96e3",
364
+ "key": "logit_bias",
365
+ "value": {"type": "CONSTANT_VALUE", "value": {"type": "JSON", "value": None}},
366
+ },
367
+ {
368
+ "id": "cd1a0e1b-6667-48a0-9964-257e1ec8851d",
369
+ "key": "custom_parameters",
370
+ "value": {
371
+ "entries": [
372
+ {
373
+ "id": "a9a3092e-dd18-4533-b6b5-24588ebd8f7f",
374
+ "key": "json_schema",
375
+ "value": {
376
+ "input_variable_id": "c02d1201-86d1-4364-b3b3-4fc6824db8a4",
377
+ "type": "WORKFLOW_INPUT",
378
+ },
379
+ }
380
+ ],
381
+ "type": "DICTIONARY_REFERENCE",
382
+ },
383
+ },
384
+ ]
@@ -1,7 +1,10 @@
1
+ import pytest
2
+ from dataclasses import dataclass
1
3
  from uuid import uuid4
2
4
  from typing import List
3
5
 
4
6
  from deepdiff import DeepDiff
7
+ from pydantic import BaseModel
5
8
 
6
9
  from vellum.client.types.chat_message import ChatMessage
7
10
  from vellum.workflows.inputs.base import BaseInputs
@@ -70,6 +73,28 @@ def test_serialize_node__constant_value(serialize_node):
70
73
  )
71
74
 
72
75
 
76
+ @pytest.mark.parametrize(
77
+ "boolean_value, expected_value",
78
+ [
79
+ (True, True),
80
+ (False, False),
81
+ ],
82
+ )
83
+ def test_serialize_node__constant_boolean_value(serialize_node, boolean_value, expected_value):
84
+ class BooleanValueGenericNode(BaseNode):
85
+ attr: bool = boolean_value
86
+
87
+ serialized_node = serialize_node(BooleanValueGenericNode)
88
+
89
+ assert serialized_node["attributes"][0]["value"] == {
90
+ "type": "CONSTANT_VALUE",
91
+ "value": {
92
+ "type": "JSON",
93
+ "value": expected_value,
94
+ },
95
+ }
96
+
97
+
73
98
  def test_serialize_node__constant_value_reference(serialize_node):
74
99
  class ConstantValueReferenceGenericNode(BaseNode):
75
100
  attr: str = ConstantValueReference("hello")
@@ -580,3 +605,68 @@ def test_serialize_node__coalesce(serialize_node):
580
605
  serialized_node,
581
606
  ignore_order=True,
582
607
  )
608
+
609
+
610
+ def test_serialize_node__dataclass_with_node_output_reference(serialize_node):
611
+ @dataclass
612
+ class MyDataClass:
613
+ name: str
614
+ node_ref: str
615
+
616
+ class NodeWithOutput(BaseNode):
617
+ class Outputs(BaseNode.Outputs):
618
+ result: str
619
+
620
+ class NodeWithOutputDisplay(BaseNodeDisplay[NodeWithOutput]):
621
+ pass
622
+
623
+ class GenericNodeWithDataclass(BaseNode):
624
+ attr = MyDataClass(name="test", node_ref=NodeWithOutput.Outputs.result)
625
+
626
+ node_output_id = uuid4()
627
+ serialized_node = serialize_node(
628
+ node_class=GenericNodeWithDataclass,
629
+ global_node_displays={NodeWithOutput: NodeWithOutputDisplay()},
630
+ global_node_output_displays={
631
+ NodeWithOutput.Outputs.result: (NodeWithOutput, NodeOutputDisplay(id=node_output_id, name="result"))
632
+ },
633
+ )
634
+
635
+ attr_value = serialized_node["attributes"][0]["value"]
636
+ assert attr_value["type"] == "DICTIONARY_REFERENCE"
637
+
638
+ assert any(
639
+ entry["key"] == "node_ref" and entry["value"]["type"] == "NODE_OUTPUT" for entry in attr_value["entries"]
640
+ )
641
+
642
+
643
+ def test_serialize_node__pydantic_with_node_output_reference(serialize_node):
644
+ class MyPydanticModel(BaseModel):
645
+ name: str
646
+ node_ref: str
647
+
648
+ class NodeWithOutput(BaseNode):
649
+ class Outputs(BaseNode.Outputs):
650
+ result: str
651
+
652
+ class NodeWithOutputDisplay(BaseNodeDisplay[NodeWithOutput]):
653
+ pass
654
+
655
+ class GenericNodeWithPydantic(BaseNode):
656
+ attr = MyPydanticModel(name="test", node_ref=NodeWithOutput.Outputs.result)
657
+
658
+ node_output_id = uuid4()
659
+ serialized_node = serialize_node(
660
+ node_class=GenericNodeWithPydantic,
661
+ global_node_displays={NodeWithOutput: NodeWithOutputDisplay()},
662
+ global_node_output_displays={
663
+ NodeWithOutput.Outputs.result: (NodeWithOutput, NodeOutputDisplay(id=node_output_id, name="result"))
664
+ },
665
+ )
666
+
667
+ attr_value = serialized_node["attributes"][0]["value"]
668
+ assert attr_value["type"] == "DICTIONARY_REFERENCE"
669
+
670
+ assert any(
671
+ entry["key"] == "node_ref" and entry["value"]["type"] == "NODE_OUTPUT" for entry in attr_value["entries"]
672
+ )