vellum-ai 0.14.63__py3-none-any.whl → 1.13.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of vellum-ai might be problematic. Click here for more details.
- vellum/__init__.py +287 -4
- vellum/client/README.md +69 -16
- vellum/client/__init__.py +598 -1437
- vellum/client/core/__init__.py +5 -0
- vellum/client/core/api_error.py +13 -5
- vellum/client/core/client_wrapper.py +30 -4
- vellum/client/core/force_multipart.py +18 -0
- vellum/client/core/http_client.py +70 -26
- vellum/client/core/http_response.py +55 -0
- vellum/client/core/jsonable_encoder.py +0 -1
- vellum/client/core/pydantic_utilities.py +90 -117
- vellum/client/core/serialization.py +7 -3
- vellum/client/errors/__init__.py +14 -1
- vellum/client/errors/bad_request_error.py +4 -3
- vellum/client/errors/forbidden_error.py +4 -3
- vellum/client/errors/internal_server_error.py +4 -3
- vellum/client/errors/misdirected_request_error.py +11 -0
- vellum/client/errors/not_found_error.py +4 -3
- vellum/client/errors/too_many_requests_error.py +10 -0
- vellum/client/errors/unauthorized_error.py +11 -0
- vellum/client/raw_client.py +2725 -0
- vellum/client/reference.md +3160 -1217
- vellum/client/resources/__init__.py +16 -2
- vellum/client/resources/ad_hoc/__init__.py +2 -0
- vellum/client/resources/ad_hoc/client.py +173 -377
- vellum/client/resources/ad_hoc/raw_client.py +569 -0
- vellum/client/resources/container_images/__init__.py +2 -0
- vellum/client/resources/container_images/client.py +365 -185
- vellum/client/resources/container_images/raw_client.py +693 -0
- vellum/client/resources/deployments/__init__.py +2 -0
- vellum/client/resources/deployments/client.py +119 -463
- vellum/client/resources/deployments/raw_client.py +1002 -0
- vellum/client/resources/deployments/types/__init__.py +2 -0
- vellum/client/resources/document_indexes/__init__.py +2 -0
- vellum/client/resources/document_indexes/client.py +131 -383
- vellum/client/resources/document_indexes/raw_client.py +866 -0
- vellum/client/resources/document_indexes/types/__init__.py +2 -0
- vellum/client/resources/documents/__init__.py +2 -0
- vellum/client/resources/documents/client.py +111 -333
- vellum/client/resources/documents/raw_client.py +672 -0
- vellum/client/resources/{release_reviews → environments}/__init__.py +2 -0
- vellum/client/resources/environments/client.py +106 -0
- vellum/client/resources/environments/raw_client.py +95 -0
- vellum/client/resources/events/__init__.py +4 -0
- vellum/client/resources/events/client.py +201 -0
- vellum/client/resources/events/raw_client.py +211 -0
- vellum/client/resources/folder_entities/__init__.py +2 -0
- vellum/client/resources/folder_entities/client.py +56 -95
- vellum/client/resources/folder_entities/raw_client.py +276 -0
- vellum/client/resources/folder_entities/types/__init__.py +2 -0
- vellum/client/resources/integration_auth_configs/__init__.py +4 -0
- vellum/client/resources/integration_auth_configs/client.py +188 -0
- vellum/client/resources/integration_auth_configs/raw_client.py +173 -0
- vellum/client/resources/integration_providers/__init__.py +4 -0
- vellum/client/resources/integration_providers/client.py +325 -0
- vellum/client/resources/integration_providers/raw_client.py +299 -0
- vellum/client/resources/integrations/__init__.py +4 -0
- vellum/client/resources/integrations/client.py +514 -0
- vellum/client/resources/integrations/raw_client.py +618 -0
- vellum/client/resources/metric_definitions/__init__.py +2 -0
- vellum/client/resources/metric_definitions/client.py +60 -106
- vellum/client/resources/metric_definitions/raw_client.py +224 -0
- vellum/client/resources/ml_models/__init__.py +2 -0
- vellum/client/resources/ml_models/client.py +37 -46
- vellum/client/resources/ml_models/raw_client.py +102 -0
- vellum/client/resources/organizations/__init__.py +2 -0
- vellum/client/resources/organizations/client.py +37 -45
- vellum/client/resources/organizations/raw_client.py +95 -0
- vellum/client/resources/prompts/__init__.py +2 -0
- vellum/client/resources/prompts/client.py +84 -202
- vellum/client/resources/prompts/raw_client.py +353 -0
- vellum/client/resources/sandboxes/__init__.py +2 -0
- vellum/client/resources/sandboxes/client.py +69 -159
- vellum/client/resources/sandboxes/raw_client.py +392 -0
- vellum/client/resources/test_suite_runs/__init__.py +2 -0
- vellum/client/resources/test_suite_runs/client.py +65 -157
- vellum/client/resources/test_suite_runs/raw_client.py +354 -0
- vellum/client/resources/test_suites/__init__.py +2 -0
- vellum/client/resources/test_suites/client.py +162 -266
- vellum/client/resources/test_suites/raw_client.py +530 -0
- vellum/client/resources/uploaded_files/__init__.py +4 -0
- vellum/client/resources/uploaded_files/client.py +230 -0
- vellum/client/resources/uploaded_files/raw_client.py +316 -0
- vellum/client/resources/workflow_deployments/__init__.py +2 -0
- vellum/client/resources/workflow_deployments/client.py +456 -351
- vellum/client/resources/workflow_deployments/raw_client.py +1393 -0
- vellum/client/resources/workflow_deployments/types/__init__.py +2 -0
- vellum/client/resources/workflow_executions/__init__.py +4 -0
- vellum/client/resources/workflow_executions/client.py +140 -0
- vellum/client/resources/workflow_executions/raw_client.py +173 -0
- vellum/client/resources/workflow_sandboxes/__init__.py +2 -0
- vellum/client/resources/workflow_sandboxes/client.py +58 -123
- vellum/client/resources/workflow_sandboxes/raw_client.py +291 -0
- vellum/client/resources/workflow_sandboxes/types/__init__.py +2 -0
- vellum/client/resources/workflows/__init__.py +2 -0
- vellum/client/resources/workflows/client.py +464 -145
- vellum/client/resources/workflows/raw_client.py +884 -0
- vellum/client/resources/workspace_secrets/__init__.py +2 -0
- vellum/client/resources/workspace_secrets/client.py +43 -100
- vellum/client/resources/workspace_secrets/raw_client.py +219 -0
- vellum/client/resources/workspaces/__init__.py +2 -0
- vellum/client/resources/workspaces/client.py +37 -45
- vellum/client/resources/workspaces/raw_client.py +95 -0
- vellum/client/tests/__init__.py +0 -0
- vellum/client/tests/test_utils.py +34 -0
- vellum/client/types/__init__.py +260 -0
- vellum/client/types/ad_hoc_execute_prompt_event.py +3 -2
- vellum/client/types/ad_hoc_expand_meta.py +2 -2
- vellum/client/types/ad_hoc_fulfilled_prompt_execution_meta.py +3 -3
- vellum/client/types/ad_hoc_initiated_prompt_execution_meta.py +2 -2
- vellum/client/types/ad_hoc_rejected_prompt_execution_meta.py +3 -3
- vellum/client/types/ad_hoc_streaming_prompt_execution_meta.py +2 -2
- vellum/client/types/api_actor_type_enum.py +7 -0
- vellum/client/types/api_node_result.py +3 -3
- vellum/client/types/api_node_result_data.py +4 -4
- vellum/client/types/api_request_parent_context.py +17 -10
- vellum/client/types/api_version_enum.py +1 -1
- vellum/client/types/array_chat_message_content.py +3 -3
- vellum/client/types/array_chat_message_content_item.py +7 -4
- vellum/client/types/array_chat_message_content_item_request.py +7 -4
- vellum/client/types/array_chat_message_content_request.py +3 -3
- vellum/client/types/array_input.py +12 -6
- vellum/client/types/array_vellum_value.py +4 -4
- vellum/client/types/array_vellum_value_request.py +4 -4
- vellum/client/types/audio_chat_message_content.py +3 -3
- vellum/client/types/audio_chat_message_content_request.py +3 -3
- vellum/client/types/audio_input.py +30 -0
- vellum/client/types/audio_input_request.py +30 -0
- vellum/client/types/audio_prompt_block.py +4 -4
- vellum/client/types/audio_vellum_value.py +3 -3
- vellum/client/types/audio_vellum_value_request.py +3 -3
- vellum/client/types/auth_type_enum.py +5 -0
- vellum/client/types/base_output.py +4 -4
- vellum/client/types/basic_vectorizer_intfloat_multilingual_e_5_large.py +2 -2
- vellum/client/types/basic_vectorizer_intfloat_multilingual_e_5_large_request.py +2 -2
- vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_cos_v_1.py +2 -2
- vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_cos_v_1_request.py +2 -2
- vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_dot_v_1.py +2 -2
- vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_dot_v_1_request.py +2 -2
- vellum/client/types/build_status_enum.py +5 -0
- vellum/client/types/chat_history_input.py +3 -3
- vellum/client/types/chat_history_input_request.py +3 -3
- vellum/client/types/chat_history_vellum_value.py +3 -3
- vellum/client/types/chat_history_vellum_value_request.py +3 -3
- vellum/client/types/chat_message.py +4 -4
- vellum/client/types/chat_message_content.py +7 -4
- vellum/client/types/chat_message_content_request.py +7 -4
- vellum/client/types/chat_message_prompt_block.py +7 -7
- vellum/client/types/chat_message_request.py +4 -4
- vellum/client/types/check_workflow_execution_status_error.py +21 -0
- vellum/client/types/check_workflow_execution_status_response.py +29 -0
- vellum/client/types/code_execution_node_array_result.py +11 -5
- vellum/client/types/code_execution_node_chat_history_result.py +3 -3
- vellum/client/types/code_execution_node_error_result.py +3 -3
- vellum/client/types/code_execution_node_function_call_result.py +3 -3
- vellum/client/types/code_execution_node_json_result.py +2 -2
- vellum/client/types/code_execution_node_number_result.py +2 -2
- vellum/client/types/code_execution_node_result.py +10 -4
- vellum/client/types/code_execution_node_result_data.py +10 -4
- vellum/client/types/code_execution_node_result_output.py +6 -5
- vellum/client/types/code_execution_node_search_results_result.py +3 -3
- vellum/client/types/code_execution_node_string_result.py +2 -2
- vellum/client/types/code_execution_package.py +3 -2
- vellum/client/types/code_execution_package_request.py +21 -0
- vellum/client/types/code_executor_input.py +15 -6
- vellum/client/types/code_executor_response.py +11 -5
- vellum/client/types/code_executor_secret_input.py +3 -3
- vellum/client/types/code_resource_definition.py +3 -3
- vellum/client/types/compile_prompt_deployment_expand_meta_request.py +2 -2
- vellum/client/types/compile_prompt_meta.py +2 -2
- vellum/client/types/components_schemas_composio_execute_tool_request.py +5 -0
- vellum/client/types/components_schemas_composio_execute_tool_response.py +5 -0
- vellum/client/types/components_schemas_composio_integration_exec_config.py +5 -0
- vellum/client/types/components_schemas_composio_tool_definition.py +5 -0
- vellum/client/types/components_schemas_slim_composio_tool_definition.py +5 -0
- vellum/client/types/composio_execute_tool_request.py +29 -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 +31 -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 +22 -0
- vellum/client/types/container_image_container_image_tag.py +3 -2
- vellum/client/types/container_image_read.py +8 -4
- vellum/client/types/create_test_suite_test_case_request.py +9 -3
- vellum/client/types/create_workflow_event_request.py +7 -0
- vellum/client/types/dataset_row_push_request.py +23 -0
- vellum/client/types/delimiter_chunker_config.py +20 -0
- vellum/client/types/delimiter_chunker_config_request.py +20 -0
- vellum/client/types/delimiter_chunking.py +21 -0
- vellum/client/types/delimiter_chunking_request.py +21 -0
- vellum/client/types/deployment_history_item.py +10 -4
- vellum/client/types/deployment_provider_payload_response.py +4 -4
- vellum/client/types/deployment_read.py +15 -9
- vellum/client/types/deployment_release_tag_deployment_history_item.py +2 -2
- vellum/client/types/deployment_release_tag_read.py +4 -4
- vellum/client/types/deprecated_prompt_request_input.py +8 -0
- vellum/client/types/docker_service_token.py +2 -2
- vellum/client/types/document_chat_message_content.py +3 -3
- vellum/client/types/document_chat_message_content_request.py +3 -3
- vellum/client/types/document_document_to_document_index.py +5 -4
- vellum/client/types/document_index_chunking.py +5 -1
- vellum/client/types/document_index_chunking_request.py +3 -1
- vellum/client/types/document_index_indexing_config.py +4 -4
- vellum/client/types/document_index_indexing_config_request.py +4 -4
- vellum/client/types/document_index_read.py +4 -4
- vellum/client/types/document_input.py +30 -0
- vellum/client/types/document_input_request.py +30 -0
- vellum/client/types/document_prompt_block.py +4 -4
- vellum/client/types/document_read.py +9 -5
- vellum/client/types/document_vellum_value.py +3 -3
- vellum/client/types/document_vellum_value_request.py +3 -3
- vellum/client/types/enriched_normalized_completion.py +3 -3
- vellum/client/types/environment_display_config.py +19 -0
- vellum/client/types/environment_read.py +23 -0
- vellum/client/types/ephemeral_prompt_cache_config.py +3 -3
- vellum/client/types/error_detail_response.py +22 -0
- vellum/client/types/error_input.py +3 -3
- vellum/client/types/error_vellum_value.py +3 -3
- vellum/client/types/error_vellum_value_request.py +3 -3
- vellum/client/types/event_create_response.py +31 -0
- vellum/client/types/execute_api_request_bearer_token.py +1 -0
- vellum/client/types/execute_api_request_headers_value.py +1 -0
- vellum/client/types/execute_api_response.py +6 -6
- vellum/client/types/execute_prompt_event.py +3 -2
- vellum/client/types/execute_prompt_response.py +1 -0
- vellum/client/types/execute_workflow_async_response.py +26 -0
- vellum/client/types/execute_workflow_response.py +10 -4
- vellum/client/types/execute_workflow_workflow_result_event.py +1 -0
- vellum/client/types/execution_array_vellum_value.py +12 -6
- vellum/client/types/execution_audio_vellum_value.py +31 -0
- vellum/client/types/execution_chat_history_vellum_value.py +3 -3
- vellum/client/types/execution_document_vellum_value.py +31 -0
- vellum/client/types/execution_error_vellum_value.py +3 -3
- vellum/client/types/execution_function_call_vellum_value.py +3 -3
- vellum/client/types/execution_image_vellum_value.py +31 -0
- vellum/client/types/execution_json_vellum_value.py +3 -3
- vellum/client/types/execution_number_vellum_value.py +3 -3
- vellum/client/types/execution_search_results_vellum_value.py +3 -3
- vellum/client/types/execution_string_vellum_value.py +3 -3
- vellum/client/types/execution_thinking_vellum_value.py +31 -0
- vellum/client/types/execution_vellum_value.py +16 -5
- vellum/client/types/execution_video_vellum_value.py +31 -0
- vellum/client/types/external_input_descriptor.py +3 -3
- vellum/client/types/external_parent_context.py +38 -0
- vellum/client/types/external_test_case_execution.py +10 -4
- vellum/client/types/external_test_case_execution_request.py +10 -4
- vellum/client/types/fast_embed_vectorizer_baai_bge_small_en_v_15.py +23 -0
- vellum/client/types/fast_embed_vectorizer_baai_bge_small_en_v_15_request.py +23 -0
- vellum/client/types/folder_entity.py +5 -2
- vellum/client/types/folder_entity_dataset.py +26 -0
- vellum/client/types/folder_entity_dataset_data.py +25 -0
- vellum/client/types/folder_entity_document_index.py +3 -3
- vellum/client/types/folder_entity_document_index_data.py +5 -3
- vellum/client/types/folder_entity_folder.py +3 -3
- vellum/client/types/folder_entity_folder_data.py +2 -2
- vellum/client/types/folder_entity_prompt_sandbox.py +3 -3
- vellum/client/types/folder_entity_prompt_sandbox_data.py +4 -3
- vellum/client/types/folder_entity_test_suite.py +3 -3
- vellum/client/types/folder_entity_test_suite_data.py +3 -3
- vellum/client/types/folder_entity_workflow_sandbox.py +3 -3
- vellum/client/types/folder_entity_workflow_sandbox_data.py +6 -3
- vellum/client/types/fulfilled_ad_hoc_execute_prompt_event.py +4 -4
- vellum/client/types/fulfilled_execute_prompt_event.py +4 -4
- vellum/client/types/fulfilled_execute_prompt_response.py +3 -3
- vellum/client/types/fulfilled_execute_workflow_workflow_result_event.py +11 -5
- vellum/client/types/fulfilled_prompt_execution_meta.py +3 -3
- vellum/client/types/fulfilled_workflow_node_result_event.py +12 -6
- vellum/client/types/function_call.py +2 -2
- vellum/client/types/function_call_chat_message_content.py +3 -3
- vellum/client/types/function_call_chat_message_content_request.py +3 -3
- vellum/client/types/function_call_chat_message_content_value.py +2 -2
- vellum/client/types/function_call_chat_message_content_value_request.py +2 -2
- vellum/client/types/function_call_input.py +3 -3
- vellum/client/types/function_call_prompt_block.py +4 -4
- vellum/client/types/function_call_request.py +2 -2
- vellum/client/types/function_call_vellum_value.py +3 -3
- vellum/client/types/function_call_vellum_value_request.py +3 -3
- vellum/client/types/function_definition.py +9 -4
- vellum/client/types/generate_options_request.py +3 -3
- vellum/client/types/generate_request.py +2 -2
- vellum/client/types/generate_response.py +3 -3
- vellum/client/types/generate_result.py +3 -3
- vellum/client/types/generate_result_data.py +3 -3
- vellum/client/types/generate_result_error.py +3 -3
- vellum/client/types/generate_stream_response.py +3 -3
- vellum/client/types/generate_stream_result.py +4 -4
- vellum/client/types/generate_stream_result_data.py +3 -3
- vellum/client/types/google_vertex_ai_vectorizer_config.py +2 -2
- vellum/client/types/google_vertex_ai_vectorizer_config_request.py +2 -2
- vellum/client/types/google_vertex_ai_vectorizer_gemini_embedding_001.py +21 -0
- vellum/client/types/google_vertex_ai_vectorizer_gemini_embedding_001_request.py +21 -0
- vellum/client/types/google_vertex_ai_vectorizer_text_embedding_004.py +3 -3
- vellum/client/types/google_vertex_ai_vectorizer_text_embedding_004_request.py +3 -3
- vellum/client/types/google_vertex_ai_vectorizer_text_multilingual_embedding_002.py +3 -3
- vellum/client/types/google_vertex_ai_vectorizer_text_multilingual_embedding_002_request.py +3 -3
- vellum/client/types/hkunlp_instructor_xl_vectorizer.py +3 -3
- vellum/client/types/hkunlp_instructor_xl_vectorizer_request.py +3 -3
- vellum/client/types/image_chat_message_content.py +3 -3
- vellum/client/types/image_chat_message_content_request.py +3 -3
- vellum/client/types/image_input.py +30 -0
- vellum/client/types/image_input_request.py +30 -0
- vellum/client/types/image_prompt_block.py +4 -4
- vellum/client/types/image_vellum_value.py +3 -3
- vellum/client/types/image_vellum_value_request.py +3 -3
- vellum/client/types/indexing_config_vectorizer.py +11 -4
- vellum/client/types/indexing_config_vectorizer_request.py +11 -4
- vellum/client/types/initiated_ad_hoc_execute_prompt_event.py +3 -3
- vellum/client/types/initiated_execute_prompt_event.py +3 -3
- vellum/client/types/initiated_prompt_execution_meta.py +2 -2
- vellum/client/types/initiated_workflow_node_result_event.py +12 -6
- vellum/client/types/instructor_vectorizer_config.py +2 -2
- vellum/client/types/instructor_vectorizer_config_request.py +2 -2
- vellum/client/types/integration.py +27 -0
- vellum/client/types/integration_auth_config_integration.py +23 -0
- vellum/client/types/integration_auth_config_integration_credential.py +19 -0
- vellum/client/types/integration_credential_access_type.py +5 -0
- vellum/client/types/integration_name.py +109 -0
- vellum/client/types/integration_provider.py +5 -0
- vellum/client/types/integration_read.py +30 -0
- vellum/client/types/integration_trigger_context.py +39 -0
- vellum/client/types/invoked_port.py +2 -2
- vellum/client/types/jinja_prompt_block.py +4 -4
- vellum/client/types/json_input.py +3 -3
- vellum/client/types/json_input_request.py +3 -3
- vellum/client/types/json_vellum_value.py +2 -2
- vellum/client/types/json_vellum_value_request.py +2 -2
- vellum/client/types/logical_operator.py +4 -0
- vellum/client/types/map_node_result.py +3 -3
- vellum/client/types/map_node_result_data.py +3 -3
- vellum/client/types/merge_node_result.py +3 -3
- vellum/client/types/merge_node_result_data.py +2 -2
- vellum/client/types/metadata_filter_config_request.py +12 -6
- vellum/client/types/metadata_filter_rule_request.py +5 -5
- vellum/client/types/metadata_filters_request.py +1 -0
- vellum/client/types/metric_definition_execution.py +10 -4
- vellum/client/types/metric_definition_history_item.py +10 -4
- vellum/client/types/metric_definition_input.py +3 -2
- vellum/client/types/metric_node_result.py +2 -2
- vellum/client/types/ml_model_read.py +6 -3
- vellum/client/types/ml_model_usage.py +2 -2
- vellum/client/types/ml_model_usage_wrapper.py +3 -3
- vellum/client/types/named_scenario_input_audio_variable_value_request.py +22 -0
- vellum/client/types/named_scenario_input_chat_history_variable_value_request.py +3 -3
- vellum/client/types/named_scenario_input_document_variable_value_request.py +22 -0
- vellum/client/types/named_scenario_input_image_variable_value_request.py +22 -0
- vellum/client/types/named_scenario_input_json_variable_value_request.py +2 -2
- vellum/client/types/named_scenario_input_request.py +11 -2
- vellum/client/types/named_scenario_input_string_variable_value_request.py +2 -2
- vellum/client/types/named_scenario_input_video_variable_value_request.py +22 -0
- vellum/client/types/named_test_case_array_variable_value.py +11 -5
- vellum/client/types/named_test_case_array_variable_value_request.py +11 -5
- vellum/client/types/named_test_case_audio_variable_value.py +26 -0
- vellum/client/types/named_test_case_audio_variable_value_request.py +26 -0
- vellum/client/types/named_test_case_chat_history_variable_value.py +3 -3
- vellum/client/types/named_test_case_chat_history_variable_value_request.py +3 -3
- vellum/client/types/named_test_case_document_variable_value.py +22 -0
- vellum/client/types/named_test_case_document_variable_value_request.py +22 -0
- vellum/client/types/named_test_case_error_variable_value.py +3 -3
- vellum/client/types/named_test_case_error_variable_value_request.py +3 -3
- vellum/client/types/named_test_case_function_call_variable_value.py +3 -3
- vellum/client/types/named_test_case_function_call_variable_value_request.py +3 -3
- vellum/client/types/named_test_case_image_variable_value.py +22 -0
- vellum/client/types/named_test_case_image_variable_value_request.py +22 -0
- vellum/client/types/named_test_case_json_variable_value.py +2 -2
- vellum/client/types/named_test_case_json_variable_value_request.py +2 -2
- vellum/client/types/named_test_case_number_variable_value.py +2 -2
- vellum/client/types/named_test_case_number_variable_value_request.py +2 -2
- vellum/client/types/named_test_case_search_results_variable_value.py +3 -3
- vellum/client/types/named_test_case_search_results_variable_value_request.py +3 -3
- vellum/client/types/named_test_case_string_variable_value.py +2 -2
- vellum/client/types/named_test_case_string_variable_value_request.py +2 -2
- vellum/client/types/named_test_case_variable_value.py +14 -5
- vellum/client/types/named_test_case_variable_value_request.py +14 -5
- vellum/client/types/named_test_case_video_variable_value.py +22 -0
- vellum/client/types/named_test_case_video_variable_value_request.py +22 -0
- vellum/client/types/node_execution_fulfilled_body.py +5 -4
- vellum/client/types/node_execution_fulfilled_event.py +24 -15
- vellum/client/types/node_execution_initiated_body.py +3 -3
- vellum/client/types/node_execution_initiated_event.py +24 -15
- vellum/client/types/node_execution_log_body.py +24 -0
- vellum/client/types/node_execution_log_event.py +47 -0
- vellum/client/types/node_execution_paused_body.py +3 -3
- vellum/client/types/node_execution_paused_event.py +24 -15
- vellum/client/types/node_execution_rejected_body.py +5 -4
- vellum/client/types/node_execution_rejected_event.py +24 -15
- vellum/client/types/node_execution_resumed_body.py +3 -3
- vellum/client/types/node_execution_resumed_event.py +24 -15
- vellum/client/types/node_execution_span.py +23 -12
- vellum/client/types/node_execution_span_attributes.py +4 -2
- vellum/client/types/node_execution_streaming_body.py +4 -4
- vellum/client/types/node_execution_streaming_event.py +24 -15
- vellum/client/types/node_input_compiled_array_value.py +11 -5
- vellum/client/types/node_input_compiled_audio_value.py +23 -0
- vellum/client/types/node_input_compiled_chat_history_value.py +3 -3
- vellum/client/types/node_input_compiled_document_value.py +23 -0
- vellum/client/types/node_input_compiled_error_value.py +3 -3
- vellum/client/types/node_input_compiled_function_call_value.py +3 -3
- vellum/client/types/node_input_compiled_image_value.py +23 -0
- vellum/client/types/node_input_compiled_json_value.py +2 -2
- vellum/client/types/node_input_compiled_number_value.py +2 -2
- vellum/client/types/node_input_compiled_search_results_value.py +3 -3
- vellum/client/types/node_input_compiled_secret_value.py +3 -3
- vellum/client/types/node_input_compiled_string_value.py +2 -2
- vellum/client/types/node_input_compiled_video_value.py +23 -0
- vellum/client/types/node_input_variable_compiled_value.py +14 -5
- vellum/client/types/node_output_compiled_array_value.py +12 -6
- vellum/client/types/node_output_compiled_chat_history_value.py +3 -3
- vellum/client/types/node_output_compiled_error_value.py +3 -3
- vellum/client/types/node_output_compiled_function_call_value.py +3 -3
- vellum/client/types/node_output_compiled_json_value.py +3 -3
- vellum/client/types/node_output_compiled_number_value.py +3 -3
- vellum/client/types/node_output_compiled_search_results_value.py +3 -3
- vellum/client/types/node_output_compiled_string_value.py +3 -3
- vellum/client/types/node_output_compiled_thinking_value.py +28 -0
- vellum/client/types/node_output_compiled_value.py +8 -5
- vellum/client/types/node_parent_context.py +14 -11
- vellum/client/types/normalized_log_probs.py +3 -3
- vellum/client/types/normalized_token_log_probs.py +2 -2
- vellum/client/types/number_input.py +3 -3
- vellum/client/types/number_vellum_value.py +2 -2
- vellum/client/types/number_vellum_value_request.py +2 -2
- vellum/client/types/open_ai_vectorizer_config.py +3 -3
- vellum/client/types/open_ai_vectorizer_config_request.py +3 -3
- vellum/client/types/open_ai_vectorizer_text_embedding_3_large.py +3 -3
- vellum/client/types/open_ai_vectorizer_text_embedding_3_large_request.py +3 -3
- vellum/client/types/open_ai_vectorizer_text_embedding_3_small.py +3 -3
- vellum/client/types/open_ai_vectorizer_text_embedding_3_small_request.py +3 -3
- vellum/client/types/open_ai_vectorizer_text_embedding_ada_002.py +3 -3
- vellum/client/types/open_ai_vectorizer_text_embedding_ada_002_request.py +3 -3
- vellum/client/types/organization_read.py +6 -3
- vellum/client/types/paginated_container_image_read_list.py +3 -3
- vellum/client/types/paginated_deployment_release_tag_read_list.py +3 -3
- vellum/client/types/paginated_document_index_read_list.py +3 -3
- vellum/client/types/paginated_folder_entity_list.py +3 -3
- vellum/client/types/paginated_slim_deployment_read_list.py +10 -4
- vellum/client/types/paginated_slim_document_list.py +3 -3
- vellum/client/types/paginated_slim_integration_auth_config_read_list.py +23 -0
- vellum/client/types/paginated_slim_integration_read_list.py +23 -0
- vellum/client/types/paginated_slim_tool_definition_list.py +23 -0
- vellum/client/types/paginated_slim_workflow_deployment_list.py +10 -4
- vellum/client/types/paginated_test_suite_run_execution_list.py +10 -4
- vellum/client/types/paginated_test_suite_test_case_list.py +10 -4
- vellum/client/types/paginated_workflow_deployment_release_list.py +30 -0
- vellum/client/types/paginated_workflow_release_tag_read_list.py +3 -3
- vellum/client/types/paginated_workflow_sandbox_example_list.py +3 -3
- vellum/client/types/parent_context.py +21 -11
- vellum/client/types/pdf_search_result_meta_source.py +2 -2
- vellum/client/types/pdf_search_result_meta_source_request.py +2 -2
- vellum/client/types/plain_text_prompt_block.py +4 -4
- vellum/client/types/price.py +3 -3
- vellum/client/types/private_vectorizer.py +23 -0
- vellum/client/types/private_vectorizer_request.py +23 -0
- vellum/client/types/processing_failure_reason_enum.py +3 -1
- vellum/client/types/prompt_block.py +9 -6
- vellum/client/types/prompt_deployment_expand_meta_request.py +2 -2
- vellum/client/types/prompt_deployment_input_request.py +16 -3
- vellum/client/types/prompt_deployment_parent_context.py +13 -10
- vellum/client/types/prompt_deployment_release.py +6 -6
- vellum/client/types/prompt_deployment_release_prompt_deployment.py +3 -2
- vellum/client/types/prompt_deployment_release_prompt_version.py +4 -4
- vellum/client/types/prompt_exec_config.py +15 -9
- vellum/client/types/prompt_execution_meta.py +3 -3
- vellum/client/types/prompt_node_execution_meta.py +3 -3
- vellum/client/types/prompt_node_result.py +3 -3
- vellum/client/types/prompt_node_result_data.py +3 -3
- vellum/client/types/prompt_output.py +7 -3
- vellum/client/types/prompt_parameters.py +2 -2
- vellum/client/types/prompt_push_response.py +2 -2
- vellum/client/types/prompt_request_audio_input.py +26 -0
- vellum/client/types/prompt_request_chat_history_input.py +3 -3
- vellum/client/types/prompt_request_document_input.py +26 -0
- vellum/client/types/prompt_request_image_input.py +26 -0
- vellum/client/types/prompt_request_input.py +16 -3
- vellum/client/types/prompt_request_json_input.py +3 -3
- vellum/client/types/prompt_request_string_input.py +3 -3
- vellum/client/types/prompt_request_video_input.py +26 -0
- vellum/client/types/prompt_settings.py +2 -2
- vellum/client/types/prompt_version_build_config_sandbox.py +2 -2
- vellum/client/types/raw_prompt_execution_overrides_request.py +2 -2
- vellum/client/types/reducto_chunker_config.py +2 -2
- vellum/client/types/reducto_chunker_config_request.py +2 -2
- vellum/client/types/reducto_chunking.py +3 -3
- vellum/client/types/reducto_chunking_request.py +3 -3
- vellum/client/types/rejected_ad_hoc_execute_prompt_event.py +4 -4
- vellum/client/types/rejected_execute_prompt_event.py +4 -4
- vellum/client/types/rejected_execute_prompt_response.py +3 -3
- vellum/client/types/rejected_execute_workflow_workflow_result_event.py +4 -4
- vellum/client/types/rejected_prompt_execution_meta.py +3 -3
- vellum/client/types/rejected_workflow_node_result_event.py +12 -6
- vellum/client/types/release_created_by.py +2 -2
- vellum/client/types/release_environment.py +2 -2
- vellum/client/types/release_release_tag.py +3 -3
- vellum/client/types/release_review_reviewer.py +2 -2
- vellum/client/types/release_tag_release.py +2 -2
- vellum/client/types/replace_test_suite_test_case_request.py +9 -3
- vellum/client/types/rich_text_child_block.py +2 -1
- vellum/client/types/rich_text_prompt_block.py +4 -4
- vellum/client/types/runner_config_request.py +24 -0
- vellum/client/types/sandbox_scenario.py +3 -3
- vellum/client/types/scenario_input.py +14 -3
- vellum/client/types/scenario_input_audio_variable_value.py +22 -0
- vellum/client/types/scenario_input_chat_history_variable_value.py +3 -3
- vellum/client/types/scenario_input_document_variable_value.py +22 -0
- vellum/client/types/scenario_input_image_variable_value.py +22 -0
- vellum/client/types/scenario_input_json_variable_value.py +2 -2
- vellum/client/types/scenario_input_string_variable_value.py +2 -2
- vellum/client/types/scenario_input_video_variable_value.py +22 -0
- vellum/client/types/scheduled_trigger_context.py +39 -0
- vellum/client/types/search_filters_request.py +11 -5
- vellum/client/types/search_node_result.py +3 -3
- vellum/client/types/search_node_result_data.py +3 -3
- vellum/client/types/search_request_options_request.py +13 -7
- vellum/client/types/search_response.py +3 -3
- vellum/client/types/search_result.py +3 -3
- vellum/client/types/search_result_document.py +2 -2
- vellum/client/types/search_result_document_request.py +2 -2
- vellum/client/types/search_result_merging_request.py +2 -2
- vellum/client/types/search_result_meta.py +3 -3
- vellum/client/types/search_result_meta_request.py +3 -3
- vellum/client/types/search_result_request.py +3 -3
- vellum/client/types/search_results_input.py +3 -3
- vellum/client/types/search_results_vellum_value.py +3 -3
- vellum/client/types/search_results_vellum_value_request.py +3 -3
- vellum/client/types/search_weights_request.py +2 -2
- vellum/client/types/secret_type_enum.py +3 -1
- vellum/client/types/sentence_chunker_config.py +2 -2
- vellum/client/types/sentence_chunker_config_request.py +2 -2
- vellum/client/types/sentence_chunking.py +3 -3
- vellum/client/types/sentence_chunking_request.py +3 -3
- vellum/client/types/severity_enum.py +5 -0
- vellum/client/types/slim_composio_tool_definition.py +25 -0
- vellum/client/types/slim_deployment_read.py +15 -9
- vellum/client/types/slim_document.py +6 -5
- vellum/client/types/slim_document_document_to_document_index.py +6 -4
- vellum/client/types/slim_integration_auth_config_read.py +36 -0
- vellum/client/types/slim_integration_read.py +25 -0
- vellum/client/types/slim_release_review.py +4 -4
- vellum/client/types/slim_workflow_deployment.py +16 -10
- vellum/client/types/slim_workflow_execution_read.py +24 -15
- vellum/client/types/span_link.py +15 -12
- vellum/client/types/span_link_type_enum.py +1 -1
- vellum/client/types/streaming_ad_hoc_execute_prompt_event.py +4 -4
- vellum/client/types/streaming_execute_prompt_event.py +3 -3
- vellum/client/types/streaming_prompt_execution_meta.py +2 -2
- vellum/client/types/streaming_workflow_node_result_event.py +12 -6
- vellum/client/types/string_chat_message_content.py +2 -2
- vellum/client/types/string_chat_message_content_request.py +2 -2
- vellum/client/types/string_input.py +3 -3
- vellum/client/types/string_input_request.py +3 -3
- vellum/client/types/string_vellum_value.py +2 -2
- vellum/client/types/string_vellum_value_request.py +2 -2
- vellum/client/types/submit_completion_actual_request.py +3 -3
- vellum/client/types/submit_workflow_execution_actual_request.py +3 -2
- vellum/client/types/subworkflow_node_result.py +3 -3
- vellum/client/types/subworkflow_node_result_data.py +2 -2
- vellum/client/types/templating_node_array_result.py +11 -5
- vellum/client/types/templating_node_chat_history_result.py +3 -3
- vellum/client/types/templating_node_error_result.py +3 -3
- vellum/client/types/templating_node_function_call_result.py +3 -3
- vellum/client/types/templating_node_json_result.py +2 -2
- vellum/client/types/templating_node_number_result.py +2 -2
- vellum/client/types/templating_node_result.py +10 -4
- vellum/client/types/templating_node_result_data.py +10 -4
- vellum/client/types/templating_node_result_output.py +6 -5
- vellum/client/types/templating_node_search_results_result.py +3 -3
- vellum/client/types/templating_node_string_result.py +2 -2
- vellum/client/types/terminal_node_array_result.py +11 -5
- vellum/client/types/terminal_node_chat_history_result.py +2 -2
- vellum/client/types/terminal_node_error_result.py +2 -2
- vellum/client/types/terminal_node_function_call_result.py +2 -2
- vellum/client/types/terminal_node_json_result.py +2 -2
- vellum/client/types/terminal_node_number_result.py +2 -2
- vellum/client/types/terminal_node_result.py +10 -4
- vellum/client/types/terminal_node_result_data.py +10 -4
- vellum/client/types/terminal_node_result_output.py +6 -5
- vellum/client/types/terminal_node_search_results_result.py +2 -2
- vellum/client/types/terminal_node_string_result.py +2 -2
- vellum/client/types/test_case_array_variable_value.py +11 -5
- vellum/client/types/test_case_audio_variable_value.py +27 -0
- vellum/client/types/test_case_chat_history_variable_value.py +3 -3
- vellum/client/types/test_case_document_variable_value.py +27 -0
- vellum/client/types/test_case_error_variable_value.py +3 -3
- vellum/client/types/test_case_function_call_variable_value.py +3 -3
- vellum/client/types/test_case_image_variable_value.py +27 -0
- vellum/client/types/test_case_json_variable_value.py +2 -2
- vellum/client/types/test_case_number_variable_value.py +2 -2
- vellum/client/types/test_case_search_results_variable_value.py +3 -3
- vellum/client/types/test_case_string_variable_value.py +2 -2
- vellum/client/types/test_case_variable_value.py +14 -5
- vellum/client/types/test_case_video_variable_value.py +27 -0
- vellum/client/types/test_suite_run_deployment_release_tag_exec_config.py +3 -3
- vellum/client/types/test_suite_run_deployment_release_tag_exec_config_data.py +3 -3
- vellum/client/types/test_suite_run_deployment_release_tag_exec_config_data_request.py +3 -3
- vellum/client/types/test_suite_run_deployment_release_tag_exec_config_request.py +3 -3
- vellum/client/types/test_suite_run_exec_config.py +2 -1
- vellum/client/types/test_suite_run_exec_config_request.py +2 -1
- vellum/client/types/test_suite_run_execution.py +11 -5
- vellum/client/types/test_suite_run_execution_array_output.py +11 -5
- vellum/client/types/test_suite_run_execution_chat_history_output.py +3 -3
- vellum/client/types/test_suite_run_execution_error_output.py +3 -3
- vellum/client/types/test_suite_run_execution_function_call_output.py +3 -3
- vellum/client/types/test_suite_run_execution_json_output.py +2 -2
- vellum/client/types/test_suite_run_execution_metric_definition.py +2 -2
- vellum/client/types/test_suite_run_execution_metric_result.py +11 -5
- vellum/client/types/test_suite_run_execution_number_output.py +2 -2
- vellum/client/types/test_suite_run_execution_output.py +6 -5
- vellum/client/types/test_suite_run_execution_search_results_output.py +3 -3
- vellum/client/types/test_suite_run_execution_string_output.py +2 -2
- vellum/client/types/test_suite_run_external_exec_config.py +10 -4
- vellum/client/types/test_suite_run_external_exec_config_data.py +10 -4
- vellum/client/types/test_suite_run_external_exec_config_data_request.py +10 -4
- vellum/client/types/test_suite_run_external_exec_config_request.py +10 -4
- vellum/client/types/test_suite_run_metric_array_output.py +11 -5
- vellum/client/types/test_suite_run_metric_error_output.py +3 -3
- vellum/client/types/test_suite_run_metric_json_output.py +2 -2
- vellum/client/types/test_suite_run_metric_number_output.py +2 -2
- vellum/client/types/test_suite_run_metric_output.py +5 -4
- vellum/client/types/test_suite_run_metric_string_output.py +2 -2
- vellum/client/types/test_suite_run_progress.py +2 -2
- vellum/client/types/test_suite_run_prompt_sandbox_exec_config_data_request.py +3 -3
- vellum/client/types/test_suite_run_prompt_sandbox_exec_config_request.py +3 -3
- vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config.py +3 -3
- vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_data.py +3 -3
- vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_data_request.py +3 -3
- vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_request.py +3 -3
- vellum/client/types/test_suite_run_read.py +12 -6
- vellum/client/types/test_suite_run_test_suite.py +2 -2
- vellum/client/types/test_suite_run_workflow_release_tag_exec_config.py +3 -3
- vellum/client/types/test_suite_run_workflow_release_tag_exec_config_data.py +3 -3
- vellum/client/types/test_suite_run_workflow_release_tag_exec_config_data_request.py +3 -3
- vellum/client/types/test_suite_run_workflow_release_tag_exec_config_request.py +3 -3
- vellum/client/types/test_suite_run_workflow_sandbox_exec_config_data_request.py +3 -3
- vellum/client/types/test_suite_run_workflow_sandbox_exec_config_request.py +3 -3
- vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config.py +3 -3
- vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_data.py +3 -3
- vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_data_request.py +3 -3
- vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_request.py +3 -3
- vellum/client/types/test_suite_test_case.py +10 -4
- vellum/client/types/test_suite_test_case_bulk_operation_request.py +2 -1
- vellum/client/types/test_suite_test_case_bulk_result.py +2 -1
- vellum/client/types/test_suite_test_case_create_bulk_operation_request.py +10 -4
- vellum/client/types/test_suite_test_case_created_bulk_result.py +3 -3
- vellum/client/types/test_suite_test_case_created_bulk_result_data.py +2 -2
- vellum/client/types/test_suite_test_case_delete_bulk_operation_data_request.py +2 -2
- vellum/client/types/test_suite_test_case_delete_bulk_operation_request.py +3 -3
- vellum/client/types/test_suite_test_case_deleted_bulk_result.py +3 -3
- vellum/client/types/test_suite_test_case_deleted_bulk_result_data.py +2 -2
- vellum/client/types/test_suite_test_case_rejected_bulk_result.py +2 -2
- vellum/client/types/test_suite_test_case_replace_bulk_operation_request.py +10 -4
- vellum/client/types/test_suite_test_case_replaced_bulk_result.py +3 -3
- vellum/client/types/test_suite_test_case_replaced_bulk_result_data.py +2 -2
- vellum/client/types/test_suite_test_case_upsert_bulk_operation_request.py +10 -4
- vellum/client/types/thinking_vellum_value.py +25 -0
- vellum/client/types/thinking_vellum_value_request.py +25 -0
- vellum/client/types/token_overlapping_window_chunker_config.py +2 -2
- vellum/client/types/token_overlapping_window_chunker_config_request.py +2 -2
- vellum/client/types/token_overlapping_window_chunking.py +3 -3
- vellum/client/types/token_overlapping_window_chunking_request.py +3 -3
- vellum/client/types/type_checker_enum.py +5 -0
- vellum/client/types/update_active_workspace_response.py +32 -0
- vellum/client/types/upload_document_response.py +3 -3
- vellum/client/types/uploaded_file_read.py +27 -0
- vellum/client/types/upsert_test_suite_test_case_request.py +9 -3
- vellum/client/types/variable_prompt_block.py +11 -4
- vellum/client/types/vellum_audio.py +10 -5
- vellum/client/types/vellum_audio_request.py +8 -4
- vellum/client/types/vellum_code_resource_definition.py +7 -2
- vellum/client/types/vellum_document.py +13 -4
- vellum/client/types/vellum_document_request.py +11 -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 +13 -4
- vellum/client/types/vellum_image_request.py +11 -3
- vellum/client/types/vellum_node_execution_event.py +6 -3
- vellum/client/types/vellum_sdk_error.py +4 -3
- vellum/client/types/vellum_sdk_error_code_enum.py +5 -0
- vellum/client/types/vellum_secret.py +2 -2
- vellum/client/types/vellum_span.py +2 -1
- vellum/client/types/vellum_value.py +13 -8
- vellum/client/types/vellum_value_logical_condition_group_request.py +6 -6
- vellum/client/types/vellum_value_logical_condition_request.py +13 -7
- vellum/client/types/vellum_value_logical_expression_request.py +2 -1
- vellum/client/types/vellum_value_request.py +13 -8
- vellum/client/types/vellum_variable.py +18 -7
- vellum/client/types/vellum_variable_extensions.py +4 -2
- vellum/client/types/vellum_variable_type.py +4 -1
- vellum/client/types/vellum_video.py +29 -0
- vellum/client/types/vellum_video_request.py +28 -0
- vellum/client/types/vellum_workflow_execution_event.py +4 -3
- vellum/client/types/video_chat_message_content.py +25 -0
- vellum/client/types/video_chat_message_content_request.py +25 -0
- vellum/client/types/video_input.py +30 -0
- vellum/client/types/video_input_request.py +30 -0
- vellum/client/types/video_prompt_block.py +29 -0
- vellum/client/types/video_vellum_value.py +25 -0
- vellum/client/types/video_vellum_value_request.py +25 -0
- vellum/client/types/workflow_deployment_display_data.py +27 -0
- vellum/client/types/workflow_deployment_event_executions_response.py +20 -11
- vellum/client/types/workflow_deployment_history_item.py +10 -4
- vellum/client/types/workflow_deployment_parent_context.py +13 -10
- vellum/client/types/workflow_deployment_read.py +22 -10
- vellum/client/types/workflow_deployment_release.py +13 -7
- vellum/client/types/workflow_deployment_release_workflow_deployment.py +3 -2
- vellum/client/types/workflow_deployment_release_workflow_version.py +10 -4
- vellum/client/types/workflow_display_icon.py +24 -0
- vellum/client/types/workflow_error.py +1 -0
- vellum/client/types/workflow_event.py +39 -0
- vellum/client/types/workflow_event_error.py +5 -3
- vellum/client/types/workflow_event_execution_read.py +26 -16
- vellum/client/types/workflow_execution_actual.py +11 -5
- vellum/client/types/workflow_execution_actual_chat_history_request.py +2 -2
- vellum/client/types/workflow_execution_actual_json_request.py +2 -2
- vellum/client/types/workflow_execution_actual_string_request.py +2 -2
- vellum/client/types/workflow_execution_detail.py +51 -0
- vellum/client/types/workflow_execution_event_error_code.py +5 -0
- vellum/client/types/workflow_execution_fulfilled_body.py +6 -3
- vellum/client/types/workflow_execution_fulfilled_event.py +24 -15
- vellum/client/types/workflow_execution_initiated_body.py +3 -3
- vellum/client/types/workflow_execution_initiated_event.py +24 -15
- vellum/client/types/workflow_execution_node_result_event.py +10 -4
- vellum/client/types/workflow_execution_paused_body.py +4 -4
- vellum/client/types/workflow_execution_paused_event.py +24 -15
- vellum/client/types/workflow_execution_rejected_body.py +5 -4
- vellum/client/types/workflow_execution_rejected_event.py +24 -15
- vellum/client/types/workflow_execution_resumed_body.py +3 -3
- vellum/client/types/workflow_execution_resumed_event.py +24 -15
- vellum/client/types/workflow_execution_snapshotted_body.py +4 -3
- vellum/client/types/workflow_execution_snapshotted_event.py +24 -15
- vellum/client/types/workflow_execution_span.py +22 -11
- vellum/client/types/workflow_execution_span_attributes.py +3 -2
- vellum/client/types/workflow_execution_streaming_body.py +4 -4
- vellum/client/types/workflow_execution_streaming_event.py +24 -15
- vellum/client/types/workflow_execution_usage_calculation_error.py +3 -3
- vellum/client/types/workflow_execution_usage_calculation_fulfilled_body.py +22 -0
- vellum/client/types/workflow_execution_usage_result.py +3 -3
- vellum/client/types/workflow_execution_view_online_eval_metric_result.py +10 -4
- vellum/client/types/workflow_execution_workflow_result_event.py +10 -4
- vellum/client/types/workflow_expand_meta_request.py +2 -2
- vellum/client/types/workflow_initialization_error.py +2 -2
- vellum/client/types/workflow_input.py +31 -0
- vellum/client/types/workflow_node_result_data.py +8 -7
- vellum/client/types/workflow_node_result_event.py +3 -2
- vellum/client/types/workflow_output.py +12 -5
- vellum/client/types/workflow_output_array.py +12 -6
- vellum/client/types/workflow_output_audio.py +31 -0
- vellum/client/types/workflow_output_chat_history.py +3 -3
- vellum/client/types/workflow_output_document.py +31 -0
- vellum/client/types/workflow_output_error.py +3 -3
- vellum/client/types/workflow_output_function_call.py +3 -3
- vellum/client/types/workflow_output_image.py +3 -3
- vellum/client/types/workflow_output_json.py +3 -3
- vellum/client/types/workflow_output_number.py +3 -3
- vellum/client/types/workflow_output_search_results.py +3 -3
- vellum/client/types/workflow_output_string.py +3 -3
- vellum/client/types/workflow_output_video.py +31 -0
- vellum/client/types/workflow_parent_context.py +14 -11
- vellum/client/types/workflow_push_deployment_config_request.py +3 -2
- vellum/client/types/workflow_push_response.py +2 -2
- vellum/client/types/workflow_release_tag_read.py +4 -4
- vellum/client/types/workflow_release_tag_workflow_deployment_history_item.py +2 -2
- vellum/client/types/workflow_request_audio_input_request.py +30 -0
- vellum/client/types/workflow_request_chat_history_input_request.py +3 -3
- vellum/client/types/workflow_request_document_input_request.py +30 -0
- vellum/client/types/workflow_request_image_input_request.py +30 -0
- vellum/client/types/workflow_request_input_request.py +11 -2
- vellum/client/types/workflow_request_json_input_request.py +3 -3
- vellum/client/types/workflow_request_number_input_request.py +3 -3
- vellum/client/types/workflow_request_string_input_request.py +3 -3
- vellum/client/types/workflow_request_video_input_request.py +30 -0
- vellum/client/types/workflow_resolved_state.py +31 -0
- vellum/client/types/workflow_result_event.py +14 -8
- vellum/client/types/workflow_result_event_output_data.py +7 -6
- vellum/client/types/workflow_result_event_output_data_array.py +13 -7
- vellum/client/types/workflow_result_event_output_data_chat_history.py +4 -4
- vellum/client/types/workflow_result_event_output_data_error.py +4 -4
- vellum/client/types/workflow_result_event_output_data_function_call.py +4 -4
- vellum/client/types/workflow_result_event_output_data_json.py +4 -4
- vellum/client/types/workflow_result_event_output_data_number.py +4 -4
- vellum/client/types/workflow_result_event_output_data_search_results.py +4 -4
- vellum/client/types/workflow_result_event_output_data_string.py +4 -4
- 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_execute_node_response.py +8 -0
- vellum/client/types/workflow_sandbox_parent_context.py +13 -10
- vellum/client/types/workflow_stream_event.py +2 -1
- vellum/client/types/workspace_display_config.py +19 -0
- vellum/client/types/workspace_read.py +5 -3
- vellum/client/types/workspace_secret_read.py +3 -3
- vellum/client/utils.py +24 -0
- vellum/core/force_multipart.py +3 -0
- vellum/core/http_response.py +3 -0
- vellum/errors/misdirected_request_error.py +3 -0
- vellum/errors/too_many_requests_error.py +3 -0
- vellum/errors/unauthorized_error.py +3 -0
- vellum/evaluations/resources.py +5 -5
- vellum/plugins/pydantic.py +14 -3
- vellum/plugins/tests/__init__.py +0 -0
- vellum/plugins/tests/test_pydantic.py +30 -0
- vellum/plugins/vellum_mypy.py +68 -25
- vellum/prompts/__init__.py +3 -0
- vellum/prompts/blocks/__init__.py +3 -0
- vellum/prompts/blocks/compilation.py +29 -11
- vellum/prompts/blocks/helpers.py +31 -0
- vellum/prompts/blocks/tests/test_compilation.py +64 -0
- vellum/raw_client.py +3 -0
- vellum/resources/ad_hoc/raw_client.py +3 -0
- vellum/resources/container_images/raw_client.py +3 -0
- vellum/resources/deployments/raw_client.py +3 -0
- vellum/resources/document_indexes/raw_client.py +3 -0
- vellum/resources/documents/raw_client.py +3 -0
- vellum/resources/{release_reviews → environments}/__init__.py +1 -1
- vellum/resources/{release_reviews → environments}/client.py +1 -1
- vellum/resources/environments/raw_client.py +3 -0
- vellum/resources/events/__init__.py +3 -0
- vellum/resources/events/client.py +3 -0
- vellum/resources/events/raw_client.py +3 -0
- vellum/resources/folder_entities/raw_client.py +3 -0
- vellum/resources/integration_auth_configs/__init__.py +3 -0
- vellum/resources/integration_auth_configs/client.py +3 -0
- vellum/resources/integration_auth_configs/raw_client.py +3 -0
- vellum/resources/integration_providers/__init__.py +3 -0
- vellum/resources/integration_providers/client.py +3 -0
- vellum/resources/integration_providers/raw_client.py +3 -0
- vellum/resources/integrations/__init__.py +3 -0
- vellum/resources/integrations/client.py +3 -0
- vellum/resources/integrations/raw_client.py +3 -0
- vellum/resources/metric_definitions/raw_client.py +3 -0
- vellum/resources/ml_models/raw_client.py +3 -0
- vellum/resources/organizations/raw_client.py +3 -0
- vellum/resources/prompts/raw_client.py +3 -0
- vellum/resources/sandboxes/raw_client.py +3 -0
- vellum/resources/test_suite_runs/raw_client.py +3 -0
- vellum/resources/test_suites/raw_client.py +3 -0
- vellum/resources/uploaded_files/__init__.py +3 -0
- vellum/resources/uploaded_files/client.py +3 -0
- vellum/resources/uploaded_files/raw_client.py +3 -0
- vellum/resources/workflow_deployments/raw_client.py +3 -0
- vellum/resources/workflow_executions/__init__.py +3 -0
- vellum/resources/workflow_executions/client.py +3 -0
- vellum/resources/workflow_executions/raw_client.py +3 -0
- vellum/resources/workflow_sandboxes/raw_client.py +3 -0
- vellum/resources/workflows/raw_client.py +3 -0
- vellum/resources/workspace_secrets/raw_client.py +3 -0
- vellum/resources/workspaces/raw_client.py +3 -0
- vellum/types/api_actor_type_enum.py +3 -0
- vellum/types/audio_input.py +3 -0
- vellum/types/audio_input_request.py +3 -0
- vellum/types/auth_type_enum.py +3 -0
- vellum/types/build_status_enum.py +3 -0
- vellum/types/check_workflow_execution_status_error.py +3 -0
- vellum/types/check_workflow_execution_status_response.py +3 -0
- vellum/types/code_execution_package_request.py +3 -0
- vellum/types/components_schemas_composio_execute_tool_request.py +3 -0
- vellum/types/components_schemas_composio_execute_tool_response.py +3 -0
- vellum/types/components_schemas_composio_integration_exec_config.py +3 -0
- vellum/types/components_schemas_composio_tool_definition.py +3 -0
- vellum/types/components_schemas_slim_composio_tool_definition.py +3 -0
- vellum/types/composio_execute_tool_request.py +3 -0
- vellum/types/composio_execute_tool_response.py +3 -0
- vellum/types/composio_integration_exec_config.py +3 -0
- vellum/types/composio_tool_definition.py +3 -0
- vellum/types/container_image_build_config.py +3 -0
- vellum/types/create_workflow_event_request.py +3 -0
- vellum/types/dataset_row_push_request.py +3 -0
- vellum/types/delimiter_chunker_config.py +3 -0
- vellum/types/delimiter_chunker_config_request.py +3 -0
- vellum/types/delimiter_chunking.py +3 -0
- vellum/types/delimiter_chunking_request.py +3 -0
- vellum/types/deprecated_prompt_request_input.py +3 -0
- vellum/types/document_input.py +3 -0
- vellum/types/document_input_request.py +3 -0
- vellum/types/environment_display_config.py +3 -0
- vellum/types/environment_read.py +3 -0
- vellum/types/error_detail_response.py +3 -0
- vellum/types/event_create_response.py +3 -0
- vellum/types/execute_workflow_async_response.py +3 -0
- vellum/types/execution_audio_vellum_value.py +3 -0
- vellum/types/execution_document_vellum_value.py +3 -0
- vellum/types/execution_image_vellum_value.py +3 -0
- vellum/types/execution_thinking_vellum_value.py +3 -0
- vellum/types/execution_video_vellum_value.py +3 -0
- vellum/types/external_parent_context.py +3 -0
- vellum/types/fast_embed_vectorizer_baai_bge_small_en_v_15.py +3 -0
- vellum/types/fast_embed_vectorizer_baai_bge_small_en_v_15_request.py +3 -0
- vellum/types/folder_entity_dataset.py +3 -0
- vellum/types/folder_entity_dataset_data.py +3 -0
- vellum/types/google_vertex_ai_vectorizer_gemini_embedding_001.py +3 -0
- vellum/types/google_vertex_ai_vectorizer_gemini_embedding_001_request.py +3 -0
- vellum/types/image_input.py +3 -0
- vellum/types/image_input_request.py +3 -0
- vellum/types/integration.py +3 -0
- vellum/types/integration_auth_config_integration.py +3 -0
- vellum/types/integration_auth_config_integration_credential.py +3 -0
- vellum/types/integration_credential_access_type.py +3 -0
- vellum/types/integration_name.py +3 -0
- vellum/types/integration_provider.py +3 -0
- vellum/types/integration_read.py +3 -0
- vellum/types/integration_trigger_context.py +3 -0
- vellum/types/named_scenario_input_audio_variable_value_request.py +3 -0
- vellum/types/named_scenario_input_document_variable_value_request.py +3 -0
- vellum/types/named_scenario_input_image_variable_value_request.py +3 -0
- vellum/types/named_scenario_input_video_variable_value_request.py +3 -0
- vellum/types/named_test_case_audio_variable_value.py +3 -0
- vellum/types/named_test_case_audio_variable_value_request.py +3 -0
- vellum/types/named_test_case_document_variable_value.py +3 -0
- vellum/types/named_test_case_document_variable_value_request.py +3 -0
- vellum/types/named_test_case_image_variable_value.py +3 -0
- vellum/types/named_test_case_image_variable_value_request.py +3 -0
- vellum/types/named_test_case_video_variable_value.py +3 -0
- vellum/types/named_test_case_video_variable_value_request.py +3 -0
- vellum/types/node_execution_log_body.py +3 -0
- vellum/types/node_execution_log_event.py +3 -0
- vellum/types/node_input_compiled_audio_value.py +3 -0
- vellum/types/node_input_compiled_document_value.py +3 -0
- vellum/types/node_input_compiled_image_value.py +3 -0
- vellum/types/node_input_compiled_video_value.py +3 -0
- vellum/types/node_output_compiled_thinking_value.py +3 -0
- vellum/types/paginated_slim_integration_auth_config_read_list.py +3 -0
- vellum/types/paginated_slim_integration_read_list.py +3 -0
- vellum/types/paginated_slim_tool_definition_list.py +3 -0
- vellum/types/paginated_workflow_deployment_release_list.py +3 -0
- vellum/types/private_vectorizer.py +3 -0
- vellum/types/private_vectorizer_request.py +3 -0
- vellum/types/prompt_request_audio_input.py +3 -0
- vellum/types/prompt_request_document_input.py +3 -0
- vellum/types/prompt_request_image_input.py +3 -0
- vellum/types/prompt_request_video_input.py +3 -0
- vellum/types/runner_config_request.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/severity_enum.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/type_checker_enum.py +3 -0
- vellum/types/update_active_workspace_response.py +3 -0
- vellum/types/uploaded_file_read.py +3 -0
- vellum/types/vellum_video.py +3 -0
- vellum/types/vellum_video_request.py +3 -0
- vellum/types/video_chat_message_content.py +3 -0
- vellum/types/video_chat_message_content_request.py +3 -0
- vellum/types/video_input.py +3 -0
- vellum/types/video_input_request.py +3 -0
- vellum/types/video_prompt_block.py +3 -0
- vellum/types/video_vellum_value.py +3 -0
- vellum/types/video_vellum_value_request.py +3 -0
- vellum/types/workflow_deployment_display_data.py +3 -0
- vellum/types/workflow_display_icon.py +3 -0
- vellum/types/workflow_event.py +3 -0
- vellum/types/workflow_execution_detail.py +3 -0
- vellum/types/workflow_execution_usage_calculation_fulfilled_body.py +3 -0
- vellum/types/workflow_input.py +3 -0
- vellum/types/workflow_output_audio.py +3 -0
- vellum/types/workflow_output_document.py +3 -0
- vellum/types/workflow_output_video.py +3 -0
- vellum/types/workflow_request_audio_input_request.py +3 -0
- vellum/types/workflow_request_document_input_request.py +3 -0
- vellum/types/workflow_request_image_input_request.py +3 -0
- vellum/types/workflow_request_video_input_request.py +3 -0
- vellum/types/workflow_resolved_state.py +3 -0
- vellum/types/workflow_result_event_state.py +3 -0
- vellum/types/workflow_sandbox_display_data.py +3 -0
- vellum/types/workflow_sandbox_execute_node_response.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 +135 -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 +267 -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/tests/test_vellum_client.py +95 -0
- vellum/utils/uuid.py +19 -2
- vellum/utils/vellum_client.py +47 -0
- vellum/workflows/__init__.py +84 -0
- vellum/workflows/constants.py +7 -0
- vellum/workflows/context.py +27 -9
- vellum/workflows/descriptors/base.py +169 -2
- vellum/workflows/descriptors/exceptions.py +18 -1
- vellum/workflows/descriptors/tests/test_utils.py +66 -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/tests/__init__.py +0 -0
- vellum/workflows/errors/tests/test_types.py +52 -0
- vellum/workflows/errors/types.py +19 -1
- vellum/workflows/events/__init__.py +2 -0
- vellum/workflows/events/context.py +90 -0
- vellum/workflows/events/exception_handling.py +58 -0
- vellum/workflows/events/node.py +51 -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 +268 -20
- vellum/workflows/events/types.py +34 -5
- vellum/workflows/events/workflow.py +138 -9
- vellum/workflows/exceptions.py +46 -7
- vellum/workflows/executable.py +9 -0
- vellum/workflows/expressions/accessor.py +65 -11
- vellum/workflows/expressions/add.py +44 -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 +96 -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 +281 -13
- vellum/workflows/graph/tests/test_graph.py +528 -1
- vellum/workflows/inputs/__init__.py +2 -0
- vellum/workflows/inputs/base.py +63 -13
- vellum/workflows/inputs/dataset_row.py +186 -0
- vellum/workflows/inputs/tests/test_inputs.py +182 -2
- 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 +383 -0
- vellum/workflows/integrations/vellum_integration_service.py +147 -0
- vellum/workflows/loaders/__init__.py +3 -0
- vellum/workflows/loaders/base.py +38 -0
- vellum/workflows/nodes/__init__.py +2 -0
- vellum/workflows/nodes/bases/base.py +165 -82
- vellum/workflows/nodes/bases/base_adornment_node.py +55 -1
- vellum/workflows/nodes/bases/tests/test_base_node.py +153 -4
- vellum/workflows/nodes/core/error_node/node.py +11 -2
- vellum/workflows/nodes/core/inline_subworkflow_node/node.py +30 -3
- vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py +36 -1
- vellum/workflows/nodes/core/map_node/node.py +33 -6
- vellum/workflows/nodes/core/map_node/tests/test_node.py +106 -0
- vellum/workflows/nodes/core/retry_node/node.py +1 -0
- vellum/workflows/nodes/core/retry_node/tests/test_node.py +2 -3
- vellum/workflows/nodes/core/templating_node/node.py +7 -2
- vellum/workflows/nodes/core/templating_node/tests/test_templating_node.py +194 -1
- vellum/workflows/nodes/core/try_node/node.py +1 -0
- vellum/workflows/nodes/displayable/__init__.py +6 -0
- vellum/workflows/nodes/displayable/api_node/node.py +13 -3
- vellum/workflows/nodes/displayable/api_node/tests/test_api_node.py +151 -2
- vellum/workflows/nodes/displayable/bases/api_node/node.py +71 -17
- 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 +85 -7
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py +324 -19
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/test_inline_prompt_node.py +352 -32
- vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py +86 -3
- 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 +30 -10
- vellum/workflows/nodes/displayable/code_execution_node/tests/test_node.py +284 -14
- vellum/workflows/nodes/displayable/code_execution_node/utils.py +8 -21
- vellum/workflows/nodes/displayable/conditional_node/node.py +8 -4
- vellum/workflows/nodes/displayable/final_output_node/node.py +34 -0
- vellum/workflows/nodes/displayable/final_output_node/tests/test_node.py +146 -1
- vellum/workflows/nodes/displayable/guardrail_node/node.py +13 -4
- vellum/workflows/nodes/displayable/inline_prompt_node/node.py +9 -36
- vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py +3 -0
- vellum/workflows/nodes/displayable/merge_node/node.py +8 -1
- vellum/workflows/nodes/displayable/note_node/node.py +11 -1
- vellum/workflows/nodes/displayable/prompt_deployment_node/node.py +7 -23
- vellum/workflows/nodes/displayable/search_node/node.py +15 -2
- vellum/workflows/nodes/displayable/search_node/tests/test_node.py +33 -0
- vellum/workflows/nodes/displayable/set_state_node/__init__.py +5 -0
- vellum/workflows/nodes/displayable/set_state_node/node.py +71 -0
- vellum/workflows/nodes/displayable/set_state_node/tests/__init__.py +0 -0
- vellum/workflows/nodes/displayable/set_state_node/tests/test_node.py +212 -0
- vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py +231 -59
- vellum/workflows/nodes/displayable/subworkflow_deployment_node/tests/test_node.py +1 -1
- vellum/workflows/nodes/displayable/tests/test_inline_text_prompt_node.py +4 -1
- vellum/workflows/nodes/displayable/tests/test_search_node_error_handling.py +329 -0
- vellum/workflows/nodes/displayable/tests/test_text_prompt_deployment_node.py +56 -14
- vellum/workflows/nodes/displayable/tool_calling_node/__init__.py +3 -0
- vellum/workflows/nodes/displayable/tool_calling_node/node.py +265 -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 +998 -0
- vellum/workflows/nodes/displayable/tool_calling_node/tests/test_utils.py +316 -0
- vellum/workflows/nodes/displayable/tool_calling_node/utils.py +654 -0
- vellum/workflows/nodes/displayable/web_search_node/__init__.py +3 -0
- vellum/workflows/nodes/displayable/web_search_node/node.py +136 -0
- vellum/workflows/nodes/displayable/web_search_node/tests/__init__.py +0 -0
- vellum/workflows/nodes/displayable/web_search_node/tests/test_node.py +246 -0
- vellum/workflows/nodes/experimental/__init__.py +1 -3
- vellum/workflows/nodes/mocks.py +71 -206
- vellum/workflows/nodes/tests/test_mocks.py +0 -177
- vellum/workflows/nodes/tests/test_utils.py +34 -5
- vellum/workflows/nodes/utils.py +68 -14
- vellum/workflows/outputs/base.py +88 -14
- vellum/workflows/ports/node_ports.py +3 -0
- vellum/workflows/ports/port.py +27 -12
- vellum/workflows/ports/tests/test_port.py +45 -0
- vellum/workflows/ports/utils.py +26 -6
- vellum/workflows/references/__init__.py +2 -0
- vellum/workflows/references/constant.py +4 -1
- vellum/workflows/references/environment_variable.py +17 -9
- vellum/workflows/references/lazy.py +8 -0
- vellum/workflows/references/output.py +4 -6
- vellum/workflows/references/state_value.py +24 -1
- vellum/workflows/references/tests/test_lazy.py +58 -0
- vellum/workflows/references/trigger.py +82 -0
- vellum/workflows/references/workflow_input.py +8 -0
- vellum/workflows/resolvers/base.py +19 -1
- vellum/workflows/resolvers/resolver.py +81 -0
- vellum/workflows/resolvers/tests/test_resolver.py +199 -0
- vellum/workflows/resolvers/types.py +11 -0
- vellum/workflows/runner/runner.py +770 -143
- vellum/workflows/runner/tests/__init__.py +0 -0
- vellum/workflows/runner/tests/test_runner.py +170 -0
- vellum/workflows/sandbox.py +54 -9
- vellum/workflows/state/base.py +238 -55
- vellum/workflows/state/context.py +297 -7
- vellum/workflows/state/delta.py +20 -0
- vellum/workflows/state/encoder.py +2 -77
- vellum/workflows/state/tests/test_state.py +292 -9
- vellum/workflows/tests/test_dataset_row.py +191 -0
- vellum/workflows/tests/test_sandbox.py +226 -0
- vellum/workflows/tests/triggers/test_integration_trigger.py +156 -0
- vellum/workflows/triggers/__init__.py +7 -0
- vellum/workflows/triggers/base.py +523 -0
- vellum/workflows/triggers/chat_message.py +141 -0
- vellum/workflows/triggers/integration.py +198 -0
- vellum/workflows/triggers/manual.py +39 -0
- vellum/workflows/triggers/schedule.py +20 -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_chat_message.py +257 -0
- vellum/workflows/triggers/tests/test_integration.py +155 -0
- vellum/workflows/types/__init__.py +2 -1
- vellum/workflows/types/code_execution_node_wrappers.py +5 -1
- vellum/workflows/types/core.py +23 -0
- vellum/workflows/types/definition.py +161 -2
- vellum/workflows/types/generics.py +17 -0
- vellum/workflows/types/tests/test_definition.py +183 -0
- vellum/workflows/types/tests/test_utils.py +23 -0
- vellum/workflows/types/utils.py +65 -5
- vellum/workflows/types/workflow_metadata.py +124 -0
- vellum/workflows/utils/files.py +28 -0
- vellum/workflows/utils/functions.py +386 -25
- vellum/workflows/utils/hmac.py +44 -0
- vellum/workflows/utils/names.py +32 -4
- vellum/workflows/utils/pydantic_schema.py +56 -0
- vellum/workflows/utils/tests/test_functions.py +480 -23
- vellum/workflows/utils/tests/test_names.py +9 -0
- vellum/workflows/utils/tests/test_validate.py +79 -0
- vellum/workflows/utils/tests/test_vellum_variables.py +93 -3
- vellum/workflows/utils/uuids.py +125 -0
- vellum/workflows/utils/validate.py +108 -0
- vellum/workflows/utils/vellum_variables.py +224 -20
- vellum/workflows/utils/zip.py +46 -0
- vellum/workflows/vellum_client.py +3 -33
- vellum/workflows/workflows/base.py +503 -50
- vellum/workflows/workflows/event_filters.py +13 -0
- vellum/workflows/workflows/tests/test_base_workflow.py +169 -6
- vellum/workflows/workflows/tests/test_event_filters.py +126 -0
- {vellum_ai-0.14.63.dist-info → vellum_ai-1.13.5.dist-info}/METADATA +17 -13
- vellum_ai-1.13.5.dist-info/RECORD +2224 -0
- vellum_ai-1.13.5.dist-info/entry_points.txt +4 -0
- vellum_cli/__init__.py +55 -4
- vellum_cli/config.py +21 -5
- vellum_cli/image_push.py +106 -8
- vellum_cli/move.py +56 -0
- vellum_cli/ping.py +6 -0
- vellum_cli/pull.py +50 -14
- vellum_cli/push.py +124 -34
- vellum_cli/tests/conftest.py +13 -12
- vellum_cli/tests/test_image_push.py +192 -21
- 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 +125 -129
- vellum_cli/tests/test_push.py +693 -12
- vellum_ee/assets/node-definitions.json +1348 -0
- vellum_ee/scripts/generate_node_definitions.py +101 -0
- vellum_ee/workflows/display/base.py +33 -58
- 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 +199 -58
- vellum_ee/workflows/display/nodes/tests/test_base_node_display.py +242 -3
- vellum_ee/workflows/display/nodes/types.py +1 -0
- vellum_ee/workflows/display/nodes/vellum/api_node.py +26 -13
- vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py +8 -5
- vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +23 -7
- vellum_ee/workflows/display/nodes/vellum/conditional_node.py +18 -7
- vellum_ee/workflows/display/nodes/vellum/error_node.py +2 -4
- vellum_ee/workflows/display/nodes/vellum/final_output_node.py +3 -14
- vellum_ee/workflows/display/nodes/vellum/guardrail_node.py +2 -5
- vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py +85 -44
- vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py +44 -18
- vellum_ee/workflows/display/nodes/vellum/map_node.py +31 -15
- vellum_ee/workflows/display/nodes/vellum/merge_node.py +2 -5
- vellum_ee/workflows/display/nodes/vellum/note_node.py +20 -6
- vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py +13 -9
- vellum_ee/workflows/display/nodes/vellum/retry_node.py +5 -6
- vellum_ee/workflows/display/nodes/vellum/search_node.py +76 -19
- vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py +46 -12
- vellum_ee/workflows/display/nodes/vellum/templating_node.py +3 -6
- vellum_ee/workflows/display/nodes/vellum/tests/test_api_node.py +65 -0
- vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py +236 -3
- vellum_ee/workflows/display/nodes/vellum/tests/test_final_output_node.py +216 -0
- vellum_ee/workflows/display/nodes/vellum/tests/test_inline_subworkflow_node.py +88 -0
- vellum_ee/workflows/display/nodes/vellum/tests/test_note_node.py +44 -7
- vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_deployment_node.py +71 -1
- vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py +120 -26
- 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 +28 -18
- 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 +649 -49
- vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py +2 -2
- vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py +114 -10
- vellum_ee/workflows/display/nodes/vellum/try_node.py +5 -6
- vellum_ee/workflows/display/nodes/vellum/utils.py +54 -12
- vellum_ee/workflows/display/tests/test_base_workflow_display.py +396 -25
- vellum_ee/workflows/display/tests/test_json_schema_validation.py +190 -0
- vellum_ee/workflows/display/tests/test_mocks.py +912 -0
- 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 +114 -39
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +342 -90
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py +24 -17
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py +263 -65
- 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 +36 -305
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py +92 -431
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py +143 -429
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py +3 -123
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py +24 -110
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py +12 -90
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py +17 -86
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py +363 -100
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py +97 -315
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +66 -319
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py +24 -99
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py +54 -180
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py +32 -88
- 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 +217 -142
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py +34 -142
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py +15 -8
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_composio_serialization.py +89 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py +184 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_tool_wrapper_serialization.py +84 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_mcp_serialization.py +104 -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 +71 -23
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_tool_wrapper_serialization.py +71 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_vellum_integration_serialization.py +187 -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 -4
- vellum_ee/workflows/display/tests/workflow_serialization/test_chat_message_dict_reference_serialization.py +129 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_chat_message_trigger_serialization.py +412 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_code_tool_node_reference_error.py +106 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py +20 -47
- vellum_ee/workflows/display/tests/workflow_serialization/test_duplicate_trigger_name_validation.py +208 -0
- 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_final_output_node_not_referenced_by_workflow_outputs.py +45 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_infinite_loop_validation.py +66 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_int_input_serialization.py +40 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_integration_trigger_serialization.py +300 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_integration_trigger_validation.py +173 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_integration_trigger_with_entrypoint_node_id.py +91 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_list_vellum_document_serialization.py +69 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_manual_trigger_serialization.py +120 -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 +210 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_no_triggers_no_entrypoint_validation.py +64 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_partial_workflow_meta_display_override.py +55 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_sandbox_dataset_mocks_serialization.py +268 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_sandbox_invalid_pdf_data_url.py +49 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_sandbox_validation_errors.py +112 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_scheduled_trigger_serialization.py +276 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_terminal_node_any_serialization.py +49 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_terminal_node_in_unused_graphs_serialization.py +53 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_trigger_display_from_display_class.py +153 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_web_search_node_serialization.py +72 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_workflow_input_parameterization_error.py +37 -0
- vellum_ee/workflows/display/types.py +29 -2
- vellum_ee/workflows/display/utils/auto_layout.py +130 -0
- vellum_ee/workflows/display/utils/events.py +57 -0
- vellum_ee/workflows/display/utils/exceptions.py +53 -0
- vellum_ee/workflows/display/utils/expressions.py +669 -55
- vellum_ee/workflows/display/utils/metadata.py +211 -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/tests/test_metadata.py +31 -0
- vellum_ee/workflows/display/utils/triggers.py +153 -0
- vellum_ee/workflows/display/utils/vellum.py +94 -5
- 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 +1224 -190
- vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py +26 -0
- vellum_ee/workflows/display/workflows/tests/test_workflow_display.py +379 -41
- vellum_ee/workflows/server/namespaces.py +18 -0
- 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 +43 -0
- vellum_ee/workflows/tests/test_registry.py +169 -0
- vellum_ee/workflows/tests/test_serialize_module.py +432 -0
- vellum_ee/workflows/tests/test_server.py +616 -44
- vellum_ee/workflows/tests/test_virtual_files.py +48 -0
- vellum/client/resources/release_reviews/client.py +0 -137
- vellum/workflows/nodes/experimental/openai_chat_completion_node/__init__.py +0 -5
- vellum/workflows/nodes/experimental/openai_chat_completion_node/node.py +0 -266
- vellum/workflows/nodes/experimental/tool_calling_node/__init__.py +0 -3
- vellum/workflows/nodes/experimental/tool_calling_node/node.py +0 -135
- vellum/workflows/nodes/experimental/tool_calling_node/tests/test_node.py +0 -53
- vellum/workflows/nodes/experimental/tool_calling_node/utils.py +0 -259
- vellum_ai-0.14.63.dist-info/RECORD +0 -1719
- vellum_ai-0.14.63.dist-info/entry_points.txt +0 -3
- vellum_ee/workflows/display/workflows/vellum_workflow_display.py +0 -9
- /vellum/{workflows/nodes/displayable/bases/inline_prompt_node → prompts}/constants.py +0 -0
- {vellum_ai-0.14.63.dist-info → vellum_ai-1.13.5.dist-info}/LICENSE +0 -0
- {vellum_ai-0.14.63.dist-info → vellum_ai-1.13.5.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,14 +27,20 @@ from typing import (
|
|
|
25
27
|
overload,
|
|
26
28
|
)
|
|
27
29
|
|
|
30
|
+
from pydantic import ValidationError
|
|
31
|
+
|
|
32
|
+
from vellum.utils.uuid import is_valid_uuid
|
|
28
33
|
from vellum.workflows.edges import Edge
|
|
29
34
|
from vellum.workflows.emitters.base import BaseWorkflowEmitter
|
|
30
35
|
from vellum.workflows.errors import WorkflowError, WorkflowErrorCode
|
|
31
36
|
from vellum.workflows.events.node import (
|
|
37
|
+
NodeEvent,
|
|
32
38
|
NodeExecutionFulfilledBody,
|
|
33
39
|
NodeExecutionFulfilledEvent,
|
|
34
40
|
NodeExecutionInitiatedBody,
|
|
35
41
|
NodeExecutionInitiatedEvent,
|
|
42
|
+
NodeExecutionLogBody,
|
|
43
|
+
NodeExecutionLogEvent,
|
|
36
44
|
NodeExecutionPausedBody,
|
|
37
45
|
NodeExecutionPausedEvent,
|
|
38
46
|
NodeExecutionRejectedBody,
|
|
@@ -42,6 +50,7 @@ from vellum.workflows.events.node import (
|
|
|
42
50
|
NodeExecutionStreamingBody,
|
|
43
51
|
NodeExecutionStreamingEvent,
|
|
44
52
|
)
|
|
53
|
+
from vellum.workflows.events.stream import WorkflowEventGenerator
|
|
45
54
|
from vellum.workflows.events.workflow import (
|
|
46
55
|
GenericWorkflowEvent,
|
|
47
56
|
WorkflowExecutionFulfilledBody,
|
|
@@ -59,22 +68,31 @@ from vellum.workflows.events.workflow import (
|
|
|
59
68
|
WorkflowExecutionStreamingBody,
|
|
60
69
|
WorkflowExecutionStreamingEvent,
|
|
61
70
|
)
|
|
71
|
+
from vellum.workflows.exceptions import WorkflowInitializationException
|
|
72
|
+
from vellum.workflows.executable import BaseExecutable
|
|
62
73
|
from vellum.workflows.graph import Graph
|
|
63
74
|
from vellum.workflows.inputs.base import BaseInputs
|
|
75
|
+
from vellum.workflows.loaders.base import BaseWorkflowFinder
|
|
64
76
|
from vellum.workflows.nodes.bases import BaseNode
|
|
65
77
|
from vellum.workflows.nodes.mocks import MockNodeExecutionArg
|
|
78
|
+
from vellum.workflows.nodes.utils import get_unadorned_node
|
|
66
79
|
from vellum.workflows.outputs import BaseOutputs
|
|
80
|
+
from vellum.workflows.references.trigger import TriggerAttributeReference
|
|
67
81
|
from vellum.workflows.resolvers.base import BaseWorkflowResolver
|
|
68
82
|
from vellum.workflows.runner import WorkflowRunner
|
|
69
83
|
from vellum.workflows.runner.runner import ExternalInputsArg, RunFromNodeArg
|
|
70
84
|
from vellum.workflows.state.base import BaseState, StateMeta
|
|
71
85
|
from vellum.workflows.state.context import WorkflowContext
|
|
72
86
|
from vellum.workflows.state.store import Store
|
|
87
|
+
from vellum.workflows.triggers.base import BaseTrigger
|
|
88
|
+
from vellum.workflows.types import CancelSignal
|
|
73
89
|
from vellum.workflows.types.generics import InputsType, StateType
|
|
74
90
|
from vellum.workflows.types.utils import get_original_base
|
|
75
91
|
from vellum.workflows.utils.uuids import uuid4_from_hash
|
|
76
92
|
from vellum.workflows.workflows.event_filters import workflow_event_filter
|
|
77
93
|
|
|
94
|
+
logger = logging.getLogger(__name__)
|
|
95
|
+
|
|
78
96
|
|
|
79
97
|
class _BaseWorkflowMeta(type):
|
|
80
98
|
def __new__(mcs, name: str, bases: Tuple[Type, ...], dct: Dict[str, Any]) -> Any:
|
|
@@ -122,13 +140,70 @@ class _BaseWorkflowMeta(type):
|
|
|
122
140
|
raise TypeError(f"Unexpected graph type: {graph_item.__class__}")
|
|
123
141
|
return nodes
|
|
124
142
|
|
|
143
|
+
def filter_overlapping_nodes_from_unused_graphs(
|
|
144
|
+
unused_graphs: Set[GraphAttribute], overlapping_nodes: Set[Type[BaseNode]]
|
|
145
|
+
) -> Set[GraphAttribute]:
|
|
146
|
+
filtered_graphs: Set[GraphAttribute] = set()
|
|
147
|
+
|
|
148
|
+
for item in unused_graphs:
|
|
149
|
+
if isinstance(item, Graph):
|
|
150
|
+
graph_nodes = set(item.nodes)
|
|
151
|
+
overlapping_in_graph = graph_nodes & overlapping_nodes
|
|
152
|
+
|
|
153
|
+
if not overlapping_in_graph:
|
|
154
|
+
filtered_graphs.add(item)
|
|
155
|
+
else:
|
|
156
|
+
non_overlapping_nodes = graph_nodes - overlapping_nodes
|
|
157
|
+
for node in non_overlapping_nodes:
|
|
158
|
+
filtered_graphs.add(node)
|
|
159
|
+
|
|
160
|
+
elif isinstance(item, set):
|
|
161
|
+
filtered_nodes: Set[Type[BaseNode]] = set()
|
|
162
|
+
filtered_graphs_in_set: Set[Graph] = set()
|
|
163
|
+
|
|
164
|
+
for subitem in item:
|
|
165
|
+
if isinstance(subitem, Graph):
|
|
166
|
+
graph_nodes = set(subitem.nodes)
|
|
167
|
+
overlapping_in_graph = graph_nodes & overlapping_nodes
|
|
168
|
+
|
|
169
|
+
if not overlapping_in_graph:
|
|
170
|
+
filtered_graphs_in_set.add(subitem)
|
|
171
|
+
else:
|
|
172
|
+
non_overlapping_nodes = graph_nodes - overlapping_nodes
|
|
173
|
+
filtered_nodes.update(non_overlapping_nodes)
|
|
174
|
+
elif isinstance(subitem, type) and issubclass(subitem, BaseNode):
|
|
175
|
+
if subitem not in overlapping_nodes:
|
|
176
|
+
filtered_nodes.add(subitem)
|
|
177
|
+
else:
|
|
178
|
+
raise TypeError(f"Unexpected item type in unused_graphs set: {subitem.__class__}")
|
|
179
|
+
|
|
180
|
+
# Add non-empty sets back to filtered_graphs
|
|
181
|
+
if filtered_nodes:
|
|
182
|
+
filtered_graphs.add(filtered_nodes)
|
|
183
|
+
if filtered_graphs_in_set:
|
|
184
|
+
filtered_graphs.add(filtered_graphs_in_set)
|
|
185
|
+
|
|
186
|
+
elif isinstance(item, type) and issubclass(item, BaseNode):
|
|
187
|
+
if item not in overlapping_nodes:
|
|
188
|
+
filtered_graphs.add(item)
|
|
189
|
+
else:
|
|
190
|
+
filtered_graphs.add(item)
|
|
191
|
+
|
|
192
|
+
return filtered_graphs
|
|
193
|
+
|
|
125
194
|
graph_nodes = collect_nodes(dct.get("graph", set()))
|
|
126
195
|
unused_nodes = collect_nodes(dct.get("unused_graphs", set()))
|
|
127
196
|
|
|
128
197
|
overlap = graph_nodes & unused_nodes
|
|
129
198
|
if overlap:
|
|
130
199
|
node_names = [node.__name__ for node in overlap]
|
|
131
|
-
|
|
200
|
+
logger.warning(
|
|
201
|
+
f"Node(s) {', '.join(node_names)} appear in both graph and unused_graphs. Removing from unused_graphs."
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
# Filter out overlapping nodes from unused_graphs
|
|
205
|
+
if "unused_graphs" in dct:
|
|
206
|
+
dct["unused_graphs"] = filter_overlapping_nodes_from_unused_graphs(dct["unused_graphs"], overlap)
|
|
132
207
|
|
|
133
208
|
cls = super().__new__(mcs, name, bases, dct)
|
|
134
209
|
workflow_class = cast(Type["BaseWorkflow"], cls)
|
|
@@ -138,36 +213,41 @@ class _BaseWorkflowMeta(type):
|
|
|
138
213
|
if inputs_class is not BaseInputs and inputs_class.__parent_class__ is type(None):
|
|
139
214
|
inputs_class.__parent_class__ = workflow_class
|
|
140
215
|
|
|
216
|
+
workflow_class.Outputs.__parent_class__ = workflow_class
|
|
217
|
+
workflow_class.__output_ids__ = {
|
|
218
|
+
ref.name: uuid4_from_hash(f"{workflow_class.__id__}|id|{ref.name}") for ref in workflow_class.Outputs
|
|
219
|
+
}
|
|
220
|
+
|
|
141
221
|
return workflow_class
|
|
142
222
|
|
|
143
223
|
|
|
144
224
|
GraphAttribute = Union[Type[BaseNode], Graph, Set[Type[BaseNode]], Set[Graph]]
|
|
145
225
|
|
|
146
226
|
|
|
147
|
-
class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
148
|
-
__id__: UUID = uuid4_from_hash(__qualname__)
|
|
227
|
+
class BaseWorkflow(Generic[InputsType, StateType], BaseExecutable, metaclass=_BaseWorkflowMeta):
|
|
149
228
|
graph: ClassVar[GraphAttribute]
|
|
150
229
|
unused_graphs: ClassVar[Set[GraphAttribute]] # nodes or graphs that are defined but not used in the graph
|
|
151
230
|
emitters: List[BaseWorkflowEmitter]
|
|
152
231
|
resolvers: List[BaseWorkflowResolver]
|
|
232
|
+
is_dynamic: ClassVar[bool] = False
|
|
153
233
|
|
|
154
234
|
class Outputs(BaseOutputs):
|
|
155
|
-
|
|
235
|
+
__parent_class__: Type["BaseWorkflow"] = field(init=False)
|
|
156
236
|
|
|
157
237
|
WorkflowEvent = Union[ # type: ignore
|
|
158
238
|
GenericWorkflowEvent,
|
|
159
239
|
WorkflowExecutionInitiatedEvent[InputsType, StateType], # type: ignore[valid-type]
|
|
160
|
-
WorkflowExecutionFulfilledEvent[Outputs],
|
|
240
|
+
WorkflowExecutionFulfilledEvent[Outputs, StateType], # type: ignore[valid-type]
|
|
161
241
|
WorkflowExecutionSnapshottedEvent[StateType], # type: ignore[valid-type]
|
|
162
242
|
]
|
|
163
243
|
|
|
164
244
|
TerminalWorkflowEvent = Union[
|
|
165
|
-
WorkflowExecutionFulfilledEvent[Outputs],
|
|
245
|
+
WorkflowExecutionFulfilledEvent[Outputs, StateType], # type: ignore[valid-type]
|
|
166
246
|
WorkflowExecutionRejectedEvent,
|
|
167
247
|
WorkflowExecutionPausedEvent,
|
|
168
248
|
]
|
|
169
249
|
|
|
170
|
-
WorkflowEventStream =
|
|
250
|
+
WorkflowEventStream = WorkflowEventGenerator[WorkflowEvent]
|
|
171
251
|
|
|
172
252
|
def __init__(
|
|
173
253
|
self,
|
|
@@ -179,13 +259,21 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
179
259
|
store: Optional[Store] = None,
|
|
180
260
|
):
|
|
181
261
|
self._parent_state = parent_state
|
|
262
|
+
self._context = context or WorkflowContext()
|
|
182
263
|
self.emitters = emitters or (self.emitters if hasattr(self, "emitters") else [])
|
|
183
264
|
self.resolvers = resolvers or (self.resolvers if hasattr(self, "resolvers") else [])
|
|
184
|
-
|
|
185
|
-
|
|
265
|
+
# Prioritize store type from WorkflowContext to allow subworkflows to inherit EmptyStore
|
|
266
|
+
# TODO(v2.0.0): Remove the concept of an internal store altogether (important-comment)
|
|
267
|
+
self._store = store or self._context.store_class()
|
|
186
268
|
self._execution_context = self._context.execution_context
|
|
269
|
+
self._current_runner: Optional[WorkflowRunner] = None
|
|
270
|
+
|
|
271
|
+
# Register context with all emitters
|
|
272
|
+
for emitter in self.emitters:
|
|
273
|
+
emitter.register_context(self._context)
|
|
187
274
|
|
|
188
|
-
self.
|
|
275
|
+
for resolver in self.resolvers:
|
|
276
|
+
resolver.register_workflow_instance(self)
|
|
189
277
|
|
|
190
278
|
@property
|
|
191
279
|
def context(self) -> WorkflowContext:
|
|
@@ -203,12 +291,12 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
203
291
|
for item in graph:
|
|
204
292
|
if isinstance(item, Graph):
|
|
205
293
|
graphs.append(item)
|
|
206
|
-
elif issubclass(item, BaseNode):
|
|
294
|
+
elif inspect.isclass(item) and issubclass(item, BaseNode):
|
|
207
295
|
graphs.append(Graph.from_node(item))
|
|
208
296
|
else:
|
|
209
297
|
raise ValueError(f"Unexpected graph type: {type(item)}")
|
|
210
298
|
return graphs
|
|
211
|
-
if issubclass(graph, BaseNode):
|
|
299
|
+
if inspect.isclass(graph) and issubclass(graph, BaseNode):
|
|
212
300
|
return [Graph.from_node(graph)]
|
|
213
301
|
raise ValueError(f"Unexpected graph type: {type(graph)}")
|
|
214
302
|
|
|
@@ -295,9 +383,13 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
295
383
|
state: Optional[StateType] = None,
|
|
296
384
|
entrypoint_nodes: Optional[RunFromNodeArg] = None,
|
|
297
385
|
external_inputs: Optional[ExternalInputsArg] = None,
|
|
298
|
-
|
|
386
|
+
previous_execution_id: Optional[Union[str, UUID]] = None,
|
|
387
|
+
execution_id: Optional[UUID] = None,
|
|
388
|
+
cancel_signal: Optional[CancelSignal] = None,
|
|
299
389
|
node_output_mocks: Optional[MockNodeExecutionArg] = None,
|
|
300
390
|
max_concurrency: Optional[int] = None,
|
|
391
|
+
timeout: Optional[float] = None,
|
|
392
|
+
trigger: Optional[BaseTrigger] = None,
|
|
301
393
|
) -> TerminalWorkflowEvent:
|
|
302
394
|
"""
|
|
303
395
|
Invoke a Workflow, returning the last event emitted, which should be one of:
|
|
@@ -320,8 +412,14 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
320
412
|
external_inputs: Optional[ExternalInputsArg] = None
|
|
321
413
|
External inputs to pass to the Workflow. Useful for providing human-in-the-loop behavior to the Workflow.
|
|
322
414
|
|
|
323
|
-
|
|
324
|
-
|
|
415
|
+
previous_execution_id: Optional[Union[str, UUID]] = None
|
|
416
|
+
The execution ID of the previous execution to resume from.
|
|
417
|
+
|
|
418
|
+
execution_id: Optional[UUID] = None
|
|
419
|
+
The execution ID to use for this workflow run. Sets the initial state's span_id for fresh runs.
|
|
420
|
+
|
|
421
|
+
cancel_signal: Optional[CancelSignal] = None
|
|
422
|
+
A cancel signal that can be used to cancel the Workflow Execution.
|
|
325
423
|
|
|
326
424
|
node_output_mocks: Optional[MockNodeExecutionArg] = None
|
|
327
425
|
A list of Outputs to mock for Nodes during Workflow Execution. Each mock can include a `when_condition`
|
|
@@ -331,19 +429,35 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
331
429
|
The max number of concurrent threads to run the Workflow with. If not provided, the Workflow will run
|
|
332
430
|
without limiting concurrency. This configuration only applies to the current Workflow and not to any
|
|
333
431
|
subworkflows or nodes that utilizes threads.
|
|
432
|
+
|
|
433
|
+
timeout: Optional[float] = None
|
|
434
|
+
The maximum time in seconds to allow the Workflow to run. If the timeout is exceeded, the Workflow
|
|
435
|
+
will be rejected with a WORKFLOW_TIMEOUT error code and any nodes in flight will be rejected.
|
|
436
|
+
|
|
437
|
+
trigger: Optional[BaseTrigger] = None
|
|
438
|
+
A trigger instance for workflows with triggers (e.g., IntegrationTrigger, ManualTrigger, ScheduledTrigger).
|
|
439
|
+
The trigger instance is bound to the workflow state, making its attributes accessible to downstream nodes.
|
|
440
|
+
Required for workflows that only have IntegrationTrigger; optional for workflows with both ManualTrigger
|
|
441
|
+
and IntegrationTrigger.
|
|
334
442
|
"""
|
|
335
443
|
|
|
336
|
-
|
|
444
|
+
runner = WorkflowRunner(
|
|
337
445
|
self,
|
|
338
446
|
inputs=inputs,
|
|
339
447
|
state=state,
|
|
340
448
|
entrypoint_nodes=entrypoint_nodes,
|
|
341
449
|
external_inputs=external_inputs,
|
|
450
|
+
previous_execution_id=previous_execution_id,
|
|
342
451
|
cancel_signal=cancel_signal,
|
|
343
452
|
node_output_mocks=node_output_mocks,
|
|
344
453
|
max_concurrency=max_concurrency,
|
|
454
|
+
timeout=timeout,
|
|
345
455
|
init_execution_context=self._execution_context,
|
|
346
|
-
|
|
456
|
+
trigger=trigger,
|
|
457
|
+
execution_id=execution_id,
|
|
458
|
+
)
|
|
459
|
+
self._current_runner = runner
|
|
460
|
+
events = runner.stream()
|
|
347
461
|
first_event: Optional[Union[WorkflowExecutionInitiatedEvent, WorkflowExecutionResumedEvent]] = None
|
|
348
462
|
last_event = None
|
|
349
463
|
for event in events:
|
|
@@ -352,7 +466,7 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
352
466
|
last_event = event
|
|
353
467
|
|
|
354
468
|
if not last_event:
|
|
355
|
-
|
|
469
|
+
rejected_event = WorkflowExecutionRejectedEvent(
|
|
356
470
|
trace_id=self._execution_context.trace_id,
|
|
357
471
|
span_id=uuid4(),
|
|
358
472
|
body=WorkflowExecutionRejectedBody(
|
|
@@ -363,9 +477,10 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
363
477
|
workflow_definition=self.__class__,
|
|
364
478
|
),
|
|
365
479
|
)
|
|
480
|
+
return rejected_event
|
|
366
481
|
|
|
367
482
|
if not first_event:
|
|
368
|
-
|
|
483
|
+
rejected_event = WorkflowExecutionRejectedEvent(
|
|
369
484
|
trace_id=self._execution_context.trace_id,
|
|
370
485
|
span_id=uuid4(),
|
|
371
486
|
body=WorkflowExecutionRejectedBody(
|
|
@@ -376,6 +491,7 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
376
491
|
workflow_definition=self.__class__,
|
|
377
492
|
),
|
|
378
493
|
)
|
|
494
|
+
return rejected_event
|
|
379
495
|
|
|
380
496
|
if (
|
|
381
497
|
last_event.name == "workflow.execution.rejected"
|
|
@@ -384,7 +500,7 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
384
500
|
):
|
|
385
501
|
return last_event
|
|
386
502
|
|
|
387
|
-
|
|
503
|
+
rejected_event = WorkflowExecutionRejectedEvent(
|
|
388
504
|
trace_id=self._execution_context.trace_id,
|
|
389
505
|
span_id=first_event.span_id,
|
|
390
506
|
body=WorkflowExecutionRejectedBody(
|
|
@@ -395,6 +511,7 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
395
511
|
),
|
|
396
512
|
),
|
|
397
513
|
)
|
|
514
|
+
return rejected_event
|
|
398
515
|
|
|
399
516
|
def stream(
|
|
400
517
|
self,
|
|
@@ -404,9 +521,14 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
404
521
|
state: Optional[StateType] = None,
|
|
405
522
|
entrypoint_nodes: Optional[RunFromNodeArg] = None,
|
|
406
523
|
external_inputs: Optional[ExternalInputsArg] = None,
|
|
407
|
-
|
|
524
|
+
previous_execution_id: Optional[Union[str, UUID]] = None,
|
|
525
|
+
execution_id: Optional[UUID] = None,
|
|
526
|
+
cancel_signal: Optional[CancelSignal] = None,
|
|
408
527
|
node_output_mocks: Optional[MockNodeExecutionArg] = None,
|
|
409
528
|
max_concurrency: Optional[int] = None,
|
|
529
|
+
timeout: Optional[float] = None,
|
|
530
|
+
trigger: Optional[BaseTrigger] = None,
|
|
531
|
+
event_max_size: Optional[int] = None,
|
|
410
532
|
) -> WorkflowEventStream:
|
|
411
533
|
"""
|
|
412
534
|
Invoke a Workflow, yielding events as they are emitted.
|
|
@@ -430,8 +552,14 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
430
552
|
external_inputs: Optional[ExternalInputsArg] = None
|
|
431
553
|
External inputs to pass to the Workflow. Useful for providing human-in-the-loop behavior to the Workflow.
|
|
432
554
|
|
|
433
|
-
|
|
434
|
-
|
|
555
|
+
previous_execution_id: Optional[Union[str, UUID]] = None
|
|
556
|
+
The execution ID of the previous execution to resume from.
|
|
557
|
+
|
|
558
|
+
execution_id: Optional[UUID] = None
|
|
559
|
+
The execution ID to use for this workflow run. Sets the initial state's span_id for fresh runs.
|
|
560
|
+
|
|
561
|
+
cancel_signal: Optional[CancelSignal] = None
|
|
562
|
+
A cancel signal that can be used to cancel the Workflow Execution.
|
|
435
563
|
|
|
436
564
|
node_output_mocks: Optional[MockNodeExecutionArg] = None
|
|
437
565
|
A list of Outputs to mock for Nodes during Workflow Execution. Each mock can include a `when_condition`
|
|
@@ -441,30 +569,158 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
441
569
|
The max number of concurrent threads to run the Workflow with. If not provided, the Workflow will run
|
|
442
570
|
without limiting concurrency. This configuration only applies to the current Workflow and not to any
|
|
443
571
|
subworkflows or nodes that utilizes threads.
|
|
572
|
+
|
|
573
|
+
timeout: Optional[float] = None
|
|
574
|
+
The maximum time in seconds to allow the Workflow to run. If the timeout is exceeded, the Workflow
|
|
575
|
+
will be rejected with a WORKFLOW_TIMEOUT error code and any nodes in flight will be rejected.
|
|
576
|
+
|
|
577
|
+
trigger: Optional[BaseTrigger] = None
|
|
578
|
+
A trigger instance for workflows with triggers (e.g., IntegrationTrigger, ManualTrigger, ScheduledTrigger).
|
|
579
|
+
The trigger instance is bound to the workflow state, making its attributes accessible to downstream nodes.
|
|
580
|
+
Required for workflows that only have IntegrationTrigger; optional for workflows with both ManualTrigger
|
|
581
|
+
and IntegrationTrigger.
|
|
582
|
+
|
|
583
|
+
event_max_size: Optional[int] = None
|
|
584
|
+
The maximum size in bytes for serialized events. If an event's serialized size exceeds this value,
|
|
585
|
+
the outputs will be set to an empty dict.
|
|
444
586
|
"""
|
|
445
587
|
|
|
446
588
|
should_yield = event_filter or workflow_event_filter
|
|
447
|
-
|
|
589
|
+
runner = WorkflowRunner(
|
|
448
590
|
self,
|
|
449
591
|
inputs=inputs,
|
|
450
592
|
state=state,
|
|
451
593
|
entrypoint_nodes=entrypoint_nodes,
|
|
452
594
|
external_inputs=external_inputs,
|
|
595
|
+
previous_execution_id=previous_execution_id,
|
|
453
596
|
cancel_signal=cancel_signal,
|
|
454
597
|
node_output_mocks=node_output_mocks,
|
|
455
598
|
max_concurrency=max_concurrency,
|
|
599
|
+
timeout=timeout,
|
|
456
600
|
init_execution_context=self._execution_context,
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
601
|
+
trigger=trigger,
|
|
602
|
+
execution_id=execution_id,
|
|
603
|
+
event_max_size=event_max_size,
|
|
604
|
+
)
|
|
605
|
+
self._current_runner = runner
|
|
606
|
+
runner_stream = runner.stream()
|
|
607
|
+
|
|
608
|
+
def _generate_filtered_events() -> Generator[BaseWorkflow.WorkflowEvent, None, None]:
|
|
609
|
+
for event in runner_stream:
|
|
610
|
+
if should_yield(self.__class__, event):
|
|
611
|
+
yield event
|
|
460
612
|
|
|
461
|
-
|
|
613
|
+
return WorkflowEventGenerator(_generate_filtered_events(), runner_stream.span_id)
|
|
614
|
+
|
|
615
|
+
@classmethod
|
|
616
|
+
def validate(cls) -> None:
|
|
462
617
|
"""
|
|
463
618
|
Validates the Workflow, by running through our list of linter rules.
|
|
464
619
|
"""
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
620
|
+
|
|
621
|
+
cls._validate_no_self_edges()
|
|
622
|
+
|
|
623
|
+
@classmethod
|
|
624
|
+
def get_all_nodes_recursive(cls) -> Iterator[Type[BaseNode]]:
|
|
625
|
+
"""
|
|
626
|
+
Returns an iterator over all nodes in the Workflow, including nodes nested in subworkflows.
|
|
627
|
+
"""
|
|
628
|
+
for node in cls.get_all_nodes():
|
|
629
|
+
yield node
|
|
630
|
+
for node_ref in node:
|
|
631
|
+
attr_value = node_ref.instance
|
|
632
|
+
if inspect.isclass(attr_value) and issubclass(attr_value, BaseWorkflow):
|
|
633
|
+
yield from attr_value.get_all_nodes_recursive()
|
|
634
|
+
|
|
635
|
+
@classmethod
|
|
636
|
+
def resolve_node_ref(cls, node_ref: Union[Type[BaseNode], UUID, str]) -> Type[BaseNode]:
|
|
637
|
+
"""
|
|
638
|
+
Resolve a node reference (class, UUID, or string) to a node class.
|
|
639
|
+
|
|
640
|
+
Args:
|
|
641
|
+
node_ref: Either a node class, a UUID, or a fully qualified string
|
|
642
|
+
in the format "module.ClassName"
|
|
643
|
+
|
|
644
|
+
Returns:
|
|
645
|
+
The resolved node class
|
|
646
|
+
|
|
647
|
+
Raises:
|
|
648
|
+
WorkflowInitializationException: If the node reference cannot be resolved
|
|
649
|
+
"""
|
|
650
|
+
if inspect.isclass(node_ref) and issubclass(node_ref, BaseNode):
|
|
651
|
+
return node_ref
|
|
652
|
+
|
|
653
|
+
candidate_nodes: List[Type[BaseNode]] = []
|
|
654
|
+
for node in cls.get_all_nodes_recursive():
|
|
655
|
+
candidate_nodes.append(node)
|
|
656
|
+
wrapped_node = get_unadorned_node(node)
|
|
657
|
+
if wrapped_node != node:
|
|
658
|
+
candidate_nodes.append(wrapped_node)
|
|
659
|
+
|
|
660
|
+
if isinstance(node_ref, UUID):
|
|
661
|
+
node_uuid = node_ref
|
|
662
|
+
elif is_valid_uuid(node_ref):
|
|
663
|
+
node_uuid = UUID(node_ref)
|
|
664
|
+
else:
|
|
665
|
+
node_uuid = None
|
|
666
|
+
|
|
667
|
+
if node_uuid:
|
|
668
|
+
for node in candidate_nodes:
|
|
669
|
+
if node.__id__ == node_uuid:
|
|
670
|
+
return node
|
|
671
|
+
raise WorkflowInitializationException(
|
|
672
|
+
message=f"Node '{node_uuid}' not found in workflow",
|
|
673
|
+
raw_data={"node_ref": str(node_uuid)},
|
|
674
|
+
)
|
|
675
|
+
|
|
676
|
+
if isinstance(node_ref, str):
|
|
677
|
+
try:
|
|
678
|
+
module_path, class_name = node_ref.rsplit(".", 1)
|
|
679
|
+
module = importlib.import_module(module_path)
|
|
680
|
+
node_class = getattr(module, class_name)
|
|
681
|
+
if inspect.isclass(node_class) and issubclass(node_class, BaseNode):
|
|
682
|
+
return node_class
|
|
683
|
+
raise WorkflowInitializationException(
|
|
684
|
+
message=f"Node '{node_ref}' not found in workflow",
|
|
685
|
+
raw_data={"node_ref": node_ref},
|
|
686
|
+
)
|
|
687
|
+
except (ValueError, ModuleNotFoundError, AttributeError):
|
|
688
|
+
for node in candidate_nodes:
|
|
689
|
+
if f"{node.__module__}.{node.__name__}" == node_ref:
|
|
690
|
+
return node
|
|
691
|
+
raise WorkflowInitializationException(
|
|
692
|
+
message=f"Node '{node_ref}' not found in workflow",
|
|
693
|
+
raw_data={"node_ref": node_ref},
|
|
694
|
+
)
|
|
695
|
+
|
|
696
|
+
raise WorkflowInitializationException(
|
|
697
|
+
message=f"Node '{node_ref}' not found in workflow",
|
|
698
|
+
raw_data={"node_ref": str(node_ref)},
|
|
699
|
+
)
|
|
700
|
+
|
|
701
|
+
def run_node(
|
|
702
|
+
self, node: Union[Type[BaseNode], UUID, str], *, inputs: Optional[Dict[str, Any]] = None
|
|
703
|
+
) -> Generator[NodeEvent, None, None]:
|
|
704
|
+
"""
|
|
705
|
+
Execute a single node and yield node execution events.
|
|
706
|
+
|
|
707
|
+
Args:
|
|
708
|
+
node: Either a node class, a UUID, or a fully qualified string
|
|
709
|
+
in the format "module.ClassName"
|
|
710
|
+
inputs: Optional inputs to pass to the node
|
|
711
|
+
|
|
712
|
+
Yields:
|
|
713
|
+
NodeEvent: Events emitted during node execution
|
|
714
|
+
|
|
715
|
+
Raises:
|
|
716
|
+
ValueError: If the node reference cannot be resolved
|
|
717
|
+
"""
|
|
718
|
+
resolved_node = self.resolve_node_ref(node)
|
|
719
|
+
runner = WorkflowRunner(self)
|
|
720
|
+
span_id = uuid4()
|
|
721
|
+
node_instance = resolved_node(state=self.get_default_state(), context=self._context, inputs=inputs)
|
|
722
|
+
|
|
723
|
+
return runner.run_node(node=node_instance, span_id=span_id)
|
|
468
724
|
|
|
469
725
|
@classmethod
|
|
470
726
|
@lru_cache
|
|
@@ -499,16 +755,37 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
499
755
|
def get_default_inputs(self) -> InputsType:
|
|
500
756
|
return self.get_inputs_class()()
|
|
501
757
|
|
|
502
|
-
def get_default_state(
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
758
|
+
def get_default_state(
|
|
759
|
+
self,
|
|
760
|
+
workflow_inputs: Optional[InputsType] = None,
|
|
761
|
+
execution_id: Optional[UUID] = None,
|
|
762
|
+
*,
|
|
763
|
+
trigger_attributes: Optional[Dict[TriggerAttributeReference, Any]] = None,
|
|
764
|
+
) -> StateType:
|
|
765
|
+
resolved_inputs: Optional[InputsType] = workflow_inputs
|
|
766
|
+
|
|
767
|
+
meta_payload: Dict[str, Any] = {
|
|
768
|
+
"parent": self._parent_state,
|
|
769
|
+
"workflow_definition": self.__class__,
|
|
770
|
+
"workflow_inputs": resolved_inputs,
|
|
771
|
+
}
|
|
772
|
+
if trigger_attributes is not None:
|
|
773
|
+
meta_payload["trigger_attributes"] = trigger_attributes
|
|
774
|
+
|
|
775
|
+
meta = StateMeta.model_validate(
|
|
776
|
+
meta_payload,
|
|
777
|
+
context={
|
|
778
|
+
"workflow_definition": self.__class__,
|
|
779
|
+
},
|
|
509
780
|
)
|
|
510
781
|
|
|
511
|
-
|
|
782
|
+
# Makes the uuid factory mocker work this way instead of setting in cosntructor
|
|
783
|
+
if execution_id:
|
|
784
|
+
meta.span_id = execution_id
|
|
785
|
+
|
|
786
|
+
return self.get_state_class()(meta=meta)
|
|
787
|
+
|
|
788
|
+
def get_state_at_node(self, node: Type[BaseNode], execution_id: Optional[UUID] = None) -> StateType:
|
|
512
789
|
event_ts = datetime.min
|
|
513
790
|
for event in self._store.events:
|
|
514
791
|
if event.name == "node.execution.initiated" and event.node_definition == node:
|
|
@@ -522,11 +799,11 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
522
799
|
most_recent_state_snapshot = cast(StateType, snapshot)
|
|
523
800
|
|
|
524
801
|
if not most_recent_state_snapshot:
|
|
525
|
-
return self.get_default_state()
|
|
802
|
+
return self.get_default_state(execution_id=execution_id)
|
|
526
803
|
|
|
527
804
|
return most_recent_state_snapshot
|
|
528
805
|
|
|
529
|
-
def get_most_recent_state(self) -> StateType:
|
|
806
|
+
def get_most_recent_state(self, execution_id: Optional[UUID] = None) -> StateType:
|
|
530
807
|
most_recent_state_snapshot: Optional[StateType] = None
|
|
531
808
|
|
|
532
809
|
for snapshot in self._store.state_snapshots:
|
|
@@ -537,7 +814,7 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
537
814
|
most_recent_state_snapshot = next_state
|
|
538
815
|
|
|
539
816
|
if not most_recent_state_snapshot:
|
|
540
|
-
return self.get_default_state()
|
|
817
|
+
return self.get_default_state(execution_id=execution_id)
|
|
541
818
|
|
|
542
819
|
return most_recent_state_snapshot
|
|
543
820
|
|
|
@@ -558,11 +835,13 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
558
835
|
|
|
559
836
|
state_class = cls.get_state_class()
|
|
560
837
|
if "meta" in state:
|
|
838
|
+
meta_payload = dict(state["meta"])
|
|
839
|
+
if workflow_inputs is not None:
|
|
840
|
+
meta_payload["workflow_inputs"] = workflow_inputs
|
|
841
|
+
meta_payload.setdefault("workflow_definition", cls)
|
|
842
|
+
|
|
561
843
|
state["meta"] = StateMeta.model_validate(
|
|
562
|
-
|
|
563
|
-
**state["meta"],
|
|
564
|
-
"workflow_inputs": workflow_inputs,
|
|
565
|
-
},
|
|
844
|
+
meta_payload,
|
|
566
845
|
context={
|
|
567
846
|
"workflow_definition": cls,
|
|
568
847
|
},
|
|
@@ -570,10 +849,142 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
570
849
|
|
|
571
850
|
return state_class(**state)
|
|
572
851
|
|
|
852
|
+
@classmethod
|
|
853
|
+
def deserialize_trigger(
|
|
854
|
+
cls, trigger_id: Optional[Union[str, UUID]], inputs: dict
|
|
855
|
+
) -> Union[InputsType, BaseTrigger]:
|
|
856
|
+
"""
|
|
857
|
+
Deserialize a trigger from a trigger_id and inputs dict.
|
|
858
|
+
|
|
859
|
+
If trigger_id is None, returns an instance of the workflow's Inputs class.
|
|
860
|
+
Otherwise, finds a trigger class that matches the trigger_id and creates an instance of that.
|
|
861
|
+
|
|
862
|
+
Parameters
|
|
863
|
+
----------
|
|
864
|
+
trigger_id: Optional[Union[str, UUID]]
|
|
865
|
+
The identifier of the trigger class to instantiate. Can be:
|
|
866
|
+
- None: Returns workflow Inputs
|
|
867
|
+
- UUID: Matches by trigger class __id__
|
|
868
|
+
- str (valid UUID): Matches by trigger class __id__
|
|
869
|
+
- str (non-UUID): Matches by trigger name (from __trigger_name__)
|
|
870
|
+
|
|
871
|
+
inputs: dict
|
|
872
|
+
The inputs to pass to the trigger or Inputs constructor.
|
|
873
|
+
|
|
874
|
+
Returns
|
|
875
|
+
-------
|
|
876
|
+
Union[InputsType, BaseTrigger]
|
|
877
|
+
Either an instance of the workflow's Inputs class (if trigger_id is None)
|
|
878
|
+
or an instance of the matching trigger class.
|
|
879
|
+
|
|
880
|
+
Raises
|
|
881
|
+
------
|
|
882
|
+
WorkflowInitializationException
|
|
883
|
+
If trigger_id is provided but no matching trigger class is found in the workflow.
|
|
884
|
+
"""
|
|
885
|
+
if trigger_id is None:
|
|
886
|
+
inputs_class = cls.get_inputs_class()
|
|
887
|
+
return inputs_class(**inputs)
|
|
888
|
+
|
|
889
|
+
# Determine if trigger_id is a UUID or a name string
|
|
890
|
+
resolved_trigger_id: Optional[UUID] = None
|
|
891
|
+
trigger_name: Optional[str] = None
|
|
892
|
+
|
|
893
|
+
if isinstance(trigger_id, UUID):
|
|
894
|
+
resolved_trigger_id = trigger_id
|
|
895
|
+
elif is_valid_uuid(trigger_id):
|
|
896
|
+
resolved_trigger_id = UUID(trigger_id)
|
|
897
|
+
else:
|
|
898
|
+
trigger_name = trigger_id
|
|
899
|
+
|
|
900
|
+
trigger_classes = []
|
|
901
|
+
for subgraph in cls.get_subgraphs():
|
|
902
|
+
for trigger_class in subgraph.triggers:
|
|
903
|
+
# Match by UUID
|
|
904
|
+
if resolved_trigger_id is not None and trigger_class.__id__ == resolved_trigger_id:
|
|
905
|
+
try:
|
|
906
|
+
return trigger_class(**inputs)
|
|
907
|
+
except Exception as e:
|
|
908
|
+
raise WorkflowInitializationException(
|
|
909
|
+
message=f"Failed to instantiate trigger {trigger_class.__name__}: {e}",
|
|
910
|
+
workflow_definition=cls,
|
|
911
|
+
) from e
|
|
912
|
+
|
|
913
|
+
# Match by name
|
|
914
|
+
if trigger_name is not None and trigger_class.__trigger_name__ == trigger_name:
|
|
915
|
+
try:
|
|
916
|
+
return trigger_class(**inputs)
|
|
917
|
+
except Exception as e:
|
|
918
|
+
raise WorkflowInitializationException(
|
|
919
|
+
message=f"Failed to instantiate trigger {trigger_class.__name__}: {e}",
|
|
920
|
+
workflow_definition=cls,
|
|
921
|
+
) from e
|
|
922
|
+
|
|
923
|
+
trigger_classes.append(trigger_class)
|
|
924
|
+
|
|
925
|
+
# Build helpful error message
|
|
926
|
+
if trigger_name is not None:
|
|
927
|
+
available_names = [trigger_class.__trigger_name__ for trigger_class in trigger_classes]
|
|
928
|
+
raise WorkflowInitializationException(
|
|
929
|
+
message=f"No trigger class found with name '{trigger_name}' in workflow {cls.__name__}. "
|
|
930
|
+
f"Available trigger names: {available_names}"
|
|
931
|
+
)
|
|
932
|
+
else:
|
|
933
|
+
raise WorkflowInitializationException(
|
|
934
|
+
message=f"No trigger class found with id {trigger_id} in workflow {cls.__name__}. "
|
|
935
|
+
f"Available trigger classes: {[trigger_class.__name__ for trigger_class in trigger_classes]}"
|
|
936
|
+
)
|
|
937
|
+
|
|
573
938
|
@staticmethod
|
|
574
939
|
def load_from_module(module_path: str) -> Type["BaseWorkflow"]:
|
|
575
940
|
workflow_path = f"{module_path}.workflow"
|
|
576
|
-
|
|
941
|
+
try:
|
|
942
|
+
module = importlib.import_module(workflow_path)
|
|
943
|
+
except ValidationError as e:
|
|
944
|
+
raise WorkflowInitializationException(
|
|
945
|
+
message=f"Pydantic Model Validation defined in Workflow Failed: {e}"
|
|
946
|
+
) from e
|
|
947
|
+
except TypeError as e:
|
|
948
|
+
if "Unexpected graph type" in str(e) or "unhashable type: 'set'" in str(e):
|
|
949
|
+
raise WorkflowInitializationException(
|
|
950
|
+
message="Invalid graph structure detected. Nested sets or unsupported graph types are not allowed. "
|
|
951
|
+
"Please contact Vellum support for assistance with Workflow configuration."
|
|
952
|
+
) from e
|
|
953
|
+
else:
|
|
954
|
+
raise WorkflowInitializationException(message=f"Type Error raised while loading Workflow: {e}") from e
|
|
955
|
+
except SyntaxError as e:
|
|
956
|
+
raise WorkflowInitializationException(message=f"Syntax Error raised while loading Workflow: {e}") from e
|
|
957
|
+
except ModuleNotFoundError as e:
|
|
958
|
+
error_message = f"Workflow module not found: {e}"
|
|
959
|
+
raw_data = None
|
|
960
|
+
has_namespace_match = False
|
|
961
|
+
for finder in sys.meta_path:
|
|
962
|
+
if isinstance(finder, BaseWorkflowFinder):
|
|
963
|
+
error_message = finder.format_error_message(error_message)
|
|
964
|
+
if hasattr(finder, "namespace") and e.name and finder.namespace in e.name:
|
|
965
|
+
has_namespace_match = True
|
|
966
|
+
if not has_namespace_match:
|
|
967
|
+
raw_data = {"vellum_on_error_action": "CREATE_CUSTOM_IMAGE"}
|
|
968
|
+
raise WorkflowInitializationException(message=error_message, raw_data=raw_data) from e
|
|
969
|
+
except ImportError as e:
|
|
970
|
+
raise WorkflowInitializationException(message=f"Invalid import found while loading Workflow: {e}") from e
|
|
971
|
+
except NameError as e:
|
|
972
|
+
raise WorkflowInitializationException(message=f"Invalid variable reference: {e}") from e
|
|
973
|
+
except Exception as e:
|
|
974
|
+
raise WorkflowInitializationException(message=f"Unexpected failure while loading module: {e}") from e
|
|
975
|
+
|
|
976
|
+
# Attempt to load optional display sidecar module to trigger node ID annotations
|
|
977
|
+
display_path = f"{module_path}.display"
|
|
978
|
+
try:
|
|
979
|
+
importlib.import_module(display_path)
|
|
980
|
+
except ModuleNotFoundError:
|
|
981
|
+
# No display package for this workflow; that's fine.
|
|
982
|
+
pass
|
|
983
|
+
except Exception as e:
|
|
984
|
+
raise WorkflowInitializationException(
|
|
985
|
+
message=f"Unexpected failure while loading display module '{display_path}': {e}"
|
|
986
|
+
) from e
|
|
987
|
+
|
|
577
988
|
workflows: List[Type[BaseWorkflow]] = []
|
|
578
989
|
for name in dir(module):
|
|
579
990
|
if name.startswith("__"):
|
|
@@ -589,11 +1000,51 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
|
589
1000
|
workflows.append(attr)
|
|
590
1001
|
|
|
591
1002
|
if len(workflows) == 0:
|
|
592
|
-
raise
|
|
1003
|
+
raise WorkflowInitializationException(f"No workflows found in {module_path}")
|
|
593
1004
|
elif len(workflows) > 1:
|
|
594
|
-
raise
|
|
1005
|
+
raise WorkflowInitializationException(f"Multiple workflows found in {module_path}")
|
|
595
1006
|
return workflows[0]
|
|
596
1007
|
|
|
1008
|
+
def join(self) -> None:
|
|
1009
|
+
"""
|
|
1010
|
+
Wait for all emitters and runner to complete their background work.
|
|
1011
|
+
This ensures all pending events are processed before the workflow terminates.
|
|
1012
|
+
"""
|
|
1013
|
+
if self._current_runner:
|
|
1014
|
+
self._current_runner.join()
|
|
1015
|
+
|
|
1016
|
+
for emitter in self.emitters:
|
|
1017
|
+
emitter.join()
|
|
1018
|
+
|
|
1019
|
+
@classmethod
|
|
1020
|
+
def _validate_no_self_edges(cls) -> None:
|
|
1021
|
+
"""
|
|
1022
|
+
Validate that the workflow graph doesn't contain unconditional self-edges (infinite loops).
|
|
1023
|
+
|
|
1024
|
+
A node is considered to have an unconditional self-edge if all of its ports target itself.
|
|
1025
|
+
|
|
1026
|
+
Args:
|
|
1027
|
+
edges: List of edge dictionaries from the serialized workflow
|
|
1028
|
+
|
|
1029
|
+
Raises:
|
|
1030
|
+
WorkflowInitializationException: If an unconditional self-edge is detected
|
|
1031
|
+
"""
|
|
1032
|
+
|
|
1033
|
+
for node in cls.get_all_nodes():
|
|
1034
|
+
node_ports = [list(port.edges) for port in node.Ports]
|
|
1035
|
+
if (
|
|
1036
|
+
all(
|
|
1037
|
+
all(edge.to_node == node for edge in port_edges) and len(port_edges) > 0
|
|
1038
|
+
for port_edges in node_ports
|
|
1039
|
+
)
|
|
1040
|
+
and len(node_ports) > 0
|
|
1041
|
+
):
|
|
1042
|
+
raise WorkflowInitializationException(
|
|
1043
|
+
message=f"Graph contains a self-edge ({node.__name__} >> {node.__name__}).",
|
|
1044
|
+
workflow_definition=cls,
|
|
1045
|
+
code=WorkflowErrorCode.INVALID_WORKFLOW,
|
|
1046
|
+
)
|
|
1047
|
+
|
|
597
1048
|
|
|
598
1049
|
WorkflowExecutionInitiatedBody.model_rebuild()
|
|
599
1050
|
WorkflowExecutionFulfilledBody.model_rebuild()
|
|
@@ -609,6 +1060,7 @@ NodeExecutionRejectedBody.model_rebuild()
|
|
|
609
1060
|
NodeExecutionPausedBody.model_rebuild()
|
|
610
1061
|
NodeExecutionResumedBody.model_rebuild()
|
|
611
1062
|
NodeExecutionStreamingBody.model_rebuild()
|
|
1063
|
+
NodeExecutionLogBody.model_rebuild()
|
|
612
1064
|
|
|
613
1065
|
WorkflowExecutionInitiatedEvent.model_rebuild()
|
|
614
1066
|
WorkflowExecutionFulfilledEvent.model_rebuild()
|
|
@@ -624,5 +1076,6 @@ NodeExecutionRejectedEvent.model_rebuild()
|
|
|
624
1076
|
NodeExecutionPausedEvent.model_rebuild()
|
|
625
1077
|
NodeExecutionResumedEvent.model_rebuild()
|
|
626
1078
|
NodeExecutionStreamingEvent.model_rebuild()
|
|
1079
|
+
NodeExecutionLogEvent.model_rebuild()
|
|
627
1080
|
|
|
628
1081
|
StateMeta.model_rebuild()
|