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,15 +1,36 @@
|
|
|
1
|
+
from abc import ABC, ABCMeta
|
|
2
|
+
from collections.abc import Callable as CollectionsCallable
|
|
1
3
|
from dataclasses import field
|
|
2
4
|
from functools import cached_property, reduce
|
|
3
5
|
import inspect
|
|
4
6
|
from types import MappingProxyType
|
|
5
7
|
from uuid import UUID, uuid4
|
|
6
|
-
from typing import
|
|
8
|
+
from typing import (
|
|
9
|
+
Any,
|
|
10
|
+
Callable as TypingCallable,
|
|
11
|
+
Dict,
|
|
12
|
+
Generic,
|
|
13
|
+
Iterator,
|
|
14
|
+
Optional,
|
|
15
|
+
Set,
|
|
16
|
+
Tuple,
|
|
17
|
+
Type,
|
|
18
|
+
TypeVar,
|
|
19
|
+
Union,
|
|
20
|
+
cast,
|
|
21
|
+
get_args,
|
|
22
|
+
get_origin,
|
|
23
|
+
)
|
|
7
24
|
|
|
8
25
|
from vellum.workflows.constants import undefined
|
|
9
26
|
from vellum.workflows.descriptors.base import BaseDescriptor
|
|
27
|
+
from vellum.workflows.descriptors.exceptions import InvalidExpressionException
|
|
10
28
|
from vellum.workflows.descriptors.utils import is_unresolved, resolve_value
|
|
11
29
|
from vellum.workflows.errors.types import WorkflowErrorCode
|
|
30
|
+
from vellum.workflows.events.node import NodeExecutionStreamingEvent
|
|
12
31
|
from vellum.workflows.exceptions import NodeException
|
|
32
|
+
from vellum.workflows.executable import BaseExecutable
|
|
33
|
+
from vellum.workflows.expressions.accessor import AccessorExpression
|
|
13
34
|
from vellum.workflows.graph import Graph
|
|
14
35
|
from vellum.workflows.graph.graph import GraphTarget
|
|
15
36
|
from vellum.workflows.inputs.base import BaseInputs
|
|
@@ -25,7 +46,7 @@ from vellum.workflows.state.context import WorkflowContext
|
|
|
25
46
|
from vellum.workflows.types.core import MergeBehavior
|
|
26
47
|
from vellum.workflows.types.generics import StateType
|
|
27
48
|
from vellum.workflows.types.utils import get_class_attr_names, get_original_base, infer_types
|
|
28
|
-
from vellum.workflows.utils.uuids import uuid4_from_hash
|
|
49
|
+
from vellum.workflows.utils.uuids import generate_entity_id_from_path, uuid4_from_hash
|
|
29
50
|
|
|
30
51
|
|
|
31
52
|
def _is_nested_class(nested: Any, parent: Type) -> bool:
|
|
@@ -39,18 +60,18 @@ def _is_nested_class(nested: Any, parent: Type) -> bool:
|
|
|
39
60
|
) or any(_is_nested_class(nested, base) for base in parent.__bases__)
|
|
40
61
|
|
|
41
62
|
|
|
42
|
-
def _is_annotated(cls: Type, name: str) ->
|
|
63
|
+
def _is_annotated(cls: Type, name: str) -> Any:
|
|
43
64
|
if name in cls.__annotations__:
|
|
44
|
-
return
|
|
65
|
+
return cls.__annotations__[name]
|
|
45
66
|
|
|
46
67
|
for base in cls.__bases__:
|
|
47
|
-
if _is_annotated(base, name):
|
|
48
|
-
return
|
|
68
|
+
if annotation := _is_annotated(base, name):
|
|
69
|
+
return annotation
|
|
49
70
|
|
|
50
|
-
return
|
|
71
|
+
return None
|
|
51
72
|
|
|
52
73
|
|
|
53
|
-
class BaseNodeMeta(
|
|
74
|
+
class BaseNodeMeta(ABCMeta):
|
|
54
75
|
def __new__(mcs, name: str, bases: Tuple[Type, ...], dct: Dict[str, Any]) -> Any:
|
|
55
76
|
if "Outputs" in dct:
|
|
56
77
|
outputs_class = dct["Outputs"]
|
|
@@ -91,7 +112,31 @@ class BaseNodeMeta(type):
|
|
|
91
112
|
if issubclass(base, BaseNode):
|
|
92
113
|
ports_dct = {p.name: Port(default=p.default) for p in base.Ports}
|
|
93
114
|
ports_dct["__module__"] = dct["__module__"]
|
|
94
|
-
dct["Ports"] = type(f"{name}.Ports", (
|
|
115
|
+
dct["Ports"] = type(f"{name}.Ports", (base.Ports,), ports_dct)
|
|
116
|
+
break
|
|
117
|
+
|
|
118
|
+
if "Display" in dct:
|
|
119
|
+
display_class = dct["Display"]
|
|
120
|
+
parent_display_class = next(
|
|
121
|
+
(base.Display for base in bases if hasattr(base, "Display")),
|
|
122
|
+
None,
|
|
123
|
+
)
|
|
124
|
+
# Ensure user-defined Display class inherits from parent's Display
|
|
125
|
+
if parent_display_class and not issubclass(display_class, parent_display_class):
|
|
126
|
+
filtered_bases = tuple(base for base in display_class.__bases__ if base is not object)
|
|
127
|
+
dct["Display"] = type(
|
|
128
|
+
f"{name}.Display",
|
|
129
|
+
(parent_display_class,) + filtered_bases,
|
|
130
|
+
{**display_class.__dict__, "__module__": dct["__module__"]},
|
|
131
|
+
)
|
|
132
|
+
else:
|
|
133
|
+
for base in reversed(bases):
|
|
134
|
+
if issubclass(base, BaseNode):
|
|
135
|
+
dct["Display"] = type(
|
|
136
|
+
f"{name}.Display",
|
|
137
|
+
(base.Display,),
|
|
138
|
+
{"__module__": dct["__module__"]},
|
|
139
|
+
)
|
|
95
140
|
break
|
|
96
141
|
|
|
97
142
|
if "Execution" not in dct:
|
|
@@ -117,17 +162,20 @@ class BaseNodeMeta(type):
|
|
|
117
162
|
cls = super().__new__(mcs, name, bases, dct)
|
|
118
163
|
node_class = cast(Type["BaseNode"], cls)
|
|
119
164
|
|
|
120
|
-
node_class.Outputs.
|
|
165
|
+
node_class.Outputs.__parent_class__ = node_class
|
|
121
166
|
|
|
122
167
|
# Add cls to relevant nested classes, since python should've been doing this by default
|
|
123
168
|
for port in node_class.Ports:
|
|
124
169
|
port.node_class = node_class
|
|
125
|
-
port.validate()
|
|
126
170
|
|
|
127
171
|
node_class.Execution.node_class = node_class
|
|
128
172
|
node_class.Trigger.node_class = node_class
|
|
129
173
|
node_class.ExternalInputs.__parent_class__ = node_class
|
|
130
|
-
|
|
174
|
+
|
|
175
|
+
# Use new ID generation (module + qualname)
|
|
176
|
+
# generate_entity_id_from_path normalizes the module path to filter out UUID namespace for stable ID generation
|
|
177
|
+
node_class.__id__ = generate_entity_id_from_path(f"{node_class.__module__}.{node_class.__qualname__}")
|
|
178
|
+
|
|
131
179
|
node_class.__output_ids__ = {
|
|
132
180
|
ref.name: uuid4_from_hash(f"{node_class.__id__}|{ref.name}")
|
|
133
181
|
for ref in node_class.Outputs
|
|
@@ -148,8 +196,10 @@ class BaseNodeMeta(type):
|
|
|
148
196
|
try:
|
|
149
197
|
attribute = super().__getattribute__(name)
|
|
150
198
|
except AttributeError as e:
|
|
151
|
-
|
|
152
|
-
|
|
199
|
+
annotation = _is_annotated(cls, name)
|
|
200
|
+
origin_annotation = get_origin(annotation)
|
|
201
|
+
if origin_annotation is not CollectionsCallable and origin_annotation is not TypingCallable:
|
|
202
|
+
attribute = undefined
|
|
153
203
|
else:
|
|
154
204
|
raise e
|
|
155
205
|
|
|
@@ -258,25 +308,31 @@ class _BaseNodeExecutionMeta(type):
|
|
|
258
308
|
NodeRunResponse = Union[BaseOutputs, Iterator[BaseOutput]]
|
|
259
309
|
|
|
260
310
|
|
|
261
|
-
class BaseNode(Generic[StateType], metaclass=BaseNodeMeta):
|
|
262
|
-
__id__: UUID = uuid4_from_hash(__qualname__)
|
|
263
|
-
__output_ids__: Dict[str, UUID] = {}
|
|
311
|
+
class BaseNode(Generic[StateType], ABC, BaseExecutable, metaclass=BaseNodeMeta):
|
|
264
312
|
state: StateType
|
|
265
313
|
_context: WorkflowContext
|
|
266
|
-
_inputs: MappingProxyType[NodeReference, Any]
|
|
314
|
+
_inputs: MappingProxyType[Union[NodeReference, AccessorExpression], Any]
|
|
315
|
+
|
|
316
|
+
__exclude_from_monitoring__: bool = False
|
|
267
317
|
|
|
268
318
|
class ExternalInputs(BaseInputs):
|
|
269
319
|
__descriptor_class__ = ExternalInputReference
|
|
270
320
|
|
|
271
|
-
# TODO: Consider using metaclasses to prevent the need for users to specify that the
|
|
272
|
-
# "Outputs" class inherits from "BaseOutputs" and do so automatically.
|
|
273
|
-
# https://app.shortcut.com/vellum/story/4008/auto-inherit-basenodeoutputs-in-outputs-classes
|
|
274
321
|
class Outputs(BaseOutputs):
|
|
275
|
-
|
|
322
|
+
__parent_class__: Type["BaseNode"] = field(init=False)
|
|
276
323
|
|
|
277
324
|
class Ports(NodePorts):
|
|
278
325
|
default = Port(default=True)
|
|
279
326
|
|
|
327
|
+
class Display:
|
|
328
|
+
"""Optional display metadata for visual representation."""
|
|
329
|
+
|
|
330
|
+
icon: Optional[str] = None
|
|
331
|
+
color: Optional[str] = None
|
|
332
|
+
x: Optional[float] = None
|
|
333
|
+
y: Optional[float] = None
|
|
334
|
+
z_index: Optional[int] = None
|
|
335
|
+
|
|
280
336
|
class Trigger(metaclass=_BaseNodeTriggerMeta):
|
|
281
337
|
node_class: Type["BaseNode"]
|
|
282
338
|
merge_behavior = MergeBehavior.AWAIT_ATTRIBUTES
|
|
@@ -300,7 +356,14 @@ class BaseNode(Generic[StateType], metaclass=BaseNodeMeta):
|
|
|
300
356
|
if not descriptor.instance:
|
|
301
357
|
continue
|
|
302
358
|
|
|
303
|
-
|
|
359
|
+
try:
|
|
360
|
+
resolved_value = resolve_value(descriptor.instance, state, path=descriptor.name)
|
|
361
|
+
except InvalidExpressionException as e:
|
|
362
|
+
raise NodeException(
|
|
363
|
+
message=str(e),
|
|
364
|
+
code=WorkflowErrorCode.INVALID_INPUTS,
|
|
365
|
+
) from e
|
|
366
|
+
|
|
304
367
|
if is_unresolved(resolved_value):
|
|
305
368
|
return False
|
|
306
369
|
|
|
@@ -327,8 +390,11 @@ class BaseNode(Generic[StateType], metaclass=BaseNodeMeta):
|
|
|
327
390
|
all_deps_invoked = all(dep in node_classes_invoked for dep in dependencies)
|
|
328
391
|
return all_deps_invoked
|
|
329
392
|
|
|
393
|
+
if cls.merge_behavior == MergeBehavior.CUSTOM:
|
|
394
|
+
return False
|
|
395
|
+
|
|
330
396
|
raise NodeException(
|
|
331
|
-
message="Invalid Trigger Node Specification",
|
|
397
|
+
message=f"Invalid Trigger Node Specification: {cls.merge_behavior}",
|
|
332
398
|
code=WorkflowErrorCode.INVALID_INPUTS,
|
|
333
399
|
)
|
|
334
400
|
|
|
@@ -356,41 +422,15 @@ class BaseNode(Generic[StateType], metaclass=BaseNodeMeta):
|
|
|
356
422
|
state.meta.node_execution_cache._dependencies_invoked[execution_id].add(invoked_by)
|
|
357
423
|
return execution_id
|
|
358
424
|
|
|
359
|
-
# For AWAIT_ANY in workflows, we
|
|
360
|
-
#
|
|
361
|
-
# 2. The node is being re-executed because of a loop
|
|
362
|
-
# For case 1, we need to remove the fork id from the node_to_fork_id mapping
|
|
363
|
-
# For case 2, we need to check if the node is in a loop
|
|
425
|
+
# For AWAIT_ANY in workflows, we need to detect if the node is in a loop
|
|
426
|
+
# If the node is in a loop, we can trigger the node again
|
|
364
427
|
in_loop = False
|
|
365
|
-
# Default to true, will be set to false if the merged node has already been triggered
|
|
366
|
-
should_retrigger = True
|
|
367
428
|
if cls.merge_behavior == MergeBehavior.AWAIT_ANY:
|
|
368
|
-
# Get the
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
#
|
|
372
|
-
if
|
|
373
|
-
fork_id = state.meta.node_execution_cache.__node_to_fork_id__.get(invoked_by_node, None)
|
|
374
|
-
if fork_id:
|
|
375
|
-
# If the invoked by node has a fork id and that fork id is in __all_fork_ids__
|
|
376
|
-
# We will
|
|
377
|
-
# 1. remove the fork id from __all_fork_ids__
|
|
378
|
-
# 2. remove the fork id from the __node_to_fork_id__ mapping
|
|
379
|
-
# else (this mean the fork has already been triggered)
|
|
380
|
-
# remove the id from the node_to_fork_id mapping and not retrigger again
|
|
381
|
-
all_fork_ids = state.meta.node_execution_cache.__all_fork_ids__
|
|
382
|
-
if fork_id in all_fork_ids:
|
|
383
|
-
# When the next forked node merge, it will not trigger the node again
|
|
384
|
-
# We should consider adding a lock here to prevent race condition
|
|
385
|
-
all_fork_ids.remove(fork_id)
|
|
386
|
-
state.meta.node_execution_cache.__node_to_fork_id__.pop(invoked_by_node, None)
|
|
387
|
-
else:
|
|
388
|
-
should_retrigger = False
|
|
389
|
-
state.meta.node_execution_cache.__node_to_fork_id__.pop(invoked_by_node, None)
|
|
390
|
-
|
|
391
|
-
# If should_retrigger is false, then we will not trigger the node already
|
|
392
|
-
# So we don't need to check loop behavior
|
|
393
|
-
if should_retrigger:
|
|
429
|
+
# Get the latest fulfilled execution ID of current node
|
|
430
|
+
fulfilled_stack = state.meta.node_execution_cache._node_executions_fulfilled[cls.node_class]
|
|
431
|
+
current_latest_fulfilled_id = fulfilled_stack.peek() if not fulfilled_stack.is_empty() else None
|
|
432
|
+
# If the current node has not been fulfilled yet, we don't need to check for loop
|
|
433
|
+
if current_latest_fulfilled_id is not None:
|
|
394
434
|
# Trace back through the dependency chain to detect if this node triggers itself
|
|
395
435
|
visited = set()
|
|
396
436
|
current_execution_id = invoked_by
|
|
@@ -416,15 +456,18 @@ class BaseNode(Generic[StateType], metaclass=BaseNodeMeta):
|
|
|
416
456
|
current_execution_id
|
|
417
457
|
)
|
|
418
458
|
|
|
419
|
-
# If we've found our target node class in the chain
|
|
459
|
+
# If we've found our target node class in the chain
|
|
420
460
|
if current_node_class == cls.node_class:
|
|
421
|
-
|
|
461
|
+
# Check if the execution id is the same as the latest fulfilled execution id
|
|
462
|
+
# If yes, we're in a loop
|
|
463
|
+
if current_execution_id == current_latest_fulfilled_id:
|
|
464
|
+
in_loop = True
|
|
465
|
+
# If not, current node has been triggered by other node,
|
|
466
|
+
# we can break out of the loop
|
|
422
467
|
break
|
|
423
468
|
|
|
424
469
|
for queued_node_execution_id in state.meta.node_execution_cache._node_executions_queued[cls.node_class]:
|
|
425
|
-
|
|
426
|
-
# So we don't need to trigger the node again
|
|
427
|
-
if not should_retrigger or (
|
|
470
|
+
if (
|
|
428
471
|
invoked_by not in state.meta.node_execution_cache._dependencies_invoked[queued_node_execution_id]
|
|
429
472
|
and not in_loop
|
|
430
473
|
):
|
|
@@ -446,6 +489,7 @@ class BaseNode(Generic[StateType], metaclass=BaseNodeMeta):
|
|
|
446
489
|
*,
|
|
447
490
|
state: Optional[StateType] = None,
|
|
448
491
|
context: Optional[WorkflowContext] = None,
|
|
492
|
+
inputs: Optional[Dict[str, Any]] = None,
|
|
449
493
|
):
|
|
450
494
|
if state:
|
|
451
495
|
self.state = state
|
|
@@ -466,37 +510,42 @@ class BaseNode(Generic[StateType], metaclass=BaseNodeMeta):
|
|
|
466
510
|
self.state = state_type()
|
|
467
511
|
|
|
468
512
|
self._context = context or WorkflowContext()
|
|
469
|
-
|
|
513
|
+
inputs_memo: Dict[str, Any] = inputs.copy() if inputs else {}
|
|
514
|
+
if inputs:
|
|
515
|
+
for input_key, input_value in inputs.items():
|
|
516
|
+
path_parts = input_key.split(".")
|
|
517
|
+
dir_path = path_parts[:-1]
|
|
518
|
+
leaf = path_parts[-1]
|
|
519
|
+
base: Any = self.__class__
|
|
520
|
+
|
|
521
|
+
for attr_name in dir_path:
|
|
522
|
+
if hasattr(base, attr_name):
|
|
523
|
+
base = getattr(base, attr_name)
|
|
524
|
+
elif isinstance(base, dict) and attr_name in base:
|
|
525
|
+
base = base[attr_name]
|
|
526
|
+
else:
|
|
527
|
+
break
|
|
528
|
+
|
|
529
|
+
if isinstance(base, dict):
|
|
530
|
+
base[leaf] = input_value
|
|
531
|
+
else:
|
|
532
|
+
setattr(base, leaf, input_value)
|
|
533
|
+
|
|
470
534
|
for descriptor in self.__class__:
|
|
471
|
-
if
|
|
535
|
+
if descriptor.instance is undefined:
|
|
536
|
+
setattr(self, descriptor.name, undefined)
|
|
472
537
|
continue
|
|
473
538
|
|
|
474
539
|
if any(isinstance(t, type) and issubclass(t, BaseDescriptor) for t in descriptor.types):
|
|
475
540
|
# We don't want to resolve attributes that are _meant_ to be descriptors
|
|
476
541
|
continue
|
|
477
542
|
|
|
478
|
-
resolved_value = resolve_value(descriptor.instance, self.state, path=descriptor.name, memo=
|
|
543
|
+
resolved_value = resolve_value(descriptor.instance, self.state, path=descriptor.name, memo=inputs_memo)
|
|
479
544
|
setattr(self, descriptor.name, resolved_value)
|
|
480
545
|
|
|
481
|
-
# Resolve descriptors set as defaults to the outputs class
|
|
482
|
-
def _outputs_post_init(outputs_self: "BaseNode.Outputs", **kwargs: Any) -> None:
|
|
483
|
-
for node_output_descriptor in self.Outputs:
|
|
484
|
-
if node_output_descriptor.name in kwargs:
|
|
485
|
-
continue
|
|
486
|
-
|
|
487
|
-
if isinstance(node_output_descriptor.instance, BaseDescriptor):
|
|
488
|
-
setattr(
|
|
489
|
-
outputs_self,
|
|
490
|
-
node_output_descriptor.name,
|
|
491
|
-
node_output_descriptor.instance.resolve(self.state),
|
|
492
|
-
)
|
|
493
|
-
delattr(self.Outputs, "_outputs_post_init")
|
|
494
|
-
|
|
495
|
-
setattr(self.Outputs, "_outputs_post_init", _outputs_post_init)
|
|
496
|
-
|
|
497
546
|
# We only want to store the attributes that were actually set as inputs, not every attribute that exists.
|
|
498
547
|
all_inputs = {}
|
|
499
|
-
for key, value in
|
|
548
|
+
for key, value in inputs_memo.items():
|
|
500
549
|
path_parts = key.split(".")
|
|
501
550
|
node_attribute_descriptor = getattr(self.__class__, path_parts[0])
|
|
502
551
|
inputs_key = reduce(lambda acc, part: acc[part], path_parts[1:], node_attribute_descriptor)
|
|
@@ -507,5 +556,39 @@ class BaseNode(Generic[StateType], metaclass=BaseNodeMeta):
|
|
|
507
556
|
def run(self) -> NodeRunResponse:
|
|
508
557
|
return self.Outputs()
|
|
509
558
|
|
|
559
|
+
def __cancel__(self, message: str) -> None:
|
|
560
|
+
"""
|
|
561
|
+
Called when the node should be cancelled. Override this method to propagate
|
|
562
|
+
cancellation to nested workflows or other resources.
|
|
563
|
+
|
|
564
|
+
Args:
|
|
565
|
+
message: The error message describing why the node is being cancelled
|
|
566
|
+
"""
|
|
567
|
+
pass
|
|
568
|
+
|
|
510
569
|
def __repr__(self) -> str:
|
|
511
570
|
return str(self.__class__)
|
|
571
|
+
|
|
572
|
+
__simulates_workflow_output__ = False
|
|
573
|
+
|
|
574
|
+
def __directly_emit_workflow_output__(
|
|
575
|
+
self, event: NodeExecutionStreamingEvent, workflow_output_descriptor: OutputReference
|
|
576
|
+
) -> bool:
|
|
577
|
+
"""
|
|
578
|
+
In the legacy workflow runner, there was support for emitting streaming workflow outputs for prompt nodes
|
|
579
|
+
connected to terminal nodes. These two private methods provides a hacky, intentionally short-lived workaround
|
|
580
|
+
for us to enable this until we can directly reference prompt outputs from the UI.
|
|
581
|
+
"""
|
|
582
|
+
|
|
583
|
+
return False
|
|
584
|
+
|
|
585
|
+
@classmethod
|
|
586
|
+
def __validate__(cls) -> None:
|
|
587
|
+
"""
|
|
588
|
+
Validates the node.
|
|
589
|
+
Subclasses can override this method to implement their specific validation logic.
|
|
590
|
+
Called during serialization or explicit validation.
|
|
591
|
+
|
|
592
|
+
Default implementation performs no validation.
|
|
593
|
+
"""
|
|
594
|
+
pass
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
from
|
|
1
|
+
from abc import ABC
|
|
2
|
+
from uuid import UUID
|
|
3
|
+
from typing import TYPE_CHECKING, Any, Dict, Generic, Optional, Set, Tuple, Type
|
|
2
4
|
|
|
3
5
|
from vellum.workflows.inputs.base import BaseInputs
|
|
4
6
|
from vellum.workflows.nodes.bases.base import BaseNode, BaseNodeMeta
|
|
5
7
|
from vellum.workflows.outputs.base import BaseOutputs
|
|
6
8
|
from vellum.workflows.references.output import OutputReference
|
|
9
|
+
from vellum.workflows.types.core import MergeBehavior
|
|
7
10
|
from vellum.workflows.types.generics import StateType
|
|
8
11
|
|
|
9
12
|
if TYPE_CHECKING:
|
|
@@ -67,6 +70,7 @@ class _BaseAdornmentNodeMeta(BaseNodeMeta):
|
|
|
67
70
|
class BaseAdornmentNode(
|
|
68
71
|
BaseNode[StateType],
|
|
69
72
|
Generic[StateType],
|
|
73
|
+
ABC,
|
|
70
74
|
metaclass=_BaseAdornmentNodeMeta,
|
|
71
75
|
):
|
|
72
76
|
"""
|
|
@@ -77,6 +81,56 @@ class BaseAdornmentNode(
|
|
|
77
81
|
__wrapped_node__: Optional[Type["BaseNode"]] = None
|
|
78
82
|
subworkflow: Type["BaseWorkflow"]
|
|
79
83
|
|
|
84
|
+
class Trigger(BaseNode.Trigger):
|
|
85
|
+
"""
|
|
86
|
+
Trigger class for adornment nodes that delegates to the wrapped node's Trigger
|
|
87
|
+
for proper merge behavior handling.
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
@classmethod
|
|
91
|
+
def should_initiate(
|
|
92
|
+
cls,
|
|
93
|
+
state: StateType,
|
|
94
|
+
dependencies: Set["Type[BaseNode]"],
|
|
95
|
+
node_span_id: UUID,
|
|
96
|
+
) -> bool:
|
|
97
|
+
"""
|
|
98
|
+
Delegates to the wrapped node's Trigger.should_initiate method to ensure
|
|
99
|
+
proper merge behavior (like AWAIT_ALL) is respected for initiation logic.
|
|
100
|
+
"""
|
|
101
|
+
# Get the wrapped node's Trigger class
|
|
102
|
+
wrapped_node = cls.node_class.__wrapped_node__
|
|
103
|
+
if wrapped_node is not None:
|
|
104
|
+
wrapped_trigger = wrapped_node.Trigger
|
|
105
|
+
# Only delegate if the wrapped node has a specific merge behavior
|
|
106
|
+
# that differs from the default AWAIT_ATTRIBUTES
|
|
107
|
+
if (
|
|
108
|
+
hasattr(wrapped_trigger, "merge_behavior")
|
|
109
|
+
and wrapped_trigger.merge_behavior != MergeBehavior.AWAIT_ATTRIBUTES
|
|
110
|
+
):
|
|
111
|
+
return wrapped_trigger.should_initiate(state, dependencies, node_span_id)
|
|
112
|
+
|
|
113
|
+
# Fallback to the base implementation if no wrapped node
|
|
114
|
+
return super().should_initiate(state, dependencies, node_span_id)
|
|
115
|
+
|
|
116
|
+
@classmethod
|
|
117
|
+
def _queue_node_execution(
|
|
118
|
+
cls, state: StateType, dependencies: set[Type[BaseNode]], invoked_by: Optional[UUID] = None
|
|
119
|
+
) -> UUID:
|
|
120
|
+
"""
|
|
121
|
+
Delegates to the wrapped node's Trigger._queue_node_execution method to ensure
|
|
122
|
+
proper merge behavior (like AWAIT_ALL) is respected for dependency tracking.
|
|
123
|
+
"""
|
|
124
|
+
# Get the wrapped node's Trigger class
|
|
125
|
+
wrapped_node = cls.node_class.__wrapped_node__
|
|
126
|
+
if wrapped_node is not None:
|
|
127
|
+
wrapped_trigger = wrapped_node.Trigger
|
|
128
|
+
# Delegate to the wrapped node's trigger logic for queuing
|
|
129
|
+
return wrapped_trigger._queue_node_execution(state, dependencies, invoked_by)
|
|
130
|
+
|
|
131
|
+
# Fallback to the base implementation if no wrapped node
|
|
132
|
+
return super()._queue_node_execution(state, dependencies, invoked_by)
|
|
133
|
+
|
|
80
134
|
@classmethod
|
|
81
135
|
def __annotate_outputs_class__(cls, outputs_class: Type[BaseOutputs], reference: OutputReference) -> None:
|
|
82
136
|
# Subclasses of BaseAdornableNode can override this method to provider their own
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
import pytest
|
|
2
2
|
from uuid import UUID
|
|
3
|
-
from typing import Optional
|
|
3
|
+
from typing import Any, Dict, Optional, Set
|
|
4
4
|
|
|
5
|
+
from vellum.client.core.pydantic_utilities import UniversalBaseModel
|
|
5
6
|
from vellum.client.types.string_vellum_value_request import StringVellumValueRequest
|
|
6
|
-
from vellum.
|
|
7
|
+
from vellum.workflows import BaseWorkflow
|
|
7
8
|
from vellum.workflows.constants import undefined
|
|
8
9
|
from vellum.workflows.descriptors.tests.test_utils import FixtureState
|
|
10
|
+
from vellum.workflows.errors.types import WorkflowErrorCode
|
|
9
11
|
from vellum.workflows.inputs.base import BaseInputs
|
|
10
12
|
from vellum.workflows.nodes import FinalOutputNode
|
|
11
13
|
from vellum.workflows.nodes.bases.base import BaseNode
|
|
12
|
-
from vellum.workflows.outputs.base import BaseOutputs
|
|
14
|
+
from vellum.workflows.outputs.base import BaseOutput, BaseOutputs
|
|
15
|
+
from vellum.workflows.ports.port import Port
|
|
16
|
+
from vellum.workflows.references.constant import ConstantValueReference
|
|
13
17
|
from vellum.workflows.references.node import NodeReference
|
|
14
18
|
from vellum.workflows.references.output import OutputReference
|
|
15
19
|
from vellum.workflows.state.base import BaseState, StateMeta
|
|
20
|
+
from vellum.workflows.workflows.event_filters import all_workflow_event_filter
|
|
16
21
|
|
|
17
22
|
|
|
18
23
|
def test_base_node__node_resolution__unset_pydantic_fields():
|
|
@@ -142,7 +147,7 @@ def test_base_node__default_id():
|
|
|
142
147
|
my_id = MyNode.__id__
|
|
143
148
|
|
|
144
149
|
# THEN it should equal the hash of `test_base_node__default_id.<locals>.MyNode`
|
|
145
|
-
assert my_id == UUID("
|
|
150
|
+
assert my_id == UUID("3207dd3d-b26f-4476-969f-37697683f850")
|
|
146
151
|
|
|
147
152
|
|
|
148
153
|
def test_base_node__node_resolution__descriptor_in_fern_pydantic():
|
|
@@ -333,3 +338,147 @@ def test_base_node__node_reference_of_inherited_annotation():
|
|
|
333
338
|
# THEN the node reference is of the correct type
|
|
334
339
|
assert isinstance(node_reference, NodeReference)
|
|
335
340
|
assert node_reference.name == "foo"
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
def test_base_node__ports_inheritance():
|
|
344
|
+
# GIVEN a node with one port
|
|
345
|
+
class MyNode(BaseNode):
|
|
346
|
+
class Ports(BaseNode.Ports):
|
|
347
|
+
foo = Port.on_if(ConstantValueReference(True))
|
|
348
|
+
|
|
349
|
+
def __lt__(self, output: BaseOutput) -> Set[Port]:
|
|
350
|
+
return {self.foo}
|
|
351
|
+
|
|
352
|
+
# AND a node that inherits from MyNode
|
|
353
|
+
class InheritedNode(MyNode):
|
|
354
|
+
pass
|
|
355
|
+
|
|
356
|
+
# WHEN we collect the ports
|
|
357
|
+
ports = [port.name for port in InheritedNode.Ports]
|
|
358
|
+
|
|
359
|
+
# THEN the inheritance is correct
|
|
360
|
+
inherited_ports = InheritedNode.Ports()
|
|
361
|
+
assert inherited_ports.__lt__(BaseOutput(name="foo")) == {InheritedNode.Ports.foo}
|
|
362
|
+
|
|
363
|
+
# AND the ports are correct
|
|
364
|
+
assert ports == ["foo"]
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
def test_base_node__ports_inheritance__cumulative_ports():
|
|
368
|
+
# GIVEN a node with one port
|
|
369
|
+
class MyNode(BaseNode):
|
|
370
|
+
class Ports(BaseNode.Ports):
|
|
371
|
+
foo = Port.on_if(ConstantValueReference(True))
|
|
372
|
+
|
|
373
|
+
# AND a node that inherits from MyNode with another port
|
|
374
|
+
class InheritedNode(MyNode):
|
|
375
|
+
class Ports(MyNode.Ports):
|
|
376
|
+
bar = Port.on_if(ConstantValueReference(True))
|
|
377
|
+
|
|
378
|
+
# WHEN we collect the ports
|
|
379
|
+
ports = [port.name for port in InheritedNode.Ports]
|
|
380
|
+
|
|
381
|
+
# THEN the ports are correct
|
|
382
|
+
# Potentially in the future, we support inheriting ports from multiple parents.
|
|
383
|
+
# For now, we take only the declared ports, so that not all nodes have the default port.
|
|
384
|
+
assert ports == ["bar"]
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
def test_base_node__trigger_should_initiate__invalid_merge_behavior():
|
|
388
|
+
"""
|
|
389
|
+
Tests that an invalid merge behavior raises a NodeException with the invalid value in the error message.
|
|
390
|
+
"""
|
|
391
|
+
|
|
392
|
+
# GIVEN a node with an invalid merge behavior
|
|
393
|
+
class InvalidMergeBehaviorNode(BaseNode):
|
|
394
|
+
class Trigger(BaseNode.Trigger):
|
|
395
|
+
merge_behavior = "INVALID_MERGE_BEHAVIOR" # type: ignore[assignment]
|
|
396
|
+
|
|
397
|
+
# AND a workflow that uses the node
|
|
398
|
+
class InvalidMergeBehaviorWorkflow(BaseWorkflow):
|
|
399
|
+
graph = InvalidMergeBehaviorNode
|
|
400
|
+
|
|
401
|
+
# WHEN we stream the workflow
|
|
402
|
+
workflow = InvalidMergeBehaviorWorkflow()
|
|
403
|
+
events = list(workflow.stream(event_filter=all_workflow_event_filter))
|
|
404
|
+
|
|
405
|
+
# THEN the workflow should reject
|
|
406
|
+
workflow_rejected_event = events[-1]
|
|
407
|
+
assert workflow_rejected_event.name == "workflow.execution.rejected"
|
|
408
|
+
|
|
409
|
+
# AND the error should have the correct code
|
|
410
|
+
assert workflow_rejected_event.error.code == WorkflowErrorCode.INVALID_INPUTS
|
|
411
|
+
|
|
412
|
+
# AND the error message should contain the invalid merge behavior
|
|
413
|
+
assert "INVALID_MERGE_BEHAVIOR" in workflow_rejected_event.error.message
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
def test_base_node__int_input_preserves_type_when_float_passed():
|
|
417
|
+
"""
|
|
418
|
+
Tests that an int workflow input is correctly coerced to int when a float value is passed.
|
|
419
|
+
"""
|
|
420
|
+
|
|
421
|
+
# GIVEN an Inputs class with an int field
|
|
422
|
+
class Inputs(BaseInputs):
|
|
423
|
+
total_requests: int
|
|
424
|
+
|
|
425
|
+
# AND a custom node that references the int input
|
|
426
|
+
class CustomNode(BaseNode):
|
|
427
|
+
total_requests = Inputs.total_requests
|
|
428
|
+
|
|
429
|
+
class Outputs(BaseOutputs):
|
|
430
|
+
result: int
|
|
431
|
+
|
|
432
|
+
def run(self) -> BaseOutputs:
|
|
433
|
+
# This should work without error - range() requires an int, not a float
|
|
434
|
+
result = len(range(self.total_requests))
|
|
435
|
+
return self.Outputs(result=result)
|
|
436
|
+
|
|
437
|
+
# AND a workflow that uses the custom node
|
|
438
|
+
class IntInputWorkflow(BaseWorkflow[Inputs, BaseState]):
|
|
439
|
+
graph = CustomNode
|
|
440
|
+
|
|
441
|
+
class Outputs(BaseWorkflow.Outputs):
|
|
442
|
+
result = CustomNode.Outputs.result
|
|
443
|
+
|
|
444
|
+
# WHEN we run the workflow with a float value for an int input
|
|
445
|
+
# This simulates what happens when the API returns a NUMBER value as a float
|
|
446
|
+
workflow = IntInputWorkflow()
|
|
447
|
+
raw_inputs: Dict[str, Any] = {"total_requests": 5.0}
|
|
448
|
+
inputs = Inputs(**raw_inputs)
|
|
449
|
+
|
|
450
|
+
# THEN the input should be coerced to an integer at construction time
|
|
451
|
+
assert inputs.total_requests == 5
|
|
452
|
+
assert type(inputs.total_requests) is int
|
|
453
|
+
|
|
454
|
+
# AND the workflow should complete successfully
|
|
455
|
+
final_event = workflow.run(inputs=inputs)
|
|
456
|
+
assert final_event.name == "workflow.execution.fulfilled"
|
|
457
|
+
|
|
458
|
+
# AND the result should be correct
|
|
459
|
+
assert final_event.outputs.result == 5
|
|
460
|
+
|
|
461
|
+
|
|
462
|
+
def test_base_node__bytes_output_raises_serialization_error():
|
|
463
|
+
"""Test that returning bytes in node outputs rejects the workflow execution."""
|
|
464
|
+
|
|
465
|
+
class BytesOutputNode(BaseNode):
|
|
466
|
+
class Outputs(BaseNode.Outputs):
|
|
467
|
+
result: str
|
|
468
|
+
|
|
469
|
+
def run(self) -> "BytesOutputNode.Outputs":
|
|
470
|
+
b = b"hello"
|
|
471
|
+
return self.Outputs(result=b) # type: ignore[arg-type]
|
|
472
|
+
|
|
473
|
+
class BytesWorkflow(BaseWorkflow):
|
|
474
|
+
graph = BytesOutputNode
|
|
475
|
+
|
|
476
|
+
workflow = BytesWorkflow()
|
|
477
|
+
|
|
478
|
+
# WHEN we run the workflow
|
|
479
|
+
result = workflow.run()
|
|
480
|
+
|
|
481
|
+
# THEN the execution is rejected with a helpful error
|
|
482
|
+
assert result.name == "workflow.execution.rejected"
|
|
483
|
+
assert result.error.code == WorkflowErrorCode.INVALID_OUTPUTS
|
|
484
|
+
assert "bytes" in result.error.message.lower()
|
|
@@ -1,20 +1,29 @@
|
|
|
1
|
-
from typing import ClassVar, Union
|
|
1
|
+
from typing import ClassVar, Generic, Union
|
|
2
2
|
|
|
3
3
|
from vellum.client.types.vellum_error import VellumError
|
|
4
4
|
from vellum.workflows.errors.types import WorkflowError, WorkflowErrorCode, vellum_error_to_workflow_error
|
|
5
5
|
from vellum.workflows.exceptions import NodeException
|
|
6
6
|
from vellum.workflows.nodes.bases.base import BaseNode
|
|
7
|
+
from vellum.workflows.ports import NodePorts
|
|
8
|
+
from vellum.workflows.types.generics import StateType
|
|
7
9
|
|
|
8
10
|
|
|
9
|
-
class ErrorNode(BaseNode):
|
|
11
|
+
class ErrorNode(BaseNode[StateType], Generic[StateType]):
|
|
10
12
|
"""
|
|
11
13
|
Used to raise an error to reject the surrounding Workflow.
|
|
12
14
|
|
|
13
15
|
error: Union[str, VellumError] - The error to raise.
|
|
14
16
|
"""
|
|
15
17
|
|
|
18
|
+
class Display(BaseNode.Display):
|
|
19
|
+
icon = "vellum:icon:hexagon-exclamation"
|
|
20
|
+
color = "lipstick"
|
|
21
|
+
|
|
16
22
|
error: ClassVar[Union[str, WorkflowError, VellumError]]
|
|
17
23
|
|
|
24
|
+
class Ports(NodePorts):
|
|
25
|
+
pass
|
|
26
|
+
|
|
18
27
|
def run(self) -> BaseNode.Outputs:
|
|
19
28
|
if isinstance(self.error, str):
|
|
20
29
|
raise NodeException(message=self.error, code=WorkflowErrorCode.USER_DEFINED_ERROR)
|