vellum-ai 0.14.63__py3-none-any.whl → 1.11.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of vellum-ai might be problematic. Click here for more details.
- vellum/__init__.py +269 -4
- vellum/client/README.md +68 -15
- vellum/client/__init__.py +598 -1437
- vellum/client/core/__init__.py +5 -0
- vellum/client/core/api_error.py +13 -5
- vellum/client/core/client_wrapper.py +30 -4
- vellum/client/core/force_multipart.py +16 -0
- vellum/client/core/http_client.py +70 -26
- vellum/client/core/http_response.py +55 -0
- vellum/client/core/jsonable_encoder.py +0 -1
- vellum/client/core/pydantic_utilities.py +87 -117
- vellum/client/core/serialization.py +7 -3
- vellum/client/errors/__init__.py +14 -1
- vellum/client/errors/bad_request_error.py +4 -3
- vellum/client/errors/forbidden_error.py +4 -3
- vellum/client/errors/internal_server_error.py +4 -3
- vellum/client/errors/misdirected_request_error.py +11 -0
- vellum/client/errors/not_found_error.py +4 -3
- vellum/client/errors/too_many_requests_error.py +11 -0
- vellum/client/errors/unauthorized_error.py +11 -0
- vellum/client/raw_client.py +2725 -0
- vellum/client/reference.md +1980 -638
- vellum/client/resources/__init__.py +16 -2
- vellum/client/resources/ad_hoc/__init__.py +2 -0
- vellum/client/resources/ad_hoc/client.py +173 -377
- vellum/client/resources/ad_hoc/raw_client.py +569 -0
- vellum/client/resources/container_images/__init__.py +2 -0
- vellum/client/resources/container_images/client.py +72 -191
- vellum/client/resources/container_images/raw_client.py +407 -0
- vellum/client/resources/deployments/__init__.py +2 -0
- vellum/client/resources/deployments/client.py +119 -463
- vellum/client/resources/deployments/raw_client.py +1002 -0
- vellum/client/resources/deployments/types/__init__.py +2 -0
- vellum/client/resources/document_indexes/__init__.py +2 -0
- vellum/client/resources/document_indexes/client.py +131 -383
- vellum/client/resources/document_indexes/raw_client.py +866 -0
- vellum/client/resources/document_indexes/types/__init__.py +2 -0
- vellum/client/resources/documents/__init__.py +2 -0
- vellum/client/resources/documents/client.py +93 -325
- vellum/client/resources/documents/raw_client.py +662 -0
- vellum/client/resources/{release_reviews → environments}/__init__.py +2 -0
- vellum/client/resources/environments/client.py +106 -0
- vellum/client/resources/environments/raw_client.py +95 -0
- vellum/client/resources/events/__init__.py +4 -0
- vellum/client/resources/events/client.py +201 -0
- vellum/client/resources/events/raw_client.py +211 -0
- vellum/client/resources/folder_entities/__init__.py +2 -0
- vellum/client/resources/folder_entities/client.py +56 -95
- vellum/client/resources/folder_entities/raw_client.py +276 -0
- vellum/client/resources/folder_entities/types/__init__.py +2 -0
- vellum/client/resources/integration_auth_configs/__init__.py +4 -0
- vellum/client/resources/integration_auth_configs/client.py +186 -0
- vellum/client/resources/integration_auth_configs/raw_client.py +171 -0
- vellum/client/resources/integration_providers/__init__.py +4 -0
- vellum/client/resources/integration_providers/client.py +299 -0
- vellum/client/resources/integration_providers/raw_client.py +275 -0
- vellum/client/resources/integrations/__init__.py +4 -0
- vellum/client/resources/integrations/client.py +466 -0
- vellum/client/resources/integrations/raw_client.py +557 -0
- vellum/client/resources/metric_definitions/__init__.py +2 -0
- vellum/client/resources/metric_definitions/client.py +60 -106
- vellum/client/resources/metric_definitions/raw_client.py +224 -0
- vellum/client/resources/ml_models/__init__.py +2 -0
- vellum/client/resources/ml_models/client.py +37 -46
- vellum/client/resources/ml_models/raw_client.py +102 -0
- vellum/client/resources/organizations/__init__.py +2 -0
- vellum/client/resources/organizations/client.py +37 -45
- vellum/client/resources/organizations/raw_client.py +95 -0
- vellum/client/resources/prompts/__init__.py +2 -0
- vellum/client/resources/prompts/client.py +84 -202
- vellum/client/resources/prompts/raw_client.py +353 -0
- vellum/client/resources/sandboxes/__init__.py +2 -0
- vellum/client/resources/sandboxes/client.py +69 -159
- vellum/client/resources/sandboxes/raw_client.py +392 -0
- vellum/client/resources/test_suite_runs/__init__.py +2 -0
- vellum/client/resources/test_suite_runs/client.py +65 -157
- vellum/client/resources/test_suite_runs/raw_client.py +354 -0
- vellum/client/resources/test_suites/__init__.py +2 -0
- vellum/client/resources/test_suites/client.py +162 -266
- vellum/client/resources/test_suites/raw_client.py +530 -0
- vellum/client/resources/uploaded_files/__init__.py +4 -0
- vellum/client/resources/uploaded_files/client.py +230 -0
- vellum/client/resources/uploaded_files/raw_client.py +316 -0
- vellum/client/resources/workflow_deployments/__init__.py +2 -0
- vellum/client/resources/workflow_deployments/client.py +302 -353
- vellum/client/resources/workflow_deployments/raw_client.py +1059 -0
- vellum/client/resources/workflow_deployments/types/__init__.py +2 -0
- vellum/client/resources/workflow_executions/__init__.py +4 -0
- vellum/client/resources/workflow_executions/client.py +140 -0
- vellum/client/resources/workflow_executions/raw_client.py +173 -0
- vellum/client/resources/workflow_sandboxes/__init__.py +2 -0
- vellum/client/resources/workflow_sandboxes/client.py +58 -123
- vellum/client/resources/workflow_sandboxes/raw_client.py +291 -0
- vellum/client/resources/workflow_sandboxes/types/__init__.py +2 -0
- vellum/client/resources/workflows/__init__.py +2 -0
- vellum/client/resources/workflows/client.py +256 -141
- vellum/client/resources/workflows/raw_client.py +547 -0
- vellum/client/resources/workspace_secrets/__init__.py +2 -0
- vellum/client/resources/workspace_secrets/client.py +43 -100
- vellum/client/resources/workspace_secrets/raw_client.py +219 -0
- vellum/client/resources/workspaces/__init__.py +2 -0
- vellum/client/resources/workspaces/client.py +37 -45
- vellum/client/resources/workspaces/raw_client.py +95 -0
- vellum/client/tests/__init__.py +0 -0
- vellum/client/tests/test_utils.py +34 -0
- vellum/client/types/__init__.py +242 -0
- vellum/client/types/ad_hoc_execute_prompt_event.py +3 -2
- vellum/client/types/ad_hoc_expand_meta.py +2 -2
- vellum/client/types/ad_hoc_fulfilled_prompt_execution_meta.py +3 -3
- vellum/client/types/ad_hoc_initiated_prompt_execution_meta.py +2 -2
- vellum/client/types/ad_hoc_rejected_prompt_execution_meta.py +3 -3
- vellum/client/types/ad_hoc_streaming_prompt_execution_meta.py +2 -2
- vellum/client/types/api_actor_type_enum.py +7 -0
- vellum/client/types/api_node_result.py +3 -3
- vellum/client/types/api_node_result_data.py +4 -4
- vellum/client/types/api_request_parent_context.py +17 -10
- vellum/client/types/api_version_enum.py +1 -1
- vellum/client/types/array_chat_message_content.py +3 -3
- vellum/client/types/array_chat_message_content_item.py +7 -4
- vellum/client/types/array_chat_message_content_item_request.py +7 -4
- vellum/client/types/array_chat_message_content_request.py +3 -3
- vellum/client/types/array_input.py +12 -6
- vellum/client/types/array_vellum_value.py +4 -4
- vellum/client/types/array_vellum_value_request.py +4 -4
- vellum/client/types/audio_chat_message_content.py +3 -3
- vellum/client/types/audio_chat_message_content_request.py +3 -3
- vellum/client/types/audio_input.py +30 -0
- vellum/client/types/audio_input_request.py +30 -0
- vellum/client/types/audio_prompt_block.py +4 -4
- vellum/client/types/audio_vellum_value.py +3 -3
- vellum/client/types/audio_vellum_value_request.py +3 -3
- vellum/client/types/auth_type_enum.py +5 -0
- vellum/client/types/base_output.py +4 -4
- vellum/client/types/basic_vectorizer_intfloat_multilingual_e_5_large.py +2 -2
- vellum/client/types/basic_vectorizer_intfloat_multilingual_e_5_large_request.py +2 -2
- vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_cos_v_1.py +2 -2
- vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_cos_v_1_request.py +2 -2
- vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_dot_v_1.py +2 -2
- vellum/client/types/basic_vectorizer_sentence_transformers_multi_qa_mpnet_base_dot_v_1_request.py +2 -2
- vellum/client/types/build_status_enum.py +5 -0
- vellum/client/types/chat_history_input.py +3 -3
- vellum/client/types/chat_history_input_request.py +3 -3
- vellum/client/types/chat_history_vellum_value.py +3 -3
- vellum/client/types/chat_history_vellum_value_request.py +3 -3
- vellum/client/types/chat_message.py +4 -4
- vellum/client/types/chat_message_content.py +7 -4
- vellum/client/types/chat_message_content_request.py +7 -4
- vellum/client/types/chat_message_prompt_block.py +7 -7
- vellum/client/types/chat_message_request.py +4 -4
- vellum/client/types/code_execution_node_array_result.py +11 -5
- vellum/client/types/code_execution_node_chat_history_result.py +3 -3
- vellum/client/types/code_execution_node_error_result.py +3 -3
- vellum/client/types/code_execution_node_function_call_result.py +3 -3
- vellum/client/types/code_execution_node_json_result.py +2 -2
- vellum/client/types/code_execution_node_number_result.py +2 -2
- vellum/client/types/code_execution_node_result.py +10 -4
- vellum/client/types/code_execution_node_result_data.py +10 -4
- vellum/client/types/code_execution_node_result_output.py +6 -5
- vellum/client/types/code_execution_node_search_results_result.py +3 -3
- vellum/client/types/code_execution_node_string_result.py +2 -2
- vellum/client/types/code_execution_package.py +3 -2
- vellum/client/types/code_executor_input.py +15 -6
- vellum/client/types/code_executor_response.py +11 -5
- vellum/client/types/code_executor_secret_input.py +3 -3
- vellum/client/types/code_resource_definition.py +3 -3
- vellum/client/types/compile_prompt_deployment_expand_meta_request.py +2 -2
- vellum/client/types/compile_prompt_meta.py +2 -2
- vellum/client/types/components_schemas_composio_execute_tool_request.py +5 -0
- vellum/client/types/components_schemas_composio_execute_tool_response.py +5 -0
- vellum/client/types/components_schemas_composio_integration_exec_config.py +5 -0
- vellum/client/types/components_schemas_composio_tool_definition.py +5 -0
- vellum/client/types/components_schemas_slim_composio_tool_definition.py +5 -0
- vellum/client/types/composio_execute_tool_request.py +24 -0
- vellum/client/types/composio_execute_tool_response.py +24 -0
- vellum/client/types/composio_integration_exec_config.py +21 -0
- vellum/client/types/composio_tool_definition.py +30 -0
- vellum/client/types/conditional_node_result.py +3 -3
- vellum/client/types/conditional_node_result_data.py +2 -2
- vellum/client/types/container_image_build_config.py +21 -0
- vellum/client/types/container_image_container_image_tag.py +2 -2
- vellum/client/types/container_image_read.py +8 -4
- vellum/client/types/create_test_suite_test_case_request.py +9 -3
- vellum/client/types/create_workflow_event_request.py +7 -0
- vellum/client/types/dataset_row_push_request.py +20 -0
- vellum/client/types/delimiter_chunker_config.py +20 -0
- vellum/client/types/delimiter_chunker_config_request.py +20 -0
- vellum/client/types/delimiter_chunking.py +21 -0
- vellum/client/types/delimiter_chunking_request.py +21 -0
- vellum/client/types/deployment_history_item.py +10 -4
- vellum/client/types/deployment_provider_payload_response.py +4 -4
- vellum/client/types/deployment_read.py +15 -9
- vellum/client/types/deployment_release_tag_deployment_history_item.py +2 -2
- vellum/client/types/deployment_release_tag_read.py +4 -4
- vellum/client/types/deprecated_prompt_request_input.py +8 -0
- vellum/client/types/docker_service_token.py +2 -2
- vellum/client/types/document_chat_message_content.py +3 -3
- vellum/client/types/document_chat_message_content_request.py +3 -3
- vellum/client/types/document_document_to_document_index.py +4 -4
- vellum/client/types/document_index_chunking.py +5 -1
- vellum/client/types/document_index_chunking_request.py +3 -1
- vellum/client/types/document_index_indexing_config.py +4 -4
- vellum/client/types/document_index_indexing_config_request.py +4 -4
- vellum/client/types/document_index_read.py +4 -4
- vellum/client/types/document_input.py +30 -0
- vellum/client/types/document_input_request.py +30 -0
- vellum/client/types/document_prompt_block.py +4 -4
- vellum/client/types/document_read.py +9 -5
- vellum/client/types/document_vellum_value.py +3 -3
- vellum/client/types/document_vellum_value_request.py +3 -3
- vellum/client/types/enriched_normalized_completion.py +3 -3
- vellum/client/types/environment_display_config.py +19 -0
- vellum/client/types/environment_read.py +23 -0
- vellum/client/types/ephemeral_prompt_cache_config.py +3 -3
- vellum/client/types/error_detail_response.py +22 -0
- vellum/client/types/error_input.py +3 -3
- vellum/client/types/error_vellum_value.py +3 -3
- vellum/client/types/error_vellum_value_request.py +3 -3
- vellum/client/types/event_create_response.py +31 -0
- vellum/client/types/execute_api_request_bearer_token.py +1 -0
- vellum/client/types/execute_api_request_headers_value.py +1 -0
- vellum/client/types/execute_api_response.py +6 -6
- vellum/client/types/execute_prompt_event.py +3 -2
- vellum/client/types/execute_prompt_response.py +1 -0
- vellum/client/types/execute_workflow_async_response.py +26 -0
- vellum/client/types/execute_workflow_response.py +10 -4
- vellum/client/types/execute_workflow_workflow_result_event.py +1 -0
- vellum/client/types/execution_array_vellum_value.py +12 -6
- vellum/client/types/execution_audio_vellum_value.py +31 -0
- vellum/client/types/execution_chat_history_vellum_value.py +3 -3
- vellum/client/types/execution_document_vellum_value.py +31 -0
- vellum/client/types/execution_error_vellum_value.py +3 -3
- vellum/client/types/execution_function_call_vellum_value.py +3 -3
- vellum/client/types/execution_image_vellum_value.py +31 -0
- vellum/client/types/execution_json_vellum_value.py +3 -3
- vellum/client/types/execution_number_vellum_value.py +3 -3
- vellum/client/types/execution_search_results_vellum_value.py +3 -3
- vellum/client/types/execution_string_vellum_value.py +3 -3
- vellum/client/types/execution_thinking_vellum_value.py +31 -0
- vellum/client/types/execution_vellum_value.py +16 -5
- vellum/client/types/execution_video_vellum_value.py +31 -0
- vellum/client/types/external_input_descriptor.py +3 -3
- vellum/client/types/external_parent_context.py +38 -0
- vellum/client/types/external_test_case_execution.py +10 -4
- vellum/client/types/external_test_case_execution_request.py +10 -4
- vellum/client/types/fast_embed_vectorizer_baai_bge_small_en_v_15.py +23 -0
- vellum/client/types/fast_embed_vectorizer_baai_bge_small_en_v_15_request.py +23 -0
- vellum/client/types/folder_entity.py +5 -2
- vellum/client/types/folder_entity_dataset.py +26 -0
- vellum/client/types/folder_entity_dataset_data.py +25 -0
- vellum/client/types/folder_entity_document_index.py +3 -3
- vellum/client/types/folder_entity_document_index_data.py +5 -3
- vellum/client/types/folder_entity_folder.py +3 -3
- vellum/client/types/folder_entity_folder_data.py +2 -2
- vellum/client/types/folder_entity_prompt_sandbox.py +3 -3
- vellum/client/types/folder_entity_prompt_sandbox_data.py +4 -3
- vellum/client/types/folder_entity_test_suite.py +3 -3
- vellum/client/types/folder_entity_test_suite_data.py +3 -3
- vellum/client/types/folder_entity_workflow_sandbox.py +3 -3
- vellum/client/types/folder_entity_workflow_sandbox_data.py +6 -3
- vellum/client/types/fulfilled_ad_hoc_execute_prompt_event.py +4 -4
- vellum/client/types/fulfilled_execute_prompt_event.py +4 -4
- vellum/client/types/fulfilled_execute_prompt_response.py +3 -3
- vellum/client/types/fulfilled_execute_workflow_workflow_result_event.py +11 -5
- vellum/client/types/fulfilled_prompt_execution_meta.py +3 -3
- vellum/client/types/fulfilled_workflow_node_result_event.py +12 -6
- vellum/client/types/function_call.py +2 -2
- vellum/client/types/function_call_chat_message_content.py +3 -3
- vellum/client/types/function_call_chat_message_content_request.py +3 -3
- vellum/client/types/function_call_chat_message_content_value.py +2 -2
- vellum/client/types/function_call_chat_message_content_value_request.py +2 -2
- vellum/client/types/function_call_input.py +3 -3
- vellum/client/types/function_call_prompt_block.py +4 -4
- vellum/client/types/function_call_request.py +2 -2
- vellum/client/types/function_call_vellum_value.py +3 -3
- vellum/client/types/function_call_vellum_value_request.py +3 -3
- vellum/client/types/function_definition.py +9 -4
- vellum/client/types/generate_options_request.py +3 -3
- vellum/client/types/generate_request.py +2 -2
- vellum/client/types/generate_response.py +3 -3
- vellum/client/types/generate_result.py +3 -3
- vellum/client/types/generate_result_data.py +3 -3
- vellum/client/types/generate_result_error.py +3 -3
- vellum/client/types/generate_stream_response.py +3 -3
- vellum/client/types/generate_stream_result.py +4 -4
- vellum/client/types/generate_stream_result_data.py +3 -3
- vellum/client/types/google_vertex_ai_vectorizer_config.py +2 -2
- vellum/client/types/google_vertex_ai_vectorizer_config_request.py +2 -2
- vellum/client/types/google_vertex_ai_vectorizer_gemini_embedding_001.py +21 -0
- vellum/client/types/google_vertex_ai_vectorizer_gemini_embedding_001_request.py +21 -0
- vellum/client/types/google_vertex_ai_vectorizer_text_embedding_004.py +3 -3
- vellum/client/types/google_vertex_ai_vectorizer_text_embedding_004_request.py +3 -3
- vellum/client/types/google_vertex_ai_vectorizer_text_multilingual_embedding_002.py +3 -3
- vellum/client/types/google_vertex_ai_vectorizer_text_multilingual_embedding_002_request.py +3 -3
- vellum/client/types/hkunlp_instructor_xl_vectorizer.py +3 -3
- vellum/client/types/hkunlp_instructor_xl_vectorizer_request.py +3 -3
- vellum/client/types/image_chat_message_content.py +3 -3
- vellum/client/types/image_chat_message_content_request.py +3 -3
- vellum/client/types/image_input.py +30 -0
- vellum/client/types/image_input_request.py +30 -0
- vellum/client/types/image_prompt_block.py +4 -4
- vellum/client/types/image_vellum_value.py +3 -3
- vellum/client/types/image_vellum_value_request.py +3 -3
- vellum/client/types/indexing_config_vectorizer.py +11 -4
- vellum/client/types/indexing_config_vectorizer_request.py +11 -4
- vellum/client/types/initiated_ad_hoc_execute_prompt_event.py +3 -3
- vellum/client/types/initiated_execute_prompt_event.py +3 -3
- vellum/client/types/initiated_prompt_execution_meta.py +2 -2
- vellum/client/types/initiated_workflow_node_result_event.py +12 -6
- vellum/client/types/instructor_vectorizer_config.py +2 -2
- vellum/client/types/instructor_vectorizer_config_request.py +2 -2
- vellum/client/types/integration.py +27 -0
- vellum/client/types/integration_auth_config_integration.py +23 -0
- vellum/client/types/integration_auth_config_integration_credential.py +19 -0
- vellum/client/types/integration_credential_access_type.py +5 -0
- vellum/client/types/integration_name.py +85 -0
- vellum/client/types/integration_provider.py +5 -0
- vellum/client/types/integration_read.py +30 -0
- vellum/client/types/integration_trigger_context.py +39 -0
- vellum/client/types/invoked_port.py +2 -2
- vellum/client/types/jinja_prompt_block.py +4 -4
- vellum/client/types/json_input.py +3 -3
- vellum/client/types/json_input_request.py +3 -3
- vellum/client/types/json_vellum_value.py +2 -2
- vellum/client/types/json_vellum_value_request.py +2 -2
- vellum/client/types/logical_operator.py +4 -0
- vellum/client/types/map_node_result.py +3 -3
- vellum/client/types/map_node_result_data.py +3 -3
- vellum/client/types/merge_node_result.py +3 -3
- vellum/client/types/merge_node_result_data.py +2 -2
- vellum/client/types/metadata_filter_config_request.py +12 -6
- vellum/client/types/metadata_filter_rule_request.py +5 -5
- vellum/client/types/metadata_filters_request.py +1 -0
- vellum/client/types/metric_definition_execution.py +10 -4
- vellum/client/types/metric_definition_history_item.py +10 -4
- vellum/client/types/metric_definition_input.py +3 -2
- vellum/client/types/metric_node_result.py +2 -2
- vellum/client/types/ml_model_read.py +6 -3
- vellum/client/types/ml_model_usage.py +2 -2
- vellum/client/types/ml_model_usage_wrapper.py +3 -3
- vellum/client/types/named_scenario_input_audio_variable_value_request.py +22 -0
- vellum/client/types/named_scenario_input_chat_history_variable_value_request.py +3 -3
- vellum/client/types/named_scenario_input_document_variable_value_request.py +22 -0
- vellum/client/types/named_scenario_input_image_variable_value_request.py +22 -0
- vellum/client/types/named_scenario_input_json_variable_value_request.py +2 -2
- vellum/client/types/named_scenario_input_request.py +11 -2
- vellum/client/types/named_scenario_input_string_variable_value_request.py +2 -2
- vellum/client/types/named_scenario_input_video_variable_value_request.py +22 -0
- vellum/client/types/named_test_case_array_variable_value.py +11 -5
- vellum/client/types/named_test_case_array_variable_value_request.py +11 -5
- vellum/client/types/named_test_case_audio_variable_value.py +26 -0
- vellum/client/types/named_test_case_audio_variable_value_request.py +26 -0
- vellum/client/types/named_test_case_chat_history_variable_value.py +3 -3
- vellum/client/types/named_test_case_chat_history_variable_value_request.py +3 -3
- vellum/client/types/named_test_case_document_variable_value.py +22 -0
- vellum/client/types/named_test_case_document_variable_value_request.py +22 -0
- vellum/client/types/named_test_case_error_variable_value.py +3 -3
- vellum/client/types/named_test_case_error_variable_value_request.py +3 -3
- vellum/client/types/named_test_case_function_call_variable_value.py +3 -3
- vellum/client/types/named_test_case_function_call_variable_value_request.py +3 -3
- vellum/client/types/named_test_case_image_variable_value.py +22 -0
- vellum/client/types/named_test_case_image_variable_value_request.py +22 -0
- vellum/client/types/named_test_case_json_variable_value.py +2 -2
- vellum/client/types/named_test_case_json_variable_value_request.py +2 -2
- vellum/client/types/named_test_case_number_variable_value.py +2 -2
- vellum/client/types/named_test_case_number_variable_value_request.py +2 -2
- vellum/client/types/named_test_case_search_results_variable_value.py +3 -3
- vellum/client/types/named_test_case_search_results_variable_value_request.py +3 -3
- vellum/client/types/named_test_case_string_variable_value.py +2 -2
- vellum/client/types/named_test_case_string_variable_value_request.py +2 -2
- vellum/client/types/named_test_case_variable_value.py +14 -5
- vellum/client/types/named_test_case_variable_value_request.py +14 -5
- vellum/client/types/named_test_case_video_variable_value.py +22 -0
- vellum/client/types/named_test_case_video_variable_value_request.py +22 -0
- vellum/client/types/node_execution_fulfilled_body.py +4 -4
- vellum/client/types/node_execution_fulfilled_event.py +24 -15
- vellum/client/types/node_execution_initiated_body.py +3 -3
- vellum/client/types/node_execution_initiated_event.py +24 -15
- vellum/client/types/node_execution_paused_body.py +3 -3
- vellum/client/types/node_execution_paused_event.py +24 -15
- vellum/client/types/node_execution_rejected_body.py +5 -4
- vellum/client/types/node_execution_rejected_event.py +24 -15
- vellum/client/types/node_execution_resumed_body.py +3 -3
- vellum/client/types/node_execution_resumed_event.py +24 -15
- vellum/client/types/node_execution_span.py +23 -12
- vellum/client/types/node_execution_span_attributes.py +4 -2
- vellum/client/types/node_execution_streaming_body.py +4 -4
- vellum/client/types/node_execution_streaming_event.py +24 -15
- vellum/client/types/node_input_compiled_array_value.py +11 -5
- vellum/client/types/node_input_compiled_audio_value.py +23 -0
- vellum/client/types/node_input_compiled_chat_history_value.py +3 -3
- vellum/client/types/node_input_compiled_document_value.py +23 -0
- vellum/client/types/node_input_compiled_error_value.py +3 -3
- vellum/client/types/node_input_compiled_function_call_value.py +3 -3
- vellum/client/types/node_input_compiled_image_value.py +23 -0
- vellum/client/types/node_input_compiled_json_value.py +2 -2
- vellum/client/types/node_input_compiled_number_value.py +2 -2
- vellum/client/types/node_input_compiled_search_results_value.py +3 -3
- vellum/client/types/node_input_compiled_secret_value.py +3 -3
- vellum/client/types/node_input_compiled_string_value.py +2 -2
- vellum/client/types/node_input_compiled_video_value.py +23 -0
- vellum/client/types/node_input_variable_compiled_value.py +14 -5
- vellum/client/types/node_output_compiled_array_value.py +12 -6
- vellum/client/types/node_output_compiled_chat_history_value.py +3 -3
- vellum/client/types/node_output_compiled_error_value.py +3 -3
- vellum/client/types/node_output_compiled_function_call_value.py +3 -3
- vellum/client/types/node_output_compiled_json_value.py +3 -3
- vellum/client/types/node_output_compiled_number_value.py +3 -3
- vellum/client/types/node_output_compiled_search_results_value.py +3 -3
- vellum/client/types/node_output_compiled_string_value.py +3 -3
- vellum/client/types/node_output_compiled_thinking_value.py +28 -0
- vellum/client/types/node_output_compiled_value.py +8 -5
- vellum/client/types/node_parent_context.py +14 -11
- vellum/client/types/normalized_log_probs.py +3 -3
- vellum/client/types/normalized_token_log_probs.py +2 -2
- vellum/client/types/number_input.py +3 -3
- vellum/client/types/number_vellum_value.py +2 -2
- vellum/client/types/number_vellum_value_request.py +2 -2
- vellum/client/types/open_ai_vectorizer_config.py +3 -3
- vellum/client/types/open_ai_vectorizer_config_request.py +3 -3
- vellum/client/types/open_ai_vectorizer_text_embedding_3_large.py +3 -3
- vellum/client/types/open_ai_vectorizer_text_embedding_3_large_request.py +3 -3
- vellum/client/types/open_ai_vectorizer_text_embedding_3_small.py +3 -3
- vellum/client/types/open_ai_vectorizer_text_embedding_3_small_request.py +3 -3
- vellum/client/types/open_ai_vectorizer_text_embedding_ada_002.py +3 -3
- vellum/client/types/open_ai_vectorizer_text_embedding_ada_002_request.py +3 -3
- vellum/client/types/organization_read.py +6 -3
- vellum/client/types/paginated_container_image_read_list.py +3 -3
- vellum/client/types/paginated_deployment_release_tag_read_list.py +3 -3
- vellum/client/types/paginated_document_index_read_list.py +3 -3
- vellum/client/types/paginated_folder_entity_list.py +3 -3
- vellum/client/types/paginated_slim_deployment_read_list.py +10 -4
- vellum/client/types/paginated_slim_document_list.py +3 -3
- vellum/client/types/paginated_slim_integration_auth_config_read_list.py +23 -0
- vellum/client/types/paginated_slim_integration_read_list.py +23 -0
- vellum/client/types/paginated_slim_tool_definition_list.py +23 -0
- vellum/client/types/paginated_slim_workflow_deployment_list.py +10 -4
- vellum/client/types/paginated_test_suite_run_execution_list.py +10 -4
- vellum/client/types/paginated_test_suite_test_case_list.py +10 -4
- vellum/client/types/paginated_workflow_deployment_release_list.py +30 -0
- vellum/client/types/paginated_workflow_release_tag_read_list.py +3 -3
- vellum/client/types/paginated_workflow_sandbox_example_list.py +3 -3
- vellum/client/types/parent_context.py +21 -11
- vellum/client/types/pdf_search_result_meta_source.py +2 -2
- vellum/client/types/pdf_search_result_meta_source_request.py +2 -2
- vellum/client/types/plain_text_prompt_block.py +4 -4
- vellum/client/types/price.py +3 -3
- vellum/client/types/private_vectorizer.py +23 -0
- vellum/client/types/private_vectorizer_request.py +23 -0
- vellum/client/types/processing_failure_reason_enum.py +3 -1
- vellum/client/types/prompt_block.py +9 -6
- vellum/client/types/prompt_deployment_expand_meta_request.py +2 -2
- vellum/client/types/prompt_deployment_input_request.py +16 -3
- vellum/client/types/prompt_deployment_parent_context.py +13 -10
- vellum/client/types/prompt_deployment_release.py +6 -6
- vellum/client/types/prompt_deployment_release_prompt_deployment.py +2 -2
- vellum/client/types/prompt_deployment_release_prompt_version.py +4 -4
- vellum/client/types/prompt_exec_config.py +15 -9
- vellum/client/types/prompt_execution_meta.py +3 -3
- vellum/client/types/prompt_node_execution_meta.py +3 -3
- vellum/client/types/prompt_node_result.py +3 -3
- vellum/client/types/prompt_node_result_data.py +3 -3
- vellum/client/types/prompt_output.py +7 -3
- vellum/client/types/prompt_parameters.py +2 -2
- vellum/client/types/prompt_push_response.py +2 -2
- vellum/client/types/prompt_request_audio_input.py +26 -0
- vellum/client/types/prompt_request_chat_history_input.py +3 -3
- vellum/client/types/prompt_request_document_input.py +26 -0
- vellum/client/types/prompt_request_image_input.py +26 -0
- vellum/client/types/prompt_request_input.py +16 -3
- vellum/client/types/prompt_request_json_input.py +3 -3
- vellum/client/types/prompt_request_string_input.py +3 -3
- vellum/client/types/prompt_request_video_input.py +26 -0
- vellum/client/types/prompt_settings.py +2 -2
- vellum/client/types/prompt_version_build_config_sandbox.py +2 -2
- vellum/client/types/raw_prompt_execution_overrides_request.py +2 -2
- vellum/client/types/reducto_chunker_config.py +2 -2
- vellum/client/types/reducto_chunker_config_request.py +2 -2
- vellum/client/types/reducto_chunking.py +3 -3
- vellum/client/types/reducto_chunking_request.py +3 -3
- vellum/client/types/rejected_ad_hoc_execute_prompt_event.py +4 -4
- vellum/client/types/rejected_execute_prompt_event.py +4 -4
- vellum/client/types/rejected_execute_prompt_response.py +3 -3
- vellum/client/types/rejected_execute_workflow_workflow_result_event.py +4 -4
- vellum/client/types/rejected_prompt_execution_meta.py +3 -3
- vellum/client/types/rejected_workflow_node_result_event.py +12 -6
- vellum/client/types/release_created_by.py +2 -2
- vellum/client/types/release_environment.py +2 -2
- vellum/client/types/release_release_tag.py +3 -3
- vellum/client/types/release_review_reviewer.py +2 -2
- vellum/client/types/release_tag_release.py +2 -2
- vellum/client/types/replace_test_suite_test_case_request.py +9 -3
- vellum/client/types/rich_text_child_block.py +2 -1
- vellum/client/types/rich_text_prompt_block.py +4 -4
- vellum/client/types/sandbox_scenario.py +3 -3
- vellum/client/types/scenario_input.py +14 -3
- vellum/client/types/scenario_input_audio_variable_value.py +22 -0
- vellum/client/types/scenario_input_chat_history_variable_value.py +3 -3
- vellum/client/types/scenario_input_document_variable_value.py +22 -0
- vellum/client/types/scenario_input_image_variable_value.py +22 -0
- vellum/client/types/scenario_input_json_variable_value.py +2 -2
- vellum/client/types/scenario_input_string_variable_value.py +2 -2
- vellum/client/types/scenario_input_video_variable_value.py +22 -0
- vellum/client/types/scheduled_trigger_context.py +39 -0
- vellum/client/types/search_filters_request.py +11 -5
- vellum/client/types/search_node_result.py +3 -3
- vellum/client/types/search_node_result_data.py +3 -3
- vellum/client/types/search_request_options_request.py +13 -7
- vellum/client/types/search_response.py +3 -3
- vellum/client/types/search_result.py +3 -3
- vellum/client/types/search_result_document.py +2 -2
- vellum/client/types/search_result_document_request.py +2 -2
- vellum/client/types/search_result_merging_request.py +2 -2
- vellum/client/types/search_result_meta.py +3 -3
- vellum/client/types/search_result_meta_request.py +3 -3
- vellum/client/types/search_result_request.py +3 -3
- vellum/client/types/search_results_input.py +3 -3
- vellum/client/types/search_results_vellum_value.py +3 -3
- vellum/client/types/search_results_vellum_value_request.py +3 -3
- vellum/client/types/search_weights_request.py +2 -2
- vellum/client/types/secret_type_enum.py +3 -1
- vellum/client/types/sentence_chunker_config.py +2 -2
- vellum/client/types/sentence_chunker_config_request.py +2 -2
- vellum/client/types/sentence_chunking.py +3 -3
- vellum/client/types/sentence_chunking_request.py +3 -3
- vellum/client/types/slim_composio_tool_definition.py +24 -0
- vellum/client/types/slim_deployment_read.py +15 -9
- vellum/client/types/slim_document.py +6 -5
- vellum/client/types/slim_document_document_to_document_index.py +4 -4
- vellum/client/types/slim_integration_auth_config_read.py +36 -0
- vellum/client/types/slim_integration_read.py +25 -0
- vellum/client/types/slim_release_review.py +4 -4
- vellum/client/types/slim_workflow_deployment.py +16 -10
- vellum/client/types/slim_workflow_execution_read.py +24 -15
- vellum/client/types/span_link.py +15 -12
- vellum/client/types/span_link_type_enum.py +1 -1
- vellum/client/types/streaming_ad_hoc_execute_prompt_event.py +4 -4
- vellum/client/types/streaming_execute_prompt_event.py +3 -3
- vellum/client/types/streaming_prompt_execution_meta.py +2 -2
- vellum/client/types/streaming_workflow_node_result_event.py +12 -6
- vellum/client/types/string_chat_message_content.py +2 -2
- vellum/client/types/string_chat_message_content_request.py +2 -2
- vellum/client/types/string_input.py +3 -3
- vellum/client/types/string_input_request.py +3 -3
- vellum/client/types/string_vellum_value.py +2 -2
- vellum/client/types/string_vellum_value_request.py +2 -2
- vellum/client/types/submit_completion_actual_request.py +3 -3
- vellum/client/types/submit_workflow_execution_actual_request.py +3 -2
- vellum/client/types/subworkflow_node_result.py +3 -3
- vellum/client/types/subworkflow_node_result_data.py +2 -2
- vellum/client/types/templating_node_array_result.py +11 -5
- vellum/client/types/templating_node_chat_history_result.py +3 -3
- vellum/client/types/templating_node_error_result.py +3 -3
- vellum/client/types/templating_node_function_call_result.py +3 -3
- vellum/client/types/templating_node_json_result.py +2 -2
- vellum/client/types/templating_node_number_result.py +2 -2
- vellum/client/types/templating_node_result.py +10 -4
- vellum/client/types/templating_node_result_data.py +10 -4
- vellum/client/types/templating_node_result_output.py +6 -5
- vellum/client/types/templating_node_search_results_result.py +3 -3
- vellum/client/types/templating_node_string_result.py +2 -2
- vellum/client/types/terminal_node_array_result.py +11 -5
- vellum/client/types/terminal_node_chat_history_result.py +2 -2
- vellum/client/types/terminal_node_error_result.py +2 -2
- vellum/client/types/terminal_node_function_call_result.py +2 -2
- vellum/client/types/terminal_node_json_result.py +2 -2
- vellum/client/types/terminal_node_number_result.py +2 -2
- vellum/client/types/terminal_node_result.py +10 -4
- vellum/client/types/terminal_node_result_data.py +10 -4
- vellum/client/types/terminal_node_result_output.py +6 -5
- vellum/client/types/terminal_node_search_results_result.py +2 -2
- vellum/client/types/terminal_node_string_result.py +2 -2
- vellum/client/types/test_case_array_variable_value.py +11 -5
- vellum/client/types/test_case_audio_variable_value.py +27 -0
- vellum/client/types/test_case_chat_history_variable_value.py +3 -3
- vellum/client/types/test_case_document_variable_value.py +27 -0
- vellum/client/types/test_case_error_variable_value.py +3 -3
- vellum/client/types/test_case_function_call_variable_value.py +3 -3
- vellum/client/types/test_case_image_variable_value.py +27 -0
- vellum/client/types/test_case_json_variable_value.py +2 -2
- vellum/client/types/test_case_number_variable_value.py +2 -2
- vellum/client/types/test_case_search_results_variable_value.py +3 -3
- vellum/client/types/test_case_string_variable_value.py +2 -2
- vellum/client/types/test_case_variable_value.py +14 -5
- vellum/client/types/test_case_video_variable_value.py +27 -0
- vellum/client/types/test_suite_run_deployment_release_tag_exec_config.py +3 -3
- vellum/client/types/test_suite_run_deployment_release_tag_exec_config_data.py +3 -3
- vellum/client/types/test_suite_run_deployment_release_tag_exec_config_data_request.py +3 -3
- vellum/client/types/test_suite_run_deployment_release_tag_exec_config_request.py +3 -3
- vellum/client/types/test_suite_run_exec_config.py +2 -1
- vellum/client/types/test_suite_run_exec_config_request.py +2 -1
- vellum/client/types/test_suite_run_execution.py +11 -5
- vellum/client/types/test_suite_run_execution_array_output.py +11 -5
- vellum/client/types/test_suite_run_execution_chat_history_output.py +3 -3
- vellum/client/types/test_suite_run_execution_error_output.py +3 -3
- vellum/client/types/test_suite_run_execution_function_call_output.py +3 -3
- vellum/client/types/test_suite_run_execution_json_output.py +2 -2
- vellum/client/types/test_suite_run_execution_metric_definition.py +2 -2
- vellum/client/types/test_suite_run_execution_metric_result.py +11 -5
- vellum/client/types/test_suite_run_execution_number_output.py +2 -2
- vellum/client/types/test_suite_run_execution_output.py +6 -5
- vellum/client/types/test_suite_run_execution_search_results_output.py +3 -3
- vellum/client/types/test_suite_run_execution_string_output.py +2 -2
- vellum/client/types/test_suite_run_external_exec_config.py +10 -4
- vellum/client/types/test_suite_run_external_exec_config_data.py +10 -4
- vellum/client/types/test_suite_run_external_exec_config_data_request.py +10 -4
- vellum/client/types/test_suite_run_external_exec_config_request.py +10 -4
- vellum/client/types/test_suite_run_metric_array_output.py +11 -5
- vellum/client/types/test_suite_run_metric_error_output.py +3 -3
- vellum/client/types/test_suite_run_metric_json_output.py +2 -2
- vellum/client/types/test_suite_run_metric_number_output.py +2 -2
- vellum/client/types/test_suite_run_metric_output.py +5 -4
- vellum/client/types/test_suite_run_metric_string_output.py +2 -2
- vellum/client/types/test_suite_run_progress.py +2 -2
- vellum/client/types/test_suite_run_prompt_sandbox_exec_config_data_request.py +3 -3
- vellum/client/types/test_suite_run_prompt_sandbox_exec_config_request.py +3 -3
- vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config.py +3 -3
- vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_data.py +3 -3
- vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_data_request.py +3 -3
- vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_request.py +3 -3
- vellum/client/types/test_suite_run_read.py +12 -6
- vellum/client/types/test_suite_run_test_suite.py +2 -2
- vellum/client/types/test_suite_run_workflow_release_tag_exec_config.py +3 -3
- vellum/client/types/test_suite_run_workflow_release_tag_exec_config_data.py +3 -3
- vellum/client/types/test_suite_run_workflow_release_tag_exec_config_data_request.py +3 -3
- vellum/client/types/test_suite_run_workflow_release_tag_exec_config_request.py +3 -3
- vellum/client/types/test_suite_run_workflow_sandbox_exec_config_data_request.py +3 -3
- vellum/client/types/test_suite_run_workflow_sandbox_exec_config_request.py +3 -3
- vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config.py +3 -3
- vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_data.py +3 -3
- vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_data_request.py +3 -3
- vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_request.py +3 -3
- vellum/client/types/test_suite_test_case.py +10 -4
- vellum/client/types/test_suite_test_case_bulk_operation_request.py +2 -1
- vellum/client/types/test_suite_test_case_bulk_result.py +2 -1
- vellum/client/types/test_suite_test_case_create_bulk_operation_request.py +10 -4
- vellum/client/types/test_suite_test_case_created_bulk_result.py +3 -3
- vellum/client/types/test_suite_test_case_created_bulk_result_data.py +2 -2
- vellum/client/types/test_suite_test_case_delete_bulk_operation_data_request.py +2 -2
- vellum/client/types/test_suite_test_case_delete_bulk_operation_request.py +3 -3
- vellum/client/types/test_suite_test_case_deleted_bulk_result.py +3 -3
- vellum/client/types/test_suite_test_case_deleted_bulk_result_data.py +2 -2
- vellum/client/types/test_suite_test_case_rejected_bulk_result.py +2 -2
- vellum/client/types/test_suite_test_case_replace_bulk_operation_request.py +10 -4
- vellum/client/types/test_suite_test_case_replaced_bulk_result.py +3 -3
- vellum/client/types/test_suite_test_case_replaced_bulk_result_data.py +2 -2
- vellum/client/types/test_suite_test_case_upsert_bulk_operation_request.py +10 -4
- vellum/client/types/thinking_vellum_value.py +25 -0
- vellum/client/types/thinking_vellum_value_request.py +25 -0
- vellum/client/types/token_overlapping_window_chunker_config.py +2 -2
- vellum/client/types/token_overlapping_window_chunker_config_request.py +2 -2
- vellum/client/types/token_overlapping_window_chunking.py +3 -3
- vellum/client/types/token_overlapping_window_chunking_request.py +3 -3
- vellum/client/types/update_active_workspace_response.py +32 -0
- vellum/client/types/upload_document_response.py +3 -3
- vellum/client/types/uploaded_file_read.py +27 -0
- vellum/client/types/upsert_test_suite_test_case_request.py +9 -3
- vellum/client/types/variable_prompt_block.py +11 -4
- vellum/client/types/vellum_audio.py +5 -4
- vellum/client/types/vellum_audio_request.py +3 -3
- vellum/client/types/vellum_code_resource_definition.py +7 -2
- vellum/client/types/vellum_document.py +9 -4
- vellum/client/types/vellum_document_request.py +7 -3
- vellum/client/types/vellum_error.py +5 -4
- vellum/client/types/vellum_error_code_enum.py +6 -0
- vellum/client/types/vellum_error_request.py +5 -4
- vellum/client/types/vellum_image.py +9 -4
- vellum/client/types/vellum_image_request.py +7 -3
- vellum/client/types/vellum_node_execution_event.py +4 -3
- vellum/client/types/vellum_sdk_error.py +4 -3
- vellum/client/types/vellum_sdk_error_code_enum.py +5 -0
- vellum/client/types/vellum_secret.py +2 -2
- vellum/client/types/vellum_span.py +2 -1
- vellum/client/types/vellum_value.py +13 -8
- vellum/client/types/vellum_value_logical_condition_group_request.py +6 -6
- vellum/client/types/vellum_value_logical_condition_request.py +13 -7
- vellum/client/types/vellum_value_logical_expression_request.py +2 -1
- vellum/client/types/vellum_value_request.py +13 -8
- vellum/client/types/vellum_variable.py +13 -7
- vellum/client/types/vellum_variable_extensions.py +3 -2
- vellum/client/types/vellum_variable_type.py +3 -1
- vellum/client/types/vellum_video.py +25 -0
- vellum/client/types/vellum_video_request.py +24 -0
- vellum/client/types/vellum_workflow_execution_event.py +4 -3
- vellum/client/types/video_chat_message_content.py +25 -0
- vellum/client/types/video_chat_message_content_request.py +25 -0
- vellum/client/types/video_input.py +30 -0
- vellum/client/types/video_input_request.py +30 -0
- vellum/client/types/video_prompt_block.py +29 -0
- vellum/client/types/video_vellum_value.py +25 -0
- vellum/client/types/video_vellum_value_request.py +25 -0
- vellum/client/types/workflow_deployment_display_data.py +27 -0
- vellum/client/types/workflow_deployment_event_executions_response.py +20 -11
- vellum/client/types/workflow_deployment_history_item.py +10 -4
- vellum/client/types/workflow_deployment_parent_context.py +13 -10
- vellum/client/types/workflow_deployment_read.py +22 -10
- vellum/client/types/workflow_deployment_release.py +13 -7
- vellum/client/types/workflow_deployment_release_workflow_deployment.py +2 -2
- vellum/client/types/workflow_deployment_release_workflow_version.py +10 -4
- vellum/client/types/workflow_display_icon.py +24 -0
- vellum/client/types/workflow_error.py +1 -0
- vellum/client/types/workflow_event.py +37 -0
- vellum/client/types/workflow_event_error.py +5 -3
- vellum/client/types/workflow_event_execution_read.py +26 -16
- vellum/client/types/workflow_execution_actual.py +11 -5
- vellum/client/types/workflow_execution_actual_chat_history_request.py +2 -2
- vellum/client/types/workflow_execution_actual_json_request.py +2 -2
- vellum/client/types/workflow_execution_actual_string_request.py +2 -2
- vellum/client/types/workflow_execution_detail.py +51 -0
- vellum/client/types/workflow_execution_event_error_code.py +5 -0
- vellum/client/types/workflow_execution_fulfilled_body.py +5 -3
- vellum/client/types/workflow_execution_fulfilled_event.py +24 -15
- vellum/client/types/workflow_execution_initiated_body.py +3 -3
- vellum/client/types/workflow_execution_initiated_event.py +24 -15
- vellum/client/types/workflow_execution_node_result_event.py +10 -4
- vellum/client/types/workflow_execution_paused_body.py +4 -4
- vellum/client/types/workflow_execution_paused_event.py +24 -15
- vellum/client/types/workflow_execution_rejected_body.py +5 -4
- vellum/client/types/workflow_execution_rejected_event.py +24 -15
- vellum/client/types/workflow_execution_resumed_body.py +3 -3
- vellum/client/types/workflow_execution_resumed_event.py +24 -15
- vellum/client/types/workflow_execution_snapshotted_body.py +4 -3
- vellum/client/types/workflow_execution_snapshotted_event.py +24 -15
- vellum/client/types/workflow_execution_span.py +22 -11
- vellum/client/types/workflow_execution_span_attributes.py +3 -2
- vellum/client/types/workflow_execution_streaming_body.py +4 -4
- vellum/client/types/workflow_execution_streaming_event.py +24 -15
- vellum/client/types/workflow_execution_usage_calculation_error.py +3 -3
- vellum/client/types/workflow_execution_usage_calculation_fulfilled_body.py +22 -0
- vellum/client/types/workflow_execution_usage_result.py +3 -3
- vellum/client/types/workflow_execution_view_online_eval_metric_result.py +10 -4
- vellum/client/types/workflow_execution_workflow_result_event.py +10 -4
- vellum/client/types/workflow_expand_meta_request.py +2 -2
- vellum/client/types/workflow_initialization_error.py +2 -2
- vellum/client/types/workflow_input.py +31 -0
- vellum/client/types/workflow_node_result_data.py +8 -7
- vellum/client/types/workflow_node_result_event.py +3 -2
- vellum/client/types/workflow_output.py +12 -5
- vellum/client/types/workflow_output_array.py +12 -6
- vellum/client/types/workflow_output_audio.py +31 -0
- vellum/client/types/workflow_output_chat_history.py +3 -3
- vellum/client/types/workflow_output_document.py +31 -0
- vellum/client/types/workflow_output_error.py +3 -3
- vellum/client/types/workflow_output_function_call.py +3 -3
- vellum/client/types/workflow_output_image.py +3 -3
- vellum/client/types/workflow_output_json.py +3 -3
- vellum/client/types/workflow_output_number.py +3 -3
- vellum/client/types/workflow_output_search_results.py +3 -3
- vellum/client/types/workflow_output_string.py +3 -3
- vellum/client/types/workflow_output_video.py +31 -0
- vellum/client/types/workflow_parent_context.py +14 -11
- vellum/client/types/workflow_push_deployment_config_request.py +3 -2
- vellum/client/types/workflow_push_response.py +2 -2
- vellum/client/types/workflow_release_tag_read.py +4 -4
- vellum/client/types/workflow_release_tag_workflow_deployment_history_item.py +2 -2
- vellum/client/types/workflow_request_audio_input_request.py +30 -0
- vellum/client/types/workflow_request_chat_history_input_request.py +3 -3
- vellum/client/types/workflow_request_document_input_request.py +30 -0
- vellum/client/types/workflow_request_image_input_request.py +30 -0
- vellum/client/types/workflow_request_input_request.py +11 -2
- vellum/client/types/workflow_request_json_input_request.py +3 -3
- vellum/client/types/workflow_request_number_input_request.py +3 -3
- vellum/client/types/workflow_request_string_input_request.py +3 -3
- vellum/client/types/workflow_request_video_input_request.py +30 -0
- vellum/client/types/workflow_resolved_state.py +31 -0
- vellum/client/types/workflow_result_event.py +14 -8
- vellum/client/types/workflow_result_event_output_data.py +7 -6
- vellum/client/types/workflow_result_event_output_data_array.py +12 -6
- vellum/client/types/workflow_result_event_output_data_chat_history.py +3 -3
- vellum/client/types/workflow_result_event_output_data_error.py +3 -3
- vellum/client/types/workflow_result_event_output_data_function_call.py +3 -3
- vellum/client/types/workflow_result_event_output_data_json.py +3 -3
- vellum/client/types/workflow_result_event_output_data_number.py +3 -3
- vellum/client/types/workflow_result_event_output_data_search_results.py +3 -3
- vellum/client/types/workflow_result_event_output_data_string.py +3 -3
- vellum/client/types/workflow_result_event_state.py +7 -0
- vellum/client/types/workflow_sandbox_display_data.py +27 -0
- vellum/client/types/workflow_sandbox_example.py +4 -2
- vellum/client/types/workflow_sandbox_parent_context.py +13 -10
- vellum/client/types/workflow_stream_event.py +2 -1
- vellum/client/types/workspace_display_config.py +19 -0
- vellum/client/types/workspace_read.py +5 -3
- vellum/client/types/workspace_secret_read.py +3 -3
- vellum/client/utils.py +24 -0
- vellum/core/force_multipart.py +3 -0
- vellum/core/http_response.py +3 -0
- vellum/errors/misdirected_request_error.py +3 -0
- vellum/errors/too_many_requests_error.py +3 -0
- vellum/errors/unauthorized_error.py +3 -0
- vellum/evaluations/resources.py +5 -5
- vellum/plugins/pydantic.py +14 -3
- vellum/plugins/tests/__init__.py +0 -0
- vellum/plugins/tests/test_pydantic.py +30 -0
- vellum/plugins/vellum_mypy.py +31 -23
- vellum/prompts/__init__.py +3 -0
- vellum/prompts/blocks/__init__.py +3 -0
- vellum/prompts/blocks/compilation.py +29 -11
- vellum/prompts/blocks/helpers.py +31 -0
- vellum/prompts/blocks/tests/test_compilation.py +64 -0
- vellum/raw_client.py +3 -0
- vellum/resources/ad_hoc/raw_client.py +3 -0
- vellum/resources/container_images/raw_client.py +3 -0
- vellum/resources/deployments/raw_client.py +3 -0
- vellum/resources/document_indexes/raw_client.py +3 -0
- vellum/resources/documents/raw_client.py +3 -0
- vellum/resources/{release_reviews → environments}/__init__.py +1 -1
- vellum/resources/{release_reviews → environments}/client.py +1 -1
- vellum/resources/environments/raw_client.py +3 -0
- vellum/resources/events/__init__.py +3 -0
- vellum/resources/events/client.py +3 -0
- vellum/resources/events/raw_client.py +3 -0
- vellum/resources/folder_entities/raw_client.py +3 -0
- vellum/resources/integration_auth_configs/__init__.py +3 -0
- vellum/resources/integration_auth_configs/client.py +3 -0
- vellum/resources/integration_auth_configs/raw_client.py +3 -0
- vellum/resources/integration_providers/__init__.py +3 -0
- vellum/resources/integration_providers/client.py +3 -0
- vellum/resources/integration_providers/raw_client.py +3 -0
- vellum/resources/integrations/__init__.py +3 -0
- vellum/resources/integrations/client.py +3 -0
- vellum/resources/integrations/raw_client.py +3 -0
- vellum/resources/metric_definitions/raw_client.py +3 -0
- vellum/resources/ml_models/raw_client.py +3 -0
- vellum/resources/organizations/raw_client.py +3 -0
- vellum/resources/prompts/raw_client.py +3 -0
- vellum/resources/sandboxes/raw_client.py +3 -0
- vellum/resources/test_suite_runs/raw_client.py +3 -0
- vellum/resources/test_suites/raw_client.py +3 -0
- vellum/resources/uploaded_files/__init__.py +3 -0
- vellum/resources/uploaded_files/client.py +3 -0
- vellum/resources/uploaded_files/raw_client.py +3 -0
- vellum/resources/workflow_deployments/raw_client.py +3 -0
- vellum/resources/workflow_executions/__init__.py +3 -0
- vellum/resources/workflow_executions/client.py +3 -0
- vellum/resources/workflow_executions/raw_client.py +3 -0
- vellum/resources/workflow_sandboxes/raw_client.py +3 -0
- vellum/resources/workflows/raw_client.py +3 -0
- vellum/resources/workspace_secrets/raw_client.py +3 -0
- vellum/resources/workspaces/raw_client.py +3 -0
- vellum/types/api_actor_type_enum.py +3 -0
- vellum/types/audio_input.py +3 -0
- vellum/types/audio_input_request.py +3 -0
- vellum/types/auth_type_enum.py +3 -0
- vellum/types/build_status_enum.py +3 -0
- vellum/types/components_schemas_composio_execute_tool_request.py +3 -0
- vellum/types/components_schemas_composio_execute_tool_response.py +3 -0
- vellum/types/components_schemas_composio_integration_exec_config.py +3 -0
- vellum/types/components_schemas_composio_tool_definition.py +3 -0
- vellum/types/components_schemas_slim_composio_tool_definition.py +3 -0
- vellum/types/composio_execute_tool_request.py +3 -0
- vellum/types/composio_execute_tool_response.py +3 -0
- vellum/types/composio_integration_exec_config.py +3 -0
- vellum/types/composio_tool_definition.py +3 -0
- vellum/types/container_image_build_config.py +3 -0
- vellum/types/create_workflow_event_request.py +3 -0
- vellum/types/dataset_row_push_request.py +3 -0
- vellum/types/delimiter_chunker_config.py +3 -0
- vellum/types/delimiter_chunker_config_request.py +3 -0
- vellum/types/delimiter_chunking.py +3 -0
- vellum/types/delimiter_chunking_request.py +3 -0
- vellum/types/deprecated_prompt_request_input.py +3 -0
- vellum/types/document_input.py +3 -0
- vellum/types/document_input_request.py +3 -0
- vellum/types/environment_display_config.py +3 -0
- vellum/types/environment_read.py +3 -0
- vellum/types/error_detail_response.py +3 -0
- vellum/types/event_create_response.py +3 -0
- vellum/types/execute_workflow_async_response.py +3 -0
- vellum/types/execution_audio_vellum_value.py +3 -0
- vellum/types/execution_document_vellum_value.py +3 -0
- vellum/types/execution_image_vellum_value.py +3 -0
- vellum/types/execution_thinking_vellum_value.py +3 -0
- vellum/types/execution_video_vellum_value.py +3 -0
- vellum/types/external_parent_context.py +3 -0
- vellum/types/fast_embed_vectorizer_baai_bge_small_en_v_15.py +3 -0
- vellum/types/fast_embed_vectorizer_baai_bge_small_en_v_15_request.py +3 -0
- vellum/types/folder_entity_dataset.py +3 -0
- vellum/types/folder_entity_dataset_data.py +3 -0
- vellum/types/google_vertex_ai_vectorizer_gemini_embedding_001.py +3 -0
- vellum/types/google_vertex_ai_vectorizer_gemini_embedding_001_request.py +3 -0
- vellum/types/image_input.py +3 -0
- vellum/types/image_input_request.py +3 -0
- vellum/types/integration.py +3 -0
- vellum/types/integration_auth_config_integration.py +3 -0
- vellum/types/integration_auth_config_integration_credential.py +3 -0
- vellum/types/integration_credential_access_type.py +3 -0
- vellum/types/integration_name.py +3 -0
- vellum/types/integration_provider.py +3 -0
- vellum/types/integration_read.py +3 -0
- vellum/types/integration_trigger_context.py +3 -0
- vellum/types/named_scenario_input_audio_variable_value_request.py +3 -0
- vellum/types/named_scenario_input_document_variable_value_request.py +3 -0
- vellum/types/named_scenario_input_image_variable_value_request.py +3 -0
- vellum/types/named_scenario_input_video_variable_value_request.py +3 -0
- vellum/types/named_test_case_audio_variable_value.py +3 -0
- vellum/types/named_test_case_audio_variable_value_request.py +3 -0
- vellum/types/named_test_case_document_variable_value.py +3 -0
- vellum/types/named_test_case_document_variable_value_request.py +3 -0
- vellum/types/named_test_case_image_variable_value.py +3 -0
- vellum/types/named_test_case_image_variable_value_request.py +3 -0
- vellum/types/named_test_case_video_variable_value.py +3 -0
- vellum/types/named_test_case_video_variable_value_request.py +3 -0
- vellum/types/node_input_compiled_audio_value.py +3 -0
- vellum/types/node_input_compiled_document_value.py +3 -0
- vellum/types/node_input_compiled_image_value.py +3 -0
- vellum/types/node_input_compiled_video_value.py +3 -0
- vellum/types/node_output_compiled_thinking_value.py +3 -0
- vellum/types/paginated_slim_integration_auth_config_read_list.py +3 -0
- vellum/types/paginated_slim_integration_read_list.py +3 -0
- vellum/types/paginated_slim_tool_definition_list.py +3 -0
- vellum/types/paginated_workflow_deployment_release_list.py +3 -0
- vellum/types/private_vectorizer.py +3 -0
- vellum/types/private_vectorizer_request.py +3 -0
- vellum/types/prompt_request_audio_input.py +3 -0
- vellum/types/prompt_request_document_input.py +3 -0
- vellum/types/prompt_request_image_input.py +3 -0
- vellum/types/prompt_request_video_input.py +3 -0
- vellum/types/scenario_input_audio_variable_value.py +3 -0
- vellum/types/scenario_input_document_variable_value.py +3 -0
- vellum/types/scenario_input_image_variable_value.py +3 -0
- vellum/types/scenario_input_video_variable_value.py +3 -0
- vellum/types/scheduled_trigger_context.py +3 -0
- vellum/types/slim_composio_tool_definition.py +3 -0
- vellum/types/slim_integration_auth_config_read.py +3 -0
- vellum/types/slim_integration_read.py +3 -0
- vellum/types/test_case_audio_variable_value.py +3 -0
- vellum/types/test_case_document_variable_value.py +3 -0
- vellum/types/test_case_image_variable_value.py +3 -0
- vellum/types/test_case_video_variable_value.py +3 -0
- vellum/types/thinking_vellum_value.py +3 -0
- vellum/types/thinking_vellum_value_request.py +3 -0
- vellum/types/update_active_workspace_response.py +3 -0
- vellum/types/uploaded_file_read.py +3 -0
- vellum/types/vellum_video.py +3 -0
- vellum/types/vellum_video_request.py +3 -0
- vellum/types/video_chat_message_content.py +3 -0
- vellum/types/video_chat_message_content_request.py +3 -0
- vellum/types/video_input.py +3 -0
- vellum/types/video_input_request.py +3 -0
- vellum/types/video_prompt_block.py +3 -0
- vellum/types/video_vellum_value.py +3 -0
- vellum/types/video_vellum_value_request.py +3 -0
- vellum/types/workflow_deployment_display_data.py +3 -0
- vellum/types/workflow_display_icon.py +3 -0
- vellum/types/workflow_event.py +3 -0
- vellum/types/workflow_execution_detail.py +3 -0
- vellum/types/workflow_execution_usage_calculation_fulfilled_body.py +3 -0
- vellum/types/workflow_input.py +3 -0
- vellum/types/workflow_output_audio.py +3 -0
- vellum/types/workflow_output_document.py +3 -0
- vellum/types/workflow_output_video.py +3 -0
- vellum/types/workflow_request_audio_input_request.py +3 -0
- vellum/types/workflow_request_document_input_request.py +3 -0
- vellum/types/workflow_request_image_input_request.py +3 -0
- vellum/types/workflow_request_video_input_request.py +3 -0
- vellum/types/workflow_resolved_state.py +3 -0
- vellum/types/workflow_result_event_state.py +3 -0
- vellum/types/workflow_sandbox_display_data.py +3 -0
- vellum/types/workspace_display_config.py +3 -0
- vellum/utils/files/__init__.py +18 -0
- vellum/utils/files/constants.py +47 -0
- vellum/utils/files/exceptions.py +25 -0
- vellum/utils/files/extensions.py +59 -0
- vellum/utils/files/mixin.py +109 -0
- vellum/utils/files/read.py +41 -0
- vellum/utils/files/stream.py +135 -0
- vellum/utils/files/tests/__init__.py +0 -0
- vellum/utils/files/tests/test_extensions.py +54 -0
- vellum/utils/files/tests/test_mixin.py +205 -0
- vellum/utils/files/tests/test_read.py +204 -0
- vellum/utils/files/tests/test_stream.py +199 -0
- vellum/utils/files/tests/test_upload.py +309 -0
- vellum/utils/files/tests/test_urls.py +252 -0
- vellum/utils/files/types.py +8 -0
- vellum/utils/files/upload.py +151 -0
- vellum/utils/files/urls.py +71 -0
- vellum/utils/json_encoder.py +95 -0
- vellum/utils/templating/custom_filters.py +4 -4
- vellum/utils/templating/render.py +4 -4
- vellum/utils/tests/__init__.py +0 -0
- vellum/utils/tests/test_json_encoder.py +92 -0
- vellum/utils/vellum_client.py +40 -0
- vellum/workflows/__init__.py +78 -0
- vellum/workflows/constants.py +7 -0
- vellum/workflows/context.py +27 -9
- vellum/workflows/descriptors/base.py +83 -2
- vellum/workflows/descriptors/exceptions.py +18 -1
- vellum/workflows/descriptors/tests/test_utils.py +57 -0
- vellum/workflows/descriptors/utils.py +27 -3
- vellum/workflows/edges/__init__.py +2 -0
- vellum/workflows/edges/trigger_edge.py +67 -0
- vellum/workflows/emitters/__init__.py +2 -0
- vellum/workflows/emitters/base.py +25 -0
- vellum/workflows/emitters/vellum_emitter.py +150 -0
- vellum/workflows/environment/__init__.py +2 -1
- vellum/workflows/environment/environment.py +10 -3
- vellum/workflows/errors/types.py +18 -1
- vellum/workflows/events/__init__.py +2 -0
- vellum/workflows/events/context.py +90 -0
- vellum/workflows/events/exception_handling.py +58 -0
- vellum/workflows/events/node.py +27 -11
- vellum/workflows/events/relational_threads.py +41 -0
- vellum/workflows/events/stream.py +28 -0
- vellum/workflows/events/tests/test_basic_workflow.py +50 -0
- vellum/workflows/events/tests/test_event.py +145 -20
- vellum/workflows/events/types.py +32 -4
- vellum/workflows/events/workflow.py +111 -8
- vellum/workflows/exceptions.py +46 -7
- vellum/workflows/executable.py +9 -0
- vellum/workflows/expressions/accessor.py +65 -11
- vellum/workflows/expressions/add.py +41 -0
- vellum/workflows/expressions/comparison_utils.py +38 -0
- vellum/workflows/expressions/concat.py +35 -0
- vellum/workflows/expressions/contains.py +7 -0
- vellum/workflows/expressions/greater_than.py +8 -1
- vellum/workflows/expressions/greater_than_or_equal_to.py +8 -1
- vellum/workflows/expressions/is_error.py +23 -0
- vellum/workflows/expressions/length.py +46 -0
- vellum/workflows/expressions/less_than.py +8 -1
- vellum/workflows/expressions/less_than_or_equal_to.py +8 -1
- vellum/workflows/expressions/minus.py +41 -0
- vellum/workflows/expressions/tests/test_accessor.py +248 -0
- vellum/workflows/expressions/tests/test_add.py +72 -0
- vellum/workflows/expressions/tests/test_concat.py +108 -0
- vellum/workflows/expressions/tests/test_contains.py +175 -0
- vellum/workflows/expressions/tests/test_expressions.py +145 -32
- vellum/workflows/expressions/tests/test_length.py +38 -0
- vellum/workflows/expressions/tests/test_minus.py +109 -0
- vellum/workflows/graph/graph.py +255 -8
- vellum/workflows/graph/tests/test_graph.py +300 -0
- vellum/workflows/inputs/__init__.py +2 -0
- vellum/workflows/inputs/base.py +49 -15
- vellum/workflows/inputs/dataset_row.py +81 -0
- vellum/workflows/inputs/tests/test_inputs.py +181 -1
- vellum/workflows/integrations/__init__.py +5 -0
- vellum/workflows/integrations/composio_service.py +158 -0
- vellum/workflows/integrations/mcp_service.py +282 -0
- vellum/workflows/integrations/tests/__init__.py +0 -0
- vellum/workflows/integrations/tests/test_mcp_service.py +273 -0
- vellum/workflows/integrations/tests/test_vellum_integration_service.py +299 -0
- vellum/workflows/integrations/vellum_integration_service.py +136 -0
- vellum/workflows/loaders/__init__.py +3 -0
- vellum/workflows/loaders/base.py +36 -0
- vellum/workflows/nodes/__init__.py +2 -0
- vellum/workflows/nodes/bases/base.py +142 -80
- vellum/workflows/nodes/bases/base_adornment_node.py +55 -1
- vellum/workflows/nodes/bases/tests/test_base_node.py +50 -4
- vellum/workflows/nodes/core/error_node/node.py +11 -2
- vellum/workflows/nodes/core/inline_subworkflow_node/node.py +29 -3
- vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py +35 -0
- vellum/workflows/nodes/core/map_node/node.py +26 -1
- vellum/workflows/nodes/core/map_node/tests/test_node.py +73 -0
- vellum/workflows/nodes/core/retry_node/tests/test_node.py +2 -3
- vellum/workflows/nodes/core/templating_node/node.py +7 -2
- vellum/workflows/nodes/core/templating_node/tests/test_templating_node.py +194 -1
- vellum/workflows/nodes/displayable/__init__.py +6 -0
- vellum/workflows/nodes/displayable/api_node/node.py +10 -1
- vellum/workflows/nodes/displayable/api_node/tests/test_api_node.py +113 -2
- vellum/workflows/nodes/displayable/bases/api_node/node.py +70 -16
- vellum/workflows/nodes/displayable/bases/api_node/tests/__init__.py +0 -0
- vellum/workflows/nodes/displayable/bases/api_node/tests/test_node.py +150 -0
- vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py +68 -7
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py +215 -17
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/test_inline_prompt_node.py +352 -32
- vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py +73 -1
- vellum/workflows/nodes/displayable/bases/search_node.py +26 -3
- vellum/workflows/nodes/displayable/bases/tests/test_prompt_deployment_node.py +90 -0
- vellum/workflows/nodes/displayable/bases/utils.py +82 -5
- vellum/workflows/nodes/displayable/code_execution_node/node.py +35 -9
- vellum/workflows/nodes/displayable/code_execution_node/tests/test_node.py +242 -13
- vellum/workflows/nodes/displayable/code_execution_node/utils.py +5 -21
- vellum/workflows/nodes/displayable/conditional_node/node.py +8 -4
- vellum/workflows/nodes/displayable/final_output_node/node.py +80 -1
- vellum/workflows/nodes/displayable/final_output_node/tests/test_node.py +96 -1
- vellum/workflows/nodes/displayable/guardrail_node/node.py +13 -4
- vellum/workflows/nodes/displayable/inline_prompt_node/node.py +9 -36
- vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py +3 -0
- vellum/workflows/nodes/displayable/merge_node/node.py +8 -1
- vellum/workflows/nodes/displayable/note_node/node.py +8 -1
- vellum/workflows/nodes/displayable/prompt_deployment_node/node.py +7 -23
- vellum/workflows/nodes/displayable/search_node/node.py +15 -2
- vellum/workflows/nodes/displayable/search_node/tests/test_node.py +33 -0
- vellum/workflows/nodes/displayable/set_state_node/__init__.py +5 -0
- vellum/workflows/nodes/displayable/set_state_node/node.py +71 -0
- vellum/workflows/nodes/displayable/set_state_node/tests/__init__.py +0 -0
- vellum/workflows/nodes/displayable/set_state_node/tests/test_node.py +212 -0
- vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py +220 -59
- vellum/workflows/nodes/displayable/subworkflow_deployment_node/tests/test_node.py +1 -1
- vellum/workflows/nodes/displayable/tests/test_inline_text_prompt_node.py +4 -1
- vellum/workflows/nodes/displayable/tests/test_search_node_error_handling.py +329 -0
- vellum/workflows/nodes/displayable/tests/test_text_prompt_deployment_node.py +10 -15
- vellum/workflows/nodes/displayable/tool_calling_node/__init__.py +3 -0
- vellum/workflows/nodes/displayable/tool_calling_node/node.py +225 -0
- vellum/workflows/nodes/displayable/tool_calling_node/state.py +11 -0
- vellum/workflows/nodes/displayable/tool_calling_node/tests/__init__.py +0 -0
- vellum/workflows/nodes/displayable/tool_calling_node/tests/test_composio_service.py +219 -0
- vellum/workflows/nodes/displayable/tool_calling_node/tests/test_node.py +802 -0
- vellum/workflows/nodes/displayable/tool_calling_node/tests/test_utils.py +316 -0
- vellum/workflows/nodes/displayable/tool_calling_node/utils.py +633 -0
- vellum/workflows/nodes/displayable/web_search_node/__init__.py +3 -0
- vellum/workflows/nodes/displayable/web_search_node/node.py +136 -0
- vellum/workflows/nodes/displayable/web_search_node/tests/__init__.py +0 -0
- vellum/workflows/nodes/displayable/web_search_node/tests/test_node.py +246 -0
- vellum/workflows/nodes/experimental/__init__.py +1 -3
- vellum/workflows/nodes/mocks.py +40 -9
- vellum/workflows/nodes/tests/test_mocks.py +2 -2
- vellum/workflows/nodes/tests/test_utils.py +34 -5
- vellum/workflows/nodes/utils.py +45 -6
- vellum/workflows/outputs/base.py +53 -12
- vellum/workflows/ports/node_ports.py +3 -0
- vellum/workflows/ports/port.py +27 -12
- vellum/workflows/ports/tests/test_port.py +45 -0
- vellum/workflows/ports/utils.py +26 -6
- vellum/workflows/references/__init__.py +2 -0
- vellum/workflows/references/constant.py +4 -1
- vellum/workflows/references/environment_variable.py +27 -9
- vellum/workflows/references/output.py +4 -6
- vellum/workflows/references/trigger.py +77 -0
- vellum/workflows/resolvers/base.py +19 -1
- vellum/workflows/resolvers/resolver.py +71 -0
- vellum/workflows/resolvers/tests/test_resolver.py +168 -0
- vellum/workflows/resolvers/types.py +11 -0
- vellum/workflows/runner/runner.py +642 -160
- vellum/workflows/sandbox.py +55 -9
- vellum/workflows/state/base.py +164 -40
- vellum/workflows/state/context.py +225 -6
- vellum/workflows/state/delta.py +20 -0
- vellum/workflows/state/encoder.py +2 -77
- vellum/workflows/state/tests/test_state.py +24 -9
- vellum/workflows/tests/test_dataset_row.py +190 -0
- vellum/workflows/tests/test_sandbox.py +137 -0
- vellum/workflows/tests/triggers/test_integration_trigger.py +156 -0
- vellum/workflows/triggers/__init__.py +6 -0
- vellum/workflows/triggers/base.py +391 -0
- vellum/workflows/triggers/integration.py +186 -0
- vellum/workflows/triggers/manual.py +37 -0
- vellum/workflows/triggers/schedule.py +18 -0
- vellum/workflows/triggers/tests/__init__.py +1 -0
- vellum/workflows/triggers/tests/test_base_trigger_display.py +147 -0
- vellum/workflows/triggers/tests/test_integration.py +155 -0
- vellum/workflows/types/__init__.py +2 -1
- vellum/workflows/types/code_execution_node_wrappers.py +5 -1
- vellum/workflows/types/core.py +5 -0
- vellum/workflows/types/definition.py +168 -2
- vellum/workflows/types/generics.py +5 -0
- vellum/workflows/types/tests/test_definition.py +183 -0
- vellum/workflows/types/tests/test_utils.py +11 -0
- vellum/workflows/types/utils.py +33 -3
- vellum/workflows/utils/files.py +28 -0
- vellum/workflows/utils/functions.py +244 -19
- vellum/workflows/utils/hmac.py +44 -0
- vellum/workflows/utils/names.py +32 -4
- vellum/workflows/utils/pydantic_schema.py +38 -0
- vellum/workflows/utils/tests/test_functions.py +357 -15
- vellum/workflows/utils/tests/test_names.py +9 -0
- vellum/workflows/utils/tests/test_vellum_variables.py +32 -2
- vellum/workflows/utils/uuids.py +35 -0
- vellum/workflows/utils/vellum_variables.py +131 -7
- vellum/workflows/utils/zip.py +46 -0
- vellum/workflows/vellum_client.py +3 -33
- vellum/workflows/workflows/base.py +350 -39
- vellum/workflows/workflows/event_filters.py +13 -0
- vellum/workflows/workflows/tests/test_base_workflow.py +118 -6
- vellum/workflows/workflows/tests/test_event_filters.py +126 -0
- {vellum_ai-0.14.63.dist-info → vellum_ai-1.11.2.dist-info}/METADATA +12 -13
- vellum_ai-1.11.2.dist-info/RECORD +2177 -0
- vellum_ai-1.11.2.dist-info/entry_points.txt +4 -0
- vellum_cli/__init__.py +34 -4
- vellum_cli/config.py +5 -3
- vellum_cli/image_push.py +106 -8
- vellum_cli/move.py +56 -0
- vellum_cli/ping.py +6 -0
- vellum_cli/pull.py +48 -14
- vellum_cli/push.py +103 -26
- vellum_cli/tests/conftest.py +6 -0
- vellum_cli/tests/test_image_push.py +190 -12
- vellum_cli/tests/test_image_push_error_handling.py +258 -0
- vellum_cli/tests/test_init.py +7 -24
- vellum_cli/tests/test_move.py +154 -0
- vellum_cli/tests/test_ping.py +15 -0
- vellum_cli/tests/test_pull.py +42 -61
- vellum_cli/tests/test_push.py +443 -11
- vellum_ee/assets/node-definitions.json +1135 -0
- vellum_ee/scripts/generate_node_definitions.py +89 -0
- vellum_ee/workflows/display/base.py +29 -55
- vellum_ee/workflows/display/editor/types.py +3 -0
- vellum_ee/workflows/display/exceptions.py +3 -0
- vellum_ee/workflows/display/nodes/base_node_display.py +164 -56
- vellum_ee/workflows/display/nodes/tests/test_base_node_display.py +149 -3
- vellum_ee/workflows/display/nodes/vellum/__init__.py +2 -0
- vellum_ee/workflows/display/nodes/vellum/api_node.py +26 -13
- vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py +3 -3
- vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +23 -7
- vellum_ee/workflows/display/nodes/vellum/conditional_node.py +18 -7
- vellum_ee/workflows/display/nodes/vellum/error_node.py +2 -4
- vellum_ee/workflows/display/nodes/vellum/final_output_node.py +3 -14
- vellum_ee/workflows/display/nodes/vellum/function_node.py +14 -0
- vellum_ee/workflows/display/nodes/vellum/guardrail_node.py +2 -5
- vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py +77 -44
- vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py +33 -10
- vellum_ee/workflows/display/nodes/vellum/map_node.py +29 -15
- vellum_ee/workflows/display/nodes/vellum/merge_node.py +2 -5
- vellum_ee/workflows/display/nodes/vellum/note_node.py +2 -3
- vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py +13 -9
- vellum_ee/workflows/display/nodes/vellum/retry_node.py +5 -6
- vellum_ee/workflows/display/nodes/vellum/search_node.py +76 -19
- vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py +21 -10
- vellum_ee/workflows/display/nodes/vellum/templating_node.py +3 -6
- vellum_ee/workflows/display/nodes/vellum/tests/test_api_node.py +65 -0
- vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py +176 -3
- vellum_ee/workflows/display/nodes/vellum/tests/test_final_output_node.py +80 -0
- vellum_ee/workflows/display/nodes/vellum/tests/test_inline_subworkflow_node.py +88 -0
- vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_deployment_node.py +71 -1
- vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py +115 -13
- vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py +1 -1
- vellum_ee/workflows/display/nodes/vellum/tests/test_search_node.py +104 -0
- vellum_ee/workflows/display/nodes/vellum/tests/test_subworkflow_deployment_node.py +1 -1
- vellum_ee/workflows/display/nodes/vellum/tests/test_templating_node.py +2 -2
- vellum_ee/workflows/display/nodes/vellum/tests/test_tool_calling_node.py +526 -49
- vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py +2 -2
- vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py +8 -9
- vellum_ee/workflows/display/nodes/vellum/try_node.py +5 -6
- vellum_ee/workflows/display/tests/test_base_workflow_display.py +383 -9
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py +2 -2
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py +102 -39
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +233 -90
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py +21 -17
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py +76 -64
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py +69 -12
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py +68 -46
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py +92 -80
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py +193 -177
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py +14 -14
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py +14 -9
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py +28 -17
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py +20 -16
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py +386 -31
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py +59 -46
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +41 -32
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py +37 -33
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py +73 -61
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py +40 -36
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_set_state_node_serialization.py +86 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py +25 -21
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py +22 -18
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py +13 -8
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_composio_serialization.py +87 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py +313 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_mcp_serialization.py +65 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_parent_input.py +89 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py +57 -23
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_vellum_integration_serialization.py +68 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_workflow_deployment_serialization.py +107 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py +2 -2
- vellum_ee/workflows/display/tests/workflow_serialization/test_chat_message_dict_reference_serialization.py +108 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py +15 -10
- vellum_ee/workflows/display/tests/workflow_serialization/test_final_output_node_map_reference_serialization.py +88 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_integration_trigger_serialization.py +306 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_integration_trigger_with_entrypoint_node_id.py +88 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_list_vellum_document_serialization.py +65 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_manual_trigger_serialization.py +110 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_map_node_with_terminal_nodes_serialization.py +62 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_multi_trigger_same_node_serialization.py +99 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_scheduled_trigger_serialization.py +267 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_terminal_node_any_serialization.py +49 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_trigger_display_from_display_class.py +153 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_web_search_node_serialization.py +72 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_workflow_input_parameterization_error.py +37 -0
- vellum_ee/workflows/display/types.py +29 -2
- vellum_ee/workflows/display/utils/auto_layout.py +130 -0
- vellum_ee/workflows/display/utils/events.py +57 -0
- vellum_ee/workflows/display/utils/exceptions.py +19 -0
- vellum_ee/workflows/display/utils/expressions.py +231 -28
- vellum_ee/workflows/display/utils/metadata.py +146 -0
- vellum_ee/workflows/display/utils/registry.py +46 -0
- vellum_ee/workflows/display/utils/tests/__init__.py +0 -0
- vellum_ee/workflows/display/utils/tests/test_auto_layout.py +56 -0
- vellum_ee/workflows/display/utils/tests/test_events.py +185 -0
- vellum_ee/workflows/display/utils/tests/test_expressions.py +92 -0
- vellum_ee/workflows/display/utils/vellum.py +39 -4
- vellum_ee/workflows/display/vellum.py +2 -128
- vellum_ee/workflows/display/workflows/__init__.py +0 -1
- vellum_ee/workflows/display/workflows/base_workflow_display.py +727 -95
- vellum_ee/workflows/display/workflows/tests/test_workflow_display.py +318 -28
- vellum_ee/workflows/server/virtual_file_loader.py +131 -6
- vellum_ee/workflows/tests/local_workflow/display/nodes/final_output.py +1 -1
- vellum_ee/workflows/tests/local_workflow/display/nodes/templating_node.py +1 -1
- vellum_ee/workflows/tests/local_workflow/display/workflow.py +11 -14
- vellum_ee/workflows/tests/test_display_meta.py +41 -0
- vellum_ee/workflows/tests/test_registry.py +169 -0
- vellum_ee/workflows/tests/test_serialize_module.py +265 -0
- vellum_ee/workflows/tests/test_server.py +619 -44
- vellum_ee/workflows/tests/test_virtual_files.py +48 -0
- vellum/client/resources/release_reviews/client.py +0 -137
- vellum/workflows/nodes/experimental/openai_chat_completion_node/__init__.py +0 -5
- vellum/workflows/nodes/experimental/openai_chat_completion_node/node.py +0 -266
- vellum/workflows/nodes/experimental/tool_calling_node/__init__.py +0 -3
- vellum/workflows/nodes/experimental/tool_calling_node/node.py +0 -135
- vellum/workflows/nodes/experimental/tool_calling_node/tests/test_node.py +0 -53
- vellum/workflows/nodes/experimental/tool_calling_node/utils.py +0 -259
- vellum_ai-0.14.63.dist-info/RECORD +0 -1719
- vellum_ai-0.14.63.dist-info/entry_points.txt +0 -3
- vellum_ee/workflows/display/workflows/vellum_workflow_display.py +0 -9
- /vellum/{workflows/nodes/displayable/bases/inline_prompt_node → prompts}/constants.py +0 -0
- {vellum_ai-0.14.63.dist-info → vellum_ai-1.11.2.dist-info}/LICENSE +0 -0
- {vellum_ai-0.14.63.dist-info → vellum_ai-1.11.2.dist-info}/WHEEL +0 -0
|
@@ -1,16 +1,41 @@
|
|
|
1
|
+
import pytest
|
|
1
2
|
import sys
|
|
2
|
-
from uuid import uuid4
|
|
3
|
+
from uuid import UUID, uuid4
|
|
3
4
|
from typing import Type, cast
|
|
4
5
|
|
|
5
6
|
from vellum.client.core.pydantic_utilities import UniversalBaseModel
|
|
6
7
|
from vellum.client.types.code_executor_response import CodeExecutorResponse
|
|
7
8
|
from vellum.client.types.number_vellum_value import NumberVellumValue
|
|
8
9
|
from vellum.workflows import BaseWorkflow
|
|
10
|
+
from vellum.workflows.events.workflow import WorkflowExecutionInitiatedBody
|
|
11
|
+
from vellum.workflows.exceptions import WorkflowInitializationException
|
|
9
12
|
from vellum.workflows.nodes import BaseNode
|
|
10
13
|
from vellum.workflows.state.context import WorkflowContext
|
|
14
|
+
from vellum.workflows.utils.uuids import generate_workflow_deployment_prefix
|
|
15
|
+
from vellum.workflows.utils.zip import zip_file_map
|
|
16
|
+
from vellum_ee.workflows.display.utils.events import event_enricher
|
|
17
|
+
from vellum_ee.workflows.display.workflows.base_workflow_display import BaseWorkflowDisplay
|
|
11
18
|
from vellum_ee.workflows.server.virtual_file_loader import VirtualFileFinder
|
|
12
19
|
|
|
13
20
|
|
|
21
|
+
@pytest.fixture
|
|
22
|
+
def virtual_file_loader():
|
|
23
|
+
"""Fixture to manage VirtualFileFinder registration and cleanup."""
|
|
24
|
+
finders = []
|
|
25
|
+
|
|
26
|
+
def _register(files, namespace, source_module=None):
|
|
27
|
+
finder = VirtualFileFinder(files, namespace, source_module=source_module)
|
|
28
|
+
sys.meta_path.append(finder)
|
|
29
|
+
finders.append(finder)
|
|
30
|
+
return finder
|
|
31
|
+
|
|
32
|
+
yield _register
|
|
33
|
+
|
|
34
|
+
for finder in reversed(finders):
|
|
35
|
+
if finder in sys.meta_path:
|
|
36
|
+
sys.meta_path.remove(finder)
|
|
37
|
+
|
|
38
|
+
|
|
14
39
|
def test_load_workflow_event_display_context():
|
|
15
40
|
from vellum.workflows.events.workflow import WorkflowEventDisplayContext
|
|
16
41
|
|
|
@@ -22,20 +47,12 @@ def test_load_workflow_event_display_context():
|
|
|
22
47
|
def test_load_from_module__lazy_reference_in_file_loader():
|
|
23
48
|
# GIVEN a workflow module with a node containing a lazy reference
|
|
24
49
|
files = {
|
|
25
|
-
"__init__.py": "",
|
|
26
50
|
"workflow.py": """\
|
|
27
51
|
from vellum.workflows import BaseWorkflow
|
|
28
52
|
from .nodes.start_node import StartNode
|
|
29
53
|
|
|
30
54
|
class Workflow(BaseWorkflow):
|
|
31
55
|
graph = StartNode
|
|
32
|
-
""",
|
|
33
|
-
"nodes/__init__.py": """\
|
|
34
|
-
from .start_node import StartNode
|
|
35
|
-
|
|
36
|
-
__all__ = [
|
|
37
|
-
"StartNode",
|
|
38
|
-
]
|
|
39
56
|
""",
|
|
40
57
|
"nodes/start_node.py": """\
|
|
41
58
|
from vellum.workflows.nodes import BaseNode
|
|
@@ -93,11 +110,6 @@ class Workflow(BaseWorkflow):
|
|
|
93
110
|
|
|
94
111
|
class Outputs(BaseWorkflow.Outputs):
|
|
95
112
|
final_output = CodeExecutionNode.Outputs.result
|
|
96
|
-
""",
|
|
97
|
-
"nodes/__init__.py": """
|
|
98
|
-
from .code_execution_node import CodeExecutionNode
|
|
99
|
-
|
|
100
|
-
__all__ = ["CodeExecutionNode"]
|
|
101
113
|
""",
|
|
102
114
|
"nodes/code_execution_node/__init__.py": """
|
|
103
115
|
from typing import Any
|
|
@@ -140,6 +152,11 @@ class CodeExecutionNode(BaseCodeExecutionNode[BaseState, int]):
|
|
|
140
152
|
# AND we get the code execution result
|
|
141
153
|
assert event.body.outputs == {"final_output": 5.0}
|
|
142
154
|
|
|
155
|
+
# AND the workflow definition module is correctly serialized as a list
|
|
156
|
+
serialized_event = event.model_dump(mode="json")
|
|
157
|
+
workflow_definition = serialized_event["body"]["workflow_definition"]
|
|
158
|
+
assert workflow_definition["module"] == [namespace, "workflow"]
|
|
159
|
+
|
|
143
160
|
|
|
144
161
|
def test_load_from_module__simple_code_execution_node_with_try(
|
|
145
162
|
vellum_client,
|
|
@@ -164,11 +181,6 @@ class Workflow(BaseWorkflow):
|
|
|
164
181
|
|
|
165
182
|
class Outputs(BaseWorkflow.Outputs):
|
|
166
183
|
final_output = CodeExecutionNode.Outputs.result
|
|
167
|
-
""",
|
|
168
|
-
"nodes/__init__.py": """
|
|
169
|
-
from .code_execution_node import CodeExecutionNode
|
|
170
|
-
|
|
171
|
-
__all__ = ["CodeExecutionNode"]
|
|
172
184
|
""",
|
|
173
185
|
"nodes/code_execution_node/__init__.py": """
|
|
174
186
|
from typing import Union
|
|
@@ -240,11 +252,6 @@ class Workflow(BaseWorkflow):
|
|
|
240
252
|
|
|
241
253
|
class Outputs(BaseWorkflow.Outputs):
|
|
242
254
|
final_output = CodeExecutionNode.Outputs.result
|
|
243
|
-
""",
|
|
244
|
-
"nodes/__init__.py": """
|
|
245
|
-
from .code_execution_node import CodeExecutionNode
|
|
246
|
-
|
|
247
|
-
__all__ = ["CodeExecutionNode"]
|
|
248
255
|
""",
|
|
249
256
|
"nodes/code_execution_node/__init__.py": """
|
|
250
257
|
from typing import Union
|
|
@@ -316,11 +323,6 @@ class Workflow(BaseWorkflow):
|
|
|
316
323
|
|
|
317
324
|
class Outputs(BaseWorkflow.Outputs):
|
|
318
325
|
final_output = Subworkflow.Outputs.result
|
|
319
|
-
""",
|
|
320
|
-
"nodes/__init__.py": """
|
|
321
|
-
from .subworkflow import Subworkflow
|
|
322
|
-
|
|
323
|
-
__all__ = ["Subworkflow"]
|
|
324
326
|
""",
|
|
325
327
|
"nodes/subworkflow/__init__.py": """
|
|
326
328
|
from vellum.workflows.nodes.displayable import InlineSubworkflowNode
|
|
@@ -329,11 +331,6 @@ from .workflow import SubworkflowWorkflow
|
|
|
329
331
|
|
|
330
332
|
class Subworkflow(InlineSubworkflowNode):
|
|
331
333
|
subworkflow = SubworkflowWorkflow
|
|
332
|
-
""",
|
|
333
|
-
"nodes/subworkflow/nodes/__init__.py": """
|
|
334
|
-
from .code_execution_node import CodeExecutionNode
|
|
335
|
-
|
|
336
|
-
__all__ = ["CodeExecutionNode"]
|
|
337
334
|
""",
|
|
338
335
|
"nodes/subworkflow/nodes/code_execution_node/__init__.py": """
|
|
339
336
|
from typing import Union
|
|
@@ -414,11 +411,6 @@ class Workflow(BaseWorkflow):
|
|
|
414
411
|
|
|
415
412
|
class Outputs(BaseWorkflow.Outputs): # noqa: W293
|
|
416
413
|
results = MapNode.Outputs.final_output
|
|
417
|
-
""",
|
|
418
|
-
"nodes/__init__.py": """
|
|
419
|
-
from .map_node import MapNode
|
|
420
|
-
|
|
421
|
-
__all__ = ["MapNode"]
|
|
422
414
|
""",
|
|
423
415
|
"nodes/map_node/__init__.py": """
|
|
424
416
|
from vellum.workflows.nodes.core.map_node import MapNode as BaseMapNode
|
|
@@ -429,11 +421,6 @@ class MapNode(BaseMapNode):
|
|
|
429
421
|
items = ["foo", "bar", "baz"]
|
|
430
422
|
subworkflow = MapNodeWorkflow
|
|
431
423
|
max_concurrency = 4
|
|
432
|
-
""",
|
|
433
|
-
"nodes/map_node/nodes/__init__.py": """
|
|
434
|
-
from .code_execution_node import CodeExecutionNode
|
|
435
|
-
|
|
436
|
-
__all__ = ["CodeExecutionNode"]
|
|
437
424
|
""",
|
|
438
425
|
"nodes/map_node/nodes/code_execution_node/__init__.py": """
|
|
439
426
|
from typing import Union
|
|
@@ -494,3 +481,591 @@ class MapNodeWorkflow(BaseWorkflow):
|
|
|
494
481
|
|
|
495
482
|
# AND we get the map node results as a list
|
|
496
483
|
assert event.body.outputs == {"results": [1.0, 1.0, 1.0]}
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
def test_load_from_module__syntax_error_in_node_file():
|
|
487
|
+
"""
|
|
488
|
+
Tests that a syntax error in a node file raises WorkflowInitializationException with user-facing message.
|
|
489
|
+
"""
|
|
490
|
+
# GIVEN a workflow module with a node file containing a syntax error (missing colon)
|
|
491
|
+
files = {
|
|
492
|
+
"__init__.py": "",
|
|
493
|
+
"workflow.py": """\
|
|
494
|
+
from vellum.workflows import BaseWorkflow
|
|
495
|
+
from .nodes.broken_node import BrokenNode
|
|
496
|
+
|
|
497
|
+
class Workflow(BaseWorkflow):
|
|
498
|
+
graph = BrokenNode
|
|
499
|
+
""",
|
|
500
|
+
"nodes/broken_node.py": """\
|
|
501
|
+
from vellum.workflows.nodes import BaseNode
|
|
502
|
+
|
|
503
|
+
class BrokenNode(BaseNode) # Missing colon
|
|
504
|
+
\"\"\"This node has a syntax error.\"\"\"
|
|
505
|
+
""",
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
namespace = str(uuid4())
|
|
509
|
+
|
|
510
|
+
# AND the virtual file loader is registered
|
|
511
|
+
sys.meta_path.append(VirtualFileFinder(files, namespace))
|
|
512
|
+
|
|
513
|
+
# WHEN we attempt to load the workflow
|
|
514
|
+
# THEN it should raise WorkflowInitializationException
|
|
515
|
+
with pytest.raises(WorkflowInitializationException) as exc_info:
|
|
516
|
+
BaseWorkflow.load_from_module(namespace)
|
|
517
|
+
|
|
518
|
+
# AND the error message should be user-friendly
|
|
519
|
+
error_message = str(exc_info.value)
|
|
520
|
+
assert "Syntax Error raised while loading Workflow:" in error_message
|
|
521
|
+
assert "invalid syntax" in error_message or "expected ':'" in error_message
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
def test_load_from_module__name_error_in_node_file():
|
|
525
|
+
"""
|
|
526
|
+
Tests that a NameError in a node file raises WorkflowInitializationException with user-facing message.
|
|
527
|
+
"""
|
|
528
|
+
# GIVEN a workflow module with a node file containing a NameError (undefined class reference)
|
|
529
|
+
files = {
|
|
530
|
+
"__init__.py": "",
|
|
531
|
+
"workflow.py": """\
|
|
532
|
+
from vellum.workflows import BaseWorkflow
|
|
533
|
+
from .nodes.broken_node import BrokenNode
|
|
534
|
+
|
|
535
|
+
class Workflow(BaseWorkflow):
|
|
536
|
+
graph = BrokenNode
|
|
537
|
+
""",
|
|
538
|
+
"nodes/broken_node.py": """\
|
|
539
|
+
from vellum.workflows.nodes import BaseNode
|
|
540
|
+
|
|
541
|
+
class BrokenNode(BaseNode):
|
|
542
|
+
some_attribute = UndefinedClass()
|
|
543
|
+
""",
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
namespace = str(uuid4())
|
|
547
|
+
|
|
548
|
+
# AND the virtual file loader is registered
|
|
549
|
+
sys.meta_path.append(VirtualFileFinder(files, namespace))
|
|
550
|
+
|
|
551
|
+
# WHEN we attempt to load the workflow
|
|
552
|
+
# THEN it should raise WorkflowInitializationException
|
|
553
|
+
with pytest.raises(WorkflowInitializationException) as exc_info:
|
|
554
|
+
BaseWorkflow.load_from_module(namespace)
|
|
555
|
+
|
|
556
|
+
# AND the error message should be user-friendly
|
|
557
|
+
error_message = str(exc_info.value)
|
|
558
|
+
assert "Invalid variable reference:" in error_message
|
|
559
|
+
assert "UndefinedClass" in error_message or "not defined" in error_message
|
|
560
|
+
|
|
561
|
+
|
|
562
|
+
def test_load_from_module__module_not_found_error():
|
|
563
|
+
"""
|
|
564
|
+
Tests that a ModuleNotFoundError raises WorkflowInitializationException with user-facing message.
|
|
565
|
+
"""
|
|
566
|
+
# GIVEN a workflow module that imports a non-existent module
|
|
567
|
+
files = {
|
|
568
|
+
"__init__.py": "",
|
|
569
|
+
"workflow.py": """\
|
|
570
|
+
from vellum.workflows import BaseWorkflow
|
|
571
|
+
from .non_existent_module import SomeClass
|
|
572
|
+
|
|
573
|
+
class Workflow(BaseWorkflow):
|
|
574
|
+
graph = None
|
|
575
|
+
""",
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
namespace = str(uuid4())
|
|
579
|
+
|
|
580
|
+
# AND the virtual file loader is registered
|
|
581
|
+
sys.meta_path.append(VirtualFileFinder(files, namespace, source_module="test"))
|
|
582
|
+
|
|
583
|
+
# WHEN we attempt to load the workflow
|
|
584
|
+
# THEN it should raise WorkflowInitializationException
|
|
585
|
+
with pytest.raises(WorkflowInitializationException) as exc_info:
|
|
586
|
+
BaseWorkflow.load_from_module(namespace)
|
|
587
|
+
|
|
588
|
+
# AND the error message should be user-friendly and show source_module instead of namespace
|
|
589
|
+
error_message = str(exc_info.value)
|
|
590
|
+
assert error_message == "Workflow module not found: No module named 'test.non_existent_module'"
|
|
591
|
+
|
|
592
|
+
|
|
593
|
+
def test_load_from_module__module_not_found_error_with_external_package():
|
|
594
|
+
"""
|
|
595
|
+
Tests that when ModuleNotFoundError occurs for an external package (not containing the namespace),
|
|
596
|
+
the exception includes vellum_on_error_action set to CREATE_CUSTOM_IMAGE in raw_data.
|
|
597
|
+
"""
|
|
598
|
+
|
|
599
|
+
# GIVEN a workflow module that imports a non-existent external package
|
|
600
|
+
files = {
|
|
601
|
+
"__init__.py": "",
|
|
602
|
+
"workflow.py": """\
|
|
603
|
+
from vellum.workflows import BaseWorkflow
|
|
604
|
+
import some_external_package
|
|
605
|
+
|
|
606
|
+
class Workflow(BaseWorkflow):
|
|
607
|
+
graph = None
|
|
608
|
+
""",
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
namespace = str(uuid4())
|
|
612
|
+
|
|
613
|
+
# AND the virtual file loader is registered
|
|
614
|
+
finder = VirtualFileFinder(files, namespace, source_module="test")
|
|
615
|
+
sys.meta_path.append(finder)
|
|
616
|
+
|
|
617
|
+
# WHEN we attempt to load the workflow
|
|
618
|
+
# THEN it should raise WorkflowInitializationException
|
|
619
|
+
with pytest.raises(WorkflowInitializationException) as exc_info:
|
|
620
|
+
BaseWorkflow.load_from_module(namespace)
|
|
621
|
+
|
|
622
|
+
# AND the error message should be user-friendly
|
|
623
|
+
error_message = str(exc_info.value)
|
|
624
|
+
assert "Workflow module not found:" in error_message
|
|
625
|
+
assert "some_external_package" in error_message
|
|
626
|
+
|
|
627
|
+
assert exc_info.value.raw_data is not None
|
|
628
|
+
assert exc_info.value.raw_data["vellum_on_error_action"] == "CREATE_CUSTOM_IMAGE"
|
|
629
|
+
|
|
630
|
+
|
|
631
|
+
def test_load_from_module__module_not_found_error_with_internal_package():
|
|
632
|
+
"""
|
|
633
|
+
Tests that when ModuleNotFoundError occurs for an internal module (containing the namespace),
|
|
634
|
+
the exception does NOT include vellum_on_error_action in raw_data.
|
|
635
|
+
"""
|
|
636
|
+
|
|
637
|
+
# GIVEN a workflow module that imports a non-existent internal module
|
|
638
|
+
files = {
|
|
639
|
+
"__init__.py": "",
|
|
640
|
+
"workflow.py": """\
|
|
641
|
+
from vellum.workflows import BaseWorkflow
|
|
642
|
+
from .non_existent_module import SomeClass
|
|
643
|
+
|
|
644
|
+
class Workflow(BaseWorkflow):
|
|
645
|
+
graph = None
|
|
646
|
+
""",
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
namespace = str(uuid4())
|
|
650
|
+
|
|
651
|
+
# AND the virtual file loader is registered
|
|
652
|
+
finder = VirtualFileFinder(files, namespace, source_module="test")
|
|
653
|
+
sys.meta_path.append(finder)
|
|
654
|
+
|
|
655
|
+
# WHEN we attempt to load the workflow
|
|
656
|
+
# THEN it should raise WorkflowInitializationException
|
|
657
|
+
with pytest.raises(WorkflowInitializationException) as exc_info:
|
|
658
|
+
BaseWorkflow.load_from_module(namespace)
|
|
659
|
+
|
|
660
|
+
# AND the error message should be user-friendly
|
|
661
|
+
error_message = str(exc_info.value)
|
|
662
|
+
assert "Workflow module not found:" in error_message
|
|
663
|
+
|
|
664
|
+
assert exc_info.value.raw_data is None
|
|
665
|
+
|
|
666
|
+
|
|
667
|
+
def test_serialize_module__tool_calling_node_with_single_tool():
|
|
668
|
+
"""Test that serialize_module works with a tool calling node that has a single tool."""
|
|
669
|
+
|
|
670
|
+
# GIVEN a simple tool function
|
|
671
|
+
tool_function_code = '''def get_weather(location: str) -> str:
|
|
672
|
+
"""Get the current weather for a location."""
|
|
673
|
+
return f"The weather in {location} is sunny."
|
|
674
|
+
'''
|
|
675
|
+
|
|
676
|
+
# AND a workflow module with a tool calling node using that single tool
|
|
677
|
+
files = {
|
|
678
|
+
"__init__.py": "",
|
|
679
|
+
"workflow.py": """
|
|
680
|
+
from vellum.workflows import BaseWorkflow
|
|
681
|
+
from vellum.workflows.nodes.displayable.tool_calling_node import ToolCallingNode
|
|
682
|
+
from vellum.workflows.state.base import BaseState
|
|
683
|
+
from vellum.workflows.workflows.base import BaseInputs
|
|
684
|
+
from vellum.client.types.chat_message_prompt_block import ChatMessagePromptBlock
|
|
685
|
+
from vellum.client.types.plain_text_prompt_block import PlainTextPromptBlock
|
|
686
|
+
from vellum.client.types.rich_text_prompt_block import RichTextPromptBlock
|
|
687
|
+
from vellum.client.types.variable_prompt_block import VariablePromptBlock
|
|
688
|
+
|
|
689
|
+
from .get_weather import get_weather
|
|
690
|
+
|
|
691
|
+
|
|
692
|
+
class Inputs(BaseInputs):
|
|
693
|
+
location: str
|
|
694
|
+
|
|
695
|
+
|
|
696
|
+
class WeatherNode(ToolCallingNode):
|
|
697
|
+
ml_model = "gpt-4o-mini"
|
|
698
|
+
blocks = [
|
|
699
|
+
ChatMessagePromptBlock(
|
|
700
|
+
chat_role="USER",
|
|
701
|
+
blocks=[
|
|
702
|
+
RichTextPromptBlock(
|
|
703
|
+
blocks=[
|
|
704
|
+
VariablePromptBlock(
|
|
705
|
+
input_variable="location",
|
|
706
|
+
),
|
|
707
|
+
],
|
|
708
|
+
),
|
|
709
|
+
],
|
|
710
|
+
),
|
|
711
|
+
]
|
|
712
|
+
functions = [get_weather]
|
|
713
|
+
prompt_inputs = {
|
|
714
|
+
"location": Inputs.location,
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
|
|
718
|
+
class Workflow(BaseWorkflow[Inputs, BaseState]):
|
|
719
|
+
graph = WeatherNode
|
|
720
|
+
|
|
721
|
+
class Outputs(BaseWorkflow.Outputs):
|
|
722
|
+
result = WeatherNode.Outputs.text
|
|
723
|
+
""",
|
|
724
|
+
"get_weather.py": tool_function_code,
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
namespace = str(uuid4())
|
|
728
|
+
|
|
729
|
+
# AND the virtual file loader is registered
|
|
730
|
+
sys.meta_path.append(VirtualFileFinder(files, namespace))
|
|
731
|
+
|
|
732
|
+
result = BaseWorkflowDisplay.serialize_module(namespace)
|
|
733
|
+
|
|
734
|
+
# THEN the serialization should complete successfully
|
|
735
|
+
assert result is not None
|
|
736
|
+
|
|
737
|
+
|
|
738
|
+
def test_resolve_workflow_deployment__returns_workflow_with_generated_files():
|
|
739
|
+
"""
|
|
740
|
+
Test that resolve_workflow_deployment returns a workflow with artifacts
|
|
741
|
+
in generated_files using the correct prefix format.
|
|
742
|
+
"""
|
|
743
|
+
# GIVEN a deployment name and release tag
|
|
744
|
+
deployment_name = "test_deployment"
|
|
745
|
+
release_tag = "LATEST"
|
|
746
|
+
|
|
747
|
+
expected_prefix = generate_workflow_deployment_prefix(deployment_name, release_tag)
|
|
748
|
+
|
|
749
|
+
# Create a simple test node for the resolved workflow
|
|
750
|
+
test_node_code = """
|
|
751
|
+
from vellum.workflows.nodes.bases.base import BaseNode
|
|
752
|
+
from vellum.workflows.outputs import BaseOutputs
|
|
753
|
+
|
|
754
|
+
class TestNode(BaseNode):
|
|
755
|
+
template = "Hello"
|
|
756
|
+
|
|
757
|
+
class Outputs(BaseOutputs):
|
|
758
|
+
result: str
|
|
759
|
+
|
|
760
|
+
def run(self):
|
|
761
|
+
return self.Outputs(result="Hello, {template}")
|
|
762
|
+
"""
|
|
763
|
+
|
|
764
|
+
mock_workflow_code = """
|
|
765
|
+
from vellum.workflows import BaseWorkflow
|
|
766
|
+
from .nodes.test_node import TestNode
|
|
767
|
+
|
|
768
|
+
class ResolvedWorkflow(BaseWorkflow):
|
|
769
|
+
graph = TestNode
|
|
770
|
+
"""
|
|
771
|
+
|
|
772
|
+
# Create parent workflow files that reference the subworkflow deployment
|
|
773
|
+
parent_workflow_code = """
|
|
774
|
+
from vellum.workflows import BaseWorkflow
|
|
775
|
+
from .nodes.subworkflow_deployment_node import TestSubworkflowDeploymentNode
|
|
776
|
+
|
|
777
|
+
class ParentWorkflow(BaseWorkflow):
|
|
778
|
+
graph = TestSubworkflowDeploymentNode
|
|
779
|
+
"""
|
|
780
|
+
|
|
781
|
+
parent_node_code = """
|
|
782
|
+
from vellum.workflows.nodes import SubworkflowDeploymentNode
|
|
783
|
+
from vellum.workflows.outputs import BaseOutputs
|
|
784
|
+
|
|
785
|
+
class TestSubworkflowDeploymentNode(SubworkflowDeploymentNode):
|
|
786
|
+
deployment = "test_deployment"
|
|
787
|
+
|
|
788
|
+
class Outputs(BaseOutputs):
|
|
789
|
+
result: str
|
|
790
|
+
|
|
791
|
+
subworkflow_inputs = {"message": "test"}
|
|
792
|
+
"""
|
|
793
|
+
|
|
794
|
+
files = {
|
|
795
|
+
"__init__.py": "",
|
|
796
|
+
"workflow.py": parent_workflow_code,
|
|
797
|
+
"nodes/subworkflow_deployment_node.py": parent_node_code,
|
|
798
|
+
f"{expected_prefix}/__init__.py": "",
|
|
799
|
+
f"{expected_prefix}/workflow.py": mock_workflow_code,
|
|
800
|
+
f"{expected_prefix}/nodes/test_node.py": test_node_code,
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
namespace = str(uuid4())
|
|
804
|
+
|
|
805
|
+
# AND the virtual file loader is registered
|
|
806
|
+
finder = VirtualFileFinder(files, namespace)
|
|
807
|
+
sys.meta_path.append(finder)
|
|
808
|
+
|
|
809
|
+
# WHEN we execute the root workflow
|
|
810
|
+
Workflow = BaseWorkflow.load_from_module(namespace)
|
|
811
|
+
workflow = Workflow(context=WorkflowContext(generated_files=files, namespace=namespace))
|
|
812
|
+
|
|
813
|
+
# THEN the workflow should be successfully initialized
|
|
814
|
+
assert workflow
|
|
815
|
+
|
|
816
|
+
event = workflow.run()
|
|
817
|
+
|
|
818
|
+
# AND the method should return a workflow (not None) - this will pass once implemented
|
|
819
|
+
assert event.name == "workflow.execution.fulfilled"
|
|
820
|
+
|
|
821
|
+
|
|
822
|
+
def test_resolve_workflow_deployment__uses_pull_api_with_inputs_deployment_name(vellum_client):
|
|
823
|
+
"""
|
|
824
|
+
Test that resolve_workflow_deployment uses the pull API to fetch subworkflow files
|
|
825
|
+
when the deployment name comes from Inputs.deployment_name.
|
|
826
|
+
"""
|
|
827
|
+
# GIVEN a deployment name and release tag
|
|
828
|
+
deployment_name = "test_deployment"
|
|
829
|
+
release_tag = "LATEST"
|
|
830
|
+
|
|
831
|
+
test_node_code = """
|
|
832
|
+
from vellum.workflows.nodes.bases.base import BaseNode
|
|
833
|
+
from vellum.workflows.outputs import BaseOutputs
|
|
834
|
+
|
|
835
|
+
class TestNode(BaseNode):
|
|
836
|
+
template = "Hello"
|
|
837
|
+
|
|
838
|
+
class Outputs(BaseOutputs):
|
|
839
|
+
result: str
|
|
840
|
+
|
|
841
|
+
def run(self):
|
|
842
|
+
return self.Outputs(result="Hello, {template}")
|
|
843
|
+
"""
|
|
844
|
+
|
|
845
|
+
mock_workflow_code = """
|
|
846
|
+
from vellum.workflows import BaseWorkflow
|
|
847
|
+
from .nodes.test_node import TestNode
|
|
848
|
+
|
|
849
|
+
class ResolvedWorkflow(BaseWorkflow):
|
|
850
|
+
graph = TestNode
|
|
851
|
+
"""
|
|
852
|
+
|
|
853
|
+
inputs_code = """
|
|
854
|
+
from vellum.workflows.inputs import BaseInputs
|
|
855
|
+
|
|
856
|
+
class Inputs(BaseInputs):
|
|
857
|
+
deployment_name: str
|
|
858
|
+
"""
|
|
859
|
+
|
|
860
|
+
parent_workflow_code = """
|
|
861
|
+
from vellum.workflows import BaseWorkflow
|
|
862
|
+
from .inputs import Inputs
|
|
863
|
+
from .nodes.subworkflow_deployment_node import TestSubworkflowDeploymentNode
|
|
864
|
+
from vellum.workflows.state import BaseState
|
|
865
|
+
|
|
866
|
+
class ParentWorkflow(BaseWorkflow[Inputs, BaseState]):
|
|
867
|
+
graph = TestSubworkflowDeploymentNode
|
|
868
|
+
"""
|
|
869
|
+
|
|
870
|
+
parent_node_code = """
|
|
871
|
+
from vellum.workflows.nodes import SubworkflowDeploymentNode
|
|
872
|
+
from vellum.workflows.outputs import BaseOutputs
|
|
873
|
+
from ..inputs import Inputs
|
|
874
|
+
|
|
875
|
+
class TestSubworkflowDeploymentNode(SubworkflowDeploymentNode):
|
|
876
|
+
deployment = Inputs.deployment_name
|
|
877
|
+
|
|
878
|
+
class Outputs(BaseOutputs):
|
|
879
|
+
result: str
|
|
880
|
+
|
|
881
|
+
subworkflow_inputs = {"message": "test"}
|
|
882
|
+
"""
|
|
883
|
+
|
|
884
|
+
subworkflow_files = {
|
|
885
|
+
"__init__.py": "",
|
|
886
|
+
"workflow.py": mock_workflow_code,
|
|
887
|
+
"nodes/test_node.py": test_node_code,
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
parent_files = {
|
|
891
|
+
"__init__.py": "",
|
|
892
|
+
"inputs.py": inputs_code,
|
|
893
|
+
"workflow.py": parent_workflow_code,
|
|
894
|
+
"nodes/subworkflow_deployment_node.py": parent_node_code,
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
namespace = str(uuid4())
|
|
898
|
+
|
|
899
|
+
# AND the virtual file loader is registered for the parent workflow
|
|
900
|
+
finder = VirtualFileFinder(parent_files, namespace)
|
|
901
|
+
sys.meta_path.append(finder)
|
|
902
|
+
|
|
903
|
+
vellum_client.workflows.pull.return_value = iter([zip_file_map(subworkflow_files)])
|
|
904
|
+
|
|
905
|
+
# WHEN we execute the root workflow with the mocked client
|
|
906
|
+
Workflow = BaseWorkflow.load_from_module(namespace)
|
|
907
|
+
Inputs = Workflow.get_inputs_class()
|
|
908
|
+
|
|
909
|
+
workflow = Workflow(context=WorkflowContext(namespace=namespace, generated_files=parent_files))
|
|
910
|
+
final_event = workflow.run(inputs=Inputs(deployment_name=deployment_name))
|
|
911
|
+
|
|
912
|
+
# THEN the method should return a workflow (not None) - this will pass once implemented
|
|
913
|
+
assert final_event.name == "workflow.execution.fulfilled", final_event
|
|
914
|
+
|
|
915
|
+
# AND the pull API should have been called with the correct deployment name, release tag, and version
|
|
916
|
+
args, kwargs = vellum_client.workflows.pull.call_args
|
|
917
|
+
assert args[0] == deployment_name
|
|
918
|
+
assert kwargs["release_tag"] == release_tag
|
|
919
|
+
assert kwargs["version"].startswith(">=")
|
|
920
|
+
assert ".0.0,<=" in kwargs["version"]
|
|
921
|
+
|
|
922
|
+
# AND the X-Vellum-Always-Success header should be included for graceful error handling
|
|
923
|
+
assert kwargs["request_options"]["additional_headers"]["X-Vellum-Always-Success"] == "true"
|
|
924
|
+
|
|
925
|
+
|
|
926
|
+
def test_workflow_initiated_event_includes_display_context_with_output_display_name():
|
|
927
|
+
"""
|
|
928
|
+
Tests that workflow initiated events include display context with annotated node and output information.
|
|
929
|
+
"""
|
|
930
|
+
# GIVEN a workflow with a single node that has a single output
|
|
931
|
+
files = {
|
|
932
|
+
"workflow.py": """\
|
|
933
|
+
from vellum.workflows import BaseWorkflow
|
|
934
|
+
from .nodes.start_node import StartNode
|
|
935
|
+
|
|
936
|
+
class Workflow(BaseWorkflow):
|
|
937
|
+
graph = StartNode
|
|
938
|
+
|
|
939
|
+
class Outputs(BaseWorkflow.Outputs):
|
|
940
|
+
final_result = StartNode.Outputs.result
|
|
941
|
+
""",
|
|
942
|
+
"nodes/start_node.py": """\
|
|
943
|
+
from vellum.workflows.nodes import BaseNode
|
|
944
|
+
|
|
945
|
+
class StartNode(BaseNode):
|
|
946
|
+
class Outputs(BaseNode.Outputs):
|
|
947
|
+
result: str = "test output"
|
|
948
|
+
""",
|
|
949
|
+
"display/nodes/__init__.py": """\
|
|
950
|
+
from .start_node import StartNodeDisplay
|
|
951
|
+
""",
|
|
952
|
+
"display/nodes/start_node.py": """\
|
|
953
|
+
from uuid import UUID
|
|
954
|
+
from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
|
|
955
|
+
from vellum_ee.workflows.display.nodes.types import NodeOutputDisplay
|
|
956
|
+
from ...nodes.start_node import StartNode
|
|
957
|
+
|
|
958
|
+
class StartNodeDisplay(BaseNodeDisplay[StartNode]):
|
|
959
|
+
node_id = UUID("11111111-1111-1111-1111-111111111111")
|
|
960
|
+
output_display = {
|
|
961
|
+
StartNode.Outputs.result: NodeOutputDisplay(
|
|
962
|
+
id=UUID("22222222-2222-2222-2222-222222222222"),
|
|
963
|
+
name="Pretty Result"
|
|
964
|
+
)
|
|
965
|
+
}
|
|
966
|
+
""",
|
|
967
|
+
"display/workflow.py": """\
|
|
968
|
+
""",
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
namespace = str(uuid4())
|
|
972
|
+
finder = VirtualFileFinder(files, namespace)
|
|
973
|
+
sys.meta_path.append(finder)
|
|
974
|
+
|
|
975
|
+
try:
|
|
976
|
+
# WHEN we stream the workflow and enrich the initiated event with display context
|
|
977
|
+
Workflow = BaseWorkflow.load_from_module(namespace)
|
|
978
|
+
workflow = Workflow()
|
|
979
|
+
initiated_event = list(workflow.stream())[0]
|
|
980
|
+
enriched_event = event_enricher(initiated_event)
|
|
981
|
+
|
|
982
|
+
# THEN the initiated event should have display context
|
|
983
|
+
assert isinstance(enriched_event.body, WorkflowExecutionInitiatedBody)
|
|
984
|
+
body = enriched_event.body
|
|
985
|
+
assert body.display_context is not None
|
|
986
|
+
|
|
987
|
+
# AND the display context should contain the annotated node
|
|
988
|
+
node_displays = body.display_context.node_displays
|
|
989
|
+
annotated_node_id = UUID("11111111-1111-1111-1111-111111111111")
|
|
990
|
+
assert annotated_node_id in node_displays
|
|
991
|
+
|
|
992
|
+
# AND the node's output display should contain the output with the display name "Pretty Result"
|
|
993
|
+
node_display = node_displays[annotated_node_id]
|
|
994
|
+
assert "result" in node_display.output_display
|
|
995
|
+
|
|
996
|
+
# AND the output should map to the annotated output id
|
|
997
|
+
annotated_output_id = UUID("22222222-2222-2222-2222-222222222222")
|
|
998
|
+
assert node_display.output_display["result"] == annotated_output_id
|
|
999
|
+
finally:
|
|
1000
|
+
if finder in sys.meta_path:
|
|
1001
|
+
sys.meta_path.remove(finder)
|
|
1002
|
+
|
|
1003
|
+
|
|
1004
|
+
def test_load_from_module__chained_nodes_with_absolute_imports(virtual_file_loader):
|
|
1005
|
+
"""
|
|
1006
|
+
Tests that a workflow with chained nodes using absolute imports works correctly.
|
|
1007
|
+
This test is expected to fail on main as absolute imports are not yet supported.
|
|
1008
|
+
"""
|
|
1009
|
+
|
|
1010
|
+
# GIVEN a workflow module with two chained base nodes using absolute imports
|
|
1011
|
+
namespace = str(uuid4())
|
|
1012
|
+
source_module = "test_workflow_abs"
|
|
1013
|
+
files = {
|
|
1014
|
+
"__init__.py": "",
|
|
1015
|
+
"workflow.py": f"""
|
|
1016
|
+
from vellum.workflows import BaseWorkflow
|
|
1017
|
+
from {source_module}.nodes.first_node import FirstNode
|
|
1018
|
+
from {source_module}.nodes.second_node import SecondNode
|
|
1019
|
+
|
|
1020
|
+
class Workflow(BaseWorkflow):
|
|
1021
|
+
graph = FirstNode >> SecondNode
|
|
1022
|
+
|
|
1023
|
+
class Outputs(BaseWorkflow.Outputs):
|
|
1024
|
+
final_output = SecondNode.Outputs.result
|
|
1025
|
+
""",
|
|
1026
|
+
"nodes/__init__.py": "",
|
|
1027
|
+
"nodes/first_node.py": """
|
|
1028
|
+
from vellum.workflows.nodes import BaseNode
|
|
1029
|
+
|
|
1030
|
+
class FirstNode(BaseNode):
|
|
1031
|
+
class Outputs(BaseNode.Outputs):
|
|
1032
|
+
value: str
|
|
1033
|
+
|
|
1034
|
+
def run(self) -> "FirstNode.Outputs":
|
|
1035
|
+
return self.Outputs(value="Hello from FirstNode")
|
|
1036
|
+
""",
|
|
1037
|
+
"nodes/second_node.py": f"""
|
|
1038
|
+
from vellum.workflows.nodes import BaseNode
|
|
1039
|
+
from {source_module}.nodes.first_node import FirstNode
|
|
1040
|
+
|
|
1041
|
+
class SecondNode(BaseNode):
|
|
1042
|
+
input_value = FirstNode.Outputs.value
|
|
1043
|
+
|
|
1044
|
+
class Outputs(BaseNode.Outputs):
|
|
1045
|
+
result: str
|
|
1046
|
+
|
|
1047
|
+
def run(self) -> "SecondNode.Outputs":
|
|
1048
|
+
return self.Outputs(result=f"{{self.input_value}} -> SecondNode")
|
|
1049
|
+
""",
|
|
1050
|
+
}
|
|
1051
|
+
|
|
1052
|
+
# AND the virtual file loader is registered
|
|
1053
|
+
virtual_file_loader(files, namespace, source_module=source_module)
|
|
1054
|
+
|
|
1055
|
+
# WHEN the workflow is loaded
|
|
1056
|
+
Workflow = BaseWorkflow.load_from_module(namespace)
|
|
1057
|
+
workflow = Workflow()
|
|
1058
|
+
|
|
1059
|
+
# THEN the workflow is successfully initialized
|
|
1060
|
+
assert workflow
|
|
1061
|
+
|
|
1062
|
+
# WHEN we run the workflow
|
|
1063
|
+
terminal_event = workflow.run()
|
|
1064
|
+
|
|
1065
|
+
# THEN the workflow should have completed successfully
|
|
1066
|
+
assert terminal_event.name == "workflow.execution.fulfilled"
|
|
1067
|
+
|
|
1068
|
+
# AND the outputs should be as expected
|
|
1069
|
+
assert terminal_event.outputs == {
|
|
1070
|
+
"final_output": "Hello from FirstNode -> SecondNode",
|
|
1071
|
+
}
|