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.
- vellum/__init__.py +269 -4
- vellum/client/README.md +68 -15
- vellum/client/__init__.py +598 -1437
- vellum/client/core/__init__.py +5 -0
- vellum/client/core/api_error.py +13 -5
- vellum/client/core/client_wrapper.py +30 -4
- vellum/client/core/force_multipart.py +16 -0
- vellum/client/core/http_client.py +70 -26
- vellum/client/core/http_response.py +55 -0
- vellum/client/core/jsonable_encoder.py +0 -1
- vellum/client/core/pydantic_utilities.py +87 -117
- vellum/client/core/serialization.py +7 -3
- vellum/client/errors/__init__.py +14 -1
- vellum/client/errors/bad_request_error.py +4 -3
- vellum/client/errors/forbidden_error.py +4 -3
- vellum/client/errors/internal_server_error.py +4 -3
- vellum/client/errors/misdirected_request_error.py +11 -0
- vellum/client/errors/not_found_error.py +4 -3
- vellum/client/errors/too_many_requests_error.py +11 -0
- vellum/client/errors/unauthorized_error.py +11 -0
- vellum/client/raw_client.py +2725 -0
- vellum/client/reference.md +1980 -638
- vellum/client/resources/__init__.py +16 -2
- vellum/client/resources/ad_hoc/__init__.py +2 -0
- vellum/client/resources/ad_hoc/client.py +173 -377
- vellum/client/resources/ad_hoc/raw_client.py +569 -0
- vellum/client/resources/container_images/__init__.py +2 -0
- vellum/client/resources/container_images/client.py +72 -191
- vellum/client/resources/container_images/raw_client.py +407 -0
- vellum/client/resources/deployments/__init__.py +2 -0
- vellum/client/resources/deployments/client.py +119 -463
- vellum/client/resources/deployments/raw_client.py +1002 -0
- vellum/client/resources/deployments/types/__init__.py +2 -0
- vellum/client/resources/document_indexes/__init__.py +2 -0
- vellum/client/resources/document_indexes/client.py +131 -383
- vellum/client/resources/document_indexes/raw_client.py +866 -0
- vellum/client/resources/document_indexes/types/__init__.py +2 -0
- vellum/client/resources/documents/__init__.py +2 -0
- vellum/client/resources/documents/client.py +93 -325
- vellum/client/resources/documents/raw_client.py +662 -0
- vellum/client/resources/{release_reviews → environments}/__init__.py +2 -0
- vellum/client/resources/environments/client.py +106 -0
- vellum/client/resources/environments/raw_client.py +95 -0
- vellum/client/resources/events/__init__.py +4 -0
- vellum/client/resources/events/client.py +201 -0
- vellum/client/resources/events/raw_client.py +211 -0
- vellum/client/resources/folder_entities/__init__.py +2 -0
- vellum/client/resources/folder_entities/client.py +56 -95
- vellum/client/resources/folder_entities/raw_client.py +276 -0
- vellum/client/resources/folder_entities/types/__init__.py +2 -0
- vellum/client/resources/integration_auth_configs/__init__.py +4 -0
- vellum/client/resources/integration_auth_configs/client.py +186 -0
- vellum/client/resources/integration_auth_configs/raw_client.py +171 -0
- vellum/client/resources/integration_providers/__init__.py +4 -0
- vellum/client/resources/integration_providers/client.py +299 -0
- vellum/client/resources/integration_providers/raw_client.py +275 -0
- vellum/client/resources/integrations/__init__.py +4 -0
- vellum/client/resources/integrations/client.py +466 -0
- vellum/client/resources/integrations/raw_client.py +557 -0
- vellum/client/resources/metric_definitions/__init__.py +2 -0
- vellum/client/resources/metric_definitions/client.py +60 -106
- vellum/client/resources/metric_definitions/raw_client.py +224 -0
- vellum/client/resources/ml_models/__init__.py +2 -0
- vellum/client/resources/ml_models/client.py +37 -46
- vellum/client/resources/ml_models/raw_client.py +102 -0
- vellum/client/resources/organizations/__init__.py +2 -0
- vellum/client/resources/organizations/client.py +37 -45
- vellum/client/resources/organizations/raw_client.py +95 -0
- vellum/client/resources/prompts/__init__.py +2 -0
- vellum/client/resources/prompts/client.py +84 -202
- vellum/client/resources/prompts/raw_client.py +353 -0
- vellum/client/resources/sandboxes/__init__.py +2 -0
- vellum/client/resources/sandboxes/client.py +69 -159
- vellum/client/resources/sandboxes/raw_client.py +392 -0
- vellum/client/resources/test_suite_runs/__init__.py +2 -0
- vellum/client/resources/test_suite_runs/client.py +65 -157
- vellum/client/resources/test_suite_runs/raw_client.py +354 -0
- vellum/client/resources/test_suites/__init__.py +2 -0
- vellum/client/resources/test_suites/client.py +162 -266
- vellum/client/resources/test_suites/raw_client.py +530 -0
- vellum/client/resources/uploaded_files/__init__.py +4 -0
- vellum/client/resources/uploaded_files/client.py +230 -0
- vellum/client/resources/uploaded_files/raw_client.py +316 -0
- vellum/client/resources/workflow_deployments/__init__.py +2 -0
- vellum/client/resources/workflow_deployments/client.py +302 -353
- vellum/client/resources/workflow_deployments/raw_client.py +1059 -0
- vellum/client/resources/workflow_deployments/types/__init__.py +2 -0
- vellum/client/resources/workflow_executions/__init__.py +4 -0
- vellum/client/resources/workflow_executions/client.py +140 -0
- vellum/client/resources/workflow_executions/raw_client.py +173 -0
- vellum/client/resources/workflow_sandboxes/__init__.py +2 -0
- vellum/client/resources/workflow_sandboxes/client.py +58 -123
- vellum/client/resources/workflow_sandboxes/raw_client.py +291 -0
- vellum/client/resources/workflow_sandboxes/types/__init__.py +2 -0
- vellum/client/resources/workflows/__init__.py +2 -0
- vellum/client/resources/workflows/client.py +256 -141
- vellum/client/resources/workflows/raw_client.py +547 -0
- vellum/client/resources/workspace_secrets/__init__.py +2 -0
- vellum/client/resources/workspace_secrets/client.py +43 -100
- vellum/client/resources/workspace_secrets/raw_client.py +219 -0
- vellum/client/resources/workspaces/__init__.py +2 -0
- vellum/client/resources/workspaces/client.py +37 -45
- vellum/client/resources/workspaces/raw_client.py +95 -0
- vellum/client/tests/__init__.py +0 -0
- vellum/client/tests/test_utils.py +34 -0
- vellum/client/types/__init__.py +242 -0
- vellum/client/types/ad_hoc_execute_prompt_event.py +3 -2
- vellum/client/types/ad_hoc_expand_meta.py +2 -2
- vellum/client/types/ad_hoc_fulfilled_prompt_execution_meta.py +3 -3
- vellum/client/types/ad_hoc_initiated_prompt_execution_meta.py +2 -2
- vellum/client/types/ad_hoc_rejected_prompt_execution_meta.py +3 -3
- vellum/client/types/ad_hoc_streaming_prompt_execution_meta.py +2 -2
- vellum/client/types/api_actor_type_enum.py +7 -0
- vellum/client/types/api_node_result.py +3 -3
- vellum/client/types/api_node_result_data.py +4 -4
- vellum/client/types/api_request_parent_context.py +17 -10
- vellum/client/types/api_version_enum.py +1 -1
- vellum/client/types/array_chat_message_content.py +3 -3
- vellum/client/types/array_chat_message_content_item.py +7 -4
- vellum/client/types/array_chat_message_content_item_request.py +7 -4
- vellum/client/types/array_chat_message_content_request.py +3 -3
- vellum/client/types/array_input.py +12 -6
- vellum/client/types/array_vellum_value.py +4 -4
- vellum/client/types/array_vellum_value_request.py +4 -4
- vellum/client/types/audio_chat_message_content.py +3 -3
- vellum/client/types/audio_chat_message_content_request.py +3 -3
- vellum/client/types/audio_input.py +30 -0
- vellum/client/types/audio_input_request.py +30 -0
- vellum/client/types/audio_prompt_block.py +4 -4
- vellum/client/types/audio_vellum_value.py +3 -3
- vellum/client/types/audio_vellum_value_request.py +3 -3
- vellum/client/types/auth_type_enum.py +5 -0
- vellum/client/types/base_output.py +4 -4
- vellum/client/types/basic_vectorizer_intfloat_multilingual_e_5_large.py +2 -2
- vellum/client/types/basic_vectorizer_intfloat_multilingual_e_5_large_request.py +2 -2
- vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_cos_v_1.py +2 -2
- vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_cos_v_1_request.py +2 -2
- vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_dot_v_1.py +2 -2
- vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_dot_v_1_request.py +2 -2
- vellum/client/types/build_status_enum.py +5 -0
- vellum/client/types/chat_history_input.py +3 -3
- vellum/client/types/chat_history_input_request.py +3 -3
- vellum/client/types/chat_history_vellum_value.py +3 -3
- vellum/client/types/chat_history_vellum_value_request.py +3 -3
- vellum/client/types/chat_message.py +4 -4
- vellum/client/types/chat_message_content.py +7 -4
- vellum/client/types/chat_message_content_request.py +7 -4
- vellum/client/types/chat_message_prompt_block.py +7 -7
- vellum/client/types/chat_message_request.py +4 -4
- vellum/client/types/code_execution_node_array_result.py +11 -5
- vellum/client/types/code_execution_node_chat_history_result.py +3 -3
- vellum/client/types/code_execution_node_error_result.py +3 -3
- vellum/client/types/code_execution_node_function_call_result.py +3 -3
- vellum/client/types/code_execution_node_json_result.py +2 -2
- vellum/client/types/code_execution_node_number_result.py +2 -2
- vellum/client/types/code_execution_node_result.py +10 -4
- vellum/client/types/code_execution_node_result_data.py +10 -4
- vellum/client/types/code_execution_node_result_output.py +6 -5
- vellum/client/types/code_execution_node_search_results_result.py +3 -3
- vellum/client/types/code_execution_node_string_result.py +2 -2
- vellum/client/types/code_execution_package.py +3 -2
- vellum/client/types/code_executor_input.py +15 -6
- vellum/client/types/code_executor_response.py +11 -5
- vellum/client/types/code_executor_secret_input.py +3 -3
- vellum/client/types/code_resource_definition.py +3 -3
- vellum/client/types/compile_prompt_deployment_expand_meta_request.py +2 -2
- vellum/client/types/compile_prompt_meta.py +2 -2
- vellum/client/types/components_schemas_composio_execute_tool_request.py +5 -0
- vellum/client/types/components_schemas_composio_execute_tool_response.py +5 -0
- vellum/client/types/components_schemas_composio_integration_exec_config.py +5 -0
- vellum/client/types/components_schemas_composio_tool_definition.py +5 -0
- vellum/client/types/components_schemas_slim_composio_tool_definition.py +5 -0
- vellum/client/types/composio_execute_tool_request.py +24 -0
- vellum/client/types/composio_execute_tool_response.py +24 -0
- vellum/client/types/composio_integration_exec_config.py +21 -0
- vellum/client/types/composio_tool_definition.py +30 -0
- vellum/client/types/conditional_node_result.py +3 -3
- vellum/client/types/conditional_node_result_data.py +2 -2
- vellum/client/types/container_image_build_config.py +21 -0
- vellum/client/types/container_image_container_image_tag.py +2 -2
- vellum/client/types/container_image_read.py +8 -4
- vellum/client/types/create_test_suite_test_case_request.py +9 -3
- vellum/client/types/create_workflow_event_request.py +7 -0
- vellum/client/types/dataset_row_push_request.py +20 -0
- vellum/client/types/delimiter_chunker_config.py +20 -0
- vellum/client/types/delimiter_chunker_config_request.py +20 -0
- vellum/client/types/delimiter_chunking.py +21 -0
- vellum/client/types/delimiter_chunking_request.py +21 -0
- vellum/client/types/deployment_history_item.py +10 -4
- vellum/client/types/deployment_provider_payload_response.py +4 -4
- vellum/client/types/deployment_read.py +15 -9
- vellum/client/types/deployment_release_tag_deployment_history_item.py +2 -2
- vellum/client/types/deployment_release_tag_read.py +4 -4
- vellum/client/types/deprecated_prompt_request_input.py +8 -0
- vellum/client/types/docker_service_token.py +2 -2
- vellum/client/types/document_chat_message_content.py +3 -3
- vellum/client/types/document_chat_message_content_request.py +3 -3
- vellum/client/types/document_document_to_document_index.py +4 -4
- vellum/client/types/document_index_chunking.py +5 -1
- vellum/client/types/document_index_chunking_request.py +3 -1
- vellum/client/types/document_index_indexing_config.py +4 -4
- vellum/client/types/document_index_indexing_config_request.py +4 -4
- vellum/client/types/document_index_read.py +4 -4
- vellum/client/types/document_input.py +30 -0
- vellum/client/types/document_input_request.py +30 -0
- vellum/client/types/document_prompt_block.py +4 -4
- vellum/client/types/document_read.py +9 -5
- vellum/client/types/document_vellum_value.py +3 -3
- vellum/client/types/document_vellum_value_request.py +3 -3
- vellum/client/types/enriched_normalized_completion.py +3 -3
- vellum/client/types/environment_display_config.py +19 -0
- vellum/client/types/environment_read.py +23 -0
- vellum/client/types/ephemeral_prompt_cache_config.py +3 -3
- vellum/client/types/error_detail_response.py +22 -0
- vellum/client/types/error_input.py +3 -3
- vellum/client/types/error_vellum_value.py +3 -3
- vellum/client/types/error_vellum_value_request.py +3 -3
- vellum/client/types/event_create_response.py +31 -0
- vellum/client/types/execute_api_request_bearer_token.py +1 -0
- vellum/client/types/execute_api_request_headers_value.py +1 -0
- vellum/client/types/execute_api_response.py +6 -6
- vellum/client/types/execute_prompt_event.py +3 -2
- vellum/client/types/execute_prompt_response.py +1 -0
- vellum/client/types/execute_workflow_async_response.py +26 -0
- vellum/client/types/execute_workflow_response.py +10 -4
- vellum/client/types/execute_workflow_workflow_result_event.py +1 -0
- vellum/client/types/execution_array_vellum_value.py +12 -6
- vellum/client/types/execution_audio_vellum_value.py +31 -0
- vellum/client/types/execution_chat_history_vellum_value.py +3 -3
- vellum/client/types/execution_document_vellum_value.py +31 -0
- vellum/client/types/execution_error_vellum_value.py +3 -3
- vellum/client/types/execution_function_call_vellum_value.py +3 -3
- vellum/client/types/execution_image_vellum_value.py +31 -0
- vellum/client/types/execution_json_vellum_value.py +3 -3
- vellum/client/types/execution_number_vellum_value.py +3 -3
- vellum/client/types/execution_search_results_vellum_value.py +3 -3
- vellum/client/types/execution_string_vellum_value.py +3 -3
- vellum/client/types/execution_thinking_vellum_value.py +31 -0
- vellum/client/types/execution_vellum_value.py +16 -5
- vellum/client/types/execution_video_vellum_value.py +31 -0
- vellum/client/types/external_input_descriptor.py +3 -3
- vellum/client/types/external_parent_context.py +38 -0
- vellum/client/types/external_test_case_execution.py +10 -4
- vellum/client/types/external_test_case_execution_request.py +10 -4
- vellum/client/types/fast_embed_vectorizer_baai_bge_small_en_v_15.py +23 -0
- vellum/client/types/fast_embed_vectorizer_baai_bge_small_en_v_15_request.py +23 -0
- vellum/client/types/folder_entity.py +5 -2
- vellum/client/types/folder_entity_dataset.py +26 -0
- vellum/client/types/folder_entity_dataset_data.py +25 -0
- vellum/client/types/folder_entity_document_index.py +3 -3
- vellum/client/types/folder_entity_document_index_data.py +5 -3
- vellum/client/types/folder_entity_folder.py +3 -3
- vellum/client/types/folder_entity_folder_data.py +2 -2
- vellum/client/types/folder_entity_prompt_sandbox.py +3 -3
- vellum/client/types/folder_entity_prompt_sandbox_data.py +4 -3
- vellum/client/types/folder_entity_test_suite.py +3 -3
- vellum/client/types/folder_entity_test_suite_data.py +3 -3
- vellum/client/types/folder_entity_workflow_sandbox.py +3 -3
- vellum/client/types/folder_entity_workflow_sandbox_data.py +6 -3
- vellum/client/types/fulfilled_ad_hoc_execute_prompt_event.py +4 -4
- vellum/client/types/fulfilled_execute_prompt_event.py +4 -4
- vellum/client/types/fulfilled_execute_prompt_response.py +3 -3
- vellum/client/types/fulfilled_execute_workflow_workflow_result_event.py +11 -5
- vellum/client/types/fulfilled_prompt_execution_meta.py +3 -3
- vellum/client/types/fulfilled_workflow_node_result_event.py +12 -6
- vellum/client/types/function_call.py +2 -2
- vellum/client/types/function_call_chat_message_content.py +3 -3
- vellum/client/types/function_call_chat_message_content_request.py +3 -3
- vellum/client/types/function_call_chat_message_content_value.py +2 -2
- vellum/client/types/function_call_chat_message_content_value_request.py +2 -2
- vellum/client/types/function_call_input.py +3 -3
- vellum/client/types/function_call_prompt_block.py +4 -4
- vellum/client/types/function_call_request.py +2 -2
- vellum/client/types/function_call_vellum_value.py +3 -3
- vellum/client/types/function_call_vellum_value_request.py +3 -3
- vellum/client/types/function_definition.py +9 -4
- vellum/client/types/generate_options_request.py +3 -3
- vellum/client/types/generate_request.py +2 -2
- vellum/client/types/generate_response.py +3 -3
- vellum/client/types/generate_result.py +3 -3
- vellum/client/types/generate_result_data.py +3 -3
- vellum/client/types/generate_result_error.py +3 -3
- vellum/client/types/generate_stream_response.py +3 -3
- vellum/client/types/generate_stream_result.py +4 -4
- vellum/client/types/generate_stream_result_data.py +3 -3
- vellum/client/types/google_vertex_ai_vectorizer_config.py +2 -2
- vellum/client/types/google_vertex_ai_vectorizer_config_request.py +2 -2
- vellum/client/types/google_vertex_ai_vectorizer_gemini_embedding_001.py +21 -0
- vellum/client/types/google_vertex_ai_vectorizer_gemini_embedding_001_request.py +21 -0
- vellum/client/types/google_vertex_ai_vectorizer_text_embedding_004.py +3 -3
- vellum/client/types/google_vertex_ai_vectorizer_text_embedding_004_request.py +3 -3
- vellum/client/types/google_vertex_ai_vectorizer_text_multilingual_embedding_002.py +3 -3
- vellum/client/types/google_vertex_ai_vectorizer_text_multilingual_embedding_002_request.py +3 -3
- vellum/client/types/hkunlp_instructor_xl_vectorizer.py +3 -3
- vellum/client/types/hkunlp_instructor_xl_vectorizer_request.py +3 -3
- vellum/client/types/image_chat_message_content.py +3 -3
- vellum/client/types/image_chat_message_content_request.py +3 -3
- vellum/client/types/image_input.py +30 -0
- vellum/client/types/image_input_request.py +30 -0
- vellum/client/types/image_prompt_block.py +4 -4
- vellum/client/types/image_vellum_value.py +3 -3
- vellum/client/types/image_vellum_value_request.py +3 -3
- vellum/client/types/indexing_config_vectorizer.py +11 -4
- vellum/client/types/indexing_config_vectorizer_request.py +11 -4
- vellum/client/types/initiated_ad_hoc_execute_prompt_event.py +3 -3
- vellum/client/types/initiated_execute_prompt_event.py +3 -3
- vellum/client/types/initiated_prompt_execution_meta.py +2 -2
- vellum/client/types/initiated_workflow_node_result_event.py +12 -6
- vellum/client/types/instructor_vectorizer_config.py +2 -2
- vellum/client/types/instructor_vectorizer_config_request.py +2 -2
- vellum/client/types/integration.py +27 -0
- vellum/client/types/integration_auth_config_integration.py +23 -0
- vellum/client/types/integration_auth_config_integration_credential.py +19 -0
- vellum/client/types/integration_credential_access_type.py +5 -0
- vellum/client/types/integration_name.py +85 -0
- vellum/client/types/integration_provider.py +5 -0
- vellum/client/types/integration_read.py +30 -0
- vellum/client/types/integration_trigger_context.py +39 -0
- vellum/client/types/invoked_port.py +2 -2
- vellum/client/types/jinja_prompt_block.py +4 -4
- vellum/client/types/json_input.py +3 -3
- vellum/client/types/json_input_request.py +3 -3
- vellum/client/types/json_vellum_value.py +2 -2
- vellum/client/types/json_vellum_value_request.py +2 -2
- vellum/client/types/logical_operator.py +4 -0
- vellum/client/types/map_node_result.py +3 -3
- vellum/client/types/map_node_result_data.py +3 -3
- vellum/client/types/merge_node_result.py +3 -3
- vellum/client/types/merge_node_result_data.py +2 -2
- vellum/client/types/metadata_filter_config_request.py +12 -6
- vellum/client/types/metadata_filter_rule_request.py +5 -5
- vellum/client/types/metadata_filters_request.py +1 -0
- vellum/client/types/metric_definition_execution.py +10 -4
- vellum/client/types/metric_definition_history_item.py +10 -4
- vellum/client/types/metric_definition_input.py +3 -2
- vellum/client/types/metric_node_result.py +2 -2
- vellum/client/types/ml_model_read.py +6 -3
- vellum/client/types/ml_model_usage.py +2 -2
- vellum/client/types/ml_model_usage_wrapper.py +3 -3
- vellum/client/types/named_scenario_input_audio_variable_value_request.py +22 -0
- vellum/client/types/named_scenario_input_chat_history_variable_value_request.py +3 -3
- vellum/client/types/named_scenario_input_document_variable_value_request.py +22 -0
- vellum/client/types/named_scenario_input_image_variable_value_request.py +22 -0
- vellum/client/types/named_scenario_input_json_variable_value_request.py +2 -2
- vellum/client/types/named_scenario_input_request.py +11 -2
- vellum/client/types/named_scenario_input_string_variable_value_request.py +2 -2
- vellum/client/types/named_scenario_input_video_variable_value_request.py +22 -0
- vellum/client/types/named_test_case_array_variable_value.py +11 -5
- vellum/client/types/named_test_case_array_variable_value_request.py +11 -5
- vellum/client/types/named_test_case_audio_variable_value.py +26 -0
- vellum/client/types/named_test_case_audio_variable_value_request.py +26 -0
- vellum/client/types/named_test_case_chat_history_variable_value.py +3 -3
- vellum/client/types/named_test_case_chat_history_variable_value_request.py +3 -3
- vellum/client/types/named_test_case_document_variable_value.py +22 -0
- vellum/client/types/named_test_case_document_variable_value_request.py +22 -0
- vellum/client/types/named_test_case_error_variable_value.py +3 -3
- vellum/client/types/named_test_case_error_variable_value_request.py +3 -3
- vellum/client/types/named_test_case_function_call_variable_value.py +3 -3
- vellum/client/types/named_test_case_function_call_variable_value_request.py +3 -3
- vellum/client/types/named_test_case_image_variable_value.py +22 -0
- vellum/client/types/named_test_case_image_variable_value_request.py +22 -0
- vellum/client/types/named_test_case_json_variable_value.py +2 -2
- vellum/client/types/named_test_case_json_variable_value_request.py +2 -2
- vellum/client/types/named_test_case_number_variable_value.py +2 -2
- vellum/client/types/named_test_case_number_variable_value_request.py +2 -2
- vellum/client/types/named_test_case_search_results_variable_value.py +3 -3
- vellum/client/types/named_test_case_search_results_variable_value_request.py +3 -3
- vellum/client/types/named_test_case_string_variable_value.py +2 -2
- vellum/client/types/named_test_case_string_variable_value_request.py +2 -2
- vellum/client/types/named_test_case_variable_value.py +14 -5
- vellum/client/types/named_test_case_variable_value_request.py +14 -5
- vellum/client/types/named_test_case_video_variable_value.py +22 -0
- vellum/client/types/named_test_case_video_variable_value_request.py +22 -0
- vellum/client/types/node_execution_fulfilled_body.py +4 -4
- vellum/client/types/node_execution_fulfilled_event.py +24 -15
- vellum/client/types/node_execution_initiated_body.py +3 -3
- vellum/client/types/node_execution_initiated_event.py +24 -15
- vellum/client/types/node_execution_paused_body.py +3 -3
- vellum/client/types/node_execution_paused_event.py +24 -15
- vellum/client/types/node_execution_rejected_body.py +5 -4
- vellum/client/types/node_execution_rejected_event.py +24 -15
- vellum/client/types/node_execution_resumed_body.py +3 -3
- vellum/client/types/node_execution_resumed_event.py +24 -15
- vellum/client/types/node_execution_span.py +23 -12
- vellum/client/types/node_execution_span_attributes.py +4 -2
- vellum/client/types/node_execution_streaming_body.py +4 -4
- vellum/client/types/node_execution_streaming_event.py +24 -15
- vellum/client/types/node_input_compiled_array_value.py +11 -5
- vellum/client/types/node_input_compiled_audio_value.py +23 -0
- vellum/client/types/node_input_compiled_chat_history_value.py +3 -3
- vellum/client/types/node_input_compiled_document_value.py +23 -0
- vellum/client/types/node_input_compiled_error_value.py +3 -3
- vellum/client/types/node_input_compiled_function_call_value.py +3 -3
- vellum/client/types/node_input_compiled_image_value.py +23 -0
- vellum/client/types/node_input_compiled_json_value.py +2 -2
- vellum/client/types/node_input_compiled_number_value.py +2 -2
- vellum/client/types/node_input_compiled_search_results_value.py +3 -3
- vellum/client/types/node_input_compiled_secret_value.py +3 -3
- vellum/client/types/node_input_compiled_string_value.py +2 -2
- vellum/client/types/node_input_compiled_video_value.py +23 -0
- vellum/client/types/node_input_variable_compiled_value.py +14 -5
- vellum/client/types/node_output_compiled_array_value.py +12 -6
- vellum/client/types/node_output_compiled_chat_history_value.py +3 -3
- vellum/client/types/node_output_compiled_error_value.py +3 -3
- vellum/client/types/node_output_compiled_function_call_value.py +3 -3
- vellum/client/types/node_output_compiled_json_value.py +3 -3
- vellum/client/types/node_output_compiled_number_value.py +3 -3
- vellum/client/types/node_output_compiled_search_results_value.py +3 -3
- vellum/client/types/node_output_compiled_string_value.py +3 -3
- vellum/client/types/node_output_compiled_thinking_value.py +28 -0
- vellum/client/types/node_output_compiled_value.py +8 -5
- vellum/client/types/node_parent_context.py +14 -11
- vellum/client/types/normalized_log_probs.py +3 -3
- vellum/client/types/normalized_token_log_probs.py +2 -2
- vellum/client/types/number_input.py +3 -3
- vellum/client/types/number_vellum_value.py +2 -2
- vellum/client/types/number_vellum_value_request.py +2 -2
- vellum/client/types/open_ai_vectorizer_config.py +3 -3
- vellum/client/types/open_ai_vectorizer_config_request.py +3 -3
- vellum/client/types/open_ai_vectorizer_text_embedding_3_large.py +3 -3
- vellum/client/types/open_ai_vectorizer_text_embedding_3_large_request.py +3 -3
- vellum/client/types/open_ai_vectorizer_text_embedding_3_small.py +3 -3
- vellum/client/types/open_ai_vectorizer_text_embedding_3_small_request.py +3 -3
- vellum/client/types/open_ai_vectorizer_text_embedding_ada_002.py +3 -3
- vellum/client/types/open_ai_vectorizer_text_embedding_ada_002_request.py +3 -3
- vellum/client/types/organization_read.py +6 -3
- vellum/client/types/paginated_container_image_read_list.py +3 -3
- vellum/client/types/paginated_deployment_release_tag_read_list.py +3 -3
- vellum/client/types/paginated_document_index_read_list.py +3 -3
- vellum/client/types/paginated_folder_entity_list.py +3 -3
- vellum/client/types/paginated_slim_deployment_read_list.py +10 -4
- vellum/client/types/paginated_slim_document_list.py +3 -3
- vellum/client/types/paginated_slim_integration_auth_config_read_list.py +23 -0
- vellum/client/types/paginated_slim_integration_read_list.py +23 -0
- vellum/client/types/paginated_slim_tool_definition_list.py +23 -0
- vellum/client/types/paginated_slim_workflow_deployment_list.py +10 -4
- vellum/client/types/paginated_test_suite_run_execution_list.py +10 -4
- vellum/client/types/paginated_test_suite_test_case_list.py +10 -4
- vellum/client/types/paginated_workflow_deployment_release_list.py +30 -0
- vellum/client/types/paginated_workflow_release_tag_read_list.py +3 -3
- vellum/client/types/paginated_workflow_sandbox_example_list.py +3 -3
- vellum/client/types/parent_context.py +21 -11
- vellum/client/types/pdf_search_result_meta_source.py +2 -2
- vellum/client/types/pdf_search_result_meta_source_request.py +2 -2
- vellum/client/types/plain_text_prompt_block.py +4 -4
- vellum/client/types/price.py +3 -3
- vellum/client/types/private_vectorizer.py +23 -0
- vellum/client/types/private_vectorizer_request.py +23 -0
- vellum/client/types/processing_failure_reason_enum.py +3 -1
- vellum/client/types/prompt_block.py +9 -6
- vellum/client/types/prompt_deployment_expand_meta_request.py +2 -2
- vellum/client/types/prompt_deployment_input_request.py +16 -3
- vellum/client/types/prompt_deployment_parent_context.py +13 -10
- vellum/client/types/prompt_deployment_release.py +6 -6
- vellum/client/types/prompt_deployment_release_prompt_deployment.py +2 -2
- vellum/client/types/prompt_deployment_release_prompt_version.py +4 -4
- vellum/client/types/prompt_exec_config.py +15 -9
- vellum/client/types/prompt_execution_meta.py +3 -3
- vellum/client/types/prompt_node_execution_meta.py +3 -3
- vellum/client/types/prompt_node_result.py +3 -3
- vellum/client/types/prompt_node_result_data.py +3 -3
- vellum/client/types/prompt_output.py +7 -3
- vellum/client/types/prompt_parameters.py +2 -2
- vellum/client/types/prompt_push_response.py +2 -2
- vellum/client/types/prompt_request_audio_input.py +26 -0
- vellum/client/types/prompt_request_chat_history_input.py +3 -3
- vellum/client/types/prompt_request_document_input.py +26 -0
- vellum/client/types/prompt_request_image_input.py +26 -0
- vellum/client/types/prompt_request_input.py +16 -3
- vellum/client/types/prompt_request_json_input.py +3 -3
- vellum/client/types/prompt_request_string_input.py +3 -3
- vellum/client/types/prompt_request_video_input.py +26 -0
- vellum/client/types/prompt_settings.py +2 -2
- vellum/client/types/prompt_version_build_config_sandbox.py +2 -2
- vellum/client/types/raw_prompt_execution_overrides_request.py +2 -2
- vellum/client/types/reducto_chunker_config.py +2 -2
- vellum/client/types/reducto_chunker_config_request.py +2 -2
- vellum/client/types/reducto_chunking.py +3 -3
- vellum/client/types/reducto_chunking_request.py +3 -3
- vellum/client/types/rejected_ad_hoc_execute_prompt_event.py +4 -4
- vellum/client/types/rejected_execute_prompt_event.py +4 -4
- vellum/client/types/rejected_execute_prompt_response.py +3 -3
- vellum/client/types/rejected_execute_workflow_workflow_result_event.py +4 -4
- vellum/client/types/rejected_prompt_execution_meta.py +3 -3
- vellum/client/types/rejected_workflow_node_result_event.py +12 -6
- vellum/client/types/release_created_by.py +2 -2
- vellum/client/types/release_environment.py +2 -2
- vellum/client/types/release_release_tag.py +3 -3
- vellum/client/types/release_review_reviewer.py +2 -2
- vellum/client/types/release_tag_release.py +2 -2
- vellum/client/types/replace_test_suite_test_case_request.py +9 -3
- vellum/client/types/rich_text_child_block.py +2 -1
- vellum/client/types/rich_text_prompt_block.py +4 -4
- vellum/client/types/sandbox_scenario.py +3 -3
- vellum/client/types/scenario_input.py +14 -3
- vellum/client/types/scenario_input_audio_variable_value.py +22 -0
- vellum/client/types/scenario_input_chat_history_variable_value.py +3 -3
- vellum/client/types/scenario_input_document_variable_value.py +22 -0
- vellum/client/types/scenario_input_image_variable_value.py +22 -0
- vellum/client/types/scenario_input_json_variable_value.py +2 -2
- vellum/client/types/scenario_input_string_variable_value.py +2 -2
- vellum/client/types/scenario_input_video_variable_value.py +22 -0
- vellum/client/types/scheduled_trigger_context.py +39 -0
- vellum/client/types/search_filters_request.py +11 -5
- vellum/client/types/search_node_result.py +3 -3
- vellum/client/types/search_node_result_data.py +3 -3
- vellum/client/types/search_request_options_request.py +13 -7
- vellum/client/types/search_response.py +3 -3
- vellum/client/types/search_result.py +3 -3
- vellum/client/types/search_result_document.py +2 -2
- vellum/client/types/search_result_document_request.py +2 -2
- vellum/client/types/search_result_merging_request.py +2 -2
- vellum/client/types/search_result_meta.py +3 -3
- vellum/client/types/search_result_meta_request.py +3 -3
- vellum/client/types/search_result_request.py +3 -3
- vellum/client/types/search_results_input.py +3 -3
- vellum/client/types/search_results_vellum_value.py +3 -3
- vellum/client/types/search_results_vellum_value_request.py +3 -3
- vellum/client/types/search_weights_request.py +2 -2
- vellum/client/types/secret_type_enum.py +3 -1
- vellum/client/types/sentence_chunker_config.py +2 -2
- vellum/client/types/sentence_chunker_config_request.py +2 -2
- vellum/client/types/sentence_chunking.py +3 -3
- vellum/client/types/sentence_chunking_request.py +3 -3
- vellum/client/types/slim_composio_tool_definition.py +24 -0
- vellum/client/types/slim_deployment_read.py +15 -9
- vellum/client/types/slim_document.py +6 -5
- vellum/client/types/slim_document_document_to_document_index.py +4 -4
- vellum/client/types/slim_integration_auth_config_read.py +36 -0
- vellum/client/types/slim_integration_read.py +25 -0
- vellum/client/types/slim_release_review.py +4 -4
- vellum/client/types/slim_workflow_deployment.py +16 -10
- vellum/client/types/slim_workflow_execution_read.py +24 -15
- vellum/client/types/span_link.py +15 -12
- vellum/client/types/span_link_type_enum.py +1 -1
- vellum/client/types/streaming_ad_hoc_execute_prompt_event.py +4 -4
- vellum/client/types/streaming_execute_prompt_event.py +3 -3
- vellum/client/types/streaming_prompt_execution_meta.py +2 -2
- vellum/client/types/streaming_workflow_node_result_event.py +12 -6
- vellum/client/types/string_chat_message_content.py +2 -2
- vellum/client/types/string_chat_message_content_request.py +2 -2
- vellum/client/types/string_input.py +3 -3
- vellum/client/types/string_input_request.py +3 -3
- vellum/client/types/string_vellum_value.py +2 -2
- vellum/client/types/string_vellum_value_request.py +2 -2
- vellum/client/types/submit_completion_actual_request.py +3 -3
- vellum/client/types/submit_workflow_execution_actual_request.py +3 -2
- vellum/client/types/subworkflow_node_result.py +3 -3
- vellum/client/types/subworkflow_node_result_data.py +2 -2
- vellum/client/types/templating_node_array_result.py +11 -5
- vellum/client/types/templating_node_chat_history_result.py +3 -3
- vellum/client/types/templating_node_error_result.py +3 -3
- vellum/client/types/templating_node_function_call_result.py +3 -3
- vellum/client/types/templating_node_json_result.py +2 -2
- vellum/client/types/templating_node_number_result.py +2 -2
- vellum/client/types/templating_node_result.py +10 -4
- vellum/client/types/templating_node_result_data.py +10 -4
- vellum/client/types/templating_node_result_output.py +6 -5
- vellum/client/types/templating_node_search_results_result.py +3 -3
- vellum/client/types/templating_node_string_result.py +2 -2
- vellum/client/types/terminal_node_array_result.py +11 -5
- vellum/client/types/terminal_node_chat_history_result.py +2 -2
- vellum/client/types/terminal_node_error_result.py +2 -2
- vellum/client/types/terminal_node_function_call_result.py +2 -2
- vellum/client/types/terminal_node_json_result.py +2 -2
- vellum/client/types/terminal_node_number_result.py +2 -2
- vellum/client/types/terminal_node_result.py +10 -4
- vellum/client/types/terminal_node_result_data.py +10 -4
- vellum/client/types/terminal_node_result_output.py +6 -5
- vellum/client/types/terminal_node_search_results_result.py +2 -2
- vellum/client/types/terminal_node_string_result.py +2 -2
- vellum/client/types/test_case_array_variable_value.py +11 -5
- vellum/client/types/test_case_audio_variable_value.py +27 -0
- vellum/client/types/test_case_chat_history_variable_value.py +3 -3
- vellum/client/types/test_case_document_variable_value.py +27 -0
- vellum/client/types/test_case_error_variable_value.py +3 -3
- vellum/client/types/test_case_function_call_variable_value.py +3 -3
- vellum/client/types/test_case_image_variable_value.py +27 -0
- vellum/client/types/test_case_json_variable_value.py +2 -2
- vellum/client/types/test_case_number_variable_value.py +2 -2
- vellum/client/types/test_case_search_results_variable_value.py +3 -3
- vellum/client/types/test_case_string_variable_value.py +2 -2
- vellum/client/types/test_case_variable_value.py +14 -5
- vellum/client/types/test_case_video_variable_value.py +27 -0
- vellum/client/types/test_suite_run_deployment_release_tag_exec_config.py +3 -3
- vellum/client/types/test_suite_run_deployment_release_tag_exec_config_data.py +3 -3
- vellum/client/types/test_suite_run_deployment_release_tag_exec_config_data_request.py +3 -3
- vellum/client/types/test_suite_run_deployment_release_tag_exec_config_request.py +3 -3
- vellum/client/types/test_suite_run_exec_config.py +2 -1
- vellum/client/types/test_suite_run_exec_config_request.py +2 -1
- vellum/client/types/test_suite_run_execution.py +11 -5
- vellum/client/types/test_suite_run_execution_array_output.py +11 -5
- vellum/client/types/test_suite_run_execution_chat_history_output.py +3 -3
- vellum/client/types/test_suite_run_execution_error_output.py +3 -3
- vellum/client/types/test_suite_run_execution_function_call_output.py +3 -3
- vellum/client/types/test_suite_run_execution_json_output.py +2 -2
- vellum/client/types/test_suite_run_execution_metric_definition.py +2 -2
- vellum/client/types/test_suite_run_execution_metric_result.py +11 -5
- vellum/client/types/test_suite_run_execution_number_output.py +2 -2
- vellum/client/types/test_suite_run_execution_output.py +6 -5
- vellum/client/types/test_suite_run_execution_search_results_output.py +3 -3
- vellum/client/types/test_suite_run_execution_string_output.py +2 -2
- vellum/client/types/test_suite_run_external_exec_config.py +10 -4
- vellum/client/types/test_suite_run_external_exec_config_data.py +10 -4
- vellum/client/types/test_suite_run_external_exec_config_data_request.py +10 -4
- vellum/client/types/test_suite_run_external_exec_config_request.py +10 -4
- vellum/client/types/test_suite_run_metric_array_output.py +11 -5
- vellum/client/types/test_suite_run_metric_error_output.py +3 -3
- vellum/client/types/test_suite_run_metric_json_output.py +2 -2
- vellum/client/types/test_suite_run_metric_number_output.py +2 -2
- vellum/client/types/test_suite_run_metric_output.py +5 -4
- vellum/client/types/test_suite_run_metric_string_output.py +2 -2
- vellum/client/types/test_suite_run_progress.py +2 -2
- vellum/client/types/test_suite_run_prompt_sandbox_exec_config_data_request.py +3 -3
- vellum/client/types/test_suite_run_prompt_sandbox_exec_config_request.py +3 -3
- vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config.py +3 -3
- vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_data.py +3 -3
- vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_data_request.py +3 -3
- vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_request.py +3 -3
- vellum/client/types/test_suite_run_read.py +12 -6
- vellum/client/types/test_suite_run_test_suite.py +2 -2
- vellum/client/types/test_suite_run_workflow_release_tag_exec_config.py +3 -3
- vellum/client/types/test_suite_run_workflow_release_tag_exec_config_data.py +3 -3
- vellum/client/types/test_suite_run_workflow_release_tag_exec_config_data_request.py +3 -3
- vellum/client/types/test_suite_run_workflow_release_tag_exec_config_request.py +3 -3
- vellum/client/types/test_suite_run_workflow_sandbox_exec_config_data_request.py +3 -3
- vellum/client/types/test_suite_run_workflow_sandbox_exec_config_request.py +3 -3
- vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config.py +3 -3
- vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_data.py +3 -3
- vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_data_request.py +3 -3
- vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_request.py +3 -3
- vellum/client/types/test_suite_test_case.py +10 -4
- vellum/client/types/test_suite_test_case_bulk_operation_request.py +2 -1
- vellum/client/types/test_suite_test_case_bulk_result.py +2 -1
- vellum/client/types/test_suite_test_case_create_bulk_operation_request.py +10 -4
- vellum/client/types/test_suite_test_case_created_bulk_result.py +3 -3
- vellum/client/types/test_suite_test_case_created_bulk_result_data.py +2 -2
- vellum/client/types/test_suite_test_case_delete_bulk_operation_data_request.py +2 -2
- vellum/client/types/test_suite_test_case_delete_bulk_operation_request.py +3 -3
- vellum/client/types/test_suite_test_case_deleted_bulk_result.py +3 -3
- vellum/client/types/test_suite_test_case_deleted_bulk_result_data.py +2 -2
- vellum/client/types/test_suite_test_case_rejected_bulk_result.py +2 -2
- vellum/client/types/test_suite_test_case_replace_bulk_operation_request.py +10 -4
- vellum/client/types/test_suite_test_case_replaced_bulk_result.py +3 -3
- vellum/client/types/test_suite_test_case_replaced_bulk_result_data.py +2 -2
- vellum/client/types/test_suite_test_case_upsert_bulk_operation_request.py +10 -4
- vellum/client/types/thinking_vellum_value.py +25 -0
- vellum/client/types/thinking_vellum_value_request.py +25 -0
- vellum/client/types/token_overlapping_window_chunker_config.py +2 -2
- vellum/client/types/token_overlapping_window_chunker_config_request.py +2 -2
- vellum/client/types/token_overlapping_window_chunking.py +3 -3
- vellum/client/types/token_overlapping_window_chunking_request.py +3 -3
- vellum/client/types/update_active_workspace_response.py +32 -0
- vellum/client/types/upload_document_response.py +3 -3
- vellum/client/types/uploaded_file_read.py +27 -0
- vellum/client/types/upsert_test_suite_test_case_request.py +9 -3
- vellum/client/types/variable_prompt_block.py +11 -4
- vellum/client/types/vellum_audio.py +5 -4
- vellum/client/types/vellum_audio_request.py +3 -3
- vellum/client/types/vellum_code_resource_definition.py +7 -2
- vellum/client/types/vellum_document.py +9 -4
- vellum/client/types/vellum_document_request.py +7 -3
- vellum/client/types/vellum_error.py +5 -4
- vellum/client/types/vellum_error_code_enum.py +6 -0
- vellum/client/types/vellum_error_request.py +5 -4
- vellum/client/types/vellum_image.py +9 -4
- vellum/client/types/vellum_image_request.py +7 -3
- vellum/client/types/vellum_node_execution_event.py +4 -3
- vellum/client/types/vellum_sdk_error.py +4 -3
- vellum/client/types/vellum_sdk_error_code_enum.py +5 -0
- vellum/client/types/vellum_secret.py +2 -2
- vellum/client/types/vellum_span.py +2 -1
- vellum/client/types/vellum_value.py +13 -8
- vellum/client/types/vellum_value_logical_condition_group_request.py +6 -6
- vellum/client/types/vellum_value_logical_condition_request.py +13 -7
- vellum/client/types/vellum_value_logical_expression_request.py +2 -1
- vellum/client/types/vellum_value_request.py +13 -8
- vellum/client/types/vellum_variable.py +13 -7
- vellum/client/types/vellum_variable_extensions.py +3 -2
- vellum/client/types/vellum_variable_type.py +3 -1
- vellum/client/types/vellum_video.py +25 -0
- vellum/client/types/vellum_video_request.py +24 -0
- vellum/client/types/vellum_workflow_execution_event.py +4 -3
- vellum/client/types/video_chat_message_content.py +25 -0
- vellum/client/types/video_chat_message_content_request.py +25 -0
- vellum/client/types/video_input.py +30 -0
- vellum/client/types/video_input_request.py +30 -0
- vellum/client/types/video_prompt_block.py +29 -0
- vellum/client/types/video_vellum_value.py +25 -0
- vellum/client/types/video_vellum_value_request.py +25 -0
- vellum/client/types/workflow_deployment_display_data.py +27 -0
- vellum/client/types/workflow_deployment_event_executions_response.py +20 -11
- vellum/client/types/workflow_deployment_history_item.py +10 -4
- vellum/client/types/workflow_deployment_parent_context.py +13 -10
- vellum/client/types/workflow_deployment_read.py +22 -10
- vellum/client/types/workflow_deployment_release.py +13 -7
- vellum/client/types/workflow_deployment_release_workflow_deployment.py +2 -2
- vellum/client/types/workflow_deployment_release_workflow_version.py +10 -4
- vellum/client/types/workflow_display_icon.py +24 -0
- vellum/client/types/workflow_error.py +1 -0
- vellum/client/types/workflow_event.py +37 -0
- vellum/client/types/workflow_event_error.py +5 -3
- vellum/client/types/workflow_event_execution_read.py +26 -16
- vellum/client/types/workflow_execution_actual.py +11 -5
- vellum/client/types/workflow_execution_actual_chat_history_request.py +2 -2
- vellum/client/types/workflow_execution_actual_json_request.py +2 -2
- vellum/client/types/workflow_execution_actual_string_request.py +2 -2
- vellum/client/types/workflow_execution_detail.py +51 -0
- vellum/client/types/workflow_execution_event_error_code.py +5 -0
- vellum/client/types/workflow_execution_fulfilled_body.py +5 -3
- vellum/client/types/workflow_execution_fulfilled_event.py +24 -15
- vellum/client/types/workflow_execution_initiated_body.py +3 -3
- vellum/client/types/workflow_execution_initiated_event.py +24 -15
- vellum/client/types/workflow_execution_node_result_event.py +10 -4
- vellum/client/types/workflow_execution_paused_body.py +4 -4
- vellum/client/types/workflow_execution_paused_event.py +24 -15
- vellum/client/types/workflow_execution_rejected_body.py +5 -4
- vellum/client/types/workflow_execution_rejected_event.py +24 -15
- vellum/client/types/workflow_execution_resumed_body.py +3 -3
- vellum/client/types/workflow_execution_resumed_event.py +24 -15
- vellum/client/types/workflow_execution_snapshotted_body.py +4 -3
- vellum/client/types/workflow_execution_snapshotted_event.py +24 -15
- vellum/client/types/workflow_execution_span.py +22 -11
- vellum/client/types/workflow_execution_span_attributes.py +3 -2
- vellum/client/types/workflow_execution_streaming_body.py +4 -4
- vellum/client/types/workflow_execution_streaming_event.py +24 -15
- vellum/client/types/workflow_execution_usage_calculation_error.py +3 -3
- vellum/client/types/workflow_execution_usage_calculation_fulfilled_body.py +22 -0
- vellum/client/types/workflow_execution_usage_result.py +3 -3
- vellum/client/types/workflow_execution_view_online_eval_metric_result.py +10 -4
- vellum/client/types/workflow_execution_workflow_result_event.py +10 -4
- vellum/client/types/workflow_expand_meta_request.py +2 -2
- vellum/client/types/workflow_initialization_error.py +2 -2
- vellum/client/types/workflow_input.py +31 -0
- vellum/client/types/workflow_node_result_data.py +8 -7
- vellum/client/types/workflow_node_result_event.py +3 -2
- vellum/client/types/workflow_output.py +12 -5
- vellum/client/types/workflow_output_array.py +12 -6
- vellum/client/types/workflow_output_audio.py +31 -0
- vellum/client/types/workflow_output_chat_history.py +3 -3
- vellum/client/types/workflow_output_document.py +31 -0
- vellum/client/types/workflow_output_error.py +3 -3
- vellum/client/types/workflow_output_function_call.py +3 -3
- vellum/client/types/workflow_output_image.py +3 -3
- vellum/client/types/workflow_output_json.py +3 -3
- vellum/client/types/workflow_output_number.py +3 -3
- vellum/client/types/workflow_output_search_results.py +3 -3
- vellum/client/types/workflow_output_string.py +3 -3
- vellum/client/types/workflow_output_video.py +31 -0
- vellum/client/types/workflow_parent_context.py +14 -11
- vellum/client/types/workflow_push_deployment_config_request.py +3 -2
- vellum/client/types/workflow_push_response.py +2 -2
- vellum/client/types/workflow_release_tag_read.py +4 -4
- vellum/client/types/workflow_release_tag_workflow_deployment_history_item.py +2 -2
- vellum/client/types/workflow_request_audio_input_request.py +30 -0
- vellum/client/types/workflow_request_chat_history_input_request.py +3 -3
- vellum/client/types/workflow_request_document_input_request.py +30 -0
- vellum/client/types/workflow_request_image_input_request.py +30 -0
- vellum/client/types/workflow_request_input_request.py +11 -2
- vellum/client/types/workflow_request_json_input_request.py +3 -3
- vellum/client/types/workflow_request_number_input_request.py +3 -3
- vellum/client/types/workflow_request_string_input_request.py +3 -3
- vellum/client/types/workflow_request_video_input_request.py +30 -0
- vellum/client/types/workflow_resolved_state.py +31 -0
- vellum/client/types/workflow_result_event.py +14 -8
- vellum/client/types/workflow_result_event_output_data.py +7 -6
- vellum/client/types/workflow_result_event_output_data_array.py +12 -6
- vellum/client/types/workflow_result_event_output_data_chat_history.py +3 -3
- vellum/client/types/workflow_result_event_output_data_error.py +3 -3
- vellum/client/types/workflow_result_event_output_data_function_call.py +3 -3
- vellum/client/types/workflow_result_event_output_data_json.py +3 -3
- vellum/client/types/workflow_result_event_output_data_number.py +3 -3
- vellum/client/types/workflow_result_event_output_data_search_results.py +3 -3
- vellum/client/types/workflow_result_event_output_data_string.py +3 -3
- vellum/client/types/workflow_result_event_state.py +7 -0
- vellum/client/types/workflow_sandbox_display_data.py +27 -0
- vellum/client/types/workflow_sandbox_example.py +4 -2
- vellum/client/types/workflow_sandbox_parent_context.py +13 -10
- vellum/client/types/workflow_stream_event.py +2 -1
- vellum/client/types/workspace_display_config.py +19 -0
- vellum/client/types/workspace_read.py +5 -3
- vellum/client/types/workspace_secret_read.py +3 -3
- vellum/client/utils.py +24 -0
- vellum/core/force_multipart.py +3 -0
- vellum/core/http_response.py +3 -0
- vellum/errors/misdirected_request_error.py +3 -0
- vellum/errors/too_many_requests_error.py +3 -0
- vellum/errors/unauthorized_error.py +3 -0
- vellum/evaluations/resources.py +5 -5
- vellum/plugins/pydantic.py +14 -3
- vellum/plugins/tests/__init__.py +0 -0
- vellum/plugins/tests/test_pydantic.py +30 -0
- vellum/plugins/vellum_mypy.py +31 -23
- vellum/prompts/__init__.py +3 -0
- vellum/prompts/blocks/__init__.py +3 -0
- vellum/prompts/blocks/compilation.py +29 -11
- vellum/prompts/blocks/helpers.py +31 -0
- vellum/prompts/blocks/tests/test_compilation.py +64 -0
- vellum/raw_client.py +3 -0
- vellum/resources/ad_hoc/raw_client.py +3 -0
- vellum/resources/container_images/raw_client.py +3 -0
- vellum/resources/deployments/raw_client.py +3 -0
- vellum/resources/document_indexes/raw_client.py +3 -0
- vellum/resources/documents/raw_client.py +3 -0
- vellum/resources/{release_reviews → environments}/__init__.py +1 -1
- vellum/resources/{release_reviews → environments}/client.py +1 -1
- vellum/resources/environments/raw_client.py +3 -0
- vellum/resources/events/__init__.py +3 -0
- vellum/resources/events/client.py +3 -0
- vellum/resources/events/raw_client.py +3 -0
- vellum/resources/folder_entities/raw_client.py +3 -0
- vellum/resources/integration_auth_configs/__init__.py +3 -0
- vellum/resources/integration_auth_configs/client.py +3 -0
- vellum/resources/integration_auth_configs/raw_client.py +3 -0
- vellum/resources/integration_providers/__init__.py +3 -0
- vellum/resources/integration_providers/client.py +3 -0
- vellum/resources/integration_providers/raw_client.py +3 -0
- vellum/resources/integrations/__init__.py +3 -0
- vellum/resources/integrations/client.py +3 -0
- vellum/resources/integrations/raw_client.py +3 -0
- vellum/resources/metric_definitions/raw_client.py +3 -0
- vellum/resources/ml_models/raw_client.py +3 -0
- vellum/resources/organizations/raw_client.py +3 -0
- vellum/resources/prompts/raw_client.py +3 -0
- vellum/resources/sandboxes/raw_client.py +3 -0
- vellum/resources/test_suite_runs/raw_client.py +3 -0
- vellum/resources/test_suites/raw_client.py +3 -0
- vellum/resources/uploaded_files/__init__.py +3 -0
- vellum/resources/uploaded_files/client.py +3 -0
- vellum/resources/uploaded_files/raw_client.py +3 -0
- vellum/resources/workflow_deployments/raw_client.py +3 -0
- vellum/resources/workflow_executions/__init__.py +3 -0
- vellum/resources/workflow_executions/client.py +3 -0
- vellum/resources/workflow_executions/raw_client.py +3 -0
- vellum/resources/workflow_sandboxes/raw_client.py +3 -0
- vellum/resources/workflows/raw_client.py +3 -0
- vellum/resources/workspace_secrets/raw_client.py +3 -0
- vellum/resources/workspaces/raw_client.py +3 -0
- vellum/types/api_actor_type_enum.py +3 -0
- vellum/types/audio_input.py +3 -0
- vellum/types/audio_input_request.py +3 -0
- vellum/types/auth_type_enum.py +3 -0
- vellum/types/build_status_enum.py +3 -0
- vellum/types/components_schemas_composio_execute_tool_request.py +3 -0
- vellum/types/components_schemas_composio_execute_tool_response.py +3 -0
- vellum/types/components_schemas_composio_integration_exec_config.py +3 -0
- vellum/types/components_schemas_composio_tool_definition.py +3 -0
- vellum/types/components_schemas_slim_composio_tool_definition.py +3 -0
- vellum/types/composio_execute_tool_request.py +3 -0
- vellum/types/composio_execute_tool_response.py +3 -0
- vellum/types/composio_integration_exec_config.py +3 -0
- vellum/types/composio_tool_definition.py +3 -0
- vellum/types/container_image_build_config.py +3 -0
- vellum/types/create_workflow_event_request.py +3 -0
- vellum/types/dataset_row_push_request.py +3 -0
- vellum/types/delimiter_chunker_config.py +3 -0
- vellum/types/delimiter_chunker_config_request.py +3 -0
- vellum/types/delimiter_chunking.py +3 -0
- vellum/types/delimiter_chunking_request.py +3 -0
- vellum/types/deprecated_prompt_request_input.py +3 -0
- vellum/types/document_input.py +3 -0
- vellum/types/document_input_request.py +3 -0
- vellum/types/environment_display_config.py +3 -0
- vellum/types/environment_read.py +3 -0
- vellum/types/error_detail_response.py +3 -0
- vellum/types/event_create_response.py +3 -0
- vellum/types/execute_workflow_async_response.py +3 -0
- vellum/types/execution_audio_vellum_value.py +3 -0
- vellum/types/execution_document_vellum_value.py +3 -0
- vellum/types/execution_image_vellum_value.py +3 -0
- vellum/types/execution_thinking_vellum_value.py +3 -0
- vellum/types/execution_video_vellum_value.py +3 -0
- vellum/types/external_parent_context.py +3 -0
- vellum/types/fast_embed_vectorizer_baai_bge_small_en_v_15.py +3 -0
- vellum/types/fast_embed_vectorizer_baai_bge_small_en_v_15_request.py +3 -0
- vellum/types/folder_entity_dataset.py +3 -0
- vellum/types/folder_entity_dataset_data.py +3 -0
- vellum/types/google_vertex_ai_vectorizer_gemini_embedding_001.py +3 -0
- vellum/types/google_vertex_ai_vectorizer_gemini_embedding_001_request.py +3 -0
- vellum/types/image_input.py +3 -0
- vellum/types/image_input_request.py +3 -0
- vellum/types/integration.py +3 -0
- vellum/types/integration_auth_config_integration.py +3 -0
- vellum/types/integration_auth_config_integration_credential.py +3 -0
- vellum/types/integration_credential_access_type.py +3 -0
- vellum/types/integration_name.py +3 -0
- vellum/types/integration_provider.py +3 -0
- vellum/types/integration_read.py +3 -0
- vellum/types/integration_trigger_context.py +3 -0
- vellum/types/named_scenario_input_audio_variable_value_request.py +3 -0
- vellum/types/named_scenario_input_document_variable_value_request.py +3 -0
- vellum/types/named_scenario_input_image_variable_value_request.py +3 -0
- vellum/types/named_scenario_input_video_variable_value_request.py +3 -0
- vellum/types/named_test_case_audio_variable_value.py +3 -0
- vellum/types/named_test_case_audio_variable_value_request.py +3 -0
- vellum/types/named_test_case_document_variable_value.py +3 -0
- vellum/types/named_test_case_document_variable_value_request.py +3 -0
- vellum/types/named_test_case_image_variable_value.py +3 -0
- vellum/types/named_test_case_image_variable_value_request.py +3 -0
- vellum/types/named_test_case_video_variable_value.py +3 -0
- vellum/types/named_test_case_video_variable_value_request.py +3 -0
- vellum/types/node_input_compiled_audio_value.py +3 -0
- vellum/types/node_input_compiled_document_value.py +3 -0
- vellum/types/node_input_compiled_image_value.py +3 -0
- vellum/types/node_input_compiled_video_value.py +3 -0
- vellum/types/node_output_compiled_thinking_value.py +3 -0
- vellum/types/paginated_slim_integration_auth_config_read_list.py +3 -0
- vellum/types/paginated_slim_integration_read_list.py +3 -0
- vellum/types/paginated_slim_tool_definition_list.py +3 -0
- vellum/types/paginated_workflow_deployment_release_list.py +3 -0
- vellum/types/private_vectorizer.py +3 -0
- vellum/types/private_vectorizer_request.py +3 -0
- vellum/types/prompt_request_audio_input.py +3 -0
- vellum/types/prompt_request_document_input.py +3 -0
- vellum/types/prompt_request_image_input.py +3 -0
- vellum/types/prompt_request_video_input.py +3 -0
- vellum/types/scenario_input_audio_variable_value.py +3 -0
- vellum/types/scenario_input_document_variable_value.py +3 -0
- vellum/types/scenario_input_image_variable_value.py +3 -0
- vellum/types/scenario_input_video_variable_value.py +3 -0
- vellum/types/scheduled_trigger_context.py +3 -0
- vellum/types/slim_composio_tool_definition.py +3 -0
- vellum/types/slim_integration_auth_config_read.py +3 -0
- vellum/types/slim_integration_read.py +3 -0
- vellum/types/test_case_audio_variable_value.py +3 -0
- vellum/types/test_case_document_variable_value.py +3 -0
- vellum/types/test_case_image_variable_value.py +3 -0
- vellum/types/test_case_video_variable_value.py +3 -0
- vellum/types/thinking_vellum_value.py +3 -0
- vellum/types/thinking_vellum_value_request.py +3 -0
- vellum/types/update_active_workspace_response.py +3 -0
- vellum/types/uploaded_file_read.py +3 -0
- vellum/types/vellum_video.py +3 -0
- vellum/types/vellum_video_request.py +3 -0
- vellum/types/video_chat_message_content.py +3 -0
- vellum/types/video_chat_message_content_request.py +3 -0
- vellum/types/video_input.py +3 -0
- vellum/types/video_input_request.py +3 -0
- vellum/types/video_prompt_block.py +3 -0
- vellum/types/video_vellum_value.py +3 -0
- vellum/types/video_vellum_value_request.py +3 -0
- vellum/types/workflow_deployment_display_data.py +3 -0
- vellum/types/workflow_display_icon.py +3 -0
- vellum/types/workflow_event.py +3 -0
- vellum/types/workflow_execution_detail.py +3 -0
- vellum/types/workflow_execution_usage_calculation_fulfilled_body.py +3 -0
- vellum/types/workflow_input.py +3 -0
- vellum/types/workflow_output_audio.py +3 -0
- vellum/types/workflow_output_document.py +3 -0
- vellum/types/workflow_output_video.py +3 -0
- vellum/types/workflow_request_audio_input_request.py +3 -0
- vellum/types/workflow_request_document_input_request.py +3 -0
- vellum/types/workflow_request_image_input_request.py +3 -0
- vellum/types/workflow_request_video_input_request.py +3 -0
- vellum/types/workflow_resolved_state.py +3 -0
- vellum/types/workflow_result_event_state.py +3 -0
- vellum/types/workflow_sandbox_display_data.py +3 -0
- vellum/types/workspace_display_config.py +3 -0
- vellum/utils/files/__init__.py +18 -0
- vellum/utils/files/constants.py +47 -0
- vellum/utils/files/exceptions.py +25 -0
- vellum/utils/files/extensions.py +59 -0
- vellum/utils/files/mixin.py +109 -0
- vellum/utils/files/read.py +41 -0
- vellum/utils/files/stream.py +135 -0
- vellum/utils/files/tests/__init__.py +0 -0
- vellum/utils/files/tests/test_extensions.py +54 -0
- vellum/utils/files/tests/test_mixin.py +205 -0
- vellum/utils/files/tests/test_read.py +204 -0
- vellum/utils/files/tests/test_stream.py +199 -0
- vellum/utils/files/tests/test_upload.py +309 -0
- vellum/utils/files/tests/test_urls.py +252 -0
- vellum/utils/files/types.py +8 -0
- vellum/utils/files/upload.py +151 -0
- vellum/utils/files/urls.py +71 -0
- vellum/utils/json_encoder.py +95 -0
- vellum/utils/templating/custom_filters.py +4 -4
- vellum/utils/templating/render.py +4 -4
- vellum/utils/tests/__init__.py +0 -0
- vellum/utils/tests/test_json_encoder.py +92 -0
- vellum/utils/vellum_client.py +40 -0
- vellum/workflows/__init__.py +78 -0
- vellum/workflows/constants.py +7 -0
- vellum/workflows/context.py +27 -9
- vellum/workflows/descriptors/base.py +83 -2
- vellum/workflows/descriptors/exceptions.py +18 -1
- vellum/workflows/descriptors/tests/test_utils.py +57 -0
- vellum/workflows/descriptors/utils.py +27 -3
- vellum/workflows/edges/__init__.py +2 -0
- vellum/workflows/edges/trigger_edge.py +67 -0
- vellum/workflows/emitters/__init__.py +2 -0
- vellum/workflows/emitters/base.py +25 -0
- vellum/workflows/emitters/vellum_emitter.py +150 -0
- vellum/workflows/environment/__init__.py +2 -1
- vellum/workflows/environment/environment.py +10 -3
- vellum/workflows/errors/types.py +18 -1
- vellum/workflows/events/__init__.py +2 -0
- vellum/workflows/events/context.py +90 -0
- vellum/workflows/events/exception_handling.py +58 -0
- vellum/workflows/events/node.py +27 -11
- vellum/workflows/events/relational_threads.py +41 -0
- vellum/workflows/events/stream.py +28 -0
- vellum/workflows/events/tests/test_basic_workflow.py +50 -0
- vellum/workflows/events/tests/test_event.py +145 -20
- vellum/workflows/events/types.py +32 -4
- vellum/workflows/events/workflow.py +111 -8
- vellum/workflows/exceptions.py +46 -7
- vellum/workflows/executable.py +9 -0
- vellum/workflows/expressions/accessor.py +65 -11
- vellum/workflows/expressions/add.py +41 -0
- vellum/workflows/expressions/comparison_utils.py +38 -0
- vellum/workflows/expressions/concat.py +35 -0
- vellum/workflows/expressions/contains.py +7 -0
- vellum/workflows/expressions/greater_than.py +8 -1
- vellum/workflows/expressions/greater_than_or_equal_to.py +8 -1
- vellum/workflows/expressions/is_error.py +23 -0
- vellum/workflows/expressions/length.py +46 -0
- vellum/workflows/expressions/less_than.py +8 -1
- vellum/workflows/expressions/less_than_or_equal_to.py +8 -1
- vellum/workflows/expressions/minus.py +41 -0
- vellum/workflows/expressions/tests/test_accessor.py +248 -0
- vellum/workflows/expressions/tests/test_add.py +72 -0
- vellum/workflows/expressions/tests/test_concat.py +108 -0
- vellum/workflows/expressions/tests/test_contains.py +175 -0
- vellum/workflows/expressions/tests/test_expressions.py +145 -32
- vellum/workflows/expressions/tests/test_length.py +38 -0
- vellum/workflows/expressions/tests/test_minus.py +109 -0
- vellum/workflows/graph/graph.py +255 -8
- vellum/workflows/graph/tests/test_graph.py +300 -0
- vellum/workflows/inputs/__init__.py +2 -0
- vellum/workflows/inputs/base.py +49 -15
- vellum/workflows/inputs/dataset_row.py +81 -0
- vellum/workflows/inputs/tests/test_inputs.py +181 -1
- vellum/workflows/integrations/__init__.py +5 -0
- vellum/workflows/integrations/composio_service.py +158 -0
- vellum/workflows/integrations/mcp_service.py +282 -0
- vellum/workflows/integrations/tests/__init__.py +0 -0
- vellum/workflows/integrations/tests/test_mcp_service.py +273 -0
- vellum/workflows/integrations/tests/test_vellum_integration_service.py +299 -0
- vellum/workflows/integrations/vellum_integration_service.py +136 -0
- vellum/workflows/loaders/__init__.py +3 -0
- vellum/workflows/loaders/base.py +36 -0
- vellum/workflows/nodes/__init__.py +2 -0
- vellum/workflows/nodes/bases/base.py +142 -80
- vellum/workflows/nodes/bases/base_adornment_node.py +55 -1
- vellum/workflows/nodes/bases/tests/test_base_node.py +50 -4
- vellum/workflows/nodes/core/error_node/node.py +11 -2
- vellum/workflows/nodes/core/inline_subworkflow_node/node.py +29 -3
- vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py +35 -0
- vellum/workflows/nodes/core/map_node/node.py +26 -1
- vellum/workflows/nodes/core/map_node/tests/test_node.py +73 -0
- vellum/workflows/nodes/core/retry_node/tests/test_node.py +2 -3
- vellum/workflows/nodes/core/templating_node/node.py +7 -2
- vellum/workflows/nodes/core/templating_node/tests/test_templating_node.py +194 -1
- vellum/workflows/nodes/displayable/__init__.py +6 -0
- vellum/workflows/nodes/displayable/api_node/node.py +10 -1
- vellum/workflows/nodes/displayable/api_node/tests/test_api_node.py +113 -2
- vellum/workflows/nodes/displayable/bases/api_node/node.py +70 -16
- vellum/workflows/nodes/displayable/bases/api_node/tests/__init__.py +0 -0
- vellum/workflows/nodes/displayable/bases/api_node/tests/test_node.py +150 -0
- vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py +68 -7
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py +215 -17
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/test_inline_prompt_node.py +352 -32
- vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py +73 -1
- vellum/workflows/nodes/displayable/bases/search_node.py +26 -3
- vellum/workflows/nodes/displayable/bases/tests/test_prompt_deployment_node.py +90 -0
- vellum/workflows/nodes/displayable/bases/utils.py +82 -5
- vellum/workflows/nodes/displayable/code_execution_node/node.py +35 -9
- vellum/workflows/nodes/displayable/code_execution_node/tests/test_node.py +242 -13
- vellum/workflows/nodes/displayable/code_execution_node/utils.py +5 -21
- vellum/workflows/nodes/displayable/conditional_node/node.py +8 -4
- vellum/workflows/nodes/displayable/final_output_node/node.py +80 -1
- vellum/workflows/nodes/displayable/final_output_node/tests/test_node.py +96 -1
- vellum/workflows/nodes/displayable/guardrail_node/node.py +13 -4
- vellum/workflows/nodes/displayable/inline_prompt_node/node.py +9 -36
- vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py +3 -0
- vellum/workflows/nodes/displayable/merge_node/node.py +8 -1
- vellum/workflows/nodes/displayable/note_node/node.py +8 -1
- vellum/workflows/nodes/displayable/prompt_deployment_node/node.py +7 -23
- vellum/workflows/nodes/displayable/search_node/node.py +15 -2
- vellum/workflows/nodes/displayable/search_node/tests/test_node.py +33 -0
- vellum/workflows/nodes/displayable/set_state_node/__init__.py +5 -0
- vellum/workflows/nodes/displayable/set_state_node/node.py +71 -0
- vellum/workflows/nodes/displayable/set_state_node/tests/__init__.py +0 -0
- vellum/workflows/nodes/displayable/set_state_node/tests/test_node.py +212 -0
- vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py +220 -59
- vellum/workflows/nodes/displayable/subworkflow_deployment_node/tests/test_node.py +1 -1
- vellum/workflows/nodes/displayable/tests/test_inline_text_prompt_node.py +4 -1
- vellum/workflows/nodes/displayable/tests/test_search_node_error_handling.py +329 -0
- vellum/workflows/nodes/displayable/tests/test_text_prompt_deployment_node.py +10 -15
- vellum/workflows/nodes/displayable/tool_calling_node/__init__.py +3 -0
- vellum/workflows/nodes/displayable/tool_calling_node/node.py +225 -0
- vellum/workflows/nodes/displayable/tool_calling_node/state.py +11 -0
- vellum/workflows/nodes/displayable/tool_calling_node/tests/__init__.py +0 -0
- vellum/workflows/nodes/displayable/tool_calling_node/tests/test_composio_service.py +219 -0
- vellum/workflows/nodes/displayable/tool_calling_node/tests/test_node.py +802 -0
- vellum/workflows/nodes/displayable/tool_calling_node/tests/test_utils.py +316 -0
- vellum/workflows/nodes/displayable/tool_calling_node/utils.py +633 -0
- vellum/workflows/nodes/displayable/web_search_node/__init__.py +3 -0
- vellum/workflows/nodes/displayable/web_search_node/node.py +136 -0
- vellum/workflows/nodes/displayable/web_search_node/tests/__init__.py +0 -0
- vellum/workflows/nodes/displayable/web_search_node/tests/test_node.py +246 -0
- vellum/workflows/nodes/experimental/__init__.py +1 -3
- vellum/workflows/nodes/mocks.py +40 -9
- vellum/workflows/nodes/tests/test_mocks.py +2 -2
- vellum/workflows/nodes/tests/test_utils.py +34 -5
- vellum/workflows/nodes/utils.py +45 -6
- vellum/workflows/outputs/base.py +53 -12
- vellum/workflows/ports/node_ports.py +3 -0
- vellum/workflows/ports/port.py +27 -12
- vellum/workflows/ports/tests/test_port.py +45 -0
- vellum/workflows/ports/utils.py +26 -6
- vellum/workflows/references/__init__.py +2 -0
- vellum/workflows/references/constant.py +4 -1
- vellum/workflows/references/environment_variable.py +27 -9
- vellum/workflows/references/output.py +4 -6
- vellum/workflows/references/trigger.py +77 -0
- vellum/workflows/resolvers/base.py +19 -1
- vellum/workflows/resolvers/resolver.py +71 -0
- vellum/workflows/resolvers/tests/test_resolver.py +168 -0
- vellum/workflows/resolvers/types.py +11 -0
- vellum/workflows/runner/runner.py +642 -160
- vellum/workflows/sandbox.py +55 -9
- vellum/workflows/state/base.py +164 -40
- vellum/workflows/state/context.py +225 -6
- vellum/workflows/state/delta.py +20 -0
- vellum/workflows/state/encoder.py +2 -77
- vellum/workflows/state/tests/test_state.py +24 -9
- vellum/workflows/tests/test_dataset_row.py +190 -0
- vellum/workflows/tests/test_sandbox.py +137 -0
- vellum/workflows/tests/triggers/test_integration_trigger.py +156 -0
- vellum/workflows/triggers/__init__.py +6 -0
- vellum/workflows/triggers/base.py +391 -0
- vellum/workflows/triggers/integration.py +186 -0
- vellum/workflows/triggers/manual.py +37 -0
- vellum/workflows/triggers/schedule.py +18 -0
- vellum/workflows/triggers/tests/__init__.py +1 -0
- vellum/workflows/triggers/tests/test_base_trigger_display.py +147 -0
- vellum/workflows/triggers/tests/test_integration.py +155 -0
- vellum/workflows/types/__init__.py +2 -1
- vellum/workflows/types/code_execution_node_wrappers.py +5 -1
- vellum/workflows/types/core.py +5 -0
- vellum/workflows/types/definition.py +168 -2
- vellum/workflows/types/generics.py +5 -0
- vellum/workflows/types/tests/test_definition.py +183 -0
- vellum/workflows/types/tests/test_utils.py +11 -0
- vellum/workflows/types/utils.py +33 -3
- vellum/workflows/utils/files.py +28 -0
- vellum/workflows/utils/functions.py +244 -19
- vellum/workflows/utils/hmac.py +44 -0
- vellum/workflows/utils/names.py +32 -4
- vellum/workflows/utils/pydantic_schema.py +38 -0
- vellum/workflows/utils/tests/test_functions.py +357 -15
- vellum/workflows/utils/tests/test_names.py +9 -0
- vellum/workflows/utils/tests/test_vellum_variables.py +32 -2
- vellum/workflows/utils/uuids.py +35 -0
- vellum/workflows/utils/vellum_variables.py +131 -7
- vellum/workflows/utils/zip.py +46 -0
- vellum/workflows/vellum_client.py +3 -33
- vellum/workflows/workflows/base.py +350 -39
- vellum/workflows/workflows/event_filters.py +13 -0
- vellum/workflows/workflows/tests/test_base_workflow.py +118 -6
- vellum/workflows/workflows/tests/test_event_filters.py +126 -0
- {vellum_ai-0.14.63.dist-info → vellum_ai-1.11.2.dist-info}/METADATA +12 -13
- vellum_ai-1.11.2.dist-info/RECORD +2177 -0
- vellum_ai-1.11.2.dist-info/entry_points.txt +4 -0
- vellum_cli/__init__.py +34 -4
- vellum_cli/config.py +5 -3
- vellum_cli/image_push.py +106 -8
- vellum_cli/move.py +56 -0
- vellum_cli/ping.py +6 -0
- vellum_cli/pull.py +48 -14
- vellum_cli/push.py +103 -26
- vellum_cli/tests/conftest.py +6 -0
- vellum_cli/tests/test_image_push.py +190 -12
- vellum_cli/tests/test_image_push_error_handling.py +258 -0
- vellum_cli/tests/test_init.py +7 -24
- vellum_cli/tests/test_move.py +154 -0
- vellum_cli/tests/test_ping.py +15 -0
- vellum_cli/tests/test_pull.py +42 -61
- vellum_cli/tests/test_push.py +443 -11
- vellum_ee/assets/node-definitions.json +1135 -0
- vellum_ee/scripts/generate_node_definitions.py +89 -0
- vellum_ee/workflows/display/base.py +29 -55
- vellum_ee/workflows/display/editor/types.py +3 -0
- vellum_ee/workflows/display/exceptions.py +3 -0
- vellum_ee/workflows/display/nodes/base_node_display.py +164 -56
- vellum_ee/workflows/display/nodes/tests/test_base_node_display.py +149 -3
- vellum_ee/workflows/display/nodes/vellum/__init__.py +2 -0
- vellum_ee/workflows/display/nodes/vellum/api_node.py +26 -13
- vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py +3 -3
- vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +23 -7
- vellum_ee/workflows/display/nodes/vellum/conditional_node.py +18 -7
- vellum_ee/workflows/display/nodes/vellum/error_node.py +2 -4
- vellum_ee/workflows/display/nodes/vellum/final_output_node.py +3 -14
- vellum_ee/workflows/display/nodes/vellum/function_node.py +14 -0
- vellum_ee/workflows/display/nodes/vellum/guardrail_node.py +2 -5
- vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py +77 -44
- vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py +33 -10
- vellum_ee/workflows/display/nodes/vellum/map_node.py +29 -15
- vellum_ee/workflows/display/nodes/vellum/merge_node.py +2 -5
- vellum_ee/workflows/display/nodes/vellum/note_node.py +2 -3
- vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py +13 -9
- vellum_ee/workflows/display/nodes/vellum/retry_node.py +5 -6
- vellum_ee/workflows/display/nodes/vellum/search_node.py +76 -19
- vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py +21 -10
- vellum_ee/workflows/display/nodes/vellum/templating_node.py +3 -6
- vellum_ee/workflows/display/nodes/vellum/tests/test_api_node.py +65 -0
- vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py +176 -3
- vellum_ee/workflows/display/nodes/vellum/tests/test_final_output_node.py +80 -0
- vellum_ee/workflows/display/nodes/vellum/tests/test_inline_subworkflow_node.py +88 -0
- vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_deployment_node.py +71 -1
- vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py +115 -13
- vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py +1 -1
- vellum_ee/workflows/display/nodes/vellum/tests/test_search_node.py +104 -0
- vellum_ee/workflows/display/nodes/vellum/tests/test_subworkflow_deployment_node.py +1 -1
- vellum_ee/workflows/display/nodes/vellum/tests/test_templating_node.py +2 -2
- vellum_ee/workflows/display/nodes/vellum/tests/test_tool_calling_node.py +526 -49
- vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py +2 -2
- vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py +8 -9
- vellum_ee/workflows/display/nodes/vellum/try_node.py +5 -6
- vellum_ee/workflows/display/tests/test_base_workflow_display.py +383 -9
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py +2 -2
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py +102 -39
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +233 -90
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py +21 -17
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py +76 -64
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py +69 -12
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py +68 -46
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py +92 -80
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py +193 -177
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py +14 -14
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py +14 -9
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py +28 -17
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py +20 -16
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py +386 -31
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py +59 -46
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +41 -32
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py +37 -33
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py +73 -61
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py +40 -36
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_set_state_node_serialization.py +86 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py +25 -21
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py +22 -18
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py +13 -8
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_composio_serialization.py +87 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py +313 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_mcp_serialization.py +65 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_parent_input.py +89 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py +57 -23
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_vellum_integration_serialization.py +68 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_workflow_deployment_serialization.py +107 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py +2 -2
- vellum_ee/workflows/display/tests/workflow_serialization/test_chat_message_dict_reference_serialization.py +108 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py +15 -10
- vellum_ee/workflows/display/tests/workflow_serialization/test_final_output_node_map_reference_serialization.py +88 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_integration_trigger_serialization.py +306 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_integration_trigger_with_entrypoint_node_id.py +88 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_list_vellum_document_serialization.py +65 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_manual_trigger_serialization.py +110 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_map_node_with_terminal_nodes_serialization.py +62 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_multi_trigger_same_node_serialization.py +99 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_scheduled_trigger_serialization.py +267 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_terminal_node_any_serialization.py +49 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_trigger_display_from_display_class.py +153 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_web_search_node_serialization.py +72 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_workflow_input_parameterization_error.py +37 -0
- vellum_ee/workflows/display/types.py +29 -2
- vellum_ee/workflows/display/utils/auto_layout.py +130 -0
- vellum_ee/workflows/display/utils/events.py +57 -0
- vellum_ee/workflows/display/utils/exceptions.py +19 -0
- vellum_ee/workflows/display/utils/expressions.py +231 -28
- vellum_ee/workflows/display/utils/metadata.py +146 -0
- vellum_ee/workflows/display/utils/registry.py +46 -0
- vellum_ee/workflows/display/utils/tests/__init__.py +0 -0
- vellum_ee/workflows/display/utils/tests/test_auto_layout.py +56 -0
- vellum_ee/workflows/display/utils/tests/test_events.py +185 -0
- vellum_ee/workflows/display/utils/tests/test_expressions.py +92 -0
- vellum_ee/workflows/display/utils/vellum.py +39 -4
- vellum_ee/workflows/display/vellum.py +2 -128
- vellum_ee/workflows/display/workflows/__init__.py +0 -1
- vellum_ee/workflows/display/workflows/base_workflow_display.py +727 -95
- vellum_ee/workflows/display/workflows/tests/test_workflow_display.py +318 -28
- vellum_ee/workflows/server/virtual_file_loader.py +131 -6
- vellum_ee/workflows/tests/local_workflow/display/nodes/final_output.py +1 -1
- vellum_ee/workflows/tests/local_workflow/display/nodes/templating_node.py +1 -1
- vellum_ee/workflows/tests/local_workflow/display/workflow.py +11 -14
- vellum_ee/workflows/tests/test_display_meta.py +41 -0
- vellum_ee/workflows/tests/test_registry.py +169 -0
- vellum_ee/workflows/tests/test_serialize_module.py +265 -0
- vellum_ee/workflows/tests/test_server.py +619 -44
- vellum_ee/workflows/tests/test_virtual_files.py +48 -0
- vellum/client/resources/release_reviews/client.py +0 -137
- vellum/workflows/nodes/experimental/openai_chat_completion_node/__init__.py +0 -5
- vellum/workflows/nodes/experimental/openai_chat_completion_node/node.py +0 -266
- vellum/workflows/nodes/experimental/tool_calling_node/__init__.py +0 -3
- vellum/workflows/nodes/experimental/tool_calling_node/node.py +0 -135
- vellum/workflows/nodes/experimental/tool_calling_node/tests/test_node.py +0 -53
- vellum/workflows/nodes/experimental/tool_calling_node/utils.py +0 -259
- vellum_ai-0.14.63.dist-info/RECORD +0 -1719
- vellum_ai-0.14.63.dist-info/entry_points.txt +0 -3
- vellum_ee/workflows/display/workflows/vellum_workflow_display.py +0 -9
- /vellum/{workflows/nodes/displayable/bases/inline_prompt_node → prompts}/constants.py +0 -0
- {vellum_ai-0.14.63.dist-info → vellum_ai-1.11.2.dist-info}/LICENSE +0 -0
- {vellum_ai-0.14.63.dist-info → vellum_ai-1.11.2.dist-info}/WHEEL +0 -0
|
@@ -1,15 +1,36 @@
|
|
|
1
|
+
from abc import ABC, ABCMeta, abstractmethod
|
|
2
|
+
from collections.abc import Callable as CollectionsCallable
|
|
1
3
|
from dataclasses import field
|
|
2
4
|
from functools import cached_property, reduce
|
|
3
5
|
import inspect
|
|
4
6
|
from types import MappingProxyType
|
|
5
7
|
from uuid import UUID, uuid4
|
|
6
|
-
from typing import
|
|
8
|
+
from typing import (
|
|
9
|
+
Any,
|
|
10
|
+
Callable as TypingCallable,
|
|
11
|
+
Dict,
|
|
12
|
+
Generic,
|
|
13
|
+
Iterator,
|
|
14
|
+
Optional,
|
|
15
|
+
Set,
|
|
16
|
+
Tuple,
|
|
17
|
+
Type,
|
|
18
|
+
TypeVar,
|
|
19
|
+
Union,
|
|
20
|
+
cast,
|
|
21
|
+
get_args,
|
|
22
|
+
get_origin,
|
|
23
|
+
)
|
|
7
24
|
|
|
8
25
|
from vellum.workflows.constants import undefined
|
|
9
26
|
from vellum.workflows.descriptors.base import BaseDescriptor
|
|
27
|
+
from vellum.workflows.descriptors.exceptions import InvalidExpressionException
|
|
10
28
|
from vellum.workflows.descriptors.utils import is_unresolved, resolve_value
|
|
11
29
|
from vellum.workflows.errors.types import WorkflowErrorCode
|
|
30
|
+
from vellum.workflows.events.node import NodeExecutionStreamingEvent
|
|
12
31
|
from vellum.workflows.exceptions import NodeException
|
|
32
|
+
from vellum.workflows.executable import BaseExecutable
|
|
33
|
+
from vellum.workflows.expressions.accessor import AccessorExpression
|
|
13
34
|
from vellum.workflows.graph import Graph
|
|
14
35
|
from vellum.workflows.graph.graph import GraphTarget
|
|
15
36
|
from vellum.workflows.inputs.base import BaseInputs
|
|
@@ -39,18 +60,18 @@ def _is_nested_class(nested: Any, parent: Type) -> bool:
|
|
|
39
60
|
) or any(_is_nested_class(nested, base) for base in parent.__bases__)
|
|
40
61
|
|
|
41
62
|
|
|
42
|
-
def _is_annotated(cls: Type, name: str) ->
|
|
63
|
+
def _is_annotated(cls: Type, name: str) -> Any:
|
|
43
64
|
if name in cls.__annotations__:
|
|
44
|
-
return
|
|
65
|
+
return cls.__annotations__[name]
|
|
45
66
|
|
|
46
67
|
for base in cls.__bases__:
|
|
47
|
-
if _is_annotated(base, name):
|
|
48
|
-
return
|
|
68
|
+
if annotation := _is_annotated(base, name):
|
|
69
|
+
return annotation
|
|
49
70
|
|
|
50
|
-
return
|
|
71
|
+
return None
|
|
51
72
|
|
|
52
73
|
|
|
53
|
-
class BaseNodeMeta(
|
|
74
|
+
class BaseNodeMeta(ABCMeta):
|
|
54
75
|
def __new__(mcs, name: str, bases: Tuple[Type, ...], dct: Dict[str, Any]) -> Any:
|
|
55
76
|
if "Outputs" in dct:
|
|
56
77
|
outputs_class = dct["Outputs"]
|
|
@@ -91,7 +112,17 @@ class BaseNodeMeta(type):
|
|
|
91
112
|
if issubclass(base, BaseNode):
|
|
92
113
|
ports_dct = {p.name: Port(default=p.default) for p in base.Ports}
|
|
93
114
|
ports_dct["__module__"] = dct["__module__"]
|
|
94
|
-
dct["Ports"] = type(f"{name}.Ports", (
|
|
115
|
+
dct["Ports"] = type(f"{name}.Ports", (base.Ports,), ports_dct)
|
|
116
|
+
break
|
|
117
|
+
|
|
118
|
+
if "Display" not in dct:
|
|
119
|
+
for base in reversed(bases):
|
|
120
|
+
if issubclass(base, BaseNode):
|
|
121
|
+
dct["Display"] = type(
|
|
122
|
+
f"{name}.Display",
|
|
123
|
+
(base.Display,),
|
|
124
|
+
{"__module__": dct["__module__"]},
|
|
125
|
+
)
|
|
95
126
|
break
|
|
96
127
|
|
|
97
128
|
if "Execution" not in dct:
|
|
@@ -117,17 +148,19 @@ class BaseNodeMeta(type):
|
|
|
117
148
|
cls = super().__new__(mcs, name, bases, dct)
|
|
118
149
|
node_class = cast(Type["BaseNode"], cls)
|
|
119
150
|
|
|
120
|
-
node_class.Outputs.
|
|
151
|
+
node_class.Outputs.__parent_class__ = node_class
|
|
121
152
|
|
|
122
153
|
# Add cls to relevant nested classes, since python should've been doing this by default
|
|
123
154
|
for port in node_class.Ports:
|
|
124
155
|
port.node_class = node_class
|
|
125
|
-
port.validate()
|
|
126
156
|
|
|
127
157
|
node_class.Execution.node_class = node_class
|
|
128
158
|
node_class.Trigger.node_class = node_class
|
|
129
159
|
node_class.ExternalInputs.__parent_class__ = node_class
|
|
130
|
-
|
|
160
|
+
|
|
161
|
+
# Use new ID generation (module + qualname)
|
|
162
|
+
node_class.__id__ = uuid4_from_hash(f"{node_class.__module__}.{node_class.__qualname__}")
|
|
163
|
+
|
|
131
164
|
node_class.__output_ids__ = {
|
|
132
165
|
ref.name: uuid4_from_hash(f"{node_class.__id__}|{ref.name}")
|
|
133
166
|
for ref in node_class.Outputs
|
|
@@ -148,8 +181,10 @@ class BaseNodeMeta(type):
|
|
|
148
181
|
try:
|
|
149
182
|
attribute = super().__getattribute__(name)
|
|
150
183
|
except AttributeError as e:
|
|
151
|
-
|
|
152
|
-
|
|
184
|
+
annotation = _is_annotated(cls, name)
|
|
185
|
+
origin_annotation = get_origin(annotation)
|
|
186
|
+
if origin_annotation is not CollectionsCallable and origin_annotation is not TypingCallable:
|
|
187
|
+
attribute = undefined
|
|
153
188
|
else:
|
|
154
189
|
raise e
|
|
155
190
|
|
|
@@ -212,6 +247,17 @@ class BaseNodeMeta(type):
|
|
|
212
247
|
yield attr_value
|
|
213
248
|
yielded_attr_names.add(attr_name)
|
|
214
249
|
|
|
250
|
+
@abstractmethod
|
|
251
|
+
def __validate__(cls) -> None:
|
|
252
|
+
"""
|
|
253
|
+
Validates the node.
|
|
254
|
+
Subclasses can override this method to implement their specific validation logic.
|
|
255
|
+
Called during serialization or explicit validation.
|
|
256
|
+
|
|
257
|
+
Default implementation performs no validation.
|
|
258
|
+
"""
|
|
259
|
+
pass
|
|
260
|
+
|
|
215
261
|
|
|
216
262
|
class _BaseNodeTriggerMeta(type):
|
|
217
263
|
def __eq__(self, other: Any) -> bool:
|
|
@@ -258,25 +304,28 @@ class _BaseNodeExecutionMeta(type):
|
|
|
258
304
|
NodeRunResponse = Union[BaseOutputs, Iterator[BaseOutput]]
|
|
259
305
|
|
|
260
306
|
|
|
261
|
-
class BaseNode(Generic[StateType], metaclass=BaseNodeMeta):
|
|
262
|
-
__id__: UUID = uuid4_from_hash(__qualname__)
|
|
263
|
-
__output_ids__: Dict[str, UUID] = {}
|
|
307
|
+
class BaseNode(Generic[StateType], ABC, BaseExecutable, metaclass=BaseNodeMeta):
|
|
264
308
|
state: StateType
|
|
265
309
|
_context: WorkflowContext
|
|
266
|
-
_inputs: MappingProxyType[NodeReference, Any]
|
|
310
|
+
_inputs: MappingProxyType[Union[NodeReference, AccessorExpression], Any]
|
|
311
|
+
|
|
312
|
+
__exclude_from_monitoring__: bool = False
|
|
267
313
|
|
|
268
314
|
class ExternalInputs(BaseInputs):
|
|
269
315
|
__descriptor_class__ = ExternalInputReference
|
|
270
316
|
|
|
271
|
-
# TODO: Consider using metaclasses to prevent the need for users to specify that the
|
|
272
|
-
# "Outputs" class inherits from "BaseOutputs" and do so automatically.
|
|
273
|
-
# https://app.shortcut.com/vellum/story/4008/auto-inherit-basenodeoutputs-in-outputs-classes
|
|
274
317
|
class Outputs(BaseOutputs):
|
|
275
|
-
|
|
318
|
+
__parent_class__: Type["BaseNode"] = field(init=False)
|
|
276
319
|
|
|
277
320
|
class Ports(NodePorts):
|
|
278
321
|
default = Port(default=True)
|
|
279
322
|
|
|
323
|
+
class Display:
|
|
324
|
+
"""Optional display metadata for visual representation."""
|
|
325
|
+
|
|
326
|
+
icon: Optional[str] = None
|
|
327
|
+
color: Optional[str] = None
|
|
328
|
+
|
|
280
329
|
class Trigger(metaclass=_BaseNodeTriggerMeta):
|
|
281
330
|
node_class: Type["BaseNode"]
|
|
282
331
|
merge_behavior = MergeBehavior.AWAIT_ATTRIBUTES
|
|
@@ -300,7 +349,14 @@ class BaseNode(Generic[StateType], metaclass=BaseNodeMeta):
|
|
|
300
349
|
if not descriptor.instance:
|
|
301
350
|
continue
|
|
302
351
|
|
|
303
|
-
|
|
352
|
+
try:
|
|
353
|
+
resolved_value = resolve_value(descriptor.instance, state, path=descriptor.name)
|
|
354
|
+
except InvalidExpressionException as e:
|
|
355
|
+
raise NodeException(
|
|
356
|
+
message=str(e),
|
|
357
|
+
code=WorkflowErrorCode.INVALID_INPUTS,
|
|
358
|
+
) from e
|
|
359
|
+
|
|
304
360
|
if is_unresolved(resolved_value):
|
|
305
361
|
return False
|
|
306
362
|
|
|
@@ -356,41 +412,15 @@ class BaseNode(Generic[StateType], metaclass=BaseNodeMeta):
|
|
|
356
412
|
state.meta.node_execution_cache._dependencies_invoked[execution_id].add(invoked_by)
|
|
357
413
|
return execution_id
|
|
358
414
|
|
|
359
|
-
# For AWAIT_ANY in workflows, we
|
|
360
|
-
#
|
|
361
|
-
# 2. The node is being re-executed because of a loop
|
|
362
|
-
# For case 1, we need to remove the fork id from the node_to_fork_id mapping
|
|
363
|
-
# For case 2, we need to check if the node is in a loop
|
|
415
|
+
# For AWAIT_ANY in workflows, we need to detect if the node is in a loop
|
|
416
|
+
# If the node is in a loop, we can trigger the node again
|
|
364
417
|
in_loop = False
|
|
365
|
-
# Default to true, will be set to false if the merged node has already been triggered
|
|
366
|
-
should_retrigger = True
|
|
367
418
|
if cls.merge_behavior == MergeBehavior.AWAIT_ANY:
|
|
368
|
-
# Get the
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
#
|
|
372
|
-
if
|
|
373
|
-
fork_id = state.meta.node_execution_cache.__node_to_fork_id__.get(invoked_by_node, None)
|
|
374
|
-
if fork_id:
|
|
375
|
-
# If the invoked by node has a fork id and that fork id is in __all_fork_ids__
|
|
376
|
-
# We will
|
|
377
|
-
# 1. remove the fork id from __all_fork_ids__
|
|
378
|
-
# 2. remove the fork id from the __node_to_fork_id__ mapping
|
|
379
|
-
# else (this mean the fork has already been triggered)
|
|
380
|
-
# remove the id from the node_to_fork_id mapping and not retrigger again
|
|
381
|
-
all_fork_ids = state.meta.node_execution_cache.__all_fork_ids__
|
|
382
|
-
if fork_id in all_fork_ids:
|
|
383
|
-
# When the next forked node merge, it will not trigger the node again
|
|
384
|
-
# We should consider adding a lock here to prevent race condition
|
|
385
|
-
all_fork_ids.remove(fork_id)
|
|
386
|
-
state.meta.node_execution_cache.__node_to_fork_id__.pop(invoked_by_node, None)
|
|
387
|
-
else:
|
|
388
|
-
should_retrigger = False
|
|
389
|
-
state.meta.node_execution_cache.__node_to_fork_id__.pop(invoked_by_node, None)
|
|
390
|
-
|
|
391
|
-
# If should_retrigger is false, then we will not trigger the node already
|
|
392
|
-
# So we don't need to check loop behavior
|
|
393
|
-
if should_retrigger:
|
|
419
|
+
# Get the latest fulfilled execution ID of current node
|
|
420
|
+
fulfilled_stack = state.meta.node_execution_cache._node_executions_fulfilled[cls.node_class]
|
|
421
|
+
current_latest_fulfilled_id = fulfilled_stack.peek() if not fulfilled_stack.is_empty() else None
|
|
422
|
+
# If the current node has not been fulfilled yet, we don't need to check for loop
|
|
423
|
+
if current_latest_fulfilled_id is not None:
|
|
394
424
|
# Trace back through the dependency chain to detect if this node triggers itself
|
|
395
425
|
visited = set()
|
|
396
426
|
current_execution_id = invoked_by
|
|
@@ -416,15 +446,18 @@ class BaseNode(Generic[StateType], metaclass=BaseNodeMeta):
|
|
|
416
446
|
current_execution_id
|
|
417
447
|
)
|
|
418
448
|
|
|
419
|
-
# If we've found our target node class in the chain
|
|
449
|
+
# If we've found our target node class in the chain
|
|
420
450
|
if current_node_class == cls.node_class:
|
|
421
|
-
|
|
451
|
+
# Check if the execution id is the same as the latest fulfilled execution id
|
|
452
|
+
# If yes, we're in a loop
|
|
453
|
+
if current_execution_id == current_latest_fulfilled_id:
|
|
454
|
+
in_loop = True
|
|
455
|
+
# If not, current node has been triggered by other node,
|
|
456
|
+
# we can break out of the loop
|
|
422
457
|
break
|
|
423
458
|
|
|
424
459
|
for queued_node_execution_id in state.meta.node_execution_cache._node_executions_queued[cls.node_class]:
|
|
425
|
-
|
|
426
|
-
# So we don't need to trigger the node again
|
|
427
|
-
if not should_retrigger or (
|
|
460
|
+
if (
|
|
428
461
|
invoked_by not in state.meta.node_execution_cache._dependencies_invoked[queued_node_execution_id]
|
|
429
462
|
and not in_loop
|
|
430
463
|
):
|
|
@@ -446,6 +479,7 @@ class BaseNode(Generic[StateType], metaclass=BaseNodeMeta):
|
|
|
446
479
|
*,
|
|
447
480
|
state: Optional[StateType] = None,
|
|
448
481
|
context: Optional[WorkflowContext] = None,
|
|
482
|
+
inputs: Optional[Dict[str, Any]] = None,
|
|
449
483
|
):
|
|
450
484
|
if state:
|
|
451
485
|
self.state = state
|
|
@@ -466,37 +500,42 @@ class BaseNode(Generic[StateType], metaclass=BaseNodeMeta):
|
|
|
466
500
|
self.state = state_type()
|
|
467
501
|
|
|
468
502
|
self._context = context or WorkflowContext()
|
|
469
|
-
|
|
503
|
+
inputs_memo: Dict[str, Any] = inputs.copy() if inputs else {}
|
|
504
|
+
if inputs:
|
|
505
|
+
for input_key, input_value in inputs.items():
|
|
506
|
+
path_parts = input_key.split(".")
|
|
507
|
+
dir_path = path_parts[:-1]
|
|
508
|
+
leaf = path_parts[-1]
|
|
509
|
+
base: Any = self.__class__
|
|
510
|
+
|
|
511
|
+
for attr_name in dir_path:
|
|
512
|
+
if hasattr(base, attr_name):
|
|
513
|
+
base = getattr(base, attr_name)
|
|
514
|
+
elif isinstance(base, dict) and attr_name in base:
|
|
515
|
+
base = base[attr_name]
|
|
516
|
+
else:
|
|
517
|
+
break
|
|
518
|
+
|
|
519
|
+
if isinstance(base, dict):
|
|
520
|
+
base[leaf] = input_value
|
|
521
|
+
else:
|
|
522
|
+
setattr(base, leaf, input_value)
|
|
523
|
+
|
|
470
524
|
for descriptor in self.__class__:
|
|
471
|
-
if
|
|
525
|
+
if descriptor.instance is undefined:
|
|
526
|
+
setattr(self, descriptor.name, undefined)
|
|
472
527
|
continue
|
|
473
528
|
|
|
474
529
|
if any(isinstance(t, type) and issubclass(t, BaseDescriptor) for t in descriptor.types):
|
|
475
530
|
# We don't want to resolve attributes that are _meant_ to be descriptors
|
|
476
531
|
continue
|
|
477
532
|
|
|
478
|
-
resolved_value = resolve_value(descriptor.instance, self.state, path=descriptor.name, memo=
|
|
533
|
+
resolved_value = resolve_value(descriptor.instance, self.state, path=descriptor.name, memo=inputs_memo)
|
|
479
534
|
setattr(self, descriptor.name, resolved_value)
|
|
480
535
|
|
|
481
|
-
# Resolve descriptors set as defaults to the outputs class
|
|
482
|
-
def _outputs_post_init(outputs_self: "BaseNode.Outputs", **kwargs: Any) -> None:
|
|
483
|
-
for node_output_descriptor in self.Outputs:
|
|
484
|
-
if node_output_descriptor.name in kwargs:
|
|
485
|
-
continue
|
|
486
|
-
|
|
487
|
-
if isinstance(node_output_descriptor.instance, BaseDescriptor):
|
|
488
|
-
setattr(
|
|
489
|
-
outputs_self,
|
|
490
|
-
node_output_descriptor.name,
|
|
491
|
-
node_output_descriptor.instance.resolve(self.state),
|
|
492
|
-
)
|
|
493
|
-
delattr(self.Outputs, "_outputs_post_init")
|
|
494
|
-
|
|
495
|
-
setattr(self.Outputs, "_outputs_post_init", _outputs_post_init)
|
|
496
|
-
|
|
497
536
|
# We only want to store the attributes that were actually set as inputs, not every attribute that exists.
|
|
498
537
|
all_inputs = {}
|
|
499
|
-
for key, value in
|
|
538
|
+
for key, value in inputs_memo.items():
|
|
500
539
|
path_parts = key.split(".")
|
|
501
540
|
node_attribute_descriptor = getattr(self.__class__, path_parts[0])
|
|
502
541
|
inputs_key = reduce(lambda acc, part: acc[part], path_parts[1:], node_attribute_descriptor)
|
|
@@ -507,5 +546,28 @@ class BaseNode(Generic[StateType], metaclass=BaseNodeMeta):
|
|
|
507
546
|
def run(self) -> NodeRunResponse:
|
|
508
547
|
return self.Outputs()
|
|
509
548
|
|
|
549
|
+
def __cancel__(self, message: str) -> None:
|
|
550
|
+
"""
|
|
551
|
+
Called when the node should be cancelled. Override this method to propagate
|
|
552
|
+
cancellation to nested workflows or other resources.
|
|
553
|
+
|
|
554
|
+
Args:
|
|
555
|
+
message: The error message describing why the node is being cancelled
|
|
556
|
+
"""
|
|
557
|
+
pass
|
|
558
|
+
|
|
510
559
|
def __repr__(self) -> str:
|
|
511
560
|
return str(self.__class__)
|
|
561
|
+
|
|
562
|
+
__simulates_workflow_output__ = False
|
|
563
|
+
|
|
564
|
+
def __directly_emit_workflow_output__(
|
|
565
|
+
self, event: NodeExecutionStreamingEvent, workflow_output_descriptor: OutputReference
|
|
566
|
+
) -> bool:
|
|
567
|
+
"""
|
|
568
|
+
In the legacy workflow runner, there was support for emitting streaming workflow outputs for prompt nodes
|
|
569
|
+
connected to terminal nodes. These two private methods provides a hacky, intentionally short-lived workaround
|
|
570
|
+
for us to enable this until we can directly reference prompt outputs from the UI.
|
|
571
|
+
"""
|
|
572
|
+
|
|
573
|
+
return False
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
from
|
|
1
|
+
from abc import ABC
|
|
2
|
+
from uuid import UUID
|
|
3
|
+
from typing import TYPE_CHECKING, Any, Dict, Generic, Optional, Set, Tuple, Type
|
|
2
4
|
|
|
3
5
|
from vellum.workflows.inputs.base import BaseInputs
|
|
4
6
|
from vellum.workflows.nodes.bases.base import BaseNode, BaseNodeMeta
|
|
5
7
|
from vellum.workflows.outputs.base import BaseOutputs
|
|
6
8
|
from vellum.workflows.references.output import OutputReference
|
|
9
|
+
from vellum.workflows.types.core import MergeBehavior
|
|
7
10
|
from vellum.workflows.types.generics import StateType
|
|
8
11
|
|
|
9
12
|
if TYPE_CHECKING:
|
|
@@ -67,6 +70,7 @@ class _BaseAdornmentNodeMeta(BaseNodeMeta):
|
|
|
67
70
|
class BaseAdornmentNode(
|
|
68
71
|
BaseNode[StateType],
|
|
69
72
|
Generic[StateType],
|
|
73
|
+
ABC,
|
|
70
74
|
metaclass=_BaseAdornmentNodeMeta,
|
|
71
75
|
):
|
|
72
76
|
"""
|
|
@@ -77,6 +81,56 @@ class BaseAdornmentNode(
|
|
|
77
81
|
__wrapped_node__: Optional[Type["BaseNode"]] = None
|
|
78
82
|
subworkflow: Type["BaseWorkflow"]
|
|
79
83
|
|
|
84
|
+
class Trigger(BaseNode.Trigger):
|
|
85
|
+
"""
|
|
86
|
+
Trigger class for adornment nodes that delegates to the wrapped node's Trigger
|
|
87
|
+
for proper merge behavior handling.
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
@classmethod
|
|
91
|
+
def should_initiate(
|
|
92
|
+
cls,
|
|
93
|
+
state: StateType,
|
|
94
|
+
dependencies: Set["Type[BaseNode]"],
|
|
95
|
+
node_span_id: UUID,
|
|
96
|
+
) -> bool:
|
|
97
|
+
"""
|
|
98
|
+
Delegates to the wrapped node's Trigger.should_initiate method to ensure
|
|
99
|
+
proper merge behavior (like AWAIT_ALL) is respected for initiation logic.
|
|
100
|
+
"""
|
|
101
|
+
# Get the wrapped node's Trigger class
|
|
102
|
+
wrapped_node = cls.node_class.__wrapped_node__
|
|
103
|
+
if wrapped_node is not None:
|
|
104
|
+
wrapped_trigger = wrapped_node.Trigger
|
|
105
|
+
# Only delegate if the wrapped node has a specific merge behavior
|
|
106
|
+
# that differs from the default AWAIT_ATTRIBUTES
|
|
107
|
+
if (
|
|
108
|
+
hasattr(wrapped_trigger, "merge_behavior")
|
|
109
|
+
and wrapped_trigger.merge_behavior != MergeBehavior.AWAIT_ATTRIBUTES
|
|
110
|
+
):
|
|
111
|
+
return wrapped_trigger.should_initiate(state, dependencies, node_span_id)
|
|
112
|
+
|
|
113
|
+
# Fallback to the base implementation if no wrapped node
|
|
114
|
+
return super().should_initiate(state, dependencies, node_span_id)
|
|
115
|
+
|
|
116
|
+
@classmethod
|
|
117
|
+
def _queue_node_execution(
|
|
118
|
+
cls, state: StateType, dependencies: set[Type[BaseNode]], invoked_by: Optional[UUID] = None
|
|
119
|
+
) -> UUID:
|
|
120
|
+
"""
|
|
121
|
+
Delegates to the wrapped node's Trigger._queue_node_execution method to ensure
|
|
122
|
+
proper merge behavior (like AWAIT_ALL) is respected for dependency tracking.
|
|
123
|
+
"""
|
|
124
|
+
# Get the wrapped node's Trigger class
|
|
125
|
+
wrapped_node = cls.node_class.__wrapped_node__
|
|
126
|
+
if wrapped_node is not None:
|
|
127
|
+
wrapped_trigger = wrapped_node.Trigger
|
|
128
|
+
# Delegate to the wrapped node's trigger logic for queuing
|
|
129
|
+
return wrapped_trigger._queue_node_execution(state, dependencies, invoked_by)
|
|
130
|
+
|
|
131
|
+
# Fallback to the base implementation if no wrapped node
|
|
132
|
+
return super()._queue_node_execution(state, dependencies, invoked_by)
|
|
133
|
+
|
|
80
134
|
@classmethod
|
|
81
135
|
def __annotate_outputs_class__(cls, outputs_class: Type[BaseOutputs], reference: OutputReference) -> None:
|
|
82
136
|
# Subclasses of BaseAdornableNode can override this method to provider their own
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import pytest
|
|
2
2
|
from uuid import UUID
|
|
3
|
-
from typing import Optional
|
|
3
|
+
from typing import Optional, Set
|
|
4
4
|
|
|
5
|
+
from vellum.client.core.pydantic_utilities import UniversalBaseModel
|
|
5
6
|
from vellum.client.types.string_vellum_value_request import StringVellumValueRequest
|
|
6
|
-
from vellum.core.pydantic_utilities import UniversalBaseModel
|
|
7
7
|
from vellum.workflows.constants import undefined
|
|
8
8
|
from vellum.workflows.descriptors.tests.test_utils import FixtureState
|
|
9
9
|
from vellum.workflows.inputs.base import BaseInputs
|
|
10
10
|
from vellum.workflows.nodes import FinalOutputNode
|
|
11
11
|
from vellum.workflows.nodes.bases.base import BaseNode
|
|
12
|
-
from vellum.workflows.outputs.base import BaseOutputs
|
|
12
|
+
from vellum.workflows.outputs.base import BaseOutput, BaseOutputs
|
|
13
|
+
from vellum.workflows.ports.port import Port
|
|
14
|
+
from vellum.workflows.references.constant import ConstantValueReference
|
|
13
15
|
from vellum.workflows.references.node import NodeReference
|
|
14
16
|
from vellum.workflows.references.output import OutputReference
|
|
15
17
|
from vellum.workflows.state.base import BaseState, StateMeta
|
|
@@ -142,7 +144,7 @@ def test_base_node__default_id():
|
|
|
142
144
|
my_id = MyNode.__id__
|
|
143
145
|
|
|
144
146
|
# THEN it should equal the hash of `test_base_node__default_id.<locals>.MyNode`
|
|
145
|
-
assert my_id == UUID("
|
|
147
|
+
assert my_id == UUID("3207dd3d-b26f-4476-969f-37697683f850")
|
|
146
148
|
|
|
147
149
|
|
|
148
150
|
def test_base_node__node_resolution__descriptor_in_fern_pydantic():
|
|
@@ -333,3 +335,47 @@ def test_base_node__node_reference_of_inherited_annotation():
|
|
|
333
335
|
# THEN the node reference is of the correct type
|
|
334
336
|
assert isinstance(node_reference, NodeReference)
|
|
335
337
|
assert node_reference.name == "foo"
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
def test_base_node__ports_inheritance():
|
|
341
|
+
# GIVEN a node with one port
|
|
342
|
+
class MyNode(BaseNode):
|
|
343
|
+
class Ports(BaseNode.Ports):
|
|
344
|
+
foo = Port.on_if(ConstantValueReference(True))
|
|
345
|
+
|
|
346
|
+
def __lt__(self, output: BaseOutput) -> Set[Port]:
|
|
347
|
+
return {self.foo}
|
|
348
|
+
|
|
349
|
+
# AND a node that inherits from MyNode
|
|
350
|
+
class InheritedNode(MyNode):
|
|
351
|
+
pass
|
|
352
|
+
|
|
353
|
+
# WHEN we collect the ports
|
|
354
|
+
ports = [port.name for port in InheritedNode.Ports]
|
|
355
|
+
|
|
356
|
+
# THEN the inheritance is correct
|
|
357
|
+
inherited_ports = InheritedNode.Ports()
|
|
358
|
+
assert inherited_ports.__lt__(BaseOutput(name="foo")) == {InheritedNode.Ports.foo}
|
|
359
|
+
|
|
360
|
+
# AND the ports are correct
|
|
361
|
+
assert ports == ["foo"]
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
def test_base_node__ports_inheritance__cumulative_ports():
|
|
365
|
+
# GIVEN a node with one port
|
|
366
|
+
class MyNode(BaseNode):
|
|
367
|
+
class Ports(BaseNode.Ports):
|
|
368
|
+
foo = Port.on_if(ConstantValueReference(True))
|
|
369
|
+
|
|
370
|
+
# AND a node that inherits from MyNode with another port
|
|
371
|
+
class InheritedNode(MyNode):
|
|
372
|
+
class Ports(MyNode.Ports):
|
|
373
|
+
bar = Port.on_if(ConstantValueReference(True))
|
|
374
|
+
|
|
375
|
+
# WHEN we collect the ports
|
|
376
|
+
ports = [port.name for port in InheritedNode.Ports]
|
|
377
|
+
|
|
378
|
+
# THEN the ports are correct
|
|
379
|
+
# Potentially in the future, we support inheriting ports from multiple parents.
|
|
380
|
+
# For now, we take only the declared ports, so that not all nodes have the default port.
|
|
381
|
+
assert ports == ["bar"]
|
|
@@ -1,20 +1,29 @@
|
|
|
1
|
-
from typing import ClassVar, Union
|
|
1
|
+
from typing import ClassVar, Generic, Union
|
|
2
2
|
|
|
3
3
|
from vellum.client.types.vellum_error import VellumError
|
|
4
4
|
from vellum.workflows.errors.types import WorkflowError, WorkflowErrorCode, vellum_error_to_workflow_error
|
|
5
5
|
from vellum.workflows.exceptions import NodeException
|
|
6
6
|
from vellum.workflows.nodes.bases.base import BaseNode
|
|
7
|
+
from vellum.workflows.ports import NodePorts
|
|
8
|
+
from vellum.workflows.types.generics import StateType
|
|
7
9
|
|
|
8
10
|
|
|
9
|
-
class ErrorNode(BaseNode):
|
|
11
|
+
class ErrorNode(BaseNode[StateType], Generic[StateType]):
|
|
10
12
|
"""
|
|
11
13
|
Used to raise an error to reject the surrounding Workflow.
|
|
12
14
|
|
|
13
15
|
error: Union[str, VellumError] - The error to raise.
|
|
14
16
|
"""
|
|
15
17
|
|
|
18
|
+
class Display(BaseNode.Display):
|
|
19
|
+
icon = "vellum:icon:hexagon-exclamation"
|
|
20
|
+
color = "lipstick"
|
|
21
|
+
|
|
16
22
|
error: ClassVar[Union[str, WorkflowError, VellumError]]
|
|
17
23
|
|
|
24
|
+
class Ports(NodePorts):
|
|
25
|
+
pass
|
|
26
|
+
|
|
18
27
|
def run(self) -> BaseNode.Outputs:
|
|
19
28
|
if isinstance(self.error, str):
|
|
20
29
|
raise NodeException(message=self.error, code=WorkflowErrorCode.USER_DEFINED_ERROR)
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from threading import Event as ThreadingEvent
|
|
1
2
|
from typing import TYPE_CHECKING, Any, ClassVar, Dict, Generic, Iterator, Optional, Set, Tuple, Type, TypeVar, Union
|
|
2
3
|
|
|
3
4
|
from vellum.workflows.constants import undefined
|
|
@@ -13,7 +14,6 @@ from vellum.workflows.state.base import BaseState
|
|
|
13
14
|
from vellum.workflows.state.context import WorkflowContext
|
|
14
15
|
from vellum.workflows.types.core import EntityInputsInterface
|
|
15
16
|
from vellum.workflows.types.generics import InputsType, StateType
|
|
16
|
-
from vellum.workflows.utils.uuids import uuid4_from_hash
|
|
17
17
|
from vellum.workflows.workflows.event_filters import all_workflow_event_filter
|
|
18
18
|
|
|
19
19
|
if TYPE_CHECKING:
|
|
@@ -72,6 +72,8 @@ class InlineSubworkflowNode(
|
|
|
72
72
|
subworkflow_inputs: ClassVar[Union[EntityInputsInterface, BaseInputs, Type[undefined]]] = undefined
|
|
73
73
|
|
|
74
74
|
def run(self) -> Iterator[BaseOutput]:
|
|
75
|
+
self._child_cancel_signal = ThreadingEvent()
|
|
76
|
+
|
|
75
77
|
with execution_context(parent_context=get_parent_context()):
|
|
76
78
|
subworkflow = self.subworkflow(
|
|
77
79
|
parent_state=self.state,
|
|
@@ -81,13 +83,17 @@ class InlineSubworkflowNode(
|
|
|
81
83
|
inputs=self._compile_subworkflow_inputs(),
|
|
82
84
|
event_filter=all_workflow_event_filter,
|
|
83
85
|
node_output_mocks=self._context._get_all_node_output_mocks(),
|
|
86
|
+
cancel_signal=self._child_cancel_signal,
|
|
84
87
|
)
|
|
85
88
|
|
|
86
89
|
outputs: Optional[BaseOutputs] = None
|
|
90
|
+
exception: Optional[NodeException] = None
|
|
87
91
|
fulfilled_output_names: Set[str] = set()
|
|
88
92
|
|
|
89
93
|
for event in subworkflow_stream:
|
|
90
94
|
self._context._emit_subworkflow_event(event)
|
|
95
|
+
if exception:
|
|
96
|
+
continue
|
|
91
97
|
|
|
92
98
|
if not is_workflow_event(event):
|
|
93
99
|
continue
|
|
@@ -101,7 +107,15 @@ class InlineSubworkflowNode(
|
|
|
101
107
|
elif event.name == "workflow.execution.fulfilled":
|
|
102
108
|
outputs = event.outputs
|
|
103
109
|
elif event.name == "workflow.execution.rejected":
|
|
104
|
-
|
|
110
|
+
exception = NodeException.of(event.error)
|
|
111
|
+
elif event.name == "workflow.execution.paused":
|
|
112
|
+
exception = NodeException(
|
|
113
|
+
code=WorkflowErrorCode.INVALID_OUTPUTS,
|
|
114
|
+
message="Subworkflow unexpectedly paused",
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
if exception:
|
|
118
|
+
raise exception
|
|
105
119
|
|
|
106
120
|
if outputs is None:
|
|
107
121
|
raise NodeException(
|
|
@@ -118,7 +132,19 @@ class InlineSubworkflowNode(
|
|
|
118
132
|
value=output_value,
|
|
119
133
|
)
|
|
120
134
|
|
|
135
|
+
def __cancel__(self, message: str) -> None:
|
|
136
|
+
"""
|
|
137
|
+
Propagate cancellation to the nested workflow by setting its cancel signal.
|
|
138
|
+
"""
|
|
139
|
+
if hasattr(self, "_child_cancel_signal"):
|
|
140
|
+
self._child_cancel_signal.set()
|
|
141
|
+
|
|
121
142
|
def _compile_subworkflow_inputs(self) -> InputsType:
|
|
143
|
+
if self.subworkflow is None:
|
|
144
|
+
raise NodeException(
|
|
145
|
+
message="InlineSubworkflowNode requires a subworkflow to be defined",
|
|
146
|
+
code=WorkflowErrorCode.INVALID_INPUTS,
|
|
147
|
+
)
|
|
122
148
|
inputs_class = self.subworkflow.get_inputs_class()
|
|
123
149
|
try:
|
|
124
150
|
if self.subworkflow_inputs is undefined:
|
|
@@ -145,4 +171,4 @@ class InlineSubworkflowNode(
|
|
|
145
171
|
if cls.__output_ids__ is None:
|
|
146
172
|
cls.__output_ids__ = {}
|
|
147
173
|
|
|
148
|
-
cls.__output_ids__[reference.name] =
|
|
174
|
+
cls.__output_ids__[reference.name] = reference.id
|
|
@@ -9,6 +9,7 @@ from vellum.workflows.nodes.core.try_node.node import TryNode
|
|
|
9
9
|
from vellum.workflows.outputs.base import BaseOutput
|
|
10
10
|
from vellum.workflows.state.base import BaseState
|
|
11
11
|
from vellum.workflows.workflows.base import BaseWorkflow
|
|
12
|
+
from vellum.workflows.workflows.event_filters import all_workflow_event_filter
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
class Inputs(BaseInputs):
|
|
@@ -143,3 +144,37 @@ def test_inline_subworkflow_node__with_adornment():
|
|
|
143
144
|
outputs = list(node.run())
|
|
144
145
|
|
|
145
146
|
assert outputs[-1].name == "final_output" and outputs[-1].value == "hello"
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
@pytest.mark.skip(reason="Enable after we set is_dynamic on the subworkflow class")
|
|
150
|
+
def test_inline_subworkflow_node__is_dynamic_subworkflow():
|
|
151
|
+
"""Test that InlineSubworkflowNode sets is_dynamic=True on the subworkflow class"""
|
|
152
|
+
|
|
153
|
+
# GIVEN a subworkflow class
|
|
154
|
+
class TestSubworkflow(BaseWorkflow[BaseInputs, BaseState]):
|
|
155
|
+
graph = MyInnerNode
|
|
156
|
+
|
|
157
|
+
class Outputs(BaseWorkflow.Outputs):
|
|
158
|
+
out = MyInnerNode.Outputs.out
|
|
159
|
+
|
|
160
|
+
# AND a node that uses this subworkflow
|
|
161
|
+
class TestNode(InlineSubworkflowNode):
|
|
162
|
+
subworkflow = TestSubworkflow
|
|
163
|
+
|
|
164
|
+
# AND a workflow that uses this node
|
|
165
|
+
class TestWorkflow(BaseWorkflow[BaseInputs, BaseState]):
|
|
166
|
+
graph = TestNode
|
|
167
|
+
|
|
168
|
+
class Outputs(BaseWorkflow.Outputs):
|
|
169
|
+
out = TestNode.Outputs.out
|
|
170
|
+
|
|
171
|
+
# WHEN the workflow is executed
|
|
172
|
+
workflow = TestWorkflow()
|
|
173
|
+
events = list(workflow.stream(event_filter=all_workflow_event_filter))
|
|
174
|
+
|
|
175
|
+
# AND we should find workflow execution initiated events
|
|
176
|
+
initiated_events = [event for event in events if event.name == "workflow.execution.initiated"]
|
|
177
|
+
assert len(initiated_events) == 2 # Main workflow + inline workflow
|
|
178
|
+
|
|
179
|
+
assert initiated_events[0].body.workflow_definition.is_dynamic is False # Main workflow
|
|
180
|
+
assert initiated_events[1].body.workflow_definition.is_dynamic is True # Inline workflow
|