vellum-ai 1.1.3__py3-none-any.whl → 1.1.5__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 (671) hide show
  1. vellum/__init__.py +2 -0
  2. vellum/client/README.md +22 -0
  3. vellum/client/__init__.py +89 -99
  4. vellum/client/core/__init__.py +2 -0
  5. vellum/client/core/api_error.py +13 -5
  6. vellum/client/core/client_wrapper.py +16 -4
  7. vellum/client/core/force_multipart.py +16 -0
  8. vellum/client/core/http_client.py +70 -24
  9. vellum/client/core/http_response.py +19 -11
  10. vellum/client/core/pydantic_utilities.py +71 -114
  11. vellum/client/core/serialization.py +6 -1
  12. vellum/client/errors/__init__.py +2 -0
  13. vellum/client/errors/bad_request_error.py +4 -3
  14. vellum/client/errors/forbidden_error.py +4 -3
  15. vellum/client/errors/internal_server_error.py +4 -3
  16. vellum/client/errors/not_found_error.py +4 -3
  17. vellum/client/raw_client.py +270 -201
  18. vellum/client/resources/__init__.py +2 -0
  19. vellum/client/resources/ad_hoc/__init__.py +2 -0
  20. vellum/client/resources/ad_hoc/client.py +16 -17
  21. vellum/client/resources/ad_hoc/raw_client.py +68 -53
  22. vellum/client/resources/container_images/__init__.py +2 -0
  23. vellum/client/resources/container_images/client.py +24 -21
  24. vellum/client/resources/container_images/raw_client.py +23 -24
  25. vellum/client/resources/deployments/__init__.py +2 -0
  26. vellum/client/resources/deployments/client.py +43 -44
  27. vellum/client/resources/deployments/raw_client.py +73 -66
  28. vellum/client/resources/deployments/types/__init__.py +2 -0
  29. vellum/client/resources/document_indexes/__init__.py +2 -0
  30. vellum/client/resources/document_indexes/client.py +38 -39
  31. vellum/client/resources/document_indexes/raw_client.py +42 -43
  32. vellum/client/resources/document_indexes/types/__init__.py +2 -0
  33. vellum/client/resources/documents/__init__.py +2 -0
  34. vellum/client/resources/documents/client.py +25 -26
  35. vellum/client/resources/documents/raw_client.py +51 -44
  36. vellum/client/resources/folder_entities/__init__.py +2 -0
  37. vellum/client/resources/folder_entities/client.py +12 -13
  38. vellum/client/resources/folder_entities/raw_client.py +15 -16
  39. vellum/client/resources/folder_entities/types/__init__.py +2 -0
  40. vellum/client/resources/metric_definitions/__init__.py +2 -0
  41. vellum/client/resources/metric_definitions/client.py +12 -13
  42. vellum/client/resources/metric_definitions/raw_client.py +17 -18
  43. vellum/client/resources/ml_models/__init__.py +2 -0
  44. vellum/client/resources/ml_models/client.py +7 -8
  45. vellum/client/resources/ml_models/raw_client.py +11 -12
  46. vellum/client/resources/organizations/__init__.py +2 -0
  47. vellum/client/resources/organizations/client.py +7 -8
  48. vellum/client/resources/organizations/raw_client.py +10 -11
  49. vellum/client/resources/prompts/__init__.py +2 -0
  50. vellum/client/resources/prompts/client.py +13 -12
  51. vellum/client/resources/prompts/raw_client.py +40 -33
  52. vellum/client/resources/sandboxes/__init__.py +2 -0
  53. vellum/client/resources/sandboxes/client.py +15 -16
  54. vellum/client/resources/sandboxes/raw_client.py +20 -21
  55. vellum/client/resources/test_suite_runs/__init__.py +2 -0
  56. vellum/client/resources/test_suite_runs/client.py +17 -18
  57. vellum/client/resources/test_suite_runs/raw_client.py +20 -21
  58. vellum/client/resources/test_suites/__init__.py +2 -0
  59. vellum/client/resources/test_suites/client.py +20 -19
  60. vellum/client/resources/test_suites/raw_client.py +46 -31
  61. vellum/client/resources/workflow_deployments/__init__.py +2 -0
  62. vellum/client/resources/workflow_deployments/client.py +45 -46
  63. vellum/client/resources/workflow_deployments/raw_client.py +48 -49
  64. vellum/client/resources/workflow_deployments/types/__init__.py +2 -0
  65. vellum/client/resources/workflow_executions/__init__.py +2 -0
  66. vellum/client/resources/workflow_executions/client.py +7 -8
  67. vellum/client/resources/workflow_executions/raw_client.py +11 -12
  68. vellum/client/resources/workflow_sandboxes/__init__.py +2 -0
  69. vellum/client/resources/workflow_sandboxes/client.py +12 -13
  70. vellum/client/resources/workflow_sandboxes/raw_client.py +16 -17
  71. vellum/client/resources/workflow_sandboxes/types/__init__.py +2 -0
  72. vellum/client/resources/workflows/__init__.py +2 -0
  73. vellum/client/resources/workflows/client.py +11 -12
  74. vellum/client/resources/workflows/raw_client.py +34 -27
  75. vellum/client/resources/workspace_secrets/__init__.py +2 -0
  76. vellum/client/resources/workspace_secrets/client.py +11 -12
  77. vellum/client/resources/workspace_secrets/raw_client.py +15 -16
  78. vellum/client/resources/workspaces/__init__.py +2 -0
  79. vellum/client/resources/workspaces/client.py +7 -8
  80. vellum/client/resources/workspaces/raw_client.py +10 -11
  81. vellum/client/types/__init__.py +2 -0
  82. vellum/client/types/ad_hoc_execute_prompt_event.py +3 -2
  83. vellum/client/types/ad_hoc_expand_meta.py +2 -2
  84. vellum/client/types/ad_hoc_fulfilled_prompt_execution_meta.py +3 -3
  85. vellum/client/types/ad_hoc_initiated_prompt_execution_meta.py +2 -2
  86. vellum/client/types/ad_hoc_rejected_prompt_execution_meta.py +3 -3
  87. vellum/client/types/ad_hoc_streaming_prompt_execution_meta.py +2 -2
  88. vellum/client/types/api_node_result.py +3 -3
  89. vellum/client/types/api_node_result_data.py +4 -4
  90. vellum/client/types/api_request_parent_context.py +11 -11
  91. vellum/client/types/array_chat_message_content.py +3 -3
  92. vellum/client/types/array_chat_message_content_item.py +5 -4
  93. vellum/client/types/array_chat_message_content_item_request.py +5 -4
  94. vellum/client/types/array_chat_message_content_request.py +3 -3
  95. vellum/client/types/array_input.py +12 -6
  96. vellum/client/types/array_vellum_value.py +4 -4
  97. vellum/client/types/array_vellum_value_request.py +4 -4
  98. vellum/client/types/audio_chat_message_content.py +3 -3
  99. vellum/client/types/audio_chat_message_content_request.py +3 -3
  100. vellum/client/types/audio_prompt_block.py +4 -4
  101. vellum/client/types/audio_vellum_value.py +3 -3
  102. vellum/client/types/audio_vellum_value_request.py +3 -3
  103. vellum/client/types/base_output.py +2 -2
  104. vellum/client/types/basic_vectorizer_intfloat_multilingual_e_5_large.py +2 -2
  105. vellum/client/types/basic_vectorizer_intfloat_multilingual_e_5_large_request.py +2 -2
  106. vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_cos_v_1.py +2 -2
  107. vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_cos_v_1_request.py +2 -2
  108. vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_dot_v_1.py +2 -2
  109. vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_dot_v_1_request.py +2 -2
  110. vellum/client/types/chat_history_input.py +3 -3
  111. vellum/client/types/chat_history_input_request.py +3 -3
  112. vellum/client/types/chat_history_vellum_value.py +3 -3
  113. vellum/client/types/chat_history_vellum_value_request.py +3 -3
  114. vellum/client/types/chat_message.py +4 -4
  115. vellum/client/types/chat_message_content.py +5 -4
  116. vellum/client/types/chat_message_content_request.py +5 -4
  117. vellum/client/types/chat_message_prompt_block.py +7 -7
  118. vellum/client/types/chat_message_request.py +4 -4
  119. vellum/client/types/code_execution_node_array_result.py +11 -5
  120. vellum/client/types/code_execution_node_chat_history_result.py +3 -3
  121. vellum/client/types/code_execution_node_error_result.py +3 -3
  122. vellum/client/types/code_execution_node_function_call_result.py +3 -3
  123. vellum/client/types/code_execution_node_json_result.py +2 -2
  124. vellum/client/types/code_execution_node_number_result.py +2 -2
  125. vellum/client/types/code_execution_node_result.py +10 -4
  126. vellum/client/types/code_execution_node_result_data.py +10 -4
  127. vellum/client/types/code_execution_node_result_output.py +6 -5
  128. vellum/client/types/code_execution_node_search_results_result.py +3 -3
  129. vellum/client/types/code_execution_node_string_result.py +2 -2
  130. vellum/client/types/code_execution_package.py +2 -2
  131. vellum/client/types/code_executor_input.py +7 -6
  132. vellum/client/types/code_executor_response.py +11 -5
  133. vellum/client/types/code_executor_secret_input.py +3 -3
  134. vellum/client/types/code_resource_definition.py +3 -3
  135. vellum/client/types/compile_prompt_deployment_expand_meta_request.py +2 -2
  136. vellum/client/types/compile_prompt_meta.py +2 -2
  137. vellum/client/types/conditional_node_result.py +3 -3
  138. vellum/client/types/conditional_node_result_data.py +2 -2
  139. vellum/client/types/container_image_build_config.py +3 -3
  140. vellum/client/types/container_image_container_image_tag.py +2 -2
  141. vellum/client/types/container_image_read.py +5 -5
  142. vellum/client/types/create_test_suite_test_case_request.py +9 -3
  143. vellum/client/types/deployment_history_item.py +10 -4
  144. vellum/client/types/deployment_provider_payload_response.py +4 -4
  145. vellum/client/types/deployment_read.py +10 -4
  146. vellum/client/types/deployment_release_tag_deployment_history_item.py +2 -2
  147. vellum/client/types/deployment_release_tag_read.py +4 -4
  148. vellum/client/types/docker_service_token.py +2 -2
  149. vellum/client/types/document_chat_message_content.py +3 -3
  150. vellum/client/types/document_chat_message_content_request.py +3 -3
  151. vellum/client/types/document_document_to_document_index.py +3 -3
  152. vellum/client/types/document_index_chunking.py +1 -0
  153. vellum/client/types/document_index_chunking_request.py +1 -0
  154. vellum/client/types/document_index_indexing_config.py +4 -4
  155. vellum/client/types/document_index_indexing_config_request.py +4 -4
  156. vellum/client/types/document_index_read.py +4 -4
  157. vellum/client/types/document_prompt_block.py +4 -4
  158. vellum/client/types/document_read.py +4 -4
  159. vellum/client/types/document_vellum_value.py +3 -3
  160. vellum/client/types/document_vellum_value_request.py +3 -3
  161. vellum/client/types/enriched_normalized_completion.py +3 -3
  162. vellum/client/types/ephemeral_prompt_cache_config.py +3 -3
  163. vellum/client/types/error_input.py +3 -3
  164. vellum/client/types/error_vellum_value.py +3 -3
  165. vellum/client/types/error_vellum_value_request.py +3 -3
  166. vellum/client/types/execute_api_request_bearer_token.py +1 -0
  167. vellum/client/types/execute_api_request_headers_value.py +1 -0
  168. vellum/client/types/execute_api_response.py +5 -5
  169. vellum/client/types/execute_prompt_event.py +3 -2
  170. vellum/client/types/execute_prompt_response.py +1 -0
  171. vellum/client/types/execute_workflow_response.py +10 -4
  172. vellum/client/types/execute_workflow_workflow_result_event.py +1 -0
  173. vellum/client/types/execution_array_vellum_value.py +12 -6
  174. vellum/client/types/execution_chat_history_vellum_value.py +3 -3
  175. vellum/client/types/execution_error_vellum_value.py +3 -3
  176. vellum/client/types/execution_function_call_vellum_value.py +3 -3
  177. vellum/client/types/execution_json_vellum_value.py +3 -3
  178. vellum/client/types/execution_number_vellum_value.py +3 -3
  179. vellum/client/types/execution_search_results_vellum_value.py +3 -3
  180. vellum/client/types/execution_string_vellum_value.py +3 -3
  181. vellum/client/types/execution_thinking_vellum_value.py +3 -3
  182. vellum/client/types/execution_vellum_value.py +6 -5
  183. vellum/client/types/external_input_descriptor.py +3 -3
  184. vellum/client/types/external_parent_context.py +11 -11
  185. vellum/client/types/external_test_case_execution.py +10 -4
  186. vellum/client/types/external_test_case_execution_request.py +10 -4
  187. vellum/client/types/fast_embed_vectorizer_baai_bge_small_en_v_15.py +2 -2
  188. vellum/client/types/fast_embed_vectorizer_baai_bge_small_en_v_15_request.py +2 -2
  189. vellum/client/types/folder_entity.py +4 -3
  190. vellum/client/types/folder_entity_dataset.py +3 -3
  191. vellum/client/types/folder_entity_dataset_data.py +3 -3
  192. vellum/client/types/folder_entity_document_index.py +3 -3
  193. vellum/client/types/folder_entity_document_index_data.py +4 -4
  194. vellum/client/types/folder_entity_folder.py +3 -3
  195. vellum/client/types/folder_entity_folder_data.py +2 -2
  196. vellum/client/types/folder_entity_prompt_sandbox.py +3 -3
  197. vellum/client/types/folder_entity_prompt_sandbox_data.py +3 -3
  198. vellum/client/types/folder_entity_test_suite.py +3 -3
  199. vellum/client/types/folder_entity_test_suite_data.py +3 -3
  200. vellum/client/types/folder_entity_workflow_sandbox.py +3 -3
  201. vellum/client/types/folder_entity_workflow_sandbox_data.py +3 -3
  202. vellum/client/types/fulfilled_ad_hoc_execute_prompt_event.py +4 -4
  203. vellum/client/types/fulfilled_execute_prompt_event.py +4 -4
  204. vellum/client/types/fulfilled_execute_prompt_response.py +3 -3
  205. vellum/client/types/fulfilled_execute_workflow_workflow_result_event.py +11 -5
  206. vellum/client/types/fulfilled_prompt_execution_meta.py +3 -3
  207. vellum/client/types/fulfilled_workflow_node_result_event.py +12 -6
  208. vellum/client/types/function_call.py +2 -2
  209. vellum/client/types/function_call_chat_message_content.py +3 -3
  210. vellum/client/types/function_call_chat_message_content_request.py +3 -3
  211. vellum/client/types/function_call_chat_message_content_value.py +2 -2
  212. vellum/client/types/function_call_chat_message_content_value_request.py +2 -2
  213. vellum/client/types/function_call_input.py +3 -3
  214. vellum/client/types/function_call_prompt_block.py +4 -4
  215. vellum/client/types/function_call_request.py +2 -2
  216. vellum/client/types/function_call_vellum_value.py +3 -3
  217. vellum/client/types/function_call_vellum_value_request.py +3 -3
  218. vellum/client/types/function_definition.py +4 -4
  219. vellum/client/types/generate_options_request.py +3 -3
  220. vellum/client/types/generate_request.py +2 -2
  221. vellum/client/types/generate_response.py +3 -3
  222. vellum/client/types/generate_result.py +3 -3
  223. vellum/client/types/generate_result_data.py +3 -3
  224. vellum/client/types/generate_result_error.py +3 -3
  225. vellum/client/types/generate_stream_response.py +3 -3
  226. vellum/client/types/generate_stream_result.py +4 -4
  227. vellum/client/types/generate_stream_result_data.py +3 -3
  228. vellum/client/types/google_vertex_ai_vectorizer_config.py +2 -2
  229. vellum/client/types/google_vertex_ai_vectorizer_config_request.py +2 -2
  230. vellum/client/types/google_vertex_ai_vectorizer_gemini_embedding_001.py +3 -3
  231. vellum/client/types/google_vertex_ai_vectorizer_gemini_embedding_001_request.py +3 -3
  232. vellum/client/types/google_vertex_ai_vectorizer_text_embedding_004.py +3 -3
  233. vellum/client/types/google_vertex_ai_vectorizer_text_embedding_004_request.py +3 -3
  234. vellum/client/types/google_vertex_ai_vectorizer_text_multilingual_embedding_002.py +3 -3
  235. vellum/client/types/google_vertex_ai_vectorizer_text_multilingual_embedding_002_request.py +3 -3
  236. vellum/client/types/hkunlp_instructor_xl_vectorizer.py +3 -3
  237. vellum/client/types/hkunlp_instructor_xl_vectorizer_request.py +3 -3
  238. vellum/client/types/image_chat_message_content.py +3 -3
  239. vellum/client/types/image_chat_message_content_request.py +3 -3
  240. vellum/client/types/image_prompt_block.py +4 -4
  241. vellum/client/types/image_vellum_value.py +3 -3
  242. vellum/client/types/image_vellum_value_request.py +3 -3
  243. vellum/client/types/indexing_config_vectorizer.py +7 -6
  244. vellum/client/types/indexing_config_vectorizer_request.py +7 -6
  245. vellum/client/types/initiated_ad_hoc_execute_prompt_event.py +3 -3
  246. vellum/client/types/initiated_execute_prompt_event.py +3 -3
  247. vellum/client/types/initiated_prompt_execution_meta.py +2 -2
  248. vellum/client/types/initiated_workflow_node_result_event.py +12 -6
  249. vellum/client/types/instructor_vectorizer_config.py +2 -2
  250. vellum/client/types/instructor_vectorizer_config_request.py +2 -2
  251. vellum/client/types/invoked_port.py +2 -2
  252. vellum/client/types/jinja_prompt_block.py +4 -4
  253. vellum/client/types/json_input.py +3 -3
  254. vellum/client/types/json_input_request.py +3 -3
  255. vellum/client/types/json_vellum_value.py +2 -2
  256. vellum/client/types/json_vellum_value_request.py +2 -2
  257. vellum/client/types/map_node_result.py +3 -3
  258. vellum/client/types/map_node_result_data.py +3 -3
  259. vellum/client/types/merge_node_result.py +3 -3
  260. vellum/client/types/merge_node_result_data.py +2 -2
  261. vellum/client/types/metadata_filter_config_request.py +12 -6
  262. vellum/client/types/metadata_filter_rule_request.py +5 -5
  263. vellum/client/types/metadata_filters_request.py +1 -0
  264. vellum/client/types/metric_definition_execution.py +10 -4
  265. vellum/client/types/metric_definition_history_item.py +10 -4
  266. vellum/client/types/metric_definition_input.py +3 -2
  267. vellum/client/types/metric_node_result.py +2 -2
  268. vellum/client/types/ml_model_read.py +6 -3
  269. vellum/client/types/ml_model_usage.py +2 -2
  270. vellum/client/types/ml_model_usage_wrapper.py +3 -3
  271. vellum/client/types/named_scenario_input_chat_history_variable_value_request.py +3 -3
  272. vellum/client/types/named_scenario_input_json_variable_value_request.py +2 -2
  273. vellum/client/types/named_scenario_input_request.py +3 -2
  274. vellum/client/types/named_scenario_input_string_variable_value_request.py +2 -2
  275. vellum/client/types/named_test_case_array_variable_value.py +11 -5
  276. vellum/client/types/named_test_case_array_variable_value_request.py +11 -5
  277. vellum/client/types/named_test_case_chat_history_variable_value.py +3 -3
  278. vellum/client/types/named_test_case_chat_history_variable_value_request.py +3 -3
  279. vellum/client/types/named_test_case_error_variable_value.py +3 -3
  280. vellum/client/types/named_test_case_error_variable_value_request.py +3 -3
  281. vellum/client/types/named_test_case_function_call_variable_value.py +3 -3
  282. vellum/client/types/named_test_case_function_call_variable_value_request.py +3 -3
  283. vellum/client/types/named_test_case_json_variable_value.py +2 -2
  284. vellum/client/types/named_test_case_json_variable_value_request.py +2 -2
  285. vellum/client/types/named_test_case_number_variable_value.py +2 -2
  286. vellum/client/types/named_test_case_number_variable_value_request.py +2 -2
  287. vellum/client/types/named_test_case_search_results_variable_value.py +3 -3
  288. vellum/client/types/named_test_case_search_results_variable_value_request.py +3 -3
  289. vellum/client/types/named_test_case_string_variable_value.py +2 -2
  290. vellum/client/types/named_test_case_string_variable_value_request.py +2 -2
  291. vellum/client/types/named_test_case_variable_value.py +6 -5
  292. vellum/client/types/named_test_case_variable_value_request.py +6 -5
  293. vellum/client/types/node_execution_fulfilled_body.py +4 -4
  294. vellum/client/types/node_execution_fulfilled_event.py +22 -16
  295. vellum/client/types/node_execution_initiated_body.py +3 -3
  296. vellum/client/types/node_execution_initiated_event.py +22 -16
  297. vellum/client/types/node_execution_paused_body.py +3 -3
  298. vellum/client/types/node_execution_paused_event.py +22 -16
  299. vellum/client/types/node_execution_rejected_body.py +4 -4
  300. vellum/client/types/node_execution_rejected_event.py +22 -16
  301. vellum/client/types/node_execution_resumed_body.py +3 -3
  302. vellum/client/types/node_execution_resumed_event.py +22 -16
  303. vellum/client/types/node_execution_span.py +19 -13
  304. vellum/client/types/node_execution_span_attributes.py +2 -2
  305. vellum/client/types/node_execution_streaming_body.py +4 -4
  306. vellum/client/types/node_execution_streaming_event.py +22 -16
  307. vellum/client/types/node_input_compiled_array_value.py +11 -5
  308. vellum/client/types/node_input_compiled_chat_history_value.py +3 -3
  309. vellum/client/types/node_input_compiled_error_value.py +3 -3
  310. vellum/client/types/node_input_compiled_function_call_value.py +3 -3
  311. vellum/client/types/node_input_compiled_json_value.py +2 -2
  312. vellum/client/types/node_input_compiled_number_value.py +2 -2
  313. vellum/client/types/node_input_compiled_search_results_value.py +3 -3
  314. vellum/client/types/node_input_compiled_secret_value.py +3 -3
  315. vellum/client/types/node_input_compiled_string_value.py +2 -2
  316. vellum/client/types/node_input_variable_compiled_value.py +6 -5
  317. vellum/client/types/node_output_compiled_array_value.py +12 -6
  318. vellum/client/types/node_output_compiled_chat_history_value.py +3 -3
  319. vellum/client/types/node_output_compiled_error_value.py +3 -3
  320. vellum/client/types/node_output_compiled_function_call_value.py +3 -3
  321. vellum/client/types/node_output_compiled_json_value.py +3 -3
  322. vellum/client/types/node_output_compiled_number_value.py +3 -3
  323. vellum/client/types/node_output_compiled_search_results_value.py +3 -3
  324. vellum/client/types/node_output_compiled_string_value.py +3 -3
  325. vellum/client/types/node_output_compiled_thinking_value.py +3 -3
  326. vellum/client/types/node_output_compiled_value.py +6 -5
  327. vellum/client/types/node_parent_context.py +12 -12
  328. vellum/client/types/normalized_log_probs.py +3 -3
  329. vellum/client/types/normalized_token_log_probs.py +2 -2
  330. vellum/client/types/number_input.py +3 -3
  331. vellum/client/types/number_vellum_value.py +2 -2
  332. vellum/client/types/number_vellum_value_request.py +2 -2
  333. vellum/client/types/open_ai_vectorizer_config.py +3 -3
  334. vellum/client/types/open_ai_vectorizer_config_request.py +3 -3
  335. vellum/client/types/open_ai_vectorizer_text_embedding_3_large.py +3 -3
  336. vellum/client/types/open_ai_vectorizer_text_embedding_3_large_request.py +3 -3
  337. vellum/client/types/open_ai_vectorizer_text_embedding_3_small.py +3 -3
  338. vellum/client/types/open_ai_vectorizer_text_embedding_3_small_request.py +3 -3
  339. vellum/client/types/open_ai_vectorizer_text_embedding_ada_002.py +3 -3
  340. vellum/client/types/open_ai_vectorizer_text_embedding_ada_002_request.py +3 -3
  341. vellum/client/types/organization_read.py +4 -4
  342. vellum/client/types/paginated_container_image_read_list.py +3 -3
  343. vellum/client/types/paginated_deployment_release_tag_read_list.py +3 -3
  344. vellum/client/types/paginated_document_index_read_list.py +3 -3
  345. vellum/client/types/paginated_folder_entity_list.py +3 -3
  346. vellum/client/types/paginated_slim_deployment_read_list.py +10 -4
  347. vellum/client/types/paginated_slim_document_list.py +3 -3
  348. vellum/client/types/paginated_slim_workflow_deployment_list.py +10 -4
  349. vellum/client/types/paginated_test_suite_run_execution_list.py +10 -4
  350. vellum/client/types/paginated_test_suite_test_case_list.py +10 -4
  351. vellum/client/types/paginated_workflow_release_tag_read_list.py +3 -3
  352. vellum/client/types/paginated_workflow_sandbox_example_list.py +3 -3
  353. vellum/client/types/parent_context.py +5 -5
  354. vellum/client/types/pdf_search_result_meta_source.py +2 -2
  355. vellum/client/types/pdf_search_result_meta_source_request.py +2 -2
  356. vellum/client/types/plain_text_prompt_block.py +4 -4
  357. vellum/client/types/price.py +3 -3
  358. vellum/client/types/prompt_block.py +7 -6
  359. vellum/client/types/prompt_deployment_expand_meta_request.py +2 -2
  360. vellum/client/types/prompt_deployment_input_request.py +3 -2
  361. vellum/client/types/prompt_deployment_parent_context.py +11 -11
  362. vellum/client/types/prompt_deployment_release.py +6 -6
  363. vellum/client/types/prompt_deployment_release_prompt_deployment.py +2 -2
  364. vellum/client/types/prompt_deployment_release_prompt_version.py +4 -4
  365. vellum/client/types/prompt_exec_config.py +15 -9
  366. vellum/client/types/prompt_execution_meta.py +3 -3
  367. vellum/client/types/prompt_node_execution_meta.py +3 -3
  368. vellum/client/types/prompt_node_result.py +3 -3
  369. vellum/client/types/prompt_node_result_data.py +3 -3
  370. vellum/client/types/prompt_output.py +3 -2
  371. vellum/client/types/prompt_parameters.py +2 -2
  372. vellum/client/types/prompt_push_response.py +2 -2
  373. vellum/client/types/prompt_request_chat_history_input.py +3 -3
  374. vellum/client/types/prompt_request_input.py +3 -2
  375. vellum/client/types/prompt_request_json_input.py +3 -3
  376. vellum/client/types/prompt_request_string_input.py +3 -3
  377. vellum/client/types/prompt_settings.py +2 -2
  378. vellum/client/types/prompt_version_build_config_sandbox.py +2 -2
  379. vellum/client/types/raw_prompt_execution_overrides_request.py +2 -2
  380. vellum/client/types/reducto_chunker_config.py +2 -2
  381. vellum/client/types/reducto_chunker_config_request.py +2 -2
  382. vellum/client/types/reducto_chunking.py +3 -3
  383. vellum/client/types/reducto_chunking_request.py +3 -3
  384. vellum/client/types/rejected_ad_hoc_execute_prompt_event.py +4 -4
  385. vellum/client/types/rejected_execute_prompt_event.py +4 -4
  386. vellum/client/types/rejected_execute_prompt_response.py +3 -3
  387. vellum/client/types/rejected_execute_workflow_workflow_result_event.py +4 -4
  388. vellum/client/types/rejected_prompt_execution_meta.py +3 -3
  389. vellum/client/types/rejected_workflow_node_result_event.py +12 -6
  390. vellum/client/types/release_created_by.py +2 -2
  391. vellum/client/types/release_environment.py +2 -2
  392. vellum/client/types/release_release_tag.py +3 -3
  393. vellum/client/types/release_review_reviewer.py +2 -2
  394. vellum/client/types/release_tag_release.py +2 -2
  395. vellum/client/types/replace_test_suite_test_case_request.py +9 -3
  396. vellum/client/types/rich_text_child_block.py +2 -1
  397. vellum/client/types/rich_text_prompt_block.py +4 -4
  398. vellum/client/types/sandbox_scenario.py +3 -3
  399. vellum/client/types/scenario_input.py +3 -2
  400. vellum/client/types/scenario_input_chat_history_variable_value.py +3 -3
  401. vellum/client/types/scenario_input_json_variable_value.py +2 -2
  402. vellum/client/types/scenario_input_string_variable_value.py +2 -2
  403. vellum/client/types/search_filters_request.py +11 -5
  404. vellum/client/types/search_node_result.py +3 -3
  405. vellum/client/types/search_node_result_data.py +3 -3
  406. vellum/client/types/search_request_options_request.py +13 -7
  407. vellum/client/types/search_response.py +3 -3
  408. vellum/client/types/search_result.py +3 -3
  409. vellum/client/types/search_result_document.py +2 -2
  410. vellum/client/types/search_result_document_request.py +2 -2
  411. vellum/client/types/search_result_merging_request.py +2 -2
  412. vellum/client/types/search_result_meta.py +3 -3
  413. vellum/client/types/search_result_meta_request.py +3 -3
  414. vellum/client/types/search_result_request.py +3 -3
  415. vellum/client/types/search_results_input.py +3 -3
  416. vellum/client/types/search_results_vellum_value.py +3 -3
  417. vellum/client/types/search_results_vellum_value_request.py +3 -3
  418. vellum/client/types/search_weights_request.py +2 -2
  419. vellum/client/types/sentence_chunker_config.py +2 -2
  420. vellum/client/types/sentence_chunker_config_request.py +2 -2
  421. vellum/client/types/sentence_chunking.py +3 -3
  422. vellum/client/types/sentence_chunking_request.py +3 -3
  423. vellum/client/types/slim_deployment_read.py +10 -4
  424. vellum/client/types/slim_document.py +5 -5
  425. vellum/client/types/slim_document_document_to_document_index.py +3 -3
  426. vellum/client/types/slim_release_review.py +4 -4
  427. vellum/client/types/slim_workflow_deployment.py +11 -5
  428. vellum/client/types/slim_workflow_execution_read.py +21 -15
  429. vellum/client/types/span_link.py +12 -12
  430. vellum/client/types/streaming_ad_hoc_execute_prompt_event.py +4 -4
  431. vellum/client/types/streaming_execute_prompt_event.py +3 -3
  432. vellum/client/types/streaming_prompt_execution_meta.py +2 -2
  433. vellum/client/types/streaming_workflow_node_result_event.py +12 -6
  434. vellum/client/types/string_chat_message_content.py +2 -2
  435. vellum/client/types/string_chat_message_content_request.py +2 -2
  436. vellum/client/types/string_input.py +3 -3
  437. vellum/client/types/string_input_request.py +3 -3
  438. vellum/client/types/string_vellum_value.py +2 -2
  439. vellum/client/types/string_vellum_value_request.py +2 -2
  440. vellum/client/types/submit_completion_actual_request.py +3 -3
  441. vellum/client/types/submit_workflow_execution_actual_request.py +3 -2
  442. vellum/client/types/subworkflow_node_result.py +3 -3
  443. vellum/client/types/subworkflow_node_result_data.py +2 -2
  444. vellum/client/types/templating_node_array_result.py +11 -5
  445. vellum/client/types/templating_node_chat_history_result.py +3 -3
  446. vellum/client/types/templating_node_error_result.py +3 -3
  447. vellum/client/types/templating_node_function_call_result.py +3 -3
  448. vellum/client/types/templating_node_json_result.py +2 -2
  449. vellum/client/types/templating_node_number_result.py +2 -2
  450. vellum/client/types/templating_node_result.py +10 -4
  451. vellum/client/types/templating_node_result_data.py +10 -4
  452. vellum/client/types/templating_node_result_output.py +6 -5
  453. vellum/client/types/templating_node_search_results_result.py +3 -3
  454. vellum/client/types/templating_node_string_result.py +2 -2
  455. vellum/client/types/terminal_node_array_result.py +11 -5
  456. vellum/client/types/terminal_node_chat_history_result.py +2 -2
  457. vellum/client/types/terminal_node_error_result.py +2 -2
  458. vellum/client/types/terminal_node_function_call_result.py +2 -2
  459. vellum/client/types/terminal_node_json_result.py +2 -2
  460. vellum/client/types/terminal_node_number_result.py +2 -2
  461. vellum/client/types/terminal_node_result.py +10 -4
  462. vellum/client/types/terminal_node_result_data.py +10 -4
  463. vellum/client/types/terminal_node_result_output.py +6 -5
  464. vellum/client/types/terminal_node_search_results_result.py +2 -2
  465. vellum/client/types/terminal_node_string_result.py +2 -2
  466. vellum/client/types/test_case_array_variable_value.py +11 -5
  467. vellum/client/types/test_case_chat_history_variable_value.py +3 -3
  468. vellum/client/types/test_case_error_variable_value.py +3 -3
  469. vellum/client/types/test_case_function_call_variable_value.py +3 -3
  470. vellum/client/types/test_case_json_variable_value.py +2 -2
  471. vellum/client/types/test_case_number_variable_value.py +2 -2
  472. vellum/client/types/test_case_search_results_variable_value.py +3 -3
  473. vellum/client/types/test_case_string_variable_value.py +2 -2
  474. vellum/client/types/test_case_variable_value.py +6 -5
  475. vellum/client/types/test_suite_run_deployment_release_tag_exec_config.py +3 -3
  476. vellum/client/types/test_suite_run_deployment_release_tag_exec_config_data.py +3 -3
  477. vellum/client/types/test_suite_run_deployment_release_tag_exec_config_data_request.py +3 -3
  478. vellum/client/types/test_suite_run_deployment_release_tag_exec_config_request.py +3 -3
  479. vellum/client/types/test_suite_run_exec_config.py +2 -1
  480. vellum/client/types/test_suite_run_exec_config_request.py +2 -1
  481. vellum/client/types/test_suite_run_execution.py +11 -5
  482. vellum/client/types/test_suite_run_execution_array_output.py +11 -5
  483. vellum/client/types/test_suite_run_execution_chat_history_output.py +3 -3
  484. vellum/client/types/test_suite_run_execution_error_output.py +3 -3
  485. vellum/client/types/test_suite_run_execution_function_call_output.py +3 -3
  486. vellum/client/types/test_suite_run_execution_json_output.py +2 -2
  487. vellum/client/types/test_suite_run_execution_metric_definition.py +2 -2
  488. vellum/client/types/test_suite_run_execution_metric_result.py +11 -5
  489. vellum/client/types/test_suite_run_execution_number_output.py +2 -2
  490. vellum/client/types/test_suite_run_execution_output.py +6 -5
  491. vellum/client/types/test_suite_run_execution_search_results_output.py +3 -3
  492. vellum/client/types/test_suite_run_execution_string_output.py +2 -2
  493. vellum/client/types/test_suite_run_external_exec_config.py +10 -4
  494. vellum/client/types/test_suite_run_external_exec_config_data.py +10 -4
  495. vellum/client/types/test_suite_run_external_exec_config_data_request.py +10 -4
  496. vellum/client/types/test_suite_run_external_exec_config_request.py +10 -4
  497. vellum/client/types/test_suite_run_metric_array_output.py +11 -5
  498. vellum/client/types/test_suite_run_metric_error_output.py +3 -3
  499. vellum/client/types/test_suite_run_metric_json_output.py +2 -2
  500. vellum/client/types/test_suite_run_metric_number_output.py +2 -2
  501. vellum/client/types/test_suite_run_metric_output.py +5 -4
  502. vellum/client/types/test_suite_run_metric_string_output.py +2 -2
  503. vellum/client/types/test_suite_run_progress.py +2 -2
  504. vellum/client/types/test_suite_run_prompt_sandbox_exec_config_data_request.py +3 -3
  505. vellum/client/types/test_suite_run_prompt_sandbox_exec_config_request.py +3 -3
  506. vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config.py +3 -3
  507. vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_data.py +3 -3
  508. vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_data_request.py +3 -3
  509. vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_request.py +3 -3
  510. vellum/client/types/test_suite_run_read.py +12 -6
  511. vellum/client/types/test_suite_run_test_suite.py +2 -2
  512. vellum/client/types/test_suite_run_workflow_release_tag_exec_config.py +3 -3
  513. vellum/client/types/test_suite_run_workflow_release_tag_exec_config_data.py +3 -3
  514. vellum/client/types/test_suite_run_workflow_release_tag_exec_config_data_request.py +3 -3
  515. vellum/client/types/test_suite_run_workflow_release_tag_exec_config_request.py +3 -3
  516. vellum/client/types/test_suite_run_workflow_sandbox_exec_config_data_request.py +3 -3
  517. vellum/client/types/test_suite_run_workflow_sandbox_exec_config_request.py +3 -3
  518. vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config.py +3 -3
  519. vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_data.py +3 -3
  520. vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_data_request.py +3 -3
  521. vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_request.py +3 -3
  522. vellum/client/types/test_suite_test_case.py +10 -4
  523. vellum/client/types/test_suite_test_case_bulk_operation_request.py +2 -1
  524. vellum/client/types/test_suite_test_case_bulk_result.py +2 -1
  525. vellum/client/types/test_suite_test_case_create_bulk_operation_request.py +10 -4
  526. vellum/client/types/test_suite_test_case_created_bulk_result.py +3 -3
  527. vellum/client/types/test_suite_test_case_created_bulk_result_data.py +2 -2
  528. vellum/client/types/test_suite_test_case_delete_bulk_operation_data_request.py +2 -2
  529. vellum/client/types/test_suite_test_case_delete_bulk_operation_request.py +3 -3
  530. vellum/client/types/test_suite_test_case_deleted_bulk_result.py +3 -3
  531. vellum/client/types/test_suite_test_case_deleted_bulk_result_data.py +2 -2
  532. vellum/client/types/test_suite_test_case_rejected_bulk_result.py +2 -2
  533. vellum/client/types/test_suite_test_case_replace_bulk_operation_request.py +10 -4
  534. vellum/client/types/test_suite_test_case_replaced_bulk_result.py +3 -3
  535. vellum/client/types/test_suite_test_case_replaced_bulk_result_data.py +2 -2
  536. vellum/client/types/test_suite_test_case_upsert_bulk_operation_request.py +10 -4
  537. vellum/client/types/thinking_vellum_value.py +3 -3
  538. vellum/client/types/thinking_vellum_value_request.py +3 -3
  539. vellum/client/types/token_overlapping_window_chunker_config.py +2 -2
  540. vellum/client/types/token_overlapping_window_chunker_config_request.py +2 -2
  541. vellum/client/types/token_overlapping_window_chunking.py +3 -3
  542. vellum/client/types/token_overlapping_window_chunking_request.py +3 -3
  543. vellum/client/types/upload_document_response.py +3 -3
  544. vellum/client/types/upsert_test_suite_test_case_request.py +9 -3
  545. vellum/client/types/variable_prompt_block.py +4 -4
  546. vellum/client/types/vellum_audio.py +3 -3
  547. vellum/client/types/vellum_audio_request.py +3 -3
  548. vellum/client/types/vellum_code_resource_definition.py +2 -2
  549. vellum/client/types/vellum_document.py +2 -2
  550. vellum/client/types/vellum_document_request.py +2 -2
  551. vellum/client/types/vellum_error.py +3 -3
  552. vellum/client/types/vellum_error_request.py +3 -3
  553. vellum/client/types/vellum_image.py +2 -2
  554. vellum/client/types/vellum_image_request.py +2 -2
  555. vellum/client/types/vellum_node_execution_event.py +4 -3
  556. vellum/client/types/vellum_sdk_error.py +3 -3
  557. vellum/client/types/vellum_secret.py +2 -2
  558. vellum/client/types/vellum_span.py +2 -1
  559. vellum/client/types/vellum_value.py +9 -8
  560. vellum/client/types/vellum_value_logical_condition_group_request.py +6 -6
  561. vellum/client/types/vellum_value_logical_condition_request.py +13 -7
  562. vellum/client/types/vellum_value_logical_expression_request.py +2 -1
  563. vellum/client/types/vellum_value_request.py +9 -8
  564. vellum/client/types/vellum_variable.py +13 -7
  565. vellum/client/types/vellum_variable_extensions.py +2 -2
  566. vellum/client/types/vellum_video.py +3 -3
  567. vellum/client/types/vellum_video_request.py +3 -3
  568. vellum/client/types/vellum_workflow_execution_event.py +4 -3
  569. vellum/client/types/video_chat_message_content.py +3 -3
  570. vellum/client/types/video_chat_message_content_request.py +3 -3
  571. vellum/client/types/video_prompt_block.py +4 -4
  572. vellum/client/types/video_vellum_value.py +3 -3
  573. vellum/client/types/video_vellum_value_request.py +3 -3
  574. vellum/client/types/workflow_deployment_event_executions_response.py +18 -12
  575. vellum/client/types/workflow_deployment_history_item.py +10 -4
  576. vellum/client/types/workflow_deployment_parent_context.py +11 -11
  577. vellum/client/types/workflow_deployment_read.py +11 -5
  578. vellum/client/types/workflow_deployment_release.py +13 -7
  579. vellum/client/types/workflow_deployment_release_workflow_deployment.py +2 -2
  580. vellum/client/types/workflow_deployment_release_workflow_version.py +10 -4
  581. vellum/client/types/workflow_error.py +1 -0
  582. vellum/client/types/workflow_event_error.py +3 -3
  583. vellum/client/types/workflow_event_execution_read.py +22 -16
  584. vellum/client/types/workflow_execution_actual.py +10 -4
  585. vellum/client/types/workflow_execution_actual_chat_history_request.py +2 -2
  586. vellum/client/types/workflow_execution_actual_json_request.py +2 -2
  587. vellum/client/types/workflow_execution_actual_string_request.py +2 -2
  588. vellum/client/types/workflow_execution_detail.py +22 -16
  589. vellum/client/types/workflow_execution_fulfilled_body.py +3 -3
  590. vellum/client/types/workflow_execution_fulfilled_event.py +22 -16
  591. vellum/client/types/workflow_execution_initiated_body.py +3 -3
  592. vellum/client/types/workflow_execution_initiated_event.py +22 -16
  593. vellum/client/types/workflow_execution_node_result_event.py +10 -4
  594. vellum/client/types/workflow_execution_paused_body.py +4 -4
  595. vellum/client/types/workflow_execution_paused_event.py +22 -16
  596. vellum/client/types/workflow_execution_rejected_body.py +4 -4
  597. vellum/client/types/workflow_execution_rejected_event.py +22 -16
  598. vellum/client/types/workflow_execution_resumed_body.py +3 -3
  599. vellum/client/types/workflow_execution_resumed_event.py +22 -16
  600. vellum/client/types/workflow_execution_snapshotted_body.py +3 -3
  601. vellum/client/types/workflow_execution_snapshotted_event.py +22 -16
  602. vellum/client/types/workflow_execution_span.py +18 -12
  603. vellum/client/types/workflow_execution_span_attributes.py +2 -2
  604. vellum/client/types/workflow_execution_streaming_body.py +4 -4
  605. vellum/client/types/workflow_execution_streaming_event.py +22 -16
  606. vellum/client/types/workflow_execution_usage_calculation_error.py +3 -3
  607. vellum/client/types/workflow_execution_usage_calculation_fulfilled_body.py +3 -3
  608. vellum/client/types/workflow_execution_usage_result.py +3 -3
  609. vellum/client/types/workflow_execution_view_online_eval_metric_result.py +10 -4
  610. vellum/client/types/workflow_execution_workflow_result_event.py +10 -4
  611. vellum/client/types/workflow_expand_meta_request.py +2 -2
  612. vellum/client/types/workflow_initialization_error.py +2 -2
  613. vellum/client/types/workflow_node_result_data.py +8 -7
  614. vellum/client/types/workflow_node_result_event.py +3 -2
  615. vellum/client/types/workflow_output.py +6 -5
  616. vellum/client/types/workflow_output_array.py +12 -6
  617. vellum/client/types/workflow_output_chat_history.py +3 -3
  618. vellum/client/types/workflow_output_error.py +3 -3
  619. vellum/client/types/workflow_output_function_call.py +3 -3
  620. vellum/client/types/workflow_output_image.py +3 -3
  621. vellum/client/types/workflow_output_json.py +3 -3
  622. vellum/client/types/workflow_output_number.py +3 -3
  623. vellum/client/types/workflow_output_search_results.py +3 -3
  624. vellum/client/types/workflow_output_string.py +3 -3
  625. vellum/client/types/workflow_parent_context.py +12 -12
  626. vellum/client/types/workflow_push_deployment_config_request.py +2 -2
  627. vellum/client/types/workflow_push_response.py +2 -2
  628. vellum/client/types/workflow_release_tag_read.py +4 -4
  629. vellum/client/types/workflow_release_tag_workflow_deployment_history_item.py +2 -2
  630. vellum/client/types/workflow_request_chat_history_input_request.py +3 -3
  631. vellum/client/types/workflow_request_input_request.py +3 -2
  632. vellum/client/types/workflow_request_json_input_request.py +3 -3
  633. vellum/client/types/workflow_request_number_input_request.py +3 -3
  634. vellum/client/types/workflow_request_string_input_request.py +3 -3
  635. vellum/client/types/workflow_result_event.py +13 -7
  636. vellum/client/types/workflow_result_event_output_data.py +7 -6
  637. vellum/client/types/workflow_result_event_output_data_array.py +12 -6
  638. vellum/client/types/workflow_result_event_output_data_chat_history.py +3 -3
  639. vellum/client/types/workflow_result_event_output_data_error.py +3 -3
  640. vellum/client/types/workflow_result_event_output_data_function_call.py +3 -3
  641. vellum/client/types/workflow_result_event_output_data_json.py +3 -3
  642. vellum/client/types/workflow_result_event_output_data_number.py +3 -3
  643. vellum/client/types/workflow_result_event_output_data_search_results.py +3 -3
  644. vellum/client/types/workflow_result_event_output_data_string.py +3 -3
  645. vellum/client/types/workflow_sandbox_example.py +2 -2
  646. vellum/client/types/workflow_sandbox_parent_context.py +11 -11
  647. vellum/client/types/workflow_stream_event.py +2 -1
  648. vellum/client/types/workspace_read.py +3 -3
  649. vellum/client/types/workspace_secret_read.py +3 -3
  650. vellum/core/force_multipart.py +3 -0
  651. vellum/workflows/emitters/vellum_emitter.py +5 -0
  652. vellum/workflows/events/node.py +25 -10
  653. vellum/workflows/events/tests/test_event.py +19 -19
  654. vellum/workflows/state/context.py +8 -52
  655. vellum/workflows/state/encoder.py +2 -4
  656. vellum/workflows/utils/functions.py +1 -1
  657. vellum/workflows/workflows/base.py +1 -1
  658. {vellum_ai-1.1.3.dist-info → vellum_ai-1.1.5.dist-info}/METADATA +2 -2
  659. {vellum_ai-1.1.3.dist-info → vellum_ai-1.1.5.dist-info}/RECORD +671 -669
  660. vellum_ee/workflows/display/nodes/base_node_display.py +3 -3
  661. vellum_ee/workflows/display/nodes/tests/test_base_node_display.py +1 -1
  662. vellum_ee/workflows/display/nodes/vellum/tests/test_tool_calling_node.py +154 -0
  663. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +50 -0
  664. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py +4 -1
  665. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py +4 -1
  666. vellum_ee/workflows/display/types.py +13 -2
  667. vellum_ee/workflows/display/workflows/base_workflow_display.py +15 -0
  668. vellum_ee/workflows/display/workflows/tests/test_workflow_display.py +44 -2
  669. {vellum_ai-1.1.3.dist-info → vellum_ai-1.1.5.dist-info}/LICENSE +0 -0
  670. {vellum_ai-1.1.3.dist-info → vellum_ai-1.1.5.dist-info}/WHEEL +0 -0
  671. {vellum_ai-1.1.3.dist-info → vellum_ai-1.1.5.dist-info}/entry_points.txt +0 -0
@@ -417,8 +417,8 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
417
417
  if explicit_value and explicit_value.comment and docstring:
418
418
  comment = (
419
419
  NodeDisplayComment(value=docstring, expanded=explicit_value.comment.expanded)
420
- if explicit_value.comment.expanded
421
- else NodeDisplayComment(value=docstring)
420
+ if explicit_value.comment.expanded is not None
421
+ else NodeDisplayComment(value=docstring, expanded=True)
422
422
  )
423
423
  return NodeDisplayData(
424
424
  position=explicit_value.position,
@@ -432,7 +432,7 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
432
432
 
433
433
  if docstring:
434
434
  return NodeDisplayData(
435
- comment=NodeDisplayComment(value=docstring),
435
+ comment=NodeDisplayComment(value=docstring, expanded=True),
436
436
  )
437
437
 
438
438
  return NodeDisplayData()
@@ -98,5 +98,5 @@ def test_serialize_display_data():
98
98
  # THEN the condition should be serialized correctly
99
99
  assert data["display_data"] == {
100
100
  "position": {"x": 0.0, "y": 0.0},
101
- "comment": {"value": "I hope this works"},
101
+ "comment": {"expanded": True, "value": "I hope this works"},
102
102
  }
@@ -1,9 +1,13 @@
1
+ from vellum.client.types.prompt_parameters import PromptParameters
1
2
  from vellum.workflows import BaseWorkflow
2
3
  from vellum.workflows.inputs import BaseInputs
3
4
  from vellum.workflows.nodes.displayable.inline_prompt_node.node import InlinePromptNode
4
5
  from vellum.workflows.nodes.displayable.tool_calling_node.node import ToolCallingNode
6
+ from vellum.workflows.nodes.displayable.tool_calling_node.state import ToolCallingState
7
+ from vellum.workflows.nodes.displayable.tool_calling_node.utils import create_router_node, create_tool_prompt_node
5
8
  from vellum.workflows.state.base import BaseState
6
9
  from vellum.workflows.types.definition import AuthorizationType, EnvironmentVariableReference, MCPServer
10
+ from vellum_ee.workflows.display.nodes.get_node_display_class import get_node_display_class
7
11
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
8
12
 
9
13
 
@@ -178,3 +182,153 @@ def test_serialize_node__tool_calling_node__mcp_server_api_key():
178
182
  },
179
183
  },
180
184
  }
185
+
186
+
187
+ def test_serialize_tool_router_node():
188
+ """
189
+ Test that the tool router node created by create_router_node serializes successfully.
190
+ """
191
+
192
+ # GIVEN a simple function for tool calling
193
+ def my_function(arg1: str) -> str:
194
+ return f"Result: {arg1}"
195
+
196
+ tool_prompt_node = create_tool_prompt_node(
197
+ ml_model="gpt-4o-mini",
198
+ blocks=[],
199
+ functions=[my_function],
200
+ prompt_inputs=None,
201
+ parameters=PromptParameters(),
202
+ )
203
+
204
+ # WHEN we create a router node using create_router_node
205
+ router_node = create_router_node(
206
+ functions=[my_function],
207
+ tool_prompt_node=tool_prompt_node,
208
+ )
209
+
210
+ router_node_display_class = get_node_display_class(router_node)
211
+ router_node_display = router_node_display_class()
212
+
213
+ class Workflow(BaseWorkflow[BaseInputs, ToolCallingState]):
214
+ graph = tool_prompt_node >> router_node
215
+
216
+ workflow_display = get_workflow_display(workflow_class=Workflow)
217
+ display_context = workflow_display.display_context
218
+
219
+ # WHEN we serialize the router node
220
+ serialized_router_node = router_node_display.serialize(display_context)
221
+
222
+ # THEN the router node should serialize to the exact expected structure
223
+ assert serialized_router_node == {
224
+ "adornments": None,
225
+ "attributes": [
226
+ {
227
+ "id": "cd208919-c66b-451b-a739-bcf7d3451dea",
228
+ "name": "prompt_outputs",
229
+ "value": {
230
+ "node_id": "19e664fc-3b57-48d2-b47a-b143b475406a",
231
+ "node_output_id": "c2a5a7f7-a234-45dc-adee-bc6fc0bd28dd",
232
+ "type": "NODE_OUTPUT",
233
+ },
234
+ }
235
+ ],
236
+ "base": {
237
+ "module": ["vellum", "workflows", "nodes", "displayable", "tool_calling_node", "utils"],
238
+ "name": "RouterNode",
239
+ },
240
+ "definition": {
241
+ "module": ["vellum", "workflows", "nodes", "displayable", "tool_calling_node", "utils"],
242
+ "name": "RouterNode",
243
+ },
244
+ "display_data": {"position": {"x": 0.0, "y": 0.0}},
245
+ "id": "690c66e1-1e18-4984-b695-84beb0157541",
246
+ "label": "RouterNode",
247
+ "outputs": [],
248
+ "ports": [
249
+ {
250
+ "expression": {
251
+ "lhs": {
252
+ "lhs": {
253
+ "lhs": {
254
+ "state_variable_id": "0dd7f5a1-1d73-4153-9191-ca828ace4920",
255
+ "type": "WORKFLOW_STATE",
256
+ },
257
+ "operator": "<",
258
+ "rhs": {
259
+ "lhs": {
260
+ "node_id": "19e664fc-3b57-48d2-b47a-b143b475406a",
261
+ "node_output_id": "c2a5a7f7-a234-45dc-adee-bc6fc0bd28dd",
262
+ "type": "NODE_OUTPUT",
263
+ },
264
+ "operator": "length",
265
+ "type": "UNARY_EXPRESSION",
266
+ },
267
+ "type": "BINARY_EXPRESSION",
268
+ },
269
+ "operator": "and",
270
+ "rhs": {
271
+ "lhs": {
272
+ "lhs": {
273
+ "lhs": {
274
+ "node_id": "19e664fc-3b57-48d2-b47a-b143b475406a",
275
+ "node_output_id": "c2a5a7f7-a234-45dc-adee-bc6fc0bd28dd",
276
+ "type": "NODE_OUTPUT",
277
+ },
278
+ "operator": "accessField",
279
+ "rhs": {
280
+ "state_variable_id": "0dd7f5a1-1d73-4153-9191-ca828ace4920",
281
+ "type": "WORKFLOW_STATE",
282
+ },
283
+ "type": "BINARY_EXPRESSION",
284
+ },
285
+ "operator": "accessField",
286
+ "rhs": {"type": "CONSTANT_VALUE", "value": {"type": "STRING", "value": "type"}},
287
+ "type": "BINARY_EXPRESSION",
288
+ },
289
+ "operator": "=",
290
+ "rhs": {"type": "CONSTANT_VALUE", "value": {"type": "STRING", "value": "FUNCTION_CALL"}},
291
+ "type": "BINARY_EXPRESSION",
292
+ },
293
+ "type": "BINARY_EXPRESSION",
294
+ },
295
+ "operator": "and",
296
+ "rhs": {
297
+ "lhs": {
298
+ "lhs": {
299
+ "lhs": {
300
+ "lhs": {
301
+ "node_id": "19e664fc-3b57-48d2-b47a-b143b475406a",
302
+ "node_output_id": "c2a5a7f7-a234-45dc-adee-bc6fc0bd28dd",
303
+ "type": "NODE_OUTPUT",
304
+ },
305
+ "operator": "accessField",
306
+ "rhs": {
307
+ "state_variable_id": "0dd7f5a1-1d73-4153-9191-ca828ace4920",
308
+ "type": "WORKFLOW_STATE",
309
+ },
310
+ "type": "BINARY_EXPRESSION",
311
+ },
312
+ "operator": "accessField",
313
+ "rhs": {"type": "CONSTANT_VALUE", "value": {"type": "STRING", "value": "value"}},
314
+ "type": "BINARY_EXPRESSION",
315
+ },
316
+ "operator": "accessField",
317
+ "rhs": {"type": "CONSTANT_VALUE", "value": {"type": "STRING", "value": "name"}},
318
+ "type": "BINARY_EXPRESSION",
319
+ },
320
+ "operator": "=",
321
+ "rhs": {"type": "CONSTANT_VALUE", "value": {"type": "STRING", "value": "my_function"}},
322
+ "type": "BINARY_EXPRESSION",
323
+ },
324
+ "type": "BINARY_EXPRESSION",
325
+ },
326
+ "id": "afb4b09d-659b-459e-9a28-cf73ba6e0574",
327
+ "name": "my_function",
328
+ "type": "IF",
329
+ },
330
+ {"expression": None, "id": "4ecd916e-b5d0-407e-aab4-35551c76d02c", "name": "default", "type": "ELSE"},
331
+ ],
332
+ "trigger": {"id": "73a96f44-c2dd-40cc-96f6-49b9f914b166", "merge_behavior": "AWAIT_ATTRIBUTES"},
333
+ "type": "GENERIC",
334
+ }
@@ -670,3 +670,53 @@ def test_serialize_node__pydantic_with_node_output_reference(serialize_node):
670
670
  assert any(
671
671
  entry["key"] == "node_ref" and entry["value"]["type"] == "NODE_OUTPUT" for entry in attr_value["entries"]
672
672
  )
673
+
674
+
675
+ def test_serialize_node__comment_expanded_true_when_content_exists(serialize_node):
676
+ """
677
+ Tests that node comment serialization sets expanded=True when comment has content.
678
+ """
679
+
680
+ class NodeWithComment(BaseNode):
681
+ """This is a test comment for the node."""
682
+
683
+ pass
684
+
685
+ serialized_node = serialize_node(NodeWithComment)
686
+
687
+ # WHEN the node is serialized
688
+ display_data = serialized_node["display_data"]
689
+
690
+ # THEN the comment should have expanded=True
691
+ assert "comment" in display_data
692
+ assert display_data["comment"]["value"] == "This is a test comment for the node."
693
+ assert display_data["comment"]["expanded"] is True
694
+
695
+
696
+ def test_serialize_node__comment_expanded_preserved_when_explicitly_set(serialize_node):
697
+ """
698
+ Tests that explicitly set expanded value is preserved during serialization.
699
+ """
700
+ from vellum_ee.workflows.display.editor.types import NodeDisplayComment, NodeDisplayData
701
+ from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
702
+
703
+ class NodeWithExplicitComment(BaseNode):
704
+ """This is a test comment."""
705
+
706
+ pass
707
+
708
+ class NodeWithExplicitCommentDisplay(BaseNodeDisplay[NodeWithExplicitComment]):
709
+ display_data = NodeDisplayData(comment=NodeDisplayComment(value="Custom comment", expanded=False))
710
+
711
+ serialized_node = serialize_node(
712
+ NodeWithExplicitComment,
713
+ global_node_displays={NodeWithExplicitComment: NodeWithExplicitCommentDisplay()},
714
+ )
715
+
716
+ # WHEN the node is serialized
717
+ display_data = serialized_node["display_data"]
718
+
719
+ # THEN the comment should preserve expanded=False
720
+ assert "comment" in display_data
721
+ assert display_data["comment"]["value"] == "This is a test comment."
722
+ assert display_data["comment"]["expanded"] is False
@@ -44,7 +44,10 @@ def test_serialize_workflow():
44
44
  "type": "GENERIC",
45
45
  "display_data": {
46
46
  "position": {"x": 200.0, "y": -50.0},
47
- "comment": {"value": "\n A tool calling node that calls the get_current_weather function.\n "},
47
+ "comment": {
48
+ "expanded": True,
49
+ "value": "\n A tool calling node that calls the get_current_weather function.\n ",
50
+ },
48
51
  },
49
52
  "base": {
50
53
  "name": "ToolCallingNode",
@@ -44,7 +44,10 @@ def test_serialize_workflow():
44
44
  "type": "GENERIC",
45
45
  "display_data": {
46
46
  "position": {"x": 200.0, "y": -50.0},
47
- "comment": {"value": "\n A tool calling node that calls the get_current_weather function.\n "},
47
+ "comment": {
48
+ "expanded": True,
49
+ "value": "\n A tool calling node that calls the get_current_weather function.\n ",
50
+ },
48
51
  },
49
52
  "base": {
50
53
  "name": "ToolCallingNode",
@@ -1,5 +1,5 @@
1
1
  from dataclasses import dataclass, field
2
- from typing import TYPE_CHECKING, Dict, Iterator, List, Tuple, Type
2
+ from typing import TYPE_CHECKING, Dict, Iterator, List, Optional, Tuple, Type
3
3
 
4
4
  from vellum.client import Vellum as VellumClient
5
5
  from vellum.workflows.descriptors.base import BaseDescriptor
@@ -52,15 +52,26 @@ class WorkflowDisplayContext:
52
52
  edge_displays: EdgeDisplays = field(default_factory=dict)
53
53
  port_displays: PortDisplays = field(default_factory=dict)
54
54
  _errors: List[Exception] = field(default_factory=list)
55
+ _invalid_nodes: List[Type[BaseNode]] = field(default_factory=list)
55
56
  _dry_run: bool = False
56
57
 
57
- def add_error(self, error: Exception) -> None:
58
+ def add_error(self, error: Exception, node: Optional[Type[BaseNode]] = None) -> None:
58
59
  if self._dry_run:
59
60
  self._errors.append(error)
60
61
  return
61
62
 
62
63
  raise error
63
64
 
65
+ def add_invalid_node(self, node: Type[BaseNode]) -> None:
66
+ """Track a node that failed to serialize."""
67
+ if node not in self._invalid_nodes:
68
+ self._invalid_nodes.append(node)
69
+
64
70
  @property
65
71
  def errors(self) -> Iterator[Exception]:
66
72
  return iter(self._errors)
73
+
74
+ @property
75
+ def invalid_nodes(self) -> Iterator[Type[BaseNode]]:
76
+ """Get an iterator over nodes that failed to serialize."""
77
+ return iter(self._invalid_nodes)
@@ -194,6 +194,7 @@ class BaseWorkflowDisplay(Generic[WorkflowType]):
194
194
  serialized_node = node_display.serialize(self.display_context)
195
195
  except (NotImplementedError, NodeValidationError) as e:
196
196
  self.display_context.add_error(e)
197
+ self.display_context.add_invalid_node(node)
197
198
  continue
198
199
 
199
200
  serialized_nodes[node_display.node_id] = serialized_node
@@ -319,6 +320,10 @@ class BaseWorkflowDisplay(Generic[WorkflowType]):
319
320
  # Add an edge for each edge in the workflow
320
321
  for target_node, entrypoint_display in self.display_context.entrypoint_displays.items():
321
322
  unadorned_target_node = get_unadorned_node(target_node)
323
+ # Skip edges to invalid nodes
324
+ if self._is_node_invalid(unadorned_target_node):
325
+ continue
326
+
322
327
  target_node_display = self.display_context.node_displays[unadorned_target_node]
323
328
  edges.append(
324
329
  {
@@ -335,6 +340,12 @@ class BaseWorkflowDisplay(Generic[WorkflowType]):
335
340
  unadorned_source_node_port = get_unadorned_port(source_node_port)
336
341
  unadorned_target_node = get_unadorned_node(target_node)
337
342
 
343
+ # Skip edges that reference invalid nodes
344
+ if self._is_node_invalid(unadorned_target_node) or self._is_node_invalid(
345
+ unadorned_source_node_port.node_class
346
+ ):
347
+ continue
348
+
338
349
  source_node_port_display = self.display_context.port_displays[unadorned_source_node_port]
339
350
  target_node_display = self.display_context.node_displays[unadorned_target_node]
340
351
 
@@ -939,5 +950,9 @@ class BaseWorkflowDisplay(Generic[WorkflowType]):
939
950
  is_required = not has_default and not is_optional
940
951
  return is_required
941
952
 
953
+ def _is_node_invalid(self, node: Type[BaseNode]) -> bool:
954
+ """Check if a node failed to serialize and should be considered invalid."""
955
+ return node in self.display_context.invalid_nodes
956
+
942
957
 
943
958
  register_workflow_display_class(workflow_class=BaseWorkflow, workflow_display_class=BaseWorkflowDisplay)
@@ -1,6 +1,6 @@
1
1
  import pytest
2
- from uuid import uuid4
3
- from typing import Optional
2
+ from uuid import UUID, uuid4
3
+ from typing import Any, Optional
4
4
 
5
5
  from vellum.workflows.inputs import BaseInputs
6
6
  from vellum.workflows.nodes.bases.base import BaseNode
@@ -11,11 +11,13 @@ from vellum.workflows.nodes.core.try_node.node import TryNode
11
11
  from vellum.workflows.nodes.displayable.final_output_node.node import FinalOutputNode
12
12
  from vellum.workflows.references.lazy import LazyReference
13
13
  from vellum.workflows.state.base import BaseState
14
+ from vellum.workflows.types.core import JsonObject
14
15
  from vellum.workflows.workflows.base import BaseWorkflow
15
16
  from vellum_ee.workflows.display.editor.types import NodeDisplayData, NodeDisplayPosition
16
17
  from vellum_ee.workflows.display.nodes import BaseNodeDisplay
17
18
  from vellum_ee.workflows.display.nodes.vellum.retry_node import BaseRetryNodeDisplay
18
19
  from vellum_ee.workflows.display.nodes.vellum.try_node import BaseTryNodeDisplay
20
+ from vellum_ee.workflows.display.types import WorkflowDisplayContext
19
21
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
20
22
 
21
23
 
@@ -955,3 +957,43 @@ def test_serialize_workflow__state_variables():
955
957
  "required": False,
956
958
  "extensions": {"color": None},
957
959
  }
960
+
961
+
962
+ def test_serialize_workflow__with_complete_node_failure_prunes_edges():
963
+ """Test that edges are pruned when a node completely fails to serialize (serialized_node is null)."""
964
+
965
+ # GIVEN a node that completely fails to serialize
966
+ class FailingNode(BaseNode):
967
+ class Outputs(BaseNode.Outputs):
968
+ result: str
969
+
970
+ class FailingNodeDisplay(BaseNodeDisplay[FailingNode]):
971
+ def serialize(
972
+ self, display_context: WorkflowDisplayContext, error_output_id: Optional[UUID] = None, **kwargs: Any
973
+ ) -> JsonObject:
974
+ raise NotImplementedError("Complete node serialization failure")
975
+
976
+ # AND a workflow with the failing node connected to another node
977
+ class WorkingNode(BaseNode):
978
+ class Outputs(BaseNode.Outputs):
979
+ value: str
980
+
981
+ class Workflow(BaseWorkflow):
982
+ graph = FailingNode >> WorkingNode
983
+
984
+ # WHEN we serialize the workflow with dry_run=True
985
+ workflow_display = get_workflow_display(workflow_class=Workflow, dry_run=True)
986
+
987
+ # AND we register the failing display class
988
+ workflow_display.display_context.node_displays[FailingNode] = FailingNodeDisplay()
989
+
990
+ data: dict = workflow_display.serialize()
991
+
992
+ # THEN the workflow should serialize but with no edges (pruned due to invalid node)
993
+ assert data["workflow_raw_data"]["edges"] == []
994
+
995
+ # AND only the working node and entrypoint should be in the serialized nodes
996
+ assert len(data["workflow_raw_data"]["nodes"]) == 2
997
+ node_types = [node["type"] for node in data["workflow_raw_data"]["nodes"]]
998
+ assert "ENTRYPOINT" in node_types
999
+ assert "GENERIC" in node_types # This is the WorkingNode that should still be serialized