vellum-ai 0.14.63__py3-none-any.whl → 1.11.2__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 (1305) hide show
  1. vellum/__init__.py +269 -4
  2. vellum/client/README.md +68 -15
  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 +16 -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 +87 -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 +11 -0
  20. vellum/client/errors/unauthorized_error.py +11 -0
  21. vellum/client/raw_client.py +2725 -0
  22. vellum/client/reference.md +1980 -638
  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 +72 -191
  29. vellum/client/resources/container_images/raw_client.py +407 -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 +93 -325
  40. vellum/client/resources/documents/raw_client.py +662 -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 +186 -0
  53. vellum/client/resources/integration_auth_configs/raw_client.py +171 -0
  54. vellum/client/resources/integration_providers/__init__.py +4 -0
  55. vellum/client/resources/integration_providers/client.py +299 -0
  56. vellum/client/resources/integration_providers/raw_client.py +275 -0
  57. vellum/client/resources/integrations/__init__.py +4 -0
  58. vellum/client/resources/integrations/client.py +466 -0
  59. vellum/client/resources/integrations/raw_client.py +557 -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 +302 -353
  86. vellum/client/resources/workflow_deployments/raw_client.py +1059 -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 +256 -141
  97. vellum/client/resources/workflows/raw_client.py +547 -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 +242 -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/code_execution_node_array_result.py +11 -5
  151. vellum/client/types/code_execution_node_chat_history_result.py +3 -3
  152. vellum/client/types/code_execution_node_error_result.py +3 -3
  153. vellum/client/types/code_execution_node_function_call_result.py +3 -3
  154. vellum/client/types/code_execution_node_json_result.py +2 -2
  155. vellum/client/types/code_execution_node_number_result.py +2 -2
  156. vellum/client/types/code_execution_node_result.py +10 -4
  157. vellum/client/types/code_execution_node_result_data.py +10 -4
  158. vellum/client/types/code_execution_node_result_output.py +6 -5
  159. vellum/client/types/code_execution_node_search_results_result.py +3 -3
  160. vellum/client/types/code_execution_node_string_result.py +2 -2
  161. vellum/client/types/code_execution_package.py +3 -2
  162. vellum/client/types/code_executor_input.py +15 -6
  163. vellum/client/types/code_executor_response.py +11 -5
  164. vellum/client/types/code_executor_secret_input.py +3 -3
  165. vellum/client/types/code_resource_definition.py +3 -3
  166. vellum/client/types/compile_prompt_deployment_expand_meta_request.py +2 -2
  167. vellum/client/types/compile_prompt_meta.py +2 -2
  168. vellum/client/types/components_schemas_composio_execute_tool_request.py +5 -0
  169. vellum/client/types/components_schemas_composio_execute_tool_response.py +5 -0
  170. vellum/client/types/components_schemas_composio_integration_exec_config.py +5 -0
  171. vellum/client/types/components_schemas_composio_tool_definition.py +5 -0
  172. vellum/client/types/components_schemas_slim_composio_tool_definition.py +5 -0
  173. vellum/client/types/composio_execute_tool_request.py +24 -0
  174. vellum/client/types/composio_execute_tool_response.py +24 -0
  175. vellum/client/types/composio_integration_exec_config.py +21 -0
  176. vellum/client/types/composio_tool_definition.py +30 -0
  177. vellum/client/types/conditional_node_result.py +3 -3
  178. vellum/client/types/conditional_node_result_data.py +2 -2
  179. vellum/client/types/container_image_build_config.py +21 -0
  180. vellum/client/types/container_image_container_image_tag.py +2 -2
  181. vellum/client/types/container_image_read.py +8 -4
  182. vellum/client/types/create_test_suite_test_case_request.py +9 -3
  183. vellum/client/types/create_workflow_event_request.py +7 -0
  184. vellum/client/types/dataset_row_push_request.py +20 -0
  185. vellum/client/types/delimiter_chunker_config.py +20 -0
  186. vellum/client/types/delimiter_chunker_config_request.py +20 -0
  187. vellum/client/types/delimiter_chunking.py +21 -0
  188. vellum/client/types/delimiter_chunking_request.py +21 -0
  189. vellum/client/types/deployment_history_item.py +10 -4
  190. vellum/client/types/deployment_provider_payload_response.py +4 -4
  191. vellum/client/types/deployment_read.py +15 -9
  192. vellum/client/types/deployment_release_tag_deployment_history_item.py +2 -2
  193. vellum/client/types/deployment_release_tag_read.py +4 -4
  194. vellum/client/types/deprecated_prompt_request_input.py +8 -0
  195. vellum/client/types/docker_service_token.py +2 -2
  196. vellum/client/types/document_chat_message_content.py +3 -3
  197. vellum/client/types/document_chat_message_content_request.py +3 -3
  198. vellum/client/types/document_document_to_document_index.py +4 -4
  199. vellum/client/types/document_index_chunking.py +5 -1
  200. vellum/client/types/document_index_chunking_request.py +3 -1
  201. vellum/client/types/document_index_indexing_config.py +4 -4
  202. vellum/client/types/document_index_indexing_config_request.py +4 -4
  203. vellum/client/types/document_index_read.py +4 -4
  204. vellum/client/types/document_input.py +30 -0
  205. vellum/client/types/document_input_request.py +30 -0
  206. vellum/client/types/document_prompt_block.py +4 -4
  207. vellum/client/types/document_read.py +9 -5
  208. vellum/client/types/document_vellum_value.py +3 -3
  209. vellum/client/types/document_vellum_value_request.py +3 -3
  210. vellum/client/types/enriched_normalized_completion.py +3 -3
  211. vellum/client/types/environment_display_config.py +19 -0
  212. vellum/client/types/environment_read.py +23 -0
  213. vellum/client/types/ephemeral_prompt_cache_config.py +3 -3
  214. vellum/client/types/error_detail_response.py +22 -0
  215. vellum/client/types/error_input.py +3 -3
  216. vellum/client/types/error_vellum_value.py +3 -3
  217. vellum/client/types/error_vellum_value_request.py +3 -3
  218. vellum/client/types/event_create_response.py +31 -0
  219. vellum/client/types/execute_api_request_bearer_token.py +1 -0
  220. vellum/client/types/execute_api_request_headers_value.py +1 -0
  221. vellum/client/types/execute_api_response.py +6 -6
  222. vellum/client/types/execute_prompt_event.py +3 -2
  223. vellum/client/types/execute_prompt_response.py +1 -0
  224. vellum/client/types/execute_workflow_async_response.py +26 -0
  225. vellum/client/types/execute_workflow_response.py +10 -4
  226. vellum/client/types/execute_workflow_workflow_result_event.py +1 -0
  227. vellum/client/types/execution_array_vellum_value.py +12 -6
  228. vellum/client/types/execution_audio_vellum_value.py +31 -0
  229. vellum/client/types/execution_chat_history_vellum_value.py +3 -3
  230. vellum/client/types/execution_document_vellum_value.py +31 -0
  231. vellum/client/types/execution_error_vellum_value.py +3 -3
  232. vellum/client/types/execution_function_call_vellum_value.py +3 -3
  233. vellum/client/types/execution_image_vellum_value.py +31 -0
  234. vellum/client/types/execution_json_vellum_value.py +3 -3
  235. vellum/client/types/execution_number_vellum_value.py +3 -3
  236. vellum/client/types/execution_search_results_vellum_value.py +3 -3
  237. vellum/client/types/execution_string_vellum_value.py +3 -3
  238. vellum/client/types/execution_thinking_vellum_value.py +31 -0
  239. vellum/client/types/execution_vellum_value.py +16 -5
  240. vellum/client/types/execution_video_vellum_value.py +31 -0
  241. vellum/client/types/external_input_descriptor.py +3 -3
  242. vellum/client/types/external_parent_context.py +38 -0
  243. vellum/client/types/external_test_case_execution.py +10 -4
  244. vellum/client/types/external_test_case_execution_request.py +10 -4
  245. vellum/client/types/fast_embed_vectorizer_baai_bge_small_en_v_15.py +23 -0
  246. vellum/client/types/fast_embed_vectorizer_baai_bge_small_en_v_15_request.py +23 -0
  247. vellum/client/types/folder_entity.py +5 -2
  248. vellum/client/types/folder_entity_dataset.py +26 -0
  249. vellum/client/types/folder_entity_dataset_data.py +25 -0
  250. vellum/client/types/folder_entity_document_index.py +3 -3
  251. vellum/client/types/folder_entity_document_index_data.py +5 -3
  252. vellum/client/types/folder_entity_folder.py +3 -3
  253. vellum/client/types/folder_entity_folder_data.py +2 -2
  254. vellum/client/types/folder_entity_prompt_sandbox.py +3 -3
  255. vellum/client/types/folder_entity_prompt_sandbox_data.py +4 -3
  256. vellum/client/types/folder_entity_test_suite.py +3 -3
  257. vellum/client/types/folder_entity_test_suite_data.py +3 -3
  258. vellum/client/types/folder_entity_workflow_sandbox.py +3 -3
  259. vellum/client/types/folder_entity_workflow_sandbox_data.py +6 -3
  260. vellum/client/types/fulfilled_ad_hoc_execute_prompt_event.py +4 -4
  261. vellum/client/types/fulfilled_execute_prompt_event.py +4 -4
  262. vellum/client/types/fulfilled_execute_prompt_response.py +3 -3
  263. vellum/client/types/fulfilled_execute_workflow_workflow_result_event.py +11 -5
  264. vellum/client/types/fulfilled_prompt_execution_meta.py +3 -3
  265. vellum/client/types/fulfilled_workflow_node_result_event.py +12 -6
  266. vellum/client/types/function_call.py +2 -2
  267. vellum/client/types/function_call_chat_message_content.py +3 -3
  268. vellum/client/types/function_call_chat_message_content_request.py +3 -3
  269. vellum/client/types/function_call_chat_message_content_value.py +2 -2
  270. vellum/client/types/function_call_chat_message_content_value_request.py +2 -2
  271. vellum/client/types/function_call_input.py +3 -3
  272. vellum/client/types/function_call_prompt_block.py +4 -4
  273. vellum/client/types/function_call_request.py +2 -2
  274. vellum/client/types/function_call_vellum_value.py +3 -3
  275. vellum/client/types/function_call_vellum_value_request.py +3 -3
  276. vellum/client/types/function_definition.py +9 -4
  277. vellum/client/types/generate_options_request.py +3 -3
  278. vellum/client/types/generate_request.py +2 -2
  279. vellum/client/types/generate_response.py +3 -3
  280. vellum/client/types/generate_result.py +3 -3
  281. vellum/client/types/generate_result_data.py +3 -3
  282. vellum/client/types/generate_result_error.py +3 -3
  283. vellum/client/types/generate_stream_response.py +3 -3
  284. vellum/client/types/generate_stream_result.py +4 -4
  285. vellum/client/types/generate_stream_result_data.py +3 -3
  286. vellum/client/types/google_vertex_ai_vectorizer_config.py +2 -2
  287. vellum/client/types/google_vertex_ai_vectorizer_config_request.py +2 -2
  288. vellum/client/types/google_vertex_ai_vectorizer_gemini_embedding_001.py +21 -0
  289. vellum/client/types/google_vertex_ai_vectorizer_gemini_embedding_001_request.py +21 -0
  290. vellum/client/types/google_vertex_ai_vectorizer_text_embedding_004.py +3 -3
  291. vellum/client/types/google_vertex_ai_vectorizer_text_embedding_004_request.py +3 -3
  292. vellum/client/types/google_vertex_ai_vectorizer_text_multilingual_embedding_002.py +3 -3
  293. vellum/client/types/google_vertex_ai_vectorizer_text_multilingual_embedding_002_request.py +3 -3
  294. vellum/client/types/hkunlp_instructor_xl_vectorizer.py +3 -3
  295. vellum/client/types/hkunlp_instructor_xl_vectorizer_request.py +3 -3
  296. vellum/client/types/image_chat_message_content.py +3 -3
  297. vellum/client/types/image_chat_message_content_request.py +3 -3
  298. vellum/client/types/image_input.py +30 -0
  299. vellum/client/types/image_input_request.py +30 -0
  300. vellum/client/types/image_prompt_block.py +4 -4
  301. vellum/client/types/image_vellum_value.py +3 -3
  302. vellum/client/types/image_vellum_value_request.py +3 -3
  303. vellum/client/types/indexing_config_vectorizer.py +11 -4
  304. vellum/client/types/indexing_config_vectorizer_request.py +11 -4
  305. vellum/client/types/initiated_ad_hoc_execute_prompt_event.py +3 -3
  306. vellum/client/types/initiated_execute_prompt_event.py +3 -3
  307. vellum/client/types/initiated_prompt_execution_meta.py +2 -2
  308. vellum/client/types/initiated_workflow_node_result_event.py +12 -6
  309. vellum/client/types/instructor_vectorizer_config.py +2 -2
  310. vellum/client/types/instructor_vectorizer_config_request.py +2 -2
  311. vellum/client/types/integration.py +27 -0
  312. vellum/client/types/integration_auth_config_integration.py +23 -0
  313. vellum/client/types/integration_auth_config_integration_credential.py +19 -0
  314. vellum/client/types/integration_credential_access_type.py +5 -0
  315. vellum/client/types/integration_name.py +85 -0
  316. vellum/client/types/integration_provider.py +5 -0
  317. vellum/client/types/integration_read.py +30 -0
  318. vellum/client/types/integration_trigger_context.py +39 -0
  319. vellum/client/types/invoked_port.py +2 -2
  320. vellum/client/types/jinja_prompt_block.py +4 -4
  321. vellum/client/types/json_input.py +3 -3
  322. vellum/client/types/json_input_request.py +3 -3
  323. vellum/client/types/json_vellum_value.py +2 -2
  324. vellum/client/types/json_vellum_value_request.py +2 -2
  325. vellum/client/types/logical_operator.py +4 -0
  326. vellum/client/types/map_node_result.py +3 -3
  327. vellum/client/types/map_node_result_data.py +3 -3
  328. vellum/client/types/merge_node_result.py +3 -3
  329. vellum/client/types/merge_node_result_data.py +2 -2
  330. vellum/client/types/metadata_filter_config_request.py +12 -6
  331. vellum/client/types/metadata_filter_rule_request.py +5 -5
  332. vellum/client/types/metadata_filters_request.py +1 -0
  333. vellum/client/types/metric_definition_execution.py +10 -4
  334. vellum/client/types/metric_definition_history_item.py +10 -4
  335. vellum/client/types/metric_definition_input.py +3 -2
  336. vellum/client/types/metric_node_result.py +2 -2
  337. vellum/client/types/ml_model_read.py +6 -3
  338. vellum/client/types/ml_model_usage.py +2 -2
  339. vellum/client/types/ml_model_usage_wrapper.py +3 -3
  340. vellum/client/types/named_scenario_input_audio_variable_value_request.py +22 -0
  341. vellum/client/types/named_scenario_input_chat_history_variable_value_request.py +3 -3
  342. vellum/client/types/named_scenario_input_document_variable_value_request.py +22 -0
  343. vellum/client/types/named_scenario_input_image_variable_value_request.py +22 -0
  344. vellum/client/types/named_scenario_input_json_variable_value_request.py +2 -2
  345. vellum/client/types/named_scenario_input_request.py +11 -2
  346. vellum/client/types/named_scenario_input_string_variable_value_request.py +2 -2
  347. vellum/client/types/named_scenario_input_video_variable_value_request.py +22 -0
  348. vellum/client/types/named_test_case_array_variable_value.py +11 -5
  349. vellum/client/types/named_test_case_array_variable_value_request.py +11 -5
  350. vellum/client/types/named_test_case_audio_variable_value.py +26 -0
  351. vellum/client/types/named_test_case_audio_variable_value_request.py +26 -0
  352. vellum/client/types/named_test_case_chat_history_variable_value.py +3 -3
  353. vellum/client/types/named_test_case_chat_history_variable_value_request.py +3 -3
  354. vellum/client/types/named_test_case_document_variable_value.py +22 -0
  355. vellum/client/types/named_test_case_document_variable_value_request.py +22 -0
  356. vellum/client/types/named_test_case_error_variable_value.py +3 -3
  357. vellum/client/types/named_test_case_error_variable_value_request.py +3 -3
  358. vellum/client/types/named_test_case_function_call_variable_value.py +3 -3
  359. vellum/client/types/named_test_case_function_call_variable_value_request.py +3 -3
  360. vellum/client/types/named_test_case_image_variable_value.py +22 -0
  361. vellum/client/types/named_test_case_image_variable_value_request.py +22 -0
  362. vellum/client/types/named_test_case_json_variable_value.py +2 -2
  363. vellum/client/types/named_test_case_json_variable_value_request.py +2 -2
  364. vellum/client/types/named_test_case_number_variable_value.py +2 -2
  365. vellum/client/types/named_test_case_number_variable_value_request.py +2 -2
  366. vellum/client/types/named_test_case_search_results_variable_value.py +3 -3
  367. vellum/client/types/named_test_case_search_results_variable_value_request.py +3 -3
  368. vellum/client/types/named_test_case_string_variable_value.py +2 -2
  369. vellum/client/types/named_test_case_string_variable_value_request.py +2 -2
  370. vellum/client/types/named_test_case_variable_value.py +14 -5
  371. vellum/client/types/named_test_case_variable_value_request.py +14 -5
  372. vellum/client/types/named_test_case_video_variable_value.py +22 -0
  373. vellum/client/types/named_test_case_video_variable_value_request.py +22 -0
  374. vellum/client/types/node_execution_fulfilled_body.py +4 -4
  375. vellum/client/types/node_execution_fulfilled_event.py +24 -15
  376. vellum/client/types/node_execution_initiated_body.py +3 -3
  377. vellum/client/types/node_execution_initiated_event.py +24 -15
  378. vellum/client/types/node_execution_paused_body.py +3 -3
  379. vellum/client/types/node_execution_paused_event.py +24 -15
  380. vellum/client/types/node_execution_rejected_body.py +5 -4
  381. vellum/client/types/node_execution_rejected_event.py +24 -15
  382. vellum/client/types/node_execution_resumed_body.py +3 -3
  383. vellum/client/types/node_execution_resumed_event.py +24 -15
  384. vellum/client/types/node_execution_span.py +23 -12
  385. vellum/client/types/node_execution_span_attributes.py +4 -2
  386. vellum/client/types/node_execution_streaming_body.py +4 -4
  387. vellum/client/types/node_execution_streaming_event.py +24 -15
  388. vellum/client/types/node_input_compiled_array_value.py +11 -5
  389. vellum/client/types/node_input_compiled_audio_value.py +23 -0
  390. vellum/client/types/node_input_compiled_chat_history_value.py +3 -3
  391. vellum/client/types/node_input_compiled_document_value.py +23 -0
  392. vellum/client/types/node_input_compiled_error_value.py +3 -3
  393. vellum/client/types/node_input_compiled_function_call_value.py +3 -3
  394. vellum/client/types/node_input_compiled_image_value.py +23 -0
  395. vellum/client/types/node_input_compiled_json_value.py +2 -2
  396. vellum/client/types/node_input_compiled_number_value.py +2 -2
  397. vellum/client/types/node_input_compiled_search_results_value.py +3 -3
  398. vellum/client/types/node_input_compiled_secret_value.py +3 -3
  399. vellum/client/types/node_input_compiled_string_value.py +2 -2
  400. vellum/client/types/node_input_compiled_video_value.py +23 -0
  401. vellum/client/types/node_input_variable_compiled_value.py +14 -5
  402. vellum/client/types/node_output_compiled_array_value.py +12 -6
  403. vellum/client/types/node_output_compiled_chat_history_value.py +3 -3
  404. vellum/client/types/node_output_compiled_error_value.py +3 -3
  405. vellum/client/types/node_output_compiled_function_call_value.py +3 -3
  406. vellum/client/types/node_output_compiled_json_value.py +3 -3
  407. vellum/client/types/node_output_compiled_number_value.py +3 -3
  408. vellum/client/types/node_output_compiled_search_results_value.py +3 -3
  409. vellum/client/types/node_output_compiled_string_value.py +3 -3
  410. vellum/client/types/node_output_compiled_thinking_value.py +28 -0
  411. vellum/client/types/node_output_compiled_value.py +8 -5
  412. vellum/client/types/node_parent_context.py +14 -11
  413. vellum/client/types/normalized_log_probs.py +3 -3
  414. vellum/client/types/normalized_token_log_probs.py +2 -2
  415. vellum/client/types/number_input.py +3 -3
  416. vellum/client/types/number_vellum_value.py +2 -2
  417. vellum/client/types/number_vellum_value_request.py +2 -2
  418. vellum/client/types/open_ai_vectorizer_config.py +3 -3
  419. vellum/client/types/open_ai_vectorizer_config_request.py +3 -3
  420. vellum/client/types/open_ai_vectorizer_text_embedding_3_large.py +3 -3
  421. vellum/client/types/open_ai_vectorizer_text_embedding_3_large_request.py +3 -3
  422. vellum/client/types/open_ai_vectorizer_text_embedding_3_small.py +3 -3
  423. vellum/client/types/open_ai_vectorizer_text_embedding_3_small_request.py +3 -3
  424. vellum/client/types/open_ai_vectorizer_text_embedding_ada_002.py +3 -3
  425. vellum/client/types/open_ai_vectorizer_text_embedding_ada_002_request.py +3 -3
  426. vellum/client/types/organization_read.py +6 -3
  427. vellum/client/types/paginated_container_image_read_list.py +3 -3
  428. vellum/client/types/paginated_deployment_release_tag_read_list.py +3 -3
  429. vellum/client/types/paginated_document_index_read_list.py +3 -3
  430. vellum/client/types/paginated_folder_entity_list.py +3 -3
  431. vellum/client/types/paginated_slim_deployment_read_list.py +10 -4
  432. vellum/client/types/paginated_slim_document_list.py +3 -3
  433. vellum/client/types/paginated_slim_integration_auth_config_read_list.py +23 -0
  434. vellum/client/types/paginated_slim_integration_read_list.py +23 -0
  435. vellum/client/types/paginated_slim_tool_definition_list.py +23 -0
  436. vellum/client/types/paginated_slim_workflow_deployment_list.py +10 -4
  437. vellum/client/types/paginated_test_suite_run_execution_list.py +10 -4
  438. vellum/client/types/paginated_test_suite_test_case_list.py +10 -4
  439. vellum/client/types/paginated_workflow_deployment_release_list.py +30 -0
  440. vellum/client/types/paginated_workflow_release_tag_read_list.py +3 -3
  441. vellum/client/types/paginated_workflow_sandbox_example_list.py +3 -3
  442. vellum/client/types/parent_context.py +21 -11
  443. vellum/client/types/pdf_search_result_meta_source.py +2 -2
  444. vellum/client/types/pdf_search_result_meta_source_request.py +2 -2
  445. vellum/client/types/plain_text_prompt_block.py +4 -4
  446. vellum/client/types/price.py +3 -3
  447. vellum/client/types/private_vectorizer.py +23 -0
  448. vellum/client/types/private_vectorizer_request.py +23 -0
  449. vellum/client/types/processing_failure_reason_enum.py +3 -1
  450. vellum/client/types/prompt_block.py +9 -6
  451. vellum/client/types/prompt_deployment_expand_meta_request.py +2 -2
  452. vellum/client/types/prompt_deployment_input_request.py +16 -3
  453. vellum/client/types/prompt_deployment_parent_context.py +13 -10
  454. vellum/client/types/prompt_deployment_release.py +6 -6
  455. vellum/client/types/prompt_deployment_release_prompt_deployment.py +2 -2
  456. vellum/client/types/prompt_deployment_release_prompt_version.py +4 -4
  457. vellum/client/types/prompt_exec_config.py +15 -9
  458. vellum/client/types/prompt_execution_meta.py +3 -3
  459. vellum/client/types/prompt_node_execution_meta.py +3 -3
  460. vellum/client/types/prompt_node_result.py +3 -3
  461. vellum/client/types/prompt_node_result_data.py +3 -3
  462. vellum/client/types/prompt_output.py +7 -3
  463. vellum/client/types/prompt_parameters.py +2 -2
  464. vellum/client/types/prompt_push_response.py +2 -2
  465. vellum/client/types/prompt_request_audio_input.py +26 -0
  466. vellum/client/types/prompt_request_chat_history_input.py +3 -3
  467. vellum/client/types/prompt_request_document_input.py +26 -0
  468. vellum/client/types/prompt_request_image_input.py +26 -0
  469. vellum/client/types/prompt_request_input.py +16 -3
  470. vellum/client/types/prompt_request_json_input.py +3 -3
  471. vellum/client/types/prompt_request_string_input.py +3 -3
  472. vellum/client/types/prompt_request_video_input.py +26 -0
  473. vellum/client/types/prompt_settings.py +2 -2
  474. vellum/client/types/prompt_version_build_config_sandbox.py +2 -2
  475. vellum/client/types/raw_prompt_execution_overrides_request.py +2 -2
  476. vellum/client/types/reducto_chunker_config.py +2 -2
  477. vellum/client/types/reducto_chunker_config_request.py +2 -2
  478. vellum/client/types/reducto_chunking.py +3 -3
  479. vellum/client/types/reducto_chunking_request.py +3 -3
  480. vellum/client/types/rejected_ad_hoc_execute_prompt_event.py +4 -4
  481. vellum/client/types/rejected_execute_prompt_event.py +4 -4
  482. vellum/client/types/rejected_execute_prompt_response.py +3 -3
  483. vellum/client/types/rejected_execute_workflow_workflow_result_event.py +4 -4
  484. vellum/client/types/rejected_prompt_execution_meta.py +3 -3
  485. vellum/client/types/rejected_workflow_node_result_event.py +12 -6
  486. vellum/client/types/release_created_by.py +2 -2
  487. vellum/client/types/release_environment.py +2 -2
  488. vellum/client/types/release_release_tag.py +3 -3
  489. vellum/client/types/release_review_reviewer.py +2 -2
  490. vellum/client/types/release_tag_release.py +2 -2
  491. vellum/client/types/replace_test_suite_test_case_request.py +9 -3
  492. vellum/client/types/rich_text_child_block.py +2 -1
  493. vellum/client/types/rich_text_prompt_block.py +4 -4
  494. vellum/client/types/sandbox_scenario.py +3 -3
  495. vellum/client/types/scenario_input.py +14 -3
  496. vellum/client/types/scenario_input_audio_variable_value.py +22 -0
  497. vellum/client/types/scenario_input_chat_history_variable_value.py +3 -3
  498. vellum/client/types/scenario_input_document_variable_value.py +22 -0
  499. vellum/client/types/scenario_input_image_variable_value.py +22 -0
  500. vellum/client/types/scenario_input_json_variable_value.py +2 -2
  501. vellum/client/types/scenario_input_string_variable_value.py +2 -2
  502. vellum/client/types/scenario_input_video_variable_value.py +22 -0
  503. vellum/client/types/scheduled_trigger_context.py +39 -0
  504. vellum/client/types/search_filters_request.py +11 -5
  505. vellum/client/types/search_node_result.py +3 -3
  506. vellum/client/types/search_node_result_data.py +3 -3
  507. vellum/client/types/search_request_options_request.py +13 -7
  508. vellum/client/types/search_response.py +3 -3
  509. vellum/client/types/search_result.py +3 -3
  510. vellum/client/types/search_result_document.py +2 -2
  511. vellum/client/types/search_result_document_request.py +2 -2
  512. vellum/client/types/search_result_merging_request.py +2 -2
  513. vellum/client/types/search_result_meta.py +3 -3
  514. vellum/client/types/search_result_meta_request.py +3 -3
  515. vellum/client/types/search_result_request.py +3 -3
  516. vellum/client/types/search_results_input.py +3 -3
  517. vellum/client/types/search_results_vellum_value.py +3 -3
  518. vellum/client/types/search_results_vellum_value_request.py +3 -3
  519. vellum/client/types/search_weights_request.py +2 -2
  520. vellum/client/types/secret_type_enum.py +3 -1
  521. vellum/client/types/sentence_chunker_config.py +2 -2
  522. vellum/client/types/sentence_chunker_config_request.py +2 -2
  523. vellum/client/types/sentence_chunking.py +3 -3
  524. vellum/client/types/sentence_chunking_request.py +3 -3
  525. vellum/client/types/slim_composio_tool_definition.py +24 -0
  526. vellum/client/types/slim_deployment_read.py +15 -9
  527. vellum/client/types/slim_document.py +6 -5
  528. vellum/client/types/slim_document_document_to_document_index.py +4 -4
  529. vellum/client/types/slim_integration_auth_config_read.py +36 -0
  530. vellum/client/types/slim_integration_read.py +25 -0
  531. vellum/client/types/slim_release_review.py +4 -4
  532. vellum/client/types/slim_workflow_deployment.py +16 -10
  533. vellum/client/types/slim_workflow_execution_read.py +24 -15
  534. vellum/client/types/span_link.py +15 -12
  535. vellum/client/types/span_link_type_enum.py +1 -1
  536. vellum/client/types/streaming_ad_hoc_execute_prompt_event.py +4 -4
  537. vellum/client/types/streaming_execute_prompt_event.py +3 -3
  538. vellum/client/types/streaming_prompt_execution_meta.py +2 -2
  539. vellum/client/types/streaming_workflow_node_result_event.py +12 -6
  540. vellum/client/types/string_chat_message_content.py +2 -2
  541. vellum/client/types/string_chat_message_content_request.py +2 -2
  542. vellum/client/types/string_input.py +3 -3
  543. vellum/client/types/string_input_request.py +3 -3
  544. vellum/client/types/string_vellum_value.py +2 -2
  545. vellum/client/types/string_vellum_value_request.py +2 -2
  546. vellum/client/types/submit_completion_actual_request.py +3 -3
  547. vellum/client/types/submit_workflow_execution_actual_request.py +3 -2
  548. vellum/client/types/subworkflow_node_result.py +3 -3
  549. vellum/client/types/subworkflow_node_result_data.py +2 -2
  550. vellum/client/types/templating_node_array_result.py +11 -5
  551. vellum/client/types/templating_node_chat_history_result.py +3 -3
  552. vellum/client/types/templating_node_error_result.py +3 -3
  553. vellum/client/types/templating_node_function_call_result.py +3 -3
  554. vellum/client/types/templating_node_json_result.py +2 -2
  555. vellum/client/types/templating_node_number_result.py +2 -2
  556. vellum/client/types/templating_node_result.py +10 -4
  557. vellum/client/types/templating_node_result_data.py +10 -4
  558. vellum/client/types/templating_node_result_output.py +6 -5
  559. vellum/client/types/templating_node_search_results_result.py +3 -3
  560. vellum/client/types/templating_node_string_result.py +2 -2
  561. vellum/client/types/terminal_node_array_result.py +11 -5
  562. vellum/client/types/terminal_node_chat_history_result.py +2 -2
  563. vellum/client/types/terminal_node_error_result.py +2 -2
  564. vellum/client/types/terminal_node_function_call_result.py +2 -2
  565. vellum/client/types/terminal_node_json_result.py +2 -2
  566. vellum/client/types/terminal_node_number_result.py +2 -2
  567. vellum/client/types/terminal_node_result.py +10 -4
  568. vellum/client/types/terminal_node_result_data.py +10 -4
  569. vellum/client/types/terminal_node_result_output.py +6 -5
  570. vellum/client/types/terminal_node_search_results_result.py +2 -2
  571. vellum/client/types/terminal_node_string_result.py +2 -2
  572. vellum/client/types/test_case_array_variable_value.py +11 -5
  573. vellum/client/types/test_case_audio_variable_value.py +27 -0
  574. vellum/client/types/test_case_chat_history_variable_value.py +3 -3
  575. vellum/client/types/test_case_document_variable_value.py +27 -0
  576. vellum/client/types/test_case_error_variable_value.py +3 -3
  577. vellum/client/types/test_case_function_call_variable_value.py +3 -3
  578. vellum/client/types/test_case_image_variable_value.py +27 -0
  579. vellum/client/types/test_case_json_variable_value.py +2 -2
  580. vellum/client/types/test_case_number_variable_value.py +2 -2
  581. vellum/client/types/test_case_search_results_variable_value.py +3 -3
  582. vellum/client/types/test_case_string_variable_value.py +2 -2
  583. vellum/client/types/test_case_variable_value.py +14 -5
  584. vellum/client/types/test_case_video_variable_value.py +27 -0
  585. vellum/client/types/test_suite_run_deployment_release_tag_exec_config.py +3 -3
  586. vellum/client/types/test_suite_run_deployment_release_tag_exec_config_data.py +3 -3
  587. vellum/client/types/test_suite_run_deployment_release_tag_exec_config_data_request.py +3 -3
  588. vellum/client/types/test_suite_run_deployment_release_tag_exec_config_request.py +3 -3
  589. vellum/client/types/test_suite_run_exec_config.py +2 -1
  590. vellum/client/types/test_suite_run_exec_config_request.py +2 -1
  591. vellum/client/types/test_suite_run_execution.py +11 -5
  592. vellum/client/types/test_suite_run_execution_array_output.py +11 -5
  593. vellum/client/types/test_suite_run_execution_chat_history_output.py +3 -3
  594. vellum/client/types/test_suite_run_execution_error_output.py +3 -3
  595. vellum/client/types/test_suite_run_execution_function_call_output.py +3 -3
  596. vellum/client/types/test_suite_run_execution_json_output.py +2 -2
  597. vellum/client/types/test_suite_run_execution_metric_definition.py +2 -2
  598. vellum/client/types/test_suite_run_execution_metric_result.py +11 -5
  599. vellum/client/types/test_suite_run_execution_number_output.py +2 -2
  600. vellum/client/types/test_suite_run_execution_output.py +6 -5
  601. vellum/client/types/test_suite_run_execution_search_results_output.py +3 -3
  602. vellum/client/types/test_suite_run_execution_string_output.py +2 -2
  603. vellum/client/types/test_suite_run_external_exec_config.py +10 -4
  604. vellum/client/types/test_suite_run_external_exec_config_data.py +10 -4
  605. vellum/client/types/test_suite_run_external_exec_config_data_request.py +10 -4
  606. vellum/client/types/test_suite_run_external_exec_config_request.py +10 -4
  607. vellum/client/types/test_suite_run_metric_array_output.py +11 -5
  608. vellum/client/types/test_suite_run_metric_error_output.py +3 -3
  609. vellum/client/types/test_suite_run_metric_json_output.py +2 -2
  610. vellum/client/types/test_suite_run_metric_number_output.py +2 -2
  611. vellum/client/types/test_suite_run_metric_output.py +5 -4
  612. vellum/client/types/test_suite_run_metric_string_output.py +2 -2
  613. vellum/client/types/test_suite_run_progress.py +2 -2
  614. vellum/client/types/test_suite_run_prompt_sandbox_exec_config_data_request.py +3 -3
  615. vellum/client/types/test_suite_run_prompt_sandbox_exec_config_request.py +3 -3
  616. vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config.py +3 -3
  617. vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_data.py +3 -3
  618. vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_data_request.py +3 -3
  619. vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_request.py +3 -3
  620. vellum/client/types/test_suite_run_read.py +12 -6
  621. vellum/client/types/test_suite_run_test_suite.py +2 -2
  622. vellum/client/types/test_suite_run_workflow_release_tag_exec_config.py +3 -3
  623. vellum/client/types/test_suite_run_workflow_release_tag_exec_config_data.py +3 -3
  624. vellum/client/types/test_suite_run_workflow_release_tag_exec_config_data_request.py +3 -3
  625. vellum/client/types/test_suite_run_workflow_release_tag_exec_config_request.py +3 -3
  626. vellum/client/types/test_suite_run_workflow_sandbox_exec_config_data_request.py +3 -3
  627. vellum/client/types/test_suite_run_workflow_sandbox_exec_config_request.py +3 -3
  628. vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config.py +3 -3
  629. vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_data.py +3 -3
  630. vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_data_request.py +3 -3
  631. vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_request.py +3 -3
  632. vellum/client/types/test_suite_test_case.py +10 -4
  633. vellum/client/types/test_suite_test_case_bulk_operation_request.py +2 -1
  634. vellum/client/types/test_suite_test_case_bulk_result.py +2 -1
  635. vellum/client/types/test_suite_test_case_create_bulk_operation_request.py +10 -4
  636. vellum/client/types/test_suite_test_case_created_bulk_result.py +3 -3
  637. vellum/client/types/test_suite_test_case_created_bulk_result_data.py +2 -2
  638. vellum/client/types/test_suite_test_case_delete_bulk_operation_data_request.py +2 -2
  639. vellum/client/types/test_suite_test_case_delete_bulk_operation_request.py +3 -3
  640. vellum/client/types/test_suite_test_case_deleted_bulk_result.py +3 -3
  641. vellum/client/types/test_suite_test_case_deleted_bulk_result_data.py +2 -2
  642. vellum/client/types/test_suite_test_case_rejected_bulk_result.py +2 -2
  643. vellum/client/types/test_suite_test_case_replace_bulk_operation_request.py +10 -4
  644. vellum/client/types/test_suite_test_case_replaced_bulk_result.py +3 -3
  645. vellum/client/types/test_suite_test_case_replaced_bulk_result_data.py +2 -2
  646. vellum/client/types/test_suite_test_case_upsert_bulk_operation_request.py +10 -4
  647. vellum/client/types/thinking_vellum_value.py +25 -0
  648. vellum/client/types/thinking_vellum_value_request.py +25 -0
  649. vellum/client/types/token_overlapping_window_chunker_config.py +2 -2
  650. vellum/client/types/token_overlapping_window_chunker_config_request.py +2 -2
  651. vellum/client/types/token_overlapping_window_chunking.py +3 -3
  652. vellum/client/types/token_overlapping_window_chunking_request.py +3 -3
  653. vellum/client/types/update_active_workspace_response.py +32 -0
  654. vellum/client/types/upload_document_response.py +3 -3
  655. vellum/client/types/uploaded_file_read.py +27 -0
  656. vellum/client/types/upsert_test_suite_test_case_request.py +9 -3
  657. vellum/client/types/variable_prompt_block.py +11 -4
  658. vellum/client/types/vellum_audio.py +5 -4
  659. vellum/client/types/vellum_audio_request.py +3 -3
  660. vellum/client/types/vellum_code_resource_definition.py +7 -2
  661. vellum/client/types/vellum_document.py +9 -4
  662. vellum/client/types/vellum_document_request.py +7 -3
  663. vellum/client/types/vellum_error.py +5 -4
  664. vellum/client/types/vellum_error_code_enum.py +6 -0
  665. vellum/client/types/vellum_error_request.py +5 -4
  666. vellum/client/types/vellum_image.py +9 -4
  667. vellum/client/types/vellum_image_request.py +7 -3
  668. vellum/client/types/vellum_node_execution_event.py +4 -3
  669. vellum/client/types/vellum_sdk_error.py +4 -3
  670. vellum/client/types/vellum_sdk_error_code_enum.py +5 -0
  671. vellum/client/types/vellum_secret.py +2 -2
  672. vellum/client/types/vellum_span.py +2 -1
  673. vellum/client/types/vellum_value.py +13 -8
  674. vellum/client/types/vellum_value_logical_condition_group_request.py +6 -6
  675. vellum/client/types/vellum_value_logical_condition_request.py +13 -7
  676. vellum/client/types/vellum_value_logical_expression_request.py +2 -1
  677. vellum/client/types/vellum_value_request.py +13 -8
  678. vellum/client/types/vellum_variable.py +13 -7
  679. vellum/client/types/vellum_variable_extensions.py +3 -2
  680. vellum/client/types/vellum_variable_type.py +3 -1
  681. vellum/client/types/vellum_video.py +25 -0
  682. vellum/client/types/vellum_video_request.py +24 -0
  683. vellum/client/types/vellum_workflow_execution_event.py +4 -3
  684. vellum/client/types/video_chat_message_content.py +25 -0
  685. vellum/client/types/video_chat_message_content_request.py +25 -0
  686. vellum/client/types/video_input.py +30 -0
  687. vellum/client/types/video_input_request.py +30 -0
  688. vellum/client/types/video_prompt_block.py +29 -0
  689. vellum/client/types/video_vellum_value.py +25 -0
  690. vellum/client/types/video_vellum_value_request.py +25 -0
  691. vellum/client/types/workflow_deployment_display_data.py +27 -0
  692. vellum/client/types/workflow_deployment_event_executions_response.py +20 -11
  693. vellum/client/types/workflow_deployment_history_item.py +10 -4
  694. vellum/client/types/workflow_deployment_parent_context.py +13 -10
  695. vellum/client/types/workflow_deployment_read.py +22 -10
  696. vellum/client/types/workflow_deployment_release.py +13 -7
  697. vellum/client/types/workflow_deployment_release_workflow_deployment.py +2 -2
  698. vellum/client/types/workflow_deployment_release_workflow_version.py +10 -4
  699. vellum/client/types/workflow_display_icon.py +24 -0
  700. vellum/client/types/workflow_error.py +1 -0
  701. vellum/client/types/workflow_event.py +37 -0
  702. vellum/client/types/workflow_event_error.py +5 -3
  703. vellum/client/types/workflow_event_execution_read.py +26 -16
  704. vellum/client/types/workflow_execution_actual.py +11 -5
  705. vellum/client/types/workflow_execution_actual_chat_history_request.py +2 -2
  706. vellum/client/types/workflow_execution_actual_json_request.py +2 -2
  707. vellum/client/types/workflow_execution_actual_string_request.py +2 -2
  708. vellum/client/types/workflow_execution_detail.py +51 -0
  709. vellum/client/types/workflow_execution_event_error_code.py +5 -0
  710. vellum/client/types/workflow_execution_fulfilled_body.py +5 -3
  711. vellum/client/types/workflow_execution_fulfilled_event.py +24 -15
  712. vellum/client/types/workflow_execution_initiated_body.py +3 -3
  713. vellum/client/types/workflow_execution_initiated_event.py +24 -15
  714. vellum/client/types/workflow_execution_node_result_event.py +10 -4
  715. vellum/client/types/workflow_execution_paused_body.py +4 -4
  716. vellum/client/types/workflow_execution_paused_event.py +24 -15
  717. vellum/client/types/workflow_execution_rejected_body.py +5 -4
  718. vellum/client/types/workflow_execution_rejected_event.py +24 -15
  719. vellum/client/types/workflow_execution_resumed_body.py +3 -3
  720. vellum/client/types/workflow_execution_resumed_event.py +24 -15
  721. vellum/client/types/workflow_execution_snapshotted_body.py +4 -3
  722. vellum/client/types/workflow_execution_snapshotted_event.py +24 -15
  723. vellum/client/types/workflow_execution_span.py +22 -11
  724. vellum/client/types/workflow_execution_span_attributes.py +3 -2
  725. vellum/client/types/workflow_execution_streaming_body.py +4 -4
  726. vellum/client/types/workflow_execution_streaming_event.py +24 -15
  727. vellum/client/types/workflow_execution_usage_calculation_error.py +3 -3
  728. vellum/client/types/workflow_execution_usage_calculation_fulfilled_body.py +22 -0
  729. vellum/client/types/workflow_execution_usage_result.py +3 -3
  730. vellum/client/types/workflow_execution_view_online_eval_metric_result.py +10 -4
  731. vellum/client/types/workflow_execution_workflow_result_event.py +10 -4
  732. vellum/client/types/workflow_expand_meta_request.py +2 -2
  733. vellum/client/types/workflow_initialization_error.py +2 -2
  734. vellum/client/types/workflow_input.py +31 -0
  735. vellum/client/types/workflow_node_result_data.py +8 -7
  736. vellum/client/types/workflow_node_result_event.py +3 -2
  737. vellum/client/types/workflow_output.py +12 -5
  738. vellum/client/types/workflow_output_array.py +12 -6
  739. vellum/client/types/workflow_output_audio.py +31 -0
  740. vellum/client/types/workflow_output_chat_history.py +3 -3
  741. vellum/client/types/workflow_output_document.py +31 -0
  742. vellum/client/types/workflow_output_error.py +3 -3
  743. vellum/client/types/workflow_output_function_call.py +3 -3
  744. vellum/client/types/workflow_output_image.py +3 -3
  745. vellum/client/types/workflow_output_json.py +3 -3
  746. vellum/client/types/workflow_output_number.py +3 -3
  747. vellum/client/types/workflow_output_search_results.py +3 -3
  748. vellum/client/types/workflow_output_string.py +3 -3
  749. vellum/client/types/workflow_output_video.py +31 -0
  750. vellum/client/types/workflow_parent_context.py +14 -11
  751. vellum/client/types/workflow_push_deployment_config_request.py +3 -2
  752. vellum/client/types/workflow_push_response.py +2 -2
  753. vellum/client/types/workflow_release_tag_read.py +4 -4
  754. vellum/client/types/workflow_release_tag_workflow_deployment_history_item.py +2 -2
  755. vellum/client/types/workflow_request_audio_input_request.py +30 -0
  756. vellum/client/types/workflow_request_chat_history_input_request.py +3 -3
  757. vellum/client/types/workflow_request_document_input_request.py +30 -0
  758. vellum/client/types/workflow_request_image_input_request.py +30 -0
  759. vellum/client/types/workflow_request_input_request.py +11 -2
  760. vellum/client/types/workflow_request_json_input_request.py +3 -3
  761. vellum/client/types/workflow_request_number_input_request.py +3 -3
  762. vellum/client/types/workflow_request_string_input_request.py +3 -3
  763. vellum/client/types/workflow_request_video_input_request.py +30 -0
  764. vellum/client/types/workflow_resolved_state.py +31 -0
  765. vellum/client/types/workflow_result_event.py +14 -8
  766. vellum/client/types/workflow_result_event_output_data.py +7 -6
  767. vellum/client/types/workflow_result_event_output_data_array.py +12 -6
  768. vellum/client/types/workflow_result_event_output_data_chat_history.py +3 -3
  769. vellum/client/types/workflow_result_event_output_data_error.py +3 -3
  770. vellum/client/types/workflow_result_event_output_data_function_call.py +3 -3
  771. vellum/client/types/workflow_result_event_output_data_json.py +3 -3
  772. vellum/client/types/workflow_result_event_output_data_number.py +3 -3
  773. vellum/client/types/workflow_result_event_output_data_search_results.py +3 -3
  774. vellum/client/types/workflow_result_event_output_data_string.py +3 -3
  775. vellum/client/types/workflow_result_event_state.py +7 -0
  776. vellum/client/types/workflow_sandbox_display_data.py +27 -0
  777. vellum/client/types/workflow_sandbox_example.py +4 -2
  778. vellum/client/types/workflow_sandbox_parent_context.py +13 -10
  779. vellum/client/types/workflow_stream_event.py +2 -1
  780. vellum/client/types/workspace_display_config.py +19 -0
  781. vellum/client/types/workspace_read.py +5 -3
  782. vellum/client/types/workspace_secret_read.py +3 -3
  783. vellum/client/utils.py +24 -0
  784. vellum/core/force_multipart.py +3 -0
  785. vellum/core/http_response.py +3 -0
  786. vellum/errors/misdirected_request_error.py +3 -0
  787. vellum/errors/too_many_requests_error.py +3 -0
  788. vellum/errors/unauthorized_error.py +3 -0
  789. vellum/evaluations/resources.py +5 -5
  790. vellum/plugins/pydantic.py +14 -3
  791. vellum/plugins/tests/__init__.py +0 -0
  792. vellum/plugins/tests/test_pydantic.py +30 -0
  793. vellum/plugins/vellum_mypy.py +31 -23
  794. vellum/prompts/__init__.py +3 -0
  795. vellum/prompts/blocks/__init__.py +3 -0
  796. vellum/prompts/blocks/compilation.py +29 -11
  797. vellum/prompts/blocks/helpers.py +31 -0
  798. vellum/prompts/blocks/tests/test_compilation.py +64 -0
  799. vellum/raw_client.py +3 -0
  800. vellum/resources/ad_hoc/raw_client.py +3 -0
  801. vellum/resources/container_images/raw_client.py +3 -0
  802. vellum/resources/deployments/raw_client.py +3 -0
  803. vellum/resources/document_indexes/raw_client.py +3 -0
  804. vellum/resources/documents/raw_client.py +3 -0
  805. vellum/resources/{release_reviews → environments}/__init__.py +1 -1
  806. vellum/resources/{release_reviews → environments}/client.py +1 -1
  807. vellum/resources/environments/raw_client.py +3 -0
  808. vellum/resources/events/__init__.py +3 -0
  809. vellum/resources/events/client.py +3 -0
  810. vellum/resources/events/raw_client.py +3 -0
  811. vellum/resources/folder_entities/raw_client.py +3 -0
  812. vellum/resources/integration_auth_configs/__init__.py +3 -0
  813. vellum/resources/integration_auth_configs/client.py +3 -0
  814. vellum/resources/integration_auth_configs/raw_client.py +3 -0
  815. vellum/resources/integration_providers/__init__.py +3 -0
  816. vellum/resources/integration_providers/client.py +3 -0
  817. vellum/resources/integration_providers/raw_client.py +3 -0
  818. vellum/resources/integrations/__init__.py +3 -0
  819. vellum/resources/integrations/client.py +3 -0
  820. vellum/resources/integrations/raw_client.py +3 -0
  821. vellum/resources/metric_definitions/raw_client.py +3 -0
  822. vellum/resources/ml_models/raw_client.py +3 -0
  823. vellum/resources/organizations/raw_client.py +3 -0
  824. vellum/resources/prompts/raw_client.py +3 -0
  825. vellum/resources/sandboxes/raw_client.py +3 -0
  826. vellum/resources/test_suite_runs/raw_client.py +3 -0
  827. vellum/resources/test_suites/raw_client.py +3 -0
  828. vellum/resources/uploaded_files/__init__.py +3 -0
  829. vellum/resources/uploaded_files/client.py +3 -0
  830. vellum/resources/uploaded_files/raw_client.py +3 -0
  831. vellum/resources/workflow_deployments/raw_client.py +3 -0
  832. vellum/resources/workflow_executions/__init__.py +3 -0
  833. vellum/resources/workflow_executions/client.py +3 -0
  834. vellum/resources/workflow_executions/raw_client.py +3 -0
  835. vellum/resources/workflow_sandboxes/raw_client.py +3 -0
  836. vellum/resources/workflows/raw_client.py +3 -0
  837. vellum/resources/workspace_secrets/raw_client.py +3 -0
  838. vellum/resources/workspaces/raw_client.py +3 -0
  839. vellum/types/api_actor_type_enum.py +3 -0
  840. vellum/types/audio_input.py +3 -0
  841. vellum/types/audio_input_request.py +3 -0
  842. vellum/types/auth_type_enum.py +3 -0
  843. vellum/types/build_status_enum.py +3 -0
  844. vellum/types/components_schemas_composio_execute_tool_request.py +3 -0
  845. vellum/types/components_schemas_composio_execute_tool_response.py +3 -0
  846. vellum/types/components_schemas_composio_integration_exec_config.py +3 -0
  847. vellum/types/components_schemas_composio_tool_definition.py +3 -0
  848. vellum/types/components_schemas_slim_composio_tool_definition.py +3 -0
  849. vellum/types/composio_execute_tool_request.py +3 -0
  850. vellum/types/composio_execute_tool_response.py +3 -0
  851. vellum/types/composio_integration_exec_config.py +3 -0
  852. vellum/types/composio_tool_definition.py +3 -0
  853. vellum/types/container_image_build_config.py +3 -0
  854. vellum/types/create_workflow_event_request.py +3 -0
  855. vellum/types/dataset_row_push_request.py +3 -0
  856. vellum/types/delimiter_chunker_config.py +3 -0
  857. vellum/types/delimiter_chunker_config_request.py +3 -0
  858. vellum/types/delimiter_chunking.py +3 -0
  859. vellum/types/delimiter_chunking_request.py +3 -0
  860. vellum/types/deprecated_prompt_request_input.py +3 -0
  861. vellum/types/document_input.py +3 -0
  862. vellum/types/document_input_request.py +3 -0
  863. vellum/types/environment_display_config.py +3 -0
  864. vellum/types/environment_read.py +3 -0
  865. vellum/types/error_detail_response.py +3 -0
  866. vellum/types/event_create_response.py +3 -0
  867. vellum/types/execute_workflow_async_response.py +3 -0
  868. vellum/types/execution_audio_vellum_value.py +3 -0
  869. vellum/types/execution_document_vellum_value.py +3 -0
  870. vellum/types/execution_image_vellum_value.py +3 -0
  871. vellum/types/execution_thinking_vellum_value.py +3 -0
  872. vellum/types/execution_video_vellum_value.py +3 -0
  873. vellum/types/external_parent_context.py +3 -0
  874. vellum/types/fast_embed_vectorizer_baai_bge_small_en_v_15.py +3 -0
  875. vellum/types/fast_embed_vectorizer_baai_bge_small_en_v_15_request.py +3 -0
  876. vellum/types/folder_entity_dataset.py +3 -0
  877. vellum/types/folder_entity_dataset_data.py +3 -0
  878. vellum/types/google_vertex_ai_vectorizer_gemini_embedding_001.py +3 -0
  879. vellum/types/google_vertex_ai_vectorizer_gemini_embedding_001_request.py +3 -0
  880. vellum/types/image_input.py +3 -0
  881. vellum/types/image_input_request.py +3 -0
  882. vellum/types/integration.py +3 -0
  883. vellum/types/integration_auth_config_integration.py +3 -0
  884. vellum/types/integration_auth_config_integration_credential.py +3 -0
  885. vellum/types/integration_credential_access_type.py +3 -0
  886. vellum/types/integration_name.py +3 -0
  887. vellum/types/integration_provider.py +3 -0
  888. vellum/types/integration_read.py +3 -0
  889. vellum/types/integration_trigger_context.py +3 -0
  890. vellum/types/named_scenario_input_audio_variable_value_request.py +3 -0
  891. vellum/types/named_scenario_input_document_variable_value_request.py +3 -0
  892. vellum/types/named_scenario_input_image_variable_value_request.py +3 -0
  893. vellum/types/named_scenario_input_video_variable_value_request.py +3 -0
  894. vellum/types/named_test_case_audio_variable_value.py +3 -0
  895. vellum/types/named_test_case_audio_variable_value_request.py +3 -0
  896. vellum/types/named_test_case_document_variable_value.py +3 -0
  897. vellum/types/named_test_case_document_variable_value_request.py +3 -0
  898. vellum/types/named_test_case_image_variable_value.py +3 -0
  899. vellum/types/named_test_case_image_variable_value_request.py +3 -0
  900. vellum/types/named_test_case_video_variable_value.py +3 -0
  901. vellum/types/named_test_case_video_variable_value_request.py +3 -0
  902. vellum/types/node_input_compiled_audio_value.py +3 -0
  903. vellum/types/node_input_compiled_document_value.py +3 -0
  904. vellum/types/node_input_compiled_image_value.py +3 -0
  905. vellum/types/node_input_compiled_video_value.py +3 -0
  906. vellum/types/node_output_compiled_thinking_value.py +3 -0
  907. vellum/types/paginated_slim_integration_auth_config_read_list.py +3 -0
  908. vellum/types/paginated_slim_integration_read_list.py +3 -0
  909. vellum/types/paginated_slim_tool_definition_list.py +3 -0
  910. vellum/types/paginated_workflow_deployment_release_list.py +3 -0
  911. vellum/types/private_vectorizer.py +3 -0
  912. vellum/types/private_vectorizer_request.py +3 -0
  913. vellum/types/prompt_request_audio_input.py +3 -0
  914. vellum/types/prompt_request_document_input.py +3 -0
  915. vellum/types/prompt_request_image_input.py +3 -0
  916. vellum/types/prompt_request_video_input.py +3 -0
  917. vellum/types/scenario_input_audio_variable_value.py +3 -0
  918. vellum/types/scenario_input_document_variable_value.py +3 -0
  919. vellum/types/scenario_input_image_variable_value.py +3 -0
  920. vellum/types/scenario_input_video_variable_value.py +3 -0
  921. vellum/types/scheduled_trigger_context.py +3 -0
  922. vellum/types/slim_composio_tool_definition.py +3 -0
  923. vellum/types/slim_integration_auth_config_read.py +3 -0
  924. vellum/types/slim_integration_read.py +3 -0
  925. vellum/types/test_case_audio_variable_value.py +3 -0
  926. vellum/types/test_case_document_variable_value.py +3 -0
  927. vellum/types/test_case_image_variable_value.py +3 -0
  928. vellum/types/test_case_video_variable_value.py +3 -0
  929. vellum/types/thinking_vellum_value.py +3 -0
  930. vellum/types/thinking_vellum_value_request.py +3 -0
  931. vellum/types/update_active_workspace_response.py +3 -0
  932. vellum/types/uploaded_file_read.py +3 -0
  933. vellum/types/vellum_video.py +3 -0
  934. vellum/types/vellum_video_request.py +3 -0
  935. vellum/types/video_chat_message_content.py +3 -0
  936. vellum/types/video_chat_message_content_request.py +3 -0
  937. vellum/types/video_input.py +3 -0
  938. vellum/types/video_input_request.py +3 -0
  939. vellum/types/video_prompt_block.py +3 -0
  940. vellum/types/video_vellum_value.py +3 -0
  941. vellum/types/video_vellum_value_request.py +3 -0
  942. vellum/types/workflow_deployment_display_data.py +3 -0
  943. vellum/types/workflow_display_icon.py +3 -0
  944. vellum/types/workflow_event.py +3 -0
  945. vellum/types/workflow_execution_detail.py +3 -0
  946. vellum/types/workflow_execution_usage_calculation_fulfilled_body.py +3 -0
  947. vellum/types/workflow_input.py +3 -0
  948. vellum/types/workflow_output_audio.py +3 -0
  949. vellum/types/workflow_output_document.py +3 -0
  950. vellum/types/workflow_output_video.py +3 -0
  951. vellum/types/workflow_request_audio_input_request.py +3 -0
  952. vellum/types/workflow_request_document_input_request.py +3 -0
  953. vellum/types/workflow_request_image_input_request.py +3 -0
  954. vellum/types/workflow_request_video_input_request.py +3 -0
  955. vellum/types/workflow_resolved_state.py +3 -0
  956. vellum/types/workflow_result_event_state.py +3 -0
  957. vellum/types/workflow_sandbox_display_data.py +3 -0
  958. vellum/types/workspace_display_config.py +3 -0
  959. vellum/utils/files/__init__.py +18 -0
  960. vellum/utils/files/constants.py +47 -0
  961. vellum/utils/files/exceptions.py +25 -0
  962. vellum/utils/files/extensions.py +59 -0
  963. vellum/utils/files/mixin.py +109 -0
  964. vellum/utils/files/read.py +41 -0
  965. vellum/utils/files/stream.py +135 -0
  966. vellum/utils/files/tests/__init__.py +0 -0
  967. vellum/utils/files/tests/test_extensions.py +54 -0
  968. vellum/utils/files/tests/test_mixin.py +205 -0
  969. vellum/utils/files/tests/test_read.py +204 -0
  970. vellum/utils/files/tests/test_stream.py +199 -0
  971. vellum/utils/files/tests/test_upload.py +309 -0
  972. vellum/utils/files/tests/test_urls.py +252 -0
  973. vellum/utils/files/types.py +8 -0
  974. vellum/utils/files/upload.py +151 -0
  975. vellum/utils/files/urls.py +71 -0
  976. vellum/utils/json_encoder.py +95 -0
  977. vellum/utils/templating/custom_filters.py +4 -4
  978. vellum/utils/templating/render.py +4 -4
  979. vellum/utils/tests/__init__.py +0 -0
  980. vellum/utils/tests/test_json_encoder.py +92 -0
  981. vellum/utils/vellum_client.py +40 -0
  982. vellum/workflows/__init__.py +78 -0
  983. vellum/workflows/constants.py +7 -0
  984. vellum/workflows/context.py +27 -9
  985. vellum/workflows/descriptors/base.py +83 -2
  986. vellum/workflows/descriptors/exceptions.py +18 -1
  987. vellum/workflows/descriptors/tests/test_utils.py +57 -0
  988. vellum/workflows/descriptors/utils.py +27 -3
  989. vellum/workflows/edges/__init__.py +2 -0
  990. vellum/workflows/edges/trigger_edge.py +67 -0
  991. vellum/workflows/emitters/__init__.py +2 -0
  992. vellum/workflows/emitters/base.py +25 -0
  993. vellum/workflows/emitters/vellum_emitter.py +150 -0
  994. vellum/workflows/environment/__init__.py +2 -1
  995. vellum/workflows/environment/environment.py +10 -3
  996. vellum/workflows/errors/types.py +18 -1
  997. vellum/workflows/events/__init__.py +2 -0
  998. vellum/workflows/events/context.py +90 -0
  999. vellum/workflows/events/exception_handling.py +58 -0
  1000. vellum/workflows/events/node.py +27 -11
  1001. vellum/workflows/events/relational_threads.py +41 -0
  1002. vellum/workflows/events/stream.py +28 -0
  1003. vellum/workflows/events/tests/test_basic_workflow.py +50 -0
  1004. vellum/workflows/events/tests/test_event.py +145 -20
  1005. vellum/workflows/events/types.py +32 -4
  1006. vellum/workflows/events/workflow.py +111 -8
  1007. vellum/workflows/exceptions.py +46 -7
  1008. vellum/workflows/executable.py +9 -0
  1009. vellum/workflows/expressions/accessor.py +65 -11
  1010. vellum/workflows/expressions/add.py +41 -0
  1011. vellum/workflows/expressions/comparison_utils.py +38 -0
  1012. vellum/workflows/expressions/concat.py +35 -0
  1013. vellum/workflows/expressions/contains.py +7 -0
  1014. vellum/workflows/expressions/greater_than.py +8 -1
  1015. vellum/workflows/expressions/greater_than_or_equal_to.py +8 -1
  1016. vellum/workflows/expressions/is_error.py +23 -0
  1017. vellum/workflows/expressions/length.py +46 -0
  1018. vellum/workflows/expressions/less_than.py +8 -1
  1019. vellum/workflows/expressions/less_than_or_equal_to.py +8 -1
  1020. vellum/workflows/expressions/minus.py +41 -0
  1021. vellum/workflows/expressions/tests/test_accessor.py +248 -0
  1022. vellum/workflows/expressions/tests/test_add.py +72 -0
  1023. vellum/workflows/expressions/tests/test_concat.py +108 -0
  1024. vellum/workflows/expressions/tests/test_contains.py +175 -0
  1025. vellum/workflows/expressions/tests/test_expressions.py +145 -32
  1026. vellum/workflows/expressions/tests/test_length.py +38 -0
  1027. vellum/workflows/expressions/tests/test_minus.py +109 -0
  1028. vellum/workflows/graph/graph.py +255 -8
  1029. vellum/workflows/graph/tests/test_graph.py +300 -0
  1030. vellum/workflows/inputs/__init__.py +2 -0
  1031. vellum/workflows/inputs/base.py +49 -15
  1032. vellum/workflows/inputs/dataset_row.py +81 -0
  1033. vellum/workflows/inputs/tests/test_inputs.py +181 -1
  1034. vellum/workflows/integrations/__init__.py +5 -0
  1035. vellum/workflows/integrations/composio_service.py +158 -0
  1036. vellum/workflows/integrations/mcp_service.py +282 -0
  1037. vellum/workflows/integrations/tests/__init__.py +0 -0
  1038. vellum/workflows/integrations/tests/test_mcp_service.py +273 -0
  1039. vellum/workflows/integrations/tests/test_vellum_integration_service.py +299 -0
  1040. vellum/workflows/integrations/vellum_integration_service.py +136 -0
  1041. vellum/workflows/loaders/__init__.py +3 -0
  1042. vellum/workflows/loaders/base.py +36 -0
  1043. vellum/workflows/nodes/__init__.py +2 -0
  1044. vellum/workflows/nodes/bases/base.py +142 -80
  1045. vellum/workflows/nodes/bases/base_adornment_node.py +55 -1
  1046. vellum/workflows/nodes/bases/tests/test_base_node.py +50 -4
  1047. vellum/workflows/nodes/core/error_node/node.py +11 -2
  1048. vellum/workflows/nodes/core/inline_subworkflow_node/node.py +29 -3
  1049. vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py +35 -0
  1050. vellum/workflows/nodes/core/map_node/node.py +26 -1
  1051. vellum/workflows/nodes/core/map_node/tests/test_node.py +73 -0
  1052. vellum/workflows/nodes/core/retry_node/tests/test_node.py +2 -3
  1053. vellum/workflows/nodes/core/templating_node/node.py +7 -2
  1054. vellum/workflows/nodes/core/templating_node/tests/test_templating_node.py +194 -1
  1055. vellum/workflows/nodes/displayable/__init__.py +6 -0
  1056. vellum/workflows/nodes/displayable/api_node/node.py +10 -1
  1057. vellum/workflows/nodes/displayable/api_node/tests/test_api_node.py +113 -2
  1058. vellum/workflows/nodes/displayable/bases/api_node/node.py +70 -16
  1059. vellum/workflows/nodes/displayable/bases/api_node/tests/__init__.py +0 -0
  1060. vellum/workflows/nodes/displayable/bases/api_node/tests/test_node.py +150 -0
  1061. vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py +68 -7
  1062. vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py +215 -17
  1063. vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/test_inline_prompt_node.py +352 -32
  1064. vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py +73 -1
  1065. vellum/workflows/nodes/displayable/bases/search_node.py +26 -3
  1066. vellum/workflows/nodes/displayable/bases/tests/test_prompt_deployment_node.py +90 -0
  1067. vellum/workflows/nodes/displayable/bases/utils.py +82 -5
  1068. vellum/workflows/nodes/displayable/code_execution_node/node.py +35 -9
  1069. vellum/workflows/nodes/displayable/code_execution_node/tests/test_node.py +242 -13
  1070. vellum/workflows/nodes/displayable/code_execution_node/utils.py +5 -21
  1071. vellum/workflows/nodes/displayable/conditional_node/node.py +8 -4
  1072. vellum/workflows/nodes/displayable/final_output_node/node.py +80 -1
  1073. vellum/workflows/nodes/displayable/final_output_node/tests/test_node.py +96 -1
  1074. vellum/workflows/nodes/displayable/guardrail_node/node.py +13 -4
  1075. vellum/workflows/nodes/displayable/inline_prompt_node/node.py +9 -36
  1076. vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py +3 -0
  1077. vellum/workflows/nodes/displayable/merge_node/node.py +8 -1
  1078. vellum/workflows/nodes/displayable/note_node/node.py +8 -1
  1079. vellum/workflows/nodes/displayable/prompt_deployment_node/node.py +7 -23
  1080. vellum/workflows/nodes/displayable/search_node/node.py +15 -2
  1081. vellum/workflows/nodes/displayable/search_node/tests/test_node.py +33 -0
  1082. vellum/workflows/nodes/displayable/set_state_node/__init__.py +5 -0
  1083. vellum/workflows/nodes/displayable/set_state_node/node.py +71 -0
  1084. vellum/workflows/nodes/displayable/set_state_node/tests/__init__.py +0 -0
  1085. vellum/workflows/nodes/displayable/set_state_node/tests/test_node.py +212 -0
  1086. vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py +220 -59
  1087. vellum/workflows/nodes/displayable/subworkflow_deployment_node/tests/test_node.py +1 -1
  1088. vellum/workflows/nodes/displayable/tests/test_inline_text_prompt_node.py +4 -1
  1089. vellum/workflows/nodes/displayable/tests/test_search_node_error_handling.py +329 -0
  1090. vellum/workflows/nodes/displayable/tests/test_text_prompt_deployment_node.py +10 -15
  1091. vellum/workflows/nodes/displayable/tool_calling_node/__init__.py +3 -0
  1092. vellum/workflows/nodes/displayable/tool_calling_node/node.py +225 -0
  1093. vellum/workflows/nodes/displayable/tool_calling_node/state.py +11 -0
  1094. vellum/workflows/nodes/displayable/tool_calling_node/tests/__init__.py +0 -0
  1095. vellum/workflows/nodes/displayable/tool_calling_node/tests/test_composio_service.py +219 -0
  1096. vellum/workflows/nodes/displayable/tool_calling_node/tests/test_node.py +802 -0
  1097. vellum/workflows/nodes/displayable/tool_calling_node/tests/test_utils.py +316 -0
  1098. vellum/workflows/nodes/displayable/tool_calling_node/utils.py +633 -0
  1099. vellum/workflows/nodes/displayable/web_search_node/__init__.py +3 -0
  1100. vellum/workflows/nodes/displayable/web_search_node/node.py +136 -0
  1101. vellum/workflows/nodes/displayable/web_search_node/tests/__init__.py +0 -0
  1102. vellum/workflows/nodes/displayable/web_search_node/tests/test_node.py +246 -0
  1103. vellum/workflows/nodes/experimental/__init__.py +1 -3
  1104. vellum/workflows/nodes/mocks.py +40 -9
  1105. vellum/workflows/nodes/tests/test_mocks.py +2 -2
  1106. vellum/workflows/nodes/tests/test_utils.py +34 -5
  1107. vellum/workflows/nodes/utils.py +45 -6
  1108. vellum/workflows/outputs/base.py +53 -12
  1109. vellum/workflows/ports/node_ports.py +3 -0
  1110. vellum/workflows/ports/port.py +27 -12
  1111. vellum/workflows/ports/tests/test_port.py +45 -0
  1112. vellum/workflows/ports/utils.py +26 -6
  1113. vellum/workflows/references/__init__.py +2 -0
  1114. vellum/workflows/references/constant.py +4 -1
  1115. vellum/workflows/references/environment_variable.py +27 -9
  1116. vellum/workflows/references/output.py +4 -6
  1117. vellum/workflows/references/trigger.py +77 -0
  1118. vellum/workflows/resolvers/base.py +19 -1
  1119. vellum/workflows/resolvers/resolver.py +71 -0
  1120. vellum/workflows/resolvers/tests/test_resolver.py +168 -0
  1121. vellum/workflows/resolvers/types.py +11 -0
  1122. vellum/workflows/runner/runner.py +642 -160
  1123. vellum/workflows/sandbox.py +55 -9
  1124. vellum/workflows/state/base.py +164 -40
  1125. vellum/workflows/state/context.py +225 -6
  1126. vellum/workflows/state/delta.py +20 -0
  1127. vellum/workflows/state/encoder.py +2 -77
  1128. vellum/workflows/state/tests/test_state.py +24 -9
  1129. vellum/workflows/tests/test_dataset_row.py +190 -0
  1130. vellum/workflows/tests/test_sandbox.py +137 -0
  1131. vellum/workflows/tests/triggers/test_integration_trigger.py +156 -0
  1132. vellum/workflows/triggers/__init__.py +6 -0
  1133. vellum/workflows/triggers/base.py +391 -0
  1134. vellum/workflows/triggers/integration.py +186 -0
  1135. vellum/workflows/triggers/manual.py +37 -0
  1136. vellum/workflows/triggers/schedule.py +18 -0
  1137. vellum/workflows/triggers/tests/__init__.py +1 -0
  1138. vellum/workflows/triggers/tests/test_base_trigger_display.py +147 -0
  1139. vellum/workflows/triggers/tests/test_integration.py +155 -0
  1140. vellum/workflows/types/__init__.py +2 -1
  1141. vellum/workflows/types/code_execution_node_wrappers.py +5 -1
  1142. vellum/workflows/types/core.py +5 -0
  1143. vellum/workflows/types/definition.py +168 -2
  1144. vellum/workflows/types/generics.py +5 -0
  1145. vellum/workflows/types/tests/test_definition.py +183 -0
  1146. vellum/workflows/types/tests/test_utils.py +11 -0
  1147. vellum/workflows/types/utils.py +33 -3
  1148. vellum/workflows/utils/files.py +28 -0
  1149. vellum/workflows/utils/functions.py +244 -19
  1150. vellum/workflows/utils/hmac.py +44 -0
  1151. vellum/workflows/utils/names.py +32 -4
  1152. vellum/workflows/utils/pydantic_schema.py +38 -0
  1153. vellum/workflows/utils/tests/test_functions.py +357 -15
  1154. vellum/workflows/utils/tests/test_names.py +9 -0
  1155. vellum/workflows/utils/tests/test_vellum_variables.py +32 -2
  1156. vellum/workflows/utils/uuids.py +35 -0
  1157. vellum/workflows/utils/vellum_variables.py +131 -7
  1158. vellum/workflows/utils/zip.py +46 -0
  1159. vellum/workflows/vellum_client.py +3 -33
  1160. vellum/workflows/workflows/base.py +350 -39
  1161. vellum/workflows/workflows/event_filters.py +13 -0
  1162. vellum/workflows/workflows/tests/test_base_workflow.py +118 -6
  1163. vellum/workflows/workflows/tests/test_event_filters.py +126 -0
  1164. {vellum_ai-0.14.63.dist-info → vellum_ai-1.11.2.dist-info}/METADATA +12 -13
  1165. vellum_ai-1.11.2.dist-info/RECORD +2177 -0
  1166. vellum_ai-1.11.2.dist-info/entry_points.txt +4 -0
  1167. vellum_cli/__init__.py +34 -4
  1168. vellum_cli/config.py +5 -3
  1169. vellum_cli/image_push.py +106 -8
  1170. vellum_cli/move.py +56 -0
  1171. vellum_cli/ping.py +6 -0
  1172. vellum_cli/pull.py +48 -14
  1173. vellum_cli/push.py +103 -26
  1174. vellum_cli/tests/conftest.py +6 -0
  1175. vellum_cli/tests/test_image_push.py +190 -12
  1176. vellum_cli/tests/test_image_push_error_handling.py +258 -0
  1177. vellum_cli/tests/test_init.py +7 -24
  1178. vellum_cli/tests/test_move.py +154 -0
  1179. vellum_cli/tests/test_ping.py +15 -0
  1180. vellum_cli/tests/test_pull.py +42 -61
  1181. vellum_cli/tests/test_push.py +443 -11
  1182. vellum_ee/assets/node-definitions.json +1135 -0
  1183. vellum_ee/scripts/generate_node_definitions.py +89 -0
  1184. vellum_ee/workflows/display/base.py +29 -55
  1185. vellum_ee/workflows/display/editor/types.py +3 -0
  1186. vellum_ee/workflows/display/exceptions.py +3 -0
  1187. vellum_ee/workflows/display/nodes/base_node_display.py +164 -56
  1188. vellum_ee/workflows/display/nodes/tests/test_base_node_display.py +149 -3
  1189. vellum_ee/workflows/display/nodes/vellum/__init__.py +2 -0
  1190. vellum_ee/workflows/display/nodes/vellum/api_node.py +26 -13
  1191. vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py +3 -3
  1192. vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +23 -7
  1193. vellum_ee/workflows/display/nodes/vellum/conditional_node.py +18 -7
  1194. vellum_ee/workflows/display/nodes/vellum/error_node.py +2 -4
  1195. vellum_ee/workflows/display/nodes/vellum/final_output_node.py +3 -14
  1196. vellum_ee/workflows/display/nodes/vellum/function_node.py +14 -0
  1197. vellum_ee/workflows/display/nodes/vellum/guardrail_node.py +2 -5
  1198. vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py +77 -44
  1199. vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py +33 -10
  1200. vellum_ee/workflows/display/nodes/vellum/map_node.py +29 -15
  1201. vellum_ee/workflows/display/nodes/vellum/merge_node.py +2 -5
  1202. vellum_ee/workflows/display/nodes/vellum/note_node.py +2 -3
  1203. vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py +13 -9
  1204. vellum_ee/workflows/display/nodes/vellum/retry_node.py +5 -6
  1205. vellum_ee/workflows/display/nodes/vellum/search_node.py +76 -19
  1206. vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py +21 -10
  1207. vellum_ee/workflows/display/nodes/vellum/templating_node.py +3 -6
  1208. vellum_ee/workflows/display/nodes/vellum/tests/test_api_node.py +65 -0
  1209. vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py +176 -3
  1210. vellum_ee/workflows/display/nodes/vellum/tests/test_final_output_node.py +80 -0
  1211. vellum_ee/workflows/display/nodes/vellum/tests/test_inline_subworkflow_node.py +88 -0
  1212. vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_deployment_node.py +71 -1
  1213. vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py +115 -13
  1214. vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py +1 -1
  1215. vellum_ee/workflows/display/nodes/vellum/tests/test_search_node.py +104 -0
  1216. vellum_ee/workflows/display/nodes/vellum/tests/test_subworkflow_deployment_node.py +1 -1
  1217. vellum_ee/workflows/display/nodes/vellum/tests/test_templating_node.py +2 -2
  1218. vellum_ee/workflows/display/nodes/vellum/tests/test_tool_calling_node.py +526 -49
  1219. vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py +2 -2
  1220. vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py +8 -9
  1221. vellum_ee/workflows/display/nodes/vellum/try_node.py +5 -6
  1222. vellum_ee/workflows/display/tests/test_base_workflow_display.py +383 -9
  1223. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py +2 -2
  1224. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py +102 -39
  1225. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +233 -90
  1226. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py +21 -17
  1227. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py +76 -64
  1228. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py +69 -12
  1229. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py +68 -46
  1230. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py +92 -80
  1231. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py +193 -177
  1232. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py +14 -14
  1233. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py +14 -9
  1234. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py +28 -17
  1235. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py +20 -16
  1236. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py +386 -31
  1237. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py +59 -46
  1238. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +41 -32
  1239. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py +37 -33
  1240. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py +73 -61
  1241. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py +40 -36
  1242. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_set_state_node_serialization.py +86 -0
  1243. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py +25 -21
  1244. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py +22 -18
  1245. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py +13 -8
  1246. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_composio_serialization.py +87 -0
  1247. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py +313 -0
  1248. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_mcp_serialization.py +65 -0
  1249. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_parent_input.py +89 -0
  1250. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py +57 -23
  1251. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_vellum_integration_serialization.py +68 -0
  1252. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_workflow_deployment_serialization.py +107 -0
  1253. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py +2 -2
  1254. vellum_ee/workflows/display/tests/workflow_serialization/test_chat_message_dict_reference_serialization.py +108 -0
  1255. vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py +15 -10
  1256. vellum_ee/workflows/display/tests/workflow_serialization/test_final_output_node_map_reference_serialization.py +88 -0
  1257. vellum_ee/workflows/display/tests/workflow_serialization/test_integration_trigger_serialization.py +306 -0
  1258. vellum_ee/workflows/display/tests/workflow_serialization/test_integration_trigger_with_entrypoint_node_id.py +88 -0
  1259. vellum_ee/workflows/display/tests/workflow_serialization/test_list_vellum_document_serialization.py +65 -0
  1260. vellum_ee/workflows/display/tests/workflow_serialization/test_manual_trigger_serialization.py +110 -0
  1261. vellum_ee/workflows/display/tests/workflow_serialization/test_map_node_with_terminal_nodes_serialization.py +62 -0
  1262. vellum_ee/workflows/display/tests/workflow_serialization/test_multi_trigger_same_node_serialization.py +99 -0
  1263. vellum_ee/workflows/display/tests/workflow_serialization/test_scheduled_trigger_serialization.py +267 -0
  1264. vellum_ee/workflows/display/tests/workflow_serialization/test_terminal_node_any_serialization.py +49 -0
  1265. vellum_ee/workflows/display/tests/workflow_serialization/test_trigger_display_from_display_class.py +153 -0
  1266. vellum_ee/workflows/display/tests/workflow_serialization/test_web_search_node_serialization.py +72 -0
  1267. vellum_ee/workflows/display/tests/workflow_serialization/test_workflow_input_parameterization_error.py +37 -0
  1268. vellum_ee/workflows/display/types.py +29 -2
  1269. vellum_ee/workflows/display/utils/auto_layout.py +130 -0
  1270. vellum_ee/workflows/display/utils/events.py +57 -0
  1271. vellum_ee/workflows/display/utils/exceptions.py +19 -0
  1272. vellum_ee/workflows/display/utils/expressions.py +231 -28
  1273. vellum_ee/workflows/display/utils/metadata.py +146 -0
  1274. vellum_ee/workflows/display/utils/registry.py +46 -0
  1275. vellum_ee/workflows/display/utils/tests/__init__.py +0 -0
  1276. vellum_ee/workflows/display/utils/tests/test_auto_layout.py +56 -0
  1277. vellum_ee/workflows/display/utils/tests/test_events.py +185 -0
  1278. vellum_ee/workflows/display/utils/tests/test_expressions.py +92 -0
  1279. vellum_ee/workflows/display/utils/vellum.py +39 -4
  1280. vellum_ee/workflows/display/vellum.py +2 -128
  1281. vellum_ee/workflows/display/workflows/__init__.py +0 -1
  1282. vellum_ee/workflows/display/workflows/base_workflow_display.py +727 -95
  1283. vellum_ee/workflows/display/workflows/tests/test_workflow_display.py +318 -28
  1284. vellum_ee/workflows/server/virtual_file_loader.py +131 -6
  1285. vellum_ee/workflows/tests/local_workflow/display/nodes/final_output.py +1 -1
  1286. vellum_ee/workflows/tests/local_workflow/display/nodes/templating_node.py +1 -1
  1287. vellum_ee/workflows/tests/local_workflow/display/workflow.py +11 -14
  1288. vellum_ee/workflows/tests/test_display_meta.py +41 -0
  1289. vellum_ee/workflows/tests/test_registry.py +169 -0
  1290. vellum_ee/workflows/tests/test_serialize_module.py +265 -0
  1291. vellum_ee/workflows/tests/test_server.py +619 -44
  1292. vellum_ee/workflows/tests/test_virtual_files.py +48 -0
  1293. vellum/client/resources/release_reviews/client.py +0 -137
  1294. vellum/workflows/nodes/experimental/openai_chat_completion_node/__init__.py +0 -5
  1295. vellum/workflows/nodes/experimental/openai_chat_completion_node/node.py +0 -266
  1296. vellum/workflows/nodes/experimental/tool_calling_node/__init__.py +0 -3
  1297. vellum/workflows/nodes/experimental/tool_calling_node/node.py +0 -135
  1298. vellum/workflows/nodes/experimental/tool_calling_node/tests/test_node.py +0 -53
  1299. vellum/workflows/nodes/experimental/tool_calling_node/utils.py +0 -259
  1300. vellum_ai-0.14.63.dist-info/RECORD +0 -1719
  1301. vellum_ai-0.14.63.dist-info/entry_points.txt +0 -3
  1302. vellum_ee/workflows/display/workflows/vellum_workflow_display.py +0 -9
  1303. /vellum/{workflows/nodes/displayable/bases/inline_prompt_node → prompts}/constants.py +0 -0
  1304. {vellum_ai-0.14.63.dist-info → vellum_ai-1.11.2.dist-info}/LICENSE +0 -0
  1305. {vellum_ai-0.14.63.dist-info → vellum_ai-1.11.2.dist-info}/WHEEL +0 -0
@@ -17,6 +17,7 @@ from typing import (
17
17
  overload,
18
18
  )
19
19
 
20
+ from vellum.workflows.constants import undefined
20
21
  from vellum.workflows.context import ExecutionContext, execution_context, get_execution_context
21
22
  from vellum.workflows.descriptors.base import BaseDescriptor
22
23
  from vellum.workflows.errors.types import WorkflowErrorCode
@@ -27,9 +28,11 @@ from vellum.workflows.nodes.bases.base_adornment_node import BaseAdornmentNode
27
28
  from vellum.workflows.nodes.utils import create_adornment
28
29
  from vellum.workflows.outputs import BaseOutputs
29
30
  from vellum.workflows.outputs.base import BaseOutput
31
+ from vellum.workflows.references.node import NodeReference
30
32
  from vellum.workflows.references.output import OutputReference
31
33
  from vellum.workflows.state.context import WorkflowContext
32
34
  from vellum.workflows.types.generics import StateType
35
+ from vellum.workflows.utils.uuids import uuid4_from_hash
33
36
  from vellum.workflows.workflows.event_filters import all_workflow_event_filter
34
37
 
35
38
  if TYPE_CHECKING:
@@ -96,6 +99,7 @@ class MapNode(BaseAdornmentNode[StateType], Generic[StateType, MapNodeItemType])
96
99
  map_node_event = self._event_queue.get(block=False)
97
100
  index = map_node_event[0]
98
101
  subworkflow_event = map_node_event[1]
102
+
99
103
  self._context._emit_subworkflow_event(subworkflow_event)
100
104
 
101
105
  if not is_workflow_event(subworkflow_event):
@@ -207,8 +211,29 @@ class MapNode(BaseAdornmentNode[StateType], Generic[StateType, MapNodeItemType])
207
211
 
208
212
  @classmethod
209
213
  def __annotate_outputs_class__(cls, outputs_class: Type[BaseOutputs], reference: OutputReference) -> None:
210
- parameter_type = reference.types[0]
214
+ parameter_type = reference.types[0] if len(reference.types) > 0 else object
211
215
  annotation = List[parameter_type] # type: ignore[valid-type]
212
216
 
213
217
  previous_annotations = {prev: annotation for prev in outputs_class.__annotations__ if not prev.startswith("_")}
218
+ # Map node output is a list of the same type so we use annotation=List[parameter_type] and not reference
219
+ # class Outputs(BaseOutputs):
220
+ # value: List[str]
214
221
  outputs_class.__annotations__ = {**previous_annotations, reference.name: annotation}
222
+
223
+ # Create a NEW OutputReference with the List-wrapped type for discoverability during iteration
224
+ map_output_reference = OutputReference(
225
+ name=reference.name,
226
+ types=(annotation,),
227
+ instance=undefined,
228
+ outputs_class=outputs_class,
229
+ )
230
+ setattr(outputs_class, reference.name, map_output_reference)
231
+
232
+ subworkflow_class = cls.subworkflow.instance if isinstance(cls.subworkflow, NodeReference) else None
233
+ if subworkflow_class:
234
+ output_id = subworkflow_class.__output_ids__.get(reference.name) or uuid4_from_hash(
235
+ f"{cls.__id__}|{reference.name}"
236
+ )
237
+ else:
238
+ output_id = uuid4_from_hash(f"{cls.__id__}|{reference.name}")
239
+ cls.__output_ids__[reference.name] = output_id
@@ -3,6 +3,7 @@ import threading
3
3
  import time
4
4
 
5
5
  from vellum.workflows.inputs.base import BaseInputs
6
+ from vellum.workflows.nodes import FinalOutputNode
6
7
  from vellum.workflows.nodes.bases import BaseNode
7
8
  from vellum.workflows.nodes.core.map_node.node import MapNode
8
9
  from vellum.workflows.nodes.core.try_node.node import TryNode
@@ -118,6 +119,7 @@ def test_map_node__inner_try():
118
119
  # THEN the workflow should succeed
119
120
  assert outputs[-1].name == "final_output"
120
121
  assert len(outputs[-1].value) == 2
122
+ assert len(SimpleMapNode.__output_ids__) == 1
121
123
 
122
124
 
123
125
  def test_map_node__nested_map_node():
@@ -221,3 +223,74 @@ def test_map_node_parallel_execution_with_workflow():
221
223
  # AND each item should have run on a different thread
222
224
  thread_ids_list = list(thread_ids.values())
223
225
  assert len(set(thread_ids_list)) == 3
226
+
227
+
228
+ def test_map_node__shared_state_race_condition():
229
+ processed_items = []
230
+
231
+ # GIVEN a templating node that processes items
232
+ class TemplatingNode(BaseNode):
233
+ item = MapNode.SubworkflowInputs.item
234
+
235
+ class Outputs(BaseOutputs):
236
+ processed_item: str
237
+
238
+ def run(self) -> Outputs:
239
+ processed_item = f"{self.item}!"
240
+ return self.Outputs(processed_item=processed_item)
241
+
242
+ # AND a final output node
243
+ class FinalOutput(FinalOutputNode[BaseState, str]):
244
+ class Outputs(FinalOutputNode.Outputs):
245
+ value = TemplatingNode.Outputs.processed_item
246
+
247
+ def run(self) -> Outputs:
248
+ outputs = super().run()
249
+ processed_items.append(outputs.value)
250
+ return outputs # type: ignore[return-value]
251
+
252
+ # AND a workflow using those nodes
253
+ class ProcessItemWorkflow(BaseWorkflow[MapNode.SubworkflowInputs, BaseState]):
254
+ graph = TemplatingNode >> FinalOutput
255
+
256
+ class Outputs(BaseWorkflow.Outputs):
257
+ result = FinalOutput.Outputs.value
258
+
259
+ # AND a map node with high concurrency
260
+ class RaceConditionMapNode(MapNode):
261
+ items = ["a", "b", "c", "d", "e", "f"]
262
+ subworkflow = ProcessItemWorkflow
263
+ max_concurrency = 1
264
+
265
+ # WHEN we run the map node multiple times to see pass consistently
266
+ num_runs = 50
267
+ for index in range(num_runs):
268
+ processed_items.clear()
269
+ node = RaceConditionMapNode(state=BaseState())
270
+ outputs = list(node.run())
271
+ final_result = outputs[-1].value
272
+
273
+ # THEN the state is unique among each run
274
+ assert len(set(processed_items)) == 6
275
+
276
+ # AND all results should be in correct order
277
+ expected_result = ["a!", "b!", "c!", "d!", "e!", "f!"]
278
+ assert final_result == expected_result, f"Failed on run {index}"
279
+
280
+
281
+ def test_map_node__output_ids():
282
+ class TestNode(BaseNode):
283
+ class Outputs(BaseOutputs):
284
+ value: str
285
+
286
+ class SimpleMapNodeWorkflow(BaseWorkflow[MapNode.SubworkflowInputs, BaseState]):
287
+ graph = TestNode
288
+
289
+ class Outputs(BaseWorkflow.Outputs):
290
+ final_output = TestNode.Outputs.value
291
+
292
+ class TestMapNode(MapNode):
293
+ items = [1, 2, 3]
294
+ subworkflow = SimpleMapNodeWorkflow
295
+
296
+ assert len(TestMapNode.__output_ids__) == 1
@@ -6,7 +6,6 @@ from vellum.workflows.inputs.base import BaseInputs
6
6
  from vellum.workflows.nodes.bases import BaseNode
7
7
  from vellum.workflows.nodes.core.retry_node.node import RetryNode
8
8
  from vellum.workflows.outputs import BaseOutputs
9
- from vellum.workflows.references.lazy import LazyReference
10
9
  from vellum.workflows.state.base import BaseState, StateMeta
11
10
 
12
11
 
@@ -44,7 +43,7 @@ def test_retry_node__retry_on_error_code__missed():
44
43
 
45
44
  def run(self) -> Outputs:
46
45
  if self.attempt_number < 3:
47
- raise Exception("This will not be retried")
46
+ raise NodeException(message="This will not be retried", code=WorkflowErrorCode.INTERNAL_ERROR)
48
47
 
49
48
  return self.Outputs(execution_count=self.attempt_number)
50
49
 
@@ -102,7 +101,7 @@ def test_retry_node__condition_arg_successfully_retries():
102
101
  # AND a retry node that retries on a condition
103
102
  @RetryNode.wrap(
104
103
  max_attempts=5,
105
- retry_on_condition=LazyReference(lambda: State.count.less_than(3)),
104
+ retry_on_condition=State.count.less_than(3),
106
105
  )
107
106
  class TestNode(BaseNode[State]):
108
107
  attempt_number = RetryNode.SubworkflowInputs.attempt_number
@@ -7,7 +7,7 @@ from vellum.workflows.errors import WorkflowErrorCode
7
7
  from vellum.workflows.exceptions import NodeException
8
8
  from vellum.workflows.nodes.bases import BaseNode
9
9
  from vellum.workflows.nodes.bases.base import BaseNodeMeta
10
- from vellum.workflows.nodes.utils import parse_type_from_str
10
+ from vellum.workflows.nodes.utils import parse_type_from_str, wrap_inputs_for_backward_compatibility
11
11
  from vellum.workflows.types.core import EntityInputsInterface
12
12
  from vellum.workflows.types.generics import StateType
13
13
  from vellum.workflows.types.utils import get_original_base
@@ -47,6 +47,10 @@ class TemplatingNode(BaseNode[StateType], Generic[StateType, _OutputType], metac
47
47
  Useful for lightweight data transformations and complex string templating.
48
48
  """
49
49
 
50
+ class Display(BaseNode.Display):
51
+ icon = "vellum:icon:stamp"
52
+ color = "brown"
53
+
50
54
  # The Jinja template to render.
51
55
  template: ClassVar[str] = ""
52
56
 
@@ -86,9 +90,10 @@ class TemplatingNode(BaseNode[StateType], Generic[StateType, _OutputType], metac
86
90
 
87
91
  def _render_template(self) -> str:
88
92
  try:
93
+ wrapped_inputs = wrap_inputs_for_backward_compatibility(self.inputs)
89
94
  return render_sandboxed_jinja_template(
90
95
  template=self.template,
91
- input_values=self.inputs,
96
+ input_values=wrapped_inputs,
92
97
  jinja_custom_filters={**self.jinja_custom_filters},
93
98
  jinja_globals=self.jinja_globals,
94
99
  )
@@ -1,6 +1,6 @@
1
1
  import pytest
2
2
  import json
3
- from typing import List, Union
3
+ from typing import Any, Dict, List, Union
4
4
 
5
5
  from vellum.client.types.chat_message import ChatMessage
6
6
  from vellum.client.types.function_call import FunctionCall
@@ -32,6 +32,54 @@ def test_templating_node__dict_output():
32
32
  assert json.loads(dump) == {"key": "value"}
33
33
 
34
34
 
35
+ def test_templating_node__dict_type_output():
36
+ """Tests that TemplatingNode correctly parses dict outputs when using dict type annotation."""
37
+
38
+ # GIVEN a templating node with dict output type that returns a dict
39
+ class DictTemplateNode(TemplatingNode[BaseState, dict]):
40
+ template = "{{ data }}"
41
+ inputs = {"data": {"key": "value"}}
42
+
43
+ # WHEN the node is run
44
+ node = DictTemplateNode()
45
+ outputs = node.run()
46
+
47
+ # THEN the output is the expected dict
48
+ assert outputs.result == {"key": "value"}
49
+
50
+
51
+ def test_templating_node__any_type_output():
52
+ """Tests that TemplatingNode correctly parses dict outputs when using Any type annotation."""
53
+
54
+ # GIVEN a templating node with Any output type that returns a dict
55
+ class AnyTemplateNode(TemplatingNode[BaseState, Any]):
56
+ template = "{{ data }}"
57
+ inputs = {"data": {"key": "value"}}
58
+
59
+ # WHEN the node is run
60
+ node = AnyTemplateNode()
61
+ outputs = node.run()
62
+
63
+ # THEN the output is the expected dict
64
+ assert outputs.result == {"key": "value"}
65
+
66
+
67
+ def test_templating_node__dict_str_any_type_output():
68
+ """Tests that TemplatingNode correctly parses dict outputs when using Dict[str, Any] type annotation."""
69
+
70
+ # GIVEN a templating node with Dict[str, Any] output type that returns a dict
71
+ class DictStrAnyTemplateNode(TemplatingNode[BaseState, Dict[str, Any]]):
72
+ template = "{{ data }}"
73
+ inputs = {"data": {"key": "value"}}
74
+
75
+ # WHEN the node is run
76
+ node = DictStrAnyTemplateNode()
77
+ outputs = node.run()
78
+
79
+ # THEN the output is the expected dict
80
+ assert outputs.result == {"key": "value"}
81
+
82
+
35
83
  def test_templating_node__int_output():
36
84
  # GIVEN a templating node that outputs an integer
37
85
  class IntTemplateNode(TemplatingNode[BaseState, int]):
@@ -317,3 +365,148 @@ def test_api_error_templating_node():
317
365
 
318
366
  # THEN the output should be empty string
319
367
  assert outputs.result == ""
368
+
369
+
370
+ @pytest.mark.parametrize(
371
+ "template,inputs,expected_result",
372
+ [
373
+ # String value access
374
+ ("{{ text_input.value }}", {"text_input": "hello world"}, "hello world"),
375
+ # Function call value access
376
+ (
377
+ "{{ func.value.name }}",
378
+ {"func": FunctionCall(name="test_function", arguments={"key": "value"})},
379
+ "test_function",
380
+ ),
381
+ # Array item value access
382
+ ("{{ items[0].value }}", {"items": ["apple"]}, "apple"),
383
+ ],
384
+ ids=["string_value", "function_call_value", "array_item_value"],
385
+ )
386
+ def test_templating_node__value_access_patterns_str(template, inputs, expected_result):
387
+ # GIVEN a templating node that accesses wrapper value properties
388
+ class TemplateNode(TemplatingNode[BaseState, str]):
389
+ pass
390
+
391
+ # Set template and inputs dynamically
392
+ TemplateNode.template = template
393
+ TemplateNode.inputs = inputs
394
+
395
+ # WHEN the node is run
396
+ node = TemplateNode()
397
+ outputs = node.run()
398
+
399
+ # THEN the value is accessible
400
+ assert outputs.result == expected_result
401
+
402
+
403
+ @pytest.mark.parametrize(
404
+ "template,inputs,expected_result",
405
+ [
406
+ # Dict value access
407
+ ("{{ data.value }}", {"data": {"name": "test", "score": 42}}, {"name": "test", "score": 42}),
408
+ # List value access
409
+ ("{{ items.value }}", {"items": ["item1", "item2", "item3"]}, ["item1", "item2", "item3"]),
410
+ ],
411
+ ids=["dict_value", "list_value"],
412
+ )
413
+ def test_templating_node__value_access_patterns_json(template, inputs, expected_result):
414
+ # GIVEN a templating node that accesses wrapper value properties
415
+ class TemplateNode(TemplatingNode[BaseState, Json]):
416
+ pass
417
+
418
+ # Set template and inputs dynamically
419
+ TemplateNode.template = template
420
+ TemplateNode.inputs = inputs
421
+
422
+ # WHEN the node is run
423
+ node = TemplateNode()
424
+ outputs = node.run()
425
+
426
+ # THEN the value is accessible
427
+ assert outputs.result == expected_result
428
+
429
+
430
+ @pytest.mark.parametrize(
431
+ "template,inputs,expected_result",
432
+ [
433
+ # String type access
434
+ ("{{ text_input.type }}", {"text_input": "hello world"}, "STRING"),
435
+ # Function call type access
436
+ ("{{ func.type }}", {"func": FunctionCall(name="test_function", arguments={"key": "value"})}, "FUNCTION_CALL"),
437
+ ],
438
+ ids=["string_type", "function_call_type"],
439
+ )
440
+ def test_templating_node__type_access_patterns(template, inputs, expected_result):
441
+ # GIVEN a templating node that accesses wrapper type properties
442
+ class TemplateNode(TemplatingNode[BaseState, str]):
443
+ pass
444
+
445
+ # Set template and inputs dynamically
446
+ TemplateNode.template = template
447
+ TemplateNode.inputs = inputs
448
+
449
+ # WHEN the node is run
450
+ node = TemplateNode()
451
+ outputs = node.run()
452
+
453
+ # THEN the type is accessible
454
+ assert outputs.result == expected_result
455
+
456
+
457
+ def test_templating_node__nested_dict_access():
458
+ # GIVEN a templating node with nested dict access
459
+ class TemplateNode(TemplatingNode[BaseState, str]):
460
+ template = "{{ data.user.name }}"
461
+ inputs = {"data": {"user": {"name": "John Doe", "age": 30}, "status": "active"}}
462
+
463
+ # WHEN the node is run
464
+ node = TemplateNode()
465
+ outputs = node.run()
466
+
467
+ # THEN nested properties are accessible
468
+ assert outputs.result == "John Doe"
469
+
470
+
471
+ def test_templating_node__list_iteration_wrapper_access():
472
+ # GIVEN a templating node that iterates over list with wrapper access
473
+ class TemplateNode(TemplatingNode[BaseState, str]):
474
+ template = "{% for item in items %}{{ item.value }}{% if not loop.last %},{% endif %}{% endfor %}"
475
+ inputs = {"items": ["apple", "banana", "cherry"]}
476
+
477
+ # WHEN the node is run
478
+ node = TemplateNode()
479
+ outputs = node.run()
480
+
481
+ # THEN list iteration with wrapper access works
482
+ assert outputs.result == "apple,banana,cherry"
483
+
484
+
485
+ def test_templating_node__conditional_type_checking():
486
+ # GIVEN a templating node with conditional type checking
487
+ class TemplateNode(TemplatingNode[BaseState, str]):
488
+ template = "{% if input.type == 'STRING' %}{{ input.value }}{% else %}unknown{% endif %}"
489
+ inputs = {"input": "test string"}
490
+
491
+ # WHEN the node is run
492
+ node = TemplateNode()
493
+ outputs = node.run()
494
+
495
+ # THEN conditional type checking works
496
+ assert outputs.result == "test string"
497
+
498
+
499
+ def test_templating_node__dict_wrapper_nonexistent_attribute_is_none():
500
+ """Test that non-existent attributes on DictWrapper evaluate to None."""
501
+
502
+ # GIVEN a templating node with nonexistent attr in the template
503
+ class TemplateNode(TemplatingNode[BaseState, str]):
504
+ template = "{% if data.nonexistent_attr is none %}none_value{% else %}{{ data.nonexistent_attr }}{% endif %}"
505
+ inputs = {"data": {"existing_key": "existing_value"}}
506
+
507
+ # WHEN the node is run
508
+ node = TemplateNode()
509
+ outputs = node.run()
510
+
511
+ # THEN it should recognize the non-existent attribute as ""
512
+ assert outputs.result == ""
@@ -12,7 +12,10 @@ from .merge_node import MergeNode
12
12
  from .note_node import NoteNode
13
13
  from .prompt_deployment_node import PromptDeploymentNode
14
14
  from .search_node import SearchNode
15
+ from .set_state_node import SetStateNode
15
16
  from .subworkflow_deployment_node import SubworkflowDeploymentNode
17
+ from .tool_calling_node import ToolCallingNode
18
+ from .web_search_node import WebSearchNode
16
19
 
17
20
  __all__ = [
18
21
  "APINode",
@@ -28,6 +31,9 @@ __all__ = [
28
31
  "SubworkflowDeploymentNode",
29
32
  "PromptDeploymentNode",
30
33
  "SearchNode",
34
+ "SetStateNode",
31
35
  "TemplatingNode",
36
+ "ToolCallingNode",
37
+ "WebSearchNode",
32
38
  "FinalOutputNode",
33
39
  ]
@@ -22,6 +22,10 @@ class APINode(BaseAPINode):
22
22
  for the bearer token authorization.
23
23
  """
24
24
 
25
+ class Display(BaseAPINode.Display):
26
+ icon = "vellum:icon:signal-stream"
27
+ color = "lightBlue"
28
+
25
29
  authorization_type: Optional[AuthorizationType] = None
26
30
  api_key_header_key: Optional[str] = None
27
31
  api_key_header_value: Optional[Union[str, VellumSecret]] = None
@@ -31,6 +35,8 @@ class APINode(BaseAPINode):
31
35
  merge_behavior = MergeBehavior.AWAIT_ANY
32
36
 
33
37
  def run(self) -> BaseAPINode.Outputs:
38
+ self._validate()
39
+
34
40
  headers = self.headers or {}
35
41
  header_overrides = {}
36
42
  bearer_token = None
@@ -51,7 +57,9 @@ class APINode(BaseAPINode):
51
57
  final_headers = {**headers, **header_overrides}
52
58
 
53
59
  vellum_client_wrapper = self._context.vellum_client._client_wrapper
54
- if self.url.startswith(vellum_client_wrapper._environment.default) and "X-API-Key" not in final_headers:
60
+ if self.url.startswith(vellum_client_wrapper._environment.default) and (
61
+ "X-API-Key" not in final_headers and "X_API_KEY" not in final_headers
62
+ ):
55
63
  final_headers["X-API-Key"] = vellum_client_wrapper.api_key
56
64
 
57
65
  return self._run(
@@ -61,4 +69,5 @@ class APINode(BaseAPINode):
61
69
  json=self.json,
62
70
  headers=final_headers,
63
71
  bearer_token=bearer_token,
72
+ timeout=self.timeout,
64
73
  )
@@ -3,6 +3,7 @@ import pytest
3
3
  from vellum import ExecuteApiResponse, VellumSecret as ClientVellumSecret
4
4
  from vellum.client.core.api_error import ApiError
5
5
  from vellum.workflows.constants import APIRequestMethod, AuthorizationType
6
+ from vellum.workflows.errors.types import WorkflowErrorCode
6
7
  from vellum.workflows.exceptions import NodeException
7
8
  from vellum.workflows.nodes import APINode
8
9
  from vellum.workflows.types.core import VellumSecret
@@ -15,6 +16,7 @@ def test_run_workflow__secrets(vellum_client):
15
16
  json_={"data": [1, 2, 3]},
16
17
  headers={"X-Response-Header": "bar"},
17
18
  )
19
+ vellum_client._client_wrapper.get_headers.return_value = {"User-Agent": "vellum-ai/1.0.6"}
18
20
 
19
21
  class SimpleBaseAPINode(APINode):
20
22
  method = APIRequestMethod.POST
@@ -34,7 +36,9 @@ def test_run_workflow__secrets(vellum_client):
34
36
  assert vellum_client.execute_api.call_count == 1
35
37
  assert vellum_client.execute_api.call_args.kwargs["url"] == "https://example.vellum.ai"
36
38
  assert vellum_client.execute_api.call_args.kwargs["body"] == {"key": "value"}
37
- assert vellum_client.execute_api.call_args.kwargs["headers"] == {"X-Test-Header": "foo"}
39
+ headers = vellum_client.execute_api.call_args.kwargs["headers"]
40
+ assert headers["X-Test-Header"] == "foo"
41
+ assert "vellum-ai" in headers.get("User-Agent", "")
38
42
  bearer_token = vellum_client.execute_api.call_args.kwargs["bearer_token"]
39
43
  assert bearer_token == ClientVellumSecret(name="secret")
40
44
  assert terminal.headers == {"X-Response-Header": "bar"}
@@ -43,6 +47,7 @@ def test_run_workflow__secrets(vellum_client):
43
47
  def test_api_node_raises_error_when_api_call_fails(vellum_client):
44
48
  # GIVEN an API call that fails
45
49
  vellum_client.execute_api.side_effect = ApiError(status_code=400, body="API Error")
50
+ vellum_client._client_wrapper.get_headers.return_value = {"User-Agent": "vellum-ai/1.0.6"}
46
51
 
47
52
  class SimpleAPINode(APINode):
48
53
  method = APIRequestMethod.GET
@@ -69,7 +74,9 @@ def test_api_node_raises_error_when_api_call_fails(vellum_client):
69
74
  assert vellum_client.execute_api.call_count == 1
70
75
  assert vellum_client.execute_api.call_args.kwargs["url"] == "https://example.vellum.ai"
71
76
  assert vellum_client.execute_api.call_args.kwargs["body"] == {"key": "value"}
72
- assert vellum_client.execute_api.call_args.kwargs["headers"] == {"X-Test-Header": "foo"}
77
+ headers = vellum_client.execute_api.call_args.kwargs["headers"]
78
+ assert headers["X-Test-Header"] == "foo"
79
+ assert "vellum-ai" in headers.get("User-Agent", "")
73
80
 
74
81
 
75
82
  def test_api_node_defaults_to_get_method(vellum_client):
@@ -158,3 +165,107 @@ def test_api_node__detects_client_environment_urls__does_not_override_headers(
158
165
  # AND the vellum API should have been called with the correct headers
159
166
  assert mock_response.last_request
160
167
  assert mock_response.last_request.headers["X-API-Key"] == "vellum-api-key-5678"
168
+
169
+
170
+ def test_api_node__detects_client_environment_urls__legacy_does_not_override_headers(
171
+ mock_httpx_transport, mock_requests, monkeypatch
172
+ ):
173
+ # GIVEN an API node with a URL pointing back to Vellum
174
+ class SimpleAPINodeToVellum(APINode):
175
+ url = "https://api.vellum.ai"
176
+ headers = {
177
+ "X_API_KEY": "vellum-api-key-5678",
178
+ }
179
+
180
+ # AND a mock request sent to the Vellum API would return a 200
181
+ mock_response = mock_requests.get(
182
+ "https://api.vellum.ai",
183
+ status_code=200,
184
+ json={"data": [1, 2, 3]},
185
+ )
186
+
187
+ # AND an api key is set
188
+ monkeypatch.setenv("VELLUM_API_KEY", "vellum-api-key-1234")
189
+
190
+ # WHEN we run the node
191
+ node = SimpleAPINodeToVellum()
192
+ node.run()
193
+
194
+ # THEN the execute_api method should not have been called
195
+ mock_httpx_transport.handle_request.assert_not_called()
196
+
197
+ # AND the vellum API should have been called with the correct headers
198
+ assert mock_response.last_request
199
+ assert mock_response.last_request.headers["X_API_KEY"] == "vellum-api-key-5678"
200
+
201
+
202
+ def test_api_node_raises_error_for_empty_url():
203
+ class APINodeWithEmptyURL(APINode):
204
+ method = APIRequestMethod.GET
205
+ url = ""
206
+
207
+ node = APINodeWithEmptyURL()
208
+
209
+ with pytest.raises(NodeException) as excinfo:
210
+ node.run()
211
+
212
+ assert excinfo.value.code == WorkflowErrorCode.INVALID_INPUTS
213
+ assert "URL is required and must be a non-empty string" in str(excinfo.value)
214
+
215
+
216
+ def test_api_node_raises_error_for_none_url():
217
+ class APINodeWithNoneURL(APINode):
218
+ method = APIRequestMethod.GET
219
+ url = None # type: ignore
220
+
221
+ node = APINodeWithNoneURL()
222
+
223
+ with pytest.raises(NodeException) as excinfo:
224
+ node.run()
225
+
226
+ assert excinfo.value.code == WorkflowErrorCode.INVALID_INPUTS
227
+ assert "URL is required and must be a non-empty string" in str(excinfo.value)
228
+
229
+
230
+ def test_api_node_raises_error_for_whitespace_url():
231
+ class APINodeWithWhitespaceURL(APINode):
232
+ method = APIRequestMethod.GET
233
+ url = " "
234
+
235
+ node = APINodeWithWhitespaceURL()
236
+
237
+ with pytest.raises(NodeException) as excinfo:
238
+ node.run()
239
+
240
+ assert excinfo.value.code == WorkflowErrorCode.INVALID_INPUTS
241
+ assert "URL is required and must be a non-empty string" in str(excinfo.value)
242
+
243
+
244
+ def test_api_node_passes_timeout_to_vellum_client(vellum_client):
245
+ """Test that timeout is passed to vellum client as RequestOptions."""
246
+ vellum_client.execute_api.return_value = ExecuteApiResponse(
247
+ status_code=200,
248
+ text='{"result": "success"}',
249
+ json_={"result": "success"},
250
+ headers={"content-type": "application/json"},
251
+ )
252
+
253
+ # GIVEN an API node configured with a timeout value of 25 seconds
254
+ class APINodeWithTimeout(APINode):
255
+ method = APIRequestMethod.GET
256
+ authorization_type = AuthorizationType.BEARER_TOKEN
257
+ url = "https://example.com"
258
+ timeout = 25
259
+ bearer_token_value = VellumSecret(name="secret")
260
+
261
+ # WHEN the API node is executed
262
+ node = APINodeWithTimeout()
263
+ node.run()
264
+
265
+ # THEN the vellum client should be called exactly once
266
+ assert vellum_client.execute_api.call_count == 1
267
+ call_args = vellum_client.execute_api.call_args
268
+ request_options = call_args.kwargs["request_options"]
269
+ # AND the call should include RequestOptions with the correct timeout
270
+ assert request_options is not None
271
+ assert request_options["timeout_in_seconds"] == 25