vellum-ai 0.14.41__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 +281 -8
- vellum/client/README.md +70 -17
- vellum/client/__init__.py +598 -1371
- vellum/client/core/__init__.py +5 -0
- vellum/client/core/api_error.py +13 -5
- vellum/client/core/client_wrapper.py +31 -5
- vellum/client/core/file.py +13 -8
- vellum/client/core/force_multipart.py +16 -0
- vellum/client/core/http_client.py +76 -20
- vellum/client/core/http_response.py +55 -0
- vellum/client/core/jsonable_encoder.py +0 -1
- vellum/client/core/pydantic_utilities.py +95 -119
- vellum/client/core/request_options.py +3 -0
- 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 +2489 -1038
- vellum/client/resources/__init__.py +16 -2
- vellum/client/resources/ad_hoc/__init__.py +2 -0
- vellum/client/resources/ad_hoc/client.py +173 -365
- 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 -185
- vellum/client/resources/container_images/raw_client.py +407 -0
- vellum/client/resources/deployments/__init__.py +2 -0
- vellum/client/resources/deployments/client.py +211 -424
- 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 -365
- 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 -89
- 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 -100
- 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 +210 -95
- vellum/client/resources/prompts/raw_client.py +353 -0
- vellum/client/resources/sandboxes/__init__.py +2 -0
- vellum/client/resources/sandboxes/client.py +69 -147
- 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 -151
- 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 +312 -355
- 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 -117
- 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 +258 -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 -94
- 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 +254 -4
- 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 +18 -17
- 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 +9 -8
- 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 +8 -7
- 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 +7 -6
- vellum/client/types/code_execution_node_result_data.py +7 -6
- 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 +8 -7
- 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_prompt_version_build_config_sandbox.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 +6 -5
- 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 +7 -6
- vellum/client/types/deployment_provider_payload_response.py +4 -4
- vellum/client/types/deployment_read.py +14 -13
- 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 +9 -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_body.py +3 -1
- vellum/client/types/execute_api_request_headers_value.py +1 -0
- vellum/client/types/execute_api_response.py +6 -7
- vellum/client/types/execute_api_response_json.py +7 -0
- 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 +7 -6
- vellum/client/types/execute_workflow_workflow_result_event.py +1 -0
- vellum/client/types/execution_array_vellum_value.py +9 -8
- 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 +7 -6
- vellum/client/types/external_test_case_execution_request.py +7 -6
- 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 +8 -9
- vellum/client/types/fulfilled_prompt_execution_meta.py +3 -3
- vellum/client/types/fulfilled_workflow_node_result_event.py +9 -8
- 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 +9 -8
- 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 +9 -8
- 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 +7 -6
- vellum/client/types/metric_definition_history_item.py +7 -6
- 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 +4 -4
- 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 +8 -7
- vellum/client/types/named_test_case_array_variable_value_request.py +8 -9
- 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 +21 -23
- vellum/client/types/node_execution_initiated_body.py +3 -3
- vellum/client/types/node_execution_initiated_event.py +21 -23
- vellum/client/types/node_execution_paused_body.py +3 -3
- vellum/client/types/node_execution_paused_event.py +21 -23
- vellum/client/types/node_execution_rejected_body.py +5 -4
- vellum/client/types/node_execution_rejected_event.py +21 -23
- vellum/client/types/node_execution_resumed_body.py +3 -3
- vellum/client/types/node_execution_resumed_event.py +21 -23
- vellum/client/types/node_execution_span.py +20 -20
- 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 +21 -23
- vellum/client/types/node_input_compiled_array_value.py +8 -7
- 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 +9 -8
- 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 +15 -18
- 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 +7 -6
- 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 +7 -6
- vellum/client/types/paginated_test_suite_run_execution_list.py +7 -6
- vellum/client/types/paginated_test_suite_test_case_list.py +7 -6
- 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 +14 -17
- 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 +7 -2
- vellum/client/types/prompt_exec_config.py +12 -12
- 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 +20 -0
- 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 +3 -2
- vellum/client/types/prompt_version_build_config_sandbox.py +22 -0
- 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 +9 -8
- 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 +6 -5
- 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 +8 -9
- 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 +10 -11
- 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 +12 -11
- vellum/client/types/slim_document.py +6 -5
- vellum/client/types/slim_document_document_to_document_index.py +9 -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 +13 -12
- vellum/client/types/slim_workflow_execution_read.py +21 -24
- vellum/client/types/span_link.py +16 -19
- 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 +9 -8
- 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 +8 -7
- 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 +7 -6
- vellum/client/types/templating_node_result_data.py +7 -6
- 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 +8 -7
- 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 +7 -6
- vellum/client/types/terminal_node_result_data.py +7 -6
- 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 +8 -7
- 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 +8 -7
- vellum/client/types/test_suite_run_execution_array_output.py +8 -7
- 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 +8 -7
- 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 +7 -6
- vellum/client/types/test_suite_run_external_exec_config_data.py +7 -6
- vellum/client/types/test_suite_run_external_exec_config_data_request.py +7 -8
- vellum/client/types/test_suite_run_external_exec_config_request.py +7 -8
- vellum/client/types/test_suite_run_metric_array_output.py +8 -7
- 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 +9 -8
- 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 +7 -6
- 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 +7 -8
- 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 +7 -8
- 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 +7 -8
- 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 +6 -5
- 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 -9
- vellum/client/types/vellum_value_logical_condition_request.py +10 -9
- 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 +10 -9
- 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 +17 -34
- vellum/client/types/workflow_deployment_history_item.py +7 -6
- vellum/client/types/workflow_deployment_parent_context.py +14 -17
- vellum/client/types/workflow_deployment_read.py +19 -12
- vellum/client/types/workflow_deployment_release.py +10 -9
- vellum/client/types/workflow_deployment_release_workflow_deployment.py +2 -2
- vellum/client/types/workflow_deployment_release_workflow_version.py +7 -6
- 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 +23 -29
- vellum/client/types/workflow_execution_actual.py +8 -7
- 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 +21 -23
- vellum/client/types/workflow_execution_initiated_body.py +3 -12
- vellum/client/types/workflow_execution_initiated_event.py +21 -27
- vellum/client/types/workflow_execution_node_result_event.py +7 -6
- vellum/client/types/workflow_execution_paused_body.py +4 -4
- vellum/client/types/workflow_execution_paused_event.py +21 -23
- vellum/client/types/workflow_execution_rejected_body.py +5 -4
- vellum/client/types/workflow_execution_rejected_event.py +21 -23
- vellum/client/types/workflow_execution_resumed_body.py +3 -3
- vellum/client/types/workflow_execution_resumed_event.py +21 -23
- vellum/client/types/workflow_execution_snapshotted_body.py +4 -3
- vellum/client/types/workflow_execution_snapshotted_event.py +21 -25
- vellum/client/types/workflow_execution_span.py +19 -23
- 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 +21 -23
- vellum/client/types/workflow_execution_usage_calculation_error.py +21 -0
- vellum/client/types/workflow_execution_usage_calculation_error_code_enum.py +7 -0
- vellum/client/types/workflow_execution_usage_calculation_fulfilled_body.py +3 -3
- vellum/client/types/workflow_execution_usage_result.py +24 -0
- vellum/client/types/workflow_execution_view_online_eval_metric_result.py +7 -8
- vellum/client/types/workflow_execution_workflow_result_event.py +7 -6
- 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 +9 -8
- 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 +15 -18
- 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 +11 -10
- vellum/client/types/workflow_result_event_output_data.py +7 -6
- vellum/client/types/workflow_result_event_output_data_array.py +9 -8
- 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 +14 -17
- 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/{types/node_event_display_context.py → core/force_multipart.py} +1 -1
- 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/{types/workflow_event_display_context.py → resources/folder_entities/raw_client.py} +1 -1
- 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_prompt_version_build_config_sandbox.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_api_response_json.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_push_response.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/prompt_version_build_config_sandbox.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_error.py +3 -0
- vellum/types/workflow_execution_usage_calculation_error_code_enum.py +3 -0
- vellum/types/workflow_execution_usage_result.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 +29 -2
- 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 +75 -18
- vellum/workflows/inputs/dataset_row.py +81 -0
- vellum/workflows/inputs/tests/test_inputs.py +196 -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 +238 -46
- vellum/workflows/nodes/bases/base_adornment_node.py +64 -1
- vellum/workflows/nodes/bases/tests/test_base_adornment_node.py +31 -0
- vellum/workflows/nodes/bases/tests/test_base_node.py +100 -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 +103 -90
- vellum/workflows/nodes/core/map_node/tests/test_node.py +178 -0
- vellum/workflows/nodes/core/retry_node/node.py +8 -1
- 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 +17 -1
- vellum/workflows/nodes/displayable/api_node/tests/test_api_node.py +177 -3
- 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 +299 -27
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/test_inline_prompt_node.py +663 -20
- vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py +84 -14
- 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 +46 -15
- vellum/workflows/nodes/displayable/code_execution_node/tests/{test_code_execution_node.py → test_node.py} +646 -5
- vellum/workflows/nodes/displayable/code_execution_node/utils.py +28 -74
- 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 +25 -5
- vellum/workflows/nodes/displayable/guardrail_node/test_node.py +29 -0
- 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 +18 -0
- vellum/workflows/nodes/displayable/search_node/tests/test_node.py +76 -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 +26 -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 -16
- 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 -0
- vellum/workflows/nodes/mocks.py +40 -9
- vellum/workflows/nodes/tests/test_mocks.py +2 -2
- vellum/workflows/nodes/tests/test_utils.py +42 -26
- vellum/workflows/nodes/utils.py +70 -7
- vellum/workflows/outputs/base.py +53 -12
- vellum/workflows/ports/node_ports.py +6 -2
- vellum/workflows/ports/port.py +28 -3
- vellum/workflows/ports/tests/test_port.py +45 -0
- vellum/workflows/ports/utils.py +70 -17
- 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 +3 -5
- vellum/workflows/references/trigger.py +77 -0
- vellum/workflows/references/workflow_input.py +5 -1
- 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 +659 -154
- vellum/workflows/sandbox.py +55 -9
- vellum/workflows/state/base.py +192 -64
- vellum/workflows/state/context.py +225 -6
- vellum/workflows/state/delta.py +20 -0
- vellum/workflows/state/encoder.py +2 -62
- 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 +105 -0
- 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 +14 -3
- vellum/workflows/types/utils.py +64 -13
- vellum/workflows/utils/files.py +28 -0
- vellum/workflows/utils/functions.py +284 -17
- 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 +516 -5
- 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 -21
- vellum/workflows/workflows/base.py +363 -39
- vellum/workflows/workflows/event_filters.py +13 -0
- vellum/workflows/workflows/tests/test_base_workflow.py +122 -10
- vellum/workflows/workflows/tests/test_event_filters.py +126 -0
- {vellum_ai-0.14.41.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 +42 -4
- vellum_cli/config.py +12 -5
- vellum_cli/image_push.py +120 -10
- vellum_cli/logger.py +11 -0
- vellum_cli/move.py +56 -0
- vellum_cli/ping.py +6 -0
- vellum_cli/pull.py +78 -14
- vellum_cli/push.py +149 -61
- vellum_cli/tests/conftest.py +6 -0
- vellum_cli/tests/test_image_push.py +295 -8
- 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 +133 -57
- vellum_cli/tests/test_push.py +708 -19
- 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 +211 -218
- vellum_ee/workflows/display/nodes/get_node_display_class.py +1 -25
- 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 +37 -12
- vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py +3 -3
- vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +30 -8
- vellum_ee/workflows/display/nodes/vellum/conditional_node.py +19 -7
- vellum_ee/workflows/display/nodes/vellum/error_node.py +23 -19
- vellum_ee/workflows/display/nodes/vellum/final_output_node.py +9 -19
- vellum_ee/workflows/display/nodes/vellum/function_node.py +14 -0
- vellum_ee/workflows/display/nodes/vellum/guardrail_node.py +4 -4
- vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py +114 -29
- vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py +35 -9
- vellum_ee/workflows/display/nodes/vellum/map_node.py +44 -25
- vellum_ee/workflows/display/nodes/vellum/merge_node.py +2 -4
- vellum_ee/workflows/display/nodes/vellum/note_node.py +2 -3
- vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py +28 -17
- vellum_ee/workflows/display/nodes/vellum/retry_node.py +6 -7
- vellum_ee/workflows/display/nodes/vellum/search_node.py +84 -18
- vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py +26 -14
- vellum_ee/workflows/display/nodes/vellum/templating_node.py +5 -5
- 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 +219 -3
- vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py +4 -0
- 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 +177 -0
- vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py +207 -6
- 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 +110 -0
- 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 +694 -0
- 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 +6 -7
- vellum_ee/workflows/display/tests/test_base_workflow_display.py +427 -8
- 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 +150 -125
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +277 -87
- 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 +320 -170
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py +14 -15
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py +14 -12
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py +28 -18
- 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 +621 -5
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py +73 -43
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +51 -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 +367 -36
- 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 +14 -10
- 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 +224 -0
- 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 -3
- 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 +20 -65
- 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 +32 -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 +487 -2
- 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 +49 -86
- 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 +778 -129
- vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py +3 -0
- vellum_ee/workflows/display/workflows/tests/test_workflow_display.py +752 -2
- 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 +89 -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 -254
- vellum/client/types/node_event_display_context.py +0 -30
- vellum/client/types/workflow_event_display_context.py +0 -28
- 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 -125
- vellum/workflows/nodes/experimental/tool_calling_node/utils.py +0 -128
- vellum_ai-0.14.41.dist-info/RECORD +0 -1704
- vellum_ai-0.14.41.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.41.dist-info → vellum_ai-1.11.2.dist-info}/LICENSE +0 -0
- {vellum_ai-0.14.41.dist-info → vellum_ai-1.11.2.dist-info}/WHEEL +0 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
from dataclasses import field
|
|
1
2
|
from datetime import datetime
|
|
2
3
|
from functools import lru_cache
|
|
3
4
|
import importlib
|
|
4
5
|
import inspect
|
|
5
|
-
|
|
6
|
+
import logging
|
|
7
|
+
import sys
|
|
6
8
|
from uuid import UUID, uuid4
|
|
7
9
|
from typing import (
|
|
8
10
|
Any,
|
|
@@ -25,10 +27,13 @@ from typing import (
|
|
|
25
27
|
overload,
|
|
26
28
|
)
|
|
27
29
|
|
|
30
|
+
from pydantic import ValidationError
|
|
31
|
+
|
|
28
32
|
from vellum.workflows.edges import Edge
|
|
29
33
|
from vellum.workflows.emitters.base import BaseWorkflowEmitter
|
|
30
34
|
from vellum.workflows.errors import WorkflowError, WorkflowErrorCode
|
|
31
35
|
from vellum.workflows.events.node import (
|
|
36
|
+
NodeEvent,
|
|
32
37
|
NodeExecutionFulfilledBody,
|
|
33
38
|
NodeExecutionFulfilledEvent,
|
|
34
39
|
NodeExecutionInitiatedBody,
|
|
@@ -42,6 +47,7 @@ from vellum.workflows.events.node import (
|
|
|
42
47
|
NodeExecutionStreamingBody,
|
|
43
48
|
NodeExecutionStreamingEvent,
|
|
44
49
|
)
|
|
50
|
+
from vellum.workflows.events.stream import WorkflowEventGenerator
|
|
45
51
|
from vellum.workflows.events.workflow import (
|
|
46
52
|
GenericWorkflowEvent,
|
|
47
53
|
WorkflowExecutionFulfilledBody,
|
|
@@ -59,10 +65,14 @@ from vellum.workflows.events.workflow import (
|
|
|
59
65
|
WorkflowExecutionStreamingBody,
|
|
60
66
|
WorkflowExecutionStreamingEvent,
|
|
61
67
|
)
|
|
68
|
+
from vellum.workflows.exceptions import WorkflowInitializationException
|
|
69
|
+
from vellum.workflows.executable import BaseExecutable
|
|
62
70
|
from vellum.workflows.graph import Graph
|
|
63
71
|
from vellum.workflows.inputs.base import BaseInputs
|
|
72
|
+
from vellum.workflows.loaders.base import BaseWorkflowFinder
|
|
64
73
|
from vellum.workflows.nodes.bases import BaseNode
|
|
65
74
|
from vellum.workflows.nodes.mocks import MockNodeExecutionArg
|
|
75
|
+
from vellum.workflows.nodes.utils import get_unadorned_node
|
|
66
76
|
from vellum.workflows.outputs import BaseOutputs
|
|
67
77
|
from vellum.workflows.resolvers.base import BaseWorkflowResolver
|
|
68
78
|
from vellum.workflows.runner import WorkflowRunner
|
|
@@ -70,11 +80,15 @@ from vellum.workflows.runner.runner import ExternalInputsArg, RunFromNodeArg
|
|
|
70
80
|
from vellum.workflows.state.base import BaseState, StateMeta
|
|
71
81
|
from vellum.workflows.state.context import WorkflowContext
|
|
72
82
|
from vellum.workflows.state.store import Store
|
|
83
|
+
from vellum.workflows.triggers.base import BaseTrigger
|
|
84
|
+
from vellum.workflows.types import CancelSignal
|
|
73
85
|
from vellum.workflows.types.generics import InputsType, StateType
|
|
74
86
|
from vellum.workflows.types.utils import get_original_base
|
|
75
87
|
from vellum.workflows.utils.uuids import uuid4_from_hash
|
|
76
88
|
from vellum.workflows.workflows.event_filters import workflow_event_filter
|
|
77
89
|
|
|
90
|
+
logger = logging.getLogger(__name__)
|
|
91
|
+
|
|
78
92
|
|
|
79
93
|
class _BaseWorkflowMeta(type):
|
|
80
94
|
def __new__(mcs, name: str, bases: Tuple[Type, ...], dct: Dict[str, Any]) -> Any:
|
|
@@ -122,47 +136,114 @@ class _BaseWorkflowMeta(type):
|
|
|
122
136
|
raise TypeError(f"Unexpected graph type: {graph_item.__class__}")
|
|
123
137
|
return nodes
|
|
124
138
|
|
|
139
|
+
def filter_overlapping_nodes_from_unused_graphs(
|
|
140
|
+
unused_graphs: Set[GraphAttribute], overlapping_nodes: Set[Type[BaseNode]]
|
|
141
|
+
) -> Set[GraphAttribute]:
|
|
142
|
+
filtered_graphs: Set[GraphAttribute] = set()
|
|
143
|
+
|
|
144
|
+
for item in unused_graphs:
|
|
145
|
+
if isinstance(item, Graph):
|
|
146
|
+
graph_nodes = set(item.nodes)
|
|
147
|
+
overlapping_in_graph = graph_nodes & overlapping_nodes
|
|
148
|
+
|
|
149
|
+
if not overlapping_in_graph:
|
|
150
|
+
filtered_graphs.add(item)
|
|
151
|
+
else:
|
|
152
|
+
non_overlapping_nodes = graph_nodes - overlapping_nodes
|
|
153
|
+
for node in non_overlapping_nodes:
|
|
154
|
+
filtered_graphs.add(node)
|
|
155
|
+
|
|
156
|
+
elif isinstance(item, set):
|
|
157
|
+
filtered_nodes: Set[Type[BaseNode]] = set()
|
|
158
|
+
filtered_graphs_in_set: Set[Graph] = set()
|
|
159
|
+
|
|
160
|
+
for subitem in item:
|
|
161
|
+
if isinstance(subitem, Graph):
|
|
162
|
+
graph_nodes = set(subitem.nodes)
|
|
163
|
+
overlapping_in_graph = graph_nodes & overlapping_nodes
|
|
164
|
+
|
|
165
|
+
if not overlapping_in_graph:
|
|
166
|
+
filtered_graphs_in_set.add(subitem)
|
|
167
|
+
else:
|
|
168
|
+
non_overlapping_nodes = graph_nodes - overlapping_nodes
|
|
169
|
+
filtered_nodes.update(non_overlapping_nodes)
|
|
170
|
+
elif isinstance(subitem, type) and issubclass(subitem, BaseNode):
|
|
171
|
+
if subitem not in overlapping_nodes:
|
|
172
|
+
filtered_nodes.add(subitem)
|
|
173
|
+
else:
|
|
174
|
+
raise TypeError(f"Unexpected item type in unused_graphs set: {subitem.__class__}")
|
|
175
|
+
|
|
176
|
+
# Add non-empty sets back to filtered_graphs
|
|
177
|
+
if filtered_nodes:
|
|
178
|
+
filtered_graphs.add(filtered_nodes)
|
|
179
|
+
if filtered_graphs_in_set:
|
|
180
|
+
filtered_graphs.add(filtered_graphs_in_set)
|
|
181
|
+
|
|
182
|
+
elif isinstance(item, type) and issubclass(item, BaseNode):
|
|
183
|
+
if item not in overlapping_nodes:
|
|
184
|
+
filtered_graphs.add(item)
|
|
185
|
+
else:
|
|
186
|
+
filtered_graphs.add(item)
|
|
187
|
+
|
|
188
|
+
return filtered_graphs
|
|
189
|
+
|
|
125
190
|
graph_nodes = collect_nodes(dct.get("graph", set()))
|
|
126
191
|
unused_nodes = collect_nodes(dct.get("unused_graphs", set()))
|
|
127
192
|
|
|
128
193
|
overlap = graph_nodes & unused_nodes
|
|
129
194
|
if overlap:
|
|
130
195
|
node_names = [node.__name__ for node in overlap]
|
|
131
|
-
|
|
196
|
+
logger.warning(
|
|
197
|
+
f"Node(s) {', '.join(node_names)} appear in both graph and unused_graphs. Removing from unused_graphs."
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
# Filter out overlapping nodes from unused_graphs
|
|
201
|
+
if "unused_graphs" in dct:
|
|
202
|
+
dct["unused_graphs"] = filter_overlapping_nodes_from_unused_graphs(dct["unused_graphs"], overlap)
|
|
132
203
|
|
|
133
204
|
cls = super().__new__(mcs, name, bases, dct)
|
|
134
205
|
workflow_class = cast(Type["BaseWorkflow"], cls)
|
|
135
206
|
workflow_class.__id__ = uuid4_from_hash(workflow_class.__qualname__)
|
|
207
|
+
|
|
208
|
+
inputs_class = workflow_class.get_inputs_class()
|
|
209
|
+
if inputs_class is not BaseInputs and inputs_class.__parent_class__ is type(None):
|
|
210
|
+
inputs_class.__parent_class__ = workflow_class
|
|
211
|
+
|
|
212
|
+
workflow_class.Outputs.__parent_class__ = workflow_class
|
|
213
|
+
workflow_class.__output_ids__ = {
|
|
214
|
+
ref.name: uuid4_from_hash(f"{workflow_class.__id__}|id|{ref.name}") for ref in workflow_class.Outputs
|
|
215
|
+
}
|
|
216
|
+
|
|
136
217
|
return workflow_class
|
|
137
218
|
|
|
138
219
|
|
|
139
220
|
GraphAttribute = Union[Type[BaseNode], Graph, Set[Type[BaseNode]], Set[Graph]]
|
|
140
221
|
|
|
141
222
|
|
|
142
|
-
class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
143
|
-
__id__: UUID = uuid4_from_hash(__qualname__)
|
|
223
|
+
class BaseWorkflow(Generic[InputsType, StateType], BaseExecutable, metaclass=_BaseWorkflowMeta):
|
|
144
224
|
graph: ClassVar[GraphAttribute]
|
|
145
225
|
unused_graphs: ClassVar[Set[GraphAttribute]] # nodes or graphs that are defined but not used in the graph
|
|
146
226
|
emitters: List[BaseWorkflowEmitter]
|
|
147
227
|
resolvers: List[BaseWorkflowResolver]
|
|
228
|
+
is_dynamic: ClassVar[bool] = False
|
|
148
229
|
|
|
149
230
|
class Outputs(BaseOutputs):
|
|
150
|
-
|
|
231
|
+
__parent_class__: Type["BaseWorkflow"] = field(init=False)
|
|
151
232
|
|
|
152
233
|
WorkflowEvent = Union[ # type: ignore
|
|
153
234
|
GenericWorkflowEvent,
|
|
154
235
|
WorkflowExecutionInitiatedEvent[InputsType, StateType], # type: ignore[valid-type]
|
|
155
|
-
WorkflowExecutionFulfilledEvent[Outputs],
|
|
236
|
+
WorkflowExecutionFulfilledEvent[Outputs, StateType], # type: ignore[valid-type]
|
|
156
237
|
WorkflowExecutionSnapshottedEvent[StateType], # type: ignore[valid-type]
|
|
157
238
|
]
|
|
158
239
|
|
|
159
240
|
TerminalWorkflowEvent = Union[
|
|
160
|
-
WorkflowExecutionFulfilledEvent[Outputs],
|
|
241
|
+
WorkflowExecutionFulfilledEvent[Outputs, StateType], # type: ignore[valid-type]
|
|
161
242
|
WorkflowExecutionRejectedEvent,
|
|
162
243
|
WorkflowExecutionPausedEvent,
|
|
163
244
|
]
|
|
164
245
|
|
|
165
|
-
WorkflowEventStream =
|
|
246
|
+
WorkflowEventStream = WorkflowEventGenerator[WorkflowEvent]
|
|
166
247
|
|
|
167
248
|
def __init__(
|
|
168
249
|
self,
|
|
@@ -174,11 +255,21 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
174
255
|
store: Optional[Store] = None,
|
|
175
256
|
):
|
|
176
257
|
self._parent_state = parent_state
|
|
258
|
+
self._context = context or WorkflowContext()
|
|
177
259
|
self.emitters = emitters or (self.emitters if hasattr(self, "emitters") else [])
|
|
178
260
|
self.resolvers = resolvers or (self.resolvers if hasattr(self, "resolvers") else [])
|
|
179
|
-
|
|
180
|
-
|
|
261
|
+
# Prioritize store type from WorkflowContext to allow subworkflows to inherit EmptyStore
|
|
262
|
+
# TODO(v2.0.0): Remove the concept of an internal store altogether (important-comment)
|
|
263
|
+
self._store = store or self._context.store_class()
|
|
181
264
|
self._execution_context = self._context.execution_context
|
|
265
|
+
self._current_runner: Optional[WorkflowRunner] = None
|
|
266
|
+
|
|
267
|
+
# Register context with all emitters
|
|
268
|
+
for emitter in self.emitters:
|
|
269
|
+
emitter.register_context(self._context)
|
|
270
|
+
|
|
271
|
+
for resolver in self.resolvers:
|
|
272
|
+
resolver.register_workflow_instance(self)
|
|
182
273
|
|
|
183
274
|
self.validate()
|
|
184
275
|
|
|
@@ -271,6 +362,14 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
271
362
|
"""
|
|
272
363
|
return cls._get_edges_from_subgraphs(cls.get_unused_subgraphs())
|
|
273
364
|
|
|
365
|
+
@classmethod
|
|
366
|
+
def get_all_nodes(cls) -> Iterator[Type[BaseNode]]:
|
|
367
|
+
"""
|
|
368
|
+
Returns an iterator over all nodes in the Workflow, used or unused.
|
|
369
|
+
"""
|
|
370
|
+
yield from cls.get_nodes()
|
|
371
|
+
yield from cls.get_unused_nodes()
|
|
372
|
+
|
|
274
373
|
@classmethod
|
|
275
374
|
def get_entrypoints(cls) -> Iterable[Type[BaseNode]]:
|
|
276
375
|
return iter({e for g in cls.get_subgraphs() for e in g.entrypoints})
|
|
@@ -282,9 +381,13 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
282
381
|
state: Optional[StateType] = None,
|
|
283
382
|
entrypoint_nodes: Optional[RunFromNodeArg] = None,
|
|
284
383
|
external_inputs: Optional[ExternalInputsArg] = None,
|
|
285
|
-
|
|
384
|
+
previous_execution_id: Optional[Union[str, UUID]] = None,
|
|
385
|
+
execution_id: Optional[UUID] = None,
|
|
386
|
+
cancel_signal: Optional[CancelSignal] = None,
|
|
286
387
|
node_output_mocks: Optional[MockNodeExecutionArg] = None,
|
|
287
388
|
max_concurrency: Optional[int] = None,
|
|
389
|
+
timeout: Optional[float] = None,
|
|
390
|
+
trigger: Optional[BaseTrigger] = None,
|
|
288
391
|
) -> TerminalWorkflowEvent:
|
|
289
392
|
"""
|
|
290
393
|
Invoke a Workflow, returning the last event emitted, which should be one of:
|
|
@@ -307,8 +410,14 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
307
410
|
external_inputs: Optional[ExternalInputsArg] = None
|
|
308
411
|
External inputs to pass to the Workflow. Useful for providing human-in-the-loop behavior to the Workflow.
|
|
309
412
|
|
|
310
|
-
|
|
311
|
-
|
|
413
|
+
previous_execution_id: Optional[Union[str, UUID]] = None
|
|
414
|
+
The execution ID of the previous execution to resume from.
|
|
415
|
+
|
|
416
|
+
execution_id: Optional[UUID] = None
|
|
417
|
+
The execution ID to use for this workflow run. Sets the initial state's span_id for fresh runs.
|
|
418
|
+
|
|
419
|
+
cancel_signal: Optional[CancelSignal] = None
|
|
420
|
+
A cancel signal that can be used to cancel the Workflow Execution.
|
|
312
421
|
|
|
313
422
|
node_output_mocks: Optional[MockNodeExecutionArg] = None
|
|
314
423
|
A list of Outputs to mock for Nodes during Workflow Execution. Each mock can include a `when_condition`
|
|
@@ -318,19 +427,35 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
318
427
|
The max number of concurrent threads to run the Workflow with. If not provided, the Workflow will run
|
|
319
428
|
without limiting concurrency. This configuration only applies to the current Workflow and not to any
|
|
320
429
|
subworkflows or nodes that utilizes threads.
|
|
430
|
+
|
|
431
|
+
timeout: Optional[float] = None
|
|
432
|
+
The maximum time in seconds to allow the Workflow to run. If the timeout is exceeded, the Workflow
|
|
433
|
+
will be rejected with a WORKFLOW_TIMEOUT error code and any nodes in flight will be rejected.
|
|
434
|
+
|
|
435
|
+
trigger: Optional[BaseTrigger] = None
|
|
436
|
+
A trigger instance for workflows with triggers (e.g., IntegrationTrigger, ManualTrigger, ScheduledTrigger).
|
|
437
|
+
The trigger instance is bound to the workflow state, making its attributes accessible to downstream nodes.
|
|
438
|
+
Required for workflows that only have IntegrationTrigger; optional for workflows with both ManualTrigger
|
|
439
|
+
and IntegrationTrigger.
|
|
321
440
|
"""
|
|
322
441
|
|
|
323
|
-
|
|
442
|
+
runner = WorkflowRunner(
|
|
324
443
|
self,
|
|
325
444
|
inputs=inputs,
|
|
326
445
|
state=state,
|
|
327
446
|
entrypoint_nodes=entrypoint_nodes,
|
|
328
447
|
external_inputs=external_inputs,
|
|
448
|
+
previous_execution_id=previous_execution_id,
|
|
329
449
|
cancel_signal=cancel_signal,
|
|
330
450
|
node_output_mocks=node_output_mocks,
|
|
331
451
|
max_concurrency=max_concurrency,
|
|
452
|
+
timeout=timeout,
|
|
332
453
|
init_execution_context=self._execution_context,
|
|
333
|
-
|
|
454
|
+
trigger=trigger,
|
|
455
|
+
execution_id=execution_id,
|
|
456
|
+
)
|
|
457
|
+
self._current_runner = runner
|
|
458
|
+
events = runner.stream()
|
|
334
459
|
first_event: Optional[Union[WorkflowExecutionInitiatedEvent, WorkflowExecutionResumedEvent]] = None
|
|
335
460
|
last_event = None
|
|
336
461
|
for event in events:
|
|
@@ -339,7 +464,7 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
339
464
|
last_event = event
|
|
340
465
|
|
|
341
466
|
if not last_event:
|
|
342
|
-
|
|
467
|
+
rejected_event = WorkflowExecutionRejectedEvent(
|
|
343
468
|
trace_id=self._execution_context.trace_id,
|
|
344
469
|
span_id=uuid4(),
|
|
345
470
|
body=WorkflowExecutionRejectedBody(
|
|
@@ -350,9 +475,10 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
350
475
|
workflow_definition=self.__class__,
|
|
351
476
|
),
|
|
352
477
|
)
|
|
478
|
+
return rejected_event
|
|
353
479
|
|
|
354
480
|
if not first_event:
|
|
355
|
-
|
|
481
|
+
rejected_event = WorkflowExecutionRejectedEvent(
|
|
356
482
|
trace_id=self._execution_context.trace_id,
|
|
357
483
|
span_id=uuid4(),
|
|
358
484
|
body=WorkflowExecutionRejectedBody(
|
|
@@ -363,6 +489,7 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
363
489
|
workflow_definition=self.__class__,
|
|
364
490
|
),
|
|
365
491
|
)
|
|
492
|
+
return rejected_event
|
|
366
493
|
|
|
367
494
|
if (
|
|
368
495
|
last_event.name == "workflow.execution.rejected"
|
|
@@ -371,7 +498,7 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
371
498
|
):
|
|
372
499
|
return last_event
|
|
373
500
|
|
|
374
|
-
|
|
501
|
+
rejected_event = WorkflowExecutionRejectedEvent(
|
|
375
502
|
trace_id=self._execution_context.trace_id,
|
|
376
503
|
span_id=first_event.span_id,
|
|
377
504
|
body=WorkflowExecutionRejectedBody(
|
|
@@ -382,6 +509,7 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
382
509
|
),
|
|
383
510
|
),
|
|
384
511
|
)
|
|
512
|
+
return rejected_event
|
|
385
513
|
|
|
386
514
|
def stream(
|
|
387
515
|
self,
|
|
@@ -391,9 +519,13 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
391
519
|
state: Optional[StateType] = None,
|
|
392
520
|
entrypoint_nodes: Optional[RunFromNodeArg] = None,
|
|
393
521
|
external_inputs: Optional[ExternalInputsArg] = None,
|
|
394
|
-
|
|
522
|
+
previous_execution_id: Optional[Union[str, UUID]] = None,
|
|
523
|
+
execution_id: Optional[UUID] = None,
|
|
524
|
+
cancel_signal: Optional[CancelSignal] = None,
|
|
395
525
|
node_output_mocks: Optional[MockNodeExecutionArg] = None,
|
|
396
526
|
max_concurrency: Optional[int] = None,
|
|
527
|
+
timeout: Optional[float] = None,
|
|
528
|
+
trigger: Optional[BaseTrigger] = None,
|
|
397
529
|
) -> WorkflowEventStream:
|
|
398
530
|
"""
|
|
399
531
|
Invoke a Workflow, yielding events as they are emitted.
|
|
@@ -417,8 +549,14 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
417
549
|
external_inputs: Optional[ExternalInputsArg] = None
|
|
418
550
|
External inputs to pass to the Workflow. Useful for providing human-in-the-loop behavior to the Workflow.
|
|
419
551
|
|
|
420
|
-
|
|
421
|
-
|
|
552
|
+
previous_execution_id: Optional[Union[str, UUID]] = None
|
|
553
|
+
The execution ID of the previous execution to resume from.
|
|
554
|
+
|
|
555
|
+
execution_id: Optional[UUID] = None
|
|
556
|
+
The execution ID to use for this workflow run. Sets the initial state's span_id for fresh runs.
|
|
557
|
+
|
|
558
|
+
cancel_signal: Optional[CancelSignal] = None
|
|
559
|
+
A cancel signal that can be used to cancel the Workflow Execution.
|
|
422
560
|
|
|
423
561
|
node_output_mocks: Optional[MockNodeExecutionArg] = None
|
|
424
562
|
A list of Outputs to mock for Nodes during Workflow Execution. Each mock can include a `when_condition`
|
|
@@ -428,22 +566,43 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
428
566
|
The max number of concurrent threads to run the Workflow with. If not provided, the Workflow will run
|
|
429
567
|
without limiting concurrency. This configuration only applies to the current Workflow and not to any
|
|
430
568
|
subworkflows or nodes that utilizes threads.
|
|
569
|
+
|
|
570
|
+
timeout: Optional[float] = None
|
|
571
|
+
The maximum time in seconds to allow the Workflow to run. If the timeout is exceeded, the Workflow
|
|
572
|
+
will be rejected with a WORKFLOW_TIMEOUT error code and any nodes in flight will be rejected.
|
|
573
|
+
|
|
574
|
+
trigger: Optional[BaseTrigger] = None
|
|
575
|
+
A trigger instance for workflows with triggers (e.g., IntegrationTrigger, ManualTrigger, ScheduledTrigger).
|
|
576
|
+
The trigger instance is bound to the workflow state, making its attributes accessible to downstream nodes.
|
|
577
|
+
Required for workflows that only have IntegrationTrigger; optional for workflows with both ManualTrigger
|
|
578
|
+
and IntegrationTrigger.
|
|
431
579
|
"""
|
|
432
580
|
|
|
433
581
|
should_yield = event_filter or workflow_event_filter
|
|
434
|
-
|
|
582
|
+
runner = WorkflowRunner(
|
|
435
583
|
self,
|
|
436
584
|
inputs=inputs,
|
|
437
585
|
state=state,
|
|
438
586
|
entrypoint_nodes=entrypoint_nodes,
|
|
439
587
|
external_inputs=external_inputs,
|
|
588
|
+
previous_execution_id=previous_execution_id,
|
|
440
589
|
cancel_signal=cancel_signal,
|
|
441
590
|
node_output_mocks=node_output_mocks,
|
|
442
591
|
max_concurrency=max_concurrency,
|
|
592
|
+
timeout=timeout,
|
|
443
593
|
init_execution_context=self._execution_context,
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
594
|
+
trigger=trigger,
|
|
595
|
+
execution_id=execution_id,
|
|
596
|
+
)
|
|
597
|
+
self._current_runner = runner
|
|
598
|
+
runner_stream = runner.stream()
|
|
599
|
+
|
|
600
|
+
def _generate_filtered_events() -> Generator[BaseWorkflow.WorkflowEvent, None, None]:
|
|
601
|
+
for event in runner_stream:
|
|
602
|
+
if should_yield(self.__class__, event):
|
|
603
|
+
yield event
|
|
604
|
+
|
|
605
|
+
return WorkflowEventGenerator(_generate_filtered_events(), runner_stream.span_id)
|
|
447
606
|
|
|
448
607
|
def validate(self) -> None:
|
|
449
608
|
"""
|
|
@@ -453,6 +612,77 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
453
612
|
# https://app.shortcut.com/vellum/story/4327
|
|
454
613
|
pass
|
|
455
614
|
|
|
615
|
+
def _resolve_node_ref(self, node_ref: Union[Type[BaseNode], UUID, str]) -> Type[BaseNode]:
|
|
616
|
+
"""
|
|
617
|
+
Resolve a node reference (class, UUID, or string) to a node class.
|
|
618
|
+
|
|
619
|
+
Args:
|
|
620
|
+
node_ref: Either a node class, a UUID, or a fully qualified string
|
|
621
|
+
in the format "module.ClassName"
|
|
622
|
+
|
|
623
|
+
Returns:
|
|
624
|
+
The resolved node class
|
|
625
|
+
|
|
626
|
+
Raises:
|
|
627
|
+
WorkflowInitializationException: If the node reference cannot be resolved
|
|
628
|
+
"""
|
|
629
|
+
if inspect.isclass(node_ref) and issubclass(node_ref, BaseNode):
|
|
630
|
+
return node_ref
|
|
631
|
+
|
|
632
|
+
candidate_nodes: List[Type[BaseNode]] = []
|
|
633
|
+
for node in self.get_all_nodes():
|
|
634
|
+
candidate_nodes.append(node)
|
|
635
|
+
wrapped_node = get_unadorned_node(node)
|
|
636
|
+
if wrapped_node != node:
|
|
637
|
+
candidate_nodes.append(wrapped_node)
|
|
638
|
+
|
|
639
|
+
if isinstance(node_ref, UUID):
|
|
640
|
+
for node in candidate_nodes:
|
|
641
|
+
if node.__id__ == node_ref:
|
|
642
|
+
return node
|
|
643
|
+
identifier = str(node_ref)
|
|
644
|
+
raise WorkflowInitializationException(message=f"Node '{identifier}' not found in workflow")
|
|
645
|
+
|
|
646
|
+
if isinstance(node_ref, str):
|
|
647
|
+
try:
|
|
648
|
+
module_path, class_name = node_ref.rsplit(".", 1)
|
|
649
|
+
module = importlib.import_module(module_path)
|
|
650
|
+
node_class = getattr(module, class_name)
|
|
651
|
+
if inspect.isclass(node_class) and issubclass(node_class, BaseNode):
|
|
652
|
+
return node_class
|
|
653
|
+
raise WorkflowInitializationException(message=f"Node '{node_ref}' not found in workflow")
|
|
654
|
+
except (ValueError, ModuleNotFoundError, AttributeError):
|
|
655
|
+
for node in candidate_nodes:
|
|
656
|
+
if f"{node.__module__}.{node.__name__}" == node_ref:
|
|
657
|
+
return node
|
|
658
|
+
raise WorkflowInitializationException(message=f"Node '{node_ref}' not found in workflow")
|
|
659
|
+
|
|
660
|
+
raise WorkflowInitializationException(message=f"Node '{node_ref}' not found in workflow")
|
|
661
|
+
|
|
662
|
+
def run_node(
|
|
663
|
+
self, node: Union[Type[BaseNode], UUID, str], *, inputs: Optional[Dict[str, Any]] = None
|
|
664
|
+
) -> Generator[NodeEvent, None, None]:
|
|
665
|
+
"""
|
|
666
|
+
Execute a single node and yield node execution events.
|
|
667
|
+
|
|
668
|
+
Args:
|
|
669
|
+
node: Either a node class, a UUID, or a fully qualified string
|
|
670
|
+
in the format "module.ClassName"
|
|
671
|
+
inputs: Optional inputs to pass to the node
|
|
672
|
+
|
|
673
|
+
Yields:
|
|
674
|
+
NodeEvent: Events emitted during node execution
|
|
675
|
+
|
|
676
|
+
Raises:
|
|
677
|
+
ValueError: If the node reference cannot be resolved
|
|
678
|
+
"""
|
|
679
|
+
resolved_node = self._resolve_node_ref(node)
|
|
680
|
+
runner = WorkflowRunner(self)
|
|
681
|
+
span_id = uuid4()
|
|
682
|
+
node_instance = resolved_node(state=self.get_default_state(), context=self._context, inputs=inputs)
|
|
683
|
+
|
|
684
|
+
return runner.run_node(node=node_instance, span_id=span_id)
|
|
685
|
+
|
|
456
686
|
@classmethod
|
|
457
687
|
@lru_cache
|
|
458
688
|
def _get_parameterized_classes(
|
|
@@ -486,16 +716,22 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
486
716
|
def get_default_inputs(self) -> InputsType:
|
|
487
717
|
return self.get_inputs_class()()
|
|
488
718
|
|
|
489
|
-
def get_default_state(
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
719
|
+
def get_default_state(
|
|
720
|
+
self, workflow_inputs: Optional[InputsType] = None, execution_id: Optional[UUID] = None
|
|
721
|
+
) -> StateType:
|
|
722
|
+
meta = StateMeta(
|
|
723
|
+
parent=self._parent_state,
|
|
724
|
+
workflow_inputs=workflow_inputs or self.get_default_inputs(),
|
|
725
|
+
workflow_definition=self.__class__,
|
|
496
726
|
)
|
|
497
727
|
|
|
498
|
-
|
|
728
|
+
# Makes the uuid factory mocker work this way instead of setting in cosntructor
|
|
729
|
+
if execution_id:
|
|
730
|
+
meta.span_id = execution_id
|
|
731
|
+
|
|
732
|
+
return self.get_state_class()(meta=meta)
|
|
733
|
+
|
|
734
|
+
def get_state_at_node(self, node: Type[BaseNode], execution_id: Optional[UUID] = None) -> StateType:
|
|
499
735
|
event_ts = datetime.min
|
|
500
736
|
for event in self._store.events:
|
|
501
737
|
if event.name == "node.execution.initiated" and event.node_definition == node:
|
|
@@ -509,11 +745,11 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
509
745
|
most_recent_state_snapshot = cast(StateType, snapshot)
|
|
510
746
|
|
|
511
747
|
if not most_recent_state_snapshot:
|
|
512
|
-
return self.get_default_state()
|
|
748
|
+
return self.get_default_state(execution_id=execution_id)
|
|
513
749
|
|
|
514
750
|
return most_recent_state_snapshot
|
|
515
751
|
|
|
516
|
-
def get_most_recent_state(self) -> StateType:
|
|
752
|
+
def get_most_recent_state(self, execution_id: Optional[UUID] = None) -> StateType:
|
|
517
753
|
most_recent_state_snapshot: Optional[StateType] = None
|
|
518
754
|
|
|
519
755
|
for snapshot in self._store.state_snapshots:
|
|
@@ -524,7 +760,7 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
524
760
|
most_recent_state_snapshot = next_state
|
|
525
761
|
|
|
526
762
|
if not most_recent_state_snapshot:
|
|
527
|
-
return self.get_default_state()
|
|
763
|
+
return self.get_default_state(execution_id=execution_id)
|
|
528
764
|
|
|
529
765
|
return most_recent_state_snapshot
|
|
530
766
|
|
|
@@ -557,10 +793,87 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
557
793
|
|
|
558
794
|
return state_class(**state)
|
|
559
795
|
|
|
796
|
+
@classmethod
|
|
797
|
+
def deserialize_trigger(cls, trigger_id: Optional[UUID], inputs: dict) -> Union[InputsType, BaseTrigger]:
|
|
798
|
+
"""
|
|
799
|
+
Deserialize a trigger from a trigger_id and inputs dict.
|
|
800
|
+
|
|
801
|
+
If trigger_id is None, returns an instance of the workflow's Inputs class.
|
|
802
|
+
Otherwise, finds a trigger class that matches the trigger_id and creates an instance of that.
|
|
803
|
+
|
|
804
|
+
Parameters
|
|
805
|
+
----------
|
|
806
|
+
trigger_id: Optional[UUID]
|
|
807
|
+
The UUID of the trigger class to instantiate. If None, returns workflow Inputs.
|
|
808
|
+
|
|
809
|
+
inputs: dict
|
|
810
|
+
The inputs to pass to the trigger or Inputs constructor.
|
|
811
|
+
|
|
812
|
+
Returns
|
|
813
|
+
-------
|
|
814
|
+
Union[InputsType, BaseTrigger]
|
|
815
|
+
Either an instance of the workflow's Inputs class (if trigger_id is None)
|
|
816
|
+
or an instance of the matching trigger class.
|
|
817
|
+
|
|
818
|
+
Raises
|
|
819
|
+
------
|
|
820
|
+
WorkflowInitializationException
|
|
821
|
+
If trigger_id is provided but no matching trigger class is found in the workflow.
|
|
822
|
+
"""
|
|
823
|
+
if trigger_id is None:
|
|
824
|
+
inputs_class = cls.get_inputs_class()
|
|
825
|
+
return inputs_class(**inputs)
|
|
826
|
+
|
|
827
|
+
trigger_classes = []
|
|
828
|
+
for subgraph in cls.get_subgraphs():
|
|
829
|
+
for trigger_class in subgraph.triggers:
|
|
830
|
+
if trigger_class.__id__ == trigger_id:
|
|
831
|
+
return trigger_class(**inputs)
|
|
832
|
+
|
|
833
|
+
trigger_classes.append(trigger_class)
|
|
834
|
+
|
|
835
|
+
raise WorkflowInitializationException(
|
|
836
|
+
message=f"No trigger class found with id {trigger_id} in workflow {cls.__name__}. "
|
|
837
|
+
f"Available trigger classes: {[trigger_class.__name__ for trigger_class in trigger_classes]}"
|
|
838
|
+
)
|
|
839
|
+
|
|
560
840
|
@staticmethod
|
|
561
841
|
def load_from_module(module_path: str) -> Type["BaseWorkflow"]:
|
|
562
842
|
workflow_path = f"{module_path}.workflow"
|
|
563
|
-
|
|
843
|
+
try:
|
|
844
|
+
module = importlib.import_module(workflow_path)
|
|
845
|
+
except ValidationError as e:
|
|
846
|
+
raise WorkflowInitializationException(
|
|
847
|
+
message=f"Pydantic Model Validation defined in Workflow Failed: {e}"
|
|
848
|
+
) from e
|
|
849
|
+
except TypeError as e:
|
|
850
|
+
if "Unexpected graph type" in str(e) or "unhashable type: 'set'" in str(e):
|
|
851
|
+
raise WorkflowInitializationException(
|
|
852
|
+
message="Invalid graph structure detected. Nested sets or unsupported graph types are not allowed. "
|
|
853
|
+
"Please contact Vellum support for assistance with Workflow configuration."
|
|
854
|
+
) from e
|
|
855
|
+
else:
|
|
856
|
+
raise WorkflowInitializationException(message=f"Type Error raised while loading Workflow: {e}") from e
|
|
857
|
+
except SyntaxError as e:
|
|
858
|
+
raise WorkflowInitializationException(message=f"Syntax Error raised while loading Workflow: {e}") from e
|
|
859
|
+
except ModuleNotFoundError as e:
|
|
860
|
+
error_message = f"Workflow module not found: {e}"
|
|
861
|
+
raw_data = None
|
|
862
|
+
has_namespace_match = False
|
|
863
|
+
for finder in sys.meta_path:
|
|
864
|
+
if isinstance(finder, BaseWorkflowFinder):
|
|
865
|
+
error_message = finder.format_error_message(error_message)
|
|
866
|
+
if hasattr(finder, "namespace") and e.name and finder.namespace in e.name:
|
|
867
|
+
has_namespace_match = True
|
|
868
|
+
if not has_namespace_match:
|
|
869
|
+
raw_data = {"vellum_on_error_action": "CREATE_CUSTOM_IMAGE"}
|
|
870
|
+
raise WorkflowInitializationException(message=error_message, raw_data=raw_data) from e
|
|
871
|
+
except ImportError as e:
|
|
872
|
+
raise WorkflowInitializationException(message=f"Invalid import found while loading Workflow: {e}") from e
|
|
873
|
+
except NameError as e:
|
|
874
|
+
raise WorkflowInitializationException(message=f"Invalid variable reference: {e}") from e
|
|
875
|
+
except Exception as e:
|
|
876
|
+
raise WorkflowInitializationException(message=f"Unexpected failure while loading module: {e}") from e
|
|
564
877
|
workflows: List[Type[BaseWorkflow]] = []
|
|
565
878
|
for name in dir(module):
|
|
566
879
|
if name.startswith("__"):
|
|
@@ -576,11 +889,22 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
576
889
|
workflows.append(attr)
|
|
577
890
|
|
|
578
891
|
if len(workflows) == 0:
|
|
579
|
-
raise
|
|
892
|
+
raise WorkflowInitializationException(f"No workflows found in {module_path}")
|
|
580
893
|
elif len(workflows) > 1:
|
|
581
|
-
raise
|
|
894
|
+
raise WorkflowInitializationException(f"Multiple workflows found in {module_path}")
|
|
582
895
|
return workflows[0]
|
|
583
896
|
|
|
897
|
+
def join(self) -> None:
|
|
898
|
+
"""
|
|
899
|
+
Wait for all emitters and runner to complete their background work.
|
|
900
|
+
This ensures all pending events are processed before the workflow terminates.
|
|
901
|
+
"""
|
|
902
|
+
if self._current_runner:
|
|
903
|
+
self._current_runner.join()
|
|
904
|
+
|
|
905
|
+
for emitter in self.emitters:
|
|
906
|
+
emitter.join()
|
|
907
|
+
|
|
584
908
|
|
|
585
909
|
WorkflowExecutionInitiatedBody.model_rebuild()
|
|
586
910
|
WorkflowExecutionFulfilledBody.model_rebuild()
|
|
@@ -52,5 +52,18 @@ def root_workflow_event_filter(workflow_definition: Type["BaseWorkflow"], event:
|
|
|
52
52
|
return event_parent_definition.model_dump() == current_workflow_definition.model_dump()
|
|
53
53
|
|
|
54
54
|
|
|
55
|
+
def workflow_sandbox_event_filter(workflow_definition: Type["BaseWorkflow"], event: "WorkflowEvent") -> bool:
|
|
56
|
+
"""
|
|
57
|
+
Filter designed for Workflow Sandbox interfaces: include all events except
|
|
58
|
+
workflow.execution.snapshotted events from nested/subworkflows. Only allow
|
|
59
|
+
snapshotted events when they belong to the root workflow definition.
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
if event.name == "workflow.execution.snapshotted":
|
|
63
|
+
return event.workflow_definition == workflow_definition
|
|
64
|
+
|
|
65
|
+
return True
|
|
66
|
+
|
|
67
|
+
|
|
55
68
|
def all_workflow_event_filter(workflow_definition: Type["BaseWorkflow"], event: "WorkflowEvent") -> bool:
|
|
56
69
|
return True
|