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.
- vellum/client/core/client_wrapper.py +1 -1
- vellum/client/core/serialization.py +0 -1
- vellum/client/reference.md +9 -1
- vellum/client/resources/prompts/client.py +16 -4
- vellum/client/types/secret_type_enum.py +3 -1
- vellum/workflows/nodes/bases/base.py +0 -15
- vellum/workflows/nodes/core/map_node/tests/test_node.py +54 -0
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py +2 -2
- vellum/workflows/nodes/displayable/bases/utils.py +2 -0
- vellum/workflows/nodes/experimental/tool_calling_node/node.py +5 -1
- vellum/workflows/nodes/experimental/tool_calling_node/tests/test_node.py +13 -0
- vellum/workflows/nodes/experimental/tool_calling_node/utils.py +14 -4
- vellum/workflows/outputs/base.py +26 -2
- vellum/workflows/state/encoder.py +2 -0
- vellum/workflows/types/definition.py +1 -1
- vellum/workflows/types/generics.py +5 -0
- vellum/workflows/utils/functions.py +3 -3
- vellum/workflows/utils/tests/test_functions.py +7 -7
- {vellum_ai-0.14.73.dist-info → vellum_ai-0.14.75.dist-info}/METADATA +1 -1
- {vellum_ai-0.14.73.dist-info → vellum_ai-0.14.75.dist-info}/RECORD +33 -32
- vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py +36 -7
- vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py +102 -0
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +90 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py +117 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py +7 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py +7 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_workflow_deployment_serialization.py +62 -0
- vellum_ee/workflows/display/utils/expressions.py +33 -2
- vellum_ee/workflows/display/workflows/base_workflow_display.py +20 -6
- vellum_ee/workflows/tests/test_display_meta.py +41 -0
- {vellum_ai-0.14.73.dist-info → vellum_ai-0.14.75.dist-info}/LICENSE +0 -0
- {vellum_ai-0.14.73.dist-info → vellum_ai-0.14.75.dist-info}/WHEEL +0 -0
- {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=
|
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=
|
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
|
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=
|
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=
|
97
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
1719
|
-
vellum/workflows/types/generics.py,sha256=
|
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=
|
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=
|
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.
|
1743
|
-
vellum_ai-0.14.
|
1744
|
-
vellum_ai-0.14.
|
1745
|
-
vellum_ai-0.14.
|
1746
|
-
vellum_ai-0.14.
|
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
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
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":
|
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
|
+
)
|