From fcf780bf42b0f14d373f3ce8c7811caf1892a7e3 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Fri, 6 Sep 2024 18:03:27 -0300 Subject: [PATCH] tests: optimize test durations and refactor test fixtures (#3713) * Refactor test fixtures and imports for optimization - Reordered and optimized imports in `conftest.py`. - Changed return statements to yield in `basic_graph` and `create_webhook` fixtures for better resource management. - Added cleanup step to `create_webhook` fixture to delete created webhook after test completion. * Refactor imports and add placeholder client fixture in test_ChatOllama_component.py * Add pytest fixture 'client' to test_graph.py * Add pytest fixture 'client' to test_callback_graph.py for test optimization * Add 'unit_tests_looponfail' target to Makefile for running unit tests with loop-on-fail option * Optimize test durations and update test cases in various modules --- Makefile | 3 + src/backend/tests/.test_durations | 781 +++++++++++------- src/backend/tests/conftest.py | 9 +- .../models/test_ChatOllama_component.py | 15 +- .../unit/graph/graph/test_callback_graph.py | 7 + src/backend/tests/unit/graph/test_graph.py | 5 + 6 files changed, 516 insertions(+), 304 deletions(-) diff --git a/Makefile b/Makefile index d1d853a9c..319238017 100644 --- a/Makefile +++ b/Makefile @@ -148,6 +148,9 @@ else $(args) endif +unit_tests_looponfail: + @make unit_tests args="-f" + integration_tests: poetry run pytest src/backend/tests/integration \ --instafail -ra \ diff --git a/src/backend/tests/.test_durations b/src/backend/tests/.test_durations index fb51e5b43..d87ab9d19 100644 --- a/src/backend/tests/.test_durations +++ b/src/backend/tests/.test_durations @@ -61,302 +61,491 @@ "src/backend/tests/test_webhook.py::test_webhook_endpoint": 8.848518459000388, "src/backend/tests/test_webhook.py::test_webhook_flow_on_run_endpoint": 4.675444458000584, "src/backend/tests/test_webhook.py::test_webhook_with_random_payload": 5.161753501000476, - "src/backend/tests/unit/api/test_api_utils.py::test_get_outdated_components": 1.1425726240004224, - "src/backend/tests/unit/api/test_api_utils.py::test_get_suggestion_message": 1.7624517080002988, - "src/backend/tests/unit/components/prompts/test_prompt_component.py::TestPromptComponent::test_post_code_processing": 0.0013335419994291442, - "src/backend/tests/unit/custom/custom_component/test_component.py::test_set_invalid_output": 0.00042366600018795, - "src/backend/tests/unit/exceptions/test_api.py::test_api_exception": 1.1389405410004656, - "src/backend/tests/unit/exceptions/test_api.py::test_api_exception_no_flow": 1.152361500999632, - "src/backend/tests/unit/graph/graph/test_base.py::test_graph": 0.010227958999621478, - "src/backend/tests/unit/graph/graph/test_base.py::test_graph_functional": 0.010483666000254743, - "src/backend/tests/unit/graph/graph/test_base.py::test_graph_functional_async_start": 0.011119625999981508, - "src/backend/tests/unit/graph/graph/test_base.py::test_graph_functional_start": 0.011757042999761325, - "src/backend/tests/unit/graph/graph/test_base.py::test_graph_functional_start_end": 0.023863916999744106, - "src/backend/tests/unit/graph/graph/test_base.py::test_graph_not_prepared": 0.017605375000130152, - "src/backend/tests/unit/graph/graph/test_base.py::test_graph_with_edge": 0.011328083999615046, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_add_to_vertices_being_run": 1.1834923340002206, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_are_all_predecessors_fulfilled": 1.1408760409995011, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_are_all_predecessors_fulfilled__wrong": 1.9469006670001363, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_build_run_map": 1.1431461249999302, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_from_dict": 1.1375733340000806, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_from_dict_without_run_map__bad_case": 1.1561181250003756, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_from_dict_without_run_predecessors__bad_case": 1.1398941239999658, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_from_dict_without_vertices_being_run__bad_case": 1.1692108339998413, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_from_dict_without_vertices_to_run__bad_case": 1.8318268329999228, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_is_vertex_runnable": 1.1589285000000018, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_is_vertex_runnable__wrong_is_active": 1.1601161660000798, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_is_vertex_runnable__wrong_run_predecessors": 1.1846444589996281, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_is_vertex_runnable__wrong_vertices_to_run": 1.156324541000231, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_pickle": 1.1490497489999143, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_remove_from_predecessors": 1.17061966700021, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_remove_vertex_from_runnables": 1.1513506659998711, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_to_dict": 1.0720182910004041, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_update_run_state": 1.152722833000098, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_update_vertex_run_state": 1.1509739160001118, - "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_update_vertex_run_state__bad_case": 1.1737124579994997, - "src/backend/tests/unit/graph/graph/test_utils.py::test_get_successors_a": 1.1541486669998449, - "src/backend/tests/unit/graph/graph/test_utils.py::test_get_successors_z": 1.152469375999317, - "src/backend/tests/unit/graph/graph/test_utils.py::test_sort_up_to_vertex_a": 1.2232545840001876, - "src/backend/tests/unit/graph/graph/test_utils.py::test_sort_up_to_vertex_g": 1.2133457499999167, - "src/backend/tests/unit/graph/graph/test_utils.py::test_sort_up_to_vertex_h": 1.206607958999939, - "src/backend/tests/unit/graph/graph/test_utils.py::test_sort_up_to_vertex_invalid_vertex": 1.2181356250002864, - "src/backend/tests/unit/graph/graph/test_utils.py::test_sort_up_to_vertex_m": 1.2004494170000726, - "src/backend/tests/unit/graph/graph/test_utils.py::test_sort_up_to_vertex_n_is_start": 1.1721724999997605, - "src/backend/tests/unit/graph/graph/test_utils.py::test_sort_up_to_vertex_t": 1.233656458999576, - "src/backend/tests/unit/graph/graph/test_utils.py::test_sort_up_to_vertex_x": 2.1063177910000377, - "src/backend/tests/unit/graph/graph/test_utils.py::test_sort_up_to_vertex_z": 1.1587511679999807, - "src/backend/tests/unit/graph/test_graph.py::test_build_edges": 1.2613786659999278, - "src/backend/tests/unit/graph/test_graph.py::test_build_nodes": 1.236596333000307, - "src/backend/tests/unit/graph/test_graph.py::test_build_params": 1.1992265409999163, - "src/backend/tests/unit/graph/test_graph.py::test_circular_dependencies": 1.2119703740004297, - "src/backend/tests/unit/graph/test_graph.py::test_find_last_node": 1.1726129999997283, - "src/backend/tests/unit/graph/test_graph.py::test_get_node": 1.2559688749997804, - "src/backend/tests/unit/graph/test_graph.py::test_get_node_neighbors_basic": 2.205406665999817, - "src/backend/tests/unit/graph/test_graph.py::test_get_root_vertex": 1.2303205419998449, - "src/backend/tests/unit/graph/test_graph.py::test_get_vertices_with_target": 1.2130661250002959, - "src/backend/tests/unit/graph/test_graph.py::test_graph_structure": 1.226738209999894, - "src/backend/tests/unit/graph/test_graph.py::test_invalid_node_types": 1.218165749000491, - "src/backend/tests/unit/graph/test_graph.py::test_matched_type": 1.2096231260002241, - "src/backend/tests/unit/graph/test_graph.py::test_pickle_graph": 1.1924404169999434, - "src/backend/tests/unit/graph/test_graph.py::test_process_flow": 1.198885958000119, - "src/backend/tests/unit/graph/test_graph.py::test_process_flow_one_group": 1.1860583339998811, - "src/backend/tests/unit/graph/test_graph.py::test_process_flow_vector_store_grouped": 1.1757077080001181, - "src/backend/tests/unit/graph/test_graph.py::test_set_new_target_handle": 1.2467699590001757, - "src/backend/tests/unit/graph/test_graph.py::test_ungroup_node": 1.200591749999603, - "src/backend/tests/unit/graph/test_graph.py::test_update_source_handle": 1.2464087500002279, - "src/backend/tests/unit/graph/test_graph.py::test_update_target_handle_proxy": 1.2738795420000315, - "src/backend/tests/unit/graph/test_graph.py::test_update_template": 2.3875174170002538, - "src/backend/tests/unit/graph/test_graph.py::test_validate_edges": 1.2202941670002474, - "src/backend/tests/unit/initial_setup/starter_projects/test_memory_chatbot.py::test_memory_chatbot": 1.2400888339998346, - "src/backend/tests/unit/initial_setup/starter_projects/test_memory_chatbot.py::test_memory_chatbot_dump_components_and_edges": 1.2050360830003228, - "src/backend/tests/unit/initial_setup/starter_projects/test_memory_chatbot.py::test_memory_chatbot_dump_structure": 1.226008957999511, - "src/backend/tests/unit/initial_setup/starter_projects/test_vector_store_rag.py::test_vector_store_rag": 0.07454762600036702, - "src/backend/tests/unit/initial_setup/starter_projects/test_vector_store_rag.py::test_vector_store_rag_add": 0.06540679199997612, - "src/backend/tests/unit/initial_setup/starter_projects/test_vector_store_rag.py::test_vector_store_rag_dump": 0.03427487499993731, - "src/backend/tests/unit/initial_setup/starter_projects/test_vector_store_rag.py::test_vector_store_rag_dump_components_and_edges": 0.03775970900005632, - "src/backend/tests/unit/inputs/test_inputs.py::test_bool_input_invalid": 0.0001977499996428378, - "src/backend/tests/unit/inputs/test_inputs.py::test_bool_input_valid": 0.0003290839995315764, - "src/backend/tests/unit/inputs/test_inputs.py::test_data_input_valid": 0.0005500840002241603, - "src/backend/tests/unit/inputs/test_inputs.py::test_dict_input_invalid": 0.00021833400023751892, - "src/backend/tests/unit/inputs/test_inputs.py::test_dict_input_valid": 0.0002739589999691816, - "src/backend/tests/unit/inputs/test_inputs.py::test_dropdown_input_invalid": 0.00028154100027677487, - "src/backend/tests/unit/inputs/test_inputs.py::test_dropdown_input_valid": 0.00018683299958865973, - "src/backend/tests/unit/inputs/test_inputs.py::test_file_input_valid": 0.0005212080000092101, - "src/backend/tests/unit/inputs/test_inputs.py::test_float_input_invalid": 0.00016741600029490655, - "src/backend/tests/unit/inputs/test_inputs.py::test_float_input_valid": 0.0001750840001477627, - "src/backend/tests/unit/inputs/test_inputs.py::test_handle_input_invalid": 0.00030137500016280683, - "src/backend/tests/unit/inputs/test_inputs.py::test_handle_input_valid": 0.00028079100002287305, - "src/backend/tests/unit/inputs/test_inputs.py::test_instantiate_input_comprehensive": 0.00022679100038658362, - "src/backend/tests/unit/inputs/test_inputs.py::test_instantiate_input_invalid": 0.0002707490002649138, - "src/backend/tests/unit/inputs/test_inputs.py::test_instantiate_input_valid": 0.000520291999237088, - "src/backend/tests/unit/inputs/test_inputs.py::test_int_input_invalid": 0.000933000999793876, - "src/backend/tests/unit/inputs/test_inputs.py::test_int_input_valid": 0.00018916599947260693, - "src/backend/tests/unit/inputs/test_inputs.py::test_message_text_input_invalid": 0.0002494579998710833, - "src/backend/tests/unit/inputs/test_inputs.py::test_message_text_input_valid": 0.00048650000053385156, - "src/backend/tests/unit/inputs/test_inputs.py::test_multiline_input_invalid": 0.0018433750001349836, - "src/backend/tests/unit/inputs/test_inputs.py::test_multiline_input_valid": 0.0006555419995493139, - "src/backend/tests/unit/inputs/test_inputs.py::test_multiline_secret_input_invalid": 0.0003428750001148728, - "src/backend/tests/unit/inputs/test_inputs.py::test_multiline_secret_input_valid": 0.001843831999849499, - "src/backend/tests/unit/inputs/test_inputs.py::test_multiselect_input_invalid": 0.00019454099992799456, - "src/backend/tests/unit/inputs/test_inputs.py::test_multiselect_input_valid": 0.0003385830000297574, - "src/backend/tests/unit/inputs/test_inputs.py::test_nested_dict_input_invalid": 0.00046958300026744837, - "src/backend/tests/unit/inputs/test_inputs.py::test_nested_dict_input_valid": 0.0007980010000210314, - "src/backend/tests/unit/inputs/test_inputs.py::test_prompt_input_valid": 0.0006562079997820547, - "src/backend/tests/unit/inputs/test_inputs.py::test_secret_str_input_invalid": 0.00018541600002208725, - "src/backend/tests/unit/inputs/test_inputs.py::test_secret_str_input_valid": 0.00017520799929116038, - "src/backend/tests/unit/inputs/test_inputs.py::test_str_input_invalid": 0.00023595900029249606, - "src/backend/tests/unit/inputs/test_inputs.py::test_str_input_valid": 0.00019979200033048983, - "src/backend/tests/unit/inputs/test_inputs.py::test_table_input_invalid": 0.00026916500019069645, - "src/backend/tests/unit/inputs/test_inputs.py::test_table_input_valid": 0.00023066599987942027, - "src/backend/tests/unit/schema/test_schema_message.py::test_message_async_prompt_serialization": 0.2658414169995922, - "src/backend/tests/unit/schema/test_schema_message.py::test_message_prompt_serialization": 0.0005853330003446899, - "src/backend/tests/unit/test_api_key.py::test_create_api_key": 1.668041834000178, - "src/backend/tests/unit/test_api_key.py::test_delete_api_key": 1.6283347500002492, - "src/backend/tests/unit/test_api_key.py::test_get_api_keys": 1.5674538329994903, + "src/backend/tests/unit/api/test_api_utils.py::test_get_outdated_components": 2.8084017080254853, + "src/backend/tests/unit/api/test_api_utils.py::test_get_suggestion_message": 5.118682334024925, + "src/backend/tests/unit/api/v1/test_variable.py::test_create_variable": 3.0856673330417834, + "src/backend/tests/unit/api/v1/test_variable.py::test_create_variable__Exception": 5.891528583015315, + "src/backend/tests/unit/api/v1/test_variable.py::test_create_variable__HTTPException": 2.8841335409670137, + "src/backend/tests/unit/api/v1/test_variable.py::test_create_variable__variable_name_alread_exists": 3.690157334029209, + "src/backend/tests/unit/api/v1/test_variable.py::test_create_variable__variable_name_and_value_cannot_be_empty": 2.877465248981025, + "src/backend/tests/unit/api/v1/test_variable.py::test_create_variable__variable_name_cannot_be_empty": 3.4102128740632907, + "src/backend/tests/unit/api/v1/test_variable.py::test_create_variable__variable_value_cannot_be_empty": 2.7537577909533866, + "src/backend/tests/unit/api/v1/test_variable.py::test_delete_variable": 2.491162959020585, + "src/backend/tests/unit/api/v1/test_variable.py::test_delete_variable__Exception": 3.1565893749939278, + "src/backend/tests/unit/api/v1/test_variable.py::test_read_variables": 3.6610397080075927, + "src/backend/tests/unit/api/v1/test_variable.py::test_read_variables__": 3.7497400419670157, + "src/backend/tests/unit/api/v1/test_variable.py::test_read_variables__empty": 3.0430358340381645, + "src/backend/tests/unit/api/v1/test_variable.py::test_update_variable": 2.8299104999750853, + "src/backend/tests/unit/api/v1/test_variable.py::test_update_variable__Exception": 3.202228542009834, + "src/backend/tests/unit/base/tools/test_component_tool.py::test_component_tool": 0.04467487393412739, + "src/backend/tests/unit/components/models/test_ChatOllama_component.py::test_build_model": 0.0020211669616401196, + "src/backend/tests/unit/components/models/test_ChatOllama_component.py::test_get_model_failure": 0.0068002091138623655, + "src/backend/tests/unit/components/models/test_ChatOllama_component.py::test_get_model_success": 0.015780292043928057, + "src/backend/tests/unit/components/models/test_ChatOllama_component.py::test_update_build_config_keep_alive": 0.0008187499479390681, + "src/backend/tests/unit/components/models/test_ChatOllama_component.py::test_update_build_config_mirostat_disabled": 0.0013394170091487467, + "src/backend/tests/unit/components/models/test_ChatOllama_component.py::test_update_build_config_mirostat_enabled": 0.0016756660188548267, + "src/backend/tests/unit/components/models/test_ChatOllama_component.py::test_update_build_config_model_name": 0.0062951669679023325, + "src/backend/tests/unit/components/prompts/test_prompt_component.py::TestPromptComponent::test_post_code_processing": 0.01907300011953339, + "src/backend/tests/unit/custom/component/test_component_to_tool.py::test_component_to_tool": 0.019733334018383175, + "src/backend/tests/unit/custom/custom_component/test_component.py::test_set_component": 0.002436416980344802, + "src/backend/tests/unit/custom/custom_component/test_component.py::test_set_invalid_output": 0.0008760430500842631, + "src/backend/tests/unit/events/test_event_manager.py::TestEventManager::test_accessing_non_registered_callback": 0.0003252510214224458, + "src/backend/tests/unit/events/test_event_manager.py::TestEventManager::test_accessing_non_registered_event_callback_with_recommended_fix": 0.002420708944555372, + "src/backend/tests/unit/events/test_event_manager.py::TestEventManager::test_accessing_registered_event_callback": 0.00048387504648417234, + "src/backend/tests/unit/events/test_event_manager.py::TestEventManager::test_event_id_uniqueness_with_await": 0.014276833040639758, + "src/backend/tests/unit/events/test_event_manager.py::TestEventManager::test_handling_large_number_of_events": 0.0026765000075101852, + "src/backend/tests/unit/events/test_event_manager.py::TestEventManager::test_performance_impact_frequent_registrations": 0.0014237920404411852, + "src/backend/tests/unit/events/test_event_manager.py::TestEventManager::test_queue_receives_correct_event_data_format": 0.004706457955762744, + "src/backend/tests/unit/events/test_event_manager.py::TestEventManager::test_register_event_with_empty_name": 0.00039654201827943325, + "src/backend/tests/unit/events/test_event_manager.py::TestEventManager::test_register_event_with_invalid_name_fixed": 0.0022748749470338225, + "src/backend/tests/unit/events/test_event_manager.py::TestEventManager::test_register_event_with_valid_name_and_callback_with_mock_callback": 0.00042608199873939157, + "src/backend/tests/unit/events/test_event_manager.py::TestEventManager::test_register_event_with_valid_name_and_no_callback": 0.0002793750027194619, + "src/backend/tests/unit/events/test_event_manager.py::TestEventManager::test_register_event_without_event_type_argument_fixed": 0.0004962499951943755, + "src/backend/tests/unit/events/test_event_manager.py::TestEventManager::test_sending_event_with_complex_data": 0.015433623921126127, + "src/backend/tests/unit/events/test_event_manager.py::TestEventManager::test_sending_event_with_none_data": 0.0003140009939670563, + "src/backend/tests/unit/events/test_event_manager.py::TestEventManager::test_sending_event_with_valid_type_and_data_asyncio_plugin": 0.004175833077169955, + "src/backend/tests/unit/events/test_event_manager.py::TestEventManager::test_thread_safety_accessing_events_dictionary": 0.002862458990421146, + "src/backend/tests/unit/exceptions/test_api.py::test_api_exception": 5.165536917047575, + "src/backend/tests/unit/exceptions/test_api.py::test_api_exception_no_flow": 3.1444325000047684, + "src/backend/tests/unit/graph/edge/test_edge_base.py::test_edge_raises_error_on_invalid_target_handle": 0.01743029203498736, + "src/backend/tests/unit/graph/graph/state/test_state_model.py::TestCreateStateModel::test_create_model_and_assign_values_fails": 0.003823124978225678, + "src/backend/tests/unit/graph/graph/state/test_state_model.py::TestCreateStateModel::test_create_model_with_fields_from_kwargs": 0.0009365829755552113, + "src/backend/tests/unit/graph/graph/state/test_state_model.py::TestCreateStateModel::test_create_model_with_invalid_callable": 0.00458308303495869, + "src/backend/tests/unit/graph/graph/state/test_state_model.py::TestCreateStateModel::test_create_model_with_valid_return_type_annotations": 0.0014327499084174633, + "src/backend/tests/unit/graph/graph/state/test_state_model.py::TestCreateStateModel::test_create_with_multiple_components": 0.003126667987089604, + "src/backend/tests/unit/graph/graph/state/test_state_model.py::TestCreateStateModel::test_create_with_pydantic_field": 0.002614291966892779, + "src/backend/tests/unit/graph/graph/state/test_state_model.py::TestCreateStateModel::test_default_model_name_to_state": 0.0033909990452229977, + "src/backend/tests/unit/graph/graph/state/test_state_model.py::TestCreateStateModel::test_graph_functional_start_state_update": 0.38284662598744035, + "src/backend/tests/unit/graph/graph/state/test_state_model.py::TestCreateStateModel::test_handle_empty_kwargs_gracefully": 0.0026077500078827143, + "src/backend/tests/unit/graph/graph/state/test_state_model.py::TestCreateStateModel::test_raise_valueerror_for_invalid_field_type_in_tuple": 0.00342700001783669, + "src/backend/tests/unit/graph/graph/state/test_state_model.py::TestCreateStateModel::test_raise_valueerror_for_unsupported_value_types": 0.001125834067352116, + "src/backend/tests/unit/graph/graph/test_base.py::test_graph": 0.0028614590410143137, + "src/backend/tests/unit/graph/graph/test_base.py::test_graph_functional": 0.002848291944246739, + "src/backend/tests/unit/graph/graph/test_base.py::test_graph_functional_async_start": 0.00851887499447912, + "src/backend/tests/unit/graph/graph/test_base.py::test_graph_functional_start": 0.006822708004619926, + "src/backend/tests/unit/graph/graph/test_base.py::test_graph_functional_start_end": 0.31068545795278624, + "src/backend/tests/unit/graph/graph/test_base.py::test_graph_not_prepared": 0.003954542044084519, + "src/backend/tests/unit/graph/graph/test_base.py::test_graph_set_with_invalid_component": 0.0009155830484814942, + "src/backend/tests/unit/graph/graph/test_base.py::test_graph_set_with_valid_component": 0.0013159169466234744, + "src/backend/tests/unit/graph/graph/test_base.py::test_graph_with_edge": 0.0030836249934509397, + "src/backend/tests/unit/graph/graph/test_callback_graph.py::test_callback_graph": 0.004803291987627745, + "src/backend/tests/unit/graph/graph/test_cycles.py::test_cycle_in_graph": 0.020792666997294873, + "src/backend/tests/unit/graph/graph/test_cycles.py::test_cycle_in_graph_max_iterations": 0.0154116649646312, + "src/backend/tests/unit/graph/graph/test_graph_state_model.py::test_graph_functional_start_graph_state_update": 0.014615208026953042, + "src/backend/tests/unit/graph/graph/test_graph_state_model.py::test_graph_state_model": 0.019434958929196, + "src/backend/tests/unit/graph/graph/test_graph_state_model.py::test_graph_state_model_json_schema": 0.00020879099611192942, + "src/backend/tests/unit/graph/graph/test_graph_state_model.py::test_graph_state_model_serialization": 0.30240879103075713, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_add_to_vertices_being_run": 0.0002751240390352905, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_are_all_predecessors_fulfilled": 0.0003926260396838188, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_are_all_predecessors_fulfilled__wrong": 0.00041854201117530465, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_build_run_map": 0.0003674989566206932, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_from_dict": 0.00048262596828863025, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_from_dict_without_run_map__bad_case": 0.00037833303213119507, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_from_dict_without_run_predecessors__bad_case": 0.0004080839571543038, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_from_dict_without_vertices_being_run__bad_case": 0.00028962595388293266, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_from_dict_without_vertices_to_run__bad_case": 0.00034329190384596586, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_is_vertex_runnable": 0.0006714990013279021, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_is_vertex_runnable__wrong_is_active": 0.00042558403220027685, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_is_vertex_runnable__wrong_run_predecessors": 0.0013484579976648092, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_is_vertex_runnable__wrong_vertices_to_run": 0.0008156669791787863, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_pickle": 0.0026231249794363976, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_remove_from_predecessors": 0.0008892920450307429, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_remove_vertex_from_runnables": 0.0002857920480892062, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_to_dict": 0.00039079098496586084, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_update_run_state": 0.0026797510217875242, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_update_vertex_run_state": 0.0002868340234272182, + "src/backend/tests/unit/graph/graph/test_runnable_vertices_manager.py::test_update_vertex_run_state__bad_case": 0.0003107090014964342, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindAllCycleEdges::test_detects_cycles_in_simple_graph": 0.00028504099464043975, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindAllCycleEdges::test_disconnected_components": 0.0005705829826183617, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindAllCycleEdges::test_duplicate_edges": 0.0002827919670380652, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindAllCycleEdges::test_identifies_multiple_cycles": 0.0006248340359888971, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindAllCycleEdges::test_large_graphs_efficiency": 0.0006118330638855696, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindAllCycleEdges::test_mixed_data_types_in_edges": 0.0002896260120905936, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindAllCycleEdges::test_multiple_edges_between_same_nodes": 0.00031320902053266764, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindAllCycleEdges::test_no_cycles_present": 0.0005720839835703373, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindAllCycleEdges::test_nodes_with_no_incoming_edges": 0.0009030828950926661, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindAllCycleEdges::test_nodes_with_no_outgoing_edges": 0.0002746249665506184, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindAllCycleEdges::test_self_loops": 0.0006457920535467565, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindAllCycleEdges::test_single_node_no_edges": 0.00040495797293260694, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindCycleEdge::test_detects_cycle_in_simple_graph": 0.0002679579774849117, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindCycleEdge::test_disconnected_components": 0.00047562498366460204, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindCycleEdge::test_duplicate_edges": 0.0003092490369454026, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindCycleEdge::test_empty_edges_list": 0.0005007500294595957, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindCycleEdge::test_identifies_first_cycle": 0.00026495999190956354, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindCycleEdge::test_large_graph_efficiency": 0.0015956249553710222, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindCycleEdge::test_multiple_cycles": 0.0002763339434750378, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindCycleEdge::test_multiple_edges_between_same_nodes": 0.000241084024310112, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindCycleEdge::test_nodes_with_no_outgoing_edges": 0.0016497920732945204, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindCycleEdge::test_returns_none_when_no_cycle": 0.00026058393996208906, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindCycleEdge::test_self_loop_cycle": 0.0002930000191554427, + "src/backend/tests/unit/graph/graph/test_utils.py::TestFindCycleEdge::test_single_node_no_edges": 0.0005835830233991146, + "src/backend/tests/unit/graph/graph/test_utils.py::test_get_successors_a": 0.0002936659730039537, + "src/backend/tests/unit/graph/graph/test_utils.py::test_get_successors_z": 0.0003981670015491545, + "src/backend/tests/unit/graph/graph/test_utils.py::test_has_cycle": 0.00029833399457857013, + "src/backend/tests/unit/graph/graph/test_utils.py::test_sort_up_to_vertex_a": 0.0004433330032043159, + "src/backend/tests/unit/graph/graph/test_utils.py::test_sort_up_to_vertex_g": 0.0002774589229375124, + "src/backend/tests/unit/graph/graph/test_utils.py::test_sort_up_to_vertex_h": 0.00027199997566640377, + "src/backend/tests/unit/graph/graph/test_utils.py::test_sort_up_to_vertex_invalid_vertex": 0.0033761669765226543, + "src/backend/tests/unit/graph/graph/test_utils.py::test_sort_up_to_vertex_m": 0.00028033298440277576, + "src/backend/tests/unit/graph/graph/test_utils.py::test_sort_up_to_vertex_n_is_start": 0.0017444159602746367, + "src/backend/tests/unit/graph/graph/test_utils.py::test_sort_up_to_vertex_t": 0.00028278998797759414, + "src/backend/tests/unit/graph/graph/test_utils.py::test_sort_up_to_vertex_x": 0.0003054169355891645, + "src/backend/tests/unit/graph/graph/test_utils.py::test_sort_up_to_vertex_z": 0.0003299160161986947, + "src/backend/tests/unit/graph/test_graph.py::test_build_edges": 0.001086625037714839, + "src/backend/tests/unit/graph/test_graph.py::test_build_nodes": 0.0012113330303691328, + "src/backend/tests/unit/graph/test_graph.py::test_build_params": 0.00745550001738593, + "src/backend/tests/unit/graph/test_graph.py::test_circular_dependencies": 0.0011518750106915832, + "src/backend/tests/unit/graph/test_graph.py::test_find_last_node": 0.0008732929709367454, + "src/backend/tests/unit/graph/test_graph.py::test_get_node": 3.6276886249543168, + "src/backend/tests/unit/graph/test_graph.py::test_get_node_neighbors_basic": 0.0015942919999361038, + "src/backend/tests/unit/graph/test_graph.py::test_get_root_vertex": 0.00336533400695771, + "src/backend/tests/unit/graph/test_graph.py::test_get_vertices_with_target": 0.0015001240535639226, + "src/backend/tests/unit/graph/test_graph.py::test_graph_structure": 3.660518125980161, + "src/backend/tests/unit/graph/test_graph.py::test_invalid_node_types": 0.0033974149846471846, + "src/backend/tests/unit/graph/test_graph.py::test_matched_type": 0.0011828330461867154, + "src/backend/tests/unit/graph/test_graph.py::test_pickle_graph": 0.025576499931048602, + "src/backend/tests/unit/graph/test_graph.py::test_process_flow": 0.0011497500236146152, + "src/backend/tests/unit/graph/test_graph.py::test_process_flow_one_group": 0.0018960839952342212, + "src/backend/tests/unit/graph/test_graph.py::test_process_flow_vector_store_grouped": 0.005742707988247275, + "src/backend/tests/unit/graph/test_graph.py::test_set_new_target_handle": 0.0002932510105893016, + "src/backend/tests/unit/graph/test_graph.py::test_ungroup_node": 0.0010475010494701564, + "src/backend/tests/unit/graph/test_graph.py::test_update_source_handle": 0.000287000962998718, + "src/backend/tests/unit/graph/test_graph.py::test_update_target_handle_proxy": 0.0003938330337405205, + "src/backend/tests/unit/graph/test_graph.py::test_update_template": 0.00037104199873283505, + "src/backend/tests/unit/graph/test_graph.py::test_validate_edges": 0.0010510420543141663, + "src/backend/tests/unit/initial_setup/starter_projects/test_memory_chatbot.py::test_memory_chatbot": 2.745265916979406, + "src/backend/tests/unit/initial_setup/starter_projects/test_memory_chatbot.py::test_memory_chatbot_dump_components_and_edges": 2.7694530828739516, + "src/backend/tests/unit/initial_setup/starter_projects/test_memory_chatbot.py::test_memory_chatbot_dump_structure": 2.6900041250046343, + "src/backend/tests/unit/initial_setup/starter_projects/test_vector_store_rag.py::test_vector_store_rag": 0.09931745805079117, + "src/backend/tests/unit/initial_setup/starter_projects/test_vector_store_rag.py::test_vector_store_rag_add": 0.046793167013674974, + "src/backend/tests/unit/initial_setup/starter_projects/test_vector_store_rag.py::test_vector_store_rag_dump": 0.015337915974669158, + "src/backend/tests/unit/initial_setup/starter_projects/test_vector_store_rag.py::test_vector_store_rag_dump_components_and_edges": 0.3383241659612395, + "src/backend/tests/unit/inputs/test_inputs.py::test_bool_input_invalid": 0.0002828749711625278, + "src/backend/tests/unit/inputs/test_inputs.py::test_bool_input_valid": 0.0003182090003974736, + "src/backend/tests/unit/inputs/test_inputs.py::test_data_input_valid": 0.00039245799416676164, + "src/backend/tests/unit/inputs/test_inputs.py::test_dict_input_invalid": 0.00027891702484339476, + "src/backend/tests/unit/inputs/test_inputs.py::test_dict_input_valid": 0.0002850420423783362, + "src/backend/tests/unit/inputs/test_inputs.py::test_dropdown_input_invalid": 0.00026658392744138837, + "src/backend/tests/unit/inputs/test_inputs.py::test_dropdown_input_valid": 0.0002708340180106461, + "src/backend/tests/unit/inputs/test_inputs.py::test_file_input_valid": 0.0003541659680195153, + "src/backend/tests/unit/inputs/test_inputs.py::test_float_input_invalid": 0.001792833034414798, + "src/backend/tests/unit/inputs/test_inputs.py::test_float_input_valid": 0.00028895906871184707, + "src/backend/tests/unit/inputs/test_inputs.py::test_handle_input_invalid": 0.00028858205769211054, + "src/backend/tests/unit/inputs/test_inputs.py::test_handle_input_valid": 0.0002573339152149856, + "src/backend/tests/unit/inputs/test_inputs.py::test_instantiate_input_comprehensive": 0.0004499579663388431, + "src/backend/tests/unit/inputs/test_inputs.py::test_instantiate_input_invalid": 0.0004248740151524544, + "src/backend/tests/unit/inputs/test_inputs.py::test_instantiate_input_valid": 0.0003302929690107703, + "src/backend/tests/unit/inputs/test_inputs.py::test_int_input_invalid": 0.00048291601706296206, + "src/backend/tests/unit/inputs/test_inputs.py::test_int_input_valid": 0.00032804306829348207, + "src/backend/tests/unit/inputs/test_inputs.py::test_message_text_input_invalid": 0.0003255010233260691, + "src/backend/tests/unit/inputs/test_inputs.py::test_message_text_input_valid": 0.0005122079746797681, + "src/backend/tests/unit/inputs/test_inputs.py::test_multiline_input_invalid": 0.0003666250850073993, + "src/backend/tests/unit/inputs/test_inputs.py::test_multiline_input_valid": 0.0003393329679965973, + "src/backend/tests/unit/inputs/test_inputs.py::test_multiline_secret_input_invalid": 0.0013413759879767895, + "src/backend/tests/unit/inputs/test_inputs.py::test_multiline_secret_input_valid": 0.0009220420033670962, + "src/backend/tests/unit/inputs/test_inputs.py::test_multiselect_input_invalid": 0.00031925097573548555, + "src/backend/tests/unit/inputs/test_inputs.py::test_multiselect_input_valid": 0.0004229999613016844, + "src/backend/tests/unit/inputs/test_inputs.py::test_nested_dict_input_invalid": 0.0005164990434423089, + "src/backend/tests/unit/inputs/test_inputs.py::test_nested_dict_input_valid": 0.0006655830075033009, + "src/backend/tests/unit/inputs/test_inputs.py::test_prompt_input_valid": 0.0003657920169644058, + "src/backend/tests/unit/inputs/test_inputs.py::test_secret_str_input_invalid": 0.00035770906833931804, + "src/backend/tests/unit/inputs/test_inputs.py::test_secret_str_input_valid": 0.0007077500340528786, + "src/backend/tests/unit/inputs/test_inputs.py::test_str_input_invalid": 0.0011320829507894814, + "src/backend/tests/unit/inputs/test_inputs.py::test_str_input_valid": 0.0003163329674862325, + "src/backend/tests/unit/inputs/test_inputs.py::test_table_input_invalid": 0.0003552910056896508, + "src/backend/tests/unit/inputs/test_inputs.py::test_table_input_valid": 0.00033895799424499273, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_complex_nested_structures_handling": 0.002644082938786596, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_default_values_assignment": 0.0005547509645111859, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_default_values_for_non_required_fields": 0.0005426649586297572, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_empty_list_of_inputs": 0.0004508750280365348, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_field_types_conversion": 0.000591459043789655, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_fields_creation_with_correct_types_and_attributes": 0.0010405409848317504, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_invalid_field_types_handling": 0.0005195839912630618, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_is_list_attribute_processing": 0.0009998760651797056, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_is_list_handling": 0.0007378349546343088, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_missing_attributes_handling": 0.0005290409899316728, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_missing_optional_attributes": 0.0005764180677942932, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_mixed_required_optional_fields_processing": 0.0008241240284405649, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_multiple_input_types": 0.0010676659876480699, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_non_standard_field_types_handling": 0.0006119169993326068, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_none_default_value_handling": 0.0007848759996704757, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_options_attribute_processing": 0.0009355409420095384, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_options_handling": 0.0017233749967999756, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_passing_input_type_directly": 0.0006622910150326788, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_schema_model_creation": 0.0006008749478496611, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_single_input_type_conversion": 0.0006804990116506815, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_single_input_type_replica": 0.0006408749613910913, + "src/backend/tests/unit/io/test_io_schema.py::TestCreateInputSchema::test_special_characters_in_names_handling": 0.000593625009059906, + "src/backend/tests/unit/io/test_io_schema.py::test_create_input_schema": 0.002895458950661123, + "src/backend/tests/unit/schema/test_schema_message.py::test_message_async_prompt_serialization": 0.4139872090308927, + "src/backend/tests/unit/schema/test_schema_message.py::test_message_prompt_serialization": 0.003387250064406544, + "src/backend/tests/unit/services/variable/test_service.py::test_create_variable": 0.005690833961125463, + "src/backend/tests/unit/services/variable/test_service.py::test_delete_varaible_by_id": 0.0060262500192038715, + "src/backend/tests/unit/services/variable/test_service.py::test_delete_variable": 0.005094875057693571, + "src/backend/tests/unit/services/variable/test_service.py::test_delete_variable__ValueError": 0.0035743750049732625, + "src/backend/tests/unit/services/variable/test_service.py::test_delete_variable_by_id__ValueError": 0.27340612601256, + "src/backend/tests/unit/services/variable/test_service.py::test_get_variable": 0.0322585420217365, + "src/backend/tests/unit/services/variable/test_service.py::test_get_variable__TypeError": 0.00458791694836691, + "src/backend/tests/unit/services/variable/test_service.py::test_get_variable__ValueError": 0.003811584028881043, + "src/backend/tests/unit/services/variable/test_service.py::test_initialize_user_variables__donkey": 0.0002315010060556233, + "src/backend/tests/unit/services/variable/test_service.py::test_initialize_user_variables__not_found_variable": 0.04281383304623887, + "src/backend/tests/unit/services/variable/test_service.py::test_initialize_user_variables__skipping_environment_variable_storage": 0.3182707919040695, + "src/backend/tests/unit/services/variable/test_service.py::test_list_variables": 0.006724000093527138, + "src/backend/tests/unit/services/variable/test_service.py::test_list_variables__empty": 0.004544168012216687, + "src/backend/tests/unit/services/variable/test_service.py::test_update_variable": 0.322743374039419, + "src/backend/tests/unit/services/variable/test_service.py::test_update_variable__ValueError": 0.0036237920285202563, + "src/backend/tests/unit/services/variable/test_service.py::test_update_variable_fields": 0.005188334034755826, + "src/backend/tests/unit/test_api_key.py::test_create_api_key": 3.842014041962102, + "src/backend/tests/unit/test_api_key.py::test_delete_api_key": 2.8479771240381524, + "src/backend/tests/unit/test_api_key.py::test_get_api_keys": 5.180979499069508, "src/backend/tests/unit/test_cache.py::test_build_graph": 1.1988659180001378, - "src/backend/tests/unit/test_chat_endpoint.py::test_build_flow": 5.618974041000001, - "src/backend/tests/unit/test_chat_endpoint.py::test_build_flow_from_request_data": 5.709847209000145, - "src/backend/tests/unit/test_chat_endpoint.py::test_build_flow_with_frozen_path": 6.376642749999974, - "src/backend/tests/unit/test_cli.py::test_components_path": 1.2666867920006553, - "src/backend/tests/unit/test_cli.py::test_superuser": 1.6751555829996505, - "src/backend/tests/unit/test_custom_component.py::test_build_config_field_keys": 0.2042501250002715, - "src/backend/tests/unit/test_custom_component.py::test_build_config_field_value_keys": 0.19506029200010744, - "src/backend/tests/unit/test_custom_component.py::test_build_config_field_values_dict": 0.1966598340004566, - "src/backend/tests/unit/test_custom_component.py::test_build_config_fields_dict": 0.20268266700031745, - "src/backend/tests/unit/test_custom_component.py::test_build_config_has_fields": 0.1948232069998994, - "src/backend/tests/unit/test_custom_component.py::test_build_config_no_code": 0.000207583999781491, - "src/backend/tests/unit/test_custom_component.py::test_build_config_return_type": 0.19622991700043713, - "src/backend/tests/unit/test_custom_component.py::test_code_parser_get_tree": 0.00027658399994834326, - "src/backend/tests/unit/test_custom_component.py::test_code_parser_init": 0.0002327079996575776, - "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_ann_assign": 0.00019754200002353173, - "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_arg_no_annotation": 0.00018179199969381443, - "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_arg_with_annotation": 0.0001805840006454673, - "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_assign": 0.0002079589999084419, - "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_callable_details_no_args": 0.0001973339999494783, - "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_classes": 0.00032654200003889855, - "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_classes_raises": 0.0002649169996402634, - "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_function_def_init": 0.00018600100020194077, - "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_function_def_not_init": 0.00019508200011841836, - "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_functions": 0.00021508300005734782, - "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_global_vars": 0.00020745999972859863, - "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_imports_import": 0.00025808299960772274, - "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_imports_importfrom": 0.00018808400045600138, - "src/backend/tests/unit/test_custom_component.py::test_code_parser_syntax_error": 0.001801750000595348, - "src/backend/tests/unit/test_custom_component.py::test_component_code_null_error": 0.0001859579997471883, - "src/backend/tests/unit/test_custom_component.py::test_component_get_code_tree": 0.0006688740004392457, - "src/backend/tests/unit/test_custom_component.py::test_component_get_code_tree_syntax_error": 0.0002742089995990682, - "src/backend/tests/unit/test_custom_component.py::test_component_get_function_valid": 0.00021645800006808713, - "src/backend/tests/unit/test_custom_component.py::test_component_init": 0.00018979200012836372, - "src/backend/tests/unit/test_custom_component.py::test_custom_component_build_not_implemented": 0.00019016700025531463, - "src/backend/tests/unit/test_custom_component.py::test_custom_component_build_template_config": 0.00036833300055150175, - "src/backend/tests/unit/test_custom_component.py::test_custom_component_class_template_validation_no_code": 0.00018979200012836372, - "src/backend/tests/unit/test_custom_component.py::test_custom_component_get_code_tree_syntax_error": 0.0002411679997749161, - "src/backend/tests/unit/test_custom_component.py::test_custom_component_get_function": 0.00022095800022725598, - "src/backend/tests/unit/test_custom_component.py::test_custom_component_get_function_entrypoint_args": 0.0006820000003244786, - "src/backend/tests/unit/test_custom_component.py::test_custom_component_get_function_entrypoint_args_no_args": 0.0003158340000481985, - "src/backend/tests/unit/test_custom_component.py::test_custom_component_get_function_entrypoint_return_type": 0.0005181660003472643, - "src/backend/tests/unit/test_custom_component.py::test_custom_component_get_function_entrypoint_return_type_no_return_type": 0.00031354199927591253, - "src/backend/tests/unit/test_custom_component.py::test_custom_component_get_function_valid": 0.00019329300039316877, - "src/backend/tests/unit/test_custom_component.py::test_custom_component_get_main_class_name": 0.0005222909999247349, - "src/backend/tests/unit/test_custom_component.py::test_custom_component_get_main_class_name_no_main_class": 0.00021295800024745404, - "src/backend/tests/unit/test_custom_component.py::test_custom_component_init": 0.0001823750003495661, - "src/backend/tests/unit/test_custom_component.py::test_custom_component_multiple_outputs": 0.19756641600042713, + "src/backend/tests/unit/test_chat_endpoint.py::test_build_flow": 12.902665957051795, + "src/backend/tests/unit/test_chat_endpoint.py::test_build_flow_from_request_data": 11.015627957996912, + "src/backend/tests/unit/test_chat_endpoint.py::test_build_flow_with_frozen_path": 7.392927417007741, + "src/backend/tests/unit/test_cli.py::test_components_path": 3.066763209120836, + "src/backend/tests/unit/test_cli.py::test_superuser": 2.517449541017413, + "src/backend/tests/unit/test_custom_component.py::test_build_config_field_keys": 0.21923858404625207, + "src/backend/tests/unit/test_custom_component.py::test_build_config_field_value_keys": 0.22493916703388095, + "src/backend/tests/unit/test_custom_component.py::test_build_config_field_values_dict": 0.22050262603443116, + "src/backend/tests/unit/test_custom_component.py::test_build_config_fields_dict": 0.2320227089803666, + "src/backend/tests/unit/test_custom_component.py::test_build_config_has_fields": 0.24524295894661918, + "src/backend/tests/unit/test_custom_component.py::test_build_config_no_code": 0.00026833300944417715, + "src/backend/tests/unit/test_custom_component.py::test_build_config_return_type": 0.339174666965846, + "src/backend/tests/unit/test_custom_component.py::test_code_parser_get_tree": 0.000570459000300616, + "src/backend/tests/unit/test_custom_component.py::test_code_parser_init": 0.0005881660035811365, + "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_ann_assign": 0.0002855409402400255, + "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_arg_no_annotation": 0.0003049989463761449, + "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_arg_with_annotation": 0.0002652510302141309, + "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_assign": 0.00028533401200547814, + "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_callable_details_no_args": 0.0002887090086005628, + "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_classes": 0.0005051260814070702, + "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_classes_raises": 0.0003716680221259594, + "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_function_def_init": 0.0003388329641893506, + "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_function_def_not_init": 0.0011131670325994492, + "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_functions": 0.0003978340537287295, + "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_global_vars": 0.0020412079175002873, + "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_imports_import": 0.00039212603587657213, + "src/backend/tests/unit/test_custom_component.py::test_code_parser_parse_imports_importfrom": 0.0023357909522019327, + "src/backend/tests/unit/test_custom_component.py::test_code_parser_syntax_error": 0.0015684169484302402, + "src/backend/tests/unit/test_custom_component.py::test_component_code_null_error": 0.0003358739777468145, + "src/backend/tests/unit/test_custom_component.py::test_component_get_code_tree": 0.0010483330697752535, + "src/backend/tests/unit/test_custom_component.py::test_component_get_code_tree_syntax_error": 0.000570415984839201, + "src/backend/tests/unit/test_custom_component.py::test_component_get_function_valid": 0.000449958024546504, + "src/backend/tests/unit/test_custom_component.py::test_component_init": 0.00030837394297122955, + "src/backend/tests/unit/test_custom_component.py::test_custom_component_build_not_implemented": 0.00040358398109674454, + "src/backend/tests/unit/test_custom_component.py::test_custom_component_build_template_config": 0.0005803339881822467, + "src/backend/tests/unit/test_custom_component.py::test_custom_component_class_template_validation_no_code": 0.000299291976261884, + "src/backend/tests/unit/test_custom_component.py::test_custom_component_get_code_tree_syntax_error": 0.0003827909822575748, + "src/backend/tests/unit/test_custom_component.py::test_custom_component_get_function": 0.0003200420760549605, + "src/backend/tests/unit/test_custom_component.py::test_custom_component_get_function_entrypoint_args": 0.001189417962450534, + "src/backend/tests/unit/test_custom_component.py::test_custom_component_get_function_entrypoint_args_no_args": 0.000778250047005713, + "src/backend/tests/unit/test_custom_component.py::test_custom_component_get_function_entrypoint_return_type": 0.0008200830779969692, + "src/backend/tests/unit/test_custom_component.py::test_custom_component_get_function_entrypoint_return_type_no_return_type": 0.0005066260346211493, + "src/backend/tests/unit/test_custom_component.py::test_custom_component_get_function_valid": 0.00028941791970282793, + "src/backend/tests/unit/test_custom_component.py::test_custom_component_get_main_class_name": 0.0007971250452101231, + "src/backend/tests/unit/test_custom_component.py::test_custom_component_get_main_class_name_no_main_class": 0.0003335429937578738, + "src/backend/tests/unit/test_custom_component.py::test_custom_component_init": 0.00028658407973125577, + "src/backend/tests/unit/test_custom_component.py::test_custom_component_multiple_outputs": 0.23506933404132724, "src/backend/tests/unit/test_custom_component.py::test_list_flows_flow_objects": 1.981454541994026, - "src/backend/tests/unit/test_custom_component.py::test_list_flows_return_type": 0.2607629169997381, - "src/backend/tests/unit/test_custom_component_with_client.py::test_list_flows_flow_objects": 1.306553499999609, - "src/backend/tests/unit/test_data_class.py::test_add_method_for_integers": 1.1870880830006172, - "src/backend/tests/unit/test_data_class.py::test_add_method_for_strings": 1.1892704990000311, - "src/backend/tests/unit/test_data_class.py::test_add_method_with_non_overlapping_keys": 1.1890747499996905, - "src/backend/tests/unit/test_data_class.py::test_conversion_from_document": 1.2196368339996297, - "src/backend/tests/unit/test_data_class.py::test_conversion_to_document": 1.1908134569998765, - "src/backend/tests/unit/test_data_class.py::test_custom_attribute_get_set_del": 1.1929801669998596, - "src/backend/tests/unit/test_data_class.py::test_custom_attribute_setting_and_getting": 1.1900344170003336, - "src/backend/tests/unit/test_data_class.py::test_data_initialization": 1.2146948340000563, - "src/backend/tests/unit/test_data_class.py::test_deep_copy": 1.1954752910000934, - "src/backend/tests/unit/test_data_class.py::test_dir_includes_data_keys": 2.760468000000401, - "src/backend/tests/unit/test_data_class.py::test_dir_reflects_attribute_deletion": 1.2251055420001649, - "src/backend/tests/unit/test_data_class.py::test_get_text_with_empty_data": 1.2183382499997606, - "src/backend/tests/unit/test_data_class.py::test_get_text_with_none_data": 1.2144034150001062, - "src/backend/tests/unit/test_data_class.py::test_get_text_with_text_key": 1.2315653749997182, - "src/backend/tests/unit/test_data_class.py::test_get_text_without_text_key": 1.2123793340001612, - "src/backend/tests/unit/test_data_class.py::test_str_and_dir_methods": 1.2003138760001093, - "src/backend/tests/unit/test_data_class.py::test_validate_data_with_extra_keys": 1.1931614580003043, - "src/backend/tests/unit/test_data_components.py::test_build_with_multiple_urls": 0.005447873999855801, - "src/backend/tests/unit/test_data_components.py::test_directory_component_build_with_multithreading": 0.0007867510003052303, - "src/backend/tests/unit/test_data_components.py::test_directory_without_mocks": 0.25596470800019233, - "src/backend/tests/unit/test_data_components.py::test_failed_request": 0.00482766699997228, - "src/backend/tests/unit/test_data_components.py::test_parse_curl": 0.0003262509999331087, - "src/backend/tests/unit/test_data_components.py::test_successful_get_request": 0.0054463749997921695, - "src/backend/tests/unit/test_data_components.py::test_timeout": 0.004433167000115645, - "src/backend/tests/unit/test_data_components.py::test_url_component": 0.4809711249999964, - "src/backend/tests/unit/test_database.py::test_create_flow": 1.6828834990005817, - "src/backend/tests/unit/test_database.py::test_create_flow_with_invalid_data": 1.6774957920001725, - "src/backend/tests/unit/test_database.py::test_create_flows": 1.673384124999302, - "src/backend/tests/unit/test_database.py::test_delete_flow": 1.6573062500006017, - "src/backend/tests/unit/test_database.py::test_delete_flows": 1.7055409169997802, - "src/backend/tests/unit/test_database.py::test_delete_flows_with_transaction_and_build": 1.7174484999995911, - "src/backend/tests/unit/test_database.py::test_delete_nonexistent_flow": 1.6730859590002183, - "src/backend/tests/unit/test_database.py::test_download_file": 3.4064119170002414, - "src/backend/tests/unit/test_database.py::test_get_nonexistent_flow": 1.6842376250001507, - "src/backend/tests/unit/test_database.py::test_load_flows": 1.3783337080003548, - "src/backend/tests/unit/test_database.py::test_migrate_transactions": 1.40214775000004, - "src/backend/tests/unit/test_database.py::test_migrate_transactions_no_duckdb": 1.364264834000096, - "src/backend/tests/unit/test_database.py::test_read_flow": 1.6665177079999012, - "src/backend/tests/unit/test_database.py::test_read_flows": 1.7203122079999957, - "src/backend/tests/unit/test_database.py::test_read_only_starter_projects": 1.7277780829995208, - "src/backend/tests/unit/test_database.py::test_sqlite_pragmas": 1.3023467509997317, - "src/backend/tests/unit/test_database.py::test_update_flow": 1.6924472499999865, - "src/backend/tests/unit/test_database.py::test_update_flow_idempotency": 1.7028064580003957, - "src/backend/tests/unit/test_database.py::test_update_nonexistent_flow": 1.7007274170000528, - "src/backend/tests/unit/test_database.py::test_upload_file": 1.6786055420002413, - "src/backend/tests/unit/test_experimental_components.py::test_python_function_component": 1.3152118330008307, - "src/backend/tests/unit/test_files.py::test_delete_file": 1.8698114990006616, - "src/backend/tests/unit/test_files.py::test_download_file": 1.8618997500002479, - "src/backend/tests/unit/test_files.py::test_file_operations": 1.8774095419998957, - "src/backend/tests/unit/test_files.py::test_list_files": 1.8360633750003217, - "src/backend/tests/unit/test_files.py::test_upload_file": 1.8361791669995, - "src/backend/tests/unit/test_frontend_nodes.py::test_frontend_node_to_dict": 1.2789837089994762, - "src/backend/tests/unit/test_frontend_nodes.py::test_template_field_defaults": 1.4903630839994548, - "src/backend/tests/unit/test_frontend_nodes.py::test_template_to_dict": 3.1915530399996896, - "src/backend/tests/unit/test_helper_components.py::test_data_as_text_component": 1.2936121669995373, - "src/backend/tests/unit/test_helper_components.py::test_uuid_generator_component": 1.2925201660000312, - "src/backend/tests/unit/test_initial_setup.py::test_create_or_update_starter_projects": 1.3174052090002988, - "src/backend/tests/unit/test_initial_setup.py::test_get_project_data": 1.3585754989994712, - "src/backend/tests/unit/test_initial_setup.py::test_load_starter_projects": 1.2834318330001224, - "src/backend/tests/unit/test_initial_setup.py::test_refresh_starter_projects": 2.5242092499997852, - "src/backend/tests/unit/test_kubernetes_secrets.py::test_create_secret": 1.277097417000732, - "src/backend/tests/unit/test_kubernetes_secrets.py::test_delete_secret": 1.2887339569997494, - "src/backend/tests/unit/test_kubernetes_secrets.py::test_email_address": 1.3158049170001505, - "src/backend/tests/unit/test_kubernetes_secrets.py::test_encode_string": 1.2695311679999577, - "src/backend/tests/unit/test_kubernetes_secrets.py::test_encode_uuid": 1.259859792000043, - "src/backend/tests/unit/test_kubernetes_secrets.py::test_ends_with_non_alphanumeric": 1.302864874999159, - "src/backend/tests/unit/test_kubernetes_secrets.py::test_get_secret": 1.2660873319996426, - "src/backend/tests/unit/test_kubernetes_secrets.py::test_long_string": 1.2887962920003702, - "src/backend/tests/unit/test_kubernetes_secrets.py::test_starts_with_non_alphanumeric": 1.3552359580003213, - "src/backend/tests/unit/test_kubernetes_secrets.py::test_uuid_case_insensitivity": 1.299499248000302, - "src/backend/tests/unit/test_loading.py::test_load_flow_from_json": 0.0960882499998661, - "src/backend/tests/unit/test_loading.py::test_load_flow_from_json_object": 0.018880542000260903, - "src/backend/tests/unit/test_loading.py::test_load_flow_from_json_with_tweaks": 0.016509083999608265, - "src/backend/tests/unit/test_logger.py::test_enabled": 1.0503544179996425, - "src/backend/tests/unit/test_logger.py::test_get_after_timestamp": 1.057395667000037, - "src/backend/tests/unit/test_logger.py::test_get_before_timestamp": 1.069635374000427, - "src/backend/tests/unit/test_logger.py::test_get_last_n": 1.0638129170001775, - "src/backend/tests/unit/test_logger.py::test_init_default": 3.221781582999938, - "src/backend/tests/unit/test_logger.py::test_init_with_env_variable": 1.1272078760002842, - "src/backend/tests/unit/test_logger.py::test_len": 1.0672918339996613, - "src/backend/tests/unit/test_logger.py::test_max_size": 1.0532803749997584, - "src/backend/tests/unit/test_logger.py::test_write": 1.083741292999548, - "src/backend/tests/unit/test_logger.py::test_write_overflow": 1.0727743750007903, - "src/backend/tests/unit/test_login.py::test_login_successful": 1.495486374999473, - "src/backend/tests/unit/test_login.py::test_login_unsuccessful_wrong_password": 1.2617856669999128, - "src/backend/tests/unit/test_login.py::test_login_unsuccessful_wrong_username": 1.0718942079993212, - "src/backend/tests/unit/test_messages.py::test_add_messages": 1.0813413340001716, - "src/backend/tests/unit/test_messages.py::test_add_messagetables": 1.064473082999939, - "src/backend/tests/unit/test_messages.py::test_convert_to_langchain[convert_to_langchain_type]": 1.0604117919997407, - "src/backend/tests/unit/test_messages.py::test_convert_to_langchain[message]": 1.0689540419998593, - "src/backend/tests/unit/test_messages.py::test_delete_messages": 1.1744598340001176, - "src/backend/tests/unit/test_messages.py::test_get_messages": 1.0707767070002774, - "src/backend/tests/unit/test_messages.py::test_store_message": 1.0799672490002195, - "src/backend/tests/unit/test_process.py::test_load_langchain_object_with_cached_session": 1.0705989160001081, - "src/backend/tests/unit/test_process.py::test_load_langchain_object_with_no_cached_session": 1.0660591649993876, - "src/backend/tests/unit/test_process.py::test_load_langchain_object_without_session_id": 1.0685117090001768, - "src/backend/tests/unit/test_process.py::test_multiple_tweaks": 3.4656270829996174, - "src/backend/tests/unit/test_process.py::test_no_tweaks": 1.0528393340005096, - "src/backend/tests/unit/test_process.py::test_single_tweak": 1.0588130830001319, - "src/backend/tests/unit/test_process.py::test_tweak_no_node_id": 1.0907960420004201, - "src/backend/tests/unit/test_process.py::test_tweak_not_in_template": 1.065006457999516, - "src/backend/tests/unit/test_setup_superuser.py::test_teardown_superuser_default_superuser": 1.0545740010002191, - "src/backend/tests/unit/test_setup_superuser.py::test_teardown_superuser_no_default_superuser": 1.054325458999756, - "src/backend/tests/unit/test_telemetry.py::test_gauge": 1.081740833999902, - "src/backend/tests/unit/test_telemetry.py::test_gauge_with_counter_method": 1.056230042000152, - "src/backend/tests/unit/test_telemetry.py::test_gauge_with_historgram_method": 1.110880250000264, - "src/backend/tests/unit/test_telemetry.py::test_gauge_with_up_down_counter_method": 1.1089114589999554, - "src/backend/tests/unit/test_telemetry.py::test_increment_counter": 1.091222834000746, - "src/backend/tests/unit/test_telemetry.py::test_increment_counter_empty_label": 1.0598395000001801, - "src/backend/tests/unit/test_telemetry.py::test_increment_counter_missing_mandatory_label": 1.0523453739997422, - "src/backend/tests/unit/test_telemetry.py::test_increment_counter_unregisted_metric": 1.060642084000392, - "src/backend/tests/unit/test_telemetry.py::test_init": 1.0586442910002916, - "src/backend/tests/unit/test_telemetry.py::test_missing_labels": 1.0542013740000584, - "src/backend/tests/unit/test_telemetry.py::test_multithreaded_singleton": 1.0596915410001202, - "src/backend/tests/unit/test_telemetry.py::test_multithreaded_singleton_race_condition": 1.078360167000028, - "src/backend/tests/unit/test_telemetry.py::test_opentelementry_singleton": 1.0586542500004725, - "src/backend/tests/unit/test_template.py::test_build_template_from_function": 1.0667507910002314, - "src/backend/tests/unit/test_template.py::test_get_base_classes": 1.0488440839994837, - "src/backend/tests/unit/test_template.py::test_get_default_factory": 1.061691208999946, - "src/backend/tests/unit/test_validate_code.py::test_create_function": 3.7202681249996203, - "src/backend/tests/unit/test_validate_code.py::test_execute_function_missing_function": 1.0697480410003664, - "src/backend/tests/unit/test_validate_code.py::test_execute_function_missing_module": 1.0638055839999652, - "src/backend/tests/unit/test_validate_code.py::test_execute_function_missing_schema": 1.0542077080003764, - "src/backend/tests/unit/test_validate_code.py::test_execute_function_success": 1.0714820839998538, - "src/backend/tests/unit/test_validate_code.py::test_validate_code": 1.0665104990002874, - "src/backend/tests/unit/test_version.py::test_compute_main": 1.0618379169995933, - "src/backend/tests/unit/test_version.py::test_version": 1.0611935000001722, - "src/backend/tests/unit/utils/test_connection_string_parser.py::test_transform_connection_string[protocol::password@host-protocol::password@host]": 0.0002089159997922252, - "src/backend/tests/unit/utils/test_connection_string_parser.py::test_transform_connection_string[protocol:user:pa:ss:word@host-protocol:user:pa:ss:word@host]": 0.0002251249998153071, - "src/backend/tests/unit/utils/test_connection_string_parser.py::test_transform_connection_string[protocol:user:pa@ss@word@host-protocol:user:pa%40ss%40word@host]": 0.0002600429997983156, - "src/backend/tests/unit/utils/test_connection_string_parser.py::test_transform_connection_string[protocol:user:pass@word@host-protocol:user:pass%40word@host]": 0.0002567910000834672, - "src/backend/tests/unit/utils/test_connection_string_parser.py::test_transform_connection_string[protocol:user:password@-protocol:user:password@]": 0.0002196240002376726, - "src/backend/tests/unit/utils/test_connection_string_parser.py::test_transform_connection_string[protocol:user:password@host-protocol:user:password@host]": 0.0002557500001785229, - "src/backend/tests/unit/utils/test_connection_string_parser.py::test_transform_connection_string[protocol:user@host-protocol:user@host]": 0.00021862499943381408, - "src/backend/tests/unit/utils/test_connection_string_parser.py::test_transform_connection_string[user:password@host-user:password@host]": 0.0002157910003006691 + "src/backend/tests/unit/test_custom_component.py::test_list_flows_return_type": 0.36947908403817564, + "src/backend/tests/unit/test_custom_component_with_client.py::test_list_flows_flow_objects": 4.498874542012345, + "src/backend/tests/unit/test_data_class.py::test_add_method_for_integers": 0.00033433298813179135, + "src/backend/tests/unit/test_data_class.py::test_add_method_for_strings": 0.0003061249735765159, + "src/backend/tests/unit/test_data_class.py::test_add_method_with_non_overlapping_keys": 0.00044004200026392937, + "src/backend/tests/unit/test_data_class.py::test_conversion_from_document": 0.0002981260186061263, + "src/backend/tests/unit/test_data_class.py::test_conversion_to_document": 0.00037058297311887145, + "src/backend/tests/unit/test_data_class.py::test_custom_attribute_get_set_del": 0.00030108302598819137, + "src/backend/tests/unit/test_data_class.py::test_custom_attribute_setting_and_getting": 0.00029091595206409693, + "src/backend/tests/unit/test_data_class.py::test_data_initialization": 0.0006093750707805157, + "src/backend/tests/unit/test_data_class.py::test_deep_copy": 0.00027412595227360725, + "src/backend/tests/unit/test_data_class.py::test_dir_includes_data_keys": 0.00036174996057525277, + "src/backend/tests/unit/test_data_class.py::test_dir_reflects_attribute_deletion": 0.0003001660224981606, + "src/backend/tests/unit/test_data_class.py::test_get_text_with_empty_data": 0.00027429102919995785, + "src/backend/tests/unit/test_data_class.py::test_get_text_with_none_data": 0.0002610410447232425, + "src/backend/tests/unit/test_data_class.py::test_get_text_with_text_key": 0.0002877499791793525, + "src/backend/tests/unit/test_data_class.py::test_get_text_without_text_key": 0.00039620796451345086, + "src/backend/tests/unit/test_data_class.py::test_str_and_dir_methods": 0.00043566705426201224, + "src/backend/tests/unit/test_data_class.py::test_validate_data_with_extra_keys": 0.0003074160194955766, + "src/backend/tests/unit/test_data_components.py::test_build_with_multiple_urls": 0.015901083999779075, + "src/backend/tests/unit/test_data_components.py::test_directory_component_build_with_multithreading": 0.0019602919346652925, + "src/backend/tests/unit/test_data_components.py::test_directory_without_mocks": 0.08891058299923316, + "src/backend/tests/unit/test_data_components.py::test_failed_request": 0.01442495797527954, + "src/backend/tests/unit/test_data_components.py::test_parse_curl": 0.0009977090521715581, + "src/backend/tests/unit/test_data_components.py::test_successful_get_request": 0.010583875002339482, + "src/backend/tests/unit/test_data_components.py::test_timeout": 0.00837341690203175, + "src/backend/tests/unit/test_data_components.py::test_url_component": 0.24645916698500514, + "src/backend/tests/unit/test_database.py::test_create_flow": 5.127251083904412, + "src/backend/tests/unit/test_database.py::test_create_flow_with_invalid_data": 5.224326541996561, + "src/backend/tests/unit/test_database.py::test_create_flows": 3.537977208965458, + "src/backend/tests/unit/test_database.py::test_delete_flow": 2.998433125030715, + "src/backend/tests/unit/test_database.py::test_delete_flows": 4.002111000008881, + "src/backend/tests/unit/test_database.py::test_delete_flows_with_transaction_and_build": 5.505517375015188, + "src/backend/tests/unit/test_database.py::test_delete_nonexistent_flow": 4.838145291025285, + "src/backend/tests/unit/test_database.py::test_download_file": 3.6044614590355195, + "src/backend/tests/unit/test_database.py::test_get_nonexistent_flow": 3.5974671249859966, + "src/backend/tests/unit/test_database.py::test_load_flows": 2.4904161670128815, + "src/backend/tests/unit/test_database.py::test_migrate_transactions": 3.3142859160434455, + "src/backend/tests/unit/test_database.py::test_migrate_transactions_no_duckdb": 4.5406213329406455, + "src/backend/tests/unit/test_database.py::test_read_flow": 5.121038749057334, + "src/backend/tests/unit/test_database.py::test_read_flows": 3.660002124030143, + "src/backend/tests/unit/test_database.py::test_read_only_starter_projects": 3.6530590419424698, + "src/backend/tests/unit/test_database.py::test_sqlite_pragmas": 3.192982708045747, + "src/backend/tests/unit/test_database.py::test_update_flow": 3.5030196660081856, + "src/backend/tests/unit/test_database.py::test_update_flow_idempotency": 2.922055457078386, + "src/backend/tests/unit/test_database.py::test_update_nonexistent_flow": 3.74330650101183, + "src/backend/tests/unit/test_database.py::test_upload_file": 2.987421375059057, + "src/backend/tests/unit/test_endpoints.py::test_build_vertex_invalid_flow_id": 3.191926500061527, + "src/backend/tests/unit/test_endpoints.py::test_build_vertex_invalid_vertex_id": 5.576961666985881, + "src/backend/tests/unit/test_endpoints.py::test_get_all": 3.0514157909783535, + "src/backend/tests/unit/test_endpoints.py::test_get_vertices": 5.105153874028474, + "src/backend/tests/unit/test_endpoints.py::test_get_vertices_flow_not_found": 3.7256477079354227, + "src/backend/tests/unit/test_endpoints.py::test_invalid_flow_id": 3.5856346240034327, + "src/backend/tests/unit/test_endpoints.py::test_invalid_prompt": 2.686517208989244, + "src/backend/tests/unit/test_endpoints.py::test_invalid_run_with_input_type_chat": 3.052263376011979, + "src/backend/tests/unit/test_endpoints.py::test_post_validate_code": 3.117296125041321, + "src/backend/tests/unit/test_endpoints.py::test_starter_projects": 2.871985792007763, + "src/backend/tests/unit/test_endpoints.py::test_successful_run_no_payload": 7.301038249977864, + "src/backend/tests/unit/test_endpoints.py::test_successful_run_with_input_type_any": 10.727296584052965, + "src/backend/tests/unit/test_endpoints.py::test_successful_run_with_input_type_chat": 6.699964084022213, + "src/backend/tests/unit/test_endpoints.py::test_successful_run_with_input_type_text": 6.435781583015341, + "src/backend/tests/unit/test_endpoints.py::test_successful_run_with_output_type_any": 2.60208841599524, + "src/backend/tests/unit/test_endpoints.py::test_successful_run_with_output_type_debug": 7.752158374991268, + "src/backend/tests/unit/test_endpoints.py::test_successful_run_with_output_type_text": 15.427432750933804, + "src/backend/tests/unit/test_endpoints.py::test_valid_prompt": 2.756689875095617, + "src/backend/tests/unit/test_endpoints.py::test_various_prompts[The weather is {weather} today.-expected_input_variables1]": 2.8440902908914723, + "src/backend/tests/unit/test_endpoints.py::test_various_prompts[This prompt has no variables.-expected_input_variables2]": 3.201118874945678, + "src/backend/tests/unit/test_endpoints.py::test_various_prompts[{a}, {b}, and {c} are variables.-expected_input_variables3]": 2.482491874950938, + "src/backend/tests/unit/test_endpoints.py::test_various_prompts[{color} is my favorite color.-expected_input_variables0]": 2.9541310409549624, + "src/backend/tests/unit/test_experimental_components.py::test_python_function_component": 0.0005039580864831805, + "src/backend/tests/unit/test_files.py::test_delete_file": 2.8763427079538815, + "src/backend/tests/unit/test_files.py::test_download_file": 3.294751874054782, + "src/backend/tests/unit/test_files.py::test_file_operations": 2.8885202910169028, + "src/backend/tests/unit/test_files.py::test_list_files": 3.0035152910277247, + "src/backend/tests/unit/test_files.py::test_upload_file": 3.253328792983666, + "src/backend/tests/unit/test_frontend_nodes.py::test_frontend_node_to_dict": 0.0030099580180831254, + "src/backend/tests/unit/test_frontend_nodes.py::test_template_field_defaults": 0.00038308301009237766, + "src/backend/tests/unit/test_frontend_nodes.py::test_template_to_dict": 0.0011379160569049418, + "src/backend/tests/unit/test_helper_components.py::test_data_as_text_component": 0.0020189170027151704, + "src/backend/tests/unit/test_helper_components.py::test_uuid_generator_component": 0.005951832048594952, + "src/backend/tests/unit/test_initial_setup.py::test_create_or_update_starter_projects": 2.4876928760204464, + "src/backend/tests/unit/test_initial_setup.py::test_get_project_data": 2.4432279990869574, + "src/backend/tests/unit/test_initial_setup.py::test_load_starter_projects": 2.868139374011662, + "src/backend/tests/unit/test_initial_setup.py::test_refresh_starter_projects": 5.7177311679697596, + "src/backend/tests/unit/test_kubernetes_secrets.py::test_create_secret": 1.9582560420385562, + "src/backend/tests/unit/test_kubernetes_secrets.py::test_delete_secret": 2.389675415935926, + "src/backend/tests/unit/test_kubernetes_secrets.py::test_email_address": 2.3270480830105953, + "src/backend/tests/unit/test_kubernetes_secrets.py::test_encode_string": 2.155345457023941, + "src/backend/tests/unit/test_kubernetes_secrets.py::test_encode_uuid": 2.7869142910349183, + "src/backend/tests/unit/test_kubernetes_secrets.py::test_ends_with_non_alphanumeric": 1.9956887899897993, + "src/backend/tests/unit/test_kubernetes_secrets.py::test_get_secret": 2.3893265000660904, + "src/backend/tests/unit/test_kubernetes_secrets.py::test_long_string": 2.5059052080614492, + "src/backend/tests/unit/test_kubernetes_secrets.py::test_starts_with_non_alphanumeric": 2.6645933760446496, + "src/backend/tests/unit/test_kubernetes_secrets.py::test_uuid_case_insensitivity": 2.3025795420981012, + "src/backend/tests/unit/test_loading.py::test_load_flow_from_json": 1.2976477909833193, + "src/backend/tests/unit/test_loading.py::test_load_flow_from_json_object": 0.008532750012818724, + "src/backend/tests/unit/test_loading.py::test_load_flow_from_json_with_tweaks": 0.005636290996335447, + "src/backend/tests/unit/test_logger.py::test_enabled": 0.00033791596069931984, + "src/backend/tests/unit/test_logger.py::test_get_after_timestamp": 0.00033074902603402734, + "src/backend/tests/unit/test_logger.py::test_get_before_timestamp": 0.0003540000761859119, + "src/backend/tests/unit/test_logger.py::test_get_last_n": 0.0010117499623447657, + "src/backend/tests/unit/test_logger.py::test_init_default": 0.0012091670650988817, + "src/backend/tests/unit/test_logger.py::test_init_with_env_variable": 0.0006678340141661465, + "src/backend/tests/unit/test_logger.py::test_len": 0.0004001249326393008, + "src/backend/tests/unit/test_logger.py::test_max_size": 0.00028612592723220587, + "src/backend/tests/unit/test_logger.py::test_write": 0.00045541703002527356, + "src/backend/tests/unit/test_logger.py::test_write_overflow": 0.00032337504671886563, + "src/backend/tests/unit/test_login.py::test_login_successful": 2.795972707972396, + "src/backend/tests/unit/test_login.py::test_login_unsuccessful_wrong_password": 2.452121749985963, + "src/backend/tests/unit/test_login.py::test_login_unsuccessful_wrong_username": 2.353854291024618, + "src/backend/tests/unit/test_messages.py::test_add_messages": 1.966487625031732, + "src/backend/tests/unit/test_messages.py::test_add_messagetables": 2.361863334022928, + "src/backend/tests/unit/test_messages.py::test_convert_to_langchain[convert_to_langchain_type]": 2.4220113739720546, + "src/backend/tests/unit/test_messages.py::test_convert_to_langchain[message]": 2.848500917025376, + "src/backend/tests/unit/test_messages.py::test_delete_messages": 2.3732009579543956, + "src/backend/tests/unit/test_messages.py::test_get_messages": 2.8447752079810016, + "src/backend/tests/unit/test_messages.py::test_store_message": 2.08129950100556, + "src/backend/tests/unit/test_messages_endpoints.py::test_delete_messages": 3.083023541024886, + "src/backend/tests/unit/test_messages_endpoints.py::test_delete_messages_session": 2.9022462490247563, + "src/backend/tests/unit/test_messages_endpoints.py::test_update_message": 2.7309321249485947, + "src/backend/tests/unit/test_messages_endpoints.py::test_update_message_not_found": 2.71192433295073, + "src/backend/tests/unit/test_process.py::test_load_langchain_object_with_cached_session": 2.4839380000485107, + "src/backend/tests/unit/test_process.py::test_load_langchain_object_with_no_cached_session": 2.9178847920848057, + "src/backend/tests/unit/test_process.py::test_load_langchain_object_without_session_id": 2.8941064990358427, + "src/backend/tests/unit/test_process.py::test_multiple_tweaks": 2.5230258330120705, + "src/backend/tests/unit/test_process.py::test_no_tweaks": 2.4845038329949602, + "src/backend/tests/unit/test_process.py::test_single_tweak": 2.4502264168695547, + "src/backend/tests/unit/test_process.py::test_tweak_no_node_id": 2.7300714169978164, + "src/backend/tests/unit/test_process.py::test_tweak_not_in_template": 3.3537612090585753, + "src/backend/tests/unit/test_schema.py::TestInput::test_field_type_str": 0.0005948750185780227, + "src/backend/tests/unit/test_schema.py::TestInput::test_field_type_type": 0.00042970903450623155, + "src/backend/tests/unit/test_schema.py::TestInput::test_input_to_dict": 0.0010768340434879065, + "src/backend/tests/unit/test_schema.py::TestInput::test_invalid_field_type": 0.0010708340560086071, + "src/backend/tests/unit/test_schema.py::TestInput::test_post_process_type_function": 0.0012357080704532564, + "src/backend/tests/unit/test_schema.py::TestInput::test_serialize_field_type": 0.00046479201409965754, + "src/backend/tests/unit/test_schema.py::TestInput::test_validate_type_class": 0.0006184999947436154, + "src/backend/tests/unit/test_schema.py::TestInput::test_validate_type_string": 0.00040066702058538795, + "src/backend/tests/unit/test_schema.py::TestOutput::test_output_add_types": 0.0004017909523099661, + "src/backend/tests/unit/test_schema.py::TestOutput::test_output_default": 0.00041379104368388653, + "src/backend/tests/unit/test_schema.py::TestOutput::test_output_set_selected": 0.00044112600153312087, + "src/backend/tests/unit/test_schema.py::TestOutput::test_output_to_dict": 0.0003872510278597474, + "src/backend/tests/unit/test_schema.py::TestOutput::test_output_validate_display_name": 0.0005081669660285115, + "src/backend/tests/unit/test_schema.py::TestOutput::test_output_validate_model": 0.0014921249821782112, + "src/backend/tests/unit/test_schema.py::TestPostProcessType::test_custom_type": 0.00036487600300461054, + "src/backend/tests/unit/test_schema.py::TestPostProcessType::test_int_type": 0.0005036659422330558, + "src/backend/tests/unit/test_schema.py::TestPostProcessType::test_list_custom_type": 0.001383666938636452, + "src/backend/tests/unit/test_schema.py::TestPostProcessType::test_list_int_type": 0.0003718330408446491, + "src/backend/tests/unit/test_schema.py::TestPostProcessType::test_union_custom_type": 0.0003910410450771451, + "src/backend/tests/unit/test_schema.py::TestPostProcessType::test_union_type": 0.0020738329621963203, + "src/backend/tests/unit/test_setup_superuser.py::test_teardown_superuser_default_superuser": 2.970154915994499, + "src/backend/tests/unit/test_setup_superuser.py::test_teardown_superuser_no_default_superuser": 2.52261962502962, + "src/backend/tests/unit/test_telemetry.py::test_gauge": 3.1998873339616694, + "src/backend/tests/unit/test_telemetry.py::test_gauge_with_counter_method": 2.5295122920069844, + "src/backend/tests/unit/test_telemetry.py::test_gauge_with_historgram_method": 2.5291368339094333, + "src/backend/tests/unit/test_telemetry.py::test_gauge_with_up_down_counter_method": 2.441234875994269, + "src/backend/tests/unit/test_telemetry.py::test_increment_counter": 2.5292067090049386, + "src/backend/tests/unit/test_telemetry.py::test_increment_counter_empty_label": 2.843116457981523, + "src/backend/tests/unit/test_telemetry.py::test_increment_counter_missing_mandatory_label": 2.4626984579954296, + "src/backend/tests/unit/test_telemetry.py::test_increment_counter_unregisted_metric": 2.6637080420041457, + "src/backend/tests/unit/test_telemetry.py::test_init": 2.430767166952137, + "src/backend/tests/unit/test_telemetry.py::test_missing_labels": 2.2437128739547916, + "src/backend/tests/unit/test_telemetry.py::test_multithreaded_singleton": 2.9899119589827023, + "src/backend/tests/unit/test_telemetry.py::test_multithreaded_singleton_race_condition": 2.874815374962054, + "src/backend/tests/unit/test_telemetry.py::test_opentelementry_singleton": 2.434948291920591, + "src/backend/tests/unit/test_template.py::test_build_template_from_function": 0.0023095000069588423, + "src/backend/tests/unit/test_template.py::test_get_base_classes": 0.0009337090305052698, + "src/backend/tests/unit/test_template.py::test_get_default_factory": 0.00046029197983443737, + "src/backend/tests/unit/test_user.py::test_add_user": 3.429326084034983, + "src/backend/tests/unit/test_user.py::test_data_consistency_after_delete": 3.084409792034421, + "src/backend/tests/unit/test_user.py::test_data_consistency_after_update": 4.112100625992753, + "src/backend/tests/unit/test_user.py::test_deactivated_user_cannot_access": 3.187602208054159, + "src/backend/tests/unit/test_user.py::test_deactivated_user_cannot_login": 2.550756209064275, + "src/backend/tests/unit/test_user.py::test_delete_user": 3.7109769160160795, + "src/backend/tests/unit/test_user.py::test_delete_user_wrong_id": 3.291543999046553, + "src/backend/tests/unit/test_user.py::test_inactive_user": 3.2723513320670463, + "src/backend/tests/unit/test_user.py::test_normal_user_cant_delete_user": 3.7365196659811772, + "src/backend/tests/unit/test_user.py::test_normal_user_cant_read_all_users": 3.938592832942959, + "src/backend/tests/unit/test_user.py::test_patch_reset_password": 4.011823332984932, + "src/backend/tests/unit/test_user.py::test_patch_user": 3.110160624026321, + "src/backend/tests/unit/test_user.py::test_patch_user_wrong_id": 3.0659845010377467, + "src/backend/tests/unit/test_user.py::test_read_all_users": 2.8889535000780597, + "src/backend/tests/unit/test_user.py::test_user_waiting_for_approval": 2.578539165959228, + "src/backend/tests/unit/test_validate_code.py::test_create_function": 0.0017862499225884676, + "src/backend/tests/unit/test_validate_code.py::test_execute_function_missing_function": 0.0009927490027621388, + "src/backend/tests/unit/test_validate_code.py::test_execute_function_missing_module": 0.0012502089375630021, + "src/backend/tests/unit/test_validate_code.py::test_execute_function_missing_schema": 0.002157249953597784, + "src/backend/tests/unit/test_validate_code.py::test_execute_function_success": 0.0005792500451207161, + "src/backend/tests/unit/test_validate_code.py::test_validate_code": 0.001845582912210375, + "src/backend/tests/unit/test_version.py::test_compute_main": 2.6987011659657583, + "src/backend/tests/unit/test_version.py::test_version": 2.45842487498885, + "src/backend/tests/unit/test_webhook.py::test_webhook_endpoint": 16.56281495897565, + "src/backend/tests/unit/test_webhook.py::test_webhook_flow_on_run_endpoint": 8.454458000021987, + "src/backend/tests/unit/test_webhook.py::test_webhook_with_random_payload": 7.648270000063349, + "src/backend/tests/unit/utils/test_connection_string_parser.py::test_transform_connection_string[protocol::password@host-protocol::password@host]": 0.0005409579607658088, + "src/backend/tests/unit/utils/test_connection_string_parser.py::test_transform_connection_string[protocol:user:pa:ss:word@host-protocol:user:pa:ss:word@host]": 0.0005487080197781324, + "src/backend/tests/unit/utils/test_connection_string_parser.py::test_transform_connection_string[protocol:user:pa@ss@word@host-protocol:user:pa%40ss%40word@host]": 0.0005739580374211073, + "src/backend/tests/unit/utils/test_connection_string_parser.py::test_transform_connection_string[protocol:user:pass@word@host-protocol:user:pass%40word@host]": 0.0005274589639157057, + "src/backend/tests/unit/utils/test_connection_string_parser.py::test_transform_connection_string[protocol:user:password@-protocol:user:password@]": 0.00048216601135209203, + "src/backend/tests/unit/utils/test_connection_string_parser.py::test_transform_connection_string[protocol:user:password@host-protocol:user:password@host]": 0.0006742500117979944, + "src/backend/tests/unit/utils/test_connection_string_parser.py::test_transform_connection_string[protocol:user@host-protocol:user@host]": 0.0006230419385246933, + "src/backend/tests/unit/utils/test_connection_string_parser.py::test_transform_connection_string[user:password@host-user:password@host]": 0.0008930000476539135 } \ No newline at end of file diff --git a/src/backend/tests/conftest.py b/src/backend/tests/conftest.py index 396c5b760..e2a020a92 100644 --- a/src/backend/tests/conftest.py +++ b/src/backend/tests/conftest.py @@ -4,10 +4,10 @@ import shutil # we need to import tmpdir import tempfile +from collections.abc import AsyncGenerator from contextlib import contextmanager, suppress from pathlib import Path from typing import TYPE_CHECKING -from collections.abc import AsyncGenerator import orjson import pytest @@ -16,6 +16,7 @@ from fastapi.testclient import TestClient from httpx import AsyncClient from sqlmodel import Session, SQLModel, create_engine, select from sqlmodel.pool import StaticPool +from tests.api_keys import get_openai_api_key from typer.testing import CliRunner from langflow.graph.graph.base import Graph @@ -27,7 +28,6 @@ from langflow.services.database.models.folder.model import Folder from langflow.services.database.models.user.model import User, UserCreate from langflow.services.database.utils import session_getter from langflow.services.deps import get_db_service -from tests.api_keys import get_openai_api_key if TYPE_CHECKING: from langflow.services.database.service import DatabaseService @@ -175,7 +175,7 @@ def basic_graph_data(): @pytest.fixture def basic_graph(): - return get_graph() + yield get_graph() @pytest.fixture @@ -416,7 +416,8 @@ def added_webhook_test(client, json_webhook_test, logged_in_headers): assert response.status_code == 201 assert response.json()["name"] == webhook_test.name assert response.json()["data"] == webhook_test.data - return response.json() + yield response.json() + client.delete(f"api/v1/flows/{response.json()['id']}", headers=logged_in_headers) @pytest.fixture diff --git a/src/backend/tests/unit/components/models/test_ChatOllama_component.py b/src/backend/tests/unit/components/models/test_ChatOllama_component.py index abd0d0c94..d78c09a3f 100644 --- a/src/backend/tests/unit/components/models/test_ChatOllama_component.py +++ b/src/backend/tests/unit/components/models/test_ChatOllama_component.py @@ -1,9 +1,16 @@ -import pytest -from unittest.mock import patch, MagicMock -from langflow.components.models.OllamaModel import ChatOllamaComponent -from langchain_community.chat_models.ollama import ChatOllama +from unittest.mock import MagicMock, patch from urllib.parse import urljoin +import pytest +from langchain_community.chat_models.ollama import ChatOllama + +from langflow.components.models.OllamaModel import ChatOllamaComponent + + +@pytest.fixture +def client(): + pass + @pytest.fixture def component(): diff --git a/src/backend/tests/unit/graph/graph/test_callback_graph.py b/src/backend/tests/unit/graph/graph/test_callback_graph.py index 89a63bfda..d70c7cbe4 100644 --- a/src/backend/tests/unit/graph/graph/test_callback_graph.py +++ b/src/backend/tests/unit/graph/graph/test_callback_graph.py @@ -1,5 +1,7 @@ import asyncio +import pytest + from langflow.components.outputs.ChatOutput import ChatOutput from langflow.custom.custom_component.component import Component from langflow.events.event_manager import EventManager @@ -9,6 +11,11 @@ from langflow.schema.message import Message from langflow.template.field.base import Output +@pytest.fixture +def client(): + pass + + class LogComponent(Component): name = "LogComponent" inputs = [IntInput(name="times", value=1)] diff --git a/src/backend/tests/unit/graph/test_graph.py b/src/backend/tests/unit/graph/test_graph.py index 3d26d0744..9fe0d4e62 100644 --- a/src/backend/tests/unit/graph/test_graph.py +++ b/src/backend/tests/unit/graph/test_graph.py @@ -25,6 +25,11 @@ from langflow.utils.payload import get_root_vertex # BASIC_EXAMPLE_PATH, COMPLEX_EXAMPLE_PATH, OPENAPI_EXAMPLE_PATH +@pytest.fixture +def client(): + pass + + @pytest.fixture def sample_template(): return {