vellum-ai 0.14.63__py3-none-any.whl → 1.13.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.

Potentially problematic release.


This version of vellum-ai might be problematic. Click here for more details.

Files changed (1362) hide show
  1. vellum/__init__.py +287 -4
  2. vellum/client/README.md +69 -16
  3. vellum/client/__init__.py +598 -1437
  4. vellum/client/core/__init__.py +5 -0
  5. vellum/client/core/api_error.py +13 -5
  6. vellum/client/core/client_wrapper.py +30 -4
  7. vellum/client/core/force_multipart.py +18 -0
  8. vellum/client/core/http_client.py +70 -26
  9. vellum/client/core/http_response.py +55 -0
  10. vellum/client/core/jsonable_encoder.py +0 -1
  11. vellum/client/core/pydantic_utilities.py +90 -117
  12. vellum/client/core/serialization.py +7 -3
  13. vellum/client/errors/__init__.py +14 -1
  14. vellum/client/errors/bad_request_error.py +4 -3
  15. vellum/client/errors/forbidden_error.py +4 -3
  16. vellum/client/errors/internal_server_error.py +4 -3
  17. vellum/client/errors/misdirected_request_error.py +11 -0
  18. vellum/client/errors/not_found_error.py +4 -3
  19. vellum/client/errors/too_many_requests_error.py +10 -0
  20. vellum/client/errors/unauthorized_error.py +11 -0
  21. vellum/client/raw_client.py +2725 -0
  22. vellum/client/reference.md +3160 -1217
  23. vellum/client/resources/__init__.py +16 -2
  24. vellum/client/resources/ad_hoc/__init__.py +2 -0
  25. vellum/client/resources/ad_hoc/client.py +173 -377
  26. vellum/client/resources/ad_hoc/raw_client.py +569 -0
  27. vellum/client/resources/container_images/__init__.py +2 -0
  28. vellum/client/resources/container_images/client.py +365 -185
  29. vellum/client/resources/container_images/raw_client.py +693 -0
  30. vellum/client/resources/deployments/__init__.py +2 -0
  31. vellum/client/resources/deployments/client.py +119 -463
  32. vellum/client/resources/deployments/raw_client.py +1002 -0
  33. vellum/client/resources/deployments/types/__init__.py +2 -0
  34. vellum/client/resources/document_indexes/__init__.py +2 -0
  35. vellum/client/resources/document_indexes/client.py +131 -383
  36. vellum/client/resources/document_indexes/raw_client.py +866 -0
  37. vellum/client/resources/document_indexes/types/__init__.py +2 -0
  38. vellum/client/resources/documents/__init__.py +2 -0
  39. vellum/client/resources/documents/client.py +111 -333
  40. vellum/client/resources/documents/raw_client.py +672 -0
  41. vellum/client/resources/{release_reviews → environments}/__init__.py +2 -0
  42. vellum/client/resources/environments/client.py +106 -0
  43. vellum/client/resources/environments/raw_client.py +95 -0
  44. vellum/client/resources/events/__init__.py +4 -0
  45. vellum/client/resources/events/client.py +201 -0
  46. vellum/client/resources/events/raw_client.py +211 -0
  47. vellum/client/resources/folder_entities/__init__.py +2 -0
  48. vellum/client/resources/folder_entities/client.py +56 -95
  49. vellum/client/resources/folder_entities/raw_client.py +276 -0
  50. vellum/client/resources/folder_entities/types/__init__.py +2 -0
  51. vellum/client/resources/integration_auth_configs/__init__.py +4 -0
  52. vellum/client/resources/integration_auth_configs/client.py +188 -0
  53. vellum/client/resources/integration_auth_configs/raw_client.py +173 -0
  54. vellum/client/resources/integration_providers/__init__.py +4 -0
  55. vellum/client/resources/integration_providers/client.py +325 -0
  56. vellum/client/resources/integration_providers/raw_client.py +299 -0
  57. vellum/client/resources/integrations/__init__.py +4 -0
  58. vellum/client/resources/integrations/client.py +514 -0
  59. vellum/client/resources/integrations/raw_client.py +618 -0
  60. vellum/client/resources/metric_definitions/__init__.py +2 -0
  61. vellum/client/resources/metric_definitions/client.py +60 -106
  62. vellum/client/resources/metric_definitions/raw_client.py +224 -0
  63. vellum/client/resources/ml_models/__init__.py +2 -0
  64. vellum/client/resources/ml_models/client.py +37 -46
  65. vellum/client/resources/ml_models/raw_client.py +102 -0
  66. vellum/client/resources/organizations/__init__.py +2 -0
  67. vellum/client/resources/organizations/client.py +37 -45
  68. vellum/client/resources/organizations/raw_client.py +95 -0
  69. vellum/client/resources/prompts/__init__.py +2 -0
  70. vellum/client/resources/prompts/client.py +84 -202
  71. vellum/client/resources/prompts/raw_client.py +353 -0
  72. vellum/client/resources/sandboxes/__init__.py +2 -0
  73. vellum/client/resources/sandboxes/client.py +69 -159
  74. vellum/client/resources/sandboxes/raw_client.py +392 -0
  75. vellum/client/resources/test_suite_runs/__init__.py +2 -0
  76. vellum/client/resources/test_suite_runs/client.py +65 -157
  77. vellum/client/resources/test_suite_runs/raw_client.py +354 -0
  78. vellum/client/resources/test_suites/__init__.py +2 -0
  79. vellum/client/resources/test_suites/client.py +162 -266
  80. vellum/client/resources/test_suites/raw_client.py +530 -0
  81. vellum/client/resources/uploaded_files/__init__.py +4 -0
  82. vellum/client/resources/uploaded_files/client.py +230 -0
  83. vellum/client/resources/uploaded_files/raw_client.py +316 -0
  84. vellum/client/resources/workflow_deployments/__init__.py +2 -0
  85. vellum/client/resources/workflow_deployments/client.py +456 -351
  86. vellum/client/resources/workflow_deployments/raw_client.py +1393 -0
  87. vellum/client/resources/workflow_deployments/types/__init__.py +2 -0
  88. vellum/client/resources/workflow_executions/__init__.py +4 -0
  89. vellum/client/resources/workflow_executions/client.py +140 -0
  90. vellum/client/resources/workflow_executions/raw_client.py +173 -0
  91. vellum/client/resources/workflow_sandboxes/__init__.py +2 -0
  92. vellum/client/resources/workflow_sandboxes/client.py +58 -123
  93. vellum/client/resources/workflow_sandboxes/raw_client.py +291 -0
  94. vellum/client/resources/workflow_sandboxes/types/__init__.py +2 -0
  95. vellum/client/resources/workflows/__init__.py +2 -0
  96. vellum/client/resources/workflows/client.py +464 -145
  97. vellum/client/resources/workflows/raw_client.py +884 -0
  98. vellum/client/resources/workspace_secrets/__init__.py +2 -0
  99. vellum/client/resources/workspace_secrets/client.py +43 -100
  100. vellum/client/resources/workspace_secrets/raw_client.py +219 -0
  101. vellum/client/resources/workspaces/__init__.py +2 -0
  102. vellum/client/resources/workspaces/client.py +37 -45
  103. vellum/client/resources/workspaces/raw_client.py +95 -0
  104. vellum/client/tests/__init__.py +0 -0
  105. vellum/client/tests/test_utils.py +34 -0
  106. vellum/client/types/__init__.py +260 -0
  107. vellum/client/types/ad_hoc_execute_prompt_event.py +3 -2
  108. vellum/client/types/ad_hoc_expand_meta.py +2 -2
  109. vellum/client/types/ad_hoc_fulfilled_prompt_execution_meta.py +3 -3
  110. vellum/client/types/ad_hoc_initiated_prompt_execution_meta.py +2 -2
  111. vellum/client/types/ad_hoc_rejected_prompt_execution_meta.py +3 -3
  112. vellum/client/types/ad_hoc_streaming_prompt_execution_meta.py +2 -2
  113. vellum/client/types/api_actor_type_enum.py +7 -0
  114. vellum/client/types/api_node_result.py +3 -3
  115. vellum/client/types/api_node_result_data.py +4 -4
  116. vellum/client/types/api_request_parent_context.py +17 -10
  117. vellum/client/types/api_version_enum.py +1 -1
  118. vellum/client/types/array_chat_message_content.py +3 -3
  119. vellum/client/types/array_chat_message_content_item.py +7 -4
  120. vellum/client/types/array_chat_message_content_item_request.py +7 -4
  121. vellum/client/types/array_chat_message_content_request.py +3 -3
  122. vellum/client/types/array_input.py +12 -6
  123. vellum/client/types/array_vellum_value.py +4 -4
  124. vellum/client/types/array_vellum_value_request.py +4 -4
  125. vellum/client/types/audio_chat_message_content.py +3 -3
  126. vellum/client/types/audio_chat_message_content_request.py +3 -3
  127. vellum/client/types/audio_input.py +30 -0
  128. vellum/client/types/audio_input_request.py +30 -0
  129. vellum/client/types/audio_prompt_block.py +4 -4
  130. vellum/client/types/audio_vellum_value.py +3 -3
  131. vellum/client/types/audio_vellum_value_request.py +3 -3
  132. vellum/client/types/auth_type_enum.py +5 -0
  133. vellum/client/types/base_output.py +4 -4
  134. vellum/client/types/basic_vectorizer_intfloat_multilingual_e_5_large.py +2 -2
  135. vellum/client/types/basic_vectorizer_intfloat_multilingual_e_5_large_request.py +2 -2
  136. vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_cos_v_1.py +2 -2
  137. vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_cos_v_1_request.py +2 -2
  138. vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_dot_v_1.py +2 -2
  139. vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_dot_v_1_request.py +2 -2
  140. vellum/client/types/build_status_enum.py +5 -0
  141. vellum/client/types/chat_history_input.py +3 -3
  142. vellum/client/types/chat_history_input_request.py +3 -3
  143. vellum/client/types/chat_history_vellum_value.py +3 -3
  144. vellum/client/types/chat_history_vellum_value_request.py +3 -3
  145. vellum/client/types/chat_message.py +4 -4
  146. vellum/client/types/chat_message_content.py +7 -4
  147. vellum/client/types/chat_message_content_request.py +7 -4
  148. vellum/client/types/chat_message_prompt_block.py +7 -7
  149. vellum/client/types/chat_message_request.py +4 -4
  150. vellum/client/types/check_workflow_execution_status_error.py +21 -0
  151. vellum/client/types/check_workflow_execution_status_response.py +29 -0
  152. vellum/client/types/code_execution_node_array_result.py +11 -5
  153. vellum/client/types/code_execution_node_chat_history_result.py +3 -3
  154. vellum/client/types/code_execution_node_error_result.py +3 -3
  155. vellum/client/types/code_execution_node_function_call_result.py +3 -3
  156. vellum/client/types/code_execution_node_json_result.py +2 -2
  157. vellum/client/types/code_execution_node_number_result.py +2 -2
  158. vellum/client/types/code_execution_node_result.py +10 -4
  159. vellum/client/types/code_execution_node_result_data.py +10 -4
  160. vellum/client/types/code_execution_node_result_output.py +6 -5
  161. vellum/client/types/code_execution_node_search_results_result.py +3 -3
  162. vellum/client/types/code_execution_node_string_result.py +2 -2
  163. vellum/client/types/code_execution_package.py +3 -2
  164. vellum/client/types/code_execution_package_request.py +21 -0
  165. vellum/client/types/code_executor_input.py +15 -6
  166. vellum/client/types/code_executor_response.py +11 -5
  167. vellum/client/types/code_executor_secret_input.py +3 -3
  168. vellum/client/types/code_resource_definition.py +3 -3
  169. vellum/client/types/compile_prompt_deployment_expand_meta_request.py +2 -2
  170. vellum/client/types/compile_prompt_meta.py +2 -2
  171. vellum/client/types/components_schemas_composio_execute_tool_request.py +5 -0
  172. vellum/client/types/components_schemas_composio_execute_tool_response.py +5 -0
  173. vellum/client/types/components_schemas_composio_integration_exec_config.py +5 -0
  174. vellum/client/types/components_schemas_composio_tool_definition.py +5 -0
  175. vellum/client/types/components_schemas_slim_composio_tool_definition.py +5 -0
  176. vellum/client/types/composio_execute_tool_request.py +29 -0
  177. vellum/client/types/composio_execute_tool_response.py +24 -0
  178. vellum/client/types/composio_integration_exec_config.py +21 -0
  179. vellum/client/types/composio_tool_definition.py +31 -0
  180. vellum/client/types/conditional_node_result.py +3 -3
  181. vellum/client/types/conditional_node_result_data.py +2 -2
  182. vellum/client/types/container_image_build_config.py +22 -0
  183. vellum/client/types/container_image_container_image_tag.py +3 -2
  184. vellum/client/types/container_image_read.py +8 -4
  185. vellum/client/types/create_test_suite_test_case_request.py +9 -3
  186. vellum/client/types/create_workflow_event_request.py +7 -0
  187. vellum/client/types/dataset_row_push_request.py +23 -0
  188. vellum/client/types/delimiter_chunker_config.py +20 -0
  189. vellum/client/types/delimiter_chunker_config_request.py +20 -0
  190. vellum/client/types/delimiter_chunking.py +21 -0
  191. vellum/client/types/delimiter_chunking_request.py +21 -0
  192. vellum/client/types/deployment_history_item.py +10 -4
  193. vellum/client/types/deployment_provider_payload_response.py +4 -4
  194. vellum/client/types/deployment_read.py +15 -9
  195. vellum/client/types/deployment_release_tag_deployment_history_item.py +2 -2
  196. vellum/client/types/deployment_release_tag_read.py +4 -4
  197. vellum/client/types/deprecated_prompt_request_input.py +8 -0
  198. vellum/client/types/docker_service_token.py +2 -2
  199. vellum/client/types/document_chat_message_content.py +3 -3
  200. vellum/client/types/document_chat_message_content_request.py +3 -3
  201. vellum/client/types/document_document_to_document_index.py +5 -4
  202. vellum/client/types/document_index_chunking.py +5 -1
  203. vellum/client/types/document_index_chunking_request.py +3 -1
  204. vellum/client/types/document_index_indexing_config.py +4 -4
  205. vellum/client/types/document_index_indexing_config_request.py +4 -4
  206. vellum/client/types/document_index_read.py +4 -4
  207. vellum/client/types/document_input.py +30 -0
  208. vellum/client/types/document_input_request.py +30 -0
  209. vellum/client/types/document_prompt_block.py +4 -4
  210. vellum/client/types/document_read.py +9 -5
  211. vellum/client/types/document_vellum_value.py +3 -3
  212. vellum/client/types/document_vellum_value_request.py +3 -3
  213. vellum/client/types/enriched_normalized_completion.py +3 -3
  214. vellum/client/types/environment_display_config.py +19 -0
  215. vellum/client/types/environment_read.py +23 -0
  216. vellum/client/types/ephemeral_prompt_cache_config.py +3 -3
  217. vellum/client/types/error_detail_response.py +22 -0
  218. vellum/client/types/error_input.py +3 -3
  219. vellum/client/types/error_vellum_value.py +3 -3
  220. vellum/client/types/error_vellum_value_request.py +3 -3
  221. vellum/client/types/event_create_response.py +31 -0
  222. vellum/client/types/execute_api_request_bearer_token.py +1 -0
  223. vellum/client/types/execute_api_request_headers_value.py +1 -0
  224. vellum/client/types/execute_api_response.py +6 -6
  225. vellum/client/types/execute_prompt_event.py +3 -2
  226. vellum/client/types/execute_prompt_response.py +1 -0
  227. vellum/client/types/execute_workflow_async_response.py +26 -0
  228. vellum/client/types/execute_workflow_response.py +10 -4
  229. vellum/client/types/execute_workflow_workflow_result_event.py +1 -0
  230. vellum/client/types/execution_array_vellum_value.py +12 -6
  231. vellum/client/types/execution_audio_vellum_value.py +31 -0
  232. vellum/client/types/execution_chat_history_vellum_value.py +3 -3
  233. vellum/client/types/execution_document_vellum_value.py +31 -0
  234. vellum/client/types/execution_error_vellum_value.py +3 -3
  235. vellum/client/types/execution_function_call_vellum_value.py +3 -3
  236. vellum/client/types/execution_image_vellum_value.py +31 -0
  237. vellum/client/types/execution_json_vellum_value.py +3 -3
  238. vellum/client/types/execution_number_vellum_value.py +3 -3
  239. vellum/client/types/execution_search_results_vellum_value.py +3 -3
  240. vellum/client/types/execution_string_vellum_value.py +3 -3
  241. vellum/client/types/execution_thinking_vellum_value.py +31 -0
  242. vellum/client/types/execution_vellum_value.py +16 -5
  243. vellum/client/types/execution_video_vellum_value.py +31 -0
  244. vellum/client/types/external_input_descriptor.py +3 -3
  245. vellum/client/types/external_parent_context.py +38 -0
  246. vellum/client/types/external_test_case_execution.py +10 -4
  247. vellum/client/types/external_test_case_execution_request.py +10 -4
  248. vellum/client/types/fast_embed_vectorizer_baai_bge_small_en_v_15.py +23 -0
  249. vellum/client/types/fast_embed_vectorizer_baai_bge_small_en_v_15_request.py +23 -0
  250. vellum/client/types/folder_entity.py +5 -2
  251. vellum/client/types/folder_entity_dataset.py +26 -0
  252. vellum/client/types/folder_entity_dataset_data.py +25 -0
  253. vellum/client/types/folder_entity_document_index.py +3 -3
  254. vellum/client/types/folder_entity_document_index_data.py +5 -3
  255. vellum/client/types/folder_entity_folder.py +3 -3
  256. vellum/client/types/folder_entity_folder_data.py +2 -2
  257. vellum/client/types/folder_entity_prompt_sandbox.py +3 -3
  258. vellum/client/types/folder_entity_prompt_sandbox_data.py +4 -3
  259. vellum/client/types/folder_entity_test_suite.py +3 -3
  260. vellum/client/types/folder_entity_test_suite_data.py +3 -3
  261. vellum/client/types/folder_entity_workflow_sandbox.py +3 -3
  262. vellum/client/types/folder_entity_workflow_sandbox_data.py +6 -3
  263. vellum/client/types/fulfilled_ad_hoc_execute_prompt_event.py +4 -4
  264. vellum/client/types/fulfilled_execute_prompt_event.py +4 -4
  265. vellum/client/types/fulfilled_execute_prompt_response.py +3 -3
  266. vellum/client/types/fulfilled_execute_workflow_workflow_result_event.py +11 -5
  267. vellum/client/types/fulfilled_prompt_execution_meta.py +3 -3
  268. vellum/client/types/fulfilled_workflow_node_result_event.py +12 -6
  269. vellum/client/types/function_call.py +2 -2
  270. vellum/client/types/function_call_chat_message_content.py +3 -3
  271. vellum/client/types/function_call_chat_message_content_request.py +3 -3
  272. vellum/client/types/function_call_chat_message_content_value.py +2 -2
  273. vellum/client/types/function_call_chat_message_content_value_request.py +2 -2
  274. vellum/client/types/function_call_input.py +3 -3
  275. vellum/client/types/function_call_prompt_block.py +4 -4
  276. vellum/client/types/function_call_request.py +2 -2
  277. vellum/client/types/function_call_vellum_value.py +3 -3
  278. vellum/client/types/function_call_vellum_value_request.py +3 -3
  279. vellum/client/types/function_definition.py +9 -4
  280. vellum/client/types/generate_options_request.py +3 -3
  281. vellum/client/types/generate_request.py +2 -2
  282. vellum/client/types/generate_response.py +3 -3
  283. vellum/client/types/generate_result.py +3 -3
  284. vellum/client/types/generate_result_data.py +3 -3
  285. vellum/client/types/generate_result_error.py +3 -3
  286. vellum/client/types/generate_stream_response.py +3 -3
  287. vellum/client/types/generate_stream_result.py +4 -4
  288. vellum/client/types/generate_stream_result_data.py +3 -3
  289. vellum/client/types/google_vertex_ai_vectorizer_config.py +2 -2
  290. vellum/client/types/google_vertex_ai_vectorizer_config_request.py +2 -2
  291. vellum/client/types/google_vertex_ai_vectorizer_gemini_embedding_001.py +21 -0
  292. vellum/client/types/google_vertex_ai_vectorizer_gemini_embedding_001_request.py +21 -0
  293. vellum/client/types/google_vertex_ai_vectorizer_text_embedding_004.py +3 -3
  294. vellum/client/types/google_vertex_ai_vectorizer_text_embedding_004_request.py +3 -3
  295. vellum/client/types/google_vertex_ai_vectorizer_text_multilingual_embedding_002.py +3 -3
  296. vellum/client/types/google_vertex_ai_vectorizer_text_multilingual_embedding_002_request.py +3 -3
  297. vellum/client/types/hkunlp_instructor_xl_vectorizer.py +3 -3
  298. vellum/client/types/hkunlp_instructor_xl_vectorizer_request.py +3 -3
  299. vellum/client/types/image_chat_message_content.py +3 -3
  300. vellum/client/types/image_chat_message_content_request.py +3 -3
  301. vellum/client/types/image_input.py +30 -0
  302. vellum/client/types/image_input_request.py +30 -0
  303. vellum/client/types/image_prompt_block.py +4 -4
  304. vellum/client/types/image_vellum_value.py +3 -3
  305. vellum/client/types/image_vellum_value_request.py +3 -3
  306. vellum/client/types/indexing_config_vectorizer.py +11 -4
  307. vellum/client/types/indexing_config_vectorizer_request.py +11 -4
  308. vellum/client/types/initiated_ad_hoc_execute_prompt_event.py +3 -3
  309. vellum/client/types/initiated_execute_prompt_event.py +3 -3
  310. vellum/client/types/initiated_prompt_execution_meta.py +2 -2
  311. vellum/client/types/initiated_workflow_node_result_event.py +12 -6
  312. vellum/client/types/instructor_vectorizer_config.py +2 -2
  313. vellum/client/types/instructor_vectorizer_config_request.py +2 -2
  314. vellum/client/types/integration.py +27 -0
  315. vellum/client/types/integration_auth_config_integration.py +23 -0
  316. vellum/client/types/integration_auth_config_integration_credential.py +19 -0
  317. vellum/client/types/integration_credential_access_type.py +5 -0
  318. vellum/client/types/integration_name.py +109 -0
  319. vellum/client/types/integration_provider.py +5 -0
  320. vellum/client/types/integration_read.py +30 -0
  321. vellum/client/types/integration_trigger_context.py +39 -0
  322. vellum/client/types/invoked_port.py +2 -2
  323. vellum/client/types/jinja_prompt_block.py +4 -4
  324. vellum/client/types/json_input.py +3 -3
  325. vellum/client/types/json_input_request.py +3 -3
  326. vellum/client/types/json_vellum_value.py +2 -2
  327. vellum/client/types/json_vellum_value_request.py +2 -2
  328. vellum/client/types/logical_operator.py +4 -0
  329. vellum/client/types/map_node_result.py +3 -3
  330. vellum/client/types/map_node_result_data.py +3 -3
  331. vellum/client/types/merge_node_result.py +3 -3
  332. vellum/client/types/merge_node_result_data.py +2 -2
  333. vellum/client/types/metadata_filter_config_request.py +12 -6
  334. vellum/client/types/metadata_filter_rule_request.py +5 -5
  335. vellum/client/types/metadata_filters_request.py +1 -0
  336. vellum/client/types/metric_definition_execution.py +10 -4
  337. vellum/client/types/metric_definition_history_item.py +10 -4
  338. vellum/client/types/metric_definition_input.py +3 -2
  339. vellum/client/types/metric_node_result.py +2 -2
  340. vellum/client/types/ml_model_read.py +6 -3
  341. vellum/client/types/ml_model_usage.py +2 -2
  342. vellum/client/types/ml_model_usage_wrapper.py +3 -3
  343. vellum/client/types/named_scenario_input_audio_variable_value_request.py +22 -0
  344. vellum/client/types/named_scenario_input_chat_history_variable_value_request.py +3 -3
  345. vellum/client/types/named_scenario_input_document_variable_value_request.py +22 -0
  346. vellum/client/types/named_scenario_input_image_variable_value_request.py +22 -0
  347. vellum/client/types/named_scenario_input_json_variable_value_request.py +2 -2
  348. vellum/client/types/named_scenario_input_request.py +11 -2
  349. vellum/client/types/named_scenario_input_string_variable_value_request.py +2 -2
  350. vellum/client/types/named_scenario_input_video_variable_value_request.py +22 -0
  351. vellum/client/types/named_test_case_array_variable_value.py +11 -5
  352. vellum/client/types/named_test_case_array_variable_value_request.py +11 -5
  353. vellum/client/types/named_test_case_audio_variable_value.py +26 -0
  354. vellum/client/types/named_test_case_audio_variable_value_request.py +26 -0
  355. vellum/client/types/named_test_case_chat_history_variable_value.py +3 -3
  356. vellum/client/types/named_test_case_chat_history_variable_value_request.py +3 -3
  357. vellum/client/types/named_test_case_document_variable_value.py +22 -0
  358. vellum/client/types/named_test_case_document_variable_value_request.py +22 -0
  359. vellum/client/types/named_test_case_error_variable_value.py +3 -3
  360. vellum/client/types/named_test_case_error_variable_value_request.py +3 -3
  361. vellum/client/types/named_test_case_function_call_variable_value.py +3 -3
  362. vellum/client/types/named_test_case_function_call_variable_value_request.py +3 -3
  363. vellum/client/types/named_test_case_image_variable_value.py +22 -0
  364. vellum/client/types/named_test_case_image_variable_value_request.py +22 -0
  365. vellum/client/types/named_test_case_json_variable_value.py +2 -2
  366. vellum/client/types/named_test_case_json_variable_value_request.py +2 -2
  367. vellum/client/types/named_test_case_number_variable_value.py +2 -2
  368. vellum/client/types/named_test_case_number_variable_value_request.py +2 -2
  369. vellum/client/types/named_test_case_search_results_variable_value.py +3 -3
  370. vellum/client/types/named_test_case_search_results_variable_value_request.py +3 -3
  371. vellum/client/types/named_test_case_string_variable_value.py +2 -2
  372. vellum/client/types/named_test_case_string_variable_value_request.py +2 -2
  373. vellum/client/types/named_test_case_variable_value.py +14 -5
  374. vellum/client/types/named_test_case_variable_value_request.py +14 -5
  375. vellum/client/types/named_test_case_video_variable_value.py +22 -0
  376. vellum/client/types/named_test_case_video_variable_value_request.py +22 -0
  377. vellum/client/types/node_execution_fulfilled_body.py +5 -4
  378. vellum/client/types/node_execution_fulfilled_event.py +24 -15
  379. vellum/client/types/node_execution_initiated_body.py +3 -3
  380. vellum/client/types/node_execution_initiated_event.py +24 -15
  381. vellum/client/types/node_execution_log_body.py +24 -0
  382. vellum/client/types/node_execution_log_event.py +47 -0
  383. vellum/client/types/node_execution_paused_body.py +3 -3
  384. vellum/client/types/node_execution_paused_event.py +24 -15
  385. vellum/client/types/node_execution_rejected_body.py +5 -4
  386. vellum/client/types/node_execution_rejected_event.py +24 -15
  387. vellum/client/types/node_execution_resumed_body.py +3 -3
  388. vellum/client/types/node_execution_resumed_event.py +24 -15
  389. vellum/client/types/node_execution_span.py +23 -12
  390. vellum/client/types/node_execution_span_attributes.py +4 -2
  391. vellum/client/types/node_execution_streaming_body.py +4 -4
  392. vellum/client/types/node_execution_streaming_event.py +24 -15
  393. vellum/client/types/node_input_compiled_array_value.py +11 -5
  394. vellum/client/types/node_input_compiled_audio_value.py +23 -0
  395. vellum/client/types/node_input_compiled_chat_history_value.py +3 -3
  396. vellum/client/types/node_input_compiled_document_value.py +23 -0
  397. vellum/client/types/node_input_compiled_error_value.py +3 -3
  398. vellum/client/types/node_input_compiled_function_call_value.py +3 -3
  399. vellum/client/types/node_input_compiled_image_value.py +23 -0
  400. vellum/client/types/node_input_compiled_json_value.py +2 -2
  401. vellum/client/types/node_input_compiled_number_value.py +2 -2
  402. vellum/client/types/node_input_compiled_search_results_value.py +3 -3
  403. vellum/client/types/node_input_compiled_secret_value.py +3 -3
  404. vellum/client/types/node_input_compiled_string_value.py +2 -2
  405. vellum/client/types/node_input_compiled_video_value.py +23 -0
  406. vellum/client/types/node_input_variable_compiled_value.py +14 -5
  407. vellum/client/types/node_output_compiled_array_value.py +12 -6
  408. vellum/client/types/node_output_compiled_chat_history_value.py +3 -3
  409. vellum/client/types/node_output_compiled_error_value.py +3 -3
  410. vellum/client/types/node_output_compiled_function_call_value.py +3 -3
  411. vellum/client/types/node_output_compiled_json_value.py +3 -3
  412. vellum/client/types/node_output_compiled_number_value.py +3 -3
  413. vellum/client/types/node_output_compiled_search_results_value.py +3 -3
  414. vellum/client/types/node_output_compiled_string_value.py +3 -3
  415. vellum/client/types/node_output_compiled_thinking_value.py +28 -0
  416. vellum/client/types/node_output_compiled_value.py +8 -5
  417. vellum/client/types/node_parent_context.py +14 -11
  418. vellum/client/types/normalized_log_probs.py +3 -3
  419. vellum/client/types/normalized_token_log_probs.py +2 -2
  420. vellum/client/types/number_input.py +3 -3
  421. vellum/client/types/number_vellum_value.py +2 -2
  422. vellum/client/types/number_vellum_value_request.py +2 -2
  423. vellum/client/types/open_ai_vectorizer_config.py +3 -3
  424. vellum/client/types/open_ai_vectorizer_config_request.py +3 -3
  425. vellum/client/types/open_ai_vectorizer_text_embedding_3_large.py +3 -3
  426. vellum/client/types/open_ai_vectorizer_text_embedding_3_large_request.py +3 -3
  427. vellum/client/types/open_ai_vectorizer_text_embedding_3_small.py +3 -3
  428. vellum/client/types/open_ai_vectorizer_text_embedding_3_small_request.py +3 -3
  429. vellum/client/types/open_ai_vectorizer_text_embedding_ada_002.py +3 -3
  430. vellum/client/types/open_ai_vectorizer_text_embedding_ada_002_request.py +3 -3
  431. vellum/client/types/organization_read.py +6 -3
  432. vellum/client/types/paginated_container_image_read_list.py +3 -3
  433. vellum/client/types/paginated_deployment_release_tag_read_list.py +3 -3
  434. vellum/client/types/paginated_document_index_read_list.py +3 -3
  435. vellum/client/types/paginated_folder_entity_list.py +3 -3
  436. vellum/client/types/paginated_slim_deployment_read_list.py +10 -4
  437. vellum/client/types/paginated_slim_document_list.py +3 -3
  438. vellum/client/types/paginated_slim_integration_auth_config_read_list.py +23 -0
  439. vellum/client/types/paginated_slim_integration_read_list.py +23 -0
  440. vellum/client/types/paginated_slim_tool_definition_list.py +23 -0
  441. vellum/client/types/paginated_slim_workflow_deployment_list.py +10 -4
  442. vellum/client/types/paginated_test_suite_run_execution_list.py +10 -4
  443. vellum/client/types/paginated_test_suite_test_case_list.py +10 -4
  444. vellum/client/types/paginated_workflow_deployment_release_list.py +30 -0
  445. vellum/client/types/paginated_workflow_release_tag_read_list.py +3 -3
  446. vellum/client/types/paginated_workflow_sandbox_example_list.py +3 -3
  447. vellum/client/types/parent_context.py +21 -11
  448. vellum/client/types/pdf_search_result_meta_source.py +2 -2
  449. vellum/client/types/pdf_search_result_meta_source_request.py +2 -2
  450. vellum/client/types/plain_text_prompt_block.py +4 -4
  451. vellum/client/types/price.py +3 -3
  452. vellum/client/types/private_vectorizer.py +23 -0
  453. vellum/client/types/private_vectorizer_request.py +23 -0
  454. vellum/client/types/processing_failure_reason_enum.py +3 -1
  455. vellum/client/types/prompt_block.py +9 -6
  456. vellum/client/types/prompt_deployment_expand_meta_request.py +2 -2
  457. vellum/client/types/prompt_deployment_input_request.py +16 -3
  458. vellum/client/types/prompt_deployment_parent_context.py +13 -10
  459. vellum/client/types/prompt_deployment_release.py +6 -6
  460. vellum/client/types/prompt_deployment_release_prompt_deployment.py +3 -2
  461. vellum/client/types/prompt_deployment_release_prompt_version.py +4 -4
  462. vellum/client/types/prompt_exec_config.py +15 -9
  463. vellum/client/types/prompt_execution_meta.py +3 -3
  464. vellum/client/types/prompt_node_execution_meta.py +3 -3
  465. vellum/client/types/prompt_node_result.py +3 -3
  466. vellum/client/types/prompt_node_result_data.py +3 -3
  467. vellum/client/types/prompt_output.py +7 -3
  468. vellum/client/types/prompt_parameters.py +2 -2
  469. vellum/client/types/prompt_push_response.py +2 -2
  470. vellum/client/types/prompt_request_audio_input.py +26 -0
  471. vellum/client/types/prompt_request_chat_history_input.py +3 -3
  472. vellum/client/types/prompt_request_document_input.py +26 -0
  473. vellum/client/types/prompt_request_image_input.py +26 -0
  474. vellum/client/types/prompt_request_input.py +16 -3
  475. vellum/client/types/prompt_request_json_input.py +3 -3
  476. vellum/client/types/prompt_request_string_input.py +3 -3
  477. vellum/client/types/prompt_request_video_input.py +26 -0
  478. vellum/client/types/prompt_settings.py +2 -2
  479. vellum/client/types/prompt_version_build_config_sandbox.py +2 -2
  480. vellum/client/types/raw_prompt_execution_overrides_request.py +2 -2
  481. vellum/client/types/reducto_chunker_config.py +2 -2
  482. vellum/client/types/reducto_chunker_config_request.py +2 -2
  483. vellum/client/types/reducto_chunking.py +3 -3
  484. vellum/client/types/reducto_chunking_request.py +3 -3
  485. vellum/client/types/rejected_ad_hoc_execute_prompt_event.py +4 -4
  486. vellum/client/types/rejected_execute_prompt_event.py +4 -4
  487. vellum/client/types/rejected_execute_prompt_response.py +3 -3
  488. vellum/client/types/rejected_execute_workflow_workflow_result_event.py +4 -4
  489. vellum/client/types/rejected_prompt_execution_meta.py +3 -3
  490. vellum/client/types/rejected_workflow_node_result_event.py +12 -6
  491. vellum/client/types/release_created_by.py +2 -2
  492. vellum/client/types/release_environment.py +2 -2
  493. vellum/client/types/release_release_tag.py +3 -3
  494. vellum/client/types/release_review_reviewer.py +2 -2
  495. vellum/client/types/release_tag_release.py +2 -2
  496. vellum/client/types/replace_test_suite_test_case_request.py +9 -3
  497. vellum/client/types/rich_text_child_block.py +2 -1
  498. vellum/client/types/rich_text_prompt_block.py +4 -4
  499. vellum/client/types/runner_config_request.py +24 -0
  500. vellum/client/types/sandbox_scenario.py +3 -3
  501. vellum/client/types/scenario_input.py +14 -3
  502. vellum/client/types/scenario_input_audio_variable_value.py +22 -0
  503. vellum/client/types/scenario_input_chat_history_variable_value.py +3 -3
  504. vellum/client/types/scenario_input_document_variable_value.py +22 -0
  505. vellum/client/types/scenario_input_image_variable_value.py +22 -0
  506. vellum/client/types/scenario_input_json_variable_value.py +2 -2
  507. vellum/client/types/scenario_input_string_variable_value.py +2 -2
  508. vellum/client/types/scenario_input_video_variable_value.py +22 -0
  509. vellum/client/types/scheduled_trigger_context.py +39 -0
  510. vellum/client/types/search_filters_request.py +11 -5
  511. vellum/client/types/search_node_result.py +3 -3
  512. vellum/client/types/search_node_result_data.py +3 -3
  513. vellum/client/types/search_request_options_request.py +13 -7
  514. vellum/client/types/search_response.py +3 -3
  515. vellum/client/types/search_result.py +3 -3
  516. vellum/client/types/search_result_document.py +2 -2
  517. vellum/client/types/search_result_document_request.py +2 -2
  518. vellum/client/types/search_result_merging_request.py +2 -2
  519. vellum/client/types/search_result_meta.py +3 -3
  520. vellum/client/types/search_result_meta_request.py +3 -3
  521. vellum/client/types/search_result_request.py +3 -3
  522. vellum/client/types/search_results_input.py +3 -3
  523. vellum/client/types/search_results_vellum_value.py +3 -3
  524. vellum/client/types/search_results_vellum_value_request.py +3 -3
  525. vellum/client/types/search_weights_request.py +2 -2
  526. vellum/client/types/secret_type_enum.py +3 -1
  527. vellum/client/types/sentence_chunker_config.py +2 -2
  528. vellum/client/types/sentence_chunker_config_request.py +2 -2
  529. vellum/client/types/sentence_chunking.py +3 -3
  530. vellum/client/types/sentence_chunking_request.py +3 -3
  531. vellum/client/types/severity_enum.py +5 -0
  532. vellum/client/types/slim_composio_tool_definition.py +25 -0
  533. vellum/client/types/slim_deployment_read.py +15 -9
  534. vellum/client/types/slim_document.py +6 -5
  535. vellum/client/types/slim_document_document_to_document_index.py +6 -4
  536. vellum/client/types/slim_integration_auth_config_read.py +36 -0
  537. vellum/client/types/slim_integration_read.py +25 -0
  538. vellum/client/types/slim_release_review.py +4 -4
  539. vellum/client/types/slim_workflow_deployment.py +16 -10
  540. vellum/client/types/slim_workflow_execution_read.py +24 -15
  541. vellum/client/types/span_link.py +15 -12
  542. vellum/client/types/span_link_type_enum.py +1 -1
  543. vellum/client/types/streaming_ad_hoc_execute_prompt_event.py +4 -4
  544. vellum/client/types/streaming_execute_prompt_event.py +3 -3
  545. vellum/client/types/streaming_prompt_execution_meta.py +2 -2
  546. vellum/client/types/streaming_workflow_node_result_event.py +12 -6
  547. vellum/client/types/string_chat_message_content.py +2 -2
  548. vellum/client/types/string_chat_message_content_request.py +2 -2
  549. vellum/client/types/string_input.py +3 -3
  550. vellum/client/types/string_input_request.py +3 -3
  551. vellum/client/types/string_vellum_value.py +2 -2
  552. vellum/client/types/string_vellum_value_request.py +2 -2
  553. vellum/client/types/submit_completion_actual_request.py +3 -3
  554. vellum/client/types/submit_workflow_execution_actual_request.py +3 -2
  555. vellum/client/types/subworkflow_node_result.py +3 -3
  556. vellum/client/types/subworkflow_node_result_data.py +2 -2
  557. vellum/client/types/templating_node_array_result.py +11 -5
  558. vellum/client/types/templating_node_chat_history_result.py +3 -3
  559. vellum/client/types/templating_node_error_result.py +3 -3
  560. vellum/client/types/templating_node_function_call_result.py +3 -3
  561. vellum/client/types/templating_node_json_result.py +2 -2
  562. vellum/client/types/templating_node_number_result.py +2 -2
  563. vellum/client/types/templating_node_result.py +10 -4
  564. vellum/client/types/templating_node_result_data.py +10 -4
  565. vellum/client/types/templating_node_result_output.py +6 -5
  566. vellum/client/types/templating_node_search_results_result.py +3 -3
  567. vellum/client/types/templating_node_string_result.py +2 -2
  568. vellum/client/types/terminal_node_array_result.py +11 -5
  569. vellum/client/types/terminal_node_chat_history_result.py +2 -2
  570. vellum/client/types/terminal_node_error_result.py +2 -2
  571. vellum/client/types/terminal_node_function_call_result.py +2 -2
  572. vellum/client/types/terminal_node_json_result.py +2 -2
  573. vellum/client/types/terminal_node_number_result.py +2 -2
  574. vellum/client/types/terminal_node_result.py +10 -4
  575. vellum/client/types/terminal_node_result_data.py +10 -4
  576. vellum/client/types/terminal_node_result_output.py +6 -5
  577. vellum/client/types/terminal_node_search_results_result.py +2 -2
  578. vellum/client/types/terminal_node_string_result.py +2 -2
  579. vellum/client/types/test_case_array_variable_value.py +11 -5
  580. vellum/client/types/test_case_audio_variable_value.py +27 -0
  581. vellum/client/types/test_case_chat_history_variable_value.py +3 -3
  582. vellum/client/types/test_case_document_variable_value.py +27 -0
  583. vellum/client/types/test_case_error_variable_value.py +3 -3
  584. vellum/client/types/test_case_function_call_variable_value.py +3 -3
  585. vellum/client/types/test_case_image_variable_value.py +27 -0
  586. vellum/client/types/test_case_json_variable_value.py +2 -2
  587. vellum/client/types/test_case_number_variable_value.py +2 -2
  588. vellum/client/types/test_case_search_results_variable_value.py +3 -3
  589. vellum/client/types/test_case_string_variable_value.py +2 -2
  590. vellum/client/types/test_case_variable_value.py +14 -5
  591. vellum/client/types/test_case_video_variable_value.py +27 -0
  592. vellum/client/types/test_suite_run_deployment_release_tag_exec_config.py +3 -3
  593. vellum/client/types/test_suite_run_deployment_release_tag_exec_config_data.py +3 -3
  594. vellum/client/types/test_suite_run_deployment_release_tag_exec_config_data_request.py +3 -3
  595. vellum/client/types/test_suite_run_deployment_release_tag_exec_config_request.py +3 -3
  596. vellum/client/types/test_suite_run_exec_config.py +2 -1
  597. vellum/client/types/test_suite_run_exec_config_request.py +2 -1
  598. vellum/client/types/test_suite_run_execution.py +11 -5
  599. vellum/client/types/test_suite_run_execution_array_output.py +11 -5
  600. vellum/client/types/test_suite_run_execution_chat_history_output.py +3 -3
  601. vellum/client/types/test_suite_run_execution_error_output.py +3 -3
  602. vellum/client/types/test_suite_run_execution_function_call_output.py +3 -3
  603. vellum/client/types/test_suite_run_execution_json_output.py +2 -2
  604. vellum/client/types/test_suite_run_execution_metric_definition.py +2 -2
  605. vellum/client/types/test_suite_run_execution_metric_result.py +11 -5
  606. vellum/client/types/test_suite_run_execution_number_output.py +2 -2
  607. vellum/client/types/test_suite_run_execution_output.py +6 -5
  608. vellum/client/types/test_suite_run_execution_search_results_output.py +3 -3
  609. vellum/client/types/test_suite_run_execution_string_output.py +2 -2
  610. vellum/client/types/test_suite_run_external_exec_config.py +10 -4
  611. vellum/client/types/test_suite_run_external_exec_config_data.py +10 -4
  612. vellum/client/types/test_suite_run_external_exec_config_data_request.py +10 -4
  613. vellum/client/types/test_suite_run_external_exec_config_request.py +10 -4
  614. vellum/client/types/test_suite_run_metric_array_output.py +11 -5
  615. vellum/client/types/test_suite_run_metric_error_output.py +3 -3
  616. vellum/client/types/test_suite_run_metric_json_output.py +2 -2
  617. vellum/client/types/test_suite_run_metric_number_output.py +2 -2
  618. vellum/client/types/test_suite_run_metric_output.py +5 -4
  619. vellum/client/types/test_suite_run_metric_string_output.py +2 -2
  620. vellum/client/types/test_suite_run_progress.py +2 -2
  621. vellum/client/types/test_suite_run_prompt_sandbox_exec_config_data_request.py +3 -3
  622. vellum/client/types/test_suite_run_prompt_sandbox_exec_config_request.py +3 -3
  623. vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config.py +3 -3
  624. vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_data.py +3 -3
  625. vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_data_request.py +3 -3
  626. vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_request.py +3 -3
  627. vellum/client/types/test_suite_run_read.py +12 -6
  628. vellum/client/types/test_suite_run_test_suite.py +2 -2
  629. vellum/client/types/test_suite_run_workflow_release_tag_exec_config.py +3 -3
  630. vellum/client/types/test_suite_run_workflow_release_tag_exec_config_data.py +3 -3
  631. vellum/client/types/test_suite_run_workflow_release_tag_exec_config_data_request.py +3 -3
  632. vellum/client/types/test_suite_run_workflow_release_tag_exec_config_request.py +3 -3
  633. vellum/client/types/test_suite_run_workflow_sandbox_exec_config_data_request.py +3 -3
  634. vellum/client/types/test_suite_run_workflow_sandbox_exec_config_request.py +3 -3
  635. vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config.py +3 -3
  636. vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_data.py +3 -3
  637. vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_data_request.py +3 -3
  638. vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_request.py +3 -3
  639. vellum/client/types/test_suite_test_case.py +10 -4
  640. vellum/client/types/test_suite_test_case_bulk_operation_request.py +2 -1
  641. vellum/client/types/test_suite_test_case_bulk_result.py +2 -1
  642. vellum/client/types/test_suite_test_case_create_bulk_operation_request.py +10 -4
  643. vellum/client/types/test_suite_test_case_created_bulk_result.py +3 -3
  644. vellum/client/types/test_suite_test_case_created_bulk_result_data.py +2 -2
  645. vellum/client/types/test_suite_test_case_delete_bulk_operation_data_request.py +2 -2
  646. vellum/client/types/test_suite_test_case_delete_bulk_operation_request.py +3 -3
  647. vellum/client/types/test_suite_test_case_deleted_bulk_result.py +3 -3
  648. vellum/client/types/test_suite_test_case_deleted_bulk_result_data.py +2 -2
  649. vellum/client/types/test_suite_test_case_rejected_bulk_result.py +2 -2
  650. vellum/client/types/test_suite_test_case_replace_bulk_operation_request.py +10 -4
  651. vellum/client/types/test_suite_test_case_replaced_bulk_result.py +3 -3
  652. vellum/client/types/test_suite_test_case_replaced_bulk_result_data.py +2 -2
  653. vellum/client/types/test_suite_test_case_upsert_bulk_operation_request.py +10 -4
  654. vellum/client/types/thinking_vellum_value.py +25 -0
  655. vellum/client/types/thinking_vellum_value_request.py +25 -0
  656. vellum/client/types/token_overlapping_window_chunker_config.py +2 -2
  657. vellum/client/types/token_overlapping_window_chunker_config_request.py +2 -2
  658. vellum/client/types/token_overlapping_window_chunking.py +3 -3
  659. vellum/client/types/token_overlapping_window_chunking_request.py +3 -3
  660. vellum/client/types/type_checker_enum.py +5 -0
  661. vellum/client/types/update_active_workspace_response.py +32 -0
  662. vellum/client/types/upload_document_response.py +3 -3
  663. vellum/client/types/uploaded_file_read.py +27 -0
  664. vellum/client/types/upsert_test_suite_test_case_request.py +9 -3
  665. vellum/client/types/variable_prompt_block.py +11 -4
  666. vellum/client/types/vellum_audio.py +10 -5
  667. vellum/client/types/vellum_audio_request.py +8 -4
  668. vellum/client/types/vellum_code_resource_definition.py +7 -2
  669. vellum/client/types/vellum_document.py +13 -4
  670. vellum/client/types/vellum_document_request.py +11 -3
  671. vellum/client/types/vellum_error.py +5 -4
  672. vellum/client/types/vellum_error_code_enum.py +6 -0
  673. vellum/client/types/vellum_error_request.py +5 -4
  674. vellum/client/types/vellum_image.py +13 -4
  675. vellum/client/types/vellum_image_request.py +11 -3
  676. vellum/client/types/vellum_node_execution_event.py +6 -3
  677. vellum/client/types/vellum_sdk_error.py +4 -3
  678. vellum/client/types/vellum_sdk_error_code_enum.py +5 -0
  679. vellum/client/types/vellum_secret.py +2 -2
  680. vellum/client/types/vellum_span.py +2 -1
  681. vellum/client/types/vellum_value.py +13 -8
  682. vellum/client/types/vellum_value_logical_condition_group_request.py +6 -6
  683. vellum/client/types/vellum_value_logical_condition_request.py +13 -7
  684. vellum/client/types/vellum_value_logical_expression_request.py +2 -1
  685. vellum/client/types/vellum_value_request.py +13 -8
  686. vellum/client/types/vellum_variable.py +18 -7
  687. vellum/client/types/vellum_variable_extensions.py +4 -2
  688. vellum/client/types/vellum_variable_type.py +4 -1
  689. vellum/client/types/vellum_video.py +29 -0
  690. vellum/client/types/vellum_video_request.py +28 -0
  691. vellum/client/types/vellum_workflow_execution_event.py +4 -3
  692. vellum/client/types/video_chat_message_content.py +25 -0
  693. vellum/client/types/video_chat_message_content_request.py +25 -0
  694. vellum/client/types/video_input.py +30 -0
  695. vellum/client/types/video_input_request.py +30 -0
  696. vellum/client/types/video_prompt_block.py +29 -0
  697. vellum/client/types/video_vellum_value.py +25 -0
  698. vellum/client/types/video_vellum_value_request.py +25 -0
  699. vellum/client/types/workflow_deployment_display_data.py +27 -0
  700. vellum/client/types/workflow_deployment_event_executions_response.py +20 -11
  701. vellum/client/types/workflow_deployment_history_item.py +10 -4
  702. vellum/client/types/workflow_deployment_parent_context.py +13 -10
  703. vellum/client/types/workflow_deployment_read.py +22 -10
  704. vellum/client/types/workflow_deployment_release.py +13 -7
  705. vellum/client/types/workflow_deployment_release_workflow_deployment.py +3 -2
  706. vellum/client/types/workflow_deployment_release_workflow_version.py +10 -4
  707. vellum/client/types/workflow_display_icon.py +24 -0
  708. vellum/client/types/workflow_error.py +1 -0
  709. vellum/client/types/workflow_event.py +39 -0
  710. vellum/client/types/workflow_event_error.py +5 -3
  711. vellum/client/types/workflow_event_execution_read.py +26 -16
  712. vellum/client/types/workflow_execution_actual.py +11 -5
  713. vellum/client/types/workflow_execution_actual_chat_history_request.py +2 -2
  714. vellum/client/types/workflow_execution_actual_json_request.py +2 -2
  715. vellum/client/types/workflow_execution_actual_string_request.py +2 -2
  716. vellum/client/types/workflow_execution_detail.py +51 -0
  717. vellum/client/types/workflow_execution_event_error_code.py +5 -0
  718. vellum/client/types/workflow_execution_fulfilled_body.py +6 -3
  719. vellum/client/types/workflow_execution_fulfilled_event.py +24 -15
  720. vellum/client/types/workflow_execution_initiated_body.py +3 -3
  721. vellum/client/types/workflow_execution_initiated_event.py +24 -15
  722. vellum/client/types/workflow_execution_node_result_event.py +10 -4
  723. vellum/client/types/workflow_execution_paused_body.py +4 -4
  724. vellum/client/types/workflow_execution_paused_event.py +24 -15
  725. vellum/client/types/workflow_execution_rejected_body.py +5 -4
  726. vellum/client/types/workflow_execution_rejected_event.py +24 -15
  727. vellum/client/types/workflow_execution_resumed_body.py +3 -3
  728. vellum/client/types/workflow_execution_resumed_event.py +24 -15
  729. vellum/client/types/workflow_execution_snapshotted_body.py +4 -3
  730. vellum/client/types/workflow_execution_snapshotted_event.py +24 -15
  731. vellum/client/types/workflow_execution_span.py +22 -11
  732. vellum/client/types/workflow_execution_span_attributes.py +3 -2
  733. vellum/client/types/workflow_execution_streaming_body.py +4 -4
  734. vellum/client/types/workflow_execution_streaming_event.py +24 -15
  735. vellum/client/types/workflow_execution_usage_calculation_error.py +3 -3
  736. vellum/client/types/workflow_execution_usage_calculation_fulfilled_body.py +22 -0
  737. vellum/client/types/workflow_execution_usage_result.py +3 -3
  738. vellum/client/types/workflow_execution_view_online_eval_metric_result.py +10 -4
  739. vellum/client/types/workflow_execution_workflow_result_event.py +10 -4
  740. vellum/client/types/workflow_expand_meta_request.py +2 -2
  741. vellum/client/types/workflow_initialization_error.py +2 -2
  742. vellum/client/types/workflow_input.py +31 -0
  743. vellum/client/types/workflow_node_result_data.py +8 -7
  744. vellum/client/types/workflow_node_result_event.py +3 -2
  745. vellum/client/types/workflow_output.py +12 -5
  746. vellum/client/types/workflow_output_array.py +12 -6
  747. vellum/client/types/workflow_output_audio.py +31 -0
  748. vellum/client/types/workflow_output_chat_history.py +3 -3
  749. vellum/client/types/workflow_output_document.py +31 -0
  750. vellum/client/types/workflow_output_error.py +3 -3
  751. vellum/client/types/workflow_output_function_call.py +3 -3
  752. vellum/client/types/workflow_output_image.py +3 -3
  753. vellum/client/types/workflow_output_json.py +3 -3
  754. vellum/client/types/workflow_output_number.py +3 -3
  755. vellum/client/types/workflow_output_search_results.py +3 -3
  756. vellum/client/types/workflow_output_string.py +3 -3
  757. vellum/client/types/workflow_output_video.py +31 -0
  758. vellum/client/types/workflow_parent_context.py +14 -11
  759. vellum/client/types/workflow_push_deployment_config_request.py +3 -2
  760. vellum/client/types/workflow_push_response.py +2 -2
  761. vellum/client/types/workflow_release_tag_read.py +4 -4
  762. vellum/client/types/workflow_release_tag_workflow_deployment_history_item.py +2 -2
  763. vellum/client/types/workflow_request_audio_input_request.py +30 -0
  764. vellum/client/types/workflow_request_chat_history_input_request.py +3 -3
  765. vellum/client/types/workflow_request_document_input_request.py +30 -0
  766. vellum/client/types/workflow_request_image_input_request.py +30 -0
  767. vellum/client/types/workflow_request_input_request.py +11 -2
  768. vellum/client/types/workflow_request_json_input_request.py +3 -3
  769. vellum/client/types/workflow_request_number_input_request.py +3 -3
  770. vellum/client/types/workflow_request_string_input_request.py +3 -3
  771. vellum/client/types/workflow_request_video_input_request.py +30 -0
  772. vellum/client/types/workflow_resolved_state.py +31 -0
  773. vellum/client/types/workflow_result_event.py +14 -8
  774. vellum/client/types/workflow_result_event_output_data.py +7 -6
  775. vellum/client/types/workflow_result_event_output_data_array.py +13 -7
  776. vellum/client/types/workflow_result_event_output_data_chat_history.py +4 -4
  777. vellum/client/types/workflow_result_event_output_data_error.py +4 -4
  778. vellum/client/types/workflow_result_event_output_data_function_call.py +4 -4
  779. vellum/client/types/workflow_result_event_output_data_json.py +4 -4
  780. vellum/client/types/workflow_result_event_output_data_number.py +4 -4
  781. vellum/client/types/workflow_result_event_output_data_search_results.py +4 -4
  782. vellum/client/types/workflow_result_event_output_data_string.py +4 -4
  783. vellum/client/types/workflow_result_event_state.py +7 -0
  784. vellum/client/types/workflow_sandbox_display_data.py +27 -0
  785. vellum/client/types/workflow_sandbox_example.py +4 -2
  786. vellum/client/types/workflow_sandbox_execute_node_response.py +8 -0
  787. vellum/client/types/workflow_sandbox_parent_context.py +13 -10
  788. vellum/client/types/workflow_stream_event.py +2 -1
  789. vellum/client/types/workspace_display_config.py +19 -0
  790. vellum/client/types/workspace_read.py +5 -3
  791. vellum/client/types/workspace_secret_read.py +3 -3
  792. vellum/client/utils.py +24 -0
  793. vellum/core/force_multipart.py +3 -0
  794. vellum/core/http_response.py +3 -0
  795. vellum/errors/misdirected_request_error.py +3 -0
  796. vellum/errors/too_many_requests_error.py +3 -0
  797. vellum/errors/unauthorized_error.py +3 -0
  798. vellum/evaluations/resources.py +5 -5
  799. vellum/plugins/pydantic.py +14 -3
  800. vellum/plugins/tests/__init__.py +0 -0
  801. vellum/plugins/tests/test_pydantic.py +30 -0
  802. vellum/plugins/vellum_mypy.py +68 -25
  803. vellum/prompts/__init__.py +3 -0
  804. vellum/prompts/blocks/__init__.py +3 -0
  805. vellum/prompts/blocks/compilation.py +29 -11
  806. vellum/prompts/blocks/helpers.py +31 -0
  807. vellum/prompts/blocks/tests/test_compilation.py +64 -0
  808. vellum/raw_client.py +3 -0
  809. vellum/resources/ad_hoc/raw_client.py +3 -0
  810. vellum/resources/container_images/raw_client.py +3 -0
  811. vellum/resources/deployments/raw_client.py +3 -0
  812. vellum/resources/document_indexes/raw_client.py +3 -0
  813. vellum/resources/documents/raw_client.py +3 -0
  814. vellum/resources/{release_reviews → environments}/__init__.py +1 -1
  815. vellum/resources/{release_reviews → environments}/client.py +1 -1
  816. vellum/resources/environments/raw_client.py +3 -0
  817. vellum/resources/events/__init__.py +3 -0
  818. vellum/resources/events/client.py +3 -0
  819. vellum/resources/events/raw_client.py +3 -0
  820. vellum/resources/folder_entities/raw_client.py +3 -0
  821. vellum/resources/integration_auth_configs/__init__.py +3 -0
  822. vellum/resources/integration_auth_configs/client.py +3 -0
  823. vellum/resources/integration_auth_configs/raw_client.py +3 -0
  824. vellum/resources/integration_providers/__init__.py +3 -0
  825. vellum/resources/integration_providers/client.py +3 -0
  826. vellum/resources/integration_providers/raw_client.py +3 -0
  827. vellum/resources/integrations/__init__.py +3 -0
  828. vellum/resources/integrations/client.py +3 -0
  829. vellum/resources/integrations/raw_client.py +3 -0
  830. vellum/resources/metric_definitions/raw_client.py +3 -0
  831. vellum/resources/ml_models/raw_client.py +3 -0
  832. vellum/resources/organizations/raw_client.py +3 -0
  833. vellum/resources/prompts/raw_client.py +3 -0
  834. vellum/resources/sandboxes/raw_client.py +3 -0
  835. vellum/resources/test_suite_runs/raw_client.py +3 -0
  836. vellum/resources/test_suites/raw_client.py +3 -0
  837. vellum/resources/uploaded_files/__init__.py +3 -0
  838. vellum/resources/uploaded_files/client.py +3 -0
  839. vellum/resources/uploaded_files/raw_client.py +3 -0
  840. vellum/resources/workflow_deployments/raw_client.py +3 -0
  841. vellum/resources/workflow_executions/__init__.py +3 -0
  842. vellum/resources/workflow_executions/client.py +3 -0
  843. vellum/resources/workflow_executions/raw_client.py +3 -0
  844. vellum/resources/workflow_sandboxes/raw_client.py +3 -0
  845. vellum/resources/workflows/raw_client.py +3 -0
  846. vellum/resources/workspace_secrets/raw_client.py +3 -0
  847. vellum/resources/workspaces/raw_client.py +3 -0
  848. vellum/types/api_actor_type_enum.py +3 -0
  849. vellum/types/audio_input.py +3 -0
  850. vellum/types/audio_input_request.py +3 -0
  851. vellum/types/auth_type_enum.py +3 -0
  852. vellum/types/build_status_enum.py +3 -0
  853. vellum/types/check_workflow_execution_status_error.py +3 -0
  854. vellum/types/check_workflow_execution_status_response.py +3 -0
  855. vellum/types/code_execution_package_request.py +3 -0
  856. vellum/types/components_schemas_composio_execute_tool_request.py +3 -0
  857. vellum/types/components_schemas_composio_execute_tool_response.py +3 -0
  858. vellum/types/components_schemas_composio_integration_exec_config.py +3 -0
  859. vellum/types/components_schemas_composio_tool_definition.py +3 -0
  860. vellum/types/components_schemas_slim_composio_tool_definition.py +3 -0
  861. vellum/types/composio_execute_tool_request.py +3 -0
  862. vellum/types/composio_execute_tool_response.py +3 -0
  863. vellum/types/composio_integration_exec_config.py +3 -0
  864. vellum/types/composio_tool_definition.py +3 -0
  865. vellum/types/container_image_build_config.py +3 -0
  866. vellum/types/create_workflow_event_request.py +3 -0
  867. vellum/types/dataset_row_push_request.py +3 -0
  868. vellum/types/delimiter_chunker_config.py +3 -0
  869. vellum/types/delimiter_chunker_config_request.py +3 -0
  870. vellum/types/delimiter_chunking.py +3 -0
  871. vellum/types/delimiter_chunking_request.py +3 -0
  872. vellum/types/deprecated_prompt_request_input.py +3 -0
  873. vellum/types/document_input.py +3 -0
  874. vellum/types/document_input_request.py +3 -0
  875. vellum/types/environment_display_config.py +3 -0
  876. vellum/types/environment_read.py +3 -0
  877. vellum/types/error_detail_response.py +3 -0
  878. vellum/types/event_create_response.py +3 -0
  879. vellum/types/execute_workflow_async_response.py +3 -0
  880. vellum/types/execution_audio_vellum_value.py +3 -0
  881. vellum/types/execution_document_vellum_value.py +3 -0
  882. vellum/types/execution_image_vellum_value.py +3 -0
  883. vellum/types/execution_thinking_vellum_value.py +3 -0
  884. vellum/types/execution_video_vellum_value.py +3 -0
  885. vellum/types/external_parent_context.py +3 -0
  886. vellum/types/fast_embed_vectorizer_baai_bge_small_en_v_15.py +3 -0
  887. vellum/types/fast_embed_vectorizer_baai_bge_small_en_v_15_request.py +3 -0
  888. vellum/types/folder_entity_dataset.py +3 -0
  889. vellum/types/folder_entity_dataset_data.py +3 -0
  890. vellum/types/google_vertex_ai_vectorizer_gemini_embedding_001.py +3 -0
  891. vellum/types/google_vertex_ai_vectorizer_gemini_embedding_001_request.py +3 -0
  892. vellum/types/image_input.py +3 -0
  893. vellum/types/image_input_request.py +3 -0
  894. vellum/types/integration.py +3 -0
  895. vellum/types/integration_auth_config_integration.py +3 -0
  896. vellum/types/integration_auth_config_integration_credential.py +3 -0
  897. vellum/types/integration_credential_access_type.py +3 -0
  898. vellum/types/integration_name.py +3 -0
  899. vellum/types/integration_provider.py +3 -0
  900. vellum/types/integration_read.py +3 -0
  901. vellum/types/integration_trigger_context.py +3 -0
  902. vellum/types/named_scenario_input_audio_variable_value_request.py +3 -0
  903. vellum/types/named_scenario_input_document_variable_value_request.py +3 -0
  904. vellum/types/named_scenario_input_image_variable_value_request.py +3 -0
  905. vellum/types/named_scenario_input_video_variable_value_request.py +3 -0
  906. vellum/types/named_test_case_audio_variable_value.py +3 -0
  907. vellum/types/named_test_case_audio_variable_value_request.py +3 -0
  908. vellum/types/named_test_case_document_variable_value.py +3 -0
  909. vellum/types/named_test_case_document_variable_value_request.py +3 -0
  910. vellum/types/named_test_case_image_variable_value.py +3 -0
  911. vellum/types/named_test_case_image_variable_value_request.py +3 -0
  912. vellum/types/named_test_case_video_variable_value.py +3 -0
  913. vellum/types/named_test_case_video_variable_value_request.py +3 -0
  914. vellum/types/node_execution_log_body.py +3 -0
  915. vellum/types/node_execution_log_event.py +3 -0
  916. vellum/types/node_input_compiled_audio_value.py +3 -0
  917. vellum/types/node_input_compiled_document_value.py +3 -0
  918. vellum/types/node_input_compiled_image_value.py +3 -0
  919. vellum/types/node_input_compiled_video_value.py +3 -0
  920. vellum/types/node_output_compiled_thinking_value.py +3 -0
  921. vellum/types/paginated_slim_integration_auth_config_read_list.py +3 -0
  922. vellum/types/paginated_slim_integration_read_list.py +3 -0
  923. vellum/types/paginated_slim_tool_definition_list.py +3 -0
  924. vellum/types/paginated_workflow_deployment_release_list.py +3 -0
  925. vellum/types/private_vectorizer.py +3 -0
  926. vellum/types/private_vectorizer_request.py +3 -0
  927. vellum/types/prompt_request_audio_input.py +3 -0
  928. vellum/types/prompt_request_document_input.py +3 -0
  929. vellum/types/prompt_request_image_input.py +3 -0
  930. vellum/types/prompt_request_video_input.py +3 -0
  931. vellum/types/runner_config_request.py +3 -0
  932. vellum/types/scenario_input_audio_variable_value.py +3 -0
  933. vellum/types/scenario_input_document_variable_value.py +3 -0
  934. vellum/types/scenario_input_image_variable_value.py +3 -0
  935. vellum/types/scenario_input_video_variable_value.py +3 -0
  936. vellum/types/scheduled_trigger_context.py +3 -0
  937. vellum/types/severity_enum.py +3 -0
  938. vellum/types/slim_composio_tool_definition.py +3 -0
  939. vellum/types/slim_integration_auth_config_read.py +3 -0
  940. vellum/types/slim_integration_read.py +3 -0
  941. vellum/types/test_case_audio_variable_value.py +3 -0
  942. vellum/types/test_case_document_variable_value.py +3 -0
  943. vellum/types/test_case_image_variable_value.py +3 -0
  944. vellum/types/test_case_video_variable_value.py +3 -0
  945. vellum/types/thinking_vellum_value.py +3 -0
  946. vellum/types/thinking_vellum_value_request.py +3 -0
  947. vellum/types/type_checker_enum.py +3 -0
  948. vellum/types/update_active_workspace_response.py +3 -0
  949. vellum/types/uploaded_file_read.py +3 -0
  950. vellum/types/vellum_video.py +3 -0
  951. vellum/types/vellum_video_request.py +3 -0
  952. vellum/types/video_chat_message_content.py +3 -0
  953. vellum/types/video_chat_message_content_request.py +3 -0
  954. vellum/types/video_input.py +3 -0
  955. vellum/types/video_input_request.py +3 -0
  956. vellum/types/video_prompt_block.py +3 -0
  957. vellum/types/video_vellum_value.py +3 -0
  958. vellum/types/video_vellum_value_request.py +3 -0
  959. vellum/types/workflow_deployment_display_data.py +3 -0
  960. vellum/types/workflow_display_icon.py +3 -0
  961. vellum/types/workflow_event.py +3 -0
  962. vellum/types/workflow_execution_detail.py +3 -0
  963. vellum/types/workflow_execution_usage_calculation_fulfilled_body.py +3 -0
  964. vellum/types/workflow_input.py +3 -0
  965. vellum/types/workflow_output_audio.py +3 -0
  966. vellum/types/workflow_output_document.py +3 -0
  967. vellum/types/workflow_output_video.py +3 -0
  968. vellum/types/workflow_request_audio_input_request.py +3 -0
  969. vellum/types/workflow_request_document_input_request.py +3 -0
  970. vellum/types/workflow_request_image_input_request.py +3 -0
  971. vellum/types/workflow_request_video_input_request.py +3 -0
  972. vellum/types/workflow_resolved_state.py +3 -0
  973. vellum/types/workflow_result_event_state.py +3 -0
  974. vellum/types/workflow_sandbox_display_data.py +3 -0
  975. vellum/types/workflow_sandbox_execute_node_response.py +3 -0
  976. vellum/types/workspace_display_config.py +3 -0
  977. vellum/utils/files/__init__.py +18 -0
  978. vellum/utils/files/constants.py +47 -0
  979. vellum/utils/files/exceptions.py +25 -0
  980. vellum/utils/files/extensions.py +59 -0
  981. vellum/utils/files/mixin.py +135 -0
  982. vellum/utils/files/read.py +41 -0
  983. vellum/utils/files/stream.py +135 -0
  984. vellum/utils/files/tests/__init__.py +0 -0
  985. vellum/utils/files/tests/test_extensions.py +54 -0
  986. vellum/utils/files/tests/test_mixin.py +267 -0
  987. vellum/utils/files/tests/test_read.py +204 -0
  988. vellum/utils/files/tests/test_stream.py +199 -0
  989. vellum/utils/files/tests/test_upload.py +309 -0
  990. vellum/utils/files/tests/test_urls.py +252 -0
  991. vellum/utils/files/types.py +8 -0
  992. vellum/utils/files/upload.py +151 -0
  993. vellum/utils/files/urls.py +71 -0
  994. vellum/utils/json_encoder.py +95 -0
  995. vellum/utils/templating/custom_filters.py +4 -4
  996. vellum/utils/templating/render.py +4 -4
  997. vellum/utils/tests/__init__.py +0 -0
  998. vellum/utils/tests/test_json_encoder.py +92 -0
  999. vellum/utils/tests/test_vellum_client.py +95 -0
  1000. vellum/utils/uuid.py +19 -2
  1001. vellum/utils/vellum_client.py +47 -0
  1002. vellum/workflows/__init__.py +84 -0
  1003. vellum/workflows/constants.py +7 -0
  1004. vellum/workflows/context.py +27 -9
  1005. vellum/workflows/descriptors/base.py +169 -2
  1006. vellum/workflows/descriptors/exceptions.py +18 -1
  1007. vellum/workflows/descriptors/tests/test_utils.py +66 -0
  1008. vellum/workflows/descriptors/utils.py +27 -3
  1009. vellum/workflows/edges/__init__.py +2 -0
  1010. vellum/workflows/edges/trigger_edge.py +67 -0
  1011. vellum/workflows/emitters/__init__.py +2 -0
  1012. vellum/workflows/emitters/base.py +25 -0
  1013. vellum/workflows/emitters/vellum_emitter.py +150 -0
  1014. vellum/workflows/environment/__init__.py +2 -1
  1015. vellum/workflows/environment/environment.py +10 -3
  1016. vellum/workflows/errors/tests/__init__.py +0 -0
  1017. vellum/workflows/errors/tests/test_types.py +52 -0
  1018. vellum/workflows/errors/types.py +19 -1
  1019. vellum/workflows/events/__init__.py +2 -0
  1020. vellum/workflows/events/context.py +90 -0
  1021. vellum/workflows/events/exception_handling.py +58 -0
  1022. vellum/workflows/events/node.py +51 -11
  1023. vellum/workflows/events/relational_threads.py +41 -0
  1024. vellum/workflows/events/stream.py +28 -0
  1025. vellum/workflows/events/tests/test_basic_workflow.py +50 -0
  1026. vellum/workflows/events/tests/test_event.py +268 -20
  1027. vellum/workflows/events/types.py +34 -5
  1028. vellum/workflows/events/workflow.py +138 -9
  1029. vellum/workflows/exceptions.py +46 -7
  1030. vellum/workflows/executable.py +9 -0
  1031. vellum/workflows/expressions/accessor.py +65 -11
  1032. vellum/workflows/expressions/add.py +44 -0
  1033. vellum/workflows/expressions/comparison_utils.py +38 -0
  1034. vellum/workflows/expressions/concat.py +35 -0
  1035. vellum/workflows/expressions/contains.py +7 -0
  1036. vellum/workflows/expressions/greater_than.py +8 -1
  1037. vellum/workflows/expressions/greater_than_or_equal_to.py +8 -1
  1038. vellum/workflows/expressions/is_error.py +23 -0
  1039. vellum/workflows/expressions/length.py +46 -0
  1040. vellum/workflows/expressions/less_than.py +8 -1
  1041. vellum/workflows/expressions/less_than_or_equal_to.py +8 -1
  1042. vellum/workflows/expressions/minus.py +41 -0
  1043. vellum/workflows/expressions/tests/test_accessor.py +248 -0
  1044. vellum/workflows/expressions/tests/test_add.py +96 -0
  1045. vellum/workflows/expressions/tests/test_concat.py +108 -0
  1046. vellum/workflows/expressions/tests/test_contains.py +175 -0
  1047. vellum/workflows/expressions/tests/test_expressions.py +145 -32
  1048. vellum/workflows/expressions/tests/test_length.py +38 -0
  1049. vellum/workflows/expressions/tests/test_minus.py +109 -0
  1050. vellum/workflows/graph/graph.py +281 -13
  1051. vellum/workflows/graph/tests/test_graph.py +528 -1
  1052. vellum/workflows/inputs/__init__.py +2 -0
  1053. vellum/workflows/inputs/base.py +63 -13
  1054. vellum/workflows/inputs/dataset_row.py +186 -0
  1055. vellum/workflows/inputs/tests/test_inputs.py +182 -2
  1056. vellum/workflows/integrations/__init__.py +5 -0
  1057. vellum/workflows/integrations/composio_service.py +158 -0
  1058. vellum/workflows/integrations/mcp_service.py +282 -0
  1059. vellum/workflows/integrations/tests/__init__.py +0 -0
  1060. vellum/workflows/integrations/tests/test_mcp_service.py +273 -0
  1061. vellum/workflows/integrations/tests/test_vellum_integration_service.py +383 -0
  1062. vellum/workflows/integrations/vellum_integration_service.py +147 -0
  1063. vellum/workflows/loaders/__init__.py +3 -0
  1064. vellum/workflows/loaders/base.py +38 -0
  1065. vellum/workflows/nodes/__init__.py +2 -0
  1066. vellum/workflows/nodes/bases/base.py +165 -82
  1067. vellum/workflows/nodes/bases/base_adornment_node.py +55 -1
  1068. vellum/workflows/nodes/bases/tests/test_base_node.py +153 -4
  1069. vellum/workflows/nodes/core/error_node/node.py +11 -2
  1070. vellum/workflows/nodes/core/inline_subworkflow_node/node.py +30 -3
  1071. vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py +36 -1
  1072. vellum/workflows/nodes/core/map_node/node.py +33 -6
  1073. vellum/workflows/nodes/core/map_node/tests/test_node.py +106 -0
  1074. vellum/workflows/nodes/core/retry_node/node.py +1 -0
  1075. vellum/workflows/nodes/core/retry_node/tests/test_node.py +2 -3
  1076. vellum/workflows/nodes/core/templating_node/node.py +7 -2
  1077. vellum/workflows/nodes/core/templating_node/tests/test_templating_node.py +194 -1
  1078. vellum/workflows/nodes/core/try_node/node.py +1 -0
  1079. vellum/workflows/nodes/displayable/__init__.py +6 -0
  1080. vellum/workflows/nodes/displayable/api_node/node.py +13 -3
  1081. vellum/workflows/nodes/displayable/api_node/tests/test_api_node.py +151 -2
  1082. vellum/workflows/nodes/displayable/bases/api_node/node.py +71 -17
  1083. vellum/workflows/nodes/displayable/bases/api_node/tests/__init__.py +0 -0
  1084. vellum/workflows/nodes/displayable/bases/api_node/tests/test_node.py +150 -0
  1085. vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py +85 -7
  1086. vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py +324 -19
  1087. vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/test_inline_prompt_node.py +352 -32
  1088. vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py +86 -3
  1089. vellum/workflows/nodes/displayable/bases/search_node.py +26 -3
  1090. vellum/workflows/nodes/displayable/bases/tests/test_prompt_deployment_node.py +90 -0
  1091. vellum/workflows/nodes/displayable/bases/utils.py +82 -5
  1092. vellum/workflows/nodes/displayable/code_execution_node/node.py +30 -10
  1093. vellum/workflows/nodes/displayable/code_execution_node/tests/test_node.py +284 -14
  1094. vellum/workflows/nodes/displayable/code_execution_node/utils.py +8 -21
  1095. vellum/workflows/nodes/displayable/conditional_node/node.py +8 -4
  1096. vellum/workflows/nodes/displayable/final_output_node/node.py +34 -0
  1097. vellum/workflows/nodes/displayable/final_output_node/tests/test_node.py +146 -1
  1098. vellum/workflows/nodes/displayable/guardrail_node/node.py +13 -4
  1099. vellum/workflows/nodes/displayable/inline_prompt_node/node.py +9 -36
  1100. vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py +3 -0
  1101. vellum/workflows/nodes/displayable/merge_node/node.py +8 -1
  1102. vellum/workflows/nodes/displayable/note_node/node.py +11 -1
  1103. vellum/workflows/nodes/displayable/prompt_deployment_node/node.py +7 -23
  1104. vellum/workflows/nodes/displayable/search_node/node.py +15 -2
  1105. vellum/workflows/nodes/displayable/search_node/tests/test_node.py +33 -0
  1106. vellum/workflows/nodes/displayable/set_state_node/__init__.py +5 -0
  1107. vellum/workflows/nodes/displayable/set_state_node/node.py +71 -0
  1108. vellum/workflows/nodes/displayable/set_state_node/tests/__init__.py +0 -0
  1109. vellum/workflows/nodes/displayable/set_state_node/tests/test_node.py +212 -0
  1110. vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py +231 -59
  1111. vellum/workflows/nodes/displayable/subworkflow_deployment_node/tests/test_node.py +1 -1
  1112. vellum/workflows/nodes/displayable/tests/test_inline_text_prompt_node.py +4 -1
  1113. vellum/workflows/nodes/displayable/tests/test_search_node_error_handling.py +329 -0
  1114. vellum/workflows/nodes/displayable/tests/test_text_prompt_deployment_node.py +56 -14
  1115. vellum/workflows/nodes/displayable/tool_calling_node/__init__.py +3 -0
  1116. vellum/workflows/nodes/displayable/tool_calling_node/node.py +265 -0
  1117. vellum/workflows/nodes/displayable/tool_calling_node/state.py +11 -0
  1118. vellum/workflows/nodes/displayable/tool_calling_node/tests/__init__.py +0 -0
  1119. vellum/workflows/nodes/displayable/tool_calling_node/tests/test_composio_service.py +219 -0
  1120. vellum/workflows/nodes/displayable/tool_calling_node/tests/test_node.py +998 -0
  1121. vellum/workflows/nodes/displayable/tool_calling_node/tests/test_utils.py +316 -0
  1122. vellum/workflows/nodes/displayable/tool_calling_node/utils.py +654 -0
  1123. vellum/workflows/nodes/displayable/web_search_node/__init__.py +3 -0
  1124. vellum/workflows/nodes/displayable/web_search_node/node.py +136 -0
  1125. vellum/workflows/nodes/displayable/web_search_node/tests/__init__.py +0 -0
  1126. vellum/workflows/nodes/displayable/web_search_node/tests/test_node.py +246 -0
  1127. vellum/workflows/nodes/experimental/__init__.py +1 -3
  1128. vellum/workflows/nodes/mocks.py +71 -206
  1129. vellum/workflows/nodes/tests/test_mocks.py +0 -177
  1130. vellum/workflows/nodes/tests/test_utils.py +34 -5
  1131. vellum/workflows/nodes/utils.py +68 -14
  1132. vellum/workflows/outputs/base.py +88 -14
  1133. vellum/workflows/ports/node_ports.py +3 -0
  1134. vellum/workflows/ports/port.py +27 -12
  1135. vellum/workflows/ports/tests/test_port.py +45 -0
  1136. vellum/workflows/ports/utils.py +26 -6
  1137. vellum/workflows/references/__init__.py +2 -0
  1138. vellum/workflows/references/constant.py +4 -1
  1139. vellum/workflows/references/environment_variable.py +17 -9
  1140. vellum/workflows/references/lazy.py +8 -0
  1141. vellum/workflows/references/output.py +4 -6
  1142. vellum/workflows/references/state_value.py +24 -1
  1143. vellum/workflows/references/tests/test_lazy.py +58 -0
  1144. vellum/workflows/references/trigger.py +82 -0
  1145. vellum/workflows/references/workflow_input.py +8 -0
  1146. vellum/workflows/resolvers/base.py +19 -1
  1147. vellum/workflows/resolvers/resolver.py +81 -0
  1148. vellum/workflows/resolvers/tests/test_resolver.py +199 -0
  1149. vellum/workflows/resolvers/types.py +11 -0
  1150. vellum/workflows/runner/runner.py +770 -143
  1151. vellum/workflows/runner/tests/__init__.py +0 -0
  1152. vellum/workflows/runner/tests/test_runner.py +170 -0
  1153. vellum/workflows/sandbox.py +54 -9
  1154. vellum/workflows/state/base.py +238 -55
  1155. vellum/workflows/state/context.py +297 -7
  1156. vellum/workflows/state/delta.py +20 -0
  1157. vellum/workflows/state/encoder.py +2 -77
  1158. vellum/workflows/state/tests/test_state.py +292 -9
  1159. vellum/workflows/tests/test_dataset_row.py +191 -0
  1160. vellum/workflows/tests/test_sandbox.py +226 -0
  1161. vellum/workflows/tests/triggers/test_integration_trigger.py +156 -0
  1162. vellum/workflows/triggers/__init__.py +7 -0
  1163. vellum/workflows/triggers/base.py +523 -0
  1164. vellum/workflows/triggers/chat_message.py +141 -0
  1165. vellum/workflows/triggers/integration.py +198 -0
  1166. vellum/workflows/triggers/manual.py +39 -0
  1167. vellum/workflows/triggers/schedule.py +20 -0
  1168. vellum/workflows/triggers/tests/__init__.py +1 -0
  1169. vellum/workflows/triggers/tests/test_base_trigger_display.py +147 -0
  1170. vellum/workflows/triggers/tests/test_chat_message.py +257 -0
  1171. vellum/workflows/triggers/tests/test_integration.py +155 -0
  1172. vellum/workflows/types/__init__.py +2 -1
  1173. vellum/workflows/types/code_execution_node_wrappers.py +5 -1
  1174. vellum/workflows/types/core.py +23 -0
  1175. vellum/workflows/types/definition.py +161 -2
  1176. vellum/workflows/types/generics.py +17 -0
  1177. vellum/workflows/types/tests/test_definition.py +183 -0
  1178. vellum/workflows/types/tests/test_utils.py +23 -0
  1179. vellum/workflows/types/utils.py +65 -5
  1180. vellum/workflows/types/workflow_metadata.py +124 -0
  1181. vellum/workflows/utils/files.py +28 -0
  1182. vellum/workflows/utils/functions.py +386 -25
  1183. vellum/workflows/utils/hmac.py +44 -0
  1184. vellum/workflows/utils/names.py +32 -4
  1185. vellum/workflows/utils/pydantic_schema.py +56 -0
  1186. vellum/workflows/utils/tests/test_functions.py +480 -23
  1187. vellum/workflows/utils/tests/test_names.py +9 -0
  1188. vellum/workflows/utils/tests/test_validate.py +79 -0
  1189. vellum/workflows/utils/tests/test_vellum_variables.py +93 -3
  1190. vellum/workflows/utils/uuids.py +125 -0
  1191. vellum/workflows/utils/validate.py +108 -0
  1192. vellum/workflows/utils/vellum_variables.py +224 -20
  1193. vellum/workflows/utils/zip.py +46 -0
  1194. vellum/workflows/vellum_client.py +3 -33
  1195. vellum/workflows/workflows/base.py +503 -50
  1196. vellum/workflows/workflows/event_filters.py +13 -0
  1197. vellum/workflows/workflows/tests/test_base_workflow.py +169 -6
  1198. vellum/workflows/workflows/tests/test_event_filters.py +126 -0
  1199. {vellum_ai-0.14.63.dist-info → vellum_ai-1.13.5.dist-info}/METADATA +17 -13
  1200. vellum_ai-1.13.5.dist-info/RECORD +2224 -0
  1201. vellum_ai-1.13.5.dist-info/entry_points.txt +4 -0
  1202. vellum_cli/__init__.py +55 -4
  1203. vellum_cli/config.py +21 -5
  1204. vellum_cli/image_push.py +106 -8
  1205. vellum_cli/move.py +56 -0
  1206. vellum_cli/ping.py +6 -0
  1207. vellum_cli/pull.py +50 -14
  1208. vellum_cli/push.py +124 -34
  1209. vellum_cli/tests/conftest.py +13 -12
  1210. vellum_cli/tests/test_image_push.py +192 -21
  1211. vellum_cli/tests/test_image_push_error_handling.py +258 -0
  1212. vellum_cli/tests/test_init.py +7 -24
  1213. vellum_cli/tests/test_move.py +154 -0
  1214. vellum_cli/tests/test_ping.py +15 -0
  1215. vellum_cli/tests/test_pull.py +125 -129
  1216. vellum_cli/tests/test_push.py +693 -12
  1217. vellum_ee/assets/node-definitions.json +1348 -0
  1218. vellum_ee/scripts/generate_node_definitions.py +101 -0
  1219. vellum_ee/workflows/display/base.py +33 -58
  1220. vellum_ee/workflows/display/editor/types.py +3 -0
  1221. vellum_ee/workflows/display/exceptions.py +3 -0
  1222. vellum_ee/workflows/display/nodes/base_node_display.py +199 -58
  1223. vellum_ee/workflows/display/nodes/tests/test_base_node_display.py +242 -3
  1224. vellum_ee/workflows/display/nodes/types.py +1 -0
  1225. vellum_ee/workflows/display/nodes/vellum/api_node.py +26 -13
  1226. vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py +8 -5
  1227. vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +23 -7
  1228. vellum_ee/workflows/display/nodes/vellum/conditional_node.py +18 -7
  1229. vellum_ee/workflows/display/nodes/vellum/error_node.py +2 -4
  1230. vellum_ee/workflows/display/nodes/vellum/final_output_node.py +3 -14
  1231. vellum_ee/workflows/display/nodes/vellum/guardrail_node.py +2 -5
  1232. vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py +85 -44
  1233. vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py +44 -18
  1234. vellum_ee/workflows/display/nodes/vellum/map_node.py +31 -15
  1235. vellum_ee/workflows/display/nodes/vellum/merge_node.py +2 -5
  1236. vellum_ee/workflows/display/nodes/vellum/note_node.py +20 -6
  1237. vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py +13 -9
  1238. vellum_ee/workflows/display/nodes/vellum/retry_node.py +5 -6
  1239. vellum_ee/workflows/display/nodes/vellum/search_node.py +76 -19
  1240. vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py +46 -12
  1241. vellum_ee/workflows/display/nodes/vellum/templating_node.py +3 -6
  1242. vellum_ee/workflows/display/nodes/vellum/tests/test_api_node.py +65 -0
  1243. vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py +236 -3
  1244. vellum_ee/workflows/display/nodes/vellum/tests/test_final_output_node.py +216 -0
  1245. vellum_ee/workflows/display/nodes/vellum/tests/test_inline_subworkflow_node.py +88 -0
  1246. vellum_ee/workflows/display/nodes/vellum/tests/test_note_node.py +44 -7
  1247. vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_deployment_node.py +71 -1
  1248. vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py +120 -26
  1249. vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py +1 -1
  1250. vellum_ee/workflows/display/nodes/vellum/tests/test_search_node.py +104 -0
  1251. vellum_ee/workflows/display/nodes/vellum/tests/test_subworkflow_deployment_node.py +28 -18
  1252. vellum_ee/workflows/display/nodes/vellum/tests/test_templating_node.py +2 -2
  1253. vellum_ee/workflows/display/nodes/vellum/tests/test_tool_calling_node.py +649 -49
  1254. vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py +2 -2
  1255. vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py +114 -10
  1256. vellum_ee/workflows/display/nodes/vellum/try_node.py +5 -6
  1257. vellum_ee/workflows/display/nodes/vellum/utils.py +54 -12
  1258. vellum_ee/workflows/display/tests/test_base_workflow_display.py +396 -25
  1259. vellum_ee/workflows/display/tests/test_json_schema_validation.py +190 -0
  1260. vellum_ee/workflows/display/tests/test_mocks.py +912 -0
  1261. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py +2 -2
  1262. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py +114 -39
  1263. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +342 -90
  1264. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py +24 -17
  1265. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py +263 -65
  1266. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py +69 -12
  1267. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py +36 -305
  1268. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py +92 -431
  1269. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py +143 -429
  1270. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py +3 -123
  1271. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py +24 -110
  1272. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py +12 -90
  1273. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py +17 -86
  1274. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py +363 -100
  1275. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py +97 -315
  1276. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +66 -319
  1277. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py +24 -99
  1278. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py +54 -180
  1279. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py +32 -88
  1280. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_set_state_node_serialization.py +86 -0
  1281. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py +217 -142
  1282. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py +34 -142
  1283. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py +15 -8
  1284. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_composio_serialization.py +89 -0
  1285. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py +184 -0
  1286. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_tool_wrapper_serialization.py +84 -0
  1287. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_mcp_serialization.py +104 -0
  1288. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_parent_input.py +89 -0
  1289. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py +71 -23
  1290. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_tool_wrapper_serialization.py +71 -0
  1291. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_vellum_integration_serialization.py +187 -0
  1292. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_workflow_deployment_serialization.py +107 -0
  1293. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py +2 -4
  1294. vellum_ee/workflows/display/tests/workflow_serialization/test_chat_message_dict_reference_serialization.py +129 -0
  1295. vellum_ee/workflows/display/tests/workflow_serialization/test_chat_message_trigger_serialization.py +412 -0
  1296. vellum_ee/workflows/display/tests/workflow_serialization/test_code_tool_node_reference_error.py +106 -0
  1297. vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py +20 -47
  1298. vellum_ee/workflows/display/tests/workflow_serialization/test_duplicate_trigger_name_validation.py +208 -0
  1299. vellum_ee/workflows/display/tests/workflow_serialization/test_final_output_node_map_reference_serialization.py +88 -0
  1300. vellum_ee/workflows/display/tests/workflow_serialization/test_final_output_node_not_referenced_by_workflow_outputs.py +45 -0
  1301. vellum_ee/workflows/display/tests/workflow_serialization/test_infinite_loop_validation.py +66 -0
  1302. vellum_ee/workflows/display/tests/workflow_serialization/test_int_input_serialization.py +40 -0
  1303. vellum_ee/workflows/display/tests/workflow_serialization/test_integration_trigger_serialization.py +300 -0
  1304. vellum_ee/workflows/display/tests/workflow_serialization/test_integration_trigger_validation.py +173 -0
  1305. vellum_ee/workflows/display/tests/workflow_serialization/test_integration_trigger_with_entrypoint_node_id.py +91 -0
  1306. vellum_ee/workflows/display/tests/workflow_serialization/test_list_vellum_document_serialization.py +69 -0
  1307. vellum_ee/workflows/display/tests/workflow_serialization/test_manual_trigger_serialization.py +120 -0
  1308. vellum_ee/workflows/display/tests/workflow_serialization/test_map_node_with_terminal_nodes_serialization.py +62 -0
  1309. vellum_ee/workflows/display/tests/workflow_serialization/test_multi_trigger_same_node_serialization.py +210 -0
  1310. vellum_ee/workflows/display/tests/workflow_serialization/test_no_triggers_no_entrypoint_validation.py +64 -0
  1311. vellum_ee/workflows/display/tests/workflow_serialization/test_partial_workflow_meta_display_override.py +55 -0
  1312. vellum_ee/workflows/display/tests/workflow_serialization/test_sandbox_dataset_mocks_serialization.py +268 -0
  1313. vellum_ee/workflows/display/tests/workflow_serialization/test_sandbox_invalid_pdf_data_url.py +49 -0
  1314. vellum_ee/workflows/display/tests/workflow_serialization/test_sandbox_validation_errors.py +112 -0
  1315. vellum_ee/workflows/display/tests/workflow_serialization/test_scheduled_trigger_serialization.py +276 -0
  1316. vellum_ee/workflows/display/tests/workflow_serialization/test_terminal_node_any_serialization.py +49 -0
  1317. vellum_ee/workflows/display/tests/workflow_serialization/test_terminal_node_in_unused_graphs_serialization.py +53 -0
  1318. vellum_ee/workflows/display/tests/workflow_serialization/test_trigger_display_from_display_class.py +153 -0
  1319. vellum_ee/workflows/display/tests/workflow_serialization/test_web_search_node_serialization.py +72 -0
  1320. vellum_ee/workflows/display/tests/workflow_serialization/test_workflow_input_parameterization_error.py +37 -0
  1321. vellum_ee/workflows/display/types.py +29 -2
  1322. vellum_ee/workflows/display/utils/auto_layout.py +130 -0
  1323. vellum_ee/workflows/display/utils/events.py +57 -0
  1324. vellum_ee/workflows/display/utils/exceptions.py +53 -0
  1325. vellum_ee/workflows/display/utils/expressions.py +669 -55
  1326. vellum_ee/workflows/display/utils/metadata.py +211 -0
  1327. vellum_ee/workflows/display/utils/registry.py +46 -0
  1328. vellum_ee/workflows/display/utils/tests/__init__.py +0 -0
  1329. vellum_ee/workflows/display/utils/tests/test_auto_layout.py +56 -0
  1330. vellum_ee/workflows/display/utils/tests/test_events.py +185 -0
  1331. vellum_ee/workflows/display/utils/tests/test_expressions.py +92 -0
  1332. vellum_ee/workflows/display/utils/tests/test_metadata.py +31 -0
  1333. vellum_ee/workflows/display/utils/triggers.py +153 -0
  1334. vellum_ee/workflows/display/utils/vellum.py +94 -5
  1335. vellum_ee/workflows/display/vellum.py +2 -128
  1336. vellum_ee/workflows/display/workflows/__init__.py +0 -1
  1337. vellum_ee/workflows/display/workflows/base_workflow_display.py +1224 -190
  1338. vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py +26 -0
  1339. vellum_ee/workflows/display/workflows/tests/test_workflow_display.py +379 -41
  1340. vellum_ee/workflows/server/namespaces.py +18 -0
  1341. vellum_ee/workflows/server/virtual_file_loader.py +131 -6
  1342. vellum_ee/workflows/tests/local_workflow/display/nodes/final_output.py +1 -1
  1343. vellum_ee/workflows/tests/local_workflow/display/nodes/templating_node.py +1 -1
  1344. vellum_ee/workflows/tests/local_workflow/display/workflow.py +11 -14
  1345. vellum_ee/workflows/tests/test_display_meta.py +43 -0
  1346. vellum_ee/workflows/tests/test_registry.py +169 -0
  1347. vellum_ee/workflows/tests/test_serialize_module.py +432 -0
  1348. vellum_ee/workflows/tests/test_server.py +616 -44
  1349. vellum_ee/workflows/tests/test_virtual_files.py +48 -0
  1350. vellum/client/resources/release_reviews/client.py +0 -137
  1351. vellum/workflows/nodes/experimental/openai_chat_completion_node/__init__.py +0 -5
  1352. vellum/workflows/nodes/experimental/openai_chat_completion_node/node.py +0 -266
  1353. vellum/workflows/nodes/experimental/tool_calling_node/__init__.py +0 -3
  1354. vellum/workflows/nodes/experimental/tool_calling_node/node.py +0 -135
  1355. vellum/workflows/nodes/experimental/tool_calling_node/tests/test_node.py +0 -53
  1356. vellum/workflows/nodes/experimental/tool_calling_node/utils.py +0 -259
  1357. vellum_ai-0.14.63.dist-info/RECORD +0 -1719
  1358. vellum_ai-0.14.63.dist-info/entry_points.txt +0 -3
  1359. vellum_ee/workflows/display/workflows/vellum_workflow_display.py +0 -9
  1360. /vellum/{workflows/nodes/displayable/bases/inline_prompt_node → prompts}/constants.py +0 -0
  1361. {vellum_ai-0.14.63.dist-info → vellum_ai-1.13.5.dist-info}/LICENSE +0 -0
  1362. {vellum_ai-0.14.63.dist-info → vellum_ai-1.13.5.dist-info}/WHEEL +0 -0
@@ -0,0 +1,998 @@
1
+ import pytest
2
+ import json
3
+ from unittest import mock
4
+ from uuid import uuid4
5
+ from typing import Any, Iterator, List, cast
6
+
7
+ from vellum import ChatMessage
8
+ from vellum.client.core.api_error import ApiError
9
+ from vellum.client.types.execute_prompt_event import ExecutePromptEvent
10
+ from vellum.client.types.fulfilled_execute_prompt_event import FulfilledExecutePromptEvent
11
+ from vellum.client.types.function_call import FunctionCall
12
+ from vellum.client.types.function_call_vellum_value import FunctionCallVellumValue
13
+ from vellum.client.types.initiated_execute_prompt_event import InitiatedExecutePromptEvent
14
+ from vellum.client.types.prompt_output import PromptOutput
15
+ from vellum.client.types.string_chat_message_content import StringChatMessageContent
16
+ from vellum.client.types.string_vellum_value import StringVellumValue
17
+ from vellum.client.types.variable_prompt_block import VariablePromptBlock
18
+ from vellum.prompts.constants import DEFAULT_PROMPT_PARAMETERS
19
+ from vellum.workflows import BaseWorkflow
20
+ from vellum.workflows.constants import AuthorizationType, VellumIntegrationProviderType
21
+ from vellum.workflows.errors.types import WorkflowErrorCode
22
+ from vellum.workflows.exceptions import NodeException
23
+ from vellum.workflows.inputs.base import BaseInputs
24
+ from vellum.workflows.nodes.bases import BaseNode
25
+ from vellum.workflows.nodes.displayable.tool_calling_node.node import ToolCallingNode
26
+ from vellum.workflows.nodes.displayable.tool_calling_node.state import ToolCallingState
27
+ from vellum.workflows.nodes.displayable.tool_calling_node.utils import (
28
+ create_function_node,
29
+ create_mcp_tool_node,
30
+ create_router_node,
31
+ create_tool_prompt_node,
32
+ )
33
+ from vellum.workflows.outputs.base import BaseOutput, BaseOutputs
34
+ from vellum.workflows.ports.utils import validate_ports
35
+ from vellum.workflows.state.base import BaseState, StateMeta
36
+ from vellum.workflows.state.context import WorkflowContext
37
+ from vellum.workflows.types.definition import (
38
+ DeploymentDefinition,
39
+ MCPServer,
40
+ MCPToolDefinition,
41
+ VellumIntegrationToolDefinition,
42
+ )
43
+ from vellum.workflows.workflows.event_filters import all_workflow_event_filter
44
+
45
+
46
+ def first_function() -> str:
47
+ return "first_function"
48
+
49
+
50
+ def second_function() -> str:
51
+ return "second_function"
52
+
53
+
54
+ def test_router_node_port_ordering_with_multiple_tools():
55
+ """
56
+ Test that router node ports are created in the correct order: on_if, on_elif, ..., on_else.
57
+
58
+ This test validates the fix for the bug where multiple tools would create multiple on_if
59
+ ports instead of on_if followed by on_elif ports, which violates port validation rules.
60
+ """
61
+
62
+ # GIVEN three functions to ensure we test multiple elif cases
63
+ def third_function() -> str:
64
+ return "third_function"
65
+
66
+ # AND a tool prompt node
67
+ tool_prompt_node = create_tool_prompt_node(
68
+ ml_model="test-model",
69
+ blocks=[],
70
+ functions=[first_function, second_function, third_function],
71
+ prompt_inputs=None,
72
+ parameters=DEFAULT_PROMPT_PARAMETERS,
73
+ )
74
+
75
+ # WHEN a router node is created with multiple functions
76
+ router_node = create_router_node(
77
+ functions=[first_function, second_function, third_function],
78
+ tool_prompt_node=tool_prompt_node,
79
+ )
80
+
81
+ # THEN the first function port should be an on_if port
82
+ first_function_port = getattr(router_node.Ports, "first_function")
83
+ assert first_function_port._condition_type.value == "IF"
84
+
85
+ # AND the second function port should be an on_elif port
86
+ second_function_port = getattr(router_node.Ports, "second_function")
87
+ assert second_function_port._condition_type.value == "ELIF"
88
+
89
+ # AND the third function port should also be an on_elif port
90
+ third_function_port = getattr(router_node.Ports, "third_function")
91
+ assert third_function_port._condition_type.value == "ELIF"
92
+
93
+ # AND the default port should be an on_else port
94
+ default_port = getattr(router_node.Ports, "default")
95
+ assert default_port._condition_type.value == "ELSE"
96
+
97
+ # AND the ports should pass validation
98
+ ports = [first_function_port, second_function_port, third_function_port, default_port]
99
+ # This should not raise an exception
100
+ validate_ports(ports)
101
+
102
+
103
+ def test_port_condition_match_function_name():
104
+ """
105
+ Test that the port condition correctly matches the function name.
106
+ """
107
+ # GIVEN a tool prompt node
108
+ tool_prompt_node = create_tool_prompt_node(
109
+ ml_model="test-model",
110
+ blocks=[],
111
+ functions=[first_function, second_function],
112
+ prompt_inputs=None,
113
+ parameters=DEFAULT_PROMPT_PARAMETERS,
114
+ )
115
+
116
+ # AND a router node that references the tool prompt node
117
+ router_node = create_router_node(
118
+ functions=[first_function, second_function],
119
+ tool_prompt_node=tool_prompt_node,
120
+ )
121
+
122
+ # AND a state with a function call to the first function
123
+ state = ToolCallingState(
124
+ meta=StateMeta(
125
+ node_outputs={
126
+ tool_prompt_node.Outputs.results: [
127
+ FunctionCallVellumValue(
128
+ value=FunctionCall(
129
+ arguments={}, id="call_zp7pBQjGAOBCr7lo0AbR1HXT", name="first_function", state="FULFILLED"
130
+ ),
131
+ )
132
+ ],
133
+ },
134
+ )
135
+ )
136
+
137
+ # WHEN the port condition is resolved
138
+ # THEN the first function port should be true
139
+ first_function_port = getattr(router_node.Ports, "first_function")
140
+ assert first_function_port.resolve_condition(state) is True
141
+
142
+ # AND the second function port should be false
143
+ second_function_port = getattr(router_node.Ports, "second_function")
144
+ assert second_function_port.resolve_condition(state) is False
145
+
146
+ # AND the default port should be false
147
+ default_port = getattr(router_node.Ports, "default")
148
+ assert default_port.resolve_condition(state) is False
149
+
150
+
151
+ def test_tool_calling_node_inline_workflow_context():
152
+ """
153
+ Test that the tool calling node correctly passes the context to the inline workflow.
154
+ This specifically tests that inline workflows receive the correct context.
155
+ """
156
+
157
+ # GIVEN a test workflow that captures its context
158
+ class MyNode(BaseNode):
159
+ class Outputs(BaseOutputs):
160
+ generated_files: Any
161
+
162
+ def run(self) -> Outputs:
163
+ return self.Outputs(generated_files=self._context.generated_files)
164
+
165
+ class MyWorkflow(BaseWorkflow[BaseInputs, BaseState]):
166
+ graph = MyNode
167
+
168
+ class Outputs(BaseOutputs):
169
+ generated_files = MyNode.Outputs.generated_files
170
+
171
+ # GIVEN a tool prompt node
172
+ tool_prompt_node = create_tool_prompt_node(
173
+ ml_model="test-model",
174
+ blocks=[],
175
+ functions=[MyWorkflow],
176
+ prompt_inputs=None,
177
+ parameters=DEFAULT_PROMPT_PARAMETERS,
178
+ )
179
+
180
+ # WHEN we create a function node for the workflow
181
+ function_node_class = create_function_node(
182
+ function=MyWorkflow,
183
+ tool_prompt_node=tool_prompt_node,
184
+ )
185
+
186
+ # AND we create a state with a function call
187
+ state = ToolCallingState(
188
+ meta=StateMeta(
189
+ node_outputs={
190
+ tool_prompt_node.Outputs.results: [
191
+ FunctionCallVellumValue(
192
+ value=FunctionCall(
193
+ arguments={},
194
+ id="call_test",
195
+ name="MyWorkflow",
196
+ state="FULFILLED",
197
+ ),
198
+ )
199
+ ],
200
+ },
201
+ )
202
+ )
203
+
204
+ # AND we create an instance with a context containing generated_files
205
+ function_node = function_node_class(state=state)
206
+
207
+ # Create a parent context with test data
208
+ parent_context = WorkflowContext(
209
+ generated_files={"script.py": "print('hello world')"},
210
+ )
211
+ function_node._context = parent_context
212
+
213
+ # AND the _inputs should be populated with resolved values from state
214
+ assert function_node._inputs == {
215
+ function_node_class.arguments: {},
216
+ function_node_class.function_call_id: "call_test",
217
+ }
218
+
219
+ # WHEN the function node runs
220
+ outputs = list(function_node.run())
221
+
222
+ # THEN the workflow should have run successfully
223
+ assert outputs is not None
224
+
225
+ # AND the chat history should contain a function response
226
+ assert len(function_node.state.chat_history) == 1
227
+ function_response = function_node.state.chat_history[0]
228
+ assert function_response.role == "FUNCTION"
229
+
230
+ # AND the response should contain the generated files
231
+ assert isinstance(function_response.content, StringChatMessageContent)
232
+ data = json.loads(function_response.content.value)
233
+ assert data["generated_files"] == {"script.py": "print('hello world')"}
234
+
235
+
236
+ def test_deployment_definition_release_tag_defaults_to_latest():
237
+ """
238
+ Test that when creating a DeploymentDefinition without specifying release_tag,
239
+ it defaults to "LATEST".
240
+ """
241
+ # WHEN we create a deployment definition without specifying release_tag
242
+ deployment_config = DeploymentDefinition(deployment="test-deployment")
243
+
244
+ # THEN the release_tag should default to "LATEST"
245
+ assert deployment_config.release_tag == "LATEST"
246
+
247
+
248
+ def test_tool_calling_node_with_user_provided_chat_history_block(vellum_adhoc_prompt_client):
249
+ """
250
+ Test that ToolCallingNode with user-provided chat history block merges user and node messages.
251
+ """
252
+
253
+ # GIVEN a ToolCallingNode with a user-provided chat history block
254
+ user_chat_history_block = VariablePromptBlock(
255
+ block_type="VARIABLE",
256
+ input_variable="chat_history",
257
+ state=None,
258
+ cache_config=None,
259
+ )
260
+
261
+ class TestToolCallingNode(ToolCallingNode):
262
+ ml_model = "gpt-4o-mini"
263
+ blocks = [user_chat_history_block]
264
+ functions = [first_function]
265
+ prompt_inputs = {"chat_history": [ChatMessage(role="USER", text="Hello from user")]}
266
+ max_prompt_iterations = 1
267
+
268
+ def generate_prompt_events(*args: Any, **kwargs: Any) -> Iterator[Any]:
269
+ execution_id = str(uuid4())
270
+ events = [
271
+ InitiatedExecutePromptEvent(execution_id=execution_id),
272
+ FulfilledExecutePromptEvent(
273
+ execution_id=execution_id,
274
+ outputs=[StringVellumValue(value="Hello! I can help you.")],
275
+ ),
276
+ ]
277
+ yield from events
278
+
279
+ vellum_adhoc_prompt_client.adhoc_execute_prompt_stream.side_effect = generate_prompt_events
280
+
281
+ # AND a state
282
+ state = BaseState()
283
+
284
+ # WHEN the ToolCallingNode runs
285
+ node = TestToolCallingNode(state=state)
286
+ list(node.run())
287
+
288
+ # THEN the API should be called with the correct blocks
289
+ mock_api = vellum_adhoc_prompt_client.adhoc_execute_prompt_stream
290
+ assert mock_api.call_count >= 1
291
+
292
+ # AND the blocks should include the user-provided chat_history block
293
+ call_kwargs = mock_api.call_args.kwargs
294
+ blocks = call_kwargs["blocks"]
295
+
296
+ chat_history_blocks = [
297
+ block for block in blocks if block.block_type == "VARIABLE" and block.input_variable == "chat_history"
298
+ ]
299
+ assert len(chat_history_blocks) == 1
300
+
301
+ # AND the input_values should include the user's chat history
302
+ input_values = call_kwargs["input_values"]
303
+ chat_history_inputs = [
304
+ input_val for input_val in input_values if hasattr(input_val, "key") and input_val.key == "chat_history"
305
+ ]
306
+ assert len(chat_history_inputs) == 1
307
+ assert chat_history_inputs[0].value == [ChatMessage(role="USER", text="Hello from user")]
308
+
309
+
310
+ def test_tool_calling_node_with_generic_type_parameter():
311
+ # GIVEN a custom state class
312
+ class State(BaseState):
313
+ pass
314
+
315
+ # AND a ToolCallingNode that uses the generic type parameter
316
+ class TestToolCallingNode(ToolCallingNode[State]):
317
+ ml_model = "gpt-4o-mini"
318
+ blocks = []
319
+ functions = [first_function]
320
+ max_prompt_iterations = 1
321
+
322
+ # WHEN we create an instance of the node
323
+ state = State()
324
+ node = TestToolCallingNode(state=state)
325
+
326
+ # THEN the node should be created successfully
327
+ assert node is not None
328
+ assert isinstance(node, TestToolCallingNode)
329
+ assert node.state == state
330
+
331
+
332
+ def test_tool_calling_node_workflow_is_dynamic(vellum_adhoc_prompt_client):
333
+ """
334
+ Test workflow_version_exec_config without any mocks to see if that's the issue.
335
+ """
336
+
337
+ def generate_prompt_events(*args, **kwargs) -> Iterator[ExecutePromptEvent]:
338
+ execution_id = str(uuid4())
339
+
340
+ call_count = vellum_adhoc_prompt_client.adhoc_execute_prompt_stream.call_count
341
+ expected_outputs: List[PromptOutput]
342
+ if call_count == 1:
343
+ expected_outputs = [
344
+ FunctionCallVellumValue(
345
+ value=FunctionCall(
346
+ arguments={"var_1": 1, "var_2": 2},
347
+ id="call_123",
348
+ name="add_numbers_workflow",
349
+ state="FULFILLED",
350
+ ),
351
+ ),
352
+ ]
353
+ else:
354
+ expected_outputs = [StringVellumValue(value="The result is 3")]
355
+
356
+ events: List[ExecutePromptEvent] = [
357
+ InitiatedExecutePromptEvent(execution_id=execution_id),
358
+ FulfilledExecutePromptEvent(
359
+ execution_id=execution_id,
360
+ outputs=expected_outputs,
361
+ ),
362
+ ]
363
+ yield from events
364
+
365
+ vellum_adhoc_prompt_client.adhoc_execute_prompt_stream.side_effect = generate_prompt_events
366
+
367
+ class AddNode(BaseNode):
368
+
369
+ class Outputs(BaseNode.Outputs):
370
+ result: int
371
+
372
+ def run(self) -> Outputs:
373
+ return self.Outputs(result=1)
374
+
375
+ class AddNumbersWorkflow(BaseWorkflow[BaseInputs, BaseState]):
376
+ """
377
+ A simple workflow that adds two numbers.
378
+ """
379
+
380
+ graph = AddNode
381
+
382
+ class Outputs(BaseWorkflow.Outputs):
383
+ result = AddNode.Outputs.result
384
+
385
+ class TestToolCallingNode(ToolCallingNode):
386
+ ml_model = "gpt-4o-mini"
387
+ blocks = []
388
+ functions = [AddNumbersWorkflow]
389
+ prompt_inputs = {}
390
+
391
+ # GIVEN a workflow with just a tool calling node
392
+ class AgentWorkflow(BaseWorkflow[BaseInputs, BaseState]):
393
+ graph = TestToolCallingNode
394
+
395
+ class Outputs(BaseWorkflow.Outputs):
396
+ text: str = TestToolCallingNode.Outputs.text
397
+ chat_history: List[ChatMessage] = TestToolCallingNode.Outputs.chat_history
398
+
399
+ workflow = AgentWorkflow()
400
+
401
+ # WHEN the workflow is executed and we capture all events
402
+ events = list(workflow.stream(event_filter=all_workflow_event_filter))
403
+
404
+ # AND we should find workflow execution initiated events
405
+ initiated_events = [event for event in events if event.name == "workflow.execution.initiated"]
406
+ assert len(initiated_events) == 3 # Main workflow + tool calling internal + inline workflow
407
+
408
+ assert initiated_events[0].body.workflow_definition.is_dynamic is False # Main workflow
409
+ assert initiated_events[1].body.workflow_definition.is_dynamic is True # Tool calling internal
410
+ assert initiated_events[2].body.workflow_definition.is_dynamic is True # Inline workflow
411
+
412
+
413
+ def test_tool_node_preserves_node_exception():
414
+ """Test that tool nodes preserve NodeException error codes and raw_data."""
415
+
416
+ def failing_function() -> str:
417
+ raise NodeException(
418
+ message="Custom error",
419
+ code=WorkflowErrorCode.INVALID_INPUTS,
420
+ raw_data={"key": "value"},
421
+ )
422
+
423
+ tool_prompt_node = create_tool_prompt_node(
424
+ ml_model="test-model",
425
+ blocks=[],
426
+ functions=[failing_function],
427
+ prompt_inputs=None,
428
+ parameters=DEFAULT_PROMPT_PARAMETERS,
429
+ )
430
+
431
+ function_node_class = create_function_node(
432
+ function=failing_function,
433
+ tool_prompt_node=tool_prompt_node,
434
+ )
435
+
436
+ state = ToolCallingState(
437
+ meta=StateMeta(
438
+ node_outputs={
439
+ tool_prompt_node.Outputs.results: [
440
+ FunctionCallVellumValue(
441
+ value=FunctionCall(
442
+ arguments={},
443
+ id="call_123",
444
+ name="failing_function",
445
+ state="FULFILLED",
446
+ ),
447
+ )
448
+ ],
449
+ },
450
+ )
451
+ )
452
+
453
+ function_node = function_node_class(state=state)
454
+
455
+ with pytest.raises(NodeException) as exc_info:
456
+ list(function_node.run())
457
+
458
+ e = exc_info.value
459
+ assert e.code == WorkflowErrorCode.INVALID_INPUTS
460
+ assert e.raw_data == {"key": "value"}
461
+ assert "Custom error" in e.message
462
+
463
+
464
+ def test_function_node_outputs_result():
465
+ """Test that FunctionNode yields output with name 'result' matching the Outputs class."""
466
+
467
+ # GIVEN a simple function that returns a value
468
+ def my_tool_function() -> str:
469
+ return "test_result"
470
+
471
+ # AND a tool prompt node with that function
472
+ tool_prompt_node = create_tool_prompt_node(
473
+ ml_model="test-model",
474
+ blocks=[],
475
+ functions=[my_tool_function],
476
+ prompt_inputs=None,
477
+ parameters=DEFAULT_PROMPT_PARAMETERS,
478
+ )
479
+
480
+ function_node_class = create_function_node(
481
+ function=my_tool_function,
482
+ tool_prompt_node=tool_prompt_node,
483
+ )
484
+
485
+ # AND a state with a function call
486
+ state = ToolCallingState(
487
+ meta=StateMeta(
488
+ node_outputs={
489
+ tool_prompt_node.Outputs.results: [
490
+ FunctionCallVellumValue(
491
+ value=FunctionCall(
492
+ arguments={},
493
+ id="call_789",
494
+ name="my_tool_function",
495
+ state="FULFILLED",
496
+ ),
497
+ )
498
+ ],
499
+ },
500
+ )
501
+ )
502
+
503
+ function_node = function_node_class(state=state)
504
+
505
+ # WHEN the function node runs
506
+ outputs = list(function_node.run())
507
+
508
+ # THEN there should be exactly one output with name "result"
509
+ assert len(outputs) == 1
510
+ result_output = outputs[0]
511
+ assert isinstance(result_output, BaseOutput)
512
+ assert result_output.name == "result"
513
+ assert result_output.is_fulfilled is True
514
+ assert result_output.value == "test_result"
515
+
516
+
517
+ def test_tool_node_error_message_includes_function_name():
518
+ """Test that error messages include the actual function name, not 'wrapper'."""
519
+
520
+ # GIVEN a function that raises a regular exception
521
+ def my_tool_function() -> str:
522
+ raise ValueError("Something went wrong")
523
+
524
+ # AND a tool prompt node with that function
525
+ tool_prompt_node = create_tool_prompt_node(
526
+ ml_model="test-model",
527
+ blocks=[],
528
+ functions=[my_tool_function],
529
+ prompt_inputs=None,
530
+ parameters=DEFAULT_PROMPT_PARAMETERS,
531
+ )
532
+
533
+ function_node_class = create_function_node(
534
+ function=my_tool_function,
535
+ tool_prompt_node=tool_prompt_node,
536
+ )
537
+
538
+ # AND a state with a function call
539
+ state = ToolCallingState(
540
+ meta=StateMeta(
541
+ node_outputs={
542
+ tool_prompt_node.Outputs.results: [
543
+ FunctionCallVellumValue(
544
+ value=FunctionCall(
545
+ arguments={},
546
+ id="call_456",
547
+ name="my_tool_function",
548
+ state="FULFILLED",
549
+ ),
550
+ )
551
+ ],
552
+ },
553
+ )
554
+ )
555
+
556
+ function_node = function_node_class(state=state)
557
+
558
+ # WHEN the function node runs and raises an exception
559
+ with pytest.raises(NodeException) as exc_info:
560
+ list(function_node.run())
561
+
562
+ # THEN the error message should include the actual function name
563
+ e = exc_info.value
564
+ assert "my_tool_function" in e.message
565
+ assert "wrapper" not in e.message.lower()
566
+ assert "Something went wrong" in e.message
567
+
568
+
569
+ def test_mcp_node_outputs_result():
570
+ """Test that MCPNode yields output with name 'result' matching the Outputs class."""
571
+
572
+ # GIVEN an MCP tool definition
573
+ mcp_server = MCPServer(
574
+ name="test_server",
575
+ url="https://test.server.com",
576
+ authorization_type=AuthorizationType.BEARER_TOKEN,
577
+ )
578
+ mcp_tool = MCPToolDefinition(
579
+ name="test_tool",
580
+ server=mcp_server,
581
+ description="A test MCP tool",
582
+ parameters={},
583
+ )
584
+
585
+ tool_prompt_node = create_tool_prompt_node(
586
+ ml_model="test-model",
587
+ blocks=[],
588
+ functions=[mcp_tool],
589
+ prompt_inputs=None,
590
+ parameters=DEFAULT_PROMPT_PARAMETERS,
591
+ )
592
+
593
+ mcp_node_class = create_mcp_tool_node(
594
+ tool_def=mcp_tool,
595
+ tool_prompt_node=tool_prompt_node,
596
+ )
597
+
598
+ # AND a state with a function call
599
+ state = ToolCallingState(
600
+ meta=StateMeta(
601
+ node_outputs={
602
+ tool_prompt_node.Outputs.results: [
603
+ FunctionCallVellumValue(
604
+ value=FunctionCall(
605
+ arguments={"key": "value"},
606
+ id="call_mcp_test",
607
+ name="test_tool",
608
+ state="FULFILLED",
609
+ ),
610
+ )
611
+ ],
612
+ },
613
+ )
614
+ )
615
+
616
+ mcp_node = mcp_node_class(state=state)
617
+
618
+ # AND mock MCPService to return a result
619
+ with mock.patch("vellum.workflows.nodes.displayable.tool_calling_node.utils.MCPService") as mock_mcp_service_class:
620
+ mock_mcp_service = mock.Mock()
621
+ mock_mcp_service.execute_tool.return_value = {"result": "mcp_test_result"}
622
+ mock_mcp_service_class.return_value = mock_mcp_service
623
+
624
+ # WHEN the MCP node runs
625
+ outputs = list(mcp_node.run())
626
+
627
+ # THEN there should be exactly one output with name "result"
628
+ assert len(outputs) == 1
629
+ result_output = outputs[0]
630
+ assert isinstance(result_output, BaseOutput)
631
+ assert result_output.name == "result"
632
+ assert result_output.is_fulfilled is True
633
+ assert result_output.value == {"result": "mcp_test_result"}
634
+
635
+
636
+ def test_vellum_integration_node_outputs_result(vellum_client):
637
+ """Test that VellumIntegrationNode yields output with name 'result' matching the Outputs class."""
638
+
639
+ # GIVEN a VellumIntegrationToolDefinition
640
+ github_tool = VellumIntegrationToolDefinition(
641
+ provider=VellumIntegrationProviderType.COMPOSIO,
642
+ integration_name="GITHUB",
643
+ name="create_issue",
644
+ description="Create a new issue in a GitHub repository",
645
+ )
646
+
647
+ # AND a tool prompt node
648
+ tool_prompt_node = create_tool_prompt_node(
649
+ ml_model="test-model",
650
+ blocks=[],
651
+ functions=[github_tool],
652
+ prompt_inputs=None,
653
+ parameters=DEFAULT_PROMPT_PARAMETERS,
654
+ )
655
+
656
+ function_node_class = create_function_node(
657
+ function=github_tool,
658
+ tool_prompt_node=tool_prompt_node,
659
+ )
660
+
661
+ # AND a state with a function call
662
+ state = ToolCallingState(
663
+ meta=StateMeta(
664
+ node_outputs={
665
+ tool_prompt_node.Outputs.results: [
666
+ FunctionCallVellumValue(
667
+ value=FunctionCall(
668
+ arguments={"owner": "test-owner", "repo": "test-repo", "title": "Test Issue"},
669
+ id="call_vellum_test",
670
+ name="create_issue",
671
+ state="FULFILLED",
672
+ ),
673
+ )
674
+ ],
675
+ },
676
+ )
677
+ )
678
+
679
+ # AND mock the vellum client's integration service
680
+ mock_response = mock.Mock()
681
+ mock_response.data = {"id": 123, "url": "https://github.com/test-owner/test-repo/issues/123"}
682
+ vellum_client.integrations.execute_integration_tool.return_value = mock_response
683
+
684
+ # AND create a context with the vellum client
685
+ context = WorkflowContext()
686
+ context.vellum_client = vellum_client
687
+
688
+ function_node = function_node_class(state=state)
689
+ function_node._context = context
690
+
691
+ # WHEN the VellumIntegration node runs
692
+ outputs = list(function_node.run())
693
+
694
+ # THEN there should be exactly one output with name "result"
695
+ assert len(outputs) == 1
696
+ result_output = outputs[0]
697
+ assert isinstance(result_output, BaseOutput)
698
+ assert result_output.name == "result"
699
+ assert result_output.is_fulfilled is True
700
+ assert result_output.value == {"id": 123, "url": "https://github.com/test-owner/test-repo/issues/123"}
701
+
702
+
703
+ def test_vellum_integration_node_error_outputs_result(vellum_client):
704
+ """Test that VellumIntegrationNode yields error payload as result output when NodeException occurs."""
705
+
706
+ # GIVEN a VellumIntegrationToolDefinition
707
+ github_tool = VellumIntegrationToolDefinition(
708
+ provider=VellumIntegrationProviderType.COMPOSIO,
709
+ integration_name="GITHUB",
710
+ name="create_issue",
711
+ description="Create a new issue in a GitHub repository",
712
+ )
713
+
714
+ # AND a tool prompt node
715
+ tool_prompt_node = create_tool_prompt_node(
716
+ ml_model="test-model",
717
+ blocks=[],
718
+ functions=[github_tool],
719
+ prompt_inputs=None,
720
+ parameters=DEFAULT_PROMPT_PARAMETERS,
721
+ )
722
+
723
+ function_node_class = create_function_node(
724
+ function=github_tool,
725
+ tool_prompt_node=tool_prompt_node,
726
+ )
727
+
728
+ # AND a state with a function call
729
+ state = ToolCallingState(
730
+ meta=StateMeta(
731
+ node_outputs={
732
+ tool_prompt_node.Outputs.results: [
733
+ FunctionCallVellumValue(
734
+ value=FunctionCall(
735
+ arguments={"owner": "test-owner", "repo": "test-repo", "title": "Test Issue"},
736
+ id="call_vellum_error_test",
737
+ name="create_issue",
738
+ state="FULFILLED",
739
+ ),
740
+ )
741
+ ],
742
+ },
743
+ )
744
+ )
745
+
746
+ # AND mock the vellum client's integration service to raise a 500 error
747
+ vellum_client.integrations.execute_integration_tool.side_effect = ApiError(
748
+ status_code=500,
749
+ body={"detail": "Internal server error occurred while executing the tool."},
750
+ )
751
+
752
+ # AND create a context with the vellum client
753
+ context = WorkflowContext()
754
+ context.vellum_client = vellum_client
755
+
756
+ function_node = function_node_class(state=state)
757
+ function_node._context = context
758
+
759
+ # WHEN the VellumIntegration node runs
760
+ outputs = list(function_node.run())
761
+
762
+ # THEN there should be exactly one output with name "result"
763
+ assert len(outputs) == 1
764
+ result_output = outputs[0]
765
+ assert isinstance(result_output, BaseOutput)
766
+ assert result_output.name == "result"
767
+ assert result_output.is_fulfilled is True
768
+
769
+ # AND the result should contain the error payload
770
+ error_result = result_output.value
771
+ assert isinstance(error_result, dict)
772
+ assert "code" in error_result
773
+ assert "message" in error_result
774
+ assert error_result["code"] == "PROVIDER_ERROR"
775
+ assert "Internal server error occurred while executing the tool" in error_result["message"]
776
+
777
+ # AND the error should also be in chat history
778
+ assert len(state.chat_history) == 1
779
+ function_message = state.chat_history[0]
780
+ assert function_message.role == "FUNCTION"
781
+ assert isinstance(function_message.content, StringChatMessageContent)
782
+ error_data = json.loads(function_message.content.value)
783
+ assert "error" in error_data
784
+ assert error_data["error"]["code"] == "PROVIDER_ERROR"
785
+
786
+
787
+ def test_tool_calling_node_400_error_preserves_invalid_inputs(vellum_adhoc_prompt_client):
788
+ """
789
+ Test that ToolCallingNode preserves INVALID_INPUTS error code when the underlying prompt node returns a 400 error.
790
+ """
791
+
792
+ # GIVEN a ToolCallingNode with minimal configuration
793
+ class TestToolCallingNode(ToolCallingNode):
794
+ ml_model = "gpt-4o-mini"
795
+ blocks = []
796
+ functions = []
797
+ max_prompt_iterations = 1
798
+
799
+ # AND the API client raises a 400 error
800
+ api_error = ApiError(
801
+ status_code=400,
802
+ body={"detail": "Invalid request parameters"},
803
+ )
804
+ vellum_adhoc_prompt_client.adhoc_execute_prompt_stream.side_effect = api_error
805
+
806
+ # AND a state
807
+ state = BaseState()
808
+
809
+ # WHEN the ToolCallingNode runs
810
+ node = TestToolCallingNode(state=state)
811
+
812
+ with pytest.raises(NodeException) as exc_info:
813
+ list(node.run())
814
+
815
+ # THEN the error code should be INVALID_INPUTS (preserved from the underlying prompt node)
816
+ e = exc_info.value
817
+ assert e.code == WorkflowErrorCode.INVALID_INPUTS
818
+ assert e.message == "Invalid request parameters"
819
+
820
+
821
+ def test_vellum_integration_node_500_error_feeds_back_to_model(vellum_adhoc_prompt_client, vellum_client):
822
+ """
823
+ Test that NodeException errors from integration tools feed back an error response to the model.
824
+ """
825
+ # GIVEN a VellumIntegrationToolDefinition
826
+ github_create_issue_tool = VellumIntegrationToolDefinition(
827
+ provider=VellumIntegrationProviderType.COMPOSIO,
828
+ integration_name="GITHUB",
829
+ name="create_issue",
830
+ description="Create a new issue in a GitHub repository",
831
+ )
832
+
833
+ # AND a ToolCallingNode that uses the integration tool
834
+ class TestToolCallingNode(ToolCallingNode):
835
+ ml_model = "gpt-4o-mini"
836
+ blocks = []
837
+ functions = [github_create_issue_tool]
838
+ max_prompt_iterations = 2
839
+
840
+ # AND the integration API raises a 500 error
841
+ vellum_client.integrations.execute_integration_tool.side_effect = ApiError(
842
+ status_code=500,
843
+ body={"detail": "Internal server error occurred while executing the tool."},
844
+ )
845
+
846
+ def generate_prompt_events(*args: Any, **kwargs: Any) -> Iterator[Any]:
847
+ execution_id = str(uuid4())
848
+ call_count = vellum_adhoc_prompt_client.adhoc_execute_prompt_stream.call_count
849
+
850
+ outputs: List[PromptOutput]
851
+ if call_count == 1:
852
+ outputs = [
853
+ FunctionCallVellumValue(
854
+ value=FunctionCall(
855
+ arguments={"owner": "test-owner", "repo": "test-repo", "title": "Test Issue"},
856
+ id="call_500_error_test",
857
+ name="create_issue",
858
+ state="FULFILLED",
859
+ ),
860
+ )
861
+ ]
862
+ else:
863
+ outputs = [
864
+ StringVellumValue(
865
+ value="I apologize, but I encountered an error while trying to create the issue. "
866
+ "The integration service is currently unavailable."
867
+ )
868
+ ]
869
+
870
+ events = [
871
+ InitiatedExecutePromptEvent(execution_id=execution_id),
872
+ FulfilledExecutePromptEvent(
873
+ execution_id=execution_id,
874
+ outputs=outputs,
875
+ ),
876
+ ]
877
+ yield from events
878
+
879
+ vellum_adhoc_prompt_client.adhoc_execute_prompt_stream.side_effect = generate_prompt_events
880
+
881
+ # WHEN the ToolCallingNode runs
882
+ state = ToolCallingState()
883
+ node = TestToolCallingNode(state=state)
884
+ node_outputs = {}
885
+ for output in node.run():
886
+ if output.is_fulfilled:
887
+ node_outputs[output.name] = output.value
888
+
889
+ # THEN the node should fulfill successfully
890
+ # AND the chat history should contain a FUNCTION message with the error
891
+ chat_history = cast(List[ChatMessage], node_outputs["chat_history"])
892
+ assert len(chat_history) == 3
893
+
894
+ # AND the first message should be the assistant's function call
895
+ assert chat_history[0].role == "ASSISTANT"
896
+
897
+ # AND the second message should be the FUNCTION error result
898
+ function_message = chat_history[1]
899
+ assert function_message.role == "FUNCTION"
900
+ assert isinstance(function_message.content, StringChatMessageContent)
901
+
902
+ # AND the error payload should contain the error details
903
+ error_data = json.loads(function_message.content.value)
904
+ assert "error" in error_data
905
+ assert error_data["error"]["code"] == "PROVIDER_ERROR"
906
+ assert "Internal server error occurred while executing the tool" in error_data["error"]["message"]
907
+
908
+ # AND the third message should be the assistant's response to the error
909
+ assert chat_history[2].role == "ASSISTANT"
910
+
911
+
912
+ def test_tool_calling_node_json_output(vellum_adhoc_prompt_client):
913
+ """
914
+ Tests that ToolCallingNode exposes a json output when the LLM returns valid JSON.
915
+ """
916
+
917
+ # GIVEN a ToolCallingNode with a simple function
918
+ class TestToolCallingNode(ToolCallingNode):
919
+ ml_model = "gpt-4o-mini"
920
+ blocks = []
921
+ functions = [first_function]
922
+ max_prompt_iterations = 1
923
+
924
+ # AND the LLM returns a JSON response
925
+ expected_json = {"items": ["apple", "banana", "cherry"], "count": 3}
926
+
927
+ def generate_prompt_events(*args: Any, **kwargs: Any) -> Iterator[ExecutePromptEvent]:
928
+ execution_id = str(uuid4())
929
+ events: List[ExecutePromptEvent] = [
930
+ InitiatedExecutePromptEvent(execution_id=execution_id),
931
+ FulfilledExecutePromptEvent(
932
+ execution_id=execution_id,
933
+ outputs=[StringVellumValue(value=json.dumps(expected_json))],
934
+ ),
935
+ ]
936
+ yield from events
937
+
938
+ vellum_adhoc_prompt_client.adhoc_execute_prompt_stream.side_effect = generate_prompt_events
939
+
940
+ # WHEN the ToolCallingNode runs
941
+ state = BaseState()
942
+ node = TestToolCallingNode(state=state)
943
+ node_outputs = {}
944
+ for output in node.run():
945
+ if output.is_fulfilled:
946
+ node_outputs[output.name] = output.value
947
+
948
+ # THEN the json output should contain the parsed JSON
949
+ assert "json" in node_outputs
950
+ assert node_outputs["json"] == expected_json
951
+
952
+ # AND the text output should contain the raw JSON string
953
+ assert "text" in node_outputs
954
+ assert node_outputs["text"] == json.dumps(expected_json)
955
+
956
+
957
+ def test_tool_calling_node_json_output_not_present_for_non_json(vellum_adhoc_prompt_client):
958
+ """
959
+ Tests that ToolCallingNode does not expose a json output when the LLM returns non-JSON text.
960
+ """
961
+
962
+ # GIVEN a ToolCallingNode with a simple function
963
+ class TestToolCallingNode(ToolCallingNode):
964
+ ml_model = "gpt-4o-mini"
965
+ blocks = []
966
+ functions = [first_function]
967
+ max_prompt_iterations = 1
968
+
969
+ # AND the LLM returns a plain text response (not JSON)
970
+ plain_text_response = "Hello! I can help you with that."
971
+
972
+ def generate_prompt_events(*args: Any, **kwargs: Any) -> Iterator[ExecutePromptEvent]:
973
+ execution_id = str(uuid4())
974
+ events: List[ExecutePromptEvent] = [
975
+ InitiatedExecutePromptEvent(execution_id=execution_id),
976
+ FulfilledExecutePromptEvent(
977
+ execution_id=execution_id,
978
+ outputs=[StringVellumValue(value=plain_text_response)],
979
+ ),
980
+ ]
981
+ yield from events
982
+
983
+ vellum_adhoc_prompt_client.adhoc_execute_prompt_stream.side_effect = generate_prompt_events
984
+
985
+ # WHEN the ToolCallingNode runs
986
+ state = BaseState()
987
+ node = TestToolCallingNode(state=state)
988
+ node_outputs = {}
989
+ for output in node.run():
990
+ if output.is_fulfilled:
991
+ node_outputs[output.name] = output.value
992
+
993
+ # THEN the json output should not be present
994
+ assert "json" not in node_outputs
995
+
996
+ # AND the text output should contain the plain text
997
+ assert "text" in node_outputs
998
+ assert node_outputs["text"] == plain_text_response