From 8441acc58affe12a21603cfb03e2bdec9b177f90 Mon Sep 17 00:00:00 2001 From: Artem Zhuravel Date: Fri, 20 Feb 2026 20:45:32 +0530 Subject: [PATCH 1/2] Added qualitative analysis pipeline --- experiments/kdd 2026/.DS_Store | Bin 0 -> 8196 bytes .../bayesian_boostrapping_results.json | 1898 +++++ .../qualitative_data_analysis.ipynb | 3789 ++++++++++ .../qualitative_data_extraction.ipynb | 2304 +++++++ .../test_suites/box_bench.json | 2246 ++++++ .../test_suites/calendar_bench.json | 6079 +++++++++++++++++ .../test_suites/linear_bench.json | 3388 +++++++++ .../test_suites/slack_bench_v2.json | 4065 +++++++++++ .../utils/bayes_bootstrap.py | 595 ++ .../utils/clean_server_errors.py | 180 + .../utils/create_tests_metadata.py | 245 + .../utils/unified_error_classifier.py | 1384 ++++ .../quantitative_analysis.ipynb | 0 13 files changed, 26173 insertions(+) create mode 100644 experiments/kdd 2026/.DS_Store create mode 100644 experiments/kdd 2026/bayesian_bootstrap_results/qualitative/bayesian_boostrapping_results.json create mode 100644 experiments/kdd 2026/qualitative_analysis/qualitative_data_analysis.ipynb create mode 100644 experiments/kdd 2026/qualitative_analysis/qualitative_data_extraction.ipynb create mode 100644 experiments/kdd 2026/qualitative_analysis/test_suites/box_bench.json create mode 100644 experiments/kdd 2026/qualitative_analysis/test_suites/calendar_bench.json create mode 100644 experiments/kdd 2026/qualitative_analysis/test_suites/linear_bench.json create mode 100644 experiments/kdd 2026/qualitative_analysis/test_suites/slack_bench_v2.json create mode 100644 experiments/kdd 2026/qualitative_analysis/utils/bayes_bootstrap.py create mode 100644 experiments/kdd 2026/qualitative_analysis/utils/clean_server_errors.py create mode 100644 experiments/kdd 2026/qualitative_analysis/utils/create_tests_metadata.py create mode 100644 experiments/kdd 2026/qualitative_analysis/utils/unified_error_classifier.py rename experiments/kdd 2026/{ => quantitative_analysis}/quantitative_analysis.ipynb (100%) diff --git a/experiments/kdd 2026/.DS_Store b/experiments/kdd 2026/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..4bc16842a5f5c3e6dac2887db01960ba1227a573 GIT binary patch literal 8196 zcmeHMU2GIp6uxI#U`7~wTT1BwwWBKv+LY36NfE{E5C1JKZ2$RLW_JddFr6tovsDhVMnK8(_Z*!@joeD+LhQn*r#6i}a#95F~hY~m4jnsl@f zMIeem6oDuLQ3Rq0{2L;G?`+oO8Q%MX8}(5Hq6qviBf#zl9Un#$AuR~XuMX^Z34oN9 z0KDNC>j18!hcpq=f}mU#ZHnpvLRAP$3=rzb*O@rdL`VyQ3UvZPoj|xVgcS<#-BC~H z;sg?cMtu~4C<4gq0m zR8%}~{sL?Z7wk(O_C}I{5#;<9BfE#qx;@WHPmYaruWgN_XnCvW28QigS*~E47K-fc zvt830Y4LKd>2uwrU?|v9v~qMb9&f7A8{+H6YV^_d^>sCRe0}}cm?AHUt=X_Ub;KER zy%WMc2(JjDUgPe`+4}1E`Bvd;QRAeqUxvQQ%1sLwsW)pqy}fR^hN< zzt_t8NK>@LNB6g7Jhv-rF@9ghb8*#_bQn!8EDwtR&w(^!8lZ6D3q!2=VEOUvjjny&6Oan}ydWLl<7#}&?rX}Y$Daayw$_NFZJ zLE?LmjxzKTYH?TboQf@Uo#7yEv2DZr(=N;|C|uFUxXl5_z%2Dlv?mJ6PZ&9!n*b zNQiZO?NyUF*-UnlG$z}_kcJ~L3`fC-0LI`EcoZIk$Ke@x7M_FW;RQGiXW%t> z9o~kE@Bw@XAHipE2`t^@_7g zlZmz`^d%%x3J0^gR4~!POGSEhhD58{vUTgW?P~jfBGJAmVX0NVq+)61tt{V~?rXjZ zO@ZY}`2IC1cqUBAAD#&uDc7KQLR+?cMU`5u&y>17m_pVunPn|q5K7;^QpOab^TO%s zyKuUL&KJ|F+BKNa<5c2PwW=YmU{cbea9XsvGWAFga=Q#ENChwT)`EN{OO` zM%p%^k&E;?BL6b^np{ET|BlFC1f_`gl~9XlPrznqhYrO1E=a;&*oTNe!13|e?1|4lRh{(pl{8Eqd$Ad0|TMgWT2 zl5H)x!%Vl7gghOe1NgAU test info)\n", + "tests_metadata = get_or_create_tests_metadata(\n", + " merged_results_path=MERGED_RESULTS_FILE,\n", + " test_suites_folder=\"test_suites\",\n", + " output_folder=\"tests_metadata\"\n", + ")\n", + "print(f\"Loaded metadata for {len(tests_metadata)} tests\")\n", + "\n", + "\"\"\"\n", + "Expected format for `tests_metadata` (dict):\n", + "{\n", + " \"\": {\n", + " \"test_suite_name\": str, # e.g., \"Slack Bench v2\"\n", + " \"test_suite_test_id\": str # e.g., \"test_1\"\n", + " },\n", + " ...\n", + "}\n", + "\"\"\"\n", + "\n", + "QUALITATIVE_ANALYSIS_FILE = \"qualitative_analysis_results/analysis_results_20260208_163451.json\"\n", + "with open(QUALITATIVE_ANALYSIS_FILE, \"r\") as f:\n", + " qualitative_analysis = json.load(f)\n", + "print(f\"Loaded {len(qualitative_analysis)} from {QUALITATIVE_ANALYSIS_FILE}\") \n", + "\n", + "\"\"\"\n", + "Expected format for `qualitative_analysis` (list of dicts):\n", + "[\n", + " {\n", + " \"run_id\": str, # Unique run UUID\n", + " \"runtime_test_id\": str, # Runtime test ID (UUID)\n", + " \"compared_against\": str, # run_id of the reference run used for comparison\n", + " \"run_analysis\": {\n", + " \"tool_use_errors\": { # Nested under tool_use_errors (4 subtypes)\n", + " \"endpoint_selection\": {\"present\": bool, \"explanation\": str, \"example\": str},\n", + " \"parameter_misuse\": {\"present\": bool, \"explanation\": str, \"example\": str},\n", + " \"format_errors\": {\"present\": bool, \"explanation\": str, \"example\": str},\n", + " \"code_errors\": {\"present\": bool, \"explanation\": str, \"example\": str}\n", + " },\n", + " \"model_refusal\": {\"present\": bool, \"explanation\": str, \"example\": str},\n", + " \"hallucination_errors\": { # 7 subtypes\n", + " \"parameter_hallucination\": {\"present\": bool, \"example\": str},\n", + " \"outcome_hallucination\": {\"present\": bool, \"example\": str},\n", + " \"state_hallucination\": {\"present\": bool, \"example\": str},\n", + " \"action_hallucination\": {\"present\": bool, \"example\": str},\n", + " \"capability_hallucination\": {\"present\": bool, \"example\": str},\n", + " \"context_hallucination\": {\"present\": bool, \"example\": str},\n", + " \"other_hallucination\": {\"present\": bool, \"explanation\": str, \"example\": str}\n", + " },\n", + " \"reasoning_errors\": { # 18 subtypes (includes infinite_loop_error, premature_termination_error)\n", + " \"time_orientation_error\": {\"present\": bool, \"example\": str},\n", + " \"state_tracking_error\": {\"present\": bool, \"example\": str},\n", + " \"goal_misalignment_error\": {\"present\": bool, \"example\": str},\n", + " \"causal_reasoning_error\": {\"present\": bool, \"example\": str},\n", + " \"confirmation_bias\": {\"present\": bool, \"example\": str},\n", + " \"logical_fallacy\": {\"present\": bool, \"example\": str},\n", + " \"assumption_error\": {\"present\": bool, \"example\": str},\n", + " \"negation_error\": {\"present\": bool, \"example\": str},\n", + " \"scope_generalization_error\": {\"present\": bool, \"example\": str},\n", + " \"dependency_ordering_error\": {\"present\": bool, \"example\": str},\n", + " \"incomplete_execution_error\": {\"present\": bool, \"example\": str},\n", + " \"premature_termination_error\": {\"present\": bool, \"example\": str},\n", + " \"quantitative_reasoning_error\": {\"present\": bool, \"example\": str},\n", + " \"reference_resolution_error\": {\"present\": bool, \"example\": str},\n", + " \"instruction_fidelity_error\": {\"present\": bool, \"example\": str},\n", + " \"reasoning_action_mismatch\": {\"present\": bool, \"example\": str},\n", + " \"other_reasoning_error\": {\"present\": bool, \"explanation\": str, \"example\": str},\n", + " \"infinite_loop_error\": {\"present\": bool, \"explanation\": str, \"example\": str}\n", + " },\n", + " \"recovery_strategies\": { # 15 subtypes\n", + " \"retry_same\": {\"present\": bool, \"example\": str},\n", + " \"retry_modified_params\": {\"present\": bool, \"example\": str},\n", + " \"switch_tool\": {\"present\": bool, \"example\": str},\n", + " \"lookup_correct_value\": {\"present\": bool, \"example\": str},\n", + " \"backtrack\": {\"present\": bool, \"example\": str},\n", + " \"parse_error_message\": {\"present\": bool, \"example\": str},\n", + " \"handle_ui_obstacle\": {\"present\": bool, \"example\": str},\n", + " \"change_strategy\": {\"present\": bool, \"example\": str},\n", + " \"break_into_steps\": {\"present\": bool, \"example\": str},\n", + " \"verify_prerequisites\": {\"present\": bool, \"example\": str},\n", + " \"skip_and_continue\": {\"present\": bool, \"example\": str},\n", + " \"wait_and_retry\": {\"present\": bool, \"example\": str},\n", + " \"use_fallback\": {\"present\": bool, \"example\": str},\n", + " \"other_recovery_strategy\": {\"present\": bool, \"explanation\": str, \"example\": str},\n", + " \"no_recovery_attempted\": {\"present\": bool, \"example\": str}\n", + " },\n", + " \"other_error\": {\"present\": bool, \"explanation\": str, \"example\": str},\n", + " \"qualitative_summary\": { # 16 fields (5 scores)\n", + " \"planning_score\": int, # 0-5 planning quality score\n", + " \"planning_explanation\": str,\n", + " \"reasoning_score\": int, # 0-5 reasoning quality score\n", + " \"reasoning_explanation\": str,\n", + " \"tool_use_score\": int, # 0-5 API/tool handling score\n", + " \"tool_use_explanation\": str,\n", + " \"recovery_score\": int, # 0-5 recovery ability score\n", + " \"recovery_explanation\": str,\n", + " \"hallucination_score\": int, # 0-5 hallucination resistance (5=none, 0=severe)\n", + " \"hallucination_explanation\": str,\n", + " \"overall_description\": str,\n", + " \"key_insight\": str,\n", + " \"model_behavior_pattern\": str,\n", + " \"implications_for_reliability\": str,\n", + " \"worthy_example\": bool,\n", + " \"why_worthy_example\": str\n", + " }\n", + " }\n", + " },\n", + " ...\n", + "]\n", + "\"\"\"\n", + "\n", + "\n", + "# Import test suites\n", + "TEST_SUITES_FOLDER = \"test_suites\"\n", + "\n", + "test_suites = {}\n", + "for filename in os.listdir(TEST_SUITES_FOLDER):\n", + " if filename.endswith(\".json\"):\n", + " service_name = filename.replace(\"_bench.json\", \"\").replace(\"_bench_v2.json\", \"\")\n", + " with open(os.path.join(TEST_SUITES_FOLDER, filename), \"r\") as f:\n", + " suite = json.load(f)\n", + " # Rename \"Slack Bench v2 (Combined)\" to \"Slack Bench v2\"\n", + " if suite.get(\"name\") == \"Slack Bench v2 (Combined)\":\n", + " suite[\"name\"] = \"Slack Bench v2\"\n", + " test_suites[service_name] = suite\n", + "\n", + "print(f\"Loaded {len(test_suites)} test suites:\")\n", + "for service, suite in test_suites.items():\n", + " print(f\" {suite.get('name', service)}: {len(suite.get('tests', []))} tests\")\n", + "\n", + "\"\"\"\n", + "Expected format for `test_suites` (dict):\n", + "{\n", + " \"\": { # e.g., \"slack\", \"linear\", \"calendar\", \"box\"\n", + " \"id\": str, # e.g., \"slack-bench-v2\"\n", + " \"name\": str, # e.g., \"Slack Bench v2\"\n", + " \"description\": str,\n", + " \"service\": str,\n", + " \"ignore_fields\": {...},\n", + " \"tests\": [\n", + " {\n", + " \"id\": str, # e.g., \"test_1\"\n", + " \"name\": str, # e.g., \"Send message to general channel\"\n", + " \"prompt\": str, # Task prompt\n", + " \"type\": str, # e.g., \"actionEval\"\n", + " \"seed_template\": str,\n", + " \"impersonate_user_id\": str,\n", + " \"metadata\": {\n", + " \"min_tool_calls\": int,\n", + " \"tools_required\": [str, ...]\n", + " },\n", + " \"assertions\": [...]\n", + " },\n", + " ...\n", + " ]\n", + " },\n", + " ...\n", + "}\n", + "\"\"\"\n", + "\n", + "# Get or create tests metadata (maps runtime_test_id -> test info)\n", + "tests_metadata = get_or_create_tests_metadata(\n", + " merged_results_path=MERGED_RESULTS_FILE,\n", + " test_suites_folder=\"test_suites\",\n", + " output_folder=\"tests_metadata\"\n", + ")\n", + "\n", + "print(f\"Loaded metadata for {len(tests_metadata)} tests\")" + ] + }, + { + "cell_type": "markdown", + "id": "02c8f1dc", + "metadata": {}, + "source": [ + "# Preprocess" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ca884b33", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created combined qualitative dataset with 3955 runs\n", + " (Only includes runs present in qualitative_analysis)\n", + "\n", + "Sample run (first with analysis):\n", + " run_id: aa987186...\n", + " total_errors: 0\n", + " tool_use_errors: {'endpoint_selection': 0, 'parameter_misuse': 0, 'format_errors': 0, 'code_errors': 0, 'total_tool_use_errors': 0}\n", + " model_refusal: 0\n", + " other_error: 0\n", + " hallucination_errors total: 0\n", + " reasoning_errors total: 0\n", + " recovery_strategies total: 0\n", + " qualitative_scores: {'planning_score': 5, 'reasoning_score': 5, 'tool_use_score': 5, 'recovery_score': 5, 'hallucination_score': 5}\n", + "\n", + "Saved 3955 runs to analysis_preprocessed_for_quantitative_evaluation.json\n" + ] + } + ], + "source": [ + "def create_combined_qualitative_data(\n", + " runs: list[dict],\n", + " qualitative_analysis: list[dict],\n", + " test_suites: dict,\n", + " tests_metadata: dict\n", + ") -> list[dict]:\n", + " \"\"\"\n", + " Combine run data from multiple sources into a unified list of dicts,\n", + " merging with qualitative_analysis and converting error presence to 0/1 format.\n", + " \n", + " Args:\n", + " runs: List of run dicts (from cleaned merged results)\n", + " qualitative_analysis: List of qualitative analysis dicts (flat list with run_analysis)\n", + " test_suites: Dict of test suites by service name\n", + " tests_metadata: Dict mapping runtime_test_id -> test suite info\n", + " \n", + " Returns:\n", + " List of combined run dicts with error counts in 0/1 format\n", + " \n", + " Expected Format:\n", + " {\n", + " \"run_id\": str,\n", + " \"test_id\": str,\n", + " \"service\": str, # \"slack\", \"box\", \"calendar\", \"linear\"\n", + " \"prompt_len\": int,\n", + " \"n_assertions\": int,\n", + " \"min_tool_calls\": int,\n", + " \"iterations\": int,\n", + " \"model\": str,\n", + " \"score\": float, # base_score (0-100)\n", + " \"weighted_score\": float, # base_score * n_assertions\n", + " \"status\": str, # \"passed\", \"failed\", \"timeout\"\n", + " \"include_api_docs\": bool,\n", + " \"include_all_api_docs\": bool,\n", + " \"compared_against\": str, # run_id of reference run\n", + " \"total_errors\": int, # sum of tool_use + model_refusal + other_error + hallucination + reasoning\n", + " \"tool_use_errors\": { # from nested tool_use_errors (4 subtypes)\n", + " \"total_tool_use_errors\": int,\n", + " \"endpoint_selection\": int, # 0 or 1\n", + " \"parameter_misuse\": int,\n", + " \"format_errors\": int,\n", + " \"code_errors\": int\n", + " },\n", + " \"model_refusal\": int, # 0 or 1 (top-level, not nested)\n", + " \"other_error\": int, # 0 or 1 (top-level, not nested)\n", + " \"hallucination_errors\": { # 7 subtypes\n", + " \"total_hallucination_errors\": int,\n", + " \"parameter_hallucination\": int,\n", + " \"outcome_hallucination\": int,\n", + " \"state_hallucination\": int,\n", + " \"action_hallucination\": int,\n", + " \"capability_hallucination\": int,\n", + " \"context_hallucination\": int,\n", + " \"other_hallucination\": int\n", + " },\n", + " \"reasoning_errors\": { # 18 subtypes (includes infinite_loop_error, premature_termination_error)\n", + " \"total_reasoning_errors\": int,\n", + " \"time_orientation_error\": int,\n", + " \"state_tracking_error\": int,\n", + " \"goal_misalignment_error\": int,\n", + " \"causal_reasoning_error\": int,\n", + " \"confirmation_bias\": int,\n", + " \"logical_fallacy\": int,\n", + " \"assumption_error\": int,\n", + " \"negation_error\": int,\n", + " \"scope_generalization_error\": int,\n", + " \"dependency_ordering_error\": int,\n", + " \"incomplete_execution_error\": int,\n", + " \"premature_termination_error\": int,\n", + " \"quantitative_reasoning_error\": int,\n", + " \"reference_resolution_error\": int,\n", + " \"instruction_fidelity_error\": int,\n", + " \"reasoning_action_mismatch\": int,\n", + " \"other_reasoning_error\": int,\n", + " \"infinite_loop_error\": int\n", + " },\n", + " \"recovery_strategies\": { # 15 subtypes\n", + " \"total_recovery_strategies\": int, # excludes no_recovery_attempted\n", + " \"retry_same\": int,\n", + " \"retry_modified_params\": int,\n", + " \"switch_tool\": int,\n", + " \"lookup_correct_value\": int,\n", + " \"backtrack\": int,\n", + " \"parse_error_message\": int,\n", + " \"handle_ui_obstacle\": int,\n", + " \"change_strategy\": int,\n", + " \"break_into_steps\": int,\n", + " \"verify_prerequisites\": int,\n", + " \"skip_and_continue\": int,\n", + " \"wait_and_retry\": int,\n", + " \"use_fallback\": int,\n", + " \"other_recovery_strategy\": int,\n", + " \"no_recovery_attempted\": int\n", + " },\n", + " \"qualitative_scores\": { # 5 scores from qualitative_summary\n", + " \"planning_score\": int,\n", + " \"reasoning_score\": int,\n", + " \"tool_use_score\": int,\n", + " \"recovery_score\": int,\n", + " \"hallucination_score\": int\n", + " }\n", + " }\n", + " \"\"\"\n", + " # Build run_id -> qualitative analysis lookup\n", + " run_id_to_qualitative = {}\n", + " for entry in qualitative_analysis:\n", + " run_id = entry.get(\"run_id\")\n", + " if run_id:\n", + " run_id_to_qualitative[run_id] = entry\n", + " \n", + " # Build test_suite_test_id -> test info mapping (for n_assertions, min_tool_calls)\n", + " test_info_lookup = {}\n", + " for service_name, suite in test_suites.items():\n", + " for test in suite.get(\"tests\", []):\n", + " key = (suite[\"name\"], test[\"id\"])\n", + " test_info_lookup[key] = {\n", + " \"n_assertions\": len(test.get(\"assertions\", [])),\n", + " \"min_tool_calls\": test.get(\"metadata\", {}).get(\"min_tool_calls\", 0)\n", + " }\n", + " \n", + " # Define error/strategy categories (updated for new schema)\n", + " tool_use_error_keys = [\n", + " \"endpoint_selection\", \"parameter_misuse\", \"format_errors\", \"code_errors\"\n", + " ]\n", + " hallucination_error_keys = [\n", + " \"parameter_hallucination\", \"outcome_hallucination\", \"state_hallucination\",\n", + " \"action_hallucination\", \"capability_hallucination\", \"context_hallucination\",\n", + " \"other_hallucination\"\n", + " ]\n", + " reasoning_error_keys = [\n", + " \"time_orientation_error\", \"state_tracking_error\", \"goal_misalignment_error\",\n", + " \"causal_reasoning_error\", \"confirmation_bias\", \"logical_fallacy\",\n", + " \"assumption_error\", \"negation_error\", \"scope_generalization_error\",\n", + " \"dependency_ordering_error\", \"incomplete_execution_error\", \"premature_termination_error\",\n", + " \"quantitative_reasoning_error\", \"reference_resolution_error\", \"instruction_fidelity_error\",\n", + " \"reasoning_action_mismatch\", \"other_reasoning_error\", \"infinite_loop_error\"\n", + " ]\n", + " recovery_strategy_keys = [\n", + " \"retry_same\", \"retry_modified_params\", \"switch_tool\", \"lookup_correct_value\",\n", + " \"backtrack\", \"parse_error_message\", \"handle_ui_obstacle\", \"change_strategy\",\n", + " \"break_into_steps\", \"verify_prerequisites\", \"skip_and_continue\", \"wait_and_retry\",\n", + " \"use_fallback\", \"other_recovery_strategy\", \"no_recovery_attempted\"\n", + " ]\n", + " \n", + " def get_present_as_int(data: dict, key: str) -> int:\n", + " \"\"\"Extract 'present' field as 0/1 from nested dict.\"\"\"\n", + " return 1 if data.get(key, {}).get(\"present\", False) else 0\n", + " \n", + " combined_data = []\n", + " \n", + " for run in runs:\n", + " run_id = run.get(\"runId\") or run.get(\"run_id\")\n", + " \n", + " # Skip runs that don't have qualitative analysis\n", + " if run_id not in run_id_to_qualitative:\n", + " continue\n", + " \n", + " test_id = run.get(\"test_id\")\n", + " service = run.get(\"service\", \"unknown\")\n", + " \n", + " # Get prompt length\n", + " prompt = run.get(\"prompt\") or \"\"\n", + " prompt_len = len(prompt)\n", + " \n", + " # Get iterations from trace\n", + " trace = run.get(\"trace\", {})\n", + " iterations = trace.get(\"iterations\", 0) if isinstance(trace, dict) else 0\n", + " \n", + " # Get n_assertions and min_tool_calls from test_suites via tests_metadata\n", + " n_assertions = 0\n", + " min_tool_calls = 0\n", + " if test_id and test_id in tests_metadata:\n", + " meta = tests_metadata[test_id]\n", + " test_suite_name = meta.get(\"test_suite_name\")\n", + " test_suite_test_id = meta.get(\"test_suite_test_id\")\n", + " key = (test_suite_name, test_suite_test_id)\n", + " if key in test_info_lookup:\n", + " n_assertions = test_info_lookup[key][\"n_assertions\"]\n", + " min_tool_calls = test_info_lookup[key][\"min_tool_calls\"]\n", + " \n", + " # Get run_analysis from qualitative_analysis (guaranteed to exist due to filter above)\n", + " qa_entry = run_id_to_qualitative[run_id]\n", + " run_analysis = qa_entry.get(\"run_analysis\")\n", + " compared_against = qa_entry.get(\"compared_against\")\n", + " \n", + " # Extract scores\n", + " score = run[\"base_score\"]\n", + " weighted_score = run[\"score\"]\n", + " \n", + " # Build error counts from run_analysis (updated for new schema structure)\n", + " tool_use_errors = {k: 0 for k in tool_use_error_keys}\n", + " model_refusal = 0\n", + " other_error = 0\n", + " hallucination_errors = {k: 0 for k in hallucination_error_keys}\n", + " reasoning_errors = {k: 0 for k in reasoning_error_keys}\n", + " recovery_strategies = {k: 0 for k in recovery_strategy_keys}\n", + " qualitative_scores = {\n", + " \"planning_score\": None,\n", + " \"reasoning_score\": None,\n", + " \"tool_use_score\": None,\n", + " \"recovery_score\": None,\n", + " \"hallucination_score\": None\n", + " }\n", + " \n", + " if run_analysis:\n", + " # Tool use errors (nested under tool_use_errors in new schema)\n", + " tool_use_data = run_analysis.get(\"tool_use_errors\", {})\n", + " for key in tool_use_error_keys:\n", + " tool_use_errors[key] = get_present_as_int(tool_use_data, key)\n", + " \n", + " # Top-level errors (not nested)\n", + " model_refusal = 1 if run_analysis.get(\"model_refusal\", {}).get(\"present\", False) else 0\n", + " other_error = 1 if run_analysis.get(\"other_error\", {}).get(\"present\", False) else 0\n", + " \n", + " # Hallucination errors (nested under hallucination_errors)\n", + " hall_data = run_analysis.get(\"hallucination_errors\", {})\n", + " for key in hallucination_error_keys:\n", + " hallucination_errors[key] = get_present_as_int(hall_data, key)\n", + " \n", + " # Reasoning errors (nested under reasoning_errors, includes infinite_loop_error)\n", + " reason_data = run_analysis.get(\"reasoning_errors\", {})\n", + " for key in reasoning_error_keys:\n", + " reasoning_errors[key] = get_present_as_int(reason_data, key)\n", + " \n", + " # Recovery strategies (nested under recovery_strategies)\n", + " recovery_data = run_analysis.get(\"recovery_strategies\", {})\n", + " for key in recovery_strategy_keys:\n", + " recovery_strategies[key] = get_present_as_int(recovery_data, key)\n", + " \n", + " # Qualitative scores from qualitative_summary (5 scores in new schema)\n", + " qual_summary = run_analysis.get(\"qualitative_summary\", {})\n", + " qualitative_scores[\"planning_score\"] = qual_summary.get(\"planning_score\")\n", + " qualitative_scores[\"reasoning_score\"] = qual_summary.get(\"reasoning_score\")\n", + " qualitative_scores[\"tool_use_score\"] = qual_summary.get(\"tool_use_score\")\n", + " qualitative_scores[\"recovery_score\"] = qual_summary.get(\"recovery_score\")\n", + " qualitative_scores[\"hallucination_score\"] = qual_summary.get(\"hallucination_score\")\n", + " \n", + " # Calculate totals\n", + " total_tool_use_errors = sum(tool_use_errors.values())\n", + " total_hallucination_errors = sum(hallucination_errors.values())\n", + " total_reasoning_errors = sum(reasoning_errors.values())\n", + " # Exclude no_recovery_attempted from total (it indicates opposite of recovery)\n", + " total_recovery_strategies = sum(v for k, v in recovery_strategies.items() if k != \"no_recovery_attempted\")\n", + " \n", + " # total_errors = tool_use + model_refusal + other_error + hallucination + reasoning\n", + " total_errors = total_tool_use_errors + model_refusal + other_error + total_hallucination_errors + total_reasoning_errors\n", + " \n", + " # Add totals to dicts\n", + " tool_use_errors[\"total_tool_use_errors\"] = total_tool_use_errors\n", + " hallucination_errors[\"total_hallucination_errors\"] = total_hallucination_errors\n", + " reasoning_errors[\"total_reasoning_errors\"] = total_reasoning_errors\n", + " recovery_strategies[\"total_recovery_strategies\"] = total_recovery_strategies\n", + " \n", + " combined_run = {\n", + " \"run_id\": run_id,\n", + " \"test_id\": test_id,\n", + " \"service\": service,\n", + " \"prompt_len\": prompt_len,\n", + " \"n_assertions\": n_assertions,\n", + " \"min_tool_calls\": min_tool_calls,\n", + " \"iterations\": iterations,\n", + " \"model\": run[\"model\"],\n", + " \"score\": score,\n", + " \"weighted_score\": weighted_score,\n", + " \"status\": run[\"status\"],\n", + " \"include_api_docs\": run.get(\"include_api_docs\", False),\n", + " \"include_all_api_docs\": run.get(\"include_all_api_docs\", False),\n", + " \"compared_against\": compared_against,\n", + " \"total_errors\": total_errors,\n", + " \"tool_use_errors\": tool_use_errors,\n", + " \"model_refusal\": model_refusal,\n", + " \"other_error\": other_error,\n", + " \"hallucination_errors\": hallucination_errors,\n", + " \"reasoning_errors\": reasoning_errors,\n", + " \"recovery_strategies\": recovery_strategies,\n", + " \"qualitative_scores\": qualitative_scores\n", + " }\n", + " \n", + " combined_data.append(combined_run)\n", + " \n", + " return combined_data\n", + "\n", + "\n", + "# Create combined qualitative dataset\n", + "combined_qualitative_runs = create_combined_qualitative_data(\n", + " runs=runs,\n", + " qualitative_analysis=qualitative_analysis,\n", + " test_suites=test_suites,\n", + " tests_metadata=tests_metadata\n", + ")\n", + "\n", + "# Report stats\n", + "print(f\"Created combined qualitative dataset with {len(combined_qualitative_runs)} runs\")\n", + "print(f\" (Only includes runs present in qualitative_analysis)\")\n", + "\n", + "# Show sample\n", + "print(\"\\nSample run (first with analysis):\")\n", + "for r in combined_qualitative_runs:\n", + " if r[\"qualitative_scores\"][\"planning_score\"] is not None:\n", + " print(f\" run_id: {r['run_id'][:8]}...\")\n", + " print(f\" total_errors: {r['total_errors']}\")\n", + " print(f\" tool_use_errors: {r['tool_use_errors']}\")\n", + " print(f\" model_refusal: {r['model_refusal']}\")\n", + " print(f\" other_error: {r['other_error']}\")\n", + " print(f\" hallucination_errors total: {r['hallucination_errors']['total_hallucination_errors']}\")\n", + " print(f\" reasoning_errors total: {r['reasoning_errors']['total_reasoning_errors']}\")\n", + " print(f\" recovery_strategies total: {r['recovery_strategies']['total_recovery_strategies']}\")\n", + " print(f\" qualitative_scores: {r['qualitative_scores']}\")\n", + " break\n", + "\n", + "# Save combined qualitative data to JSON for quantitative evaluation\n", + "output_path = \"analysis_preprocessed_for_quantitative_evaluation.json\"\n", + "with open(output_path, 'w') as f:\n", + " json.dump(combined_qualitative_runs, f, indent=2)\n", + "print(f\"\\nSaved {len(combined_qualitative_runs)} runs to {output_path}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "7d13b40a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "============================================================\n", + "SPARSE CATEGORY ANALYSIS\n", + "============================================================\n", + "\n", + "Top-level error counts:\n", + " model_refusal: 76\n", + " other_error: 70\n", + "\n", + "Categories with 0 occurrences (will be removed):\n", + " tool_use_errors: (none)\n", + " hallucination_errors: (none)\n", + " reasoning_errors: ['negation_error']\n", + " recovery_strategies: ['handle_ui_obstacle']\n", + "\n", + "Total categories removed: 2\n", + "\n", + "Categories kept (with occurrence counts):\n", + "\n", + " tool_use_errors (4 categories):\n", + " - code_errors: 634\n", + " - endpoint_selection: 406\n", + " - format_errors: 367\n", + " - parameter_misuse: 1317\n", + "\n", + " hallucination_errors (7 categories):\n", + " - action_hallucination: 550\n", + " - capability_hallucination: 68\n", + " - context_hallucination: 288\n", + " - other_hallucination: 208\n", + " - outcome_hallucination: 1118\n", + " - parameter_hallucination: 959\n", + " - state_hallucination: 1065\n", + "\n", + " reasoning_errors (17 categories):\n", + " - assumption_error: 1388\n", + " - causal_reasoning_error: 315\n", + " - confirmation_bias: 420\n", + " - dependency_ordering_error: 221\n", + " - goal_misalignment_error: 522\n", + " - incomplete_execution_error: 959\n", + " - infinite_loop_error: 223\n", + " - instruction_fidelity_error: 281\n", + " - logical_fallacy: 93\n", + " - other_reasoning_error: 54\n", + " - premature_termination_error: 1021\n", + " - quantitative_reasoning_error: 138\n", + " - reasoning_action_mismatch: 1068\n", + " - reference_resolution_error: 54\n", + " - scope_generalization_error: 39\n", + " - state_tracking_error: 612\n", + " - time_orientation_error: 65\n", + "\n", + " recovery_strategies (14 categories):\n", + " - backtrack: 726\n", + " - break_into_steps: 3148\n", + " - change_strategy: 1479\n", + " - lookup_correct_value: 2891\n", + " - no_recovery_attempted: 448\n", + " - other_recovery_strategy: 11\n", + " - parse_error_message: 1677\n", + " - retry_modified_params: 1807\n", + " - retry_same: 439\n", + " - skip_and_continue: 404\n", + " - switch_tool: 277\n", + " - use_fallback: 268\n", + " - verify_prerequisites: 1678\n", + " - wait_and_retry: 12\n", + "\n", + "\n", + "Filtered dataset: 3955 runs\n", + "Sample filtered run tool_use_errors: {'endpoint_selection': 0, 'parameter_misuse': 0, 'format_errors': 0, 'code_errors': 0, 'total_tool_use_errors': 0}\n", + "Sample filtered run model_refusal: 0\n", + "Sample filtered run other_error: 0\n", + "\n", + "Saved 3955 runs to filtered_analysis_preprocessed_for_quantitative_evaluation.json\n" + ] + } + ], + "source": [ + "def filter_sparse_categories(combined_runs: list[dict]) -> tuple[list[dict], dict]:\n", + " \"\"\"\n", + " Filter out error/recovery categories that appear 0 times across all runs.\n", + " \n", + " Args:\n", + " combined_runs: List of combined qualitative run dicts\n", + " \n", + " Returns:\n", + " (filtered_runs, stats) where:\n", + " - filtered_runs: New list with sparse categories removed from each run\n", + " - stats: Dict with counts, removed, and kept categories per group\n", + " \"\"\"\n", + " # Count occurrences across all runs (updated for new schema)\n", + " # Note: model_refusal and other_error are top-level ints, not nested dicts\n", + " counts = {\n", + " \"tool_use_errors\": defaultdict(int),\n", + " \"hallucination_errors\": defaultdict(int),\n", + " \"reasoning_errors\": defaultdict(int),\n", + " \"recovery_strategies\": defaultdict(int)\n", + " }\n", + " \n", + " # Count top-level error fields separately\n", + " top_level_counts = {\n", + " \"model_refusal\": 0,\n", + " \"other_error\": 0\n", + " }\n", + " \n", + " for run in combined_runs:\n", + " # Count nested error categories\n", + " for group_name in counts.keys():\n", + " group = run.get(group_name, {})\n", + " for key, value in group.items():\n", + " if not key.startswith(\"total_\"): # Skip total fields\n", + " counts[group_name][key] += value\n", + " \n", + " # Count top-level fields\n", + " top_level_counts[\"model_refusal\"] += run.get(\"model_refusal\", 0)\n", + " top_level_counts[\"other_error\"] += run.get(\"other_error\", 0)\n", + " \n", + " # Identify zero-count and kept categories for nested groups\n", + " removed = {}\n", + " kept = {}\n", + " for group_name, group_counts in counts.items():\n", + " removed[group_name] = [k for k, v in sorted(group_counts.items()) if v == 0]\n", + " kept[group_name] = [k for k, v in sorted(group_counts.items()) if v > 0]\n", + " \n", + " # Report\n", + " print(\"=\" * 60)\n", + " print(\"SPARSE CATEGORY ANALYSIS\")\n", + " print(\"=\" * 60)\n", + " \n", + " print(\"\\nTop-level error counts:\")\n", + " print(f\" model_refusal: {top_level_counts['model_refusal']}\")\n", + " print(f\" other_error: {top_level_counts['other_error']}\")\n", + " \n", + " print(\"\\nCategories with 0 occurrences (will be removed):\")\n", + " total_removed = 0\n", + " for group_name, removed_keys in removed.items():\n", + " if removed_keys:\n", + " print(f\" {group_name}: {removed_keys}\")\n", + " total_removed += len(removed_keys)\n", + " else:\n", + " print(f\" {group_name}: (none)\")\n", + " \n", + " print(f\"\\nTotal categories removed: {total_removed}\")\n", + " \n", + " print(\"\\nCategories kept (with occurrence counts):\")\n", + " for group_name, kept_keys in kept.items():\n", + " print(f\"\\n {group_name} ({len(kept_keys)} categories):\")\n", + " for key in kept_keys:\n", + " print(f\" - {key}: {counts[group_name][key]}\")\n", + " \n", + " # Create filtered runs\n", + " filtered_runs = []\n", + " for run in combined_runs:\n", + " # Copy all fields except the nested error/recovery dicts\n", + " new_run = {k: v for k, v in run.items() \n", + " if k not in [\"tool_use_errors\", \"hallucination_errors\", \n", + " \"reasoning_errors\", \"recovery_strategies\"]}\n", + " \n", + " # Filter nested categories\n", + " for group_name in counts.keys():\n", + " old_group = run.get(group_name, {})\n", + " new_group = {}\n", + " for key, value in old_group.items():\n", + " if key.startswith(\"total_\") or key in kept[group_name]:\n", + " new_group[key] = value\n", + " new_run[group_name] = new_group\n", + " \n", + " filtered_runs.append(new_run)\n", + " \n", + " stats = {\n", + " \"counts\": {g: dict(c) for g, c in counts.items()},\n", + " \"top_level_counts\": top_level_counts,\n", + " \"removed\": removed,\n", + " \"kept\": kept\n", + " }\n", + " \n", + " return filtered_runs, stats\n", + "\n", + "\n", + "# Filter sparse categories\n", + "filtered_runs, filter_stats = filter_sparse_categories(combined_qualitative_runs)\n", + "\n", + "print(f\"\\n\\nFiltered dataset: {len(filtered_runs)} runs\")\n", + "print(f\"Sample filtered run tool_use_errors: {filtered_runs[0]['tool_use_errors']}\")\n", + "print(f\"Sample filtered run model_refusal: {filtered_runs[0]['model_refusal']}\")\n", + "print(f\"Sample filtered run other_error: {filtered_runs[0]['other_error']}\")\n", + "\n", + "# Save combined qualitative data to JSON for quantitative evaluation\n", + "output_path = \"filtered_analysis_preprocessed_for_quantitative_evaluation.json\"\n", + "with open(output_path, 'w') as f:\n", + " json.dump(filtered_runs, f, indent=2)\n", + "print(f\"\\nSaved {len(filtered_runs)} runs to {output_path}\")" + ] + }, + { + "cell_type": "markdown", + "id": "c14aa5e5", + "metadata": {}, + "source": [ + "# Analyze" + ] + }, + { + "cell_type": "markdown", + "id": "38a0409b", + "metadata": {}, + "source": [ + "## Failure modes analysis" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "105faffd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "anthropic/claude-haiku-4.5: {'none': 221, 'relevant': 221, 'all': 0} (n=442)\n", + "deepseek/deepseek-v3.2: {'none': 220, 'relevant': 220, 'all': 0} (n=440)\n", + "google/gemini-3-flash-preview: {'none': 222, 'relevant': 221, 'all': 0} (n=443)\n", + "meta-llama/llama-4-scout: {'none': 216, 'relevant': 207, 'all': 0} (n=423)\n", + "mistralai/devstral-2512: {'none': 222, 'relevant': 222, 'all': 0} (n=444)\n", + "moonshotai/kimi-k2-0905: {'none': 221, 'relevant': 218, 'all': 0} (n=439)\n", + "openai/gpt-oss-120b: {'none': 220, 'relevant': 222, 'all': 0} (n=442)\n", + "qwen/qwen3-vl-235b-a22b-instruct: {'none': 221, 'relevant': 221, 'all': 0} (n=442)\n", + "x-ai/grok-4.1-fast: {'none': 221, 'relevant': 219, 'all': 0} (n=440)\n" + ] + } + ], + "source": [ + "# Check doc level distribution per model\n", + "doc_by_model = defaultdict(lambda: {\"none\": 0, \"relevant\": 0, \"all\": 0})\n", + "for run in filtered_runs:\n", + " model = run[\"model\"]\n", + " if run.get(\"include_all_api_docs\"):\n", + " doc_by_model[model][\"all\"] += 1\n", + " elif run.get(\"include_api_docs\"):\n", + " doc_by_model[model][\"relevant\"] += 1\n", + " else:\n", + " doc_by_model[model][\"none\"] += 1\n", + "\n", + "for model, counts in sorted(doc_by_model.items()):\n", + " total = sum(counts.values())\n", + " print(f\"{model}: {counts} (n={total})\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "xx5rfgo6bt", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Pairing Statistics: How many tests are shared vs unique per model?\n", + "================================================================================\n", + "claude-haiku-4.5:\n", + " Shared tests: 220\n", + " Only in no_docs: 1\n", + " Only in with_docs: 1\n", + " Coverage: 99.5% of tests are paired\n", + "\n", + "deepseek-v3.2:\n", + " Shared tests: 218\n", + " Only in no_docs: 2\n", + " Only in with_docs: 2\n", + " Coverage: 99.1% of tests are paired\n", + "\n", + "devstral-2512:\n", + " Shared tests: 222\n", + " Only in no_docs: 0\n", + " Only in with_docs: 0\n", + " Coverage: 100.0% of tests are paired\n", + "\n", + "gemini-3-flash-preview:\n", + " Shared tests: 221\n", + " Only in no_docs: 1\n", + " Only in with_docs: 0\n", + " Coverage: 99.5% of tests are paired\n", + "\n", + "gpt-oss-120b:\n", + " Shared tests: 220\n", + " Only in no_docs: 0\n", + " Only in with_docs: 2\n", + " Coverage: 99.1% of tests are paired\n", + "\n", + "grok-4.1-fast:\n", + " Shared tests: 218\n", + " Only in no_docs: 3\n", + " Only in with_docs: 1\n", + " Coverage: 98.6% of tests are paired\n", + "\n", + "kimi-k2-0905:\n", + " Shared tests: 217\n", + " Only in no_docs: 4\n", + " Only in with_docs: 1\n", + " Coverage: 98.2% of tests are paired\n", + "\n", + "llama-4-scout:\n", + " Shared tests: 201\n", + " Only in no_docs: 15\n", + " Only in with_docs: 6\n", + " Coverage: 93.1% of tests are paired\n", + "\n", + "qwen3-vl-235b-a22b-instruct:\n", + " Shared tests: 220\n", + " Only in no_docs: 1\n", + " Only in with_docs: 1\n", + " Coverage: 99.5% of tests are paired\n", + "\n" + ] + } + ], + "source": [ + "# Bayesian Bootstrap: API Knowledge Error Ratio (no_docs vs with_docs) per model\n", + "# Using clustered bootstrap to account for test-level correlation\n", + "\n", + "def weighted_api_knowledge_ratio(runs: list[dict], weights: np.ndarray) -> float:\n", + " \"\"\"\n", + " Compute weighted API knowledge error ratio.\n", + " Ratio = sum(api_knowledge_errors * w) / sum(total_errors * w)\n", + " \"\"\"\n", + " api_knowledge = np.array([\n", + " r.get(\"tool_use_errors\", {}).get(\"endpoint_selection\", 0) + \n", + " r.get(\"tool_use_errors\", {}).get(\"parameter_misuse\", 0) \n", + " for r in runs\n", + " ])\n", + " total_errors = np.array([r.get(\"total_errors\", 0) for r in runs])\n", + " \n", + " weighted_api = np.sum(api_knowledge * weights)\n", + " weighted_total = np.sum(total_errors * weights)\n", + " \n", + " return weighted_api / weighted_total if weighted_total > 0 else 0.0\n", + "\n", + "\n", + "# First, check pairing stats per model\n", + "print(\"Pairing Statistics: How many tests are shared vs unique per model?\")\n", + "print(\"=\" * 80)\n", + "\n", + "pairing_stats = {}\n", + "for model in sorted(set(r[\"model\"].split(\"/\")[-1] for r in filtered_runs)):\n", + " model_runs = [r for r in filtered_runs if r[\"model\"].split(\"/\")[-1] == model]\n", + " \n", + " no_docs_runs = [r for r in model_runs if not r.get(\"include_api_docs\")]\n", + " with_docs_runs = [r for r in model_runs if r.get(\"include_api_docs\")]\n", + " \n", + " no_docs_tests = set(r[\"test_id\"] for r in no_docs_runs)\n", + " with_docs_tests = set(r[\"test_id\"] for r in with_docs_runs)\n", + " \n", + " shared = no_docs_tests & with_docs_tests\n", + " only_no_docs = no_docs_tests - with_docs_tests\n", + " only_with_docs = with_docs_tests - no_docs_tests\n", + " \n", + " pairing_stats[model] = {\n", + " \"shared\": len(shared),\n", + " \"only_no_docs\": len(only_no_docs),\n", + " \"only_with_docs\": len(only_with_docs),\n", + " \"total_no_docs\": len(no_docs_tests),\n", + " \"total_with_docs\": len(with_docs_tests)\n", + " }\n", + " \n", + " print(f\"{model}:\")\n", + " print(f\" Shared tests: {len(shared)}\")\n", + " print(f\" Only in no_docs: {len(only_no_docs)}\")\n", + " print(f\" Only in with_docs: {len(only_with_docs)}\")\n", + " print(f\" Coverage: {len(shared) / max(len(no_docs_tests), len(with_docs_tests)) * 100:.1f}% of tests are paired\")\n", + " print()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "6ybq7x0ppdc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Bayesian Bootstrap: API Knowledge Error Ratio Delta (no_docs - with_docs)\n", + "Positive delta = documentation REDUCES the proportion of API knowledge errors\n", + "==========================================================================================\n", + "\n", + "claude-haiku-4.5:\n", + " Delta (no_docs - with_docs): 4.06% [2.29%, 5.93%]\n", + " P(delta > 0): 1.000 | P(delta < 0): 0.000\n", + " Clusters used: 220 tests (n_a=220, n_b=220)\n", + " Interpretation: DOCS REDUCE API knowledge error proportion *\n", + "\n", + "deepseek-v3.2:\n", + " Delta (no_docs - with_docs): 8.28% [3.88%, 12.73%]\n", + " P(delta > 0): 1.000 | P(delta < 0): 0.000\n", + " Clusters used: 218 tests (n_a=218, n_b=218)\n", + " Interpretation: DOCS REDUCE API knowledge error proportion *\n", + "\n", + "devstral-2512:\n", + " Delta (no_docs - with_docs): 9.93% [6.28%, 13.57%]\n", + " P(delta > 0): 1.000 | P(delta < 0): 0.000\n", + " Clusters used: 222 tests (n_a=222, n_b=222)\n", + " Interpretation: DOCS REDUCE API knowledge error proportion *\n", + "\n", + "gemini-3-flash-preview:\n", + " Delta (no_docs - with_docs): 1.95% [-0.61%, 4.52%]\n", + " P(delta > 0): 0.932 | P(delta < 0): 0.068\n", + " Clusters used: 221 tests (n_a=221, n_b=221)\n", + " Interpretation: DOCS REDUCE API knowledge error proportion \n", + "\n", + "gpt-oss-120b:\n", + " Delta (no_docs - with_docs): 3.58% [1.77%, 5.43%]\n", + " P(delta > 0): 1.000 | P(delta < 0): 0.000\n", + " Clusters used: 220 tests (n_a=220, n_b=220)\n", + " Interpretation: DOCS REDUCE API knowledge error proportion *\n", + "\n", + "grok-4.1-fast:\n", + " Delta (no_docs - with_docs): 4.45% [2.22%, 6.67%]\n", + " P(delta > 0): 1.000 | P(delta < 0): 0.000\n", + " Clusters used: 218 tests (n_a=218, n_b=218)\n", + " Interpretation: DOCS REDUCE API knowledge error proportion *\n", + "\n", + "kimi-k2-0905:\n", + " Delta (no_docs - with_docs): 6.47% [3.41%, 9.52%]\n", + " P(delta > 0): 1.000 | P(delta < 0): 0.000\n", + " Clusters used: 217 tests (n_a=217, n_b=217)\n", + " Interpretation: DOCS REDUCE API knowledge error proportion *\n", + "\n", + "llama-4-scout:\n", + " Delta (no_docs - with_docs): 1.51% [0.04%, 2.97%]\n", + " P(delta > 0): 0.978 | P(delta < 0): 0.022\n", + " Clusters used: 201 tests (n_a=201, n_b=201)\n", + " Interpretation: DOCS REDUCE API knowledge error proportion *\n", + "\n", + "qwen3-vl-235b-a22b-instruct:\n", + " Delta (no_docs - with_docs): 5.70% [3.07%, 8.28%]\n", + " P(delta > 0): 1.000 | P(delta < 0): 0.000\n", + " Clusters used: 220 tests (n_a=220, n_b=220)\n", + " Interpretation: DOCS REDUCE API knowledge error proportion *\n", + "\n", + "==========================================================================================\n", + "Summary: Delta in API Knowledge Error Ratio (no_docs - with_docs)\n" + ] + }, + { + "data": { + "image/png": "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KSkpy/VfunQpW7mOHz+url276sMPP9TVq1fVvHlzPfnkk9btmc1mde3aVR9//HGm67h69Wq2x+vq3LmzihUrprCwMK1YsUKDBg3S1q1bM2x76tQptW/fXqNHj1ZkZKQmT56sDh066NSpU2naLV26VDExMYqJidF///2XrVwAAAAAACBzNhWlihcvru3bt1uf79ixQyaTSUWLFk3TrnDhwlq4cKFjEyIdf39/vfDCC7pw4YIiIiJ08eJF7du3T02aNEnTLioqSt98840+/PBDhYSEaO3atVmut3fv3qpTp44+/PBDuwpUX331lZo1a6a2bdvK399fI0aMUFhYWJr3TIsWLfTDDz9kuo6NGzeqePHieu2117R7926bt33y5En98ssvmjBhgvLmzasGDRqoa9eu+uKLLzJsv379etWtW1ft2rWT2WxW27ZtVb9+fd63AAAAAADkMJuKUu+//74mTpyoKlWq6P7779fTTz+tYcOGKX/+/M7OhwzExsZq7ty5KlOmjAoWLKh9+/apZMmS6QaaX7p0qWrWrKmKFSuqe/fumjdvXpbr/eGHHzRu3Dj99ttvqlixolq3bq0lS5YoNjY2y+UOHjyo2rVrW5/7+PioatWqOnjwoHVa1apVdfnyZV28eDHDdTz33HP65ZdfVKBAAXXu3FkVK1bU2LFjdfr06dtuu3jx4mkKpLVr106z7dQsFosMw0g37db2ffv2VaFChdSwYUP9+OOPWWYAAAAAAAD2s6ko9fTTT+uvv/7SgAED1K1bN+3YsUNjxoxxdjbcYsiQISpQoIDKly+vo0ePavXq1ZKka9euZVggnDdvnnr06CFJ6tatm9avX59pUUiSvL291aZNGy1dulQXLlxQ586dNX/+fJUsWVK9evXKdLD2mJiYdOMuFShQQNHR0dbnKfmuXbuW6fYrV66scePG6eTJk/riiy904cIF1a9fX40bN9auXbuyve3UHn30Ue3du1crV65UUlKSVq5cqR07digqKsra5quvvtLp06d1/vx5vf766+rQoUOa8bsAAAAAAMCd87a1Yfny5fXyyy87MwtuY8KECRmOpRUcHJymqCJJhw4d0oEDB/Tcc89JkkJDQ/XQQw9pwYIFGjx48G23lS9fPtWsWVO1a9fWgQMH9Oeffyo5OTnTtpGRkWmmRUZGpum5lZIvODj4tts2mUyqUqWKatWqpX379uno0aOKiIjI9rZTq1ixolasWKGRI0fq+eefV6NGjdSpU6c041k9/PDD1sddunTRypUr9e2336pevXq3zQ7kdpGRkemOGVsEBQVla8xAAAAAAMiMzUUp5F61a9fW+fPnFRMTo3z58km62Uuqbdu2CgkJsbbr3r27JkyYkGVR6vTp01qyZImWLFmi69evq0uXLtqyZYuqVKmS6TI1a9bU/v37rc8TExN15MgR1ahRwzrtyJEjKlq0qIoXL57pemJjY7Vq1SotWbJE27ZtU+vWrTV8+HA99thj8vbO+K1as2ZNXbhwQWFhYSpSpIgkaf/+/Wm2fau2bduqbdu21ucNGjRQz549M21vNtvUoRBwC9u2bdOaNWvsXq5t27Zq166dExIBAAAAuFtRlPIAJUqUUO3atbV161a1adNGCQkJWrRokT7++GPduHHD2q5t27bq16+ftm3bpsaNG6dbzwsvvKDvvvtOHTp00Mcff6zGjRvLZDLddvvdunXTtGnT9OOPP6pFixaaMGGCChUqlGYbP//8s9q0aZPpOtavX6+OHTvq/vvvV7du3bR48WKbxiy755571KhRIw0dOlQzZ87Un3/+qcWLF2vlypWZLrN3717Vrl1bcXFx1l8MTClKnT17Vv/8848aNGggs9ms77//XqtWrdLmzZtvmwVwB40bN1atWrXSTEtISNCUKVMkSYMGDZKvr2+65eglBQAAAMDRKEp5iFdffVVffvml2rRpo5UrVyoiIsJ6696t5s6dm2FRqk+fPpo9e7b8/f3t2nalSpW0aNEiDRgwQOfOnVPdunW1evVqa+8mi8WixYsXa9myZZmuo2LFijp8+LBCQ0Pt2rZ0c0D3F198UYULF1ZISIgmT56c5pcIq1WrpqFDh6pr166Sbo7NtXv3bplMJj3yyCPavHmz8ubNK+nmGFX9+/fXiRMn5O3trYoVK2r58uV64IEH7M4F5EYZ3YYXHx9vfRwaGio/P7+cjgUAAADgLkRRyk1s2bIly/k9e/bU9OnTdfjwYXXs2FEdO3a0exsNGjTIZjqpffv2at++fYbzli1bpnr16qlu3bqZLl++fPlsb7tkyZJat25dpvMPHz6c5vnGjRszbVu1atU0tyICAAAAAADnoCjlIby8vHTw4EFXx8hQly5d1KVLF1fHAAAAAAAAuQgjOAMAAAAAACDH2d1TasuWLVq7dq127Nih8+fPKy4uToUKFVLVqlXVvHlzPfvssypcuLAzsuYKGQ0A7MzlAAAAAAAAPJHNRakFCxZo4sSJOnbsmPLly6datWrp/vvvl7+/v65evapDhw7pu+++08CBA9WxY0eNHTtWZcqUcWb2HJU/f375+PioRIkS2V6Hj4+PTb8oBwAAAAAA4OlsKkrdd999On36tLp166aFCxfqvvvuk9mc/s6/q1evauXKlZo/f76qVKmihQsX6plnnnF4aFcoXLiwPvnkE0VFRWV7Hfnz5/foXmQAAAAAAAC2sqko1aZNG7399tu37eUTEhKi559/Xs8//7y2bdumq1evOiQkAAAAAAAAPItNRakxY8bYveLGjRvbvUxuFh4erldeeUUJCQnZXoevr6/mzJlDbykAAAAAAHDXs3ug88zcuHFD/v7+jlpdrhMVFaWEhAQ1a9ZMwcHBdi9/7do1bd68WVFRURSlAAAAAADAXc/uotTXX3+tiIgI9evXT5J04sQJPfHEEzp27JgefPBBrV69OltFG3cRHBysQoUKuToGAAAAAACAW0s/WvltTJ06VdevX7c+HzRokK5du6YBAwbo6NGjev/99x0aELZJTk5WzZo19eeff7o6SjqLFy9Wt27dXB0DAAAAAADkInYXpU6dOqXq1atLunnL3v/+9z9NmjRJ06ZN07hx47Ry5UpHZ4Skpk2bys/PT/ny5VNwcLCaNGmiPXv2WOcvXLhQFSpUsO6bFNu2bZPJZNK7777r1HwrV65UhQoVlCdPHj300EM6evSodV7nzp21e/du7du3zynbvnDhgh5//HHlzZtXpUuX1ueff55l+40bN6pu3boKDAxU1apVtX79+jTzy5Ytq4CAAOXLl0/58uVTgQIFnJIbAAAAAIC7md1FqdjYWOXNm1eStHv3bsXHx6t169aSpKpVq+r8+fOOTQirSZMmKSYmRhcvXlTdunX11FNPWefNnj1bvXv3TrfMvHnz9Pjjj2vBggVKSkrK9ravXLmS6fLHjx9X165d9eGHH+rq1atq3ry5nnzySWt7s9msrl276uOPP850/VevXlViYmK2snXu3FnFihVTWFiYVqxYoUGDBmnr1q0Ztj116pTat2+v0aNHKzIyUpMnT1aHDh106tSpNO2WLl2qmJgYxcTE6L///stWLgAAAAAAkDm7i1LFixfX/v37JUnr169XpUqVrAN3X7t2TXny5HFoQKTn7++vF154QRcuXFBERIQuXryoffv2qUmTJmnaRUVF6ZtvvtGHH36okJAQrV271q7txMfH65tvvtGTTz6psmXLKi4uLsN2X331lZo1a6a2bdvK399fI0aMUFhYmLZv325t06JFC/3www+Zbmvjxo0qXry4XnvtNe3evdvmjCdPntQvv/yiCRMmKG/evGrQoIG6du2qL774IsP269evV926ddWuXTuZzWa1bdtW9evX18KFC23eJgAAAAAAuHN2F6WefvppDRs2TB06dNCMGTP03HPPWecdPHhQ99xzj0MDIr3Y2FjNnTtXZcqUUcGCBbVv3z6VLFlSgYGBadotXbpUNWvWVMWKFdW9e3fNmzfvtus2DEPbt29Xnz59VLx4cc2YMUOtW7fW2bNn060/xcGDB1W7dm3rcx8fH1WtWlUHDx60TqtataouX76sixcvZriO5557Tr/88osKFCigzp07q2LFiho7dqxOnz6dZd6DBw+qePHiKlq0qHVa7dq102w7NYvFIsMw0k27tX3fvn1VqFAhNWzYUD/++GOWGQAAAAAAgP3sLkqNHTtWXbt21d9//60uXbronXfesc5bs2aNWrZs6dCA+D9DhgxRgQIFVL58eR09elSrV6+WdLOHWv78+dO1nzdvnnr06CFJ6tatm9avX59pUUiSPv74Y91zzz3q27evypQpoz/++EPbt2/Xyy+/rJCQkEyXi4mJSTfuUoECBRQdHW19npLv2rVrma6ncuXKGjdunE6ePKkvvvhCFy5cUP369dW4cWPt2rUr29tO7dFHH9XevXu1cuVKJSUlaeXKldqxY4eioqKsbb766iudPn1a58+f1+uvv64OHTqkGb8LAAAAAADcOW97FwgICNAnn3yS4bzMCgdwjAkTJuiNN95INz04ODhNUUWSDh06pAMHDlh7soWGhuqhhx7SggULNHjw4AzXf+rUKV2+fFlPPvmkatWqpZIlS9qUK1++fIqMjEwzLTIyMk3PqpR8wcHBt12fyWRSlSpVVKtWLe3bt09Hjx5VREREtredWsWKFbVixQqNHDlSzz//vBo1aqROnTqlGc/q4Ycftj7u0qWLVq5cqW+//Vb16tW7bXYAAAAAAGAbu3tKJSYm6vr16xnOu379erYHq0b21a5dW+fPn1dMTIx12rx589S2bds0PZy6d++e6VhLkjR16lT9+++/evjhhzVhwgSVKFFCr7zyirZv357ulrfUatasaR1nTLr5Hjly5Ihq1KhhnXbkyBEVLVpUxYsXz3Q9sbGxWrp0qdq1a6fy5ctry5YtGj58uC5cuKA2bdpkuu0LFy4oLCzMOm3//v1ptn2rtm3b6o8//tDVq1f1ww8/6O+//043HldqZrPdhwkAAAAAALgNu6+2X3rpJb344osZzuvTp49eeeWVOw4F+5QoUUK1a9e2/uJcQkKCFi1apOeee043btyw/te2bVv9+++/2rZtW6brCgkJ0SuvvKIdO3Zo165dKlasmF544QWVLVs202Jkt27d9PPPP+vHH39UfHy8xo8fr0KFCqlx48bWNj///HOmhSXp5gDkxYoV0+eff6727dvr33//1bJly9S2bVt5e2feoe+ee+5Ro0aNNHToUMXGxuq3337T4sWL9cILL2S6zN69e5WUlKTo6GiNGTNGV69eVc+ePSVJZ8+e1bZt2xQfH6/ExEQtX75cq1atSvNLh3ebyMhInT171u7/bu3BBgAAAABAanbfvrd582ZNnDgxw3nt2rXTkCFD7jgU7Pfqq6/qyy+/VJs2bbRy5UpFRESkGYQ+tblz56YpGGXmnnvu0Xvvvaf33ntPu3btko+PT4btKlWqpEWLFmnAgAE6d+6c6tatq9WrV1uLSRaLRYsXL9ayZcsy3VbFihV1+PBhhYaG2vCvTWvp0qV68cUXVbhwYYWEhGjy5Mlpej5Vq1ZNQ4cOVdeuXSXdHJtr9+7dMplMeuSRR7R582blzZtX0s0xqvr3768TJ07I29tbFStW1PLly/XAAw/YnctTbNu2TWvWrLF7ubZt26pdu3ZOSAQAAAAA8AR2F6UuX76c6S1YxYoV06VLl+44FNLbsmVLlvN79uyp6dOn6/Dhw+rYsaM6duzo0O3frijTvn17tW/fPsN5y5YtU7169VS3bt1Mly9fvny2s5UsWVLr1q3LdP7hw4fTPN+4cWOmbatWrZrmVkRIjRs3Vq1atdJMS0hI0JQpUyRJgwYNkq+vb7rlgoKCciQfAAAAAMA92V2UKlCggE6cOKGmTZumm3fixIlMB5iGc3l5eengwYOujpGhLl26qEuXLq6OgWwKCgpKV2CKj4+3Pg4NDZWfn19OxwIAAAAAuDm7i1LNmjXThAkT9PTTT6cZRPvq1auaOHGimjdv7tCAuc21a9dydDkAAAAAAABPZHdRatSoUapXr54qVKig5557TiVLltS5c+e0YsUKJSYmavTo0c7I6XL58+eXr6+vNm/enO11+Pr6Kn/+/A5MBQAAAAAA4J7sLkpVqlRJ27dv18CBA/X5558rOTlZXl5eatKkiaZNm6ZKlSo5I6fLFS5cWHPmzFFUVFS215E/f34VLlzYgakAAAAAAADck91FKUmqVauWNm3apLi4OF27dk0hISHy9/d3dDYAAAAAAAB4qGwVpVKYTCaZTCZHZcnVwsPD9corryghISHb6/D19dWcOXPoLQUAAAAAAO562SpK/frrr3r33Xe1a9cuWSwWmc1mPfjgg5o4caIaNmzo6Iy5QlRUlBISElS2bFkFBATYvXxcXJz++ecfRUVFUZQCAAAAAAB3PbuLUrt27VLz5s1VoEAB9enTRyVKlND58+f13XffqXnz5tqyZYsaNGjgjKy5QkBAgPLkyePqGAAAAAAAAG7NbO8CI0eOVM2aNXXy5EnNnj1bw4YN08cff6yTJ0+qRo0aGjlypDNywsXef/99de7c2SHrOnv2rPLly6fIyEjrtD59+igkJETFihXLcD4AAAAAAPAsdheldu3apXfeeUd58+ZNMz1v3rwaNGiQdu7c6bBw+D9NmzaVl5eXDh48aJ3233//yWQy6Z9//rFpHWXLltXKlSuztf2hQ4dq6dKl2Vr2VqVLl1ZMTIyCgoIkSTt27NA333yj06dP69KlS+nmO5PJZNL+/fudvh0AAAAAAJCW3UWp5ORk+fn5ZTjP399fycnJdxwKGQsODtaQIUNcHcPhTp8+rdKlS+dIEQoAAAAAAOQOdhelatWqpTlz5mQ479NPP1WtWrXuOBQy1q9fP/3666/atm1bhvMNw9AHH3yge+65RyEhIXrsscd06tQpSdKzzz6rs2fPqnPnzsqXL59efvnlDJd/9913VaxYMeXPn18VK1bUmjVrJEmjRo3SU089ZW17+PBhPfDAAwoMDFSzZs30zjvvqGnTptb5JpNJn3zyiapXr678+fPriSeesN6O988//8hkMum///7TzJkz9eKLL+rQoUPKly+fevXqlWa+JFksFs2cOVOVK1dWYGCgKlSooPXr10uSNmzYoPvvv19BQUEqXry4+vXrp7i4OGuO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iHB1DNyBpKQkawEj5f8pxyzHqHsxm82Ki4vTDz/8IC8vLx08eFDLli1zdSxkQ+rPzpdfflmHDx92cSLcqZT9ee7cOfn6+iohIUE7duyggOyGTCaTEhMT1axZM23ZskUXLlxQ3bp19c8//7g6GhyAohTslvpDu3379kpISNDEiRNdnArZZRiGvLy8FBUVpbp162rDhg368ssvNWPGDM2dO9fV8WCn1Mdnnz599Oyzz6pdu3Z6/vnnJd28gIL7slgsunHjhmrWrKnZs2e7Og7s9OOPP+rcuXPy9vaWl5eXjhw5otdee029e/fWzJkzde7cOZnNZgpTbuarr75Sv379NGnSJNWvX1+XL192dSTYyWKxWD87n3rqKe3du1fVqlVzcSo4wueff6577rlHhw8fVvXq1bVixQp5eXm5OhayIT4+Xq1atdLTTz+tWrVqadiwYapatSo9HD0AVyewW8qHdseOHfXPP/9o586dkqQDBw5ox44dOnXqlKKjo10ZEXYwmUy6ceOG2rVrpxYtWmj58uVat26dypUrp19++cXV8WCn1Mfn0aNHNX36dA0cOFCHDh3SJ5984uJ0yK6Uv+qazWb5+/trxIgR+v7773Xo0CEXJ4Otbty4oU8//VT169fX1atXFR8fr/r166tgwYKSpG3btumZZ57R6dOnZTab+ZLtRp555hk98cQTGjJkiDp37qwBAwZIotebO0n5g80zzzyjS5cuae/evZKk2NhYRUVFuTIa7lDnzp3VuXNnNWjQQFWrVtX06dNdHQnZlC9fPj377LP677//dP36ddWsWVPSze9InG/dG0UpZMvBgwf1zTffqEuXLpKkSZMmqVevXnrhhRfUvn17jRo1ShcuXHBxStjq119/VYECBTR58mRJUsGCBdWhQwf9+uuvio2NVWJiorUtF0q535IlS3TlyhWtW7dOtWrVUocOHVS3bl2dOHHC1dGQTV5eXjp16pR++OEH/ffff+rYsaMKFSqk7du3S+Li1x34+/tr1qxZaty4serXr68vvvhCw4YN0/jx4/Xll1/qvffeU8WKFTVy5EjFxsZy67QbSCkWh4SEKCQkRM2bN9eBAwe0aNEiSXxeupv3339f3333ndatWydJmjlzpp5//nnVqlVLQ4YM0a5du1ycEPZIOT7z5csnHx8feXt7648//rDe7pX6uy1yt5R9efXqVRUvXlwbN27UxIkT9dhjj+mHH36Qt7e3tbDM2GHuiaIUsqVmzZpavHixPv/8czVt2lRz587V/PnztWfPHg0ePFhHjhzR77//7uqYsFHz5s31/PPPy9fX1zotf/781u7NPj4+1ulcKOV+QUFB6tSpk/LkyaPExER5e3urXr16unTpkqS0F0oUM9xDcnKyevXqpQ4dOqh3796KiYnRY489pg8//FCXL1/mlq9c6tZ9Ehoaqg8++ED169fXgAED9O+//1rb1ahRQ48//rgOHz6smJgYV8SFHZKTk+Xl5aWTJ09q2bJleuONN7R69Wo9/fTTmjhxohYtWmT9DN2xY4eL08IWb731lipUqKA+ffpo+PDh+vDDD9W+fXu988472rt3r7788kvFxcW5OiZs5OXlJYvFop07d2r69Om6evWqHnnkET300EM6evSo9bvtv//+q6SkJBenRWYsFot1vL7HHntMK1euVPPmzdW7d2/1799fvXv3thaS+/XrZx0TF27GAOxksVisj5cuXWpUqlTJ+O2339K0adasmdG3b9+cjoZsSE5OTvM8KSnJMAzDOHz4sFG3bl3r9H79+hkfffRRjmaDfVIfmxEREWnmffTRR0azZs2sbdavX5+j2WC/W4/NVatWGc8884zx8ssvG5UrVza+/fZb49577zU6depkJCQkuCglMpNyLo2NjTV27dplbNq0yYiLizMMwzDCwsKM5557zggJCTEuXLhgXSYyMtKoW7eucfToUZdkhm1Sjs0DBw4YhQoVMqZMmWJcunTJMAzDOHv2rDF27FijcuXKxty5c42ePXsatWrVSnN+hutltj/i4uKMMmXKGD4+PsY///xjnb53717D39/f2L59e05FhANMmDDBaNSokfHNN98YhmEYV69eNXr27GmUKlXKOHnypDFnzhyjfv36RlRUlIuTIivHjh0zihYtasycOdO4ceOGdXpkZKQxZswYw2QyGU2bNjXKli1rJCYmujApssvb1UUxuB+TyWQdTLlTp0564IEHVKRIEVksFuug2dWrV1f58uVdHRU2uHXg65S/7MbHx1u7wHbt2lUHDhzQjBkzcjwfMmekGtRcunlspvz1PiQkJE2b/PnzKygoSCaTSbNnz9brr7+ukydPqly5cq6Kj9swm806deqUdu/erQcffFAtWrTQl19+qccff1wvvviivv76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GIaaNm2qe++9V127dtXZs2f15ptv6plnntHnn3+uGzdu6P3335evr6/at2+vatWquToybpHyHffKlStq3ry5vv322zS/QDt27FgtX75cL730krp06aJChQqlWxYewACycOPGDaNWrVrGwYMHDcMwjFdffdXIly+f8dhjj7k4GWyRmJiY5nlUVJSxatWqNNP27t1rlCxZ0ti9e3ea6RaLxen5YJ+nnnrKqF+/fobzUvZXyv/ffPNNo2DBgsahQ4dyLB9sFxUVZfzzzz+GYRjG1atXjaSkJMMwDGPy5MnGAw88YFSrVs14+eWXre07depkvPHGGy7JiqzFxcUZDz74oPH6669bp7322mtG69atjfj4eMMwDCM6OtrYu3ev0aZNG6Nr165G586djYSEBMMwDOu+R+7w1ltvGQMHDjQMwzDCwsKM//77z1i1apVx9epVIzEx0ahXr57Ro0cP488//zSKFi1qFCtWzPj999+tyycnJ7sqOjLx5JNPGvfdd5/xySefGA0aNDCqV69uTJkyxUhISDAOHjxovPzyy0ZISIjx4osvGn369DECAwONAwcOuDo2bLBnzx6jQYMGaY67P//80wgKCjK++OILFyaDLVL225EjR4yNGzcanTp1Mu69917j1KlT1jYWi8WoUaOGce+99xqLFy92VVQ4GaVFZCopKUl+fn6qVKmSLBaLTp06pW+//VZt27ZVVFSUJk6c6OqIuA1vb2+dP39eU6dOtd5n/8QTT0iS4uLiJEnBwcEqWbJkmlvBJG7by20GDBigNWvWaPfu3ZKkr776SiNHjlTnzp3T/FKQyWTSt99+q+nTp2vDhg2qXr26K2MjAxaLRYGBgSpTpozCw8PVt29fffDBB0pOTlbHjh1VtGhRRUZGatCgQYqNjVWvXr30119/acqUKa6Ojgzs2bNHFStW1HvvvSfp5v598MH/1959h0VxdQ8c/+7SFSuKvWvsDRArir0Qe4tdsZfYSwRNLGjssYvGYIs1JnajYo9RsGFDRUXBXhALSt+9vz/87byiJjF5fd3FnM/z5FFmZ/CQYWbunHvvuVWIjo7WRkE5Ojri6urK9u3b+fHHH1mzZo2saGqhHBwcuHLlCuvWrSNPnjzcvn2bmjVraislZs2alRUrVlCyZElq1arFmDFjKFu2rHa89NpblqCgIJ48ecLJkyfp3bs3QUFB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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Dark bars: P(Δ > 0) > 0.95 (docs significantly reduce error proportion)\n", + "Light bars: P(Δ < 0) > 0.95 (docs significantly increase error proportion)\n", + "Medium bars: Not significant\n", + "Saved bootstrap run: b56674e7-bf32-41e0-89f6-e96fb12f4c2e\n", + " Description: API Knowledge Error Ratio: no_docs vs with_docs\n", + " Timestamp: 2026-02-20T19:13:42.411427\n", + " Total runs in file: 51\n", + "\n", + "Results saved: b56674e7-bf32-41e0-89f6-e96fb12f4c2e\n" + ] + } + ], + "source": [ + "# Run clustered Bayesian bootstrap for API knowledge error ratio delta per model\n", + "# Delta = ratio(no_docs) - ratio(with_docs)\n", + "# Positive delta means no_docs has higher API knowledge error ratio\n", + "\n", + "bootstrap_results_ratio = {}\n", + "\n", + "print(\"Bayesian Bootstrap: API Knowledge Error Ratio Delta (no_docs - with_docs)\")\n", + "print(\"Positive delta = documentation REDUCES the proportion of API knowledge errors\")\n", + "print(\"=\" * 90)\n", + "\n", + "for model in sorted(set(r[\"model\"].split(\"/\")[-1] for r in filtered_runs)):\n", + " model_runs = [r for r in filtered_runs if r[\"model\"].split(\"/\")[-1] == model]\n", + " \n", + " no_docs_runs = [r for r in model_runs if not r.get(\"include_api_docs\")]\n", + " with_docs_runs = [r for r in model_runs if r.get(\"include_api_docs\")]\n", + " \n", + " # Run clustered bootstrap (only uses shared tests)\n", + " result = bayes_bootstrap_delta_clustered(\n", + " group_a=no_docs_runs,\n", + " group_b=with_docs_runs,\n", + " statistic=weighted_api_knowledge_ratio,\n", + " cluster_key=\"test_id\",\n", + " n_draws=100000,\n", + " seed=42\n", + " )\n", + " \n", + " if result:\n", + " bootstrap_results_ratio[model] = result\n", + " \n", + " # Interpret: positive delta means no_docs has higher ratio\n", + " # (i.e., documentation reduces API knowledge errors as % of total)\n", + " direction = \"DOCS REDUCE\" if result[\"mean\"] > 0 else \"DOCS INCREASE\"\n", + " sig = \"*\" if (result[\"p_gt_0\"] > 0.95 or result[\"p_lt_0\"] > 0.95) else \"\"\n", + " \n", + " print(f\"\\n{model}:\")\n", + " print(f\" Delta (no_docs - with_docs): {result['mean']*100:.2f}% [{result['lo']*100:.2f}%, {result['hi']*100:.2f}%]\")\n", + " print(f\" P(delta > 0): {result['p_gt_0']:.3f} | P(delta < 0): {result['p_lt_0']:.3f}\")\n", + " print(f\" Clusters used: {result['n_clusters']} tests (n_a={result['n_a']}, n_b={result['n_b']})\")\n", + " print(f\" Interpretation: {direction} API knowledge error proportion {sig}\")\n", + " else:\n", + " print(f\"\\n{model}: No shared tests, cannot compute delta\")\n", + "\n", + "# Summary visualization (grayscale-friendly)\n", + "print(\"\\n\" + \"=\" * 90)\n", + "print(\"Summary: Delta in API Knowledge Error Ratio (no_docs - with_docs)\")\n", + "\n", + "from matplotlib.lines import Line2D\n", + "\n", + "fig, ax = plt.subplots(figsize=(12, 6))\n", + "\n", + "models = list(bootstrap_results_ratio.keys())\n", + "means = [bootstrap_results_ratio[m][\"mean\"] * 100 for m in models]\n", + "los = [bootstrap_results_ratio[m][\"lo\"] * 100 for m in models]\n", + "his = [bootstrap_results_ratio[m][\"hi\"] * 100 for m in models]\n", + "errors = [[m - l for m, l in zip(means, los)], [h - m for m, h in zip(means, his)]]\n", + "\n", + "x = np.arange(len(models))\n", + "\n", + "# Grayscale-friendly colors based on significance\n", + "colors = []\n", + "for model in models:\n", + " p_gt = bootstrap_results_ratio[model][\"p_gt_0\"]\n", + " p_lt = bootstrap_results_ratio[model][\"p_lt_0\"]\n", + " if p_gt > 0.95:\n", + " colors.append('0.15') # dark = significant positive delta\n", + " elif p_lt > 0.95:\n", + " colors.append('0.7') # light = significant negative delta\n", + " else:\n", + " colors.append('0.5') # medium = not significant\n", + "\n", + "bars = ax.bar(x, means, yerr=errors, capsize=5, color=colors, \n", + " edgecolor='0.3', alpha=0.9, ecolor='0.4')\n", + "\n", + "ax.axhline(y=0, color='0.3', linestyle='--', linewidth=1.5)\n", + "ax.set_xlabel('Model', fontsize=12)\n", + "ax.set_ylabel('Δ API Knowledge Ratio (no_docs − with_docs) %', fontsize=12)\n", + "ax.set_xticks(x)\n", + "ax.set_xticklabels(models, rotation=45, ha='right', fontsize=9)\n", + "ax.grid(axis='y', alpha=0.15, color='0.8')\n", + "\n", + "# Legend\n", + "legend_elements = [\n", + " Line2D([0], [0], marker='s', color='w', markerfacecolor='0.15',\n", + " markersize=12, markeredgecolor='0.3', markeredgewidth=1,\n", + " label='P(Δ > 0) > 0.95', linestyle='None'),\n", + " Line2D([0], [0], marker='s', color='w', markerfacecolor='0.7',\n", + " markersize=12, markeredgecolor='0.3', markeredgewidth=1,\n", + " label='P(Δ < 0) > 0.95', linestyle='None'),\n", + " Line2D([0], [0], marker='s', color='w', markerfacecolor='0.5',\n", + " markersize=12, markeredgecolor='0.3', markeredgewidth=1,\n", + " label='Not significant', linestyle='None'),\n", + "]\n", + "ax.legend(handles=legend_elements, fontsize=9, loc='upper left',\n", + " framealpha=0.95, edgecolor='0.7')\n", + "\n", + "plt.tight_layout()\n", + "plt.savefig(\"api_knowledge_ratio_delta.pdf\", bbox_inches='tight')\n", + "plt.show()\n", + "\n", + "print(\"\\nDark bars: P(Δ > 0) > 0.95 (docs significantly reduce error proportion)\")\n", + "print(\"Light bars: P(Δ < 0) > 0.95 (docs significantly increase error proportion)\")\n", + "print(\"Medium bars: Not significant\")\n", + "\n", + "# Save results\n", + "run_id_ratio = save_bootstrap_run(\n", + " description=\"API Knowledge Error Ratio: no_docs vs with_docs\",\n", + " results=bootstrap_results_ratio,\n", + " metadata={\n", + " \"statistic\": \"weighted_api_knowledge_ratio\",\n", + " \"api_knowledge_errors\": [\"endpoint_selection\", \"parameter_misuse\"],\n", + " \"comparison\": \"no_docs vs with_docs (ratio of API errors to total errors)\",\n", + " \"bootstrap_method\": \"bayes_bootstrap_delta_clustered\",\n", + " \"cluster_key\": \"test_id\",\n", + " \"n_draws\": 100000,\n", + " \"seed\": 42,\n", + " \"interpretation\": \"positive delta = docs reduce API knowledge error proportion\",\n", + " \"n_runs_analyzed\": len(filtered_runs)\n", + " }\n", + ")\n", + "print(f\"\\nResults saved: {run_id_ratio}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "ff635acc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Bayesian Bootstrap: API Knowledge Error ABSOLUTE RATE Delta (no_docs - with_docs)\n", + "Positive delta = documentation REDUCES the absolute rate of API knowledge errors\n", + "==========================================================================================\n", + "\n", + "claude-haiku-4.5:\n", + " Raw means: no_docs=0.367, with_docs=0.154\n", + " Delta (no_docs - with_docs): 0.214 [0.126, 0.306]\n", + " P(delta > 0): 1.000 | P(delta < 0): 0.000\n", + " Clusters used: 220 tests\n", + " Interpretation: DOCS REDUCE absolute API knowledge errors *\n", + "\n", + "deepseek-v3.2:\n", + " Raw means: no_docs=0.341, with_docs=0.150\n", + " Delta (no_docs - with_docs): 0.188 [0.107, 0.273]\n", + " P(delta > 0): 1.000 | P(delta < 0): 0.000\n", + " Clusters used: 218 tests\n", + " Interpretation: DOCS REDUCE absolute API knowledge errors *\n", + "\n", + "devstral-2512:\n", + " Raw means: no_docs=0.626, with_docs=0.198\n", + " Delta (no_docs - with_docs): 0.428 [0.330, 0.529]\n", + " P(delta > 0): 1.000 | P(delta < 0): 0.000\n", + " Clusters used: 222 tests\n", + " Interpretation: DOCS REDUCE absolute API knowledge errors *\n", + "\n", + "gemini-3-flash-preview:\n", + " Raw means: no_docs=0.270, with_docs=0.158\n", + " Delta (no_docs - with_docs): 0.109 [0.030, 0.190]\n", + " P(delta > 0): 0.997 | P(delta < 0): 0.003\n", + " Clusters used: 221 tests\n", + " Interpretation: DOCS REDUCE absolute API knowledge errors *\n", + "\n", + "gpt-oss-120b:\n", + " Raw means: no_docs=0.482, with_docs=0.288\n", + " Delta (no_docs - with_docs): 0.195 [0.107, 0.286]\n", + " P(delta > 0): 1.000 | P(delta < 0): 0.000\n", + " Clusters used: 220 tests\n", + " Interpretation: DOCS REDUCE absolute API knowledge errors *\n", + "\n", + "grok-4.1-fast:\n", + " Raw means: no_docs=0.652, with_docs=0.352\n", + " Delta (no_docs - with_docs): 0.293 [0.188, 0.400]\n", + " P(delta > 0): 1.000 | P(delta < 0): 0.000\n", + " Clusters used: 218 tests\n", + " Interpretation: DOCS REDUCE absolute API knowledge errors *\n", + "\n", + "kimi-k2-0905:\n", + " Raw means: no_docs=0.439, with_docs=0.248\n", + " Delta (no_docs - with_docs): 0.180 [0.084, 0.279]\n", + " P(delta > 0): 1.000 | P(delta < 0): 0.000\n", + " Clusters used: 217 tests\n", + " Interpretation: DOCS REDUCE absolute API knowledge errors *\n", + "\n", + "llama-4-scout:\n", + " Raw means: no_docs=1.259, with_docs=0.971\n", + " Delta (no_docs - with_docs): 0.279 [0.155, 0.400]\n", + " P(delta > 0): 1.000 | P(delta < 0): 0.000\n", + " Clusters used: 201 tests\n", + " Interpretation: DOCS REDUCE absolute API knowledge errors *\n", + "\n", + "qwen3-vl-235b-a22b-instruct:\n", + " Raw means: no_docs=0.679, with_docs=0.258\n", + " Delta (no_docs - with_docs): 0.423 [0.328, 0.519]\n", + " P(delta > 0): 1.000 | P(delta < 0): 0.000\n", + " Clusters used: 220 tests\n", + " Interpretation: DOCS REDUCE absolute API knowledge errors *\n", + "\n", + "==========================================================================================\n", + "Summary: Delta in API Knowledge Error ABSOLUTE RATE (no_docs - with_docs)\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA4UZJREFUeJzs3Xl0TPf/x/HXZA8SYostgta+NrbS2veiqmrfqhRVFKW11lZb+dpaS1tbraUbLaqW0qqtqF3R2lISQpCFSCRzf3845ieSMBNJJhnPxzk5Mvd+7p2Xubl37rzncz/XZBiGIQAAAAAAACANOdk7AAAAAAAAAJ49FKUAAAAAAACQ5ihKAQAAAAAAIM1RlAIAAAAAAECaoygFAAAAAACANEdRCgAAAAAAAGmOohQAAAAAAADSHEUpAAAAAAAApDkXewewJ7PZrKCgIHl5eclkMtk7DgAAAAAAQIZnGIYiIiKUL18+OTkl3R/qmS5KBQUFyc/Pz94xAAAAAAAAHM5///2nAgUKJDn/mS5KeXl5Sbr/Inl7e9s5DQAAAAAAQMYXHh4uPz8/S90lKc90UerBJXve3t4UpQAAAAAAAFLQk4ZKYqBzAAAAAAAApDmKUgAAAAAAAEhzz/Tle08SFxen27dv2zsGMhBPT0+5urraOwYAAAAAAOkeRakk3LlzR7t27VJcXJy9oyCDKVCggEqXLv3Ea2cBAAAAAHiWUZRKhGEYOnbsmNzc3FSuXDk5OzvbOxIyALPZrBs3bujMmTOSpDJlytg5EQAAAAAA6RdFqURER0fr5s2bKleunHx8fJJsd+3aNYWHhyf7eby9vZUrV65kL4/0J1u2bJKkM2fOqHjx4lzKBwAAAABAEpJdlDpz5owuX76sqKgo5cyZU8WLF1fWrFlTMpvdxMTESJIyZcqUZJtr166pd+/eunfvXrKfx9XVVfPnz6cw5WCyZ88uSYqKiqIoBQAAAABAEmwqSu3du1fz58/Xzz//rOvXr0u6f6mbyWSSk5OTKlSooE6dOunNN990iAKVk1PSNycMDw/XvXv3FBQUZCli2cLNzU358uVTeHg4RSkH87i/GwAAAAAAcJ9Vn54PHz6s2rVrq3r16tq/f7/eeOMNffHFF1q7dq1++eUXrVy5UuPGjVO+fPk0YsQI+fn5afLkyckq1mQ0MTExio6OtvknLV6buLg4lStXTsePH0/157LVihUr1KlTJ3vHAAAAAAAAdmJVUapq1aoqUqSIDhw4oBMnTmjOnDnq3r27mjdvrgYNGqht27YaNmyY1q1bp6tXr2rGjBlavHixPvnkk9TO/0yrXbu23N3dlSVLFvn4+KhWrVrav3+/Zf7SpUtVtGjRBANu//777zKZTPrwww9TNd/atWtVtGhRZcqUSS+//LJOnTplmde+fXvt27dPhw4dSpXnDgoK0iuvvKLMmTOrYMGC+vLLLx/bfsuWLQoICJCXl5dKlSqlTZs2xZtfqFAheXp6KkuWLMqSJYtl7CgAAAAAAJA8VhWljh8/rkWLFikgIOCJbTNnzqzu3bvr5MmT9IRJA1OmTFFkZKSCg4MVEBCg1157zTJvzpw56tatW4JlFi5cqFdeeUVfffWVYmNjH7v+K1euJCvXmTNn1LFjR82YMUM3btxQ3bp11aJFC8vzOTk5qWPHjpo7d26S67hx40ayx+xq37698uTJo5CQEH3zzTcaMmSIfvvtt0Tbnjt3Ti1bttTYsWMVFhamTz75RK1atdK5c+fitVu1apUiIyMVGRmpW7duJSsXAAAAAAC4z6qiVNGiRW1esbOzswoVKmTzckgeDw8Pde/eXUFBQQoNDVVwcLAOHTqkWrVqxWsXHh6ub7/9VjNmzFD27Nm1YcOGx663W7dueuGFFzRjxgybClTLli1TnTp11KxZM3l4eGjUqFEKCQnRzp07LW3q1aunn376Kcl1bNmyRXnz5lXfvn21b98+q5/77Nmz+uOPPzRp0iRlzpxZVatWVceOHbVo0aJE22/atEkBAQFq3ry5nJyc1KxZM1WpUkVLly61+jkBAAAAAIBtUmRE5n379mn+/Pn6+++/U2J1SIY7d+5owYIF8vf3V44cOXTo0CHlz59fXl5e8dqtWrVK5cqVU7FixdS5c2ctXLjwsev96aef9PHHH+vPP/9UsWLF1KRJE61cuVJ37tx57HJHjx5VhQoVLI9dXV1VqlQpHT161DKtVKlSunr1qoKDgxNdR9u2bfXHH38oW7Zsat++vYoVK6bx48fr/PnzT3zuvHnzytfX1zKtQoUK8Z77YWazWYZhJJj2aPtevXopZ86cqlatmjZu3PjYDAAAAAAA4PFsLkr16NFDb775puXx119/rerVq6tPnz564YUXtGfPnpTMhycYNmyYsmXLpiJFiujUqVP68ccfJUk3b96Ut7d3gvYLFy5Uly5dJEmdOnXSpk2bkiwKSZKLi4uaNm2qVatWKSgoSO3bt9eSJUuUP39+vfnmm0kO2B4ZGZlg3KVs2bIpIiLC8vhBvps3byb5/CVKlNDHH3+ss2fPatGiRQoKClKVKlVUs2ZN7d27N9nP/bCGDRvqwIEDWrt2rWJjY7V27Vrt2rVL4eHhljbLli3T+fPndfnyZfXr10+tWrWKN34XAAAAAACwjc1Fqe3bt6tu3bqWxxMmTFCjRo10+PBhVa9eXRMnTkzRgHi8SZMm6datW7py5Yo2bdqkcuXKSZJ8fHziFVUk6dixYzpy5Ijatm0rSfLz89PLL7+sr776yqrnypIli8qVK6cKFSrIzc1Nx48fV1xcXJJtw8LC4k0LCwuL13PrQT4fH58nPrfJZFLJkiVVvnx5Pffcczp16pRCQ0OT/dwPK1asmL755huNGzdOuXPn1sKFC9WuXTvlyJHD0qZGjRrKlCmT3N3d1aFDBzVv3lzffffdE3MDAAAAAIDEudi6wJUrV+Tv7y/p/h3OTpw4oblz56pcuXJ677331Lt37xQPCdtVqFBBly9fVmRkpLJkySLpfi+pZs2aKXv27JZ2nTt31qRJkzR06NAk13X+/HmtXLlSK1eu1O3bt9WhQwft2LFDJUuWTHKZcuXK6fDhw5bH9+7d08mTJ1W2bFnLtJMnT8rX11d58+ZNcj137tzRunXrtHLlSv3+++9q0qSJRo4cqcaNG8vFJfE/33LlyikoKEghISHKnTu3JOnw4cPxnvtRzZo1U7NmzSyPq1atqq5duybZ3skpRa58BewqLCwsQQHXGlmzZlXWrFlTIREAAACAZ4nNRSlXV1fdvXtXkrRr1y55eHjoxRdflHS/xwt3JUsf8uXLpwoVKui3335T06ZNFRMTo+XLl2vu3LmW7SfdL8b06dNHv//+u2rWrJlgPd27d9f333+vVq1aae7cuapZs6ZMJtMTn79Tp06aPn26Nm7cqHr16mnSpEnKmTNnvOf49ddf1bRp0yTXsWnTJrVp00aVKlVSp06dtGLFikQvSXzUc889p5deeknDhw/X7Nmzdfz4ca1YsUJr165NcpkDBw6oQoUKioqKstwx8EFRKjAwUBcuXFDVqlXl5OSkH374QevWrdP27dufmAVIz37//XetX7/e5uWaNWum5s2bp0IiAAAAAM8Sm4tSJUqU0LJly1S9enUtXLhQL730klxdXSVJly5dUq5cuVI8JJLn3Xff1eLFi9W0aVOtXbtWoaGhlkv3HrVgwYJEi1I9e/bUnDlz5OHhYdNzFy9eXMuXL9d7772nS5cuKSAgQD/++KOld5PZbNaKFSv09ddfJ7mOYsWK6cSJE/Lz87PpuaX7A7r36NFDuXLlUvbs2fXJJ5/EuxNh6dKlNXz4cHXs2FHS/bG59u3bJ5PJpAYNGmj79u3KnDmzpPtjVPXv31///vuvXFxcVKxYMa1Zs8ZSjAUyqpo1a6p8+fLxpsXExGjq1KmSpCFDhsjNzS3BcvSSAgAAAJASbC5Kvf/++2rXrp1WrVolSfF6n2zbts0yphFS344dOx47v2vXrpo5c6ZOnDihNm3aqE2bNjY/R9WqVZOZTmrZsqVatmyZ6Lyvv/5alStXVkBAQJLLFylSJNnPnT9/fv38889Jzj9x4kS8x1u2bEmybalSpeJdigg4isQuw4uOjrb87ufnJ3d397SOBQAAAOAZYXNRqnXr1ipQoID27NmjypUrq0aNGpZ5BQoUUKtWrVI0IJLP2dlZR48etXeMRHXo0EEdOnSwdwwAAAAAAGAnNhelJKlatWqqVq1aguljx4596kAAAAAAAABwfDYXpfbu3avAwMBELwVbs2aN/P39n+qSr4wmsfFWUnM5AAAAAAAAR2BzUWr48OF66aWXEi1KnTx5Ul9++eVjx+dxFN7e3nJ1dVW+fPmSvQ5XV1er7iYHAAAAAADiCwsLU1hYmM3LJTa2KuzD5qLU0aNH9f777yc6r2rVqpo7d+5Th8oIcuXKpfnz5ys8PDzZ6/D29uZuhQAAAAAAJMPvv/+u9evX27xcs2bN1Lx581RIBFvZXJS6ffu2XFwSX8zJyUkRERFPHQoAAAAAAOBxatasqfLly8ebFhMTo6lTp0qShgwZkujQOfSSSj9sLkoVLlxY27dvV6NGjRLM2759u/z9/VMkWHp37do1vfPOO4qJiUn2Otzc3DRv3jx6SwEAAAAAYKPELsOLjo62/O7n5yd3d/e0jgUb2FyUateunSZMmKDixYurW7dululLlizRzJkzNWzYsBQNmF6Fh4crJiZGderUkY+Pj83L37x5U9u3b1d4eDhFKQAAAAAA8MyxuSg1dOhQ7dixQ927d1ffvn2VL18+BQUF6e7du6pdu/YzU5R6wMfHRzlz5rR3DAAAAAAAgAzFydYF3NzctGXLFn311Vdq0aKFChcurNdee01fffWVNm/enOj1mrCPuLg4lStXTsePH7d3lARWrFihTp062TsGAAAAAACwE5uLUpLk7Oyszp07a+XKldq8ebOlwODs7JzS+fAYtWvXlru7u7JkySIfHx/VqlVL+/fvt8xfunSpihYtqjJlysRb7vfff5fJZNKHH36YqvnWrl2rokWLKlOmTHr55Zd16tQpy7z27dtr3759OnToUKo8d1BQkF555RVlzpxZBQsW1JdffvnY9lu2bFFAQIC8vLxUqlQpbdq0Kd78QoUKydPTU1myZFGWLFmULVu2VMkNAAAAAMCzIllFKUn6999/9cUXX2jSpElasGCB/v3335TMBStNmTJFkZGRCg4OVkBAgF577TXLvDlz5sQb9+uBhQsX6pVXXtFXX32l2NjYZD/39evXk1z+zJkz6tixo2bMmKEbN26obt26atGihaW9k5OTOnbsqLlz5ya5/hs3bujevXvJyta+fXvlyZNHISEh+uabbzRkyBD99ttvibY9d+6cWrZsqbFjxyosLEyffPKJWrVqpXPnzsVrt2rVKkVGRioyMlK3bt1KVi4AAAAAAHCfzUUpwzDUt29flShRQr1799aIESPUs2dPlShRQv3790+NjLCCh4eHunfvrqCgIIWGhio4OFiHDh1SrVq14rULDw/Xt99+qxkzZih79uzasGGDTc8THR2tb7/9Vi1atFChQoUUFRWVaLtly5apTp06atasmTw8PDRq1CiFhIRo586dljb16tXTTz/9lORzbdmyRXnz5lXfvn21b98+qzOePXtWf/zxhyZNmqTMmTOratWq6tixoxYtWpRo+02bNikgIEDNmzeXk5OTmjVrpipVqmjp0qVWPycAAAAAALCNzUWpGTNmaO7cuerVq5f27dun//77T/v27VPv3r01d+5czZgxIzVy4gnu3LmjBQsWyN/fXzly5NChQ4eUP39+eXl5xWu3atUqlStXTsWKFVPnzp21cOHCJ67bMAzt3LlTPXv2VN68eTVr1iw1adJEgYGBCdb/wNGjR1WhQgXLY1dXV5UqVUpHjx61TCtVqpSuXr2q4ODgRNfRtm1b/fHHH8qWLZvat2+vYsWKafz48Tp//vxj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bNigmTNnys3NTe+8805q5wMAAAAAAIADsqqn1JYtWzR8+HCNGjVKktSkSRM999xzevXVV3X16lX5+vqmakgAAAAAAAA4Fqt6Sl25ckU1a9aMN6127doyDENXr15NlWAAAAAAAABwXFYVpeLi4uTp6RlvmoeHhyQpNjY25VMBAAAAAADAoVl9973Tp0/LxeX/m8fFxUmSTp06laBtQEBACkQDAAAAAACAo7K6KPXmm28mOr1z586W3w3DkMlkshSsAAAAAAAAgMRYVZRavHhxaucAAAAAAADAM8SqolTXrl1TOwcAAAAAAACeIVYNdG4Ns9msn376SS1btkypVQIAAAAAAMBBWT2mVFLOnDmjRYsWaenSpbpy5YoyZcqUErkAAAAAAADgwJLVU+rOnTtasmSJatasqZIlS2rq1KnKkSOHZs+ercuXL6d0RgAAAAAAADgYm3pK7d27V4sWLdLq1asVEREhLy8vdejQQStXrtScOXNUs2bN1MoJAAAAAAAAB2JVT6np06erdOnSeumll7RgwQKVL19eixcvVnBwsD799FMZhpHaOQEAAAAAAOBArOopNXjwYJlMJjVt2lQzZszQc889Z5l37969VAsHAAAAAAAAx2RVT6kKFSrIMAxt2LBBHTp00Oeff67w8PDUzgYAAAAAAAAHZVVR6q+//tKhQ4f0zjvv6N9//9U777yjvHnzqkuXLtqxY0cqRwQAAAAAAICjsfrue+XLl9dnn32moKAgLV++XC+++KJWrFih119/XSaTSd99952uXLmSmlkBAAAAAADgIKwuSj3g7u6uDh06aNu2bTp79qyGDx+u/Pnz69NPP5W/v7/eeOON1MgJAAAAAAAAB2JzUephhQoV0vjx43Xx4kVt2LBBzZs314YNG1IqGwAAAAAAAByUVXffexKTyaQmTZqoSZMmCg0NTYlVAgAAAAAAwIE9VU+pxOTIkSOlVwkAAAAAAAAHkyI9pQAAgP24uLjIxSX+W7rJZLL87uHhIcMwEiwXGxur2NjYVM8HAAAAJIaiFAAAGZyPj49y586d5PwiRYokOj0kJETXrl1LrVgAAADAY1GUAgAgg7t586YiIiJsXo5eUgAAALCnFC9KXbt2Tbly5Urp1QIAgCRwGR4AAAAyohQZ6NwwDG3cuFGtWrWSn59fSqwSAAAAAAAADuypekqdPXtWixYt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ulxdXbV69WpJiW/rH374QXv37lXRokX14YcfauvWrXrhhRfsERc2WLBggebNm6fnn39eXbt2VeHChdWgQQNt2rRJxYsX14EDBzRr1iytWLGC/TIdMZvNat26tTJnzqylS5fqzJkz+uqrr7Rnzx699NJLGj9+vG7evKlu3brpxx9/VJs2bVSkSBGNHTtWrq6ujz02w/42b96s2bNna/369YqIiFDbtm3l5uamkydP6ttvv1W5cuV0+/ZtZcqUSSaTSbGxsXJx4Tvh9OLVV1/VpUuXlD17dl29elUVKlRQ165dVb9+/QTvn/PmzdNnn32mbdu2KU+ePHZMjcd5dLuFhIRo2LBhunbtmrp166aWLVtKuj8ebu7cudmW6dTD29EwDHXo0EHZsmXTvHnzZDabFRcXJ1dXV508eVIFCxZUlixZLMvy+STj4SwHVntwYNi8ebOk/79W+9H5DwQHB2vIkCEaPny4NmzYQEEqnYiLi7PcZe/YsWM6cuSIJD32Lk+GYejo0aOKjIy0FKRiY2M54Kcz77//vo4ePart27erXbt2kv6/J+PDwsPDNXXqVA0dOlRbtmyhIJVOPRjU80EvxR49eujbb79V9erV1a5dOy1btkwNGzbU559/rqioKFWrVk1ff/21nJ2dLcvC/pycnOTs7KwWLVpIkooVK6b3339fbdq00a5duzRnzhz5+Pjos88+U/PmzRUTE6OJEydajrMUpNK3woULa9OmTapXr56aNGkib29vDRo0SEWLFtWvv/4qScqcObNMJpPMZjMFqXTkm2++0dmzZ/XXX39p69atmj59ujw8PPTxxx/r119/tZzXXr16VR999JGGDx+u5cuXU8RI53r06KEXX3zR8jh37tyaOnWq4uLiNGXKFK1cuVLS/fFw2Zbp04OC1M2bN3Xr1i2ZTCbVq1dPJ0+e1KFDh+Tk5GQZE2zatGn65ptv4i3P55OMhzMd2OTdd99VkyZN9PHHH0vSYwfUzZw5s0qWLKk//vhDAQEBaRkTSXgwUGB4eLhq166tDz/8UD169FDfvn0lxS8sPrxdS5curffee0+bN2+2fFDixDp9uXbtmpycnDRz5kz98ccf+v3339WmTRtJsnwYeiB79uwqVKiQdu7cyb6ZTj3YV0+cOKHevXurVatWGj9+vKKiovTee+/pzz//1JEjR7R3717NmTMnwd0U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vr6+Rp48eYyDBw9alo+Li7NXdCSiRYsWRsWKFY358+cbVatWNcqUKWNMnTrViImJMY4ePWr07t3byJ49u9GjRw+jZ8+ehpeXl3HkyBF7x8YT7N+/36hatWq8/e348eNG1qxZjUWLFtkxGaz1YNudPHnS2LJli9GuXTvj+eefN86dO2dpYzabjbJlyxrPP/+8sWLFCntFRSqirAirxcbGyt3dXcWLF5fZbNa5c+f03XffqVmzZgoPD9fkyZPtHRGP4eLiosuXL2vatGmWa+5fffVVSVJUVJQkycfHR/nz5493KZjEZXvpzXvvvaf169dr3759kqRly5bpo48+Uvv27ePdMchkMum7777TzJkztXnzZpUpU8aesZEIs9ksLy8v+fv769q1a+rVq5f+97//KS4uTm3atJGvr6/CwsI0ZMgQ3blzR2+++ab+/vtvTZ061d7R8Yj9+/erWLFiGj16tKT727Z69eq6ceOGpRdUlixZVLFiRa1fv17Lly/XypUruZtpOuXp6akzZ87o66+/lp+fny5duqQ6depY7pSYK1cuffXVVypdurTq1q2rkSNHqnz58pbl+eY+/di7d69u3rypAwcOqFevXtq7d68KFCigsWPHasqUKSpRooSmTZumL7/8Ui4uLsqePbv27NmjcuXK2Ts6HvHonWVdXFx0584dXbhwQdL9MW5Lly6tJk2aKCgoyA4JYYu4uDg5OTnp0qVLqlatmgIDAzVr1ixVrVpVdevW1aVLlyTdP5+tX7++unfvbrm7NBwL75iwysO3Ma5Ro4a6deumF198URMnTtTSpUvVqVMndejQwc4p8SQ//PCD1q1bZzlZfvDm7unpKen+QPbZs2fX888/b7eMeLx79+6pXLlyypo1q1avXq358+dr7NixioyMlCQ1aNBAX3/9taV97dq1debMGe6yl049KCDevHlTOXPmVP78+bVr1y59+eWX8vf318iRI/Xaa6/ppZdeUpcuXXTjxg3t379fLi4uCU7OYV9FihRRhw4dLEV9JycnVapUSa6urrpz546l3d27d+MtZ3CXvXRp/PjxunLlinr16qXevXurdOnS8vLykiSFhYUpW7Zsun79ut58803dvXtXffr0kbOzM/tlOnTr1i2dO3dON2/etEzr2LGjihcvrt27d+vIkSPKnDmzXn/9dc2bN0+TJk3iMq906EHx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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Dark bars: P(Δ > 0) > 0.95 (docs significantly reduce errors)\n", + "Light bars: P(Δ < 0) > 0.95 (docs significantly increase errors)\n", + "Medium bars: Not significant\n", + "Saved bootstrap run: fb56e69a-e767-4e6f-b834-88fe1227a394\n", + " Description: API Knowledge Error Absolute Rate: no_docs vs with_docs\n", + " Timestamp: 2026-02-20T19:14:40.132371\n", + " Total runs in file: 52\n", + "\n", + "Results saved: fb56e69a-e767-4e6f-b834-88fe1227a394\n" + ] + } + ], + "source": [ + "# Run clustered Bayesian bootstrap for API knowledge error ABSOLUTE RATE per model\n", + "# Delta = rate(no_docs) - rate(with_docs)\n", + "# Rate = API knowledge errors per test (not as proportion of total errors)\n", + "# Positive delta means no_docs has higher absolute rate of API knowledge errors\n", + "\n", + "def weighted_api_knowledge_rate(runs: list[dict], weights: np.ndarray) -> float:\n", + " \"\"\"\n", + " Compute weighted API knowledge error rate (absolute, not ratio).\n", + " Rate = weighted mean of API knowledge errors per test.\n", + " \"\"\"\n", + " api_knowledge = np.array([\n", + " r.get(\"tool_use_errors\", {}).get(\"endpoint_selection\", 0) + \n", + " r.get(\"tool_use_errors\", {}).get(\"parameter_misuse\", 0) \n", + " for r in runs\n", + " ])\n", + " return np.sum(api_knowledge * weights)\n", + "\n", + "bootstrap_results_absolute = {}\n", + "\n", + "print(\"Bayesian Bootstrap: API Knowledge Error ABSOLUTE RATE Delta (no_docs - with_docs)\")\n", + "print(\"Positive delta = documentation REDUCES the absolute rate of API knowledge errors\")\n", + "print(\"=\" * 90)\n", + "\n", + "for model in sorted(set(r[\"model\"].split(\"/\")[-1] for r in filtered_runs)):\n", + " model_runs = [r for r in filtered_runs if r[\"model\"].split(\"/\")[-1] == model]\n", + " \n", + " no_docs_runs = [r for r in model_runs if not r.get(\"include_api_docs\")]\n", + " with_docs_runs = [r for r in model_runs if r.get(\"include_api_docs\")]\n", + " \n", + " # Run clustered bootstrap (only uses shared tests)\n", + " result = bayes_bootstrap_delta_clustered(\n", + " group_a=no_docs_runs,\n", + " group_b=with_docs_runs,\n", + " statistic=weighted_api_knowledge_rate,\n", + " cluster_key=\"test_id\",\n", + " n_draws=100000,\n", + " seed=42\n", + " )\n", + " \n", + " if result:\n", + " bootstrap_results_absolute[model] = result\n", + " \n", + " # Compute raw means for context\n", + " no_docs_mean = np.mean([\n", + " r.get(\"tool_use_errors\", {}).get(\"endpoint_selection\", 0) + \n", + " r.get(\"tool_use_errors\", {}).get(\"parameter_misuse\", 0) \n", + " for r in no_docs_runs\n", + " ]) if no_docs_runs else 0\n", + " with_docs_mean = np.mean([\n", + " r.get(\"tool_use_errors\", {}).get(\"endpoint_selection\", 0) + \n", + " r.get(\"tool_use_errors\", {}).get(\"parameter_misuse\", 0) \n", + " for r in with_docs_runs\n", + " ]) if with_docs_runs else 0\n", + " \n", + " direction = \"DOCS REDUCE\" if result[\"mean\"] > 0 else \"DOCS INCREASE\"\n", + " sig = \"*\" if (result[\"p_gt_0\"] > 0.95 or result[\"p_lt_0\"] > 0.95) else \"\"\n", + " \n", + " print(f\"\\n{model}:\")\n", + " print(f\" Raw means: no_docs={no_docs_mean:.3f}, with_docs={with_docs_mean:.3f}\")\n", + " print(f\" Delta (no_docs - with_docs): {result['mean']:.3f} [{result['lo']:.3f}, {result['hi']:.3f}]\")\n", + " print(f\" P(delta > 0): {result['p_gt_0']:.3f} | P(delta < 0): {result['p_lt_0']:.3f}\")\n", + " print(f\" Clusters used: {result['n_clusters']} tests\")\n", + " print(f\" Interpretation: {direction} absolute API knowledge errors {sig}\")\n", + " else:\n", + " print(f\"\\n{model}: No shared tests, cannot compute delta\")\n", + "\n", + "# Summary visualization (grayscale-friendly)\n", + "print(\"\\n\" + \"=\" * 90)\n", + "print(\"Summary: Delta in API Knowledge Error ABSOLUTE RATE (no_docs - with_docs)\")\n", + "\n", + "from matplotlib.lines import Line2D\n", + "\n", + "fig, ax = plt.subplots(figsize=(12, 6))\n", + "\n", + "models = list(bootstrap_results_absolute.keys())\n", + "means = [bootstrap_results_absolute[m][\"mean\"] for m in models]\n", + "los = [bootstrap_results_absolute[m][\"lo\"] for m in models]\n", + "his = [bootstrap_results_absolute[m][\"hi\"] for m in models]\n", + "errors = [[m - l for m, l in zip(means, los)], [h - m for m, h in zip(means, his)]]\n", + "\n", + "x = np.arange(len(models))\n", + "\n", + "# Grayscale-friendly colors based on significance\n", + "colors = []\n", + "for model in models:\n", + " p_gt = bootstrap_results_absolute[model][\"p_gt_0\"]\n", + " p_lt = bootstrap_results_absolute[model][\"p_lt_0\"]\n", + " if p_gt > 0.95:\n", + " colors.append('0.15') # dark = significant positive delta\n", + " elif p_lt > 0.95:\n", + " colors.append('0.7') # light = significant negative delta\n", + " else:\n", + " colors.append('0.5') # medium = not significant\n", + "\n", + "bars = ax.bar(x, means, yerr=errors, capsize=5, color=colors, \n", + " edgecolor='0.3', alpha=0.9, ecolor='0.4')\n", + "\n", + "ax.axhline(y=0, color='0.3', linestyle='--', linewidth=1.5)\n", + "ax.set_xlabel('Model', fontsize=12)\n", + "ax.set_ylabel('Δ API Knowledge Errors (no_docs − with_docs)', fontsize=12)\n", + "ax.set_xticks(x)\n", + "ax.set_xticklabels(models, rotation=45, ha='right', fontsize=9)\n", + "ax.grid(axis='y', alpha=0.15, color='0.8')\n", + "\n", + "# Legend\n", + "legend_elements = [\n", + " Line2D([0], [0], marker='s', color='w', markerfacecolor='0.15',\n", + " markersize=12, markeredgecolor='0.3', markeredgewidth=1,\n", + " label='P(Δ > 0) > 0.95', linestyle='None'),\n", + " Line2D([0], [0], marker='s', color='w', markerfacecolor='0.7',\n", + " markersize=12, markeredgecolor='0.3', markeredgewidth=1,\n", + " label='P(Δ < 0) > 0.95', linestyle='None'),\n", + " Line2D([0], [0], marker='s', color='w', markerfacecolor='0.5',\n", + " markersize=12, markeredgecolor='0.3', markeredgewidth=1,\n", + " label='Not significant', linestyle='None'),\n", + "]\n", + "ax.legend(handles=legend_elements, fontsize=9, loc='upper left',\n", + " framealpha=0.95, edgecolor='0.7')\n", + "\n", + "plt.tight_layout()\n", + "plt.savefig(\"api_knowledge_absolute_rate_delta.pdf\", bbox_inches='tight')\n", + "plt.show()\n", + "\n", + "print(\"\\nDark bars: P(Δ > 0) > 0.95 (docs significantly reduce errors)\")\n", + "print(\"Light bars: P(Δ < 0) > 0.95 (docs significantly increase errors)\")\n", + "print(\"Medium bars: Not significant\")\n", + "\n", + "# Save results\n", + "run_id_abs = save_bootstrap_run(\n", + " description=\"API Knowledge Error Absolute Rate: no_docs vs with_docs\",\n", + " results=bootstrap_results_absolute,\n", + " metadata={\n", + " \"statistic\": \"weighted_api_knowledge_rate\",\n", + " \"api_knowledge_errors\": [\"endpoint_selection\", \"parameter_misuse\"],\n", + " \"comparison\": \"no_docs vs with_docs (absolute rate, not ratio)\",\n", + " \"bootstrap_method\": \"bayes_bootstrap_delta_clustered\",\n", + " \"cluster_key\": \"test_id\",\n", + " \"n_draws\": 100000,\n", + " \"seed\": 42,\n", + " \"interpretation\": \"positive delta = docs reduce absolute API knowledge error count\",\n", + " \"n_runs_analyzed\": len(filtered_runs)\n", + " }\n", + ")\n", + "print(f\"\\nResults saved: {run_id_abs}\")" + ] + }, + { + "cell_type": "markdown", + "id": "603b25bb", + "metadata": {}, + "source": [ + "# Recovery strategies analysis" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "3cc0ba4b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total unique test_ids: 222\n", + "Total runs: 3955\n", + "Test_id count distribution: min=16, max=18, mean=17.8\n", + "\n", + "Created 3955 weighted recovery runs\n", + "Weight sum per test_id: min=1.0000, max=1.0000\n", + "✓ Each test_id contributes equally (weight sum = 1.0)\n", + "\n", + "Sample weighted run:\n", + " test_id: 2443b5cf...\n", + " weight: 0.0556\n", + " min_tool_calls: 1\n", + " recovery_strategies (weighted):\n", + " retry_same: 0.0000 (raw: 0)\n", + " parse_error_message: 0.0000 (raw: 0)\n", + " total_recovery_strategies: 0.0000 (raw: 0)\n" + ] + } + ], + "source": [ + "# Weighted recovery strategies by test_id\n", + "# Each test_id contributes equally regardless of how many runs it has\n", + "\n", + "from collections import Counter\n", + "\n", + "# Step 1: Count occurrences of each test_id\n", + "test_id_counts = Counter(run[\"test_id\"] for run in filtered_runs)\n", + "print(f\"Total unique test_ids: {len(test_id_counts)}\")\n", + "print(f\"Total runs: {len(filtered_runs)}\")\n", + "print(f\"Test_id count distribution: min={min(test_id_counts.values())}, max={max(test_id_counts.values())}, mean={sum(test_id_counts.values())/len(test_id_counts):.1f}\")\n", + "\n", + "# Step 2: Compute weight for each test_id (1 / count)\n", + "test_id_weights = {test_id: 1.0 / count for test_id, count in test_id_counts.items()}\n", + "\n", + "# Step 3: Create weighted runs with only essential fields + weighted recovery strategies\n", + "recovery_strategy_keys = [\n", + " \"retry_same\", \"retry_modified_params\", \"switch_tool\", \"lookup_correct_value\",\n", + " \"backtrack\", \"parse_error_message\", \"handle_ui_obstacle\", \"change_strategy\",\n", + " \"break_into_steps\", \"verify_prerequisites\", \"skip_and_continue\", \"wait_and_retry\",\n", + " \"use_fallback\", \"other_recovery_strategy\", \"no_recovery_attempted\",\n", + " \"total_recovery_strategies\"\n", + "]\n", + "\n", + "weighted_recovery_runs = []\n", + "for run in filtered_runs:\n", + " test_id = run[\"test_id\"]\n", + " weight = test_id_weights[test_id]\n", + " \n", + " # Extract essential identification fields\n", + " weighted_run = {\n", + " \"run_id\": run[\"run_id\"],\n", + " \"test_id\": test_id,\n", + " \"service\": run[\"service\"],\n", + " \"model\": run[\"model\"],\n", + " \"score\": run[\"score\"], # base_score (0-100)\n", + " \"status\": run[\"status\"],\n", + " \"include_api_docs\": run[\"include_api_docs\"],\n", + " \"min_tool_calls\": run[\"min_tool_calls\"], # for complexity level segmentation\n", + " \"weight\": weight, # store the weight for reference\n", + " }\n", + " \n", + " # Weighted recovery strategies\n", + " recovery_strategies = run.get(\"recovery_strategies\", {})\n", + " weighted_recovery = {}\n", + " for key in recovery_strategy_keys:\n", + " original_value = recovery_strategies.get(key, 0)\n", + " weighted_recovery[key] = original_value * weight\n", + " weighted_recovery[f\"{key}_raw\"] = original_value # keep raw for reference\n", + " \n", + " weighted_run[\"recovery_strategies\"] = weighted_recovery\n", + " weighted_recovery_runs.append(weighted_run)\n", + "\n", + "print(f\"\\nCreated {len(weighted_recovery_runs)} weighted recovery runs\")\n", + "\n", + "# Verify weighting: sum of weights per test_id should equal 1\n", + "test_id_weight_sums = {}\n", + "for run in weighted_recovery_runs:\n", + " tid = run[\"test_id\"]\n", + " test_id_weight_sums[tid] = test_id_weight_sums.get(tid, 0) + run[\"weight\"]\n", + "\n", + "# Check that all test_ids have weight sum of 1\n", + "weight_sum_values = list(test_id_weight_sums.values())\n", + "print(f\"Weight sum per test_id: min={min(weight_sum_values):.4f}, max={max(weight_sum_values):.4f}\")\n", + "print(\"✓ Each test_id contributes equally (weight sum = 1.0)\")\n", + "\n", + "# Show sample\n", + "print(\"\\nSample weighted run:\")\n", + "sample = weighted_recovery_runs[0]\n", + "print(f\" test_id: {sample['test_id'][:8]}...\")\n", + "print(f\" weight: {sample['weight']:.4f}\")\n", + "print(f\" min_tool_calls: {sample['min_tool_calls']}\")\n", + "print(f\" recovery_strategies (weighted):\")\n", + "for key in [\"retry_same\", \"parse_error_message\", \"total_recovery_strategies\"]:\n", + " print(f\" {key}: {sample['recovery_strategies'][key]:.4f} (raw: {sample['recovery_strategies'][f'{key}_raw']})\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "2f57ec2a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total runs in filtered_runs: 3955\n", + "Runs with recovery strategies used: 3625\n", + "Runs excluded (no recovery attempted): 330\n", + "\n", + "Unique cluster keys (test_id × docs): 440\n", + "Cluster key count distribution: min=1, max=9, mean=8.2\n", + "Unique test_ids: 221\n", + "\n", + "Created 3625 weighted recovery runs\n", + "Weight sum per cluster_key: min=1.0000, max=1.0000\n", + "✓ Each (test_id, include_api_docs) pair contributes equally (weight sum = 1.0)\n", + "\n", + "Sample weighted run:\n", + " test_id: e4494bce...\n", + " cluster_key: e4494bce-7101-5ec5-b...\n", + " include_api_docs: True\n", + " weight: 0.1429\n", + " min_tool_calls: 2\n", + " status: passed\n" + ] + } + ], + "source": [ + "# Weighted recovery strategies by test_id\n", + "# Each test_id contributes equally regardless of how many runs it has\n", + "# Only include runs where recovery was actually attempted (total_recovery_strategies > 0)\n", + "# Cluster key: (test_id, include_api_docs) to treat each experimental condition as a unit\n", + "\n", + "from collections import Counter\n", + "\n", + "# Step 1: Filter to runs with at least one recovery strategy used\n", + "runs_with_recovery = [\n", + " run for run in filtered_runs \n", + " if run.get(\"recovery_strategies\", {}).get(\"total_recovery_strategies\", 0) > 0\n", + "]\n", + "\n", + "print(f\"Total runs in filtered_runs: {len(filtered_runs)}\")\n", + "print(f\"Runs with recovery strategies used: {len(runs_with_recovery)}\")\n", + "print(f\"Runs excluded (no recovery attempted): {len(filtered_runs) - len(runs_with_recovery)}\")\n", + "\n", + "# Step 2: Create composite cluster key (test_id + include_api_docs)\n", + "# This treats each (test, docs_condition) pair as a separate experimental unit\n", + "for run in runs_with_recovery:\n", + " run[\"cluster_key\"] = f\"{run['test_id']}_{run['include_api_docs']}\"\n", + "\n", + "# Step 3: Count occurrences of each cluster_key in filtered set\n", + "cluster_key_counts = Counter(run[\"cluster_key\"] for run in runs_with_recovery)\n", + "print(f\"\\nUnique cluster keys (test_id × docs): {len(cluster_key_counts)}\")\n", + "print(f\"Cluster key count distribution: min={min(cluster_key_counts.values())}, max={max(cluster_key_counts.values())}, mean={sum(cluster_key_counts.values())/len(cluster_key_counts):.1f}\")\n", + "\n", + "# Also show test_id counts for comparison\n", + "test_id_counts = Counter(run[\"test_id\"] for run in runs_with_recovery)\n", + "print(f\"Unique test_ids: {len(test_id_counts)}\")\n", + "\n", + "# Step 4: Compute weight for each cluster_key (1 / count)\n", + "cluster_key_weights = {ck: 1.0 / count for ck, count in cluster_key_counts.items()}\n", + "\n", + "# Step 5: Create weighted runs with only essential fields + weighted recovery strategies\n", + "recovery_strategy_keys = [\n", + " \"retry_same\", \"retry_modified_params\", \"switch_tool\", \"lookup_correct_value\",\n", + " \"backtrack\", \"parse_error_message\", \"handle_ui_obstacle\", \"change_strategy\",\n", + " \"break_into_steps\", \"verify_prerequisites\", \"skip_and_continue\", \"wait_and_retry\",\n", + " \"use_fallback\", \"other_recovery_strategy\", \"no_recovery_attempted\",\n", + " \"total_recovery_strategies\"\n", + "]\n", + "\n", + "weighted_recovery_runs = []\n", + "for run in runs_with_recovery:\n", + " cluster_key = run[\"cluster_key\"]\n", + " weight = cluster_key_weights[cluster_key]\n", + " \n", + " # Extract essential identification fields\n", + " weighted_run = {\n", + " \"run_id\": run[\"run_id\"],\n", + " \"test_id\": run[\"test_id\"],\n", + " \"cluster_key\": cluster_key, # Composite key for clustering\n", + " \"service\": run[\"service\"],\n", + " \"model\": run[\"model\"],\n", + " \"score\": run[\"score\"], # base_score (0-100)\n", + " \"status\": run[\"status\"],\n", + " \"include_api_docs\": run[\"include_api_docs\"],\n", + " \"min_tool_calls\": run[\"min_tool_calls\"], # for complexity level segmentation\n", + " \"weight\": weight, # store the weight for reference\n", + " }\n", + " \n", + " # Weighted recovery strategies\n", + " recovery_strategies = run.get(\"recovery_strategies\", {})\n", + " weighted_recovery = {}\n", + " for key in recovery_strategy_keys:\n", + " original_value = recovery_strategies.get(key, 0)\n", + " weighted_recovery[key] = original_value * weight\n", + " weighted_recovery[f\"{key}_raw\"] = original_value # keep raw for reference\n", + " \n", + " weighted_run[\"recovery_strategies\"] = weighted_recovery\n", + " weighted_recovery_runs.append(weighted_run)\n", + "\n", + "print(f\"\\nCreated {len(weighted_recovery_runs)} weighted recovery runs\")\n", + "\n", + "# Verify weighting: sum of weights per cluster_key should equal 1\n", + "cluster_key_weight_sums = {}\n", + "for run in weighted_recovery_runs:\n", + " ck = run[\"cluster_key\"]\n", + " cluster_key_weight_sums[ck] = cluster_key_weight_sums.get(ck, 0) + run[\"weight\"]\n", + "\n", + "# Check that all cluster_keys have weight sum of 1\n", + "weight_sum_values = list(cluster_key_weight_sums.values())\n", + "print(f\"Weight sum per cluster_key: min={min(weight_sum_values):.4f}, max={max(weight_sum_values):.4f}\")\n", + "print(\"✓ Each (test_id, include_api_docs) pair contributes equally (weight sum = 1.0)\")\n", + "\n", + "# Show sample\n", + "print(\"\\nSample weighted run:\")\n", + "sample = weighted_recovery_runs[0]\n", + "print(f\" test_id: {sample['test_id'][:8]}...\")\n", + "print(f\" cluster_key: {sample['cluster_key'][:20]}...\")\n", + "print(f\" include_api_docs: {sample['include_api_docs']}\")\n", + "print(f\" weight: {sample['weight']:.4f}\")\n", + "print(f\" min_tool_calls: {sample['min_tool_calls']}\")\n", + "print(f\" status: {sample['status']}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "7d17d99d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Bootstrap cache functions loaded:\n", + " - save_bootstrap_results(results, name, metadata)\n", + " - load_bootstrap_results(name)\n", + " - get_or_compute_bootstrap(name, compute_fn, force_recompute)\n", + " - list_cached_bootstrap()\n" + ] + } + ], + "source": [ + "# Save/Load Bootstrap Results (to avoid recomputation)\n", + "import json\n", + "import os\n", + "from datetime import datetime\n", + "\n", + "BOOTSTRAP_CACHE_DIR = \"bootstrap_cache\"\n", + "\n", + "def save_bootstrap_results(results: dict, name: str, metadata: dict = None) -> str:\n", + " \"\"\"\n", + " Save bootstrap results to a JSON file for later reuse.\n", + " \n", + " Args:\n", + " results: Dict of {strategy: bootstrap_result_dict}\n", + " name: Descriptive name for this result set (used as filename)\n", + " metadata: Optional metadata to save alongside results\n", + " \n", + " Returns:\n", + " Path to saved file\n", + " \"\"\"\n", + " os.makedirs(BOOTSTRAP_CACHE_DIR, exist_ok=True)\n", + " \n", + " # Sanitize name for filename\n", + " safe_name = name.replace(\" \", \"_\").replace(\"/\", \"-\").lower()\n", + " filepath = os.path.join(BOOTSTRAP_CACHE_DIR, f\"{safe_name}.json\")\n", + " \n", + " data = {\n", + " \"name\": name,\n", + " \"timestamp\": datetime.now().isoformat(),\n", + " \"metadata\": metadata or {},\n", + " \"results\": results\n", + " }\n", + " \n", + " with open(filepath, 'w') as f:\n", + " json.dump(data, f, indent=2)\n", + " \n", + " print(f\"Saved bootstrap results to: {filepath}\")\n", + " return filepath\n", + "\n", + "\n", + "def load_bootstrap_results(name: str) -> dict | None:\n", + " \"\"\"\n", + " Load bootstrap results from cache.\n", + " \n", + " Args:\n", + " name: The name used when saving (or filename without .json)\n", + " \n", + " Returns:\n", + " Dict with keys: name, timestamp, metadata, results\n", + " Or None if file not found\n", + " \"\"\"\n", + " safe_name = name.replace(\" \", \"_\").replace(\"/\", \"-\").lower()\n", + " filepath = os.path.join(BOOTSTRAP_CACHE_DIR, f\"{safe_name}.json\")\n", + " \n", + " if not os.path.exists(filepath):\n", + " print(f\"Cache not found: {filepath}\")\n", + " return None\n", + " \n", + " with open(filepath, 'r') as f:\n", + " data = json.load(f)\n", + " \n", + " print(f\"Loaded bootstrap results from: {filepath}\")\n", + " print(f\" Timestamp: {data['timestamp']}\")\n", + " print(f\" Strategies: {len(data['results'])}\")\n", + " return data\n", + "\n", + "\n", + "def get_or_compute_bootstrap(\n", + " name: str,\n", + " compute_fn: callable,\n", + " force_recompute: bool = False\n", + ") -> dict:\n", + " \"\"\"\n", + " Load cached results if available, otherwise compute and cache.\n", + " \n", + " Args:\n", + " name: Cache key/filename\n", + " compute_fn: Function that returns (results_dict, metadata_dict)\n", + " force_recompute: If True, ignore cache and recompute\n", + " \n", + " Returns:\n", + " The results dict\n", + " \"\"\"\n", + " if not force_recompute:\n", + " cached = load_bootstrap_results(name)\n", + " if cached is not None:\n", + " return cached[\"results\"]\n", + " \n", + " print(f\"Computing bootstrap results for: {name}\")\n", + " results, metadata = compute_fn()\n", + " save_bootstrap_results(results, name, metadata)\n", + " return results\n", + "\n", + "\n", + "# List available cached results\n", + "def list_cached_bootstrap():\n", + " \"\"\"List all cached bootstrap result files.\"\"\"\n", + " if not os.path.exists(BOOTSTRAP_CACHE_DIR):\n", + " print(\"No cache directory found\")\n", + " return []\n", + " \n", + " files = [f for f in os.listdir(BOOTSTRAP_CACHE_DIR) if f.endswith('.json')]\n", + " print(f\"Cached bootstrap results ({len(files)}):\")\n", + " for f in sorted(files):\n", + " filepath = os.path.join(BOOTSTRAP_CACHE_DIR, f)\n", + " with open(filepath) as fh:\n", + " data = json.load(fh)\n", + " print(f\" - {f}: {data['name']} ({data['timestamp'][:10]})\")\n", + " return files\n", + "\n", + "print(\"Bootstrap cache functions loaded:\")\n", + "print(\" - save_bootstrap_results(results, name, metadata)\")\n", + "print(\" - load_bootstrap_results(name)\")\n", + "print(\" - get_or_compute_bootstrap(name, compute_fn, force_recompute)\")\n", + "print(\" - list_cached_bootstrap()\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7d17d99d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MEDIAN SPLIT: Top 4 vs Bottom 5 (including llama)\n", + "============================================================\n", + "Top 4 models: ['deepseek/deepseek-v3.2', 'mistralai/devstral-2512', 'moonshotai/kimi-k2-0905', 'qwen/qwen3-vl-235b-a22b-instruct']\n", + "Bottom 5 models: ['anthropic/claude-haiku-4.5', 'google/gemini-3-flash-preview', 'meta-llama/llama-4-scout', 'openai/gpt-oss-120b', 'x-ai/grok-4.1-fast']\n", + "\n", + "Runs in top 4: 1679\n", + "Runs in bottom 5: 1946\n", + "\n", + "Filtering strategies (>= 5% usage in at least one group):\n", + "Strategy Top 4 Bottom 5 Include\n", + "------------------------------------------------------------\n", + "retry_same 7.0% 16.5% ✓\n", + "retry_modified_params 45.6% 53.5% ✓\n", + "switch_tool 7.1% 8.1% ✓\n", + "lookup_correct_value 83.3% 76.7% ✓\n", + "backtrack 17.6% 22.1% ✓\n", + "parse_error_message 42.0% 49.9% ✓\n", + "handle_ui_obstacle 0.0% 0.0% ✗\n", + "change_strategy 40.7% 40.9% ✓\n", + "break_into_steps 92.0% 82.4% ✓\n", + "verify_prerequisites 53.1% 40.4% ✓\n", + "skip_and_continue 10.7% 11.5% ✓\n", + "wait_and_retry 0.2% 0.5% ✗\n", + "use_fallback 7.1% 7.7% ✓\n", + "other_recovery_strategy 0.5% 0.2% ✗\n", + "\n", + "Included: 11 strategies\n", + "Excluded: 3 strategies (['handle_ui_obstacle', 'wait_and_retry', 'other_recovery_strategy'])\n", + "Computing bootstrap results for: top4_vs_bottom5_incl_llama\n", + "Running Bayesian bootstrap on filtered strategies...\n", + "------------------------------------------------------------\n", + " retry_same Δ=-0.0910 P(Δ>0)=0.000 *** TOP LESS\n", + " retry_modified_params Δ=-0.0795 P(Δ>0)=0.000 *** TOP LESS\n", + " switch_tool Δ=-0.0091 P(Δ>0)=0.140 \n", + " lookup_correct_value Δ=+0.0662 P(Δ>0)=1.000 *** TOP MORE\n", + " backtrack Δ=-0.0397 P(Δ>0)=0.002 *** TOP LESS\n", + " parse_error_message Δ=-0.0730 P(Δ>0)=0.000 *** TOP LESS\n", + " change_strategy Δ=-0.0035 P(Δ>0)=0.403 \n", + " break_into_steps Δ=+0.0951 P(Δ>0)=1.000 *** TOP MORE\n", + " verify_prerequisites Δ=+0.1306 P(Δ>0)=1.000 *** TOP MORE\n", + " skip_and_continue Δ=-0.0074 P(Δ>0)=0.200 \n", + " use_fallback Δ=-0.0049 P(Δ>0)=0.286 \n", + "Saved bootstrap results to: bootstrap_cache/top4_vs_bottom5_incl_llama.json\n", + "\n", + "==========================================================================================\n", + "BOOTSTRAP RESULTS: Top 4 vs Bottom 5 (incl. llama)\n", + "==========================================================================================\n", + "Strategy Delta 95% CI P(Δ>0) Sig\n", + "------------------------------------------------------------------------------------------\n", + "verify_prerequisites +0.1306 [+0.1001, +0.1609] 1.000 ✓✓✓\n", + "break_into_steps +0.0951 [+0.0741, +0.1169] 1.000 ✓✓✓\n", + "lookup_correct_value +0.0662 [+0.0435, +0.0891] 1.000 ✓✓✓\n", + "change_strategy -0.0035 [-0.0319, +0.0248] 0.403 \n", + "use_fallback -0.0049 [-0.0216, +0.0127] 0.286 \n", + "skip_and_continue -0.0074 [-0.0244, +0.0098] 0.200 \n", + "switch_tool -0.0091 [-0.0255, +0.0072] 0.140 \n", + "backtrack -0.0397 [-0.0659, -0.0133] 0.002 ✗✗✗\n", + "parse_error_message -0.0730 [-0.1032, -0.0430] 0.000 ✗✗✗\n", + "retry_modified_params -0.0795 [-0.1083, -0.0501] 0.000 ✗✗✗\n", + "retry_same -0.0910 [-0.1096, -0.0720] 0.000 ✗✗✗\n" + ] + }, + { + "data": { + "image/png": "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iz179sDT0xMHDhzI9qIjISEBvXr1wrx58/D+++/j8ePHOHPmDLZv345du3YBALRarW37GTNmYN68eYiOjoZcLofVakWFChWwfv16lC5dGgcPHsQ777yDcuXKoX///gCAFStWYOLEiZg/fz66du0KnU6HAwcOZIlFFEWMHz8emzdvxv79+xEcHJzj55N50ZaJz2sS0YtER0dLHUKBcHFxwZMnTzBu3DipQyEiIqJcMOku4gICAhAdHQ1BEBAaGorTp08jOjoaI0eOxLBhw2zbBQUFYenSpWjcuDEePXoEd3d3/N///R+0Wi3WrVsHpVIJAAgJCclSx//+9z+8/fbb+OabbzBw4EAAgEajgbu7OxQKBcqWLZtln0GDBtnVDwAzZ860/bty5co4ePAg1q9fb0u658yZgw8//NDuIrFRo0Z2ZZjNZkRERCAxMREHDhxAhQoVXvj5zJs3z65eIiIiIiKiooRJdxHXtGlTu+lNmjVrhkWLFsFiseDUqVOIiopCUlIS7t27B6vVCgBIS0tDjRo1kJSUhFatWtkS7uwcOXIEW7duxYYNG9C7d+88xxUWFpZl2ddff42VK1fi6tWrePz4MYxGo20gtlu3buHGjRvo0KHDC8udMGEC1Go1Dh8+jNKlS+cax9SpUzFx4kTbe71ej4CAgDwfBxGVLBMmTMj1Zl5BE0URRqMRKpWqQKar+te//gWdTgcvLy8sWLCgACKU1rVr17Bw4UKpwyAiInIYJt3F1JMnT9C5c2d07twZP/zwA3x9fZGWlobw8HDb83EajSbXcqpUqQIfHx98//336NatG1QqVZ7qd3Nzs3u/fv16TJgwAYsWLUKzZs3g4eGBL774AkeOHMlzLADQqVMnrF27Fjt27MDgwYNz3V6tVkOtVuepbCIilUpV6H8zRFGEIAgFlnRnliEIglP8/cvr7w4REVFxxYHUirjDhw9neR8cHIxz587hzp07mD9/Plq1aoVq1aplGUStTp062Ldv3wtHFy9dujT27NmD1NRUDBgwwG5blUoFi8WSpzj37duH5s2bY9SoUahfvz6qVq1qN2Cbh4cHAgMDsXv37heW06NHD/z3v//FiBEjsG7dujzVTUREREREVFQx6S7irl27hokTJyIlJQVr167FsmXLMG7cOFSsWBEqlQrLli3DpUuXsGXLFsyePdtu39GjR0Ov1+PN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kSNqs5bnGzZsGDw8PNC3b19cu3YNubm5OHv2LPr164fu3bsXONGZTCbDF198gfnz56v9gqE4evbsiSNHjpRoX+DZO/DOzs6YO3cuWrVqhRs3buDXX3/FwIEDYWpqWuB+lStXxsCBAzFjxgwolUrcuHED33zzDUaNGlXgPufOnUNmZiYyMjKwbt06HDlyRJqpPC0tDXv37sWTJ0+Qm5uLP/74A9999x369esn7f/kyROcPn0a3bp1K/H56hKTbiIiIiIi0pmaNWtix44dCAkJgY2NDebMmYOIiAjUqFFDqjN48GB8//33sLa2xsqVK7Fr1y5YW1trbW/OnDlIS0uDvb09hg4dqjbhWVZWFmbMmAFHR0fY2dkhMjISGzduBAA0adIEYWFhCA4Ohr29PVxcXDBjxgxpOcEtW7agVq1asLS0RFBQEH766Se1Ic4F8fDwQIsWLbSWGRsb48CBA2jYsCE6duwIc3NzvP/+++jVqxfCw8MLbbdfv36wsbHBN998I2379ttvYWFhofbJX2bsRd26dUNycjIuXbr00nPQxt7eHlFRUTh58iQ++eQTtaHwL7Ny5UooFApUq1YNbdq0wciRI9VmLu/WrRvmzZunVt/R0RH29vbYvn07/vjjDzg7OwN4tuza7Nmz4eTkBBsbG3z66adYvHgx3n//fWn/HTt2wMfHp8hD5V83meCvfKkCUalUUCgUSExM5JrCeiSEQFZWFoyNjTlpUTEplUpER0dL7y69CiEEhBCv1A8TJ05EWloarK2ty9SSYUqlEkePHkW7du3Kxb3OJcP06/klw+zt7bFkyRJ9h/TG4r8Pr0alUuHUqVNo1aqV1gmyAODy5cv43//+98rH2rFjBxo0aPDK7RSFv78/FApFkdefpqLbsmULfvnll5cm+OVZXl4emjRpgi1btqB+/fpa66hUKkRFRcHLy0vj3XKlUglnZ2colcoC76tXxSfd5Yi3t3eBC8ITUcWgUqmkZU6oYEqlEnv27IFSqdR3KERERGXW4MGDK3TCDTx7v/vChQsFJtxlAZPuMiIrK6tU2hFCaMxySERERERERPrBpFtPvL29MXbsWHz66aews7ND586dceXKFXTr1g3m5uZwcHCAr68vkpOTAQB+fn74888/sXz5cshkMshkMty+fRtHjhyBTCbD77//jrfffhsmJibYvHkz5HI5/v77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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved bootstrap run: 0d8e1dce-f8ad-4855-bdb8-97906aa589e5\n", + " Description: Recovery Strategy Delta: Top 4 vs Bottom 5 (median split, including llama)\n", + " Timestamp: 2026-02-09T13:05:48.239918\n", + " Total runs in file: 48\n", + "\n", + "Results saved: 0d8e1dce-f8ad-4855-bdb8-97906aa589e5\n" + ] + } + ], + "source": [ + "# Bayesian Bootstrap: Median Split - Top 4 vs Bottom 5 (INCLUDING llama)\n", + "# Top 4: deepseek, devstral, qwen, kimi\n", + "# Bottom 5: grok, gemini, gpt-oss, claude-haiku, llama\n", + "# Filter: Only strategies with >= 5% usage in at least one group\n", + "\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from collections import Counter\n", + "from bayes_bootstrap import bayes_bootstrap_delta_paired_clustered, save_bootstrap_run\n", + "\n", + "\n", + "MIN_USAGE_THRESHOLD = 0.05 # 5% minimum usage in at least one group\n", + "\n", + "all_strategies = [\n", + " \"retry_same\", \"retry_modified_params\", \"switch_tool\", \"lookup_correct_value\",\n", + " \"backtrack\", \"parse_error_message\", \"handle_ui_obstacle\", \"change_strategy\",\n", + " \"break_into_steps\", \"verify_prerequisites\", \"skip_and_continue\", \"wait_and_retry\",\n", + " \"use_fallback\", \"other_recovery_strategy\"\n", + "]\n", + "\n", + "# Top 4 models (median split - top half)\n", + "top_4_keywords = [\"deepseek\", \"devstral\", \"qwen\", \"kimi\"]\n", + "\n", + "def is_top_4_model(model_name):\n", + " model_lower = model_name.lower()\n", + " return any(keyword in model_lower for keyword in top_4_keywords)\n", + "\n", + "all_models = set(r[\"model\"] for r in weighted_recovery_runs)\n", + "top_4_models = {m for m in all_models if is_top_4_model(m)}\n", + "bottom_5_models = all_models - top_4_models\n", + "\n", + "print(\"MEDIAN SPLIT: Top 4 vs Bottom 5 (including llama)\")\n", + "print(\"=\" * 60)\n", + "print(f\"Top 4 models: {sorted(top_4_models)}\")\n", + "print(f\"Bottom 5 models: {sorted(bottom_5_models)}\")\n", + "\n", + "top_4_runs = [r for r in weighted_recovery_runs if r[\"model\"] in top_4_models]\n", + "bottom_5_runs = [r for r in weighted_recovery_runs if r[\"model\"] in bottom_5_models]\n", + "\n", + "print(f\"\\nRuns in top 4: {len(top_4_runs)}\")\n", + "print(f\"Runs in bottom 5: {len(bottom_5_runs)}\")\n", + "\n", + "# Calculate usage rates to filter strategies\n", + "def calc_usage_rate(runs, strategy):\n", + " total = len(runs)\n", + " if total == 0:\n", + " return 0\n", + " used = sum(1 for r in runs if r[\"recovery_strategies\"].get(f\"{strategy}_raw\", 0) == 1)\n", + " return used / total\n", + "\n", + "print(f\"\\nFiltering strategies (>= {MIN_USAGE_THRESHOLD*100:.0f}% usage in at least one group):\")\n", + "print(f\"{'Strategy':<25} {'Top 4':>10} {'Bottom 5':>10} {'Include':>10}\")\n", + "print(\"-\" * 60)\n", + "\n", + "strategies_to_analyze = []\n", + "excluded_strategies = []\n", + "for strategy in all_strategies:\n", + " top_rate = calc_usage_rate(top_4_runs, strategy)\n", + " bottom_rate = calc_usage_rate(bottom_5_runs, strategy)\n", + " include = top_rate >= MIN_USAGE_THRESHOLD or bottom_rate >= MIN_USAGE_THRESHOLD\n", + " status = \"✓\" if include else \"✗\"\n", + " print(f\"{strategy:<25} {top_rate*100:>9.1f}% {bottom_rate*100:>9.1f}% {status:>10}\")\n", + " if include:\n", + " strategies_to_analyze.append(strategy)\n", + " else:\n", + " excluded_strategies.append(strategy)\n", + "\n", + "print(f\"\\nIncluded: {len(strategies_to_analyze)} strategies\")\n", + "print(f\"Excluded: {len(excluded_strategies)} strategies ({excluded_strategies})\")\n", + "\n", + "# Statistic factory\n", + "def make_strategy_statistic(strategy: str):\n", + " def weighted_strategy_rate(runs: list[dict], weights: np.ndarray) -> float:\n", + " values = np.array([r[\"recovery_strategies\"].get(f\"{strategy}_raw\", 0) for r in runs])\n", + " return np.sum(values * weights)\n", + " return weighted_strategy_rate\n", + "\n", + "# Run bootstrap only on filtered strategies (with caching)\n", + "CACHE_NAME = \"top4_vs_bottom5_incl_llama\"\n", + "FORCE_RECOMPUTE = False # Set to True to recompute even if cached\n", + "\n", + "def compute_bootstrap_top4_incl_llama():\n", + " \"\"\"Compute bootstrap results for Top 4 vs Bottom 5 (incl llama).\"\"\"\n", + " print(\"Running Bayesian bootstrap on filtered strategies...\")\n", + " print(\"-\" * 60)\n", + " \n", + " results = {}\n", + " for strategy in strategies_to_analyze:\n", + " statistic_fn = make_strategy_statistic(strategy)\n", + " result = bayes_bootstrap_delta_paired_clustered(\n", + " group_a=top_4_runs,\n", + " group_b=bottom_5_runs,\n", + " statistic=statistic_fn,\n", + " cluster_key=\"cluster_key\",\n", + " n_draws=10000,\n", + " seed=42\n", + " )\n", + " results[strategy] = result\n", + " \n", + " sig = \"\"\n", + " if result['p_gt_0'] > 0.95:\n", + " sig = \"*** TOP MORE\"\n", + " elif result['p_lt_0'] > 0.95:\n", + " sig = \"*** TOP LESS\"\n", + " print(f\" {strategy:<25} Δ={result['mean']:+.4f} P(Δ>0)={result['p_gt_0']:.3f} {sig}\")\n", + " \n", + " metadata = {\n", + " \"split_method\": \"median_split_top4_vs_bottom5\",\n", + " \"top_models\": sorted(top_4_models),\n", + " \"bottom_models\": sorted(bottom_5_models),\n", + " \"includes_llama\": True,\n", + " \"min_usage_threshold\": MIN_USAGE_THRESHOLD,\n", + " \"strategies_analyzed\": strategies_to_analyze,\n", + " \"n_draws\": 10000\n", + " }\n", + " return results, metadata\n", + "\n", + "# Load from cache or compute\n", + "bootstrap_results_top4_incl_llama = get_or_compute_bootstrap(\n", + " CACHE_NAME, \n", + " compute_bootstrap_top4_incl_llama,\n", + " force_recompute=FORCE_RECOMPUTE\n", + ")\n", + "\n", + "# Results table\n", + "print(\"\\n\" + \"=\" * 90)\n", + "print(\"BOOTSTRAP RESULTS: Top 4 vs Bottom 5 (incl. llama)\")\n", + "print(\"=\" * 90)\n", + "print(f\"{'Strategy':<25} {'Delta':>10} {'95% CI':>22} {'P(Δ>0)':>10} {'Sig':>8}\")\n", + "print(\"-\" * 90)\n", + "\n", + "sorted_results = sorted(bootstrap_results_top4_incl_llama.items(), key=lambda x: x[1]['mean'], reverse=True)\n", + "for strategy, res in sorted_results:\n", + " ci_str = f\"[{res['lo']:+.4f}, {res['hi']:+.4f}]\"\n", + " if res['p_gt_0'] > 0.95:\n", + " sig = \"✓✓✓\"\n", + " elif res['p_lt_0'] > 0.95:\n", + " sig = \"✗✗✗\"\n", + " elif res['p_gt_0'] > 0.90 or res['p_lt_0'] > 0.90:\n", + " sig = \"*\"\n", + " else:\n", + " sig = \"\"\n", + " print(f\"{strategy:<25} {res['mean']:>+.4f} {ci_str:>22} {res['p_gt_0']:>10.3f} {sig:>8}\")\n", + "\n", + "# Forest plot (grayscale-friendly)\n", + "from matplotlib.lines import Line2D\n", + "\n", + "fig, ax = plt.subplots(figsize=(10, max(6, len(strategies_to_analyze) * 0.5)))\n", + "\n", + "# Background shading for effect zones (gradient: edges slightly bright, middle brightest, inner bright)\n", + "ax.axvspan(-0.25, -0.10, color='0.96', zorder=0) # outer negative (slightly bright)\n", + "ax.axvspan(-0.10, -0.03, color='0.98', zorder=0) # middle negative (brightest)\n", + "ax.axvspan(-0.03, 0, color='0.98', zorder=0) # inner negative (bright)\n", + "ax.axvspan(0, 0.03, color='0.98', zorder=0) # inner positive (bright)\n", + "ax.axvspan(0.03, 0.10, color='0.98', zorder=0) # middle positive (brightest)\n", + "ax.axvspan(0.10, 0.25, color='0.96', zorder=0) # outer positive (slightly bright)\n", + "\n", + "sorted_for_plot = sorted(bootstrap_results_top4_incl_llama.items(), key=lambda x: x[1]['mean'])\n", + "strategies_plot = [s for s, _ in sorted_for_plot]\n", + "means = [r['mean'] for _, r in sorted_for_plot]\n", + "los = [r['lo'] for _, r in sorted_for_plot]\n", + "his = [r['hi'] for _, r in sorted_for_plot]\n", + "\n", + "y_pos = np.arange(len(strategies_plot))\n", + "\n", + "xerr_low = [m - l for m, l in zip(means, los)]\n", + "xerr_high = [h - m for m, h in zip(means, his)]\n", + "\n", + "# Plot bars with grayscale styling\n", + "for idx, (strategy, r) in enumerate(sorted_for_plot):\n", + " if r['p_gt_0'] > 0.95:\n", + " # Top uses MORE: filled dark\n", + " facecolor = '0.15'\n", + " edgecolor = '0.15'\n", + " linewidth = 1\n", + " elif r['p_lt_0'] > 0.95:\n", + " # Top uses LESS: open (white fill, dark edge)\n", + " facecolor = 'white'\n", + " edgecolor = '0.3'\n", + " linewidth = 2\n", + " else:\n", + " # Not significant: medium gray\n", + " facecolor = '0.6'\n", + " edgecolor = '0.6'\n", + " linewidth = 1\n", + " \n", + " ax.barh(y_pos[idx], means[idx], xerr=[[xerr_low[idx]], [xerr_high[idx]]], \n", + " color=facecolor, edgecolor=edgecolor, linewidth=linewidth,\n", + " alpha=0.9, capsize=4, ecolor='0.4', height=0.7, zorder=2)\n", + "\n", + "ax.axvline(x=0, color='0.3', linestyle='--', linewidth=1.5, alpha=0.8, zorder=1)\n", + "ax.set_yticks(y_pos)\n", + "ax.set_yticklabels(strategies_plot, fontsize=10)\n", + "ax.set_xlabel('Δ (Top 4 − Bottom 5)', fontsize=12)\n", + "\n", + "# Zone labels - centered vertically in middle of plot\n", + "mid_y = len(strategies_plot) / 2\n", + "ax.text(0.15, mid_y, 'Top uses\\nmore', fontsize=8, color='0.55', \n", + " ha='center', va='center', style='italic')\n", + "ax.text(-0.15, mid_y, 'Top uses\\nless', fontsize=8, color='0.55', \n", + " ha='center', va='center', style='italic')\n", + "\n", + "# Grayscale-friendly legend with actual error bar representation\n", + "from matplotlib.lines import Line2D\n", + "\n", + "# Create an invisible errorbar off-plot for legend (proper |--| pattern)\n", + "eb_legend = ax.errorbar([-1], [-1], xerr=[0.02], fmt='none', \n", + " ecolor='0.4', elinewidth=1.5, capsize=4, capthick=1.5,\n", + " label='95% credible interval')\n", + "\n", + "legend_elements = [\n", + " Line2D([0], [0], marker='s', color='w', markerfacecolor='0.15',\n", + " markersize=12, markeredgecolor='0.15', markeredgewidth=1,\n", + " label='Top uses MORE (P > 0.95)', linestyle='None'),\n", + " Line2D([0], [0], marker='s', color='w', markerfacecolor='white',\n", + " markersize=12, markeredgecolor='0.3', markeredgewidth=2,\n", + " label='Top uses LESS (P > 0.95)', linestyle='None'),\n", + " Line2D([0], [0], marker='s', color='w', markerfacecolor='0.6',\n", + " markersize=12, markeredgecolor='0.6', markeredgewidth=1,\n", + " label='Not significant', linestyle='None'),\n", + " eb_legend, # Real error bar with proper caps\n", + "]\n", + "\n", + "ax.legend(handles=legend_elements, fontsize=9, loc='lower right',\n", + " framealpha=0.95, edgecolor='0.7')\n", + "\n", + "ax.grid(True, axis='x', alpha=0.15, color='0.8')\n", + "ax.set_xlim(-0.20, 0.20)\n", + "\n", + "plt.tight_layout()\n", + "plt.savefig(\"recovery_bootstrap_top4_vs_bottom5_incl_llama.pdf\", bbox_inches='tight')\n", + "plt.show()\n", + "\n", + "# Save results\n", + "run_id_incl = save_bootstrap_run(\n", + " description=\"Recovery Strategy Delta: Top 4 vs Bottom 5 (median split, including llama)\",\n", + " results=bootstrap_results_top4_incl_llama,\n", + " metadata={\n", + " \"split_method\": \"median_split_top4_vs_bottom5\",\n", + " \"top_models\": sorted(top_4_models),\n", + " \"bottom_models\": sorted(bottom_5_models),\n", + " \"includes_llama\": True,\n", + " \"min_usage_threshold\": MIN_USAGE_THRESHOLD,\n", + " \"strategies_analyzed\": strategies_to_analyze,\n", + " \"strategies_excluded\": excluded_strategies,\n", + " \"n_draws\": 10000,\n", + " \"seed\": 42\n", + " }\n", + ")\n", + "print(f\"\\nResults saved: {run_id_incl}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "fa439a07", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "print(\"cluster_key\" in weighted_recovery_runs[0])\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ffc18829", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MEDIAN SPLIT: Top 4 vs Bottom 4 (excluding llama outlier)\n", + "============================================================\n", + "Top 4 models: ['deepseek/deepseek-v3.2', 'mistralai/devstral-2512', 'moonshotai/kimi-k2-0905', 'qwen/qwen3-vl-235b-a22b-instruct']\n", + "Bottom 4 models: ['anthropic/claude-haiku-4.5', 'google/gemini-3-flash-preview', 'openai/gpt-oss-120b', 'x-ai/grok-4.1-fast']\n", + "Excluded (outlier): ['meta-llama/llama-4-scout']\n", + "\n", + "Runs in top 4: 1679\n", + "Runs in bottom 4: 1564\n", + "\n", + "Filtering strategies (>= 5% usage in at least one group):\n", + "Strategy Top 4 Bottom 4 Include\n", + "------------------------------------------------------------\n", + "retry_same 7.0% 10.5% ✓\n", + "retry_modified_params 45.6% 48.0% ✓\n", + "switch_tool 7.1% 6.3% ✓\n", + "lookup_correct_value 83.3% 80.4% ✓\n", + "backtrack 17.6% 19.5% ✓\n", + "parse_error_message 42.0% 44.1% ✓\n", + "handle_ui_obstacle 0.0% 0.0% ✗\n", + "change_strategy 40.7% 34.8% ✓\n", + "break_into_steps 92.0% 86.3% ✓\n", + "verify_prerequisites 53.1% 45.3% ✓\n", + "skip_and_continue 10.7% 8.5% ✓\n", + "wait_and_retry 0.2% 0.5% ✗\n", + "use_fallback 7.1% 6.7% ✓\n", + "other_recovery_strategy 0.5% 0.2% ✗\n", + "\n", + "Included: 11 strategies\n", + "Excluded: 3 strategies (['handle_ui_obstacle', 'wait_and_retry', 'other_recovery_strategy'])\n", + "Computing bootstrap results for: top4_vs_bottom4_excl_llama\n", + "Running Bayesian bootstrap on filtered strategies...\n", + "------------------------------------------------------------\n", + " retry_same Δ=-0.0317 P(Δ>0)=0.000 *** TOP LESS\n", + " retry_modified_params Δ=-0.0216 P(Δ>0)=0.083 \n", + " switch_tool Δ=+0.0061 P(Δ>0)=0.768 \n", + " lookup_correct_value Δ=+0.0329 P(Δ>0)=0.998 *** TOP MORE\n", + " backtrack Δ=-0.0160 P(Δ>0)=0.120 \n", + " parse_error_message Δ=-0.0154 P(Δ>0)=0.162 \n", + " change_strategy Δ=+0.0593 P(Δ>0)=1.000 *** TOP MORE\n", + " break_into_steps Δ=+0.0558 P(Δ>0)=1.000 *** TOP MORE\n", + " verify_prerequisites Δ=+0.0796 P(Δ>0)=1.000 *** TOP MORE\n", + " skip_and_continue Δ=+0.0218 P(Δ>0)=0.994 *** TOP MORE\n", + " use_fallback Δ=+0.0055 P(Δ>0)=0.730 \n", + "Saved bootstrap results to: bootstrap_cache/top4_vs_bottom4_excl_llama.json\n", + "\n", + "==========================================================================================\n", + "BOOTSTRAP RESULTS: Top 4 vs Bottom 4 (excl. llama)\n", + "==========================================================================================\n", + "Strategy Delta 95% CI P(Δ>0) Sig\n", + "------------------------------------------------------------------------------------------\n", + "verify_prerequisites +0.0796 [+0.0478, +0.1112] 1.000 ✓✓✓\n", + "change_strategy +0.0593 [+0.0305, +0.0887] 1.000 ✓✓✓\n", + "break_into_steps +0.0558 [+0.0334, +0.0780] 1.000 ✓✓✓\n", + "lookup_correct_value +0.0329 [+0.0101, +0.0555] 0.998 ✓✓✓\n", + "skip_and_continue +0.0218 [+0.0055, +0.0378] 0.994 ✓✓✓\n", + "switch_tool +0.0061 [-0.0100, +0.0225] 0.768 \n", + "use_fallback +0.0055 [-0.0116, +0.0230] 0.730 \n", + "parse_error_message -0.0154 [-0.0459, +0.0159] 0.162 \n", + "backtrack -0.0160 [-0.0428, +0.0110] 0.120 \n", + "retry_modified_params -0.0216 [-0.0516, +0.0088] 0.083 *\n", + "retry_same -0.0317 [-0.0502, -0.0130] 0.000 ✗✗✗\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAJOCAYAAACqS2TfAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAy4NJREFUeJzs3Xl8TGffP/DPmTWTbSIRIYQISQSxxr4TYt93baSUtqq2KvWgYitqieKp9q42ya1uSpVbxVJLo3aijaWIvaG0sc6QxKzn94df5jHIRmYmJp/36zWvmplzrut75nQy85lznesIoiiKICIiIiIiIqIiJ3F0AURERERERETOiqGbiIiIiIiIyEYYuomIiIiIiIhshKGbiIiIiIiIyEYYuomIiIiIiIhshKGbiIiIiIiIyEYYuomIiIiIiIhshKGbiIiIiIiIyEZkji6AqCiZzWbcvHkTHh4eEATB0eUQEREREVExJooiHj58CH9/f0gktjkmzdBNTuXmzZsICAhwdBlERERERPQauX79OipUqGCTthm6yal4eHgAANLS0uDp6engakouURSh1+uhUCg44sCBRFGEKIrcDw7G94Pj6XQ6zJkzBx4eHhgzZgxcXFwcXVKJxfdD8WA2m5GVlcX94GB8PxQPWq0WoaGhlhxhCwzd5FRy/mB5eHgwdDsQP0SKB4bu4oHvB8fT6XRQKpVQKpXw9PRk6HYgvh+KB7PZDJlMxv3gYHw/FA+iKAKATfcBJ1IjIiIiIiIishGGbiIiIiIiIiIbYegmIiIiIiIishGGbiIiIiIiIiIb4URqRERE5NQUCgVmzZoFg8EAhULh6HKIiKiEYegmIiIipyYIApRKJQRB4AzBRERkdxxeTkRERERERGQjDN1ERETk1AwGA9avX49t27bBYDA4uhwiIiphGLqJiIjIqZnNZpw4cQJnzpyB2Wx2dDlERFTCMHQTERERERER2QhDNxEREREREZGNMHQTERERERER2QhDNxEREREREZGNMHQTERERERER2QhDNxEREREREZGNyBxdABEREZEtKRQKTJ8+HQaDAQqFwtHlEBFRCcPQTURERE5NEAS4u7tDr9dDEARHl0NERCUMh5cTERERERER2QhDNxERETk1g8GAzZs3Y9euXTAYDI4uh4iIShiGbiIiInJqZrMZhw8fxu+//w6z2ezocoiI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IyKyHYZuIiIiKhHKlCkDhULB0O1AoihCr9dzPxBRicKJ1IiIiMipmUwmnDt3DpcvX+a5wEREZHcM3UREROTUjEYjEhISsHHjRhiNRkeXQ0REJQxDNxEREREREZGNMHQTERERERER2QhDNxEREREREZGNMHQTERERERER2QhDNxEREREREZGNMHQTERERERER2YjM0QUQERER2ZJMJkOPHj0gCAJkMn71ISIi++InDxERETk1qVSKpk2b4saNG7h8+TIEQXB0SSWWKIowGAyQy+UF2g9qtRp+fn52qIyIyHYYuomIiMjp/fPPP4iOjkZWVpajS6FCcHNzw9q1axm8iei1xtBNRERETs1sNuPMmTN49OgR5HI5pFKpo0sq0URRLNBRbpPJhMzMTGg0GoZuInqtMXQTERGRUzMYDPjhhx9gMBigVCp5XreDFTR0A0+CNxHR646zlxMRERERERHZCEM3ERERERERkY0wdBMRERERERHZCEM3ERERERERkY0wdBMRERERERHZCEM3ERERERERkY04dehu3bo1xo0bZ/d+k5OTIQgCHjx4UOh1r127BkEQkJqaWuR1ERERlURSqRQtWrQo8ZcKk8lk8PX1LfGvgy1oNBokJSVBo9E4uhQiKoacOnS/jgICAnDr1i3UrFmzwOvExsaiTp06tivqGQkJCfDy8rJbf0RERK9CJpMhIiICUqm0wNeHdkYymQxlypRh6LYBrVaL7du3Q6vVOroUIiqGGLqfotfrHV0CpFIpypYtyw9EIiIiIiIiJ+D0odtoNGL06NHw8vKCj48Ppk2bBlEUAQCBgYGYM2cOYmJioFarMWLECADAoUOH0LJlS6hUKgQEBGDMmDHIzMy0tPndd98hIiICHh4eKFu2LAYPHoyMjIxca8jOzkaXLl3QuHFj3Lt3L896nx1enjNUfc+ePYiIiICrqyuaNm2KtLQ0AE+OOs+cORMnT56EIAgQBAEJCQkAgPT0dPTo0QPu7u7w9PRE//798c8//xTodTt58iTatGkDDw8PeHp6on79+khJSUFycjLeeustaDQaS3+xsbEAnvxoMWnSJJQvXx5ubm5o1KgRkpOTLW3mHCHfvHkzQkJC4OLigvbt2+P69ev59ktERPSyzGYz/v77b5jNZkeXQkREJZDTh+7ExETIZDIcPXoUy5YtQ1xcHFatWmV5fuHC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74fiQaPRwN/fHxqNxmoS6KLE4eVERERULKjVanTp0qXI2zWZTDhx4gQCAwOLvG1bstXrQURE9sXh5a+ZTp06wd3d/YW3vK7hTURERERERPbHI92vmVWrViE7O/uFzzl6GBwRERERERFZY+h+zZQvX97RJRAREREREVEBcXg5ERERERERkY0wdBMRERERERHZCEM3ERERERERkY0wdBMREZFTk8vlePPNNyGXyyGKouVa3C+6iaLo6HKJiMjJcCI1IiIicmoSiQT+/v5QKBQwGo35Bmu5XA6lUmmn6oiIyNkxdBMREZHTc3NzQ1RUVIGOZCuVSri5udmhKiIiKgkYuomIiMipGY1G7N27F1KpFC1btoRcLnd0SUREVILwnG4iIiJyaiaTCbt378ahQ4dgMpkcXQ4REZUwDN1ERERERERENsLQTURERERERGQjDN1ERERERERENsLQTURERERERGQjDN1ERERERERENsLQTURERERERGQjvE43EREROTW5XI7Ro0fDbDbzGt1ERGR3DN1ERETk1CQSCQICAqDX6yGRcJAfERHZF0M3ERER2U1mZiZ0Op1D+hYEAQqFwiF9ExFRycXQTURERHaRmZmJrVu3wmAw2L1vo9EIiUSCHj16QK1W271/IiIquRi6iYiIyC50Oh0MBgMEQYAgCHbt22AwQCKRIDs7m6GbiIjsiqGbiIiI7EoQBLufWy2Kol37IyIiysHZRIiIiIiIiIhshKGbiIiIiIiIyEYYuomIiIiIiIhshKGbiIiIiIiIyEYYuomIiIiIiIhshKGbiIjIgTQaDZKSkqDRaBxdilNTqVSQy+WQyex/4RbuYyKiko2hm4iIyIG0Wi22b98OrVbr6FKcmlQqdcilygDuYyKiko6hm4iIiIiIiMhGXqvQLYoijEajo8uwYjKZYDabn3tcr9e/VHsvux4RERHlzmAwwGw2w2QyOboUIiIqYWwaulu3bo3Ro0dj9OjR8PLygo+PD6ZNmwZRFAEA3333HSIiIuDh4YGyZcti8ODByMjIsKyfnJwMQRCwc+dOREREQKlUYv/+/Th58iTatGkDDw8PeHp6on79+khJSbGsd+jQIbRs2RIqlQoBAQEYM2YMMjMzC1SzXq/HpEmTUL58ebi5uaFRo0ZITk62PJ+QkAAvLy9s3boV1atXh1KpxJ9//onAwEDMmTMH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eRFTqVTFIljnxdvb2+7nmhEREREREZFtlKjh5URERERERET2xNBNREREREREZCMM3UREREREREQ2UqLO6SYiIiLHE0URZrPZrn1ykiIiInIUhm4iIiKyC6VSCblcDoPBAHtePEUURQiCYJnNn4iIyJ4YuomIiMgu3Nzc0LVrV+h0Orv2azabcenSJUilUptdDoaIiCg3DN1ERERkN25ubnBzc7N7vz4+PtDr9ZBKpXbvm4iISjZOpEZERERERERkIwzdRERE5NRMJhNOnTqF8+fPw2QyObocIiIqYTi8nIiIiJya0WjEmjVr4OHhgdDQUMhk/PpDRET2wyPdRERERERERDbC0E1ERERERERkIwzdRERERERERDbC0E1ERERERERkIwzdRERERERERDbC0E1ERERERERkI7xmBhEREdlFZmYmdDqd3fs1m83o1q0bZDIZLxdGRER2x08eIiIisrnMzExs3boVBoPBYTXIZDKEh4fD3d3dYTUQEVHJw9BNRERENqfT6WAwGCAIAgRBsHv/oijCYDBAr9fbvW8iIirZGLqJiIjIbgRBgERi/yllDAYDRFGEyWSye99ERFSyMXQTERGR08vOzoZUKmXoJiIiu+Ps5UREREREREQ2wtBNREREREREZCMM3UREREREREQ2wtBNREREREREZCMM3UREREREREQ2wtBdjLVu3Rrjxo2zWfsxMTHo2bOnzdovLEEQsHnzZkeXQURULGg0GiQlJUGj0Ti6FMoF9xERERUEQzflKjY2FnXq1HF0GUREJZJWq8X27duh1WodXYpTUCqVkMlkkEqlRdYm9xERERUEQze9MoPB4OgSiIiI8iSXyyGRSIo0dBMRERUEQ3cxZzQaMXr0aHh5ecHHxwfTpk2DKIoAgO+++w4RERHw8PBA2bJlMXjwYGRkZFit/8cff6BLly7w9PSEh4cHWrRogcuXL7+wrxMnTqBMmTKYO3cuEhISMHPmTJw8eRKCIEAQBCQkJAB4Mgz8yy+/RI8ePeDm5oY5c+bAZDJh+PDhqFy5MlQqFUJDQ/H5558/18e3336LGjVqQKlUoly5chg9enSu2z5r1iz4+fkhNTX15V48IiIiIiIiB5M5ugDKW2JiIoYPH46jR48iJSUFI0eORKVKlTBixAjo9XrMnj0boaGhyMjIwPjx4xETE4Nt27YBAP766y+0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IiLw/Plz3Lx5UysxvXr1Kvbv34+0tDSYm5vD2tpaGub8ySefICwsDJGRkdLfCceOHcOVK1eQkZGB9evXIykpCXK5XHpi+vIQ6ZysXbsWhw4d0pq1PNuAAQPg4+OD7t274+rVq8jKysKZM2fQo0cPdOzYMceJzmQyGb7++mvMnj1b6wuG/OjcuTMOHTpUoH2BF+/Au7m5YebMmWjSpAmuX7+O33//Hb1794alpWWO+5UtWxa9e/fG5MmTkZKSguvXr+P777/H0KFDc9zn7NmzSE9PR1paGlatWoVDhw5JM5UnJydj165dePbsGbKysvDnn3/if//7H3r06CHt/+zZM5w6darILk3HpJuIiIiIiAymUqVK2LJlC6ZOnQp7e3vMmDEDW7duRcWKFaU6ffv2xY8//gg7OzssXboU27dvh52dnd72ZsyYgeTkZDg5OaF///5aE55lZGRg8uTJcHFxgaOjIyIjI7F27VoAQL169RAeHo5JkybByckJ7u7umDx5srSc4IYNG1C5cmXY2NggJCQEv/zyi9YQ55z4+PigUaNGesvMzc2xb98+1KpVC61bt4a1tTU+/PBDdOnSBREREbm226NHD9jb2+P777+Xtv3www8663RnLzP2qg4dOuDx48e4ePHia89BHycnJ0RFReHEiRP47LPPtIbCv87SpUuhVCpRoUIFNGvWDEOGDNGaubxDhw6YNWuWVn0XFxc4OTlh8+bN+PPPP+Hm5gbgxbJr06dPh6urK+zt7fHFF19g/vz5+PDDD6X9t2zZgoCAgDwPlX/bZIJf+VIJolKpoFQqER8fX6rWny1qhBDIyMiAubk5Jy0yIiEEhBDsByNKSUnB33//jQYNGsDR0bFI9MPo0aORnJwMOzu7IrFkWEpKCg4fPowWLVoY7O/tl5cMc3JywoIFCwxyHHo9/vvwZlQqFU6ePIkmTZronSALAC5duoQPPvjgjY+1ZcsW1KxZ843byYugoCAolco8rz9Nebdhwwb89ttvr03wizONRoN69ephw4YNqFGjht46KpUKUVFR8PPz03m3PCUlBW5ubkhJScnxvnpTfNJdjPj7++e4IDwRERU9KpUKu3fv1juRDb2QkpKCnTt3IiUlxdihEBGVOH379i3RCTfw4v3u8+fP55hwFwVMuouIjIyMQmlHCKEzyyEREREREREZB5NuI/H398fI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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved bootstrap run: ad81ff57-25e1-4e3a-956f-d409cd15dd36\n", + " Description: Recovery Strategy Delta: Top 4 vs Bottom 4 (median split, excluding llama outlier)\n", + " Timestamp: 2026-02-09T13:07:49.743370\n", + " Total runs in file: 49\n", + "\n", + "Results saved: ad81ff57-25e1-4e3a-956f-d409cd15dd36\n", + "\n", + "======================================================================\n", + "SIGNIFICANT FINDINGS (Top 4 vs Bottom 4, excl. llama)\n", + "======================================================================\n", + "\n", + "Strategies MORE common in top 4 models (P>0.95):\n", + " ✓ verify_prerequisites: Δ=+0.0796 [+0.0478, +0.1112]\n", + " ✓ change_strategy: Δ=+0.0593 [+0.0305, +0.0887]\n", + " ✓ break_into_steps: Δ=+0.0558 [+0.0334, +0.0780]\n", + " ✓ lookup_correct_value: Δ=+0.0329 [+0.0101, +0.0555]\n", + " ✓ skip_and_continue: Δ=+0.0218 [+0.0055, +0.0378]\n", + "\n", + "Strategies LESS common in top 4 models (P>0.95):\n", + " ✗ retry_same: Δ=-0.0317 [-0.0502, -0.0130]\n" + ] + } + ], + "source": [ + "# Bayesian Bootstrap: Median Split - Top 4 vs Bottom 4 (EXCLUDING llama outlier)\n", + "# Top 4: deepseek, devstral, qwen, kimi\n", + "# Bottom 4: grok, gemini, gpt-oss, claude-haiku\n", + "# Filter: Only strategies with >= 5% usage in at least one group\n", + "\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from collections import Counter\n", + "from bayes_bootstrap import bayes_bootstrap_delta_paired_clustered, save_bootstrap_run\n", + "\n", + "MIN_USAGE_THRESHOLD = 0.05 # 5% minimum usage in at least one group\n", + "\n", + "all_strategies = [\n", + " \"retry_same\", \"retry_modified_params\", \"switch_tool\", \"lookup_correct_value\",\n", + " \"backtrack\", \"parse_error_message\", \"handle_ui_obstacle\", \"change_strategy\",\n", + " \"break_into_steps\", \"verify_prerequisites\", \"skip_and_continue\", \"wait_and_retry\",\n", + " \"use_fallback\", \"other_recovery_strategy\"\n", + "]\n", + "\n", + "# Top 4 models\n", + "top_4_keywords = [\"deepseek\", \"devstral\", \"qwen\", \"kimi\"]\n", + "exclude_keywords = [\"llama\"]\n", + "\n", + "def is_top_4_model(model_name):\n", + " model_lower = model_name.lower()\n", + " return any(keyword in model_lower for keyword in top_4_keywords)\n", + "\n", + "def is_excluded(model_name):\n", + " model_lower = model_name.lower()\n", + " return any(keyword in model_lower for keyword in exclude_keywords)\n", + "\n", + "all_models = set(r[\"model\"] for r in weighted_recovery_runs)\n", + "top_4_models = {m for m in all_models if is_top_4_model(m)}\n", + "excluded_models = {m for m in all_models if is_excluded(m)}\n", + "bottom_4_models = all_models - top_4_models - excluded_models\n", + "\n", + "print(\"MEDIAN SPLIT: Top 4 vs Bottom 4 (excluding llama outlier)\")\n", + "print(\"=\" * 60)\n", + "print(f\"Top 4 models: {sorted(top_4_models)}\")\n", + "print(f\"Bottom 4 models: {sorted(bottom_4_models)}\")\n", + "print(f\"Excluded (outlier): {sorted(excluded_models)}\")\n", + "\n", + "top_4_runs = [r for r in weighted_recovery_runs if r[\"model\"] in top_4_models]\n", + "bottom_4_runs = [r for r in weighted_recovery_runs if r[\"model\"] in bottom_4_models]\n", + "\n", + "print(f\"\\nRuns in top 4: {len(top_4_runs)}\")\n", + "print(f\"Runs in bottom 4: {len(bottom_4_runs)}\")\n", + "\n", + "# Calculate usage rates to filter strategies\n", + "def calc_usage_rate(runs, strategy):\n", + " total = len(runs)\n", + " if total == 0:\n", + " return 0\n", + " used = sum(1 for r in runs if r[\"recovery_strategies\"].get(f\"{strategy}_raw\", 0) == 1)\n", + " return used / total\n", + "\n", + "print(f\"\\nFiltering strategies (>= {MIN_USAGE_THRESHOLD*100:.0f}% usage in at least one group):\")\n", + "print(f\"{'Strategy':<25} {'Top 4':>10} {'Bottom 4':>10} {'Include':>10}\")\n", + "print(\"-\" * 60)\n", + "\n", + "strategies_to_analyze = []\n", + "excluded_strategies = []\n", + "for strategy in all_strategies:\n", + " top_rate = calc_usage_rate(top_4_runs, strategy)\n", + " bottom_rate = calc_usage_rate(bottom_4_runs, strategy)\n", + " include = top_rate >= MIN_USAGE_THRESHOLD or bottom_rate >= MIN_USAGE_THRESHOLD\n", + " status = \"✓\" if include else \"✗\"\n", + " print(f\"{strategy:<25} {top_rate*100:>9.1f}% {bottom_rate*100:>9.1f}% {status:>10}\")\n", + " if include:\n", + " strategies_to_analyze.append(strategy)\n", + " else:\n", + " excluded_strategies.append(strategy)\n", + "\n", + "print(f\"\\nIncluded: {len(strategies_to_analyze)} strategies\")\n", + "print(f\"Excluded: {len(excluded_strategies)} strategies ({excluded_strategies})\")\n", + "\n", + "# Statistic factory\n", + "def make_strategy_statistic(strategy: str):\n", + " def weighted_strategy_rate(runs: list[dict], weights: np.ndarray) -> float:\n", + " values = np.array([r[\"recovery_strategies\"].get(f\"{strategy}_raw\", 0) for r in runs])\n", + " return np.sum(values * weights)\n", + " return weighted_strategy_rate\n", + "\n", + "# Run bootstrap only on filtered strategies (with caching)\n", + "CACHE_NAME = \"top4_vs_bottom4_excl_llama\"\n", + "FORCE_RECOMPUTE = False # Set to True to recompute even if cached\n", + "\n", + "def compute_bootstrap_top4_excl_llama():\n", + " \"\"\"Compute bootstrap results for Top 4 vs Bottom 4 (excl llama).\"\"\"\n", + " print(\"Running Bayesian bootstrap on filtered strategies...\")\n", + " print(\"-\" * 60)\n", + " \n", + " results = {}\n", + " for strategy in strategies_to_analyze:\n", + " statistic_fn = make_strategy_statistic(strategy)\n", + " result = bayes_bootstrap_delta_paired_clustered(\n", + " group_a=top_4_runs,\n", + " group_b=bottom_4_runs,\n", + " statistic=statistic_fn,\n", + " cluster_key=\"cluster_key\",\n", + " n_draws=10000,\n", + " seed=42\n", + " )\n", + " results[strategy] = result\n", + " \n", + " sig = \"\"\n", + " if result['p_gt_0'] > 0.95:\n", + " sig = \"*** TOP MORE\"\n", + " elif result['p_lt_0'] > 0.95:\n", + " sig = \"*** TOP LESS\"\n", + " print(f\" {strategy:<25} Δ={result['mean']:+.4f} P(Δ>0)={result['p_gt_0']:.3f} {sig}\")\n", + " \n", + " metadata = {\n", + " \"split_method\": \"median_split_top4_vs_bottom4\",\n", + " \"top_models\": sorted(top_4_models),\n", + " \"bottom_models\": sorted(bottom_4_models),\n", + " \"excluded_models\": sorted(excluded_models),\n", + " \"exclusion_reason\": \"llama excluded as statistical outlier\",\n", + " \"includes_llama\": False,\n", + " \"min_usage_threshold\": MIN_USAGE_THRESHOLD,\n", + " \"strategies_analyzed\": strategies_to_analyze,\n", + " \"n_draws\": 10000\n", + " }\n", + " return results, metadata\n", + "\n", + "# Load from cache or compute\n", + "bootstrap_results_top4_excl_llama = get_or_compute_bootstrap(\n", + " CACHE_NAME, \n", + " compute_bootstrap_top4_excl_llama,\n", + " force_recompute=FORCE_RECOMPUTE\n", + ")\n", + "\n", + "# Results table\n", + "print(\"\\n\" + \"=\" * 90)\n", + "print(\"BOOTSTRAP RESULTS: Top 4 vs Bottom 4 (excl. llama)\")\n", + "print(\"=\" * 90)\n", + "print(f\"{'Strategy':<25} {'Delta':>10} {'95% CI':>22} {'P(Δ>0)':>10} {'Sig':>8}\")\n", + "print(\"-\" * 90)\n", + "\n", + "sorted_results = sorted(bootstrap_results_top4_excl_llama.items(), key=lambda x: x[1]['mean'], reverse=True)\n", + "for strategy, res in sorted_results:\n", + " ci_str = f\"[{res['lo']:+.4f}, {res['hi']:+.4f}]\"\n", + " if res['p_gt_0'] > 0.95:\n", + " sig = \"✓✓✓\"\n", + " elif res['p_lt_0'] > 0.95:\n", + " sig = \"✗✗✗\"\n", + " elif res['p_gt_0'] > 0.90 or res['p_lt_0'] > 0.90:\n", + " sig = \"*\"\n", + " else:\n", + " sig = \"\"\n", + " print(f\"{strategy:<25} {res['mean']:>+.4f} {ci_str:>22} {res['p_gt_0']:>10.3f} {sig:>8}\")\n", + "\n", + "# Forest plot (grayscale-friendly)\n", + "from matplotlib.lines import Line2D\n", + "\n", + "fig, ax = plt.subplots(figsize=(10, max(6, len(strategies_to_analyze) * 0.5)))\n", + "\n", + "# Background shading for effect zones (gradient: edges slightly bright, middle brightest, inner bright)\n", + "ax.axvspan(-0.25, -0.10, color='0.96', zorder=0) # outer negative (slightly bright)\n", + "ax.axvspan(-0.10, -0.03, color='0.98', zorder=0) # middle negative (brightest)\n", + "ax.axvspan(-0.03, 0, color='0.98', zorder=0) # inner negative (bright)\n", + "ax.axvspan(0, 0.03, color='0.98', zorder=0) # inner positive (bright)\n", + "ax.axvspan(0.03, 0.10, color='0.98', zorder=0) # middle positive (brightest)\n", + "ax.axvspan(0.10, 0.25, color='0.96', zorder=0) # outer positive (slightly bright)\n", + "\n", + "sorted_for_plot = sorted(bootstrap_results_top4_excl_llama.items(), key=lambda x: x[1]['mean'])\n", + "strategies_plot = [s for s, _ in sorted_for_plot]\n", + "means = [r['mean'] for _, r in sorted_for_plot]\n", + "los = [r['lo'] for _, r in sorted_for_plot]\n", + "his = [r['hi'] for _, r in sorted_for_plot]\n", + "\n", + "y_pos = np.arange(len(strategies_plot))\n", + "\n", + "xerr_low = [m - l for m, l in zip(means, los)]\n", + "xerr_high = [h - m for m, h in zip(means, his)]\n", + "\n", + "# Plot bars with grayscale styling\n", + "for idx, (strategy, r) in enumerate(sorted_for_plot):\n", + " if r['p_gt_0'] > 0.95:\n", + " # Top uses MORE: filled dark\n", + " facecolor = '0.15'\n", + " edgecolor = '0.15'\n", + " linewidth = 1\n", + " elif r['p_lt_0'] > 0.95:\n", + " # Top uses LESS: open (white fill, dark edge)\n", + " facecolor = 'white'\n", + " edgecolor = '0.3'\n", + " linewidth = 2\n", + " else:\n", + " # Not significant: medium gray\n", + " facecolor = '0.6'\n", + " edgecolor = '0.6'\n", + " linewidth = 1\n", + " \n", + " ax.barh(y_pos[idx], means[idx], xerr=[[xerr_low[idx]], [xerr_high[idx]]], \n", + " color=facecolor, edgecolor=edgecolor, linewidth=linewidth,\n", + " alpha=0.9, capsize=4, ecolor='0.4', height=0.7, zorder=2)\n", + "\n", + "ax.axvline(x=0, color='0.3', linestyle='--', linewidth=1.5, alpha=0.8, zorder=1)\n", + "ax.set_yticks(y_pos)\n", + "ax.set_yticklabels(strategies_plot, fontsize=10)\n", + "ax.set_xlabel('Δ (Top 4 − Bottom 4)', fontsize=12)\n", + "\n", + "# Zone labels - centered vertically in middle of plot\n", + "mid_y = len(strategies_plot) / 2\n", + "ax.text(0.15, mid_y, 'Top uses\\nmore', fontsize=8, color='0.55', \n", + " ha='center', va='center', style='italic')\n", + "ax.text(-0.15, mid_y, 'Top uses\\nless', fontsize=8, color='0.55', \n", + " ha='center', va='center', style='italic')\n", + "\n", + "# Grayscale-friendly legend with actual error bar representation\n", + "from matplotlib.lines import Line2D\n", + "\n", + "# Create an invisible errorbar off-plot for legend (proper |--| pattern)\n", + "eb_legend = ax.errorbar([-1], [-1], xerr=[0.02], fmt='none', \n", + " ecolor='0.4', elinewidth=1.5, capsize=4, capthick=1.5,\n", + " label='95% credible interval')\n", + "\n", + "legend_elements = [\n", + " Line2D([0], [0], marker='s', color='w', markerfacecolor='0.15',\n", + " markersize=12, markeredgecolor='0.15', markeredgewidth=1,\n", + " label='Top uses MORE (P > 0.95)', linestyle='None'),\n", + " Line2D([0], [0], marker='s', color='w', markerfacecolor='white',\n", + " markersize=12, markeredgecolor='0.3', markeredgewidth=2,\n", + " label='Top uses LESS (P > 0.95)', linestyle='None'),\n", + " Line2D([0], [0], marker='s', color='w', markerfacecolor='0.6',\n", + " markersize=12, markeredgecolor='0.6', markeredgewidth=1,\n", + " label='Not significant', linestyle='None'),\n", + " eb_legend, # Real error bar with proper caps\n", + "]\n", + "\n", + "ax.legend(handles=legend_elements, fontsize=9, loc='lower right',\n", + " framealpha=0.95, edgecolor='0.7')\n", + "\n", + "ax.grid(True, axis='x', alpha=0.15, color='0.8')\n", + "ax.set_xlim(-0.20, 0.20)\n", + "\n", + "plt.tight_layout()\n", + "plt.savefig(\"recovery_bootstrap_top4_vs_bottom4_excl_llama.pdf\", bbox_inches='tight')\n", + "plt.show()\n", + "\n", + "# Save results\n", + "run_id_excl = save_bootstrap_run(\n", + " description=\"Recovery Strategy Delta: Top 4 vs Bottom 4 (median split, excluding llama outlier)\",\n", + " results=bootstrap_results_top4_excl_llama,\n", + " metadata={\n", + " \"split_method\": \"median_split_top4_vs_bottom4\",\n", + " \"top_models\": sorted(top_4_models),\n", + " \"bottom_models\": sorted(bottom_4_models),\n", + " \"excluded_models\": sorted(excluded_models),\n", + " \"exclusion_reason\": \"llama excluded as statistical outlier\",\n", + " \"includes_llama\": False,\n", + " \"min_usage_threshold\": MIN_USAGE_THRESHOLD,\n", + " \"strategies_analyzed\": strategies_to_analyze,\n", + " \"strategies_excluded\": excluded_strategies,\n", + " \"n_draws\": 10000,\n", + " \"seed\": 42\n", + " }\n", + ")\n", + "print(f\"\\nResults saved: {run_id_excl}\")\n", + "\n", + "# Comparison summary\n", + "print(\"\\n\" + \"=\" * 70)\n", + "print(\"SIGNIFICANT FINDINGS (Top 4 vs Bottom 4, excl. llama)\")\n", + "print(\"=\" * 70)\n", + "\n", + "sig_more = [(s, r) for s, r in bootstrap_results_top4_excl_llama.items() if r['p_gt_0'] > 0.95]\n", + "sig_less = [(s, r) for s, r in bootstrap_results_top4_excl_llama.items() if r['p_lt_0'] > 0.95]\n", + "\n", + "if sig_more:\n", + " print(\"\\nStrategies MORE common in top 4 models (P>0.95):\")\n", + " for s, r in sorted(sig_more, key=lambda x: x[1]['mean'], reverse=True):\n", + " print(f\" ✓ {s}: Δ={r['mean']:+.4f} [{r['lo']:+.4f}, {r['hi']:+.4f}]\")\n", + "else:\n", + " print(\"\\nNo strategies significantly MORE common in top 4.\")\n", + "\n", + "if sig_less:\n", + " print(\"\\nStrategies LESS common in top 4 models (P>0.95):\")\n", + " for s, r in sorted(sig_less, key=lambda x: x[1]['mean']):\n", + " print(f\" ✗ {s}: Δ={r['mean']:+.4f} [{r['lo']:+.4f}, {r['hi']:+.4f}]\")\n", + "else:\n", + " print(\"\\nNo strategies significantly LESS common in top 4.\")" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "1e19721b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Runs with recovery strategies: 3625\n", + "Models (9): ['anthropic/claude-haiku-4.5', 'deepseek/deepseek-v3.2', 'google/gemini-3-flash-preview', 'meta-llama/llama-4-scout', 'mistralai/devstral-2512', 'moonshotai/kimi-k2-0905', 'openai/gpt-oss-120b', 'qwen/qwen3-vl-235b-a22b-instruct', 'x-ai/grok-4.1-fast']\n", + "\n", + "Strategies passing 5% filter: 11 of 14\n", + "Kept: ['retry_same', 'retry_modified_params', 'switch_tool', 'lookup_correct_value', 'backtrack', 'parse_error_message', 'change_strategy', 'break_into_steps', 'verify_prerequisites', 'skip_and_continue', 'use_fallback']\n", + "Excluded: ['handle_ui_obstacle', 'wait_and_retry', 'other_recovery_strategy']\n", + "\n", + "Running Bayesian bootstrap (this may take a few minutes)...\n", + " Processing anthropic/claude-haiku-4.5 (361 runs)...\n", + " Processing deepseek/deepseek-v3.2 (428 runs)...\n", + " Processing google/gemini-3-flash-preview (408 runs)...\n", + " Processing meta-llama/llama-4-scout (382 runs)...\n", + " Processing mistralai/devstral-2512 (428 runs)...\n", + " Processing moonshotai/kimi-k2-0905 (407 runs)...\n", + " Processing openai/gpt-oss-120b (383 runs)...\n", + " Processing qwen/qwen3-vl-235b-a22b-instruct (416 runs)...\n", + " Processing x-ai/grok-4.1-fast (412 runs)...\n", + "\n", + "Total results: 99\n", + "DataFrame columns: ['model', 'strategy', 'delta', 'ci_lo', 'ci_hi', 'p_gt_0', 'p_lt_0', 'n_with', 'n_without', 'usage_rate']\n", + "DataFrame shape: (99, 10)\n", + "Max strategies per model: 11\n", + "\n", + "================================================================================\n", + "PER-MODEL RECOVERY STRATEGY EFFECTIVENESS (Bayesian Bootstrap)\n", + "Ranked by score delta (most effective first)\n", + "================================================================================\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Model#1#2#3#4#5#6#7#8#9#10#11
0anthropic/claude-haiku-4.5break_into_stepslookup_correct_valueverify_prerequisitesuse_fallbackretry_modified_paramschange_strategyswitch_toolskip_and_continueretry_sameparse_error_messagebacktrack
1Δ=+31.5, p(>0)=1.00, [17.8, 44.9]Δ=+17.3, p(>0)=1.00, [5.9, 28.6]Δ=+13.0, p(>0)=1.00, [3.4, 22.4]Δ=-0.4, p(<0)=0.49, [-21.3, 17.2]Δ=-3.5, p(<0)=0.76, [-13.2, 6.1]Δ=-7.9, p(<0)=0.94, [-17.9, 1.8]Δ=-9.8, p(<0)=0.86, [-28.5, 7.4]Δ=-12.3, p(<0)=0.96, [-27.0, 1.3]Δ=-13.7, p(<0)=0.98, [-26.4, -1.1]Δ=-13.7, p(<0)=1.00, [-23.1, -4.4]Δ=-16.9, p(<0)=1.00, [-28.6, -5.2]
2deepseek/deepseek-v3.2lookup_correct_valueverify_prerequisitesswitch_toolparse_error_messageretry_modified_paramsuse_fallbackchange_strategybacktrackbreak_into_stepsskip_and_continueretry_same
3Δ=+6.7, p(>0)=0.93, [-1.8, 17.5]Δ=+3.4, p(>0)=0.88, [-2.2, 9.5]Δ=-5.5, p(<0)=0.84, [-18.6, 3.8]Δ=-5.5, p(<0)=0.98, [-11.3, -0.2]Δ=-6.6, p(<0)=0.99, [-12.1, -1.4]Δ=-7.2, p(<0)=0.94, [-18.3, 1.5]Δ=-7.5, p(<0)=1.00, [-13.4, -2.1]Δ=-7.9, p(<0)=0.99, [-16.8, -0.9]Δ=-8.2, p(<0)=1.00, [-12.2, -3.1]Δ=-11.6, p(<0)=0.98, [-26.1, -0.7]Δ=-14.2, p(<0)=0.97, [-35.8, 0.5]
4google/gemini-3-flash-previewlookup_correct_valuebreak_into_stepsverify_prerequisiteschange_strategyskip_and_continueretry_modified_paramsbacktrackparse_error_messageswitch_tooluse_fallbackretry_same
5Δ=+23.3, p(>0)=1.00, [12.0, 35.3]Δ=+15.7, p(>0)=1.00, [5.0, 27.1]Δ=+8.5, p(>0)=0.99, [1.8, 15.4]Δ=+0.1, p(>0)=0.52, [-7.7, 7.7]Δ=+0.1, p(>0)=0.53, [-13.9, 11.0]Δ=-0.4, p(<0)=0.54, [-7.6, 7.0]Δ=-1.1, p(<0)=0.58, [-10.2, 6.8]Δ=-2.0, p(<0)=0.71, [-9.3, 5.0]Δ=-2.6, p(<0)=0.61, [-18.5, 10.1]Δ=-10.5, p(<0)=0.92, [-27.0, 4.0]Δ=-22.9, p(<0)=1.00, [-36.5, -9.9]
6meta-llama/llama-4-scoutbreak_into_stepslookup_correct_valueverify_prerequisitesskip_and_continuebacktrackparse_error_messagechange_strategyuse_fallbackretry_modified_paramsswitch_toolretry_same
7Δ=+16.3, p(>0)=1.00, [6.7, 25.8]Δ=+12.5, p(>0)=1.00, [3.0, 21.8]Δ=+3.9, p(>0)=0.75, [-7.3, 15.2]Δ=-5.0, p(<0)=0.84, [-14.6, 4.9]Δ=-5.5, p(<0)=0.87, [-14.9, 3.8]Δ=-9.6, p(<0)=0.97, [-19.9, 0.6]Δ=-11.2, p(<0)=0.99, [-20.9, -1.6]Δ=-13.4, p(<0)=0.97, [-25.9, 0.2]Δ=-16.9, p(<0)=1.00, [-27.2, -6.4]Δ=-18.4, p(<0)=1.00, [-29.6, -6.2]Δ=-30.8, p(<0)=1.00, [-39.1, -22.0]
8mistralai/devstral-2512lookup_correct_valueverify_prerequisitesswitch_toolbreak_into_stepsbacktrackparse_error_messageretry_modified_paramschange_strategyretry_sameskip_and_continueuse_fallback
9Δ=+13.4, p(>0)=1.00, [5.2, 22.7]Δ=+1.9, p(>0)=0.76, [-3.1, 7.2]Δ=+1.3, p(>0)=0.66, [-9.8, 8.8]Δ=+0.7, p(>0)=0.53, [-6.9, 10.4]Δ=-1.2, p(<0)=0.59, [-9.7, 5.7]Δ=-3.8, p(<0)=0.92, [-9.2, 1.6]Δ=-4.0, p(<0)=0.93, [-9.3, 1.4]Δ=-4.9, p(<0)=0.97, [-10.2, 0.3]Δ=-10.9, p(<0)=0.97, [-24.4, 0.3]Δ=-11.4, p(<0)=1.00, [-21.3, -3.0]Δ=-17.1, p(<0)=1.00, [-31.1, -4.8]
10moonshotai/kimi-k2-0905lookup_correct_valuebreak_into_stepsverify_prerequisitesretry_modified_paramsbacktrackswitch_toolparse_error_messagechange_strategyskip_and_continueretry_sameuse_fallback
11Δ=+27.6, p(>0)=1.00, [17.6, 37.9]Δ=+21.3, p(>0)=1.00, [6.7, 37.0]Δ=+12.8, p(>0)=1.00, [5.9, 19.5]Δ=+2.6, p(>0)=0.77, [-4.2, 9.4]Δ=+1.4, p(>0)=0.64, [-7.4, 9.4]Δ=-2.1, p(<0)=0.60, [-16.4, 8.9]Δ=-2.5, p(<0)=0.74, [-10.1, 4.9]Δ=-2.9, p(<0)=0.78, [-10.4, 4.4]Δ=-4.9, p(<0)=0.86, [-14.2, 4.1]Δ=-14.9, p(<0)=0.98, [-30.0, -1.2]Δ=-19.9, p(<0)=1.00, [-36.0, -5.5]
12openai/gpt-oss-120bbreak_into_stepslookup_correct_valueparse_error_messageverify_prerequisitesbacktrackretry_sameretry_modified_paramschange_strategyuse_fallbackskip_and_continueswitch_tool
13Δ=+9.1, p(>0)=0.95, [-1.7, 21.0]Δ=+6.6, p(>0)=0.92, [-2.6, 16.7]Δ=+3.8, p(>0)=0.85, [-3.5, 10.8]Δ=+3.5, p(>0)=0.84, [-3.6, 10.6]Δ=+1.3, p(>0)=0.63, [-9.0, 9.8]Δ=+0.8, p(>0)=0.59, [-8.2, 8.7]Δ=+0.4, p(>0)=0.55, [-6.6, 7.7]Δ=-0.3, p(<0)=0.52, [-7.7, 7.1]Δ=-2.7, p(<0)=0.65, [-16.5, 8.7]Δ=-7.1, p(<0)=0.92, [-18.4, 2.7]Δ=-14.5, p(<0)=0.93, [-35.3, 3.7]
14qwen/qwen3-vl-235b-a22b-instructbreak_into_stepslookup_correct_valueverify_prerequisitesparse_error_messagebacktrackretry_modified_paramsswitch_toolchange_strategyskip_and_continueuse_fallbackretry_same
15Δ=+20.3, p(>0)=1.00, [9.2, 32.0]Δ=+17.3, p(>0)=1.00, [7.6, 27.9]Δ=+4.5, p(>0)=0.91, [-2.1, 11.0]Δ=-9.1, p(<0)=1.00, [-15.8, -2.5]Δ=-10.2, p(<0)=0.99, [-20.0, -1.4]Δ=-12.0, p(<0)=1.00, [-19.1, -5.1]Δ=-12.0, p(<0)=0.98, [-24.6, -0.9]Δ=-13.7, p(<0)=1.00, [-21.3, -6.5]Δ=-16.0, p(<0)=1.00, [-25.7, -6.9]Δ=-25.7, p(<0)=1.00, [-47.5, -5.7]Δ=-36.2, p(<0)=1.00, [-48.9, -23.5]
16x-ai/grok-4.1-fastbacktracklookup_correct_valueverify_prerequisitesbreak_into_stepschange_strategyparse_error_messageswitch_toolretry_modified_paramsskip_and_continueuse_fallbackretry_same
17Δ=+1.1, p(>0)=0.61, [-8.1, 9.7]Δ=+0.5, p(>0)=0.54, [-7.6, 9.5]Δ=-0.1, p(<0)=0.50, [-7.9, 7.5]Δ=-1.2, p(<0)=0.60, [-11.3, 10.0]Δ=-7.6, p(<0)=0.97, [-15.5, 0.2]Δ=-9.1, p(<0)=0.99, [-16.6, -1.6]Δ=-10.5, p(<0)=0.96, [-23.5, 1.4]Δ=-10.9, p(<0)=1.00, [-18.5, -3.1]Δ=-17.2, p(<0)=1.00, [-27.1, -7.9]Δ=-18.2, p(<0)=1.00, [-32.4, -4.6]Δ=-32.2, p(<0)=0.99, [-54.4, -7.9]
\n", + "
" + ], + "text/plain": [ + " Model #1 \\\n", + "0 anthropic/claude-haiku-4.5 break_into_steps \n", + "1 Δ=+31.5, p(>0)=1.00, [17.8, 44.9] \n", + "2 deepseek/deepseek-v3.2 lookup_correct_value \n", + "3 Δ=+6.7, p(>0)=0.93, [-1.8, 17.5] \n", + "4 google/gemini-3-flash-preview lookup_correct_value \n", + "5 Δ=+23.3, p(>0)=1.00, [12.0, 35.3] \n", + "6 meta-llama/llama-4-scout break_into_steps \n", + "7 Δ=+16.3, p(>0)=1.00, [6.7, 25.8] \n", + "8 mistralai/devstral-2512 lookup_correct_value \n", + "9 Δ=+13.4, p(>0)=1.00, [5.2, 22.7] \n", + "10 moonshotai/kimi-k2-0905 lookup_correct_value \n", + "11 Δ=+27.6, p(>0)=1.00, [17.6, 37.9] \n", + "12 openai/gpt-oss-120b break_into_steps \n", + "13 Δ=+9.1, p(>0)=0.95, [-1.7, 21.0] \n", + "14 qwen/qwen3-vl-235b-a22b-instruct break_into_steps \n", + "15 Δ=+20.3, p(>0)=1.00, [9.2, 32.0] \n", + "16 x-ai/grok-4.1-fast backtrack \n", + "17 Δ=+1.1, p(>0)=0.61, [-8.1, 9.7] \n", + "\n", + " #2 #3 \\\n", + "0 lookup_correct_value verify_prerequisites \n", + "1 Δ=+17.3, p(>0)=1.00, [5.9, 28.6] Δ=+13.0, p(>0)=1.00, [3.4, 22.4] \n", + "2 verify_prerequisites switch_tool \n", + "3 Δ=+3.4, p(>0)=0.88, [-2.2, 9.5] Δ=-5.5, p(<0)=0.84, [-18.6, 3.8] \n", + "4 break_into_steps verify_prerequisites \n", + "5 Δ=+15.7, p(>0)=1.00, [5.0, 27.1] Δ=+8.5, p(>0)=0.99, [1.8, 15.4] \n", + "6 lookup_correct_value verify_prerequisites \n", + "7 Δ=+12.5, p(>0)=1.00, [3.0, 21.8] Δ=+3.9, p(>0)=0.75, [-7.3, 15.2] \n", + "8 verify_prerequisites switch_tool \n", + "9 Δ=+1.9, p(>0)=0.76, [-3.1, 7.2] Δ=+1.3, p(>0)=0.66, [-9.8, 8.8] \n", + "10 break_into_steps verify_prerequisites \n", + "11 Δ=+21.3, p(>0)=1.00, [6.7, 37.0] Δ=+12.8, p(>0)=1.00, [5.9, 19.5] \n", + "12 lookup_correct_value parse_error_message \n", + "13 Δ=+6.6, p(>0)=0.92, [-2.6, 16.7] Δ=+3.8, p(>0)=0.85, [-3.5, 10.8] \n", + "14 lookup_correct_value verify_prerequisites \n", + "15 Δ=+17.3, p(>0)=1.00, [7.6, 27.9] Δ=+4.5, p(>0)=0.91, [-2.1, 11.0] \n", + "16 lookup_correct_value verify_prerequisites \n", + "17 Δ=+0.5, p(>0)=0.54, [-7.6, 9.5] Δ=-0.1, p(<0)=0.50, [-7.9, 7.5] \n", + "\n", + " #4 #5 \\\n", + "0 use_fallback retry_modified_params \n", + "1 Δ=-0.4, p(<0)=0.49, [-21.3, 17.2] Δ=-3.5, p(<0)=0.76, [-13.2, 6.1] \n", + "2 parse_error_message retry_modified_params \n", + "3 Δ=-5.5, p(<0)=0.98, [-11.3, -0.2] Δ=-6.6, p(<0)=0.99, [-12.1, -1.4] \n", + "4 change_strategy skip_and_continue \n", + "5 Δ=+0.1, p(>0)=0.52, [-7.7, 7.7] Δ=+0.1, p(>0)=0.53, [-13.9, 11.0] \n", + "6 skip_and_continue backtrack \n", + "7 Δ=-5.0, p(<0)=0.84, [-14.6, 4.9] Δ=-5.5, p(<0)=0.87, [-14.9, 3.8] \n", + "8 break_into_steps backtrack \n", + "9 Δ=+0.7, p(>0)=0.53, [-6.9, 10.4] Δ=-1.2, p(<0)=0.59, [-9.7, 5.7] \n", + "10 retry_modified_params backtrack \n", + "11 Δ=+2.6, p(>0)=0.77, [-4.2, 9.4] Δ=+1.4, p(>0)=0.64, [-7.4, 9.4] \n", + "12 verify_prerequisites backtrack \n", + "13 Δ=+3.5, p(>0)=0.84, [-3.6, 10.6] Δ=+1.3, p(>0)=0.63, [-9.0, 9.8] \n", + "14 parse_error_message backtrack \n", + "15 Δ=-9.1, p(<0)=1.00, [-15.8, -2.5] Δ=-10.2, p(<0)=0.99, [-20.0, -1.4] \n", + "16 break_into_steps change_strategy \n", + "17 Δ=-1.2, p(<0)=0.60, [-11.3, 10.0] Δ=-7.6, p(<0)=0.97, [-15.5, 0.2] \n", + "\n", + " #6 #7 \\\n", + "0 change_strategy switch_tool \n", + "1 Δ=-7.9, p(<0)=0.94, [-17.9, 1.8] Δ=-9.8, p(<0)=0.86, [-28.5, 7.4] \n", + "2 use_fallback change_strategy \n", + "3 Δ=-7.2, p(<0)=0.94, [-18.3, 1.5] Δ=-7.5, p(<0)=1.00, [-13.4, -2.1] \n", + "4 retry_modified_params backtrack \n", + "5 Δ=-0.4, p(<0)=0.54, [-7.6, 7.0] Δ=-1.1, p(<0)=0.58, [-10.2, 6.8] \n", + "6 parse_error_message change_strategy \n", + "7 Δ=-9.6, p(<0)=0.97, [-19.9, 0.6] Δ=-11.2, p(<0)=0.99, [-20.9, -1.6] \n", + "8 parse_error_message retry_modified_params \n", + "9 Δ=-3.8, p(<0)=0.92, [-9.2, 1.6] Δ=-4.0, p(<0)=0.93, [-9.3, 1.4] \n", + "10 switch_tool parse_error_message \n", + "11 Δ=-2.1, p(<0)=0.60, [-16.4, 8.9] Δ=-2.5, p(<0)=0.74, [-10.1, 4.9] \n", + "12 retry_same retry_modified_params \n", + "13 Δ=+0.8, p(>0)=0.59, [-8.2, 8.7] Δ=+0.4, p(>0)=0.55, [-6.6, 7.7] \n", + "14 retry_modified_params switch_tool \n", + "15 Δ=-12.0, p(<0)=1.00, [-19.1, -5.1] Δ=-12.0, p(<0)=0.98, [-24.6, -0.9] \n", + "16 parse_error_message switch_tool \n", + "17 Δ=-9.1, p(<0)=0.99, [-16.6, -1.6] Δ=-10.5, p(<0)=0.96, [-23.5, 1.4] \n", + "\n", + " #8 #9 \\\n", + "0 skip_and_continue retry_same \n", + "1 Δ=-12.3, p(<0)=0.96, [-27.0, 1.3] Δ=-13.7, p(<0)=0.98, [-26.4, -1.1] \n", + "2 backtrack break_into_steps \n", + "3 Δ=-7.9, p(<0)=0.99, [-16.8, -0.9] Δ=-8.2, p(<0)=1.00, [-12.2, -3.1] \n", + "4 parse_error_message switch_tool \n", + "5 Δ=-2.0, p(<0)=0.71, [-9.3, 5.0] Δ=-2.6, p(<0)=0.61, [-18.5, 10.1] \n", + "6 use_fallback retry_modified_params \n", + "7 Δ=-13.4, p(<0)=0.97, [-25.9, 0.2] Δ=-16.9, p(<0)=1.00, [-27.2, -6.4] \n", + "8 change_strategy retry_same \n", + "9 Δ=-4.9, p(<0)=0.97, [-10.2, 0.3] Δ=-10.9, p(<0)=0.97, [-24.4, 0.3] \n", + "10 change_strategy skip_and_continue \n", + "11 Δ=-2.9, p(<0)=0.78, [-10.4, 4.4] Δ=-4.9, p(<0)=0.86, [-14.2, 4.1] \n", + "12 change_strategy use_fallback \n", + "13 Δ=-0.3, p(<0)=0.52, [-7.7, 7.1] Δ=-2.7, p(<0)=0.65, [-16.5, 8.7] \n", + "14 change_strategy skip_and_continue \n", + "15 Δ=-13.7, p(<0)=1.00, [-21.3, -6.5] Δ=-16.0, p(<0)=1.00, [-25.7, -6.9] \n", + "16 retry_modified_params skip_and_continue \n", + "17 Δ=-10.9, p(<0)=1.00, [-18.5, -3.1] Δ=-17.2, p(<0)=1.00, [-27.1, -7.9] \n", + "\n", + " #10 #11 \n", + "0 parse_error_message backtrack \n", + "1 Δ=-13.7, p(<0)=1.00, [-23.1, -4.4] Δ=-16.9, p(<0)=1.00, [-28.6, -5.2] \n", + "2 skip_and_continue retry_same \n", + "3 Δ=-11.6, p(<0)=0.98, [-26.1, -0.7] Δ=-14.2, p(<0)=0.97, [-35.8, 0.5] \n", + "4 use_fallback retry_same \n", + "5 Δ=-10.5, p(<0)=0.92, [-27.0, 4.0] Δ=-22.9, p(<0)=1.00, [-36.5, -9.9] \n", + "6 switch_tool retry_same \n", + "7 Δ=-18.4, p(<0)=1.00, [-29.6, -6.2] Δ=-30.8, p(<0)=1.00, [-39.1, -22.0] \n", + "8 skip_and_continue use_fallback \n", + "9 Δ=-11.4, p(<0)=1.00, [-21.3, -3.0] Δ=-17.1, p(<0)=1.00, [-31.1, -4.8] \n", + "10 retry_same use_fallback \n", + "11 Δ=-14.9, p(<0)=0.98, [-30.0, -1.2] Δ=-19.9, p(<0)=1.00, [-36.0, -5.5] \n", + "12 skip_and_continue switch_tool \n", + "13 Δ=-7.1, p(<0)=0.92, [-18.4, 2.7] Δ=-14.5, p(<0)=0.93, [-35.3, 3.7] \n", + "14 use_fallback retry_same \n", + "15 Δ=-25.7, p(<0)=1.00, [-47.5, -5.7] Δ=-36.2, p(<0)=1.00, [-48.9, -23.5] \n", + "16 use_fallback retry_same \n", + "17 Δ=-18.2, p(<0)=1.00, [-32.4, -4.6] Δ=-32.2, p(<0)=0.99, [-54.4, -7.9] " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Per-Model Recovery Strategy Effectiveness with Bayesian Bootstrap\n", + "# Each row = model, columns = ranked strategies (most effective first)\n", + "# Sub-row 1: strategy name, Sub-row 2: delta + p-value + CI\n", + "# Filter: Exclude strategies with < 5% usage in ALL models\n", + "\n", + "import numpy as np\n", + "import pandas as pd\n", + "from collections import Counter, defaultdict\n", + "from bayes_bootstrap import bayes_bootstrap_delta_internal_clustering\n", + "\n", + "# Strategy list (excluding total and no_recovery)\n", + "all_strategies = [\n", + " \"retry_same\", \"retry_modified_params\", \"switch_tool\", \"lookup_correct_value\",\n", + " \"backtrack\", \"parse_error_message\", \"handle_ui_obstacle\", \"change_strategy\",\n", + " \"break_into_steps\", \"verify_prerequisites\", \"skip_and_continue\", \"wait_and_retry\",\n", + " \"use_fallback\", \"other_recovery_strategy\"\n", + "]\n", + "\n", + "MIN_USAGE_THRESHOLD = 0.05 # 5%\n", + "\n", + "# Step 1: Get runs with at least one recovery strategy\n", + "runs_with_recovery = [\n", + " run for run in filtered_runs \n", + " if run.get(\"recovery_strategies\", {}).get(\"total_recovery_strategies\", 0) > 0\n", + "]\n", + "print(f\"Runs with recovery strategies: {len(runs_with_recovery)}\")\n", + "\n", + "# Get unique models (sorted alphabetically)\n", + "models = sorted(set(r[\"model\"] for r in runs_with_recovery))\n", + "print(f\"Models ({len(models)}): {models}\")\n", + "\n", + "# Step 2: Compute per-model usage rates for each strategy\n", + "model_usage = {} # model -> {strategy -> usage_rate}\n", + "for model in models:\n", + " model_runs = [r for r in runs_with_recovery if r[\"model\"] == model]\n", + " total = len(model_runs)\n", + " model_usage[model] = {}\n", + " for strategy in all_strategies:\n", + " # Keys are just strategy names, not strategy_raw\n", + " n_used = sum(1 for r in model_runs if r[\"recovery_strategies\"].get(strategy, 0) == 1)\n", + " model_usage[model][strategy] = n_used / total if total > 0 else 0\n", + "\n", + "# Step 3: Filter strategies - keep if >= 5% usage in at least one model\n", + "strategies_to_analyze = []\n", + "for strategy in all_strategies:\n", + " max_usage = max(model_usage[model][strategy] for model in models)\n", + " if max_usage >= MIN_USAGE_THRESHOLD:\n", + " strategies_to_analyze.append(strategy)\n", + " \n", + "print(f\"\\nStrategies passing 5% filter: {len(strategies_to_analyze)} of {len(all_strategies)}\")\n", + "print(f\"Kept: {strategies_to_analyze}\")\n", + "excluded = [s for s in all_strategies if s not in strategies_to_analyze]\n", + "print(f\"Excluded: {excluded}\")\n", + "\n", + "# Step 4: Define weighted mean statistic for bootstrap\n", + "def weighted_mean_base_score(runs, weights):\n", + " \"\"\"Compute weighted mean of base score.\"\"\"\n", + " scores = np.array([r[\"score\"] for r in runs])\n", + " return np.sum(scores * weights)\n", + "\n", + "# Step 5: Run bootstrap for each model × strategy\n", + "print(\"\\nRunning Bayesian bootstrap (this may take a few minutes)...\")\n", + "results = []\n", + "\n", + "for model in models:\n", + " model_runs = [r for r in runs_with_recovery if r[\"model\"] == model]\n", + " print(f\" Processing {model} ({len(model_runs)} runs)...\")\n", + " \n", + " for strategy in strategies_to_analyze:\n", + " # Split by strategy usage (keys without _raw suffix)\n", + " with_strategy = [r for r in model_runs if r[\"recovery_strategies\"].get(strategy, 0) == 1]\n", + " without_strategy = [r for r in model_runs if r[\"recovery_strategies\"].get(strategy, 0) == 0]\n", + " \n", + " # Skip if either group is empty\n", + " if not with_strategy or not without_strategy:\n", + " continue\n", + " \n", + " # Run bootstrap (cluster by test_id)\n", + " result = bayes_bootstrap_delta_internal_clustering(\n", + " group_a=with_strategy,\n", + " group_b=without_strategy,\n", + " statistic=weighted_mean_base_score,\n", + " cluster_key=\"test_id\",\n", + " n_draws=10000,\n", + " seed=42\n", + " )\n", + " \n", + " if result:\n", + " results.append({\n", + " \"model\": model,\n", + " \"strategy\": strategy,\n", + " \"delta\": result[\"mean\"],\n", + " \"ci_lo\": result[\"lo\"],\n", + " \"ci_hi\": result[\"hi\"],\n", + " \"p_gt_0\": result[\"p_gt_0\"],\n", + " \"p_lt_0\": result[\"p_lt_0\"],\n", + " \"n_with\": len(with_strategy),\n", + " \"n_without\": len(without_strategy),\n", + " \"usage_rate\": model_usage[model][strategy]\n", + " })\n", + "\n", + "print(f\"\\nTotal results: {len(results)}\")\n", + "\n", + "# Check if we have results\n", + "if not results:\n", + " print(\"ERROR: No results computed! Check that runs have base_score and test_id fields.\")\n", + "else:\n", + " # Step 6: Rank strategies per model by delta (descending)\n", + " df_results = pd.DataFrame(results)\n", + " print(f\"DataFrame columns: {df_results.columns.tolist()}\")\n", + " print(f\"DataFrame shape: {df_results.shape}\")\n", + " \n", + " df_results[\"rank\"] = df_results.groupby(\"model\")[\"delta\"].rank(ascending=False, method=\"first\").astype(int)\n", + " \n", + " # Step 7: Build the multi-row table\n", + " max_rank = int(df_results[\"rank\"].max())\n", + " print(f\"Max strategies per model: {max_rank}\")\n", + " \n", + " # Prepare table data\n", + " table_rows = []\n", + " for model in models:\n", + " model_df = df_results[df_results[\"model\"] == model].sort_values(\"rank\")\n", + " \n", + " if model_df.empty:\n", + " continue\n", + " \n", + " # Sub-row 1: strategy names\n", + " name_row = {\"Model\": model}\n", + " # Sub-row 2: stats\n", + " stats_row = {\"Model\": \"\"}\n", + " \n", + " for _, row in model_df.iterrows():\n", + " col_name = f\"#{int(row['rank'])}\"\n", + " name_row[col_name] = row[\"strategy\"]\n", + " \n", + " # Format: Δ=+X.X, p(>0)=0.XX, [lo, hi]\n", + " delta = row[\"delta\"]\n", + " if delta >= 0:\n", + " p_val = row[\"p_gt_0\"]\n", + " p_label = \"p(>0)\"\n", + " else:\n", + " p_val = row[\"p_lt_0\"]\n", + " p_label = \"p(<0)\"\n", + " \n", + " stats_str = f\"Δ={delta:+.1f}, {p_label}={p_val:.2f}, [{row['ci_lo']:.1f}, {row['ci_hi']:.1f}]\"\n", + " stats_row[col_name] = stats_str\n", + " \n", + " table_rows.append(name_row)\n", + " table_rows.append(stats_row)\n", + " \n", + " # Create DataFrame\n", + " columns = [\"Model\"] + [f\"#{i}\" for i in range(1, max_rank + 1)]\n", + " display_df = pd.DataFrame(table_rows, columns=columns)\n", + " \n", + " # Display\n", + " print(\"\\n\" + \"=\" * 80)\n", + " print(\"PER-MODEL RECOVERY STRATEGY EFFECTIVENESS (Bayesian Bootstrap)\")\n", + " print(\"Ranked by score delta (most effective first)\")\n", + " print(\"=\" * 80)\n", + " \n", + " pd.set_option('display.max_colwidth', 50)\n", + " pd.set_option('display.width', None)\n", + " display(display_df)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "8ae78738", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved bootstrap run: 3232708f-7551-4cba-8cd4-859337027096\n", + " Description: Per-model recovery strategy effectiveness (delta = with_strategy - without_strategy)\n", + " Timestamp: 2026-02-09T01:15:47.774549\n", + " Total runs in file: 21\n" + ] + }, + { + "data": { + "image/png": "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rk75li1bFECpVKmSkp+fry3v37+/AihTpkzRqT937lwFUABl27Zt2vJTp04pRkZGSu3atZXk5GSddaZNm6YAyueff64tK4qzf//+pToGoaGhCqCsWLFCpzwzM1MJCAhQAGX16tXa8pycHMXb21uxtLRUwsLCdNbZtWuXYmhoqISEhGjLsrKyFA8PD8XAwEDZvHmz3vZjY2O1f+/cuVMBlGrVqik3btzQlt+4cUOpWrWqAii7du3Slhe9blatWqXXbkBAgGJqaqqkpqZqy3r16qUAyg8//KBT9+rVq4qHh4fi6Oio3Lp1S1veokULBVBq1aqld+wVRVFq1KihWFpaKunp6Trl69atUwBl/PjxeuvcKSYmRrG0tFQMDAyUfv36KT///LMSExNzz3WKXkMXL14scXnR62jgwIFKXl6e3vILFy7oleXm5irPP/+8YmhoqFy6dEmvvRYtWpS4rbJeq/Pnz1cApVOnTjrXRWRkpGJiYqIASmhoqLb80KFD2n25U6dOnRRAiYyMLDG24oqu9bp16yqhoaElPvbt26ezTtH5L4mXl5fi5eX10Mfjt99+UwAlICBASUpK0mkrNzdXuXr1qvb5/c57STE1adJEMTQ0VOLj43XKr127phgZGSlNmzbVlpX12laUf15rI0aM0DmfRed52LBhOvXLcg3+8ssvCqC8+eabevuampqqZGdnK4qiKCdOnFAA5cUXX9Srl5WVpaSlpemVCyGEEEII8TSSzjYhhBBCCHFfRZ1Avr6+2h+3x44dqzRp0kQBFBMTE2Xv3r2KovzzI3pJnQ43btxQVCqV8tJLL2nLijrbSvqx9V6Kd7YpiqK88cYbipGRkfYH7iFDhigajUZJTk4usbMtOztbMTU1Vezt7XV+WC8SHBys00GUnZ2tmJiYKE5OTjqdOoqiKPn5+UrlypX1OttGjRql18lUfB1HR0elbt262rIH7Wx76aWXtOdl+PDhiru7uwIonTt31vkRvagjafLkySW217VrV8XAwEC5efOmoiiKsmrVKgVQ+vXrd99Yijouf/rpJ71lK1asUABl8ODB2rLTp09rO26KCwsLUwClR48e2rLExETF0NBQadOmTYnbnj17tgIov/76q7asqLNlw4YN91xnwYIFOuUdOnRQVCqVEhUVdd99VpTCjlkPDw9txwWgODo6Kt26dVO2bt2qV780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L730UpPldXV1bNy4keeee46tW7de8XGI1svlRx99hJGREcOHD292jkuo7x387bff0rdvX+69997zNqiKy/N9Tg53OTszzMGBqTExFGq1HCwu5uWEhCZl+9rYsLpHj2a3Myk6GmOFgie8vJjh7d1smblxcbyekMDdLi6Ede0qOWwlV5rD4poajBUK5sbFsbeoiB7W1izr3h31OcMuZVRVsTo9nS2nTuFlbs4n3bvjIj1rrtj3O3O4K9SZYT0cmPpODIUlWg4mFvPyqmby52fD6hebr4MA3+3M4d4hriiV569btXU61v+ZxSdzpId3a2mt6yjAdzk53OvqivI810e5jra+a5W/zhYW/H7qFKM7dOCH3Fx5MNyKWiOHK4KCGBMZiUqppLOlJcsuMApGrU7H+qwsPpGRMlqsNetdSySVl/Nnfj7PHzuGrYkJH3XvTlcrq1bdx43uaubwm+xs+trY4HWB3oln+ywzU3onCiFueNLYJgysrKx4/PHHefHFF3FwcMDZ2ZnXX3/d0Aula9euTJ48malTp7JkyRJ69epFQUEBf//9N0FBQYwdO5aXX36ZAQMGMHPmTKZNm4alpSXx8fFs27aN5cv/Ge5vz549vPfee9x9991s27aN7777jl9++QWAzz77jLq6OkJCQrCwsOCLL77A3Nycjh074uDg0GoxQP3wlb/99htjxozB2NiY5557jvPp1KkToaGhPP7449TW1nLXXXcZlqWkpPDNN98watQonJycyMrK4t1338Xc3JyxY8cayt16663861//YtasWQDMnDmTDRs2sHnzZtRqNbkNb07a2Nhgfok3LNez7Oxv6Np1PgqFEmfnO8jN/QEvryfo0OH8828VFUUSGzsdgMrKdIqL96NUqrC27kXPnmvR6WrQaGIJCdmGVlvI3r2DsLMLRaVqOlxdWdlxamvLsbHpfdWO8Ua2b98+7rvvPpRKJb179+bgwYMMHz6cHhe4AU9OTmbNmjUAFBQUcOLECYyNjenYsSNPPfUUAEFBQfz3v/8lKSmJjRs38uqrrzbaxh9//EFISAhW8kWq1bQkl+eaNWsWdnZ2lJWV8Z///AcPDw+6devWqMzEiROxtbVFq9WyfPlydu3axdALDFcoLt032dnM79oVpULBHc7O/JCbyxNeXozucOHevWfb0Ls3bmZmnNZqGRMZSaBazbBz3up/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RERERERE6kmdbSIiIiIiIiIiIiIiIiL1pM42ERERERERERERERERkXpSZ5uIiIiIiIiIiIiIiIhIPamzTURERERERERERERERKSe1NkmIiIiIiIiIiIiIiIiUk/qbBMRERERERERERERERGpJ3W2iYiIiIiIiIiIiIiIiNSTOttERERERERERERERERE6kmdbSIiIiIiIiIiIiIiIiL1pM42ERERERERERERERERkXpSZ5uIiIiIiIiIiIiIiIhIPamzTURERERERERERERERKSeDCaTyWTpIkSk/vLy8vDw8OBAygEcXR0tXY6cI09HT+xt7DFg4EjREUuXI/Xg7+yPqcqG8nIbcnIsXY2cK09PsLevwt5QBUfUBq3SsRDBYFCG1kj5WT9/fzCZoLwc/SG0UsrQuik/66cMrZs+y1i9vJISPNq3Jzc3F3d3d0uXIyJWzM7SBYhI47Aps8GhwsHSZcg5KisqAyPY2dopPytVVVlFRUU5ZWXlOChCq1NWBmCPyc6WEgVoncrKcKiqwgGgtNTS1ci5yswEV1cwGpWftUpNBReXYycalaF1UobWraTk2AeaggKorLR0NVIfytC66bOM9SsosHQFInKBUGebyAWiuKiYqsoqS5ch58hoNOLi4oLJaCI3O9fS5Ug9OBodKSsro7CwkLJjPTdiRcxt0GQkM1dt0BoZjUbcnZxwqKqCgwctXY6cK1fXY1f0u7oqP2ulDK2fMrRurq7HThQfOaITxtZKGVo3vYdaP4PB0hWIyAVCnW0iF4iysjKio6MtXYaco8jISFxcXKiqqmLjxo2WLkfqYfz48cCxNqgMrY/aoPWLjIwEJ6djUy/NmmXpcuRcTZ167ASV8rNeytD6KUPrNmfOsf8WFCg/a6UMrZveQ63f5MmWrkBELhA2li5ARERERERERERERERExFqps01ERERERERERERERESkntTZJiIiIiIiIiIiIiIiIlJP6mwTERERERERERERERERqSd1tomIiIiIiIiIiIiIiIjUkzrbREREREREREREREREROpJnW0iInJGsbGxTJgwgZiYmHPabsaMGUyfPr1pihJpoerbHk9HbVVERC5E8UVFTN+zh4OFhZYuRc7SF4mJGJYuZf9JmY1ct46ha9daqCoRERGRM7OzdAEiIiIi0riqqqqwsdE1VSLNSZXJhI3BYOky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btw4kpOT+fe//93kr8WFIjg4mIKCAtauXUtSUhLBwcHk5+ezY8cOtlRfTRp0wk2Qj+dz8u9BQUEYDAbGjh3L1KlTue222+jRowchISEkJyezY8cO4uPjycjIMN8zLC0tjaLq+f6l+Vm4cCETJkwwt+GTzZ49mylTpgAQGxvLwoULda/F88DGxsY8YthkMpnbU3p6OgUFBWdsw9I04ouKmL5nDwcLC89pu+jcXKbv2cPRsrImqkzqI8LNDQcbG96PiOCHvn15qVMn3O3ssK/jnjPHH4uo7kj7LiWF71NTjz12wgUldW0rTS+nvJzpe/awrfoioXMxct06hq5d2wRVyXG2BgOGE34+rourKyuysojNz2dlVhYRrq6EOTtjZzDwy5EjrMzM5Mg5vm/W1a57uLvT0cWFv48eZWdeHptychrv4MTs88REovPy+KhbN4aecL+n45mfOCmd8jj/rtu6FePPP3PX9u11LjcsXcpzu3ef9uf6+CIxEcPSpew/x89OIiIilqJvdCLSqAoLC5k1axZdunTh6aefxtnZmW+//RZnZ2fzOnfffTfOzs688MILfPrpp5hM/7ut/B133EHbtm154403OHr0KIMHD2bfvn08//zztfbl6urKgAEDiI6O5uDBg+ZOnV69enH11Vfzyy+/MG3aNPbu3WveJiQkhIcffphVq1axaNGiJnwlLhyjRo1i9OjRzJs3jxdffBF3d3eGDRvGBx98wLJly7j55pvPakRMSEgIEydOZO3atbz33nusXr0aBwcHrrrqKvr06cP777/Pq6++Sm5uLqGhobRt25YvvviCpUuXnoejvDCcTUeWyWSq0eYa4rLLLuPDDz+s1cF63C233GK+/15sbCyLFi1qtH3L2fPw8KB79+7897//Zd68eVx00UX1asPSMPFFRby0bx8H67iA4HTtMjovj5f27eNoeXlTlyjnYHJoKDcHBfFEXBw3RUWxPjsbp1O8Fx53eatWPNGuHY/HxjJ11y4ea9eOKwMCzlPFcio55eW8tG9fvTrbxHI+qZ5mvN/q1ZSbTHzesyf+Dg681qULXycn89bBg/ie470PT9Wu34+IIKG4mBu2baNV9UhUaVzXBgbiaW/PM7t3n/E+bMrj/EorKWFhaipPtm/PW127WrocERGRZs1g0lkvEauWl5eHh4eHeUSZWJfIyEi8vLyws7NT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PVTOLG/yZDyuuorc3Fzc3d0tXY6IWDGNbBMREREREbGwuIIC7o2JobyqikFeXnXeg09ERERERESaJ3W2iYiIiLQAzz//vKVLEJHTuKF1a25o3drSZYg0OyN9fTGNH2/pMkRERERETsvmzKuIiIiIiIiIiIiIiIiISF3U2SYiIiIiIiIiIiIiIiJST+psExEREREREREREREREakndbZJs9S2bVtmzZpl6TJOqaioiGuuuQZ3d3cMBgM5OTmWLklERERERERERERERCxAnW1yQbrnnnswGAxn7LDbtWsX11xzDW3btj2r9Y+bN28eq1evZt26daSmpuLh4dGgeuPj4zEYDERHRzfoeURERERERERERERE5PxSZ5ucV2VlZU2+jx9//JGNGzfSunXrM65bVFREu3bteP311wkICDjrfRw4cICuXbvSrVs3AgICMBgMDSlZRERERERERERERESslDrbpEHy8/O5+eabcXFxITAwkPfee4+RI0cydepU4Nh0kDNnzmTSpEl4eHgwefJkAH744QciIiJwcHCgbdu2vPPOO6fdz9y5c/Hw8OCPP/447XrJyclMmTKF+fPnY29vf8b6+/fvz1tvvcWNN96Ig4PDWR3zyJEjeeedd/j7778xGAyMHDkSgK+//pp+/frh5uZGQEAAEyZM4MiRI+btsrOzufnmm/Hz88PJyYmOHTsyd+5cAMLCwgDo3bt3jecUEREREREREREREZHmTZ1t0iCPPvooa9eu5aeffuKPP/5g9erVbNu2rcY6b731Ft26dWPr1q08//zzbN26leuvv54bb7yRmJgYpk+fzvPPP88XX3xR5z7efvttHn/8cX777TfGjBlzylqqqqq49dZbeeKJJ4iIiGjMw6xh0aJFTJ48mUGDBpGamsqiRYuAY6P2ZsyYwfbt2/nxxx85dOgQkyZNMm/3/PPPExsby6+//kpcXBz/+te/8PX1BWDTpk0A/PnnnzWeU0REREREREREREREmjc7Sxcg1is/P5958+axYMECRo8eDRwbgXby9I0XXXQRjz/+uPn3m2++mdGjR/P8888D0KlTJ2JjY3nrrbdqdE4BTJs2jXnz5rFy5Uq6d+9+2nreeOMN7OzseOihhxrh6E7N29sbZ2dnjEZjjakn77jjDvPP7dq144MPPmDAgAEUFBTg6upKQkICvXv3pl+/fsCxUX/H+fn5AeDj43PG6SxLS0spLS01/56Xl9cYhyUiIiIiIiIiIiIiIvWgkW1SbwcPHqS8vJwBAwaYH/Pw8KBz58411jveuXRcXFwcQ4YMqfHYkCFD2LdvH5WVlebH3nnnHebMmcOaNWtqdLTNnz8fV1dX87/Vq1ezdetW3n//fb744otGvX9aXfs6laioKK666iratGmDm5ubeSrIhIQEAO677z6++eYbevXqxZNPPsm6devqVdNrr72Gh4eH+V9ISEi9nud8WbFiBRMnTqSwsLBRni8jI4Pp06dz22238dtvv9W5TklJCa+88gq333478+fPb5T9tlSNnR8cGx36yCOP8MQTT7B///5ayzMyMpg0aRLTpk1j2rRpfP/9942275asoVmmp6fz7LPP8sgjj/D5559jMpnq3McjjzzChAkTKCkpaWjJcpKGZrh48WIefPBB7r777lOuM3/+fB577DGeeuop5syZU+PvsjTcZwkJOPzyCznl5fXafti6dfT6+296/f03fr//ztRdu2qtYzKZeCI2lk4rVtB15Uq+S0lpaNlSraH5/ZGRQa+//yZi5UoeqSO74/vouHw5hqVLKaioaEi5Uq2huc3ct4/QP//E96TPnZllZYxav56Oy5fzjy1bKKnj/XL6nj0E//mnud1uycmpVw0tmSXziy8qYuS6dXRftYrLNm4kt541tHRNleENW7ea21bQH39w9ebNtbZ958ABuq5cSY9Vq/i/zZvJU4bnrKny256Xx8A1a+j1998MWbuWg3V8vlV+jaOhGd4SFUXPVavovmoV98XEUFX9PfDx2Fg6r1hB91WruGP7diqqqmptqwxFpKVRZ5vU2/ETrSd3bp18AtbFxaXW8jNtAzBs2DAqKyv57rvvajx+5ZVXEh0dbf7Xr18/Vq9ezZEjRwgNDcXOzg47OzsOHz7MY489VmME2bmqa191KSwsZOzYsbi6uvL111+zefNmFi9eDBybXhLg0ksv5fDhw0ydOpWUlBRGjx5dY8Tf2Zo2bRq5ubnmf4mJifU+vvNhw4YNhISEsLmOLz9nMnv2bDIyMmo85uTkxC233MJll112yu1sbW35xz/+wYQJE855n1JTY+eXkJBAdHQ0b7/9Ng888MApp48NCgritdde47XXXuO6666rT+lykoZkCbBgwQKuueYa3nvvPXJzc4mKiqq1Tvv2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ERERERERERGpJ3W2iYiIiIiIiIiIiIiIiNSTOttERERERERERERERERE6kmdbSIiIiIiIiIiIiIiIiL1pM42ERERERERERERERERkXpSZ5uIiIiIiIiIiIiIiIhIPamzTURERERERERERERERKSe1NkmIiIiIiIiIiIiIiIiUk/qbBMRERERERERERERERGpJ3W2iYiIiIiIiIiIiIiIiNSTOttERERERERERERERERE6slgMplMli5CROovNzcXT09PNm3ahNFotHQ5co6MRiPOzs4YjUaOHDli6XKkHvz9/SkrK6OoqIiysjJLlyPnSG3Q+hmNRtycnHCvqoKdOy1djpwrV1fw9T32X+VnnZSh9VOG1q1bNygogMzMY/8V66MMrZveQ61ensFAyJVXkpOTg4eHh6XLERErZmfpAkSkYfLz8wEYMGCAhSsRERERERERERGxPvn5+epsE5EG0cg2EStXVVVFSkoKbm5uGAwGS5fT6PLy8ggJCSExMRF3d3dLlyPnSPlZP2Vo/ZShdVN+1k8ZWjflZ/2UofVThtZN+Vm/Cz1Dk8lEfn4+rVu3xsZGd1wSkfrTyDYRK2djY0NwcLCly2hy7u7uF+SHupZC+Vk/ZWj9lKF1U37WTxlaN+Vn/ZSh9VOG1k35Wb8LOUONaBORxqDuehEREREREREREREREZF6UmebiIiIiIiIiIiIiIiISD2ps01EmjUHBwdefPFFHBwcLF2K1IPys37K0PopQ+um/KyfMrRuys/6KUPrpwytm/KzfspQROTsGEwmk8nSRYiIiIiIiIiIiIiIiIhYI41sExEREREREREREREREakndbaJiIiIiIiIiIiIiIiI1JM620RERERERERERERERETqSZ1tItJsZGRkYG9vT1FRERUVFbi4uJCQkGBe/sknnzBy5Ejc3d0xGAzk5ORYrlip5XT5HT16lAcffJDOnTvj7OxMaGgoDz30ELm5uRauWk50pjZ4zz330L59e5ycnPDz8+Oqq65i9+7dFqxYTnSm/I4zmUxceumlGAwGfvzxx/NfqJzSmTIcOXIkBoOhxr8bb7zRghXLyc6mHa5fv56LLroIFxcXPD09GTlyJMXFxRaqWE50uvzi4+Nrtb/j/77//nsLVy7HnakNpqWlceuttxIQEICLiwt9+vRh4cKFFqxYTnSm/A4cOMD//d//4efnh7u7O9dffz3p6ekWrFga4zt8dnY2t956Kx4eHnh4eHDrrbfqu/550hj5vfLKKwwePBhnZ2c8PT3PX/EiIs2QOttEpNlYv349vXr1wtnZma1bt+Lt7U1oaKh5eVFREePGjeOZZ56xYJVyKqfLLyUlhZSUFN5++21iYmL44osvWLZsGXfeeaeFq5YTnakN9u3bl7lz5xIXF8dvv/2GyWRi7NixVFZWWrBqOe5M+R03a9YsDAaDBSqUMzmbDCdPnkxqaqr535w5cyxUrdTlTBmuX7+ecePGMXbsWDZt2sTmzZuZMmUKNjb6WtYcnC6/kJCQGm0vNTWVl156CRcXFy699FILVy7HnakN3nrrrezZs4effvqJmJgY/vGPf3DDDTcQFRVlwarluNPlV1hYyNixYzEYDCxfvpy1a9dSVlbGFVdcQVVVlYUrb7ka4zv8hAkTiI6OZtmyZSxbtozo6GhuvfXW81F+i9cY+ZWVlXHddddx3333nY+SRUSaNTtLFyAicty6desYMmQIAGvWrDH/fNzUqVMBWLly5XmuTM7G6fLr1q0bP/zwg/n39u3b88orr3DLLbdQUVGBnZ3+HDUHZ2qDd999t/nntm3bMnPmTHr27El8fDzt27c/r7VKbWfKD2D79u28++67bN68mcDAwPNdopzB2WTo7OxMQEDA+S5NztKZMnzkkUd46KGHePrpp82PdezY8bzWKKd2uvxsbW1rtb3Fixdzww034Orqel7rlFM7Uxtcv349//rXvxgwYAAAzz33HO+99x7btm2jd+/e571eqel0+a1du5b4+HiioqJwd3cHYO7cuXh7e7N8+XIuvvhii9Tc0jX0O3xcXBzLli1jw4YNREZGAvDpp58yaNAg9uzZQ+fOnZusdmmcczAvvfQSAF988UVTlCgiYlV0dlNELCohIYEePXoAx66asrW15YsvvqC4uBiDwYCnpycTJkzg448/tnClUpeG5Jebm4u7u7s62iysvhkWFhYyd+5cwsLCCAkJsUTpwrnlV1RUxE033cQ///lPddY0I+faBufPn8/XX39Nq1atuPTSS3nxxRdxc3Oz5CG0eGeb4fTp09m4cSM333wzgwcP5sCBA3Tp0oVXXnmFoUOHWvgoWq76/h3cunUr0dHRfPTRR5YoW05wLhkOHTqUb7/9lssvvxxPT0++++47SktLGTly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yiv55z//2fQH0YI1Zn4vvPAC8+bNM6/Tu3dvAFasWMHIkSOb7iBERJohjWwTERERERERERERERERqSfds01ERERERERERERERESkntTZJiIiIiIiIiIiIiIiIlJP6mwTERERERERERERERERqSd1tomIiIiIiIiIiIiIiIjUkzrbREREREREREREREREROpJnW0iIiIiIiIiIiIiIiIi9aTONhEREREREREREREREZF6UmebiIiIiIiIiIiIiIiISD2ps01ERERE5DzZuHEj//d//0doaCgODg60atWKQYMG8dhjj9VY7+OPP+aLL75okhqKioqYPn06K1eubJLnb0zTp0/HYDCY/9nb2xMaGsrkyZNJS0tr8v1PmjQJV1fXBj3HHXfcwbhx48y/r1y5EoPBwMKFCxtaXot2/P+N+pg0aRJt27at8dirr77Kjz/+WO96srOz8fT0bNBziIiIiIiI9VJnm4iIiIjIefDzzz8zePBg8vLyePPNN/n99995//33GTJkCN9++22NdZu6s+2ll16yis6245YtW8b69ev59ddfufHGG/n3v//N6NGjKS8vt3RppxUVFcW8efOYOXOmpUuRM2hoZ5uXlxePPPIITzzxBGVlZY1XmIiIiIiIWAU7SxcgIiIiItISvPnmm4SFhfHbb79hZ/e/j+E33ngjb775Zr2ft7y8HIPBUOM5LzR9+/bF19cXgIsvvpjMzEzmzp3LmjVrGDVqlIWrO7XXX3+dAQMG0K9fP0uXYhFFRUU4Oztbuozz5t5772XmzJksXLiQCRMmWLocERERERE5jzSyTURERETkPMjKysLX17fOTjEbm/99LG/bti27du1i1apV5ukTj095d3wKwq+++orHHnuMoKAgHBwc2L9/PxkZGdx///2Eh4fj6uqKv78/F110EatXrzY/d3x8PH5+fgC89NJL5uefNGmSeZ19+/YxYcIE/P39cXBwoGvXrnz00Ue1at61axdjx47F2dkZPz8/HnjgAX7++WcMBoN51NyMGTOws7MjMTGx1vZ33HEHPj4+lJSUnPNrebzzKj093fzY2Rz/8dfAYDDw9ttv8+677xIWFoarqyuDBg1iw4YNZ9z32rVr8fX1Zfz48RQWFp5yvfT0dBYvXsytt95a5/KSkhIeffRRAgICcHJyYsSIEURFRZmXf/XVVxgMBtavX19r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DRr0nCJ8tmJjY/HRRx/h1q1bMDMz63A76enpeP3113HkyBEEBgY+xQjpacrOzsbYsWNx+fJluLq6Pu9wiIiIiIjoGWKyjYiIiIiI2m3t2rVwcHCAi4sLfv/9d2RkZCA+Ph6rV6/G2rVr9fXOnz+PwsJChIWFYfTo0UhLS3t+QT9jNTU1GDBgABYtWoTly5e3+/4rV67gxo0biIyMhFqtxrlz5zp81h39+3x8fNCnTx/s3LnzeYdCRERERETPGM9sIyIiIiKidlMqlYiJiUFxcTHq6urQt29fbNy40eDsOQAICgpCaWkpxowZg7i4uOcU7fOhUqmwd+9enD9/vkP3L1y4EKdOnYKbmxsSEhKYaPsvVlFRAW9v7zadqUdERERERC8ermwjIiIiIiIiIiIiIiIi6qBOzzsAIiIiIiIiIiIiIiIiov9VTLYRERERERERERERERERdRCTbUREREREREREREREREQdxGQbERERERERERERERERUQcx2UZERERERERERERERETUQUy2EREREREREREREREREXUQk21EREREREREREREREREHcRkGxEREREREREREREREVEHMdlGRERERERERERERERE1EH/B41wadwGGvRRAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "============================================================\n", + "COLOR DISTRIBUTION SUMMARY\n", + "============================================================\n", + " GREEN : 14 ( 14.1%)\n", + " BLUE : 4 ( 4.0%)\n", + " GRAY : 35 ( 35.4%)\n", + " ORANGE : 7 ( 7.1%)\n", + " RED : 39 ( 39.4%)\n" + ] + } + ], + "source": [ + "# Save results and create visualization\n", + "from bayes_bootstrap import save_bootstrap_run\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib.patches as mpatches\n", + "import numpy as np\n", + "\n", + "# Save the bootstrap results\n", + "save_bootstrap_run(\n", + " description=\"Per-model recovery strategy effectiveness (delta = with_strategy - without_strategy)\",\n", + " results={\n", + " \"analysis_type\": \"per_model_strategy_effectiveness\",\n", + " \"n_models\": len(models),\n", + " \"n_strategies\": len(strategies_to_analyze),\n", + " \"strategies_analyzed\": strategies_to_analyze,\n", + " \"min_usage_threshold\": MIN_USAGE_THRESHOLD,\n", + " \"n_bootstrap_draws\": 10000,\n", + " \"results_by_model\": df_results.to_dict(orient=\"records\")\n", + " },\n", + " metadata={\n", + " \"cluster_key\": \"test_id\",\n", + " \"score_field\": \"score (base_score 0-100)\",\n", + " \"total_runs_with_recovery\": len(runs_with_recovery)\n", + " }\n", + ")\n", + "\n", + "# Color coding function\n", + "def get_color(row):\n", + " \"\"\"\n", + " Green: high beneficial (p_gt_0 >= 0.95, delta > 0)\n", + " Blue: moderate beneficial (0.90 <= p_gt_0 < 0.95, delta > 0)\n", + " Orange: moderate harmful (0.90 <= p_lt_0 < 0.95, delta < 0)\n", + " Red: high harmful (p_lt_0 >= 0.95, delta < 0)\n", + " Gray: inconclusive\n", + " \"\"\"\n", + " delta = row[\"delta\"]\n", + " p_gt_0 = row[\"p_gt_0\"]\n", + " p_lt_0 = row[\"p_lt_0\"]\n", + " \n", + " if delta >= 0:\n", + " if p_gt_0 >= 0.95:\n", + " return \"green\"\n", + " elif p_gt_0 >= 0.90:\n", + " return \"blue\"\n", + " else:\n", + " return \"gray\"\n", + " else:\n", + " if p_lt_0 >= 0.95:\n", + " return \"red\"\n", + " elif p_lt_0 >= 0.90:\n", + " return \"orange\"\n", + " else:\n", + " return \"gray\"\n", + "\n", + "# Add color column\n", + "df_results[\"color\"] = df_results.apply(get_color, axis=1)\n", + "\n", + "# Create visualization: heatmap-style grid\n", + "fig, ax = plt.subplots(figsize=(18, 10))\n", + "\n", + "# Get unique models and max strategies\n", + "unique_models = sorted(df_results[\"model\"].unique())\n", + "n_models = len(unique_models)\n", + "max_strategies = int(df_results[\"rank\"].max())\n", + "\n", + "# Create grid\n", + "model_to_idx = {m: i for i, m in enumerate(unique_models)}\n", + "\n", + "# Plot each cell\n", + "for _, row in df_results.iterrows():\n", + " model_idx = model_to_idx[row[\"model\"]]\n", + " rank = int(row[\"rank\"]) - 1 # 0-indexed\n", + " color = row[\"color\"]\n", + " \n", + " # Draw rectangle\n", + " rect = plt.Rectangle((rank, n_models - model_idx - 1), 1, 1, \n", + " facecolor=color, edgecolor=\"white\", linewidth=2, alpha=0.7)\n", + " ax.add_patch(rect)\n", + " \n", + " # Prepare text: strategy name, delta, and p-value\n", + " short_name = row[\"strategy\"].replace(\"_\", \"\\n\")[:25]\n", + " delta = row[\"delta\"]\n", + " \n", + " # Show appropriate p-value based on delta direction\n", + " if delta >= 0:\n", + " p_val = row[\"p_gt_0\"]\n", + " p_str = f\"p(>0)={p_val:.2f}\"\n", + " else:\n", + " p_val = row[\"p_lt_0\"]\n", + " p_str = f\"p(<0)={p_val:.2f}\"\n", + " \n", + " delta_str = f\"Δ={delta:+.1f}\"\n", + " \n", + " # Add text in cell\n", + " ax.text(rank + 0.5, n_models - model_idx - 0.25, short_name, \n", + " ha=\"center\", va=\"center\", fontsize=6, fontweight=\"bold\")\n", + " ax.text(rank + 0.5, n_models - model_idx - 0.55, delta_str,\n", + " ha=\"center\", va=\"center\", fontsize=7)\n", + " ax.text(rank + 0.5, n_models - model_idx - 0.75, p_str,\n", + " ha=\"center\", va=\"center\", fontsize=6, style=\"italic\")\n", + "\n", + "# Set axis limits and labels\n", + "ax.set_xlim(0, max_strategies)\n", + "ax.set_ylim(0, n_models)\n", + "\n", + "# Y-axis: model names\n", + "ax.set_yticks([i + 0.5 for i in range(n_models)])\n", + "ax.set_yticklabels([m.split(\"/\")[-1] for m in reversed(unique_models)], fontsize=10)\n", + "\n", + "# X-axis: rank\n", + "ax.set_xticks([i + 0.5 for i in range(max_strategies)])\n", + "ax.set_xticklabels([f\"#{i+1}\" for i in range(max_strategies)], fontsize=10)\n", + "\n", + "ax.set_xlabel(\"Strategy Rank (by score delta)\", fontsize=12)\n", + "ax.set_ylabel(\"Model\", fontsize=12)\n", + "ax.set_title(\"Per-Model Recovery Strategy Effectiveness\\n(Bayesian Bootstrap, clustered by test_id)\", fontsize=14)\n", + "\n", + "# Legend\n", + "legend_patches = [\n", + " mpatches.Patch(color=\"green\", alpha=0.7, label=\"Beneficial (p ≥ 95%)\"),\n", + " mpatches.Patch(color=\"blue\", alpha=0.7, label=\"Beneficial (90% ≤ p < 95%)\"),\n", + " mpatches.Patch(color=\"gray\", alpha=0.7, label=\"Inconclusive (p < 90%)\"),\n", + " mpatches.Patch(color=\"orange\", alpha=0.7, label=\"Harmful (90% ≤ p < 95%)\"),\n", + " mpatches.Patch(color=\"red\", alpha=0.7, label=\"Harmful (p ≥ 95%)\")\n", + "]\n", + "ax.legend(handles=legend_patches, loc=\"upper right\", bbox_to_anchor=(1.22, 1))\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "# Print summary statistics\n", + "print(\"\\n\" + \"=\" * 60)\n", + "print(\"COLOR DISTRIBUTION SUMMARY\")\n", + "print(\"=\" * 60)\n", + "color_counts = df_results[\"color\"].value_counts()\n", + "for color in [\"green\", \"blue\", \"gray\", \"orange\", \"red\"]:\n", + " count = color_counts.get(color, 0)\n", + " pct = count / len(df_results) * 100\n", + " print(f\" {color.upper():8s}: {count:3d} ({pct:5.1f}%)\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "cac1ae53", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total runs with recovery strategies: 3625\n" + ] + }, + { + "data": { + "image/png": "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dilf+b7wxs+Tx8leb16fUcHZvFVbjB4/Ge/83+LiuV8QHR0FXR1dOJRzxiL31Shj8/EpgJDgILlzMiU5Gbv+3IjAgACoa2igZu26mDB1JrS1sz91WxzExcVh68Z1CA0JgY6OLho0borBw0bKnuAKDwtDSNDHCc41NDWxcOlyrF3pjh9GDoGOrh4aN2uOQUNHKmoXCp2wsDAEZWmzdh06Ij4+HocO7MeaVSugra2D6jVqYtToMQqMMn/ERkVif5Y+v7mVDQZNlO/zn9qzGbHRkdDRN0DVes3R7JM+f9Qnff6SqFWrjP7Yls0Z/TE7e3u4u3/sj4WFhiIo6GN/LDUlBStXLkdISAjU1NRga2uH392Xo0GD4vvEHBV/ElEIn+dv2rQpqlatiuXLlys6FKIi49HLnMdipuwq25mj34oLig6jyNj5Ywvsv/5C0WEUKT0bOCIq+vPjLdNHero6GLn+iqLDKFL+GNWEx1ge6OnqYPO5x4oOo0gZ2qoitp5/8uUVCQAwuGUF+L0PVXQYRYq9pTG83wYrOowio1wZU7wOyHmYLMqZjYURgkIjFR1GkWFmrI8D7PPnSY8GjoiMYn/sa+nrFc8bf/8Pr3zM31SyM8+3bRcWxXNgRyIiIiIiIiIiIiIqVhQ+zAgRERERERERERFRiVCyR8v5ZoUymX358mVFh0BERERERERERET0n5Iwm/1NOMwIERERERERERERERV6hbIym4iIiIiIiIiIiKi4YV32t2FlNhEREREREREREREVeqzMJiIiIiIiIiIiIioILM3+JqzMJiIiIiIiIiIiIqJCj5XZRERERERERERERAWAhdnfhpXZRERERERERERERFTosTKbiIiIiIiIiIiIqABIJKzN/haszCYiIiIiIiIiIiKiQo/JbCIiIiIiIiIiIiIq9DjMCBEREREREREREVEB4Cgj34aV2URERERERERERERU6LEym4iIiIiIiIiIiKgAsDD727Aym4iIiIiIiIiIiIgKPVZmExERERERERERERUEDpr9TViZTURERERERERERESFHiuziYiIiIiIiIiIiAoA67K/DZPZRERERERERERERAWAyexvw2FGiIiIiIiIiIiIiKjQY2U2ERERERERERERUUFgafY3YWU2ERERERERERERERV6EiGEUHQQRERERERERERERMWd77vQfNu2g5Vxvm27sOAwI0TFxN0XHxQdQpFR07EUXJefV3QYRcau8S1x5JavosMoUrrUdUBUdIyiwygy9HR1MHL9FUWHUaT8MaoJj7E80NPVwarjDxUdRpHyQ8cqWHfqkaLDKDK+b1cZYRHRig6jSDEy0IW3f4iiwygyypU2gX9QuKLDKFJKmxmyzfKgtJkhdl95rugwipS+TZzYH8sDPV0dRYdAxQST2UREREREREREREQFQMIxs78Jx8wmIiIiIiIiIiIiokKPyWwiIiIiIiIiIiIiKvQ4zAgRERERERERERFRAeAwI9+GldlEREREREREREREVOixMpuIiIiIiIiIiIioAEjA0uxvwcpsIiIiIiIiIiIiIir0mMwmIiIiIiIiIiIiokKPyWwiIiIiIiIiIiIiKvQ4ZjYRERERERERERFRAZBwyOxvwspsIiIiIiIiIiIiIir0WJlNREREREREREREVABYmP1tmMwmIiIiIiIiIiIiKggcZ+SbcJgRIiIiIiIiIiIiIir0WJlNREREREREREREVABYl/1tWJlNRERERERERERERIUeK7OJiIiIiIiIiIiICgCHzP42rMwmIiIiIiIiIiIiokKPyWwiIiIiIiIiIiIiKvSYzCYiIiIiIiIiIiKiQo/JbCqUbGxssHz5ckWHkav4+Hh0794durq6kEgkiIyMVHRIRERERERERERUyEny8X8lASeApGJp5MiR2LBhA9zd3TF+/Phc13vy5AlmzZoFT09PvHnz5ovrZ9q2bRuuXr2KGzduwNjYGHp6et8U7+vXr2Fra4v79++jatWq37St/9qR/btw98ZVfHj/FqqqaijrVAG9B41AKasysnXu3PgHF04fwyvfF4iNicaCFRthY+fw1X/j5j8XsXrJPNSo0wATf5mfH7tRoKQSCbrXtUN9J3Poa6kiMi4J/zwNwN8eryCyrFfKQBO9G5aFs5UBJBLgfVgcVp58hLCYpBy326xiKTR0tkBpI20AwKvgaOy97oeXQdEFsFf55+aFE7h58SQiQoMAAGaW1mjZpQ+cqtSUrRP04S1O7t2KV96PkS4EzC3LwHXMNBgYmea4zfULp+Hlc69sy52q1MSQiXPyZ0cKgQP792PHzh0ICw2FnZ0dJkychGrVquW6/j1PTyxf7o6XL1/C2NgE/Qf0R/fuPQow4oKxwLUOjHXUsy2//Pg9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IiIiIiKigsDC7G/CymwiIiIiIiIiIiIiKvRYmU1ERERERERERERUAFiY/W1YmU1EREREREREREREhR4rs4mIiIiIiIiIiIgKACuzvw2T2UREREREREREREQFQcJ09rfgMCNEREREREREREREJdDatWtha2sLdXV11KhRA1evXlV0SJ/FZDYRERERERERERFRAZDk47+82rt3L8aPH4+ff/4Z9+/fR6NGjdCuXTu8ffv2G/YwfzGZTURERERERERERFTC/P777xg6dCiGDRsGZ2dnLF++HKVLl8a6desUHVqumMwmIiIiIiIiIiIiKgASSf79y4vk5GR4enqidevWcstbt26NGzdu/Id7/N/iBJBExYCVlRVSUtMUHUaRoaKshPDYJEWHUWRYLVVDYnKqosMoUsaoKkMIoegwigyJRILIOJ6TeXFivhqPsTyQSCSITUxRdBhFymJ1FcSxzb7aAnUVpKfznMwLqVSC1LR0RYdRZCgrSZGWzvbKCyUp2ywvlKRSxCexz58XP6mxz58X79+/V3QIJUJSUhKSkuR/W6mpqUFNTS3buqGhoUhLS4OZmZnccjMzMwQGBuZrnN+CyWyiYoAXBcpP76MUHQERfSouUtERUHHHr/68iVR0AEREVOAiFB0AFVl6ujr5tm03NzfMmTNHbtns2bPh5uaW62ckn5R0CyGyLStMmMwmKgYsLS2Rksqqg6+loixlZXYeGGqrIYGV2XmiwcrsPGFldt7pa7EyOy8kEgmrzfJIU00ZcUmszP5aWmoqrDLOI2UlKdssD1iZnXeszM4bVmbnnSYrs6kQmj59OiZOnCi3LKeqbAAwNjaGkpJStirs4ODgbNXahQmT2UTFwLt373DPJ0DRYRQZ1ctaoK/7eUWHUWTsntAS+655KzqMIqVXw3KIio5RdBhFhp6uDkasu6zoMIqUDd835TGWB3q6Oth28amiwyhSBjYvjw1nvBQdRpExok0l+L4LVXQYRYqDlTH83rPNvpa9pTHeBbEONC+szAzYZnlgZWaAPy/wWpkXg1qUZ3+MCp3chhTJiaqqKmrUqIFz586hW7dusuXnzp1Dly5d8ivEb8ZkNhEREREREREREVEJM3HiRPTv3x81a9ZEvXr1sGHDBrx9+xajRo1SdGi5YjKbiIiIiIiIiIiIqIT57rvvEBYWhrlz5yIgIAAVK1bEyZMn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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "============================================================\n", + "TOP 5 MOST USED STRATEGIES (Overall)\n", + "============================================================\n", + " 1. backtrack: 20.0%\n", + " 2. break_into_steps: 86.8%\n", + " 3. change_strategy: 40.8%\n", + " 4. handle_ui_obstacle: 0.0%\n", + " 5. lookup_correct_value: 79.8%\n" + ] + } + ], + "source": [ + "# Recovery Strategy Usage Rates (Heatmap by Model)\n", + "# Percentage of runs where each recovery strategy was attempted\n", + "\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import seaborn as sns\n", + "\n", + "# Get all runs with at least one recovery strategy\n", + "runs_with_recovery = [\n", + " run for run in filtered_runs \n", + " if run.get(\"recovery_strategies\", {}).get(\"total_recovery_strategies\", 0) > 0\n", + "]\n", + "\n", + "# Strategy list\n", + "all_strategies = [\n", + " \"retry_same\", \"retry_modified_params\", \"switch_tool\", \"lookup_correct_value\",\n", + " \"backtrack\", \"parse_error_message\", \"handle_ui_obstacle\", \"change_strategy\",\n", + " \"break_into_steps\", \"verify_prerequisites\", \"skip_and_continue\", \"wait_and_retry\",\n", + " \"use_fallback\", \"other_recovery_strategy\"\n", + "]\n", + "\n", + "total_runs = len(runs_with_recovery)\n", + "print(f\"Total runs with recovery strategies: {total_runs}\")\n", + "\n", + "# Compute overall usage rates (for sorting)\n", + "overall_usage = {}\n", + "for strategy in all_strategies:\n", + " n_used = sum(1 for r in runs_with_recovery if r[\"recovery_strategies\"].get(strategy, 0) == 1)\n", + " overall_usage[strategy] = (n_used / total_runs) * 100 if total_runs > 0 else 0\n", + "\n", + "# Sort strategies by overall usage (descending)\n", + "sorted_strategies = sorted(all_strategies) # Alphabetical order\n", + "\n", + "# Compute per-model usage rates\n", + "models = sorted(set(r[\"model\"] for r in runs_with_recovery))\n", + "model_usage = {}\n", + "\n", + "for model in models:\n", + " model_runs = [r for r in runs_with_recovery if r[\"model\"] == model]\n", + " n_model = len(model_runs)\n", + " model_usage[model] = {}\n", + " for strategy in all_strategies:\n", + " n_used = sum(1 for r in model_runs if r[\"recovery_strategies\"].get(strategy, 0) == 1)\n", + " model_usage[model][strategy] = (n_used / n_model) * 100 if n_model > 0 else 0\n", + "\n", + "# Create DataFrame\n", + "df_heatmap = pd.DataFrame(model_usage).T\n", + "df_heatmap.columns = all_strategies\n", + "\n", + "# Reorder columns by overall usage and use short model names\n", + "df_heatmap = df_heatmap[sorted_strategies]\n", + "df_heatmap.index = [m.split(\"/\")[-1] for m in df_heatmap.index]\n", + "\n", + "# Add overall row\n", + "overall_row = pd.DataFrame({s: [overall_usage[s]] for s in sorted_strategies}, index=[\"OVERALL\"])\n", + "df_heatmap = pd.concat([df_heatmap, overall_row])\n", + "\n", + "# Create heatmap\n", + "fig, ax = plt.subplots(figsize=(16, 8))\n", + "\n", + "# Blue colormap (white to gold/orange)\n", + "cmap = sns.light_palette(\"steelblue\", as_cmap=True)\n", + "\n", + "# Create heatmap\n", + "sns.heatmap(df_heatmap, annot=True, fmt=\".1f\", cmap=cmap, \n", + " linewidths=0.5, linecolor=\"white\",\n", + " cbar_kws={\"label\": \"Usage Rate (%)\", \"shrink\": 0.8},\n", + " ax=ax, vmin=0, vmax=df_heatmap.values.max())\n", + "\n", + "# Formatting\n", + "ax.set_xlabel(\"Recovery Strategy\", fontsize=12)\n", + "ax.set_ylabel(\"Model\", fontsize=12)\n", + "ax.set_title(f\"Recovery Strategy Usage Rates by Model\\n(n = {total_runs} runs with at least one recovery strategy)\", fontsize=14)\n", + "\n", + "# Rotate x-axis labels\n", + "plt.xticks(rotation=45, ha=\"right\", fontsize=9)\n", + "plt.yticks(fontsize=10)\n", + "\n", + "# Add horizontal line to separate OVERALL row\n", + "ax.axhline(y=len(models), color=\"black\", linewidth=2)\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "# Print summary\n", + "print(\"\\n\" + \"=\" * 60)\n", + "print(\"TOP 5 MOST USED STRATEGIES (Overall)\")\n", + "print(\"=\" * 60)\n", + "for i, strategy in enumerate(sorted_strategies[:5], 1):\n", + " print(f\" {i}. {strategy}: {overall_usage[strategy]:.1f}%\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ze2mj9ukar", + "metadata": {}, + "outputs": [], + "source": [ + "# Error Prevalence Rates (Heatmap by Model) — MERGED CATEGORIES\n", + "# Percentage of runs where each merged error category was observed\n", + "# Uses the same 6-category merging scheme defined earlier in the notebook\n", + "\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import seaborn as sns\n", + "import json\n", + "\n", + "# Load flattened data\n", + "with open('analysis_preprocessed_for_quantitative_evaluation.json') as f:\n", + " all_runs = json.load(f)\n", + "\n", + "print(f\"Total runs: {len(all_runs)}\")\n", + "\n", + "# === MERGED ERROR CATEGORIES (6 groups) ===\n", + "# Matching the merging scheme used elsewhere in this notebook:\n", + "# merr_endpoint_selection = tue_endpoint_selection\n", + "# merr_parameter_errors = tue_parameter_misuse | he_parameter_hallucination\n", + "# merr_execution_errors = tue_format_errors | tue_code_errors\n", + "# merr_hallucination = he_outcome | he_state | he_action | he_context | he_capability | he_other\n", + "# merr_reasoning = 16 reasoning error types (excl incomplete/premature)\n", + "# merr_incomplete_execution = re_incomplete_execution_error | re_premature_termination_error\n", + "\n", + "def get_merged_errors(run):\n", + " \"\"\"Apply the 6-category merging scheme.\"\"\"\n", + " errors = {}\n", + " \n", + " tue = run.get('tool_use_errors', {})\n", + " he = run.get('hallucination_errors', {})\n", + " re = run.get('reasoning_errors', {})\n", + " \n", + " # 1. Endpoint Selection: direct mapping\n", + " errors['endpoint_selection'] = tue.get('endpoint_selection', 0)\n", + " \n", + " # 2. Parameter Errors: parameter_misuse OR parameter_hallucination\n", + " errors['parameter_errors'] = 1 if (\n", + " tue.get('parameter_misuse', 0) == 1 or \n", + " he.get('parameter_hallucination', 0) == 1\n", + " ) else 0\n", + " \n", + " # 3. Execution Errors: format_errors OR code_errors\n", + " errors['execution_errors'] = 1 if (\n", + " tue.get('format_errors', 0) == 1 or \n", + " tue.get('code_errors', 0) == 1\n", + " ) else 0\n", + " \n", + " # 4. Hallucination: 6 types (excludes parameter_hallucination which is in parameter_errors)\n", + " errors['hallucination'] = 1 if any([\n", + " he.get('outcome_hallucination', 0) == 1,\n", + " he.get('state_hallucination', 0) == 1,\n", + " he.get('action_hallucination', 0) == 1,\n", + " he.get('context_hallucination', 0) == 1,\n", + " he.get('capability_hallucination', 0) == 1,\n", + " he.get('other_hallucination', 0) == 1,\n", + " ]) else 0\n", + " \n", + " # 5. Reasoning Failures: 16 reasoning error types (excludes incomplete/premature)\n", + " reasoning_keys = [\n", + " 'assumption_error', 'state_tracking_error', 'confirmation_bias',\n", + " 'goal_misalignment_error', 'reasoning_action_mismatch', 'dependency_ordering_error',\n", + " 'causal_reasoning_error', 'instruction_fidelity_error', 'infinite_loop_error',\n", + " 'reference_resolution_error', 'time_orientation_error', 'negation_error',\n", + " 'scope_generalization_error', 'quantitative_reasoning_error', 'logical_fallacy',\n", + " 'other_reasoning_error'\n", + " ]\n", + " errors['reasoning'] = 1 if any(re.get(k, 0) == 1 for k in reasoning_keys) else 0\n", + " \n", + " # 6. Incomplete Execution: incomplete_execution OR premature_termination (combined)\n", + " errors['incomplete_execution'] = 1 if (\n", + " re.get('incomplete_execution_error', 0) == 1 or \n", + " re.get('premature_termination_error', 0) == 1\n", + " ) else 0\n", + " \n", + " return errors\n", + "\n", + "# Build rows\n", + "rows = []\n", + "for run in all_runs:\n", + " model = run['model'].split('/')[-1]\n", + " errors = get_merged_errors(run)\n", + " errors['model'] = model\n", + " rows.append(errors)\n", + "\n", + "df_errors = pd.DataFrame(rows)\n", + "\n", + "# Merged categories (6 total, sorted alphabetically)\n", + "merged_cats = {\n", + " 'endpoint_selection': 'Endpoint Selection',\n", + " 'execution_errors': 'Execution Errors',\n", + " 'hallucination': 'Hallucination',\n", + " 'incomplete_execution': 'Incomplete Execution',\n", + " 'parameter_errors': 'Parameter Errors',\n", + " 'reasoning': 'Reasoning Failures',\n", + "}\n", + "error_cols = list(merged_cats.keys())\n", + "\n", + "# Compute prevalence by model (percentage of runs)\n", + "models = sorted(df_errors['model'].unique())\n", + "model_prevalence = {}\n", + "\n", + "for model in models:\n", + " model_runs = df_errors[df_errors['model'] == model]\n", + " n_model = len(model_runs)\n", + " model_prevalence[model] = {}\n", + " for error in error_cols:\n", + " n_with_error = (model_runs[error] == 1).sum()\n", + " model_prevalence[model][error] = (n_with_error / n_model) * 100 if n_model > 0 else 0\n", + "\n", + "# Create DataFrame\n", + "df_heatmap = pd.DataFrame(model_prevalence).T\n", + "df_heatmap = df_heatmap[error_cols]\n", + "\n", + "# Compute overall prevalence\n", + "overall_prevalence = {}\n", + "total_runs = len(df_errors)\n", + "for error in error_cols:\n", + " n_with_error = (df_errors[error] == 1).sum()\n", + " overall_prevalence[error] = (n_with_error / total_runs) * 100\n", + "\n", + "# Add overall row\n", + "overall_row = pd.DataFrame({e: [overall_prevalence[e]] for e in error_cols}, index=[\"OVERALL\"])\n", + "df_heatmap = pd.concat([df_heatmap, overall_row])\n", + "\n", + "# Create heatmap\n", + "fig, ax = plt.subplots(figsize=(12, 7))\n", + "\n", + "# Red colormap (white to firebrick red)\n", + "cmap = sns.light_palette(\"firebrick\", as_cmap=True)\n", + "\n", + "# Create heatmap with merged category labels\n", + "sns.heatmap(df_heatmap, annot=True, fmt=\".1f\", cmap=cmap, \n", + " linewidths=0.5, linecolor=\"white\",\n", + " xticklabels=[merged_cats[c] for c in error_cols],\n", + " cbar_kws={\"label\": \"Error Prevalence (%)\", \"shrink\": 0.8},\n", + " ax=ax, vmin=0, vmax=df_heatmap.values.max())\n", + "\n", + "# Formatting\n", + "ax.set_xlabel(\"Error Category (Merged)\", fontsize=12)\n", + "ax.set_ylabel(\"Model\", fontsize=12)\n", + "ax.set_title(f\"Error Prevalence by Model — Merged Categories (% of runs)\\n(n = {total_runs} runs across 6 merged error categories)\", fontsize=14)\n", + "\n", + "# Rotate x-axis labels\n", + "plt.xticks(rotation=45, ha=\"right\", fontsize=9)\n", + "plt.yticks(fontsize=10)\n", + "\n", + "# Add horizontal line to separate OVERALL row\n", + "ax.axhline(y=len(models), color=\"black\", linewidth=2)\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "# Print summary\n", + "print(\"\\n\" + \"=\" * 70)\n", + "print(\"MERGED ERROR CATEGORY DEFINITIONS (6 categories):\")\n", + "print(\"=\" * 70)\n", + "print(\" endpoint_selection <- tue_endpoint_selection\")\n", + "print(\" parameter_errors <- tue_parameter_misuse | he_parameter_hallucination\")\n", + "print(\" execution_errors <- tue_format_errors | tue_code_errors\")\n", + "print(\" hallucination <- he_outcome | he_state | he_action | he_context |\")\n", + "print(\" he_capability | he_other (excludes param_halluc)\")\n", + "print(\" reasoning <- 16 reasoning error types (excl incomplete/premature)\")\n", + "print(\" incomplete_execution <- re_incomplete_execution | re_premature_termination\")\n", + "\n", + "print(\"\\n\" + \"=\" * 70)\n", + "print(\"ERROR PREVALENCE BY CATEGORY (Overall)\")\n", + "print(\"=\" * 70)\n", + "for error in sorted(error_cols, key=lambda x: overall_prevalence[x], reverse=True):\n", + " print(f\" {merged_cats[error]:25s}: {overall_prevalence[error]:.1f}%\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/experiments/kdd 2026/qualitative_analysis/qualitative_data_extraction.ipynb b/experiments/kdd 2026/qualitative_analysis/qualitative_data_extraction.ipynb new file mode 100644 index 0000000..cb7c260 --- /dev/null +++ b/experiments/kdd 2026/qualitative_analysis/qualitative_data_extraction.ipynb @@ -0,0 +1,2304 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "GOPnafqbGV-Y" + }, + "source": [ + "# Import Libraries and Files for Analysis" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 4447, + "status": "ok", + "timestamp": 1768560999430, + "user": { + "displayName": "Hubert Pyskło", + "userId": "16424235253540376255" + }, + "user_tz": -330 + }, + "id": "W76Uv3xbJofP", + "outputId": "0949c6c7-b7fe-4264-fbfb-b7a9c45a948a" + }, + "outputs": [], + "source": [ + "%pip install -q langchain langchain-openai" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 105 + }, + "executionInfo": { + "elapsed": 4646, + "status": "ok", + "timestamp": 1768560960955, + "user": { + "displayName": "Hubert Pyskło", + "userId": "16424235253540376255" + }, + "user_tz": -330 + }, + "id": "tnDYZEjhFnZK", + "outputId": "e485d3f4-54f3-4e59-834d-c887bd96f2ce" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'\\nCurrent format of evaluation results (each item in the results array):\\n{\\n # Test identification\\n \"test_id\": \"e4494bce-7101-5ec5-b757-f90f57c53690\", # UUID, constant across runs\\n \"test_name\": \"Update channel topic\", # Human-readable name\\n \"test_suite_name\": \"Slack Bench v2\", # Test suite name\\n \"service\": \"slack\", # Service: slack, box, calendar, linear\\n \\n # Run identification\\n \"runId\": \"5003bf1b-72b8-4f6d-8708-430d13d01b11\", # Unique run UUID\\n \"run_index\": 0, # Which run (0, 1, 2...) for runs_per_test > 1\\n \"model\": \"moonshotai/kimi-k2-0905\", # Model identifier\\n \"timestamp\": \"2026-02-02T16:22:44.060562\", # ISO timestamp\\n \\n # Task\\n \"prompt\": \"Change the #general channel topic to...\", # Task prompt\\n \"include_api_docs\": false, # Whether API docs were in system prompt\\n \\n # Results\\n \"status\": \"passed\", # \"passed\", \"failed\", \"timeout\", \"error\"\\n \"passed\": true, # Boolean pass/fail\\n \"score\": 100.0, # Score 0-100\\n \"time\": 15.68, # Execution time in seconds\\n \"failures\": [], # List of failure messages (if any)\\n \\n # Execution trace\\n \"trace\": [...] # Full execution trace (tool calls, responses, errors)\\n}\\n'" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from pathlib import Path\n", + "import json, os, glob\n", + "import random\n", + "import time\n", + "\n", + "# from google.colab import drive\n", + "# from google.colab import userdata\n", + "# drive.mount('/content/drive')\n", + "\n", + "from collections import defaultdict\n", + "from datetime import datetime\n", + "from concurrent.futures import ThreadPoolExecutor, as_completed\n", + "\n", + "from pydantic import BaseModel, Field\n", + "from typing import Literal, List, Dict, Any, Optional\n", + "from enum import Enum\n", + "from pprint import pprint\n", + "\n", + "from langchain.agents import create_agent\n", + "from langchain.agents.structured_output import ToolStrategy\n", + "from langchain_openai import ChatOpenAI\n", + "from langchain_core.messages import BaseMessage\n", + "\n", + "import os\n", + "from dotenv import load_dotenv\n", + "load_dotenv()\n", + "\n", + "from utils.create_tests_metadata import get_or_create_tests_metadata\n", + "from utils.clean_server_errors import get_or_create_cleaned_results\n", + "\n", + "# ============================================\n", + "# Robust OpenRouter Wrapper with Retry Logic\n", + "# ============================================\n", + "class RobustChatOpenAI(ChatOpenAI):\n", + " \"\"\"\n", + " A wrapper around ChatOpenAI that adds robust retry logic for OpenRouter API calls.\n", + " \n", + " Handles transient failures (502, 503, 429, etc.) with exponential backoff.\n", + " Maintains full compatibility with LangChain's ChatOpenAI interface.\n", + " \"\"\"\n", + " \n", + " max_retries: int | None = 3\n", + " base_delay: float = 2.0\n", + " retryable_status_codes: tuple = (400, 429, 500, 502, 503, 504)\n", + " \n", + " def _should_retry(self, exception: Exception) -> bool:\n", + " \"\"\"Determine if the exception is retryable.\"\"\"\n", + " import httpx\n", + " from openai import APIStatusError, APIConnectionError, APITimeoutError\n", + " \n", + " # OpenAI SDK exceptions (used by langchain_openai)\n", + " if isinstance(exception, APIConnectionError):\n", + " return True\n", + " if isinstance(exception, APITimeoutError):\n", + " return True\n", + " if isinstance(exception, APIStatusError):\n", + " return exception.status_code in self.retryable_status_codes\n", + " \n", + " # httpx exceptions (fallback)\n", + " if isinstance(exception, (httpx.ConnectError, httpx.ReadError, httpx.RemoteProtocolError)):\n", + " return True\n", + " if isinstance(exception, httpx.HTTPStatusError):\n", + " return exception.response.status_code in self.retryable_status_codes\n", + " \n", + " return False\n", + " \n", + " def _retry_with_backoff(self, func, *args, **kwargs):\n", + " \"\"\"Execute function with retry logic and exponential backoff.\"\"\"\n", + " last_error = None\n", + " n = self.max_retries if self.max_retries is not None else 3\n", + "\n", + " for attempt in range(n):\n", + " try:\n", + " return func(*args, **kwargs)\n", + " except Exception as e:\n", + " last_error = e\n", + " \n", + " if self._should_retry(e) and attempt < n - 1:\n", + " delay = self.base_delay * (2 ** attempt) + random.uniform(0, 1)\n", + " print(f\"[RETRY] OpenRouter request failed (attempt {attempt + 1}/{n}): {e}. Retrying in {delay:.1f}s...\")\n", + " time.sleep(delay)\n", + " continue\n", + " raise\n", + " \n", + " raise last_error\n", + " \n", + " def invoke(self, input, config=None, **kwargs):\n", + " \"\"\"Override invoke with retry logic.\"\"\"\n", + " return self._retry_with_backoff(super().invoke, input, config, **kwargs)\n", + " \n", + " def generate(self, messages: List[List[BaseMessage]], stop: Optional[List[str]] = None, **kwargs):\n", + " \"\"\"Override generate with retry logic.\"\"\"\n", + " return self._retry_with_backoff(super().generate, messages, stop, **kwargs)\n", + " \n", + " def _generate(self, messages: List[BaseMessage], stop: Optional[List[str]] = None, **kwargs):\n", + " \"\"\"Override _generate with retry logic.\"\"\"\n", + " return self._retry_with_backoff(super()._generate, messages, stop, **kwargs)\n", + "\n", + "\n", + "\"\"\"\n", + "Current format of evaluation results (each item in the results array):\n", + "{\n", + " # Test identification\n", + " \"test_id\": \"e4494bce-7101-5ec5-b757-f90f57c53690\", # UUID, constant across runs\n", + " \"test_name\": \"Update channel topic\", # Human-readable name\n", + " \"test_suite_name\": \"Slack Bench v2\", # Test suite name\n", + " \"service\": \"slack\", # Service: slack, box, calendar, linear\n", + " \n", + " # Run identification\n", + " \"runId\": \"5003bf1b-72b8-4f6d-8708-430d13d01b11\", # Unique run UUID\n", + " \"run_index\": 0, # Which run (0, 1, 2...) for runs_per_test > 1\n", + " \"model\": \"moonshotai/kimi-k2-0905\", # Model identifier\n", + " \"timestamp\": \"2026-02-02T16:22:44.060562\", # ISO timestamp\n", + " \n", + " # Task\n", + " \"prompt\": \"Change the #general channel topic to...\", # Task prompt\n", + " \"include_api_docs\": false, # Whether API docs were in system prompt\n", + " \n", + " # Results\n", + " \"status\": \"passed\", # \"passed\", \"failed\", \"timeout\", \"error\"\n", + " \"passed\": true, # Boolean pass/fail\n", + " \"score\": 100.0, # Score 0-100\n", + " \"time\": 15.68, # Execution time in seconds\n", + " \"failures\": [], # List of failure messages (if any)\n", + " \n", + " # Execution trace\n", + " \"trace\": [...] # Full execution trace (tool calls, responses, errors)\n", + "}\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Import all test suites and runs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading existing cleaned results from: cleaned_preprocessed_merged_results_20260207_165600.json\n", + "Loaded 13516 cleaned runs\n", + "Working with 13516 cleaned runs\n", + "Loaded existing tests metadata with 224 tests\n", + "Loaded metadata for 224 tests\n" + ] + } + ], + "source": [ + "# Import merged results, clean server errors, and load tests metadata\n", + "\n", + "MERGED_RESULTS_FILE = \"preprocessed_merged_results.json\"\n", + "\n", + "# Get or create cleaned results (removes runs with server errors)\n", + "runs, cleaned_filepath = get_or_create_cleaned_results(MERGED_RESULTS_FILE)\n", + "print(f\"Working with {len(runs)} cleaned runs\")\n", + "\n", + "# Get or create tests metadata (maps runtime_test_id -> test info)\n", + "tests_metadata = get_or_create_tests_metadata(\n", + " merged_results_path=MERGED_RESULTS_FILE,\n", + " test_suites_folder=\"test_suites\",\n", + " output_folder=\"tests_metadata\"\n", + ")\n", + "\n", + "print(f\"Loaded metadata for {len(tests_metadata)} tests\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Original runs: 13516\n", + "Skipped (all_docs): 6033\n", + "Total (test_id, model) groups: 2004\n", + "Missing 'none' doc runs: 16\n", + "Missing 'relevant' doc runs: 29\n", + "Sampled runs: 3963\n", + "\n", + "============================================================\n", + "VERIFICATION: Counts per model per doc level\n", + "============================================================\n", + " anthropic/claude-haiku-4.5: none=222, relevant=222 [OK]\n", + " deepseek/deepseek-v3.2: none=220, relevant=220 [OK]\n", + " google/gemini-3-flash-preview: none=222, relevant=222 [OK]\n", + " meta-llama/llama-4-scout: none=217, relevant=208 [IMBALANCED]\n", + " mistralai/devstral-2512: none=222, relevant=222 [OK]\n", + " moonshotai/kimi-k2-0905: none=221, relevant=218 [IMBALANCED]\n", + " openai/gpt-oss-120b: none=220, relevant=223 [IMBALANCED]\n", + " qwen/qwen3-vl-235b-a22b-instruct: none=222, relevant=221 [IMBALANCED]\n", + " x-ai/grok-4.1-fast: none=222, relevant=219 [IMBALANCED]\n", + "\n", + "All models balanced: False\n" + ] + } + ], + "source": [ + "def sample_runs_by_model_test_stratified(runs, seed=42):\n", + " \"\"\"\n", + " Sample 2 runs per (test_id, model) group from the full dataset:\n", + " - 1 run with no documentation (include_api_docs=False)\n", + " - 1 run with relevant documentation only (include_api_docs=True, include_all_api_docs=False)\n", + " \n", + " Excludes runs with all documentation (include_all_api_docs=True).\n", + " \n", + " Args:\n", + " runs: List of run dictionaries\n", + " seed: Random seed for reproducibility\n", + " \n", + " Returns:\n", + " Tuple of (sampled_runs, stats_dict)\n", + " \"\"\"\n", + " random.seed(seed)\n", + " \n", + " # Group runs by (test_id, model, doc_level)\n", + " groups = defaultdict(lambda: {\"none\": [], \"relevant\": []})\n", + " skipped_all_docs = 0\n", + " \n", + " for run in runs:\n", + " # Skip runs with all documentation\n", + " if run.get(\"include_all_api_docs\"):\n", + " skipped_all_docs += 1\n", + " continue\n", + " \n", + " key = (run[\"test_id\"], run[\"model\"])\n", + " if run.get(\"include_api_docs\"):\n", + " groups[key][\"relevant\"].append(run)\n", + " else:\n", + " groups[key][\"none\"].append(run)\n", + " \n", + " # Sample 1 from each doc level per (test_id, model)\n", + " sampled_runs = []\n", + " missing = {\"none\": [], \"relevant\": []} # Track which (test_id, model) are missing\n", + " \n", + " for key, doc_groups in groups.items():\n", + " for doc_level in [\"none\", \"relevant\"]:\n", + " if doc_groups[doc_level]:\n", + " selected_run = random.choice(doc_groups[doc_level])\n", + " sampled_runs.append(selected_run)\n", + " else:\n", + " missing[doc_level].append(key)\n", + " \n", + " stats = {\n", + " \"skipped_all_docs\": skipped_all_docs,\n", + " \"total_groups\": len(groups),\n", + " \"missing_none\": len(missing[\"none\"]),\n", + " \"missing_relevant\": len(missing[\"relevant\"]),\n", + " \"sampled_runs\": len(sampled_runs)\n", + " }\n", + " \n", + " return sampled_runs, stats\n", + "\n", + "\n", + "# Apply sampling\n", + "sampled_runs, stats = sample_runs_by_model_test_stratified(runs)\n", + "print(f\"Original runs: {len(runs)}\")\n", + "print(f\"Skipped (all_docs): {stats['skipped_all_docs']}\")\n", + "print(f\"Total (test_id, model) groups: {stats['total_groups']}\")\n", + "print(f\"Missing 'none' doc runs: {stats['missing_none']}\")\n", + "print(f\"Missing 'relevant' doc runs: {stats['missing_relevant']}\")\n", + "print(f\"Sampled runs: {stats['sampled_runs']}\")\n", + "\n", + "# Verification: counts per model per doc level\n", + "print(\"\\n\" + \"=\"*60)\n", + "print(\"VERIFICATION: Counts per model per doc level\")\n", + "print(\"=\"*60)\n", + "doc_by_model = defaultdict(lambda: {\"none\": 0, \"relevant\": 0})\n", + "for run in sampled_runs:\n", + " model = run[\"model\"]\n", + " if run.get(\"include_api_docs\"):\n", + " doc_by_model[model][\"relevant\"] += 1\n", + " else:\n", + " doc_by_model[model][\"none\"] += 1\n", + "\n", + "all_balanced = True\n", + "for model, counts in sorted(doc_by_model.items()):\n", + " balanced = \"OK\" if counts[\"none\"] == counts[\"relevant\"] else \"IMBALANCED\"\n", + " if balanced != \"OK\":\n", + " all_balanced = False\n", + " print(f\" {model}: none={counts['none']}, relevant={counts['relevant']} [{balanced}]\")\n", + "\n", + "print(f\"\\nAll models balanced: {all_balanced}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "18\n" + ] + } + ], + "source": [ + "print(len([run for run in sampled_runs if run[\"test_id\"] == \"f1e306ca-d89a-5d70-bb57-03437eec4ea8\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Format all runs" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def format_single_run(run):\n", + " \"\"\"\n", + " Format a single run into a structured dict for qualitative analysis.\n", + " \n", + " Args:\n", + " run: Raw run dict containing test_suite_name, status, prompt, trace, etc.\n", + " \n", + " Returns:\n", + " dict with structure:\n", + " {\n", + " \"run_id\": str,\n", + " \"runtime_test_id\": str, # For mapping to tests_metadata\n", + " \"score\": int, # base_score (0-100), NOT weighted score\n", + " \"iterations\": int,\n", + " \"include_api_docs\": bool,\n", + " \"include_all_api_docs\": bool,\n", + " \"formatted_trace\": str # Human-readable trace narrative\n", + " }\n", + " \n", + " Or None if run has status \"error\".\n", + " \"\"\" \n", + " run_id = run.get(\"run_id\") # Changed from \"runId\" to \"run_id\"\n", + " runtime_test_id = run.get(\"test_id\")\n", + " status = run[\"status\"]\n", + " \n", + " if status == \"error\":\n", + " return None\n", + " \n", + " prompt = run[\"prompt\"]\n", + " \n", + " formatted_trace = \"\"\n", + " \n", + " trace_intro = f'The agent was asked to complete this task: \"{prompt}\"\\n\\n'\n", + " if status == \"passed\":\n", + " status_update = \"The agent was able to complete the task SUCCESSFULLY.\"\n", + " elif status == \"failed\":\n", + " status_update = \"The agent FAILED to complete the task.\"\n", + " else: # status == \"terminated\" \n", + " status_update = \"The agent FAILED to complete the task. The agent was not able to complete it within the designated time interval, which led to an automatic failure.\"\n", + " \n", + " formatted_trace += trace_intro + status_update + '\\n'\n", + " \n", + " trace = run[\"trace\"]\n", + " for step in trace[\"steps\"]:\n", + " \n", + " # Check if step has any meaningful content\n", + " has_thinking = 'thinking' in step\n", + " has_action = 'action' in step\n", + " has_stdout = 'observation' in step and step['observation'].get('stdout')\n", + " has_stderr = ('observation' in step and \n", + " step['observation'].get('stderr') and \n", + " not step['observation'].get('stderr', '').strip().startswith('% Total'))\n", + " \n", + " if not has_thinking and not has_action and not has_stdout and not has_stderr:\n", + " formatted_trace += f\"Nothing has happened during iteration # {step['iteration']}.\\n\\n\"\n", + " \n", + " else:\n", + " iteration_num = step['iteration']\n", + " intro = f\"This is what happened during iteration #{iteration_num}:\\n\"\n", + " thinking = f\"\\t- This was the agent's reasoning during iteration #{iteration_num}: {step['thinking']}\\n\" if 'thinking' in step else \"\"\n", + " action = f\"\\t- This was the agent's action(s) during iteration #{iteration_num}: {step['action']}\\n\" if 'action' in step else \"\"\n", + " \n", + " if \"result\" not in step or len(step[\"result\"]) == 0:\n", + " result = \"\"\n", + " else:\n", + " result = f\"\\t- This resulted in this stdout output: {step['observation']['stdout']}\\n\"\n", + " # Include stderr if present and meaningful (not curl progress output)\n", + " stderr = step['observation'].get('stderr', '')\n", + " if stderr and not stderr.strip().startswith('% Total'):\n", + " result += f\"\\t- This also produced stderr output: {stderr}\\n\"\n", + " \n", + " formatted_trace += intro + thinking + action + result + '\\n'\n", + " \n", + " \n", + " final_iteration = trace[\"final\"]\n", + " \n", + " if final_iteration:\n", + " formatted_trace += f\"Iteration #{final_iteration['iteration']} was the final iteration.\"\n", + " \n", + " if ('iteration' not in final_iteration and \n", + " 'summary' not in final_iteration):\n", + " formatted_trace += \"Nothing happened during the final iteration.\\n\\n\"\n", + " else:\n", + " formatted_trace += \"This is what happened during the final iteration:\\n\"\n", + " final_thinking = f\"\\t- The agent produced such reasoning: {final_iteration['thinking']}\\n\" if 'thinking' in final_iteration else \"\"\n", + " summary = f\"\\t- The reasoning was followed by this summary: {final_iteration['summary']}\\n\\n\" if 'summary' in final_iteration else \"\"\n", + " \n", + " formatted_trace += final_thinking + summary\n", + " \n", + " include_all_api_docs = run.get(\"include_all_api_docs\", False)\n", + " \n", + " formatted_run = {\n", + " \"run_id\": run_id,\n", + " \"runtime_test_id\": runtime_test_id,\n", + " \"score\": run[\"base_score\"], # Changed from \"score\" - use base_score (0-100)\n", + " \"iterations\": trace[\"iterations\"],\n", + " \"include_api_docs\": run[\"include_api_docs\"],\n", + " \"include_all_api_docs\": include_all_api_docs,\n", + " \"formatted_trace\": formatted_trace\n", + " }\n", + " \n", + " return formatted_run" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "executionInfo": { + "elapsed": 52, + "status": "ok", + "timestamp": 1768563670214, + "user": { + "displayName": "Hubert Pyskło", + "userId": "16424235253540376255" + }, + "user_tz": -330 + }, + "id": "HbitvMNAWFTo" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved 3963 formatted runs to: /Users/azh/agent-diff/local_analysis/formatted_runs/all_runs_formatted_20260208_163423.json\n" + ] + } + ], + "source": [ + "# Format all runs and store it in a separate file\n", + "formatted_runs = [format_single_run(run) for run in sampled_runs]\n", + "formatted_runs = [r for r in formatted_runs if r is not None]\n", + "\n", + "# Create folder if needed\n", + "output_folder = os.path.join(os.getcwd(), \"formatted_runs\")\n", + "os.makedirs(output_folder, exist_ok=True)\n", + "\n", + "# Save with timestamp\n", + "timestamp = datetime.now().strftime(\"%Y%m%d_%H%M%S\")\n", + "filepath = os.path.join(output_folder, f\"all_runs_formatted_{timestamp}.json\")\n", + "\n", + "with open(filepath, 'w') as f:\n", + " json.dump(formatted_runs, f, indent=2)\n", + "\n", + "print(f\"Saved {len(formatted_runs)} formatted runs to: {filepath}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "18\n" + ] + } + ], + "source": [ + "print(len([run for run in formatted_runs if run[\"runtime_test_id\"] == \"f1e306ca-d89a-5d70-bb57-03437eec4ea8\"]))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "RunAnalysisSchema = {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"tool_use_errors\": {\n", + " \"type\": \"object\",\n", + " \"description\": \"Errors related to how the agent interacts with tools and APIs.\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"endpoint_selection\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if there are any incorrect or irrelevant endpoint choices.\"},\n", + " \"explanation\": {\"type\": \"string\", \"description\": \"Brief summary of the issue (or why none were found).\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"One concrete example from the trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"explanation\", \"example\"]\n", + " },\n", + " \"parameter_misuse\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent uses wrong parameter names, wrong data types, wrong structure (missing required keys, extra nesting), uses a field not accepted by the tool, OR maps data to the wrong field when a more appropriate field exists.\"},\n", + " \"explanation\": {\"type\": \"string\", \"description\": \"Brief summary of the issue (or why none were found).\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"One concrete example from the trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"explanation\", \"example\"]\n", + " },\n", + " \"format_errors\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent produces unparseable or malformed tool output: invalid JSON, truncation, or mixing natural language into machine-readable payloads.\"},\n", + " \"explanation\": {\"type\": \"string\", \"description\": \"Brief summary of the issue (or why none were found).\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"One concrete example from the trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"explanation\", \"example\"]\n", + " },\n", + " \"code_errors\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if valid tool calls fail during execution: Bash syntax errors, runtime exceptions (NameError, ImportError), logic bugs, or environment misconceptions.\"},\n", + " \"explanation\": {\"type\": \"string\", \"description\": \"Brief summary of the issue (or why none were found).\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"One concrete example from the trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"explanation\", \"example\"]\n", + " }\n", + " },\n", + " \"required\": [\"endpoint_selection\", \"parameter_misuse\", \"format_errors\", \"code_errors\"]\n", + " },\n", + " \"model_refusal\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent refuses to act, asks user for info it could retrieve, OR delegates execution back to user by providing recommendations instead of performing actions itself (passive summary instead of active task completion).\"},\n", + " \"explanation\": {\"type\": \"string\", \"description\": \"Brief summary of the refusal (or why none were found).\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"One concrete example from the trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"explanation\", \"example\"]\n", + " },\n", + " \n", + " \"hallucination_errors\": {\n", + " \"type\": \"object\",\n", + " \"description\": \"Hallucination errors where the agent fabricates or asserts invented information as truth. Distinct from reasoning errors (logic failures) and assumption errors (guessing without checking).\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"parameter_hallucination\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent asserts invented parameter values (IDs, names, timestamps, URLs, file IDs) as truth, not grounded in trace or user input.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"outcome_hallucination\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent falsely claims task completion or success despite evidence showing it was not completed.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"state_hallucination\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent fabricates/invents state that doesn't exist (e.g., 'the file was created' when it wasn't, 'the user exists' without checking). Distinct from state_tracking_error which is forgetting.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"action_hallucination\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent claims to have performed an action (read file, made API call, executed command) that doesn't appear in the trace. Fabricating execution of steps.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"capability_hallucination\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent believes a tool/API can do something it cannot, or invents non-existent tool capabilities/endpoints.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"context_hallucination\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent references information not present in trace, prompt, or API responses, asserting invented context as truth.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"other_hallucination\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if there is a hallucination not covered by other categories.\"},\n", + " \"explanation\": {\"type\": \"string\", \"description\": \"Description of the hallucination type (or 'N/A' if none).\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"explanation\", \"example\"]\n", + " }\n", + " },\n", + " \"required\": [\"parameter_hallucination\", \"outcome_hallucination\", \"state_hallucination\", \"action_hallucination\", \"capability_hallucination\", \"context_hallucination\", \"other_hallucination\"]\n", + " },\n", + " \"reasoning_errors\": {\n", + " \"type\": \"object\",\n", + " \"description\": \"Reasoning errors involving logic failures, memory issues, or flawed inference. Distinct from hallucinations (fabricating facts) - reasoning errors are about HOW the agent thinks, not inventing information.\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"time_orientation_error\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent confused past/future events, made date/time calculation errors, had timezone issues, or misunderstood 'now' vs scheduled times.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"state_tracking_error\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent FORGOT previous actions, failed to update understanding after new information, or repeated already-completed actions (memory failure). Distinct from state_hallucination which is FABRICATING state.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"goal_misalignment_error\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent solved wrong problem, missed implicit requirements, over/under-interpreted intent, optimized for wrong goal, OR understood an explicit requirement but deprioritized/ignored it (e.g., knew batching was required but chose individual calls anyway).\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"causal_reasoning_error\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent misattributed failure cause, reversed cause/effect, or missed causal steps.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"confirmation_bias\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent ignored contradictory error messages, persisted with failing approach despite clear feedback, or selectively interpreted results.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"logical_fallacy\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent used false dichotomy (only 2 options when more exist), circular reasoning, or non sequitur conclusions (action doesn't follow from evidence).\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"assumption_error\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent GUESSED defaults, user preferences, or API behavior WITHOUT CHECKING. Distinct from hallucination which is asserting invented facts as known truth.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"negation_error\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent inverted boolean conditions, misunderstood not/except/exclude, or did the opposite of requested.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"scope_generalization_error\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent over-generalized from specific instructions, was too literal (missing spirit of request), or applied patterns from unrelated contexts.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"dependency_ordering_error\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent performed actions in wrong SEQUENCE (e.g., tried to use result before fetching it, called API before authentication). About ordering, NOT about missing steps.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"incomplete_execution_error\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent understood and planned required subtasks but failed to attempt some of them entirely (never tried). About OMISSION of steps, not wrong ordering.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"premature_termination_error\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent stops execution and concludes the task before completing all required steps, without recognizing that more work remains. Distinct from incomplete_execution (planned but didn't attempt) - this is stopping early without awareness of remaining work.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"quantitative_reasoning_error\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent made off-by-one errors, unit/scale confusion, incorrect aggregation (sum vs count), OR incorrect sorting/ordering of data (e.g., skipped items, wrong alphabetical order).\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"reference_resolution_error\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent misunderstood it/this/that references, confused similar entities, or lost track of objects.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"instruction_fidelity_error\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent deviated from explicit instructions by modifying content that should be preserved verbatim (e.g., changing punctuation like em-dash to hyphen, rewording text) OR adding unrequested embellishments/formatting (e.g., numbering, introductions, author attributions, extra metadata) when literal execution was required.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"reasoning_action_mismatch\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent's explicit reasoning/plan contradicts the action it actually executes. The agent 'knows' or states the correct approach but then does something different (e.g., reasons 'should use rich_text_section' but then uses 'text' type).\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"other_reasoning_error\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if there is a reasoning error not covered by other categories.\"},\n", + " \"explanation\": {\"type\": \"string\", \"description\": \"Description of the reasoning error type (or 'N/A' if none).\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"explanation\", \"example\"]\n", + " },\n", + " \"infinite_loop_error\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent gets stuck in pathological loop, repeating identical or near-identical reasoning and actions across multiple iterations without making progress or attempting meaningfully different approaches.\"},\n", + " \"explanation\": {\"type\": \"string\", \"description\": \"Brief summary of the loop behavior (or why none were found).\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"One concrete example from the trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"explanation\", \"example\"]\n", + " }\n", + " },\n", + " \"required\": [\"time_orientation_error\", \"state_tracking_error\", \"goal_misalignment_error\", \"causal_reasoning_error\", \"confirmation_bias\", \"logical_fallacy\", \"assumption_error\", \"negation_error\", \"scope_generalization_error\", \"dependency_ordering_error\", \"incomplete_execution_error\", \"premature_termination_error\", \"quantitative_reasoning_error\", \"reference_resolution_error\", \"instruction_fidelity_error\", \"reasoning_action_mismatch\", \"other_reasoning_error\", \"infinite_loop_error\"]\n", + " },\n", + " \"recovery_strategies\": {\n", + " \"type\": \"object\",\n", + " \"description\": \"Recovery strategies the agent attempted. Evaluate each category explicitly.\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"retry_same\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent retried the exact same action unchanged, hoping for different result.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"retry_modified_params\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent retried with adjusted parameters (different ID, format, value).\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"switch_tool\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent switched to a different tool/endpoint to achieve the same goal.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"lookup_correct_value\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent searched or queried to find the correct ID/name/value.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"backtrack\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent returned to an earlier step to gather missing information.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"parse_error_message\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent extracted useful info from error output to inform next action.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"handle_ui_obstacle\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent handled popup, dialog, login wall, or similar UI blocker.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"change_strategy\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent abandoned current approach entirely and tried a different method.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"break_into_steps\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent decomposed a complex action into smaller sequential steps.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"verify_prerequisites\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent checked if required conditions were met before retrying.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"skip_and_continue\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent moved past a blocking item to complete other parts of task.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"wait_and_retry\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent added delay for rate limits or async operations.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"use_fallback\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent used a secondary/backup method when primary failed.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " },\n", + " \"other_recovery_strategy\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent used a recovery strategy not covered by other categories.\"},\n", + " \"explanation\": {\"type\": \"string\", \"description\": \"Description of the recovery strategy (or 'N/A' if none).\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"explanation\", \"example\"]\n", + " },\n", + " \"no_recovery_attempted\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if agent gave up immediately or got stuck in a loop without any recovery attempt.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"Concrete example from trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"example\"]\n", + " }\n", + " },\n", + " \"required\": [\"retry_same\", \"retry_modified_params\", \"switch_tool\", \"lookup_correct_value\", \"backtrack\", \"parse_error_message\", \"handle_ui_obstacle\", \"change_strategy\", \"break_into_steps\", \"verify_prerequisites\", \"skip_and_continue\", \"wait_and_retry\", \"use_fallback\", \"other_recovery_strategy\", \"no_recovery_attempted\"]\n", + " },\n", + " \"other_error\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"present\": {\"type\": \"boolean\", \"description\": \"True if there is an error that doesn't fit other categories.\"},\n", + " \"explanation\": {\"type\": \"string\", \"description\": \"Brief summary of the issue, including a proposed subcategory for this error type.\"},\n", + " \"example\": {\"type\": \"string\", \"description\": \"One concrete example from the trace (or 'N/A' if none).\"}\n", + " },\n", + " \"required\": [\"present\", \"explanation\", \"example\"]\n", + " },\n", + " \"qualitative_summary\": {\n", + " \"type\": \"object\",\n", + " \"additionalProperties\": False,\n", + " \"properties\": {\n", + " \"planning_score\": {\n", + " \"type\": \"integer\",\n", + " \"minimum\": 0,\n", + " \"maximum\": 5,\n", + " \"description\": \"Planning quality (0-5): action sequencing, adaptation to obstacles, and efficiency of approach.\"\n", + " },\n", + " \"planning_explanation\": {\n", + " \"type\": \"string\",\n", + " \"description\": \"Brief justification for the planning score, including any efficiency issues.\"\n", + " },\n", + " \"reasoning_score\": {\n", + " \"type\": \"integer\",\n", + " \"minimum\": 0,\n", + " \"maximum\": 5,\n", + " \"description\": \"Reasoning quality (0-5): correctness of inferences, use of context, and sound logic in decision-making.\"\n", + " },\n", + " \"reasoning_explanation\": {\n", + " \"type\": \"string\",\n", + " \"description\": \"Brief justification for the reasoning score, noting any flawed inferences or logic errors.\"\n", + " },\n", + " \"tool_use_score\": {\n", + " \"type\": \"integer\",\n", + " \"minimum\": 0,\n", + " \"maximum\": 5,\n", + " \"description\": \"API/tool handling quality (0-5): endpoint selection, parameter formatting, error handling, and response parsing.\"\n", + " },\n", + " \"tool_use_explanation\": {\n", + " \"type\": \"string\",\n", + " \"description\": \"Brief justification for the tool use score, noting any API misuse or parameter errors.\"\n", + " },\n", + " \"recovery_score\": {\n", + " \"type\": \"integer\",\n", + " \"minimum\": 0,\n", + " \"maximum\": 5,\n", + " \"description\": \"Recovery ability (0-5): failure detection, root cause diagnosis, and applying corrective strategies.\"\n", + " },\n", + " \"recovery_explanation\": {\n", + " \"type\": \"string\",\n", + " \"description\": \"Brief justification for the recovery score, noting recovery strategies used or missed opportunities.\"\n", + " },\n", + " \"hallucination_score\": {\n", + " \"type\": \"integer\",\n", + " \"minimum\": 0,\n", + " \"maximum\": 5,\n", + " \"description\": \"Hallucination resistance (0-5): degree to which agent avoids fabricating information, inventing facts, or asserting false claims.\"\n", + " },\n", + " \"hallucination_explanation\": {\n", + " \"type\": \"string\",\n", + " \"description\": \"Brief justification for the hallucination score, noting any fabricated information or false claims.\"\n", + " },\n", + " \"overall_description\": {\n", + " \"type\": \"string\",\n", + " \"description\": \"2-3 sentence high-level narrative of what went wrong and why, suitable for a paper's qualitative analysis section\"\n", + " },\n", + " \"key_insight\": {\n", + " \"type\": \"string\",\n", + " \"description\": \"The single most important takeaway from analyzing this run\"\n", + " },\n", + " \"model_behavior_pattern\": {\n", + " \"type\": \"string\",\n", + " \"description\": \"What does this run reveal about how the model approaches this type of task?\"\n", + " },\n", + " \"implications_for_reliability\": {\n", + " \"type\": \"string\",\n", + " \"description\": \"What does this failure reveal about model reliability/robustness?\"\n", + " },\n", + " \"worthy_example\": {\n", + " \"type\": \"boolean\",\n", + " \"description\": \"Is this run interesting enough to feature in the qualitative analysis?\"\n", + " },\n", + " \"why_worthy_example\": {\n", + " \"type\": \"string\",\n", + " \"description\": \"If worthy_example is true, explain why this example is noteworthy (or 'N/A' if not worthy)\"\n", + " }\n", + " },\n", + " \"required\": [\"planning_score\", \"planning_explanation\", \"reasoning_score\", \"reasoning_explanation\", \"tool_use_score\", \"tool_use_explanation\", \"recovery_score\", \"recovery_explanation\", \"hallucination_score\", \"hallucination_explanation\", \"overall_description\", \"key_insight\", \"model_behavior_pattern\", \"implications_for_reliability\", \"worthy_example\", \"why_worthy_example\"]\n", + " }\n", + " },\n", + " \"required\": [\n", + " \"tool_use_errors\",\n", + " \"model_refusal\",\n", + " \"hallucination_errors\",\n", + " \"reasoning_errors\",\n", + " \"recovery_strategies\",\n", + " \"other_error\",\n", + " \"qualitative_summary\"\n", + " ]\n", + "}\n", + "\n", + "\n", + "def construct_run_analysis_prompt_elements(cur_run_score, other_run_type, other_run_score):\n", + " \n", + " SYSTEM_MSG = f\"You are a helpful assistant. You are required to analyze RUN_TO_ANALYZE and compare it to {other_run_type} as a reference.\\n\"\n", + " \n", + " HUMAN_MSG_CUR_RUN = \"Here is the RUN_TO_ANALYZE:\\n\"\n", + " \n", + " if other_run_type == \"ONE_OF_THE_BEST_RUNS\":\n", + " HUMAN_MSG_OTHER_RUN = f\"NOTE: RUN_TO_ANALYZE failed in the task with the score of {cur_run_score}/100.0. Unfortunately, no agent was able to finish the required task, which indicates that the task is likely very hard. However, here is ONE_OF_THE_BEST_RUNS (use it only as a reference of what an alternative approach could look like; NOTE: ONE_OF_THE_BEST_RUNS also failed with the score of {other_run_score}/100.0):\\n\"\n", + " \n", + " elif other_run_type == \"ANOTHER_SUCCESSFUL_RUN\":\n", + " HUMAN_MSG_OTHER_RUN = f\"NOTE: RUN_TO_ANALYZE succeeded in the task with the score of 100.0/100.0. However, here is ANOTHER_ONE_OF_THE_BEST_RUNS which finished with the score of {other_run_score}/100.0 (use it only as a reference of what an alternative approach could look like):\\n\"\n", + " \n", + " else: # other_run_type == \"BEST_RUN\":\n", + " HUMAN_MSG_OTHER_RUN = f\"NOTE: RUN_TO_ANALYZE failed in the task with the score of {cur_run_score}/100.0. However, here is ONE_OF_THE_BEST_RUNS, which succeeded with the score of {other_run_score}/100.0 (use as reference for what a correct approach looks like):\\n\"\n", + "\n", + " RUN_ANALYSIS_PROMPT = f\"\"\"IMPORTANT EVALUATION CONTEXT:\n", + "The agents being evaluated were given these instructions in their system prompt:\n", + "- \"Use execute_bash to interact with [Service] API at [endpoint]. Complete the task using the tools provided.\"\n", + "- \"Authentication is handled automatically via proxy. Leave a placeholder credential where you would add a real token.\"\n", + "\n", + "Therefore, do NOT flag as errors:\n", + "- Agent not explicitly handling authentication (it's automatic via proxy)\n", + "- Agent using placeholder credentials or assuming auth works\n", + "- Agent proceeding directly to API calls without auth setup\n", + "\n", + "Now analyze RUN_TO_ANALYZE (and use {other_run_type} only as a reference for what a correct approach looks like). Evaluate the following categories in order. For each category, provide the required fields as specified.\n", + "\n", + " 1) Tool Use Errors\n", + " Errors related to how the agent interacts with tools and APIs. Evaluate each subtype explicitly:\n", + "\n", + " endpoint_selection:\n", + " Determine whether the agent consistently selects correct endpoints to make progress toward the user's goal.\n", + " - present: True if there are any incorrect or irrelevant endpoint choices\n", + " - explanation: Brief summary of the issue (or why none were found)\n", + " - example: One concrete example from the trace (or 'N/A' if none)\n", + "\n", + " parameter_misuse:\n", + " Determine whether the agent ever calls an API endpoint with incorrectly formatted, incorrectly typed, or semantically misplaced parameters.\n", + " This includes:\n", + " - Wrong parameter names\n", + " - Wrong data types (string vs int vs list vs object)\n", + " - Wrong structure (scalar where an object is required, missing required keys, extra nesting)\n", + " - Using a field not accepted by the tool when the correct accepted field exists\n", + " - Semantic field mapping errors: putting data in the wrong field when a more appropriate field exists (e.g., putting location info like \"Pearlwork Desk\" in summary field instead of the dedicated location field)\n", + " - present: True if there is any parameter misuse\n", + " - explanation: Brief summary of the issue (or why none were found)\n", + " - example: One concrete example from the trace, e.g., 'tool expects user_id: \"U123\" but agent passes user: \"sarah\"' or 'put location in summary instead of location field' (or 'N/A' if none)\n", + "\n", + " format_errors:\n", + " Determine whether the agent ever produces tool-related output that is unparseable or malformed in a way that would prevent correct execution or structured parsing.\n", + " This includes invalid JSON (broken braces/quotes, trailing commas, partial JSON), incorrect field nesting that makes the payload unparsable, mixing natural language into a payload that must be machine-readable, truncation that cuts off the payload, or any syntax/format issue that causes the tool call or structured output to fail to parse.\n", + " - present: True if there is any unparseable or malformed payload\n", + " - explanation: Brief summary of the issue (or why none were found)\n", + " - example: One concrete example from the trace (or 'N/A' if none)\n", + "\n", + " code_errors:\n", + " Determine whether the agent produces valid tool calls (e.g. valid JSON) but the content of the call (the script or command) fails during execution.\n", + " This includes Bash syntax errors, runtime exceptions (NameError, ImportError), logic bugs in the script, or environment misconceptions (e.g. assuming variables or files persist between isolated tool calls when they do not).\n", + " - present: True if code execution failed\n", + " - explanation: Brief summary of the issue (or why none were found)\n", + " - example: One concrete example from the trace, e.g., \"NameError: 'headers' is not defined\" (or 'N/A' if none)\n", + "\n", + " 2) Model Refusal\n", + " Determine whether the agent refuses to perform the task, asks the user for information it could retrieve itself, OR delegates execution back to user instead of acting.\n", + " This includes:\n", + " - Explicitly refusing to perform the task\n", + " - Asking user for IDs, tokens, or file contents that the agent could find itself\n", + " - Passive delegation: gathering information but providing recommendations for user to execute instead of performing actions itself (e.g., \"You should reach out to @user\" instead of actually sending the message)\n", + " - present: True if the agent declines, offloads work, or delegates execution to the user\n", + " - explanation: Brief summary of the refusal/delegation (or why none were found)\n", + " - example: One concrete example from the trace, e.g., \"'Please provide the user ID' when agent has a search tool\" or \"Provided summary with 'You can now message @user' but made no tool calls to do so\" (or 'N/A' if none)\n", + "\n", + " 3) Hallucination Errors\n", + " Hallucinations are when the agent FABRICATES or ASSERTS invented information as truth.\n", + " This is distinct from reasoning errors (logic/inference failures) and assumption errors (guessing without checking).\n", + " \n", + " For EACH of the following hallucination types, explicitly evaluate whether it occurred:\n", + " You MUST provide a judgment (present: true/false) and example for EVERY category:\n", + "\n", + " - parameter_hallucination: Agent ASSERTS invented parameter values (IDs, names, timestamps, URLs, file IDs) as truth, when these values are not grounded in the trace or user input. Example: using channel ID \"C99999\" that never appeared anywhere.\n", + " - outcome_hallucination: Agent falsely CLAIMS task completion or success despite evidence showing the task was not actually completed.\n", + " - state_hallucination: Agent FABRICATES state that doesn't exist (e.g., \"the file was created\" when it wasn't, \"the user exists\" without any evidence). Distinct from state_tracking_error which is FORGETTING existing state.\n", + " - action_hallucination: Agent CLAIMS to have performed an action (read a file, made an API call, executed a command) that doesn't appear in the trace. Fabricating that execution occurred when it did not. Example: \"Content read: ...\" in reasoning but no corresponding API call in trace.\n", + " - capability_hallucination: Agent believes a tool/API can do something it cannot, or invents non-existent tool capabilities/endpoints.\n", + " - context_hallucination: Agent references information not present in trace, prompt, or API responses, asserting invented context as truth.\n", + " - other_hallucination: A hallucination not covered by the categories above (if present, provide explanation).\n", + "\n", + " For each category, return:\n", + " - present: true/false\n", + " - example: Concrete example from trace (or 'N/A' if none)\n", + " - explanation: (ONLY for other_hallucination) Description of the hallucination type\n", + "\n", + " 4) Reasoning Errors\n", + " Reasoning errors involve logic failures, memory issues, or flawed inference.\n", + " These are about HOW the agent thinks, not about fabricating information (which is hallucination).\n", + " \n", + " IMPORTANT DISTINCTIONS:\n", + " - state_tracking_error = agent FORGETS what happened (memory failure)\n", + " - state_hallucination = agent INVENTS what happened (fabrication) → goes in hallucination_errors\n", + " - assumption_error = agent GUESSES without checking (uncertainty acknowledged implicitly)\n", + " - hallucination = agent ASSERTS invented facts as known truth (false certainty)\n", + " - dependency_ordering_error = agent does steps in wrong SEQUENCE\n", + " - incomplete_execution_error = agent OMITS steps entirely (never attempts them)\n", + " - premature_termination_error = agent STOPS early thinking task is done when it's not\n", + "\n", + " For EACH of the following reasoning error types, explicitly evaluate whether it occurred:\n", + " You MUST provide a judgment (present: true/false) and example for EVERY category:\n", + "\n", + " - time_orientation_error: Confusing past vs future events, incorrect date/time calculations, timezone confusion, misunderstanding \"now\" vs scheduled times\n", + " - state_tracking_error: Agent FORGOT previous actions, failed to update understanding after new information, or repeated already-completed actions (MEMORY failure, not fabrication)\n", + " - goal_misalignment_error: Solving a different problem than asked, missing implicit requirements, over/under-interpreting intent, optimizing for wrong goal, OR understanding an explicit requirement but deprioritizing/ignoring it (e.g., knew batching was required but chose individual calls anyway)\n", + " - causal_reasoning_error: Misattributing why something failed, reversing cause and effect, missing intermediate steps in causal chain\n", + " - confirmation_bias: Ignoring contradictory error messages, persisting with failing approach despite clear feedback, selective interpretation of results\n", + " - logical_fallacy: False dichotomy (only 2 options when more exist), circular reasoning, non sequitur conclusions (action doesn't follow from evidence)\n", + " - assumption_error: Agent GUESSED defaults, user preferences, or API behavior WITHOUT CHECKING first. This is making unverified assumptions, not asserting fabricated facts as truth.\n", + " - negation_error: Inverting boolean conditions, misunderstanding \"not\"/\"except\"/\"exclude\", doing the opposite of what's requested\n", + " - scope_generalization_error: Over-generalizing from specific instructions, being too literal (missing spirit of request), applying patterns from unrelated contexts\n", + " - dependency_ordering_error: Performing actions in wrong SEQUENCE (e.g., tried to use result before fetching it, called API before authentication). About ordering, NOT about missing steps.\n", + " - incomplete_execution_error: Agent understood and planned required subtasks but failed to attempt some of them entirely. About OMISSION of steps (never tried), not wrong ordering. Example: planned to grant access and copy events but only did one.\n", + " - premature_termination_error: Agent stops execution and concludes the task is complete before finishing all required steps, without recognizing that more work remains. Distinct from incomplete_execution (planned but didn't attempt) - this is stopping early without awareness. Example: task requires sending 3 messages but agent stops after sending 1 and says \"Done!\"\n", + " - quantitative_reasoning_error: Off-by-one errors, unit/scale confusion, incorrect aggregation (sum vs count), OR incorrect sorting/ordering of data (e.g., skipped items when sorting alphabetically, wrong sort order)\n", + " - reference_resolution_error: Misunderstanding what \"it\"/\"this\"/\"that\" refers to, confusing multiple similar entities, losing track of which object is discussed\n", + " - instruction_fidelity_error: Agent deviated from explicit instructions by modifying content that should be preserved verbatim (e.g., changing punctuation like em-dash to hyphen, rewording text) OR adding unrequested embellishments/formatting (e.g., numbering, introductions, author attributions, extra metadata) when literal execution was required.\n", + " - reasoning_action_mismatch: Agent's explicit reasoning/plan contradicts the action it actually executes. The agent \"knows\" or states the correct approach but then does something different (e.g., reasons \"should use rich_text_section\" but then uses \"text\" type).\n", + " - other_reasoning_error: A reasoning error not covered by the categories above (if present, provide explanation)\n", + " - infinite_loop_error: Agent gets stuck in pathological loop, repeating identical or near-identical reasoning and actions across multiple iterations without making progress or attempting meaningfully different approaches\n", + "\n", + " For each category, return:\n", + " - present: true/false\n", + " - example: Concrete example from trace (or 'N/A' if none)\n", + " - explanation: (ONLY for other_reasoning_error and infinite_loop_error) Description of the error\n", + "\n", + " 5) Recovery Strategies\n", + " For EACH of the following recovery strategy types, explicitly evaluate whether the agent attempted it in RUN_TO_ANALYZE.\n", + " You MUST provide a judgment (present: true/false) and example for EVERY category:\n", + "\n", + " - retry_same: Retried the exact same action unchanged, hoping for different result\n", + " - retry_modified_params: Retried with adjusted parameters (different ID, format, value)\n", + " - switch_tool: Switched to a different tool/endpoint to achieve the same goal\n", + " - lookup_correct_value: Searched or queried to find the correct ID/name/value\n", + " - backtrack: Returned to an earlier step to gather missing information\n", + " - parse_error_message: Extracted useful info from error output to inform next action\n", + " - handle_ui_obstacle: Handled popup, dialog, login wall, or similar UI blocker\n", + " - change_strategy: Abandoned current approach entirely, tried a different method\n", + " - break_into_steps: Decomposed a complex action into smaller sequential steps\n", + " - verify_prerequisites: Checked if required conditions were met before retrying\n", + " - skip_and_continue: Moved past a blocking item to complete other parts of task\n", + " - wait_and_retry: Added delay for rate limits or async operations\n", + " - use_fallback: Used a secondary/backup method when primary failed\n", + " - other_recovery_strategy: A recovery strategy not covered by the categories above (if present, provide explanation)\n", + " - no_recovery_attempted: Agent gave up immediately or got stuck in a loop without any recovery attempt\n", + "\n", + " For each category, return:\n", + " - present: true/false\n", + " - example: Concrete example from trace (or 'N/A' if none)\n", + " - explanation: (ONLY for other_recovery_strategy) Description of the recovery strategy\n", + "\n", + " 6) Other Errors\n", + " Determine if there are any other errors not covered by the previous categories (1-4).\n", + " - present: True if there is an error that doesn't fit other categories\n", + " - explanation: Brief summary of the issue, including a proposed subcategory name (e.g., 'Timing Error', 'Resource Limit') (or 'No other errors found' if none)\n", + " - example: One concrete example from the trace (or 'N/A' if none)\n", + "\n", + " 7) Qualitative Summary\n", + " Provide a high-level narrative analysis of this run:\n", + " \n", + " First, evaluate planning quality:\n", + " - planning_score: Integer 0-5 for planning quality (action sequencing, adaptation to obstacles, efficiency)\n", + " Score scale:\n", + " - 5 = Excellent: clear, efficient action sequence; proactively handles obstacles; quickly switches strategy when blocked; uses optimal API patterns (batch calls when available).\n", + " - 4 = Good: mostly correct sequence; handles common obstacles with minor inefficiencies; occasional unnecessary steps or suboptimal API usage.\n", + " - 3 = Mixed: reaches the goal or makes progress but with avoidable detours; slow or inconsistent adaptation to obstacles; noticeable inefficiencies (e.g., N+1 query patterns).\n", + " - 2 = Poor: often incorrect ordering of steps; weak adaptation; repeats failing actions; needs luck or external help to progress.\n", + " - 1 = Very poor: largely incoherent plan; frequently stuck; little to no useful adaptation; abandons after minor friction.\n", + " - 0 = Non-functional: no meaningful plan; stagnates immediately or repeatedly loops until the step budget is exhausted.\n", + " - planning_explanation: Brief justification for the planning score, including any efficiency issues.\n", + " \n", + " Then, evaluate reasoning quality:\n", + " - reasoning_score: Integer 0-5 for reasoning quality (correctness of inferences, use of context, sound logic)\n", + " Score scale:\n", + " - 5 = Excellent: all inferences correct and well-grounded; uses available context effectively; no logical errors; self-corrects when evidence contradicts assumptions.\n", + " - 4 = Good: mostly correct reasoning; minor inference gaps that don't derail the task; good use of context.\n", + " - 3 = Mixed: some correct reasoning but notable errors in logic or inference; may ignore relevant context or draw unsupported conclusions.\n", + " - 2 = Poor: frequent reasoning errors; draws conclusions not supported by evidence; misinterprets API responses or error messages.\n", + " - 1 = Very poor: pervasive logical flaws; assertions contradicted by available evidence; fails to connect cause and effect.\n", + " - 0 = Non-functional: reasoning is incoherent, contradictory, or absent; actions have no logical basis.\n", + " - reasoning_explanation: Brief justification for the reasoning score, noting any flawed inferences or logic errors.\n", + " \n", + " Then, evaluate API/tool handling:\n", + " - tool_use_score: Integer 0-5 for API/tool handling quality (endpoint selection, parameter formatting, error handling, response parsing)\n", + " Score scale:\n", + " - 5 = Excellent: selects correct endpoints consistently; parameters properly formatted with correct types/structure; handles errors gracefully; extracts and uses API response data accurately.\n", + " - 4 = Good: mostly correct endpoint/parameter usage; minor formatting issues that don't cause failures; reasonable error handling.\n", + " - 3 = Mixed: some incorrect endpoints or malformed parameters; may miss required fields or use wrong types; inconsistent error handling.\n", + " - 2 = Poor: frequent parameter errors (wrong names, types, structure); struggles to parse API responses; poor recovery from API errors.\n", + " - 1 = Very poor: pervasive API misuse; hallucinates endpoints or parameters; fails to extract needed data from responses.\n", + " - 0 = Non-functional: cannot successfully interact with APIs; all or most tool calls fail due to fundamental misuse.\n", + " - tool_use_explanation: Brief justification for the tool use score, noting any API misuse or parameter errors.\n", + " \n", + " Then, evaluate recovery ability:\n", + " - recovery_score: Integer 0-5 for recovery ability (failure detection, root cause diagnosis, applying corrective strategies)\n", + " Score scale:\n", + " - 5 = Excellent: quickly detects failures; accurately diagnoses root causes; applies effective corrective strategies (modifies params, switches tools, backtracks); learns from errors.\n", + " - 4 = Good: detects most failures; reasonable diagnosis; tries appropriate recovery strategies with minor delays or inefficiencies.\n", + " - 3 = Mixed: detects failures but slow to diagnose; may try ineffective strategies first; eventually finds working approach but wastes iterations.\n", + " - 2 = Poor: often misses or misinterprets failures; misdiagnoses root causes; applies wrong fixes; may retry same failing action multiple times.\n", + " - 1 = Very poor: rarely recognizes failures; no meaningful recovery attempts; gets stuck in loops or gives up immediately.\n", + " - 0 = Non-functional: completely unable to recover; ignores all error signals; repeats identical failures until timeout.\n", + " - recovery_explanation: Brief justification for the recovery score, noting recovery strategies used or missed opportunities.\n", + " \n", + " Then, evaluate hallucination resistance:\n", + " - hallucination_score: Integer 0-5 for hallucination resistance (5 = no hallucinations, 0 = severe hallucinations)\n", + " Score scale:\n", + " - 5 = None: no fabricated information; all claims grounded in trace, prompt, or API responses; no invented IDs, states, or outcomes.\n", + " - 4 = Minimal: one minor instance of ungrounded assertion that doesn't affect task outcome; quickly self-corrects if contradicted.\n", + " - 3 = Moderate: some fabricated details (e.g., guessed IDs, assumed states) but core reasoning remains sound; hallucinations don't derail task.\n", + " - 2 = Significant: multiple hallucinations affecting task execution; invents parameters, claims false successes, or fabricates API responses.\n", + " - 1 = Severe: pervasive fabrication; asserts non-existent capabilities, claims actions that didn't happen, or invents entire context.\n", + " - 0 = Extreme: nearly all assertions fabricated; completely disconnected from reality of trace; cannot distinguish real from invented.\n", + " - hallucination_explanation: Brief justification for the hallucination score, noting any fabricated information or false claims.\n", + " \n", + " Then provide narrative analysis:\n", + " - overall_description: 2-3 sentence summary of what went wrong and why, suitable for a paper's qualitative analysis section\n", + " - key_insight: The single most important takeaway from analyzing this run, specifically, what went well for RUN_TO_ANALYZE, what went wrong?\n", + " - model_behavior_pattern: What does this run reveal about how the model approaches this type of task?\n", + " - implications_for_reliability: What does this failure reveal about model reliability/robustness?\n", + " - worthy_example: Is this run interesting enough to feature in a qualitative analysis section of a paper? (true/false)\n", + " - why_worthy_example: If worthy, explain why this example is noteworthy. If not worthy, put 'N/A'.\n", + "\n", + " Return your results in the required structured format.\"\"\"\n", + " \n", + " return SYSTEM_MSG, HUMAN_MSG_CUR_RUN, HUMAN_MSG_OTHER_RUN, RUN_ANALYSIS_PROMPT" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fc881ca8" + }, + "source": [ + "# Core functions\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "executionInfo": { + "elapsed": 1899, + "status": "ok", + "timestamp": 1768563722228, + "user": { + "displayName": "Hubert Pyskło", + "userId": "16424235253540376255" + }, + "user_tz": -330 + }, + "id": "79b6c493" + }, + "outputs": [], + "source": [ + "def analyze_single_test(all_runs_for_test, langchain_model):\n", + " \"\"\"\n", + " Analyzes all runs for a single test_id.\n", + " \n", + " Args:\n", + " all_runs_for_test: All runs for this test (across all models) - used for finding best run\n", + " and analyzing failed runs against it.\n", + " langchain_model: The LangChain model to use for analysis.\n", + " \n", + " Returns:\n", + " List of run analysis dicts, or None if all_runs_for_test is empty or has < 2 runs.\n", + " \"\"\"\n", + " if not all_runs_for_test:\n", + " print(\"WARNING: all_runs_for_test is empty. Returning.\")\n", + " return None\n", + " \n", + " # Check if we have at least 2 runs for comparison\n", + " if len(all_runs_for_test) < 2:\n", + " test_id = all_runs_for_test[0].get(\"runtime_test_id\", \"unknown\") if all_runs_for_test else \"unknown\"\n", + " print(f\"WARNING: Test {test_id} has only {len(all_runs_for_test)} run(s). Skipping comparison analysis (need at least 2 runs).\")\n", + " return None\n", + "\n", + " # Sort best runs across ALL models for this test (highest score, fewest iterations)\n", + " sorted_runs = sorted(\n", + " all_runs_for_test,\n", + " key=lambda r: (r[\"score\"], -r.get(\"iterations\", float('inf'))),\n", + " reverse = True\n", + " )\n", + " \n", + " first_best_run = sorted_runs[0]\n", + " second_best_run = sorted_runs[1] if len(sorted_runs) > 1 else first_best_run\n", + " \n", + " i = 1\n", + " found_better = False\n", + " while i < len(sorted_runs):\n", + " if (sorted_runs[i][\"score\"] < first_best_run[\"score\"] or \n", + " sorted_runs[i][\"iterations\"] > first_best_run[\"iterations\"]):\n", + " break\n", + " \n", + " if (sorted_runs[i][\"include_api_docs\"] == True and\n", + " sorted_runs[i][\"include_all_api_docs\"] == False):\n", + " found_better = True\n", + " break\n", + "\n", + " i += 1\n", + " \n", + " if found_better: \n", + " second_best_run = first_best_run\n", + " first_best_run = sorted_runs[i]\n", + " \n", + " first_best_run_id = first_best_run[\"run_id\"]\n", + " \n", + " results = []\n", + "\n", + " # Analyze each run (comprehensive assessment against best run)\n", + " for run in all_runs_for_test:\n", + " \n", + " # Choose another run for comparison\n", + " if run[\"run_id\"] == first_best_run_id:\n", + " other_run = second_best_run\n", + " else:\n", + " other_run = first_best_run\n", + " \n", + " other_run_trace = other_run.get(\"formatted_trace\", \"\")\n", + " other_run_score = other_run[\"score\"]\n", + " \n", + " cur_run_score = run[\"score\"]\n", + " \n", + " \n", + " if cur_run_score == 100:\n", + " other_run_type = \"ANOTHER_SUCCESSFUL_RUN\"\n", + " elif cur_run_score < 100 and other_run_score == 100:\n", + " other_run_type = \"BEST_RUN\"\n", + " elif cur_run_score < 100 and other_run_score < 100:\n", + " other_run_type = \"ONE_OF_THE_BEST_RUNS\"\n", + " \n", + " \n", + " \n", + " SYSTEM_MSG, HUMAN_MSG_CUR_RUN, HUMAN_MSG_OTHER_RUN, RUN_ANALYSIS_PROMPT = construct_run_analysis_prompt_elements(cur_run_score, other_run_type, other_run_score) \n", + " \n", + "\n", + " run_analysis = {\n", + " \"run_id\": run[\"run_id\"],\n", + " \"runtime_test_id\": run[\"runtime_test_id\"],\n", + " \"compared_against\": other_run[\"run_id\"]\n", + " }\n", + "\n", + " try:\n", + " agent = create_agent(\n", + " model=langchain_model,\n", + " response_format=ToolStrategy(RunAnalysisSchema)\n", + " )\n", + "\n", + " system_message = SYSTEM_MSG + RUN_ANALYSIS_PROMPT\n", + " human_message = HUMAN_MSG_CUR_RUN + run.get(\"formatted_trace\", \"\") + \"\\n\\n\" + HUMAN_MSG_OTHER_RUN + other_run.get(\"formatted_trace\", \"\")\n", + "\n", + " result = agent.invoke({\n", + " \"messages\": [\n", + " {\"role\": \"system\", \"content\": system_message},\n", + " {\"role\": \"user\", \"content\": human_message}\n", + " ]\n", + " })\n", + "\n", + " run_analysis[\"run_analysis\"] = result[\"structured_response\"]\n", + "\n", + " except Exception as e:\n", + " print(f\"Error analyzing run {run['run_id']}: {e}\")\n", + "\n", + " results.append(run_analysis)\n", + "\n", + " return results\n", + "\n", + "\n", + "def group_runs_by_test(all_runs_formatted):\n", + " \"\"\"Group flat runs list by runtime_test_id.\"\"\"\n", + " from collections import defaultdict\n", + " grouped = defaultdict(list)\n", + " for run in all_runs_formatted:\n", + " grouped[run[\"runtime_test_id\"]].append(run)\n", + " return grouped\n", + "\n", + "\n", + "def analyze_multiple_tests(langchain_model, all_runs_formatted=None, max_workers=10):\n", + " \"\"\"\n", + " Analyze all formatted runs, extracting qualitative data in structured format.\n", + " \n", + " Groups runs by test_id, then analyzes each test in parallel with checkpointing.\n", + " \n", + " Args:\n", + " langchain_model: The LangChain model to use for analysis.\n", + " all_runs_formatted: List of formatted runs (from format_single_run). \n", + " If None, attempts to load from formatted_runs folder.\n", + " max_workers: Number of parallel workers for analysis.\n", + " \n", + " Returns:\n", + " List of run analysis dicts (flattened across all tests).\n", + " \"\"\"\n", + " \n", + " # Setup checkpoints folder\n", + " checkpoints_folder = os.path.join(os.getcwd(), \"checkpoints\")\n", + " os.makedirs(checkpoints_folder, exist_ok=True)\n", + " \n", + " # Create checkpoint file with timestamp\n", + " timestamp = datetime.now().strftime(\"%Y%m%d_%H%M%S\")\n", + " checkpoint_file = os.path.join(checkpoints_folder, f\"checkpoint_{timestamp}.json\")\n", + " print(f\"Using checkpoint file: {checkpoint_file}\")\n", + " \n", + " # Auto-load from formatted_runs folder if not provided\n", + " if not all_runs_formatted:\n", + " output_folder = os.path.join(os.getcwd(), \"formatted_runs\")\n", + " \n", + " if not os.path.exists(output_folder):\n", + " print(f\"ERROR: No runs provided and formatted_runs folder not found at {output_folder}\")\n", + " return []\n", + " \n", + " pattern = os.path.join(output_folder, \"all_runs_formatted_*.json\")\n", + " matching_files = sorted(glob.glob(pattern), reverse=True) # newest first\n", + " \n", + " if not matching_files:\n", + " print(f\"ERROR: No all_runs_formatted_*.json files found in {output_folder}\")\n", + " return []\n", + " \n", + " latest_file = matching_files[0]\n", + " print(f\"Loading runs from: {latest_file}\")\n", + " \n", + " with open(latest_file, 'r') as f:\n", + " all_runs_formatted = json.load(f)\n", + " \n", + " print(f\"Loaded {len(all_runs_formatted)} formatted runs\")\n", + "\n", + " results = []\n", + " processed_test_ids = set()\n", + "\n", + " # Check for most recent existing checkpoint to resume from\n", + " existing_checkpoints = sorted(glob.glob(os.path.join(checkpoints_folder, \"checkpoint_*.json\")), reverse=True)\n", + " if existing_checkpoints:\n", + " latest_checkpoint = existing_checkpoints[0]\n", + " try:\n", + " with open(latest_checkpoint, 'r') as f:\n", + " results = json.load(f)\n", + " # Get processed test_ids from the flattened results\n", + " processed_test_ids = {r['runtime_test_id'] for r in results if r is not None}\n", + " print(f\"Resuming from checkpoint: {latest_checkpoint}\")\n", + " print(f\"Loaded {len(results)} already processed run analyses\")\n", + " except (json.JSONDecodeError, KeyError) as e:\n", + " print(f\"Could not load checkpoint {latest_checkpoint}: {e}. Starting fresh.\")\n", + "\n", + " # Group runs by test_id\n", + " by_test = group_runs_by_test(all_runs_formatted)\n", + "\n", + " # Filter to unprocessed tests\n", + " test_ids_to_process = [tid for tid in by_test.keys() if tid not in processed_test_ids]\n", + " print(f\"Processing {len(test_ids_to_process)} new tests (Total: {len(by_test)})\")\n", + "\n", + " if not test_ids_to_process:\n", + " print(\"All tests already processed.\")\n", + " return results\n", + "\n", + " # Process tests in parallel\n", + " with ThreadPoolExecutor(max_workers=max_workers) as executor:\n", + " future_to_test_id = {\n", + " executor.submit(analyze_single_test, by_test[tid], langchain_model): tid \n", + " for tid in test_ids_to_process\n", + " }\n", + " \n", + " for future in as_completed(future_to_test_id):\n", + " test_id = future_to_test_id[future]\n", + " try:\n", + " result = future.result()\n", + " if result is not None:\n", + " results.extend(result) # Flatten: extend instead of append\n", + " print(f\"Completed analysis for test {test_id} ({len(result)} runs)\")\n", + " else:\n", + " print(f\"Skipped test {test_id} (empty or insufficient runs)\")\n", + " \n", + " # Save checkpoint after each test\n", + " with open(checkpoint_file, 'w') as f:\n", + " json.dump(results, f, indent=2)\n", + " \n", + " except Exception as e:\n", + " print(f\"Error processing test {test_id}: {e}\")\n", + "\n", + " # Save final results with timestamp\n", + " results_folder = os.path.join(os.getcwd(), \"qualitative_analysis_results\")\n", + " os.makedirs(results_folder, exist_ok=True)\n", + " \n", + " results_filepath = os.path.join(results_folder, f\"analysis_results_{timestamp}.json\")\n", + " \n", + " with open(results_filepath, 'w') as f:\n", + " json.dump(results, f, indent=2)\n", + " \n", + " print(f\"\\nSaved {len(results)} run analyses to: {results_filepath}\")\n", + " \n", + " return results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Run the analysis" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# Define the model here using RobustChatOpenAI for retry logic\n", + "\n", + "# google/gemini-3-flash-preview\n", + "# x-ai/grok-4.1-fast\n", + "\n", + "langchain_model = RobustChatOpenAI(\n", + " model=\"google/gemini-3-flash-preview\",\n", + " api_key=os.getenv(\"OPENROUTER_API_KEY\"),\n", + " base_url=\"https://openrouter.ai/api/v1\",\n", + " max_retries=3,\n", + " base_delay=2.0,\n", + " timeout=120, # 120 second timeout for long-running requests\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# selected_runs = [run for run in formatted_runs if run[\"runtime_test_id\"] == \"f1e306ca-d89a-5d70-bb57-03437eec4ea8\" or run[\"runtime_test_id\"] == \"0b2af335-8327-53fb-ab71-829299520d87\" or run[\"runtime_test_id\"] == \"10e491a0-bea6-5d05-9fb1-5d4774b34697\" or run[\"runtime_test_id\"] == \"2cae6822-7219-5357-b252-acd24e660f3b\"]\n", + "\n", + "# pprint(selected_runs)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 84, + "referenced_widgets": [ + "7c6c3142755240ff9afff2e91442a445", + "51c6409c22294fabbc01664d7c4a9a4b", + "480f23463fcb4b43999a1188d5ef3138", + "1cd3af2af88c44ca803e61975ad31e98", + "eb2fed2af8744bcebe58cd6967679d98", + "65b0c86c8543418191ae274e2048d33e", + "f2486c53ea9b4ebeb8de2446aab1ff0f", + "69cee69466274503a9657da66adeff45", + "03dc844d5f5046e2bc79c6c7fbce7f73", + "1b48f2ec1bd7409498d6c50766d3e8b3", + "a6e16fe4fc0d4821bd4cde12c77fc6a3" + ] + }, + "executionInfo": { + "elapsed": 580745, + "status": "ok", + "timestamp": 1768564304516, + "user": { + "displayName": "Hubert Pyskło", + "userId": "16424235253540376255" + }, + "user_tz": -330 + }, + "id": "ffc26f97", + "outputId": "4a24b4c2-8732-478b-8a48-bec56fa7a468" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using checkpoint file: /Users/azh/agent-diff/local_analysis/checkpoints/checkpoint_20260208_163451.json\n", + "Processing 223 new tests (Total: 223)\n", + "Completed analysis for test 89b45222-2dee-535e-804e-69d1f44a78fd (18 runs)\n", + "Completed analysis for test bf85c95d-b8ef-50cb-8263-6dae94173586 (18 runs)\n", + "Completed analysis for test dcba769e-d40c-53c4-a6ae-11283f53ed77 (18 runs)\n", + "Completed analysis for test b7b8f64c-6457-5f9c-8943-d4a9e83387f6 (18 runs)\n", + "Completed analysis for test e4494bce-7101-5ec5-b757-f90f57c53690 (18 runs)\n", + "Completed analysis for test 32ee4d07-7744-59c5-a91f-f9b6cb9b75b8 (18 runs)\n", + "Completed analysis for test 2443b5cf-ef57-5201-9399-cba34df4649d (18 runs)\n", + "Completed analysis for test 94e0cbdc-f816-57a6-a559-6578fd85f12c (18 runs)\n", + "Completed analysis for test 316ccf74-4c28-5e2e-adf0-7b5037a5d236 (18 runs)\n", + "Completed analysis for test f1e306ca-d89a-5d70-bb57-03437eec4ea8 (18 runs)\n", + "Completed analysis for test 85cf6f38-d086-5590-bcea-45c7fd00b9ab (18 runs)\n", + "Completed analysis for test 1a6f0dc0-3e38-5ca4-aa91-a179e553d56a (17 runs)\n", + "Completed analysis for test 7585d11d-1522-5397-8f9d-4355c98fb320 (17 runs)\n", + "Completed analysis for test 924b7358-0280-52a1-9f9d-ff92dc884408 (18 runs)\n", + "Completed analysis for test 091c78d8-0a48-517f-ab2e-754a35ef6b41 (17 runs)\n", + "Completed analysis for test 02afffa3-0d0f-563b-be3a-7b079f508960 (18 runs)\n", + "Completed analysis for test 7e652804-c30e-5e96-b0a9-dacd4b301d3a (18 runs)\n", + "Completed analysis for test 5b500d86-c978-51e9-926d-f0d692b970cc (18 runs)\n", + "Completed analysis for test 306c1f11-1312-52ad-a8b9-345c8188d45b (18 runs)\n", + "Completed analysis for test a55e938f-677f-55d7-b649-9635325c8497 (18 runs)\n", + "Completed analysis for test 129d3b85-5f2d-5cf3-a47a-ca7132849fbd (18 runs)\n", + "Completed analysis for test 109f7097-3c63-55a7-ad92-e0f5c728c27d (18 runs)\n", + "Completed analysis for test c6f2e6f4-26a1-535e-9392-3b5efe077ec4 (18 runs)\n", + "Completed analysis for test d779ff1b-b0ca-54ef-8ae3-258051b9019e (18 runs)\n", + "Completed analysis for test 42a7f259-72c8-533c-80ba-5543663383b3 (17 runs)\n", + "Completed analysis for test ff4b03db-720c-5073-acd1-96dcc23abb90 (18 runs)\n", + "Completed analysis for test 8fa64981-967b-5085-836e-9df8ac4480d2 (17 runs)\n", + "Completed analysis for test 9f4117c0-aeb5-5d9c-84ee-09bc82b928fe (18 runs)\n", + "Completed analysis for test e713bdd8-45bc-5b53-a812-48431447b963 (18 runs)\n", + "Completed analysis for test 96889276-121c-582f-a8d5-c6c5d4076b44 (18 runs)\n", + "Completed analysis for test 36f37848-ec6e-5212-b940-f464f66988a1 (17 runs)\n", + "Completed analysis for test 2b23b974-ce19-5cca-8f3a-501163a5035c (18 runs)\n", + "Completed analysis for test b237178b-4673-5d49-ab33-537f6712c061 (18 runs)\n", + "Completed analysis for test 0b1ba129-6828-587c-8279-523d12d2ce29 (18 runs)\n", + "Completed analysis for test 35e70976-1895-5bda-a13d-c7131ba8815f (18 runs)\n", + "Completed analysis for test 8f28c551-ac9a-5457-911f-7c313f4bfad0 (17 runs)\n", + "Completed analysis for test e017c399-c0c1-5ebf-bb88-2308ac458819 (18 runs)\n", + "Completed analysis for test 5720e37b-6000-599b-be8f-5e434744f01a (17 runs)\n", + "Completed analysis for test 8850cf15-0881-5e2c-93f7-648b27e2ec82 (18 runs)\n", + "Completed analysis for test 2726404a-0425-5911-838a-c09ab0aebd61 (18 runs)\n", + "Completed analysis for test 0c52b193-a5ba-5ed1-81e0-eadf0fbf1eaa (18 runs)\n", + "Completed analysis for test 4554cccc-efb0-591f-9d70-d475c28f3616 (18 runs)\n", + "Completed analysis for test e7ba2b55-3d09-5124-b98c-b2f0f8e9e370 (18 runs)\n", + "Completed analysis for test c217fe0e-a888-5059-b3d6-958372325e5d (18 runs)\n", + "Completed analysis for test 6036938e-931f-5551-b3e2-8b505ef67d48 (18 runs)\n", + "Completed analysis for test d1091560-faa4-5096-ae81-ce5e25439629 (18 runs)\n", + "Completed analysis for test b50ec7a3-8627-5ed4-912a-0ba296b717e7 (18 runs)\n", + "Completed analysis for test 87d92a6e-19c3-54d6-b9c4-1bfa9a781180 (18 runs)\n", + "Completed analysis for test dd8580a5-0561-515a-a431-bb3c5d3bb01f (18 runs)\n", + "Completed analysis for test cab8254e-a021-5cd7-a708-06fa208fe9c6 (18 runs)\n", + "Completed analysis for test fc856770-93e4-5c53-ace1-bfc404682054 (18 runs)\n", + "Completed analysis for test 8dfaba68-9f70-5276-886b-b7fa6fcc5dad (18 runs)\n", + "Completed analysis for test 42079ca7-454f-5210-b8bc-a25a8d7e8b84 (18 runs)\n", + "Completed analysis for test a50bb085-8db5-5d7e-ae62-31ab6ddd36f2 (18 runs)\n", + "Completed analysis for test 22cc0553-80ea-5ed9-b7e6-49575d564465 (18 runs)\n", + "Completed analysis for test 78e5fd8d-42cd-53ce-9dd9-50fb0deb7512 (18 runs)\n", + "Completed analysis for test 6f073a5b-251a-55d5-bfc0-61c449e637c0 (18 runs)\n", + "Completed analysis for test 8e87351f-f9ee-518a-ab07-5e48999e428c (18 runs)\n", + "Completed analysis for test b9e23762-d395-50c4-b6a7-9f4d29e794d6 (18 runs)\n", + "Completed analysis for test aaaaf30b-9078-52cd-8f7d-2ba22e4e78d7 (18 runs)\n", + "Completed analysis for test 0214a404-85ed-5e1f-b17c-ce936aea6388 (18 runs)\n", + "Completed analysis for test 2b53f5da-6341-5faf-82f9-7a33b0026836 (18 runs)\n", + "Completed analysis for test 57f88692-caaa-5686-bbee-693882f00d30 (18 runs)\n", + "Completed analysis for test 0873de14-fa61-5f82-9915-4cb49e5e9ba6 (18 runs)\n", + "Completed analysis for test b9372abf-df90-5abd-a439-5636a10c944c (18 runs)\n", + "Completed analysis for test 78351c1c-adc1-51d7-a9ae-97bf4d8fec5a (18 runs)\n", + "Completed analysis for test b54edc1f-8946-5aa7-98bc-63ff8f048799 (18 runs)\n", + "Completed analysis for test e2769ac6-9466-5a53-bbd3-5fa2be79f9a5 (18 runs)\n", + "Completed analysis for test 57da6e5c-ac68-5422-b6fc-2d6d56de8f55 (18 runs)\n", + "Completed analysis for test 521e343d-de96-5c51-afac-23a2d63c0ade (18 runs)\n", + "Completed analysis for test 140123d2-1f83-59a4-8e09-8d1135930d05 (18 runs)\n", + "Completed analysis for test f0f327f4-3e41-5c78-88e6-623a5954e31d (18 runs)\n", + "Completed analysis for test 16b83c1b-8b86-5d35-93d3-e49810c14396 (18 runs)\n", + "Completed analysis for test 99c8efa3-c260-574b-bbde-3280e07c4beb (18 runs)\n", + "Completed analysis for test 1e9b13ae-6e8f-5874-865a-fc0304bc54e0 (18 runs)\n", + "Completed analysis for test da7c1952-ef34-54dc-a0b6-6ef3f9fb2ad2 (18 runs)\n", + "Completed analysis for test 64812e17-adfc-53b9-a92d-1382e851afe9 (18 runs)\n", + "Completed analysis for test 981a1276-8cb0-5569-a3a0-e3796cfff1bc (18 runs)\n", + "Completed analysis for test 9a2694eb-92f3-5b68-9918-4b492b57ee55 (18 runs)\n", + "Completed analysis for test ad8adea9-1a0e-51fc-9e96-c7da2349f061 (16 runs)\n", + "Completed analysis for test 609ed1c6-a5af-528a-9a00-380c400f2511 (18 runs)\n", + "Completed analysis for test 570b8931-e0ae-5e4a-b1a4-e03847e220d6 (18 runs)\n", + "Completed analysis for test 705152cc-e799-536c-9eaf-7b03e73e4cd8 (18 runs)\n", + "Completed analysis for test 0dfb2d4f-8bd1-5790-bc27-74b27d3650c0 (18 runs)\n", + "Completed analysis for test ffaeced3-a011-5f58-a036-54f3135dd3f1 (17 runs)\n", + "Completed analysis for test dc01a0ee-f4df-5df1-8b1d-b1a36b2a275b (18 runs)\n", + "Completed analysis for test 675c62bb-af91-5311-a606-d46c53bf2d20 (18 runs)\n", + "Completed analysis for test bfb139ab-2eaf-565b-83ef-f5c7d849ca78 (18 runs)\n", + "Completed analysis for test 3e0e5027-1788-5063-9dab-f5bb31253cd5 (17 runs)\n", + "Completed analysis for test afbcedcd-c76a-55a6-a978-9aca0849ff0e (18 runs)\n", + "Completed analysis for test 63ef0d2c-0d08-5a1c-876f-3d534b58c60d (18 runs)\n", + "Completed analysis for test 958ef51f-18f0-5419-a911-7ab6977e846b (18 runs)\n", + "Completed analysis for test 51e9be5b-2f83-5619-a210-44bd1f431390 (18 runs)\n", + "Completed analysis for test af79a4d9-e765-54ce-af39-e55c3951d88c (18 runs)\n", + "Completed analysis for test 8dc4713a-24ab-5d6f-bf7c-1d61104c7e0a (18 runs)\n", + "Completed analysis for test 7966afdf-9278-52f7-8343-c101d5cf69ac (18 runs)\n", + "Completed analysis for test a8cc67b2-4791-590d-9379-a6b57bb17a4a (18 runs)\n", + "Completed analysis for test 2b18b922-58fe-5a37-b155-a113e8a4407b (18 runs)\n", + "Completed analysis for test 0b2af335-8327-53fb-ab71-829299520d87 (18 runs)\n", + "Completed analysis for test 4c89f90d-83e0-523d-972f-5cd4b2e88d97 (18 runs)\n", + "Completed analysis for test 1a82a12f-8ffa-5475-8b52-1dae7749d54b (18 runs)\n", + "Completed analysis for test 9e5d8660-1923-5951-8931-5da5079dabcb (18 runs)\n", + "Completed analysis for test 3ff36a75-226b-568c-8bca-811dabdf407f (18 runs)\n", + "Completed analysis for test 2cae6822-7219-5357-b252-acd24e660f3b (18 runs)\n", + "Completed analysis for test 12cb6906-07b3-5bab-8097-2bd87ba82e89 (18 runs)\n", + "Completed analysis for test b06a3dd5-bcb0-55c8-a581-9c9a8363efbe (18 runs)\n", + "Completed analysis for test 10e491a0-bea6-5d05-9fb1-5d4774b34697 (18 runs)\n", + "Completed analysis for test c3370974-2e42-5a98-858f-1a4857cee7e5 (18 runs)\n", + "Completed analysis for test b2990fe2-32f8-518d-b071-9bdb8c1695c1 (18 runs)\n", + "Completed analysis for test 30cc2076-4024-58d0-b109-0a47fff41303 (18 runs)\n", + "Completed analysis for test d8fa727a-0083-5d34-b56d-8f0483106b8b (18 runs)\n", + "Completed analysis for test e8f8a489-55ac-5593-b899-105cb9d87aad (18 runs)\n", + "Completed analysis for test 7d35e11a-12e9-598e-9cdf-6a15c81c034f (17 runs)\n", + "Completed analysis for test a2a08945-3a17-5534-804f-115b47cb2aee (18 runs)\n", + "Completed analysis for test cfcdc9df-af26-5dd1-b6c8-d3b1dab9ec96 (18 runs)\n", + "Completed analysis for test fe997459-1ea7-594b-8f33-c2acc1754378 (18 runs)\n", + "Completed analysis for test e45c8a94-d19d-576d-91f7-aae559918dd0 (18 runs)\n", + "Completed analysis for test 7d481aeb-e1ec-557f-a349-d5281633af58 (18 runs)\n", + "Completed analysis for test 9ccbf958-0d88-5cc0-99eb-ccc7ffd62d5f (18 runs)\n", + "Completed analysis for test fd9ca02d-daca-530a-bed5-66c4ee9be71f (18 runs)\n", + "Completed analysis for test b9f5bfa5-293c-5ac2-a4c6-43cdb9f21c71 (18 runs)\n", + "Completed analysis for test ad4fe3b0-d667-5b40-a1ca-68a056662239 (18 runs)\n", + "Completed analysis for test 1ef0a1d7-230c-5d07-88a7-25b3a13efac9 (18 runs)\n", + "Completed analysis for test defec824-662c-5591-8fe6-573eb6e82441 (18 runs)\n", + "Completed analysis for test e3ff34bf-14e8-51aa-9972-f9c1622f6ae4 (18 runs)\n", + "Completed analysis for test e014f04a-eb13-5836-8ddb-eb8d9d7331d0 (18 runs)\n", + "Completed analysis for test 0a60ffaa-7d1b-54d5-89c8-aff960776a19 (18 runs)\n", + "Completed analysis for test ea627ab4-f0c7-5c16-b986-b970c11cbc93 (18 runs)\n", + "Completed analysis for test f195c71d-4e5f-55a8-aa31-e771eed5be92 (18 runs)\n", + "Completed analysis for test 2059ef1a-ec6e-54b3-8038-afd69c5fe876 (18 runs)\n", + "Completed analysis for test f2cf962c-6253-592d-b205-1da7ef72b674 (18 runs)\n", + "Completed analysis for test 0e363f34-4cd1-5fb8-8d37-fdf88cfbf855 (18 runs)\n", + "Completed analysis for test 62f58346-ef22-52f3-86fe-5f4140a5d491 (18 runs)\n", + "Completed analysis for test 58c2ac95-b0a5-5630-af0b-78c973c3831a (18 runs)\n", + "Completed analysis for test 1aaa6dfc-87dc-51db-ac76-506642928cbf (18 runs)\n", + "Completed analysis for test bcf8296c-2507-527b-bb27-16319a962c68 (18 runs)\n", + "Completed analysis for test 143f7c38-8c3d-5778-8daf-5d57fc7f1727 (18 runs)\n", + "Completed analysis for test 3fee3b45-d12f-5ef2-a675-8ee153f1aa19 (18 runs)\n", + "Completed analysis for test 1ed6d367-32d3-5e70-b4fb-ab483f61ccc0 (18 runs)\n", + "Completed analysis for test 31f504c0-a935-54b4-88d9-519f99bc644d (18 runs)\n", + "Completed analysis for test cf96de3e-12e5-50d9-86f2-f32042a5c834 (18 runs)\n", + "Completed analysis for test 3c878e45-54e8-5c41-af55-c3e4cec239e0 (18 runs)\n", + "Completed analysis for test 812e328a-9e48-506d-8680-566b32da56b6 (18 runs)\n", + "Completed analysis for test 4044d868-4f9f-53dd-9213-6c4653a6bdcc (18 runs)\n", + "Completed analysis for test 36624405-625b-52c6-8430-e9bb7b6a1a25 (18 runs)\n", + "Completed analysis for test a462ebc5-65ef-5f0f-92f0-6e19387eeab5 (18 runs)\n", + "Completed analysis for test 8ad0cf81-2911-5b5a-a706-4c196892c3b8 (18 runs)\n", + "Completed analysis for test cdd3cbfc-6e86-59c3-97ac-ce2ef3999b3d (18 runs)\n", + "Completed analysis for test 7967f654-844e-5e1f-b099-084ca562a403 (17 runs)\n", + "Completed analysis for test cf193231-8fc6-5f0c-8503-6cbb9454a3cc (17 runs)\n", + "Completed analysis for test 42ec30d7-1fda-5512-b335-8c3c50b4b6d4 (17 runs)\n", + "Completed analysis for test f80074a5-8690-5963-aa4a-99637b06d5b3 (18 runs)\n", + "Completed analysis for test e39e236d-c1e3-565f-87d2-2673f8471eee (18 runs)\n", + "Completed analysis for test 004e078a-0cb4-5a33-ae7d-4d1e44131c1f (18 runs)\n", + "Completed analysis for test 26becca0-cd02-5e0c-8ec7-6bddc2b8a7ae (18 runs)\n", + "Completed analysis for test 2f0a86aa-ae09-5894-b849-b2eef4c8ebbc (18 runs)\n", + "Completed analysis for test c65656a6-58ac-5507-b606-5c8e329137f3 (18 runs)\n", + "Completed analysis for test 3ab4da80-59fc-5224-b8aa-dc733b483c6e (18 runs)\n", + "Completed analysis for test 8ee5f307-667b-5148-a530-6fc1990a6e47 (18 runs)\n", + "Completed analysis for test 9437a1f2-7796-5f55-b020-7e2835a0a601 (17 runs)\n", + "Completed analysis for test 1bff659b-ec87-56f4-aeef-ca95765a1281 (18 runs)\n", + "Completed analysis for test c123d805-a4b3-589f-b7be-f57c0030e9a0 (18 runs)\n", + "Completed analysis for test 41f6d424-fd8e-50f1-9473-695453d474d3 (18 runs)\n", + "Completed analysis for test db4e374b-86d2-5e8b-956c-018a8713c727 (17 runs)\n", + "Completed analysis for test 71535acb-d295-5086-84a2-1b71a9b770b0 (18 runs)\n", + "Completed analysis for test 497cf619-7f19-5a7b-9f4e-8d0638a80479 (18 runs)\n", + "Completed analysis for test eeedc7d1-7a4d-5bfc-84ee-36ba982206de (18 runs)\n", + "Completed analysis for test 00d56d81-e3db-5c48-a650-f8b602a3158c (18 runs)\n", + "Completed analysis for test 2f83b766-7760-52c6-a5ef-a0d3a82ca83f (18 runs)\n", + "Completed analysis for test 363cadc2-4530-54f7-9bd1-c80e036752fe (18 runs)\n", + "Completed analysis for test 0c33ae93-3188-562e-880f-e9858837b7ac (17 runs)\n", + "Completed analysis for test c89e10e6-df2f-5f3c-99a5-94614b95e86d (18 runs)\n", + "Completed analysis for test 51f7e2ed-552e-5889-8751-77e0ee578060 (18 runs)\n", + "Completed analysis for test aa973966-9a27-52e8-9e92-a72c0a1c9689 (17 runs)\n", + "Completed analysis for test 98194ce2-41ce-5c68-b541-1f1ddc14a971 (17 runs)\n", + "Completed analysis for test d5d92862-3032-5454-87a0-68ed0864682c (16 runs)\n", + "Completed analysis for test 7aac1181-effd-56d8-b2a6-dffe40194ec9 (18 runs)\n", + "Completed analysis for test 6fc46b3c-2753-5d3d-902a-1d977a4fe10b (18 runs)\n", + "Completed analysis for test c256f46d-6219-5be2-a557-fed458f7dea4 (18 runs)\n", + "Completed analysis for test ff35db06-0241-5e60-b000-7101a4c7db1e (18 runs)\n", + "Completed analysis for test 8d963004-d82f-5118-a56c-614f313461d2 (18 runs)\n", + "Completed analysis for test eb537845-3ab6-5394-997e-93c8298a38cc (16 runs)\n", + "Completed analysis for test d7f76199-917c-5543-9477-dd49ac921492 (18 runs)\n", + "Completed analysis for test c681601c-1b00-5614-a53f-e5899da6ceec (18 runs)\n", + "Completed analysis for test 8e5863ba-7970-5cec-b43c-cd67add71e49 (18 runs)\n", + "Completed analysis for test a476bbc1-4a60-5542-9f28-56dd8aacf677 (18 runs)\n", + "Completed analysis for test 73950712-e215-5c6c-b494-b8bc3564a767 (18 runs)\n", + "Completed analysis for test 34284b81-7802-5cdd-a975-88a4d33d640c (18 runs)\n", + "Completed analysis for test a4025b7e-d998-5701-891e-a0181bc07168 (18 runs)\n", + "Completed analysis for test 49c2d126-9979-5a21-a008-2594051a1b93 (18 runs)\n", + "Completed analysis for test 158a173e-168b-54cf-af59-93e523b5c6e8 (18 runs)\n", + "Completed analysis for test 0f49728f-5f8b-5a3a-babc-b81026fce1fd (16 runs)\n", + "Completed analysis for test 7a911ab0-27fb-5345-9529-afdfb92d7f74 (18 runs)\n", + "Completed analysis for test ea937609-6906-5602-ad0b-4cedfb69dfe6 (18 runs)\n", + "Completed analysis for test 220eaa92-b1bc-5064-90b4-40e6062ff73b (17 runs)\n", + "Completed analysis for test 7bb93bc7-c3a2-5dc1-b387-2f7f1b53eb42 (18 runs)\n", + "Completed analysis for test 209c8362-8457-5bff-96a0-dbfe5f1a9f8b (16 runs)\n", + "Completed analysis for test 5892c247-dc0b-5b3e-a2cd-bd07c2dcbc60 (16 runs)\n", + "Completed analysis for test 38e6a618-996f-549c-b397-05de6c6081aa (18 runs)\n", + "Completed analysis for test 117b210a-623b-5626-b5b9-199835bda5e3 (18 runs)\n", + "Completed analysis for test af828a7f-4856-5d75-a0b7-03912092505d (17 runs)\n", + "Completed analysis for test ce6072c1-1582-5822-a930-c8faeed8fe1a (18 runs)\n", + "Completed analysis for test f031b96e-5144-5c3f-85e9-b79795244d0f (18 runs)\n", + "Completed analysis for test 959b0734-eb18-51ec-a704-dfe79a025917 (16 runs)\n", + "Completed analysis for test a3bc97ee-a7fb-595a-8e96-9e900837a1ca (17 runs)\n", + "Completed analysis for test 860399a5-508e-5389-a662-24420a49986b (18 runs)\n", + "Completed analysis for test f425dc39-43db-562a-9ef7-9d8aecf3c3bf (17 runs)\n", + "Completed analysis for test ed430ef0-1f5f-5fd2-98e4-b9042d714cfc (18 runs)\n", + "Completed analysis for test c0319f84-59ce-516f-be97-70f2fa3b1db0 (18 runs)\n", + "Completed analysis for test 08f51926-10ba-5e9c-bfde-805c9bc30466 (18 runs)\n", + "Completed analysis for test 5fbfccd0-5281-5cc9-b5ae-851ec0a3484a (16 runs)\n", + "Completed analysis for test ac1ef9e0-f096-50ba-a002-377dac2e0abd (18 runs)\n", + "Completed analysis for test 4e2c2e3c-8e5f-584b-ae9b-95a14f329b85 (18 runs)\n", + "Completed analysis for test 7e9df9f5-3111-5ba1-b86c-094bbd30a77d (18 runs)\n", + "Completed analysis for test d979f152-4b6a-57b8-ac51-f2702776e7c9 (17 runs)\n", + "Completed analysis for test 8b68c888-f8b4-51d7-8c7b-bfb2951c8a10 (18 runs)\n", + "Completed analysis for test 58bf5ab4-7e3b-58d2-aa78-7234452fc990 (18 runs)\n", + "Completed analysis for test f244681f-ca80-52a2-baf1-d357eca72075 (18 runs)\n", + "Completed analysis for test 6fa21b40-f1ee-579e-a122-7f97e6a22d8f (18 runs)\n", + "Completed analysis for test 7999d609-cda4-5b74-bb8f-18a434525f9f (8 runs)\n", + "Completed analysis for test ed335427-ce65-543c-b258-e506fc560b36 (18 runs)\n", + "Completed analysis for test 0e2f777e-34b8-52ec-9fb0-a73c44d1cad5 (18 runs)\n", + "Completed analysis for test d8d847f2-900d-50a9-b535-e21b97c89be5 (17 runs)\n", + "\n", + "Saved 3963 run analyses to: /Users/azh/agent-diff/local_analysis/qualitative_analysis_results/analysis_results_20260208_163451.json\n" + ] + } + ], + "source": [ + "analysis_results = analyze_multiple_tests(langchain_model=langchain_model,\n", + " all_runs_formatted=formatted_runs, # By default (if None is specified) will process last file with formatted runs\n", + " max_workers=10)\n" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.5" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "03dc844d5f5046e2bc79c6c7fbce7f73": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "1b48f2ec1bd7409498d6c50766d3e8b3": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "1cd3af2af88c44ca803e61975ad31e98": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_1b48f2ec1bd7409498d6c50766d3e8b3", + "placeholder": "​", + "style": "IPY_MODEL_a6e16fe4fc0d4821bd4cde12c77fc6a3", + "value": " 609/609 [09:40<00:00,  5.21s/it]" + } + }, + "480f23463fcb4b43999a1188d5ef3138": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_69cee69466274503a9657da66adeff45", + "max": 609, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_03dc844d5f5046e2bc79c6c7fbce7f73", + "value": 609 + } + }, + "51c6409c22294fabbc01664d7c4a9a4b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_65b0c86c8543418191ae274e2048d33e", + "placeholder": "​", + "style": "IPY_MODEL_f2486c53ea9b4ebeb8de2446aab1ff0f", + "value": "Analyzing Traces: 100%" + } + }, + "65b0c86c8543418191ae274e2048d33e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "69cee69466274503a9657da66adeff45": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "7c6c3142755240ff9afff2e91442a445": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_51c6409c22294fabbc01664d7c4a9a4b", + "IPY_MODEL_480f23463fcb4b43999a1188d5ef3138", + "IPY_MODEL_1cd3af2af88c44ca803e61975ad31e98" + ], + "layout": "IPY_MODEL_eb2fed2af8744bcebe58cd6967679d98" + } + }, + "a6e16fe4fc0d4821bd4cde12c77fc6a3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "eb2fed2af8744bcebe58cd6967679d98": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f2486c53ea9b4ebeb8de2446aab1ff0f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + } + } + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/experiments/kdd 2026/qualitative_analysis/test_suites/box_bench.json b/experiments/kdd 2026/qualitative_analysis/test_suites/box_bench.json new file mode 100644 index 0000000..26c8275 --- /dev/null +++ b/experiments/kdd 2026/qualitative_analysis/test_suites/box_bench.json @@ -0,0 +1,2246 @@ +{ + "id": "box-bench-v2", + "name": "Box Bench v2", + "description": "Curated benchmark tests for Box MCP operations - 48 tests", + "service": "box", + "ignore_fields": { + "global": [ + "created_at", + "modified_at", + "content_created_at", + "content_modified_at", + "purged_at", + "trashed_at", + "etag", + "sequence_id", + "sha1", + "file_version", + "path_collection", + "created_by", + "modified_by", + "owned_by" + ] + }, + "tests": [ + { + "id": "test_1", + "name": "Level 1: Get Current User", + "prompt": "Find out who I am logged in as, and create a folder named exactly equal to my display name in the root directory.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "GET /users/me", + "POST /folders" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "eq": "Admin User" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_2", + "name": "Level 1: Create Folder", + "prompt": "Create a new folder named 'Analysis_2026' inside the 'investments' folder.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "GET /search", + "POST /folders" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "eq": "Analysis_2026" + }, + "parent_id": { + "eq": "5610825569" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_3", + "name": "Level 1: Search for FOMC", + "prompt": "Search for files with 'fomc' in the name. Add a comment 'Relevant' to the first file found.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "GET /search", + "POST /comments" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_comments", + "where": { + "message": { + "eq": "Relevant" + }, + "item_id": { + "in": [ + "3379954793", + "2667428831", + "1246789615", + "1439014490" + ] + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_4", + "name": "Level 1: Add Comment", + "prompt": "Add a comment 'Needs review' to the Google earnings report PDF in the investments folder.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "GET /search", + "POST /comments" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_comments", + "where": { + "message": { + "contains": "Needs review" + }, + "item_id": { + "eq": "2748861636" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_5", + "name": "Level 1: Rename Folder", + "prompt": "Rename the 'macroeconomics' folder to 'Global Economics'.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "GET /search", + "PUT /folders/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_folders", + "where": { + "id": { + "eq": "1973339758" + } + }, + "expected_changes": { + "name": { + "to": { + "eq": "Global Economics" + } + } + } + } + ] + }, + { + "id": "test_6", + "name": "Level 1: Move File", + "prompt": "Move the file 'transport-april-2025-csv.csv' into the 'investments' folder.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "GET /search", + "GET /search", + "PUT /files/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "1421498350" + } + }, + "expected_changes": { + "parent_id": { + "to": { + "eq": "5610825569" + } + } + } + } + ] + }, + { + "id": "test_7", + "name": "Level 1: Create Hub", + "prompt": "Create a new Box Hub titled 'Research Center'.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 1, + "tools_required": [ + "POST /hubs" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_hubs", + "where": { + "title": { + "eq": "Research Center" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_8", + "name": "Level 1: Add Folder Tags", + "prompt": "Add the tags 'finance', 'investments', and 'quarterly' to the investments folder.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "GET /search", + "PUT /folders/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_folders", + "where": { + "id": { + "eq": "5610825569" + } + }, + "expected_changes": { + "tags": { + "to": { + "contains": "finance" + } + } + } + } + ] + }, + { + "id": "test_9", + "name": "Level 1: Get Folder Info", + "prompt": "Get details for the 'investments' folder and change its description to 'Audit Complete'.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "GET /search", + "PUT /folders/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_folders", + "where": { + "id": { + "eq": "5610825569" + } + }, + "expected_changes": { + "description": { + "to": { + "eq": "Audit Complete" + } + } + } + } + ] + }, + { + "id": "test_10", + "name": "Level 2: Comment and Task", + "prompt": "In the history area, find the plain-text study notes about Argentina's 2001 economic crisis. Add a comment 'Please review this note' to that file and then create a task 'Review content' for the same file.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "GET /search", + "POST /comments", + "POST /tasks" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_comments", + "where": { + "item_id": { + "eq": "5696874158" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "box_tasks", + "where": { + "item_id": { + "eq": "5696874158" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_11", + "name": "Level 2: Nested Folders", + "prompt": "Create a folder 'Project_Beta' in root, then create a subfolder 'Docs' inside it, and move 'interviewing tips FINAL.txt' into 'Docs'.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "POST /folders", + "POST /folders", + "GET /search", + "PUT /files/{id}" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "eq": "Project_Beta" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "eq": "Docs" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "1364279594" + } + }, + "expected_changes": { + "parent_id": { + "to": { + "ne": "1088403890" + } + } + } + } + ] + }, + { + "id": "test_12", + "name": "Level 2: Count Files and Set Description", + "prompt": "Count how many files are in the 'investments' folder and set the folder's description to the count.", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "GET /search", + "GET /folders/{id}/items", + "PUT /folders/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_folders", + "where": { + "id": { + "eq": "5610825569" + } + }, + "expected_changes": { + "description": { + "to": { + "ne": "" + } + } + } + } + ] + }, + { + "id": "test_13", + "name": "Level 1: List Hubs", + "prompt": "List all accessible hubs and create a folder named 'Hubs_Found_' in the root, where is the number of hubs found.", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "GET /hubs", + "POST /folders" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "contains": "Hubs_Found_" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_14", + "name": "Level 3: Find and Move All", + "prompt": "Find all files with 'fomc' in their name. Create a new folder named 'FOMC_Reports' in the root directory, and move all found files into it.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 6, + "tools_required": [ + "GET /search", + "POST /folders", + "PUT /files/{id}", + "PUT /files/{id}", + "PUT /files/{id}", + "PUT /files/{id}" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "eq": "FOMC_Reports" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "name": { + "contains": "fomc" + } + }, + "expected_changes": { + "parent_id": { + "to": { + "ne": "0" + } + } + } + } + ] + }, + { + "id": "test_15", + "name": "Level 4: Search Read Move", + "prompt": "Search for 'crisis' in my Box, read the text files found, and if any contains the year '2001' but is NOT already in the history folder, move it there.", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "GET /search", + "GET /files/{id}/content", + "GET /search", + "PUT /files/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "9979104500" + } + }, + "expected_changes": { + "parent_id": { + "to": { + "eq": "1660804823" + } + } + } + } + ] + }, + { + "id": "test_16", + "name": "Level 2: Hub Setup", + "prompt": "Create a Hub named 'Economic Data' and add the 'macroeconomics' folder to it.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "POST /hubs", + "GET /search", + "POST /hubs/{id}/manage_items" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_hubs", + "where": { + "title": { + "eq": "Economic Data" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "box_hub_items", + "where": { + "item_id": { + "eq": "1973339758" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_17", + "name": "Level 4: Find Duplicates, Delete Misfiled, Tag Correct", + "prompt": "Search for all plain-text files about Argentina's 2001 economic crisis. You should find two copies - one properly filed in the history folder and one misfiled in the root. Delete the misfiled copy, then read the correctly filed one. If it mentions 'Argentina', add the tag 'Latin_America' to it.", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 5, + "tools_required": [ + "GET /search", + "DELETE /files/{id}", + "GET /files/{id}/content", + "PUT /files/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "9979104500" + } + }, + "expected_changes": { + "item_status": { + "to": { + "eq": "trashed" + } + } + } + }, + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "5696874158" + } + }, + "expected_changes": { + "tags": { + "to": { + "contains": "Latin_America" + } + } + } + } + ] + }, + { + "id": "test_18", + "name": "Level 4: Rename Folder from CSV (CPI)", + "prompt": "In the investments area, locate the folder that contains macroeconomic CSV datasets. Find the CPI/price indexes CSV for December 2025, download/read it, and extract the first data row values for Series_reference and Series_title_1. Rename the macro-data folder to `macro_` + `_` + ``, but replace '.' with '_' in the Series_reference. Then set the folder's description to: `series=; title=`.", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "GET /search", + "GET /folders/{id}/items", + "GET /files/{id}/content", + "PUT /folders/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_folders", + "where": { + "id": { + "eq": "1973339758" + } + }, + "expected_changes": { + "name": { + "to": { + "eq": "macro_CPIM_SE901_Food" + } + }, + "description": { + "to": { + "contains": "CPIM.SE901" + } + } + } + } + ] + }, + { + "id": "test_19", + "name": "Level 3: Search and Rename Folder", + "prompt": "In the macroeconomics area, there is a dataset folder that contains dozens of 2018 Census CSV files (national highlights / totals by topic). Find that dataset folder and rename it to 'Census_2018_Data'.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "GET /search", + "GET /folders/{id}/items", + "PUT /folders/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_folders", + "where": { + "id": { + "eq": "9782984299" + } + }, + "expected_changes": { + "name": { + "to": { + "eq": "Census_2018_Data" + } + } + } + } + ] + }, + { + "id": "test_20", + "name": "Level 4: Upload TXT named from CSV (Transport)", + "prompt": "In the same macro-data folder, find the transport registrations CSV (it has columns like Series_reference, Period, Data_value). Download/read it and take the first data row values for Series_reference and Period. Upload a new small TXT file into the macro-data folder named `transport__.txt`, but replace '.' with '_' in both fields. The file content should include the extracted Series_reference, Period, and Data_value from that first row.", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "GET /search", + "GET /folders/{id}/items", + "GET /files/{id}/content", + "POST /files/content" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_files", + "where": { + "name": { + "eq": "transport_TPTA_S22IA_1970_12.txt" + }, + "parent_id": { + "eq": "1973339758" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_21", + "name": "Level 4: Read CSV and Comment", + "prompt": "Find the transport dataset CSV from April 2025 (in the investments/macroeconomics area). Download/read it, count the total number of lines (INCLUDING the header), and add a comment to the file exactly in the format: `Line count: 44761`.", + "type": "compositeEval", + "seed_template": "box_default", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "GET /search", + "GET /files/{id}/content", + "POST /comments" + ] + }, + "impersonate_user_id": "27512847635", + "assertions": [ + { + "diff_type": "added", + "entity": "box_comments", + "where": { + "item_id": { + "eq": "1421498350" + }, + "message": { + "eq": "Line count: 44761" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_22", + "name": "Level 3: Ambiguous Sorting", + "prompt": "Look at the files in the 'investments' folder. Rename the smallest file to 'smallest_file' (keep extension) and the largest file to 'largest_file' (keep extension).", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "GET /search", + "GET /folders/{id}/items", + "PUT /files/{id}", + "PUT /files/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "1064362959" + } + }, + "expected_changes": { + "name": { + "to": { + "eq": "smallest_file.csv" + } + } + } + }, + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "1490177849" + } + }, + "expected_changes": { + "name": { + "to": { + "eq": "largest_file.csv" + } + } + } + } + ] + }, + { + "id": "test_23", + "name": "Level 3: Ambiguous Folder Selection (No Delete)", + "prompt": "Create a folder named 'Backup' in the root directory, and another folder named 'Backup' inside the 'investments' folder. Then, rename the 'Backup' folder that is inside 'investments' to 'Backup_in_investments'.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "POST /folders", + "GET /search", + "POST /folders", + "PUT /folders/{id}" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "eq": "Backup" + }, + "parent_id": { + "eq": "0" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "eq": "Backup_in_investments" + }, + "parent_id": { + "eq": "5610825569" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_24", + "name": "Level 3: Dyslexic User Typo Fix", + "prompt": "Hey, I uploaded some ethics and philosophy notes to history readings recently. I'm dyslexic so I probably made spelling mistakes in the filenames - could you find them and fix any typos? I think there were a few files about moral philosophy, judgment, research ethics, that kind of stuff.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 6, + "tools_required": [ + "GET /search", + "PUT /files/{id}", + "PUT /files/{id}", + "PUT /files/{id}", + "PUT /files/{id}", + "PUT /files/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "6478815895" + } + }, + "expected_changes": { + "name": { + "to": { + "regex": "moral judge?ment in history\\.md" + } + } + } + }, + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "2228856784" + } + }, + "expected_changes": { + "name": { + "to": { + "regex": "moral judge?ment in history\\.docx" + } + } + } + }, + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "1956298215" + } + }, + "expected_changes": { + "name": { + "to": { + "regex": "moral judge?ment in history\\.pdf" + } + } + } + }, + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "8847291035" + } + }, + "expected_changes": { + "name": { + "to": { + "eq": "philosophy of science.md" + } + } + } + }, + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "9958302146" + } + }, + "expected_changes": { + "name": { + "to": { + "eq": "research ethics guidelines.txt" + } + } + } + } + ] + }, + { + "id": "test_25", + "name": "Level 3: Sort Misfiled Reading", + "prompt": "In the personal_final history area, there is a digital humanities reading that was stored directly under the main 'history' folder instead of under 'readings/digital humanities'. Find the misfiled text reading about digital history methods and move it into the 'digital humanities' folder under 'readings'.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "GET /search", + "GET /search", + "PUT /files/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "2797160615" + } + }, + "expected_changes": { + "parent_id": { + "to": { + "eq": "7905906319" + } + } + } + } + ] + }, + { + "id": "test_26", + "name": "Level 3: Organize Research Hub", + "prompt": "Create a new hub called 'Model Evaluations'. Find all the JSON files in the agent-diff-research folder that contain model evaluation results and add them to this new hub.", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "POST /hubs", + "GET /search", + "GET /folders/{id}/items", + "POST /hubs/{id}/manage_items" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_hubs", + "where": { + "title": { + "contains": "Model Evaluations" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "box_hub_items", + "where": { + "item_type": { + "eq": "file" + } + }, + "expected_count": { + "min": 8 + } + } + ] + }, + { + "id": "test_27", + "name": "Level 3: Cross-Folder Dedup", + "prompt": "In the readings folder under history, search for files with similar names across different subfolders (e.g., same base name in different topic folders). If you find duplicates by name, keep the one in the most appropriate topic folder and trash the others.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "GET /search", + "GET /folders/{id}/items", + "GET /folders/{id}/items", + "DELETE /files/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "item_status": { + "eq": "trashed" + } + }, + "expected_changes": { + "item_status": { + "to": { + "eq": "trashed" + } + } + } + } + ] + }, + { + "id": "test_28", + "name": "Level 3: Organize By Extension (Flatten)", + "prompt": "In the history/readings folder, reorganize all files by extension: create three folders 'PDFs', 'Word_Docs', and 'Markdown' directly in history/readings. Move ALL .pdf, .docx, and .md files from all subfolders into these new folders, flattening the structure. After moving the files, delete all the now-empty category subfolders.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 10, + "tools_required": [ + "GET /search", + "POST /folders", + "GET /folders/{id}/items", + "PUT /files/{id}", + "DELETE /folders/{id}" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "eq": "PDFs" + }, + "parent_id": { + "eq": "2113564020" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "eq": "Word_Docs" + }, + "parent_id": { + "eq": "2113564020" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "eq": "Markdown" + }, + "parent_id": { + "eq": "2113564020" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "box_folders", + "where": { + "id": { + "in": [ + "7905906319", + "3298967046", + "1031140335", + "2396378676", + "1088403890", + "7891120016" + ] + } + }, + "expected_changes": { + "item_status": { + "to": { + "eq": "trashed" + } + } + }, + "expected_count": 6 + } + ] + }, + { + "id": "test_29", + "name": "Level 3: Conditional Logic (Size)", + "prompt": "Check the size of the file named 'transport-april-2025-csv.csv' inside 'investments'. If it's larger than 1MB, rename it to 'large_transport.csv', otherwise rename it to 'small_transport.csv'.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "GET /search", + "PUT /files/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "1421498350" + } + }, + "expected_changes": { + "name": { + "to": { + "eq": "large_transport.csv" + } + } + } + } + ] + }, + { + "id": "test_30", + "name": "Level 3: Typo Fix (Computational)", + "prompt": "In the history readings under digital humanities, there is a markdown file whose filename misspells the word 'computational' (letters swapped). Find it (try a couple search queries) and fix the typo in the filename without changing the content.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "GET /search", + "GET /search", + "PUT /files/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "3266469077" + } + }, + "expected_changes": { + "name": { + "to": { + "eq": "computational approaches to hist research.md" + } + } + } + } + ] + }, + { + "id": "test_31", + "name": "Level 1: Upload History Note", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "GET /search", + "POST /files/content" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_files", + "where": { + "parent_id": { + "eq": "1660804823" + }, + "extension": { + "eq": "txt" + } + }, + "expected_count": 1 + } + ], + "prompt": "Upload a txt note saying 'Hi, I am working on history project' inside the history folder." + }, + { + "id": "test_32", + "name": "Level 1: Upload and Delete File (Trash)", + "prompt": "Upload a small text file named 'tmp_delete_me.txt' to the root folder with content 'delete-me'. Then delete the file.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "POST /files/content", + "DELETE /files/{id}" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_files", + "where": { + "name": { + "eq": "tmp_delete_me.txt" + }, + "item_status": { + "eq": "trashed" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_33", + "name": "Level 2: Upload New Version", + "prompt": "Download the '2001 crisis notes.txt' file, append the line 'UPDATED: Version 2' to its content, and upload it as a new version of the same file.", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "GET /search", + "GET /files/{id}/content", + "POST /files/{id}/content" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "5696874158" + } + }, + "expected_changes": { + "version_number": { + "to": { + "ne": "1" + } + } + }, + "ignore": [ + "sha_1", + "size", + "file_version_id" + ] + } + ] + }, + { + "id": "test_34", + "name": "Level 3: Remove Duplicate (Buenos Aires)", + "prompt": "In the history area, open the 'Buenos Aires' folder and identify any duplicate markdown files that appear to be copies of the same Dirty War class notes. Use clues like near-identical filenames and identical file size to decide which one is the duplicate copy. Keep the canonical original and delete/trash only the duplicate.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "GET /search", + "GET /folders/{id}/items", + "DELETE /files/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "3320893579" + } + }, + "expected_changes": { + "item_status": { + "to": { + "eq": "trashed" + } + } + } + } + ] + }, + { + "id": "test_35", + "name": "Level 3: Curate FOMC Hub", + "prompt": "Search for all FOMC minutes PDFs in the investments area. Create a hub called 'Fed Minutes Archive' and add all the FOMC documents to it.", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "GET /search", + "POST /hubs", + "POST /hubs/{id}/manage_items" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_hubs", + "where": { + "title": { + "contains": "Fed Minutes" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "box_hub_items", + "where": { + "item_name": { + "contains": "fomc" + } + }, + "expected_count": { + "min": 4 + } + } + ] + }, + { + "id": "test_36", + "name": "Level 2: Tag All PDFs", + "prompt": "Find all PDF files in the investments folder and its subfolders. Add the tag 'pdf-document' to each of them.", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 6, + "tools_required": [ + "GET /search", + "PUT /files/{id}", + "PUT /files/{id}", + "PUT /files/{id}", + "PUT /files/{id}", + "PUT /files/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "extension": { + "eq": "pdf" + }, + "tags": { + "contains": "pdf-document" + } + }, + "expected_changes": { + "tags": { + "to": { + "contains": "pdf-document" + } + } + } + } + ] + }, + { + "id": "test_37", + "name": "Level 2: Description From Name", + "prompt": "For all FOMC minutes PDFs in macroeconomics, set their description to include the date from their filename (e.g., 'FOMC minutes from January 2025').", + "type": "actionEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 5, + "tools_required": [ + "GET /search", + "PUT /files/{id}", + "PUT /files/{id}", + "PUT /files/{id}", + "PUT /files/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "name": { + "contains": "fomc" + } + }, + "expected_changes": { + "description": { + "to": { + "contains": "FOMC" + } + } + } + } + ] + }, + { + "id": "test_38", + "name": "Level 1: List File Comments", + "prompt": "List all comments on the Google 10-Q PDF in investments. Create a folder named 'File_Has__Comments' where is the number of comments found.", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "GET /search", + "GET /files/{id}/comments", + "POST /folders" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "contains": "Comments" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_39", + "name": "Level 4: Read and Extract Slogan", + "prompt": "Find the plain-text study notes about Argentina's 2001 economic crisis (in the history area). Download/read the file and identify the protest slogan used during the December uprising. Post a comment on that file with the exact slogan text.", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "GET /search", + "GET /files/{id}/content", + "POST /comments" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_comments", + "where": { + "item_id": { + "eq": "5696874158" + }, + "message": { + "contains": "Que se vayan todos" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_40", + "name": "Level 5: Economic Domain Organization", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 12, + "tools_required": [ + "GET /search", + "GET /files/{id}/content", + "GET /files/{id}/content", + "POST /folders", + "POST /folders", + "POST /folders", + "PUT /files/{id}", + "PUT /files/{id}", + "POST /hubs", + "POST /hubs/{id}/manage_items", + "POST /files/content" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "eq": "Economic_Domains" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "contains": "Domain_" + } + }, + "expected_count": { + "min": 2 + } + }, + { + "diff_type": "added", + "entity": "box_hubs", + "where": { + "title": { + "contains": "Economic Data Index" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "box_files", + "where": { + "name": { + "eq": "domain_manifest.txt" + } + }, + "expected_count": 1 + } + ], + "prompt": "In the investments/macroeconomics area, locate all CSV files containing economic time-series data (files with columns 'Series_reference', 'Period', 'Data_value'). For each CSV file, download it and extract the domain code from the first data row's Series_reference value (the domain is everything before the first dot, e.g., 'CPIM' from 'CPIM.SE9A', or 'TTRC' from 'TTRC.S1A1A'). Create a new folder called 'Economic_Domains' in the root directory. Inside it, create one subfolder for each unique domain you discover, named exactly Domain_ (e.g., 'Domain_CPIM'). Move each CSV file into its corresponding domain subfolder, and add the tag domain: to each file (e.g., tag domain:CPIM for files in the CPIM domain). After organising all files, create a Hub named 'Economic Data Index' and add only the domain subfolders that contain 2 or more files to this hub. Finally, upload a new text file named 'domain_manifest.txt' into the 'Economic_Domains' folder. This manifest should list each domain alphabetically, one per line, in the format: : file(s) | Hub: ." + }, + { + "id": "test_41", + "name": "Level 4: Cryptozoology Expedition Organization", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 10, + "tools_required": [ + "GET /search", + "GET /files/{id}/content", + "PUT /files/{id}", + "POST /folders", + "POST /folders", + "PUT /files/{id}", + "POST /comments", + "DELETE /files/{id}", + "PUT /folders/{id}", + "POST /hubs", + "POST /hubs/{id}/manage_items" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "eq": "Expeditions_2025" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "eq": "Cryptid_Sightings" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "3302188295" + } + }, + "expected_changes": { + "tags": { + "to": { + "ne": null + } + } + }, + "ignore": [ + "parent_id" + ] + }, + { + "diff_type": "added", + "entity": "box_comments", + "where": { + "item_id": { + "eq": "3302188295" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "1891733744" + } + }, + "expected_changes": { + "item_status": { + "to": { + "eq": "trashed" + } + } + } + }, + { + "diff_type": "changed", + "entity": "box_folders", + "where": { + "id": { + "eq": "4313494130" + } + }, + "expected_changes": { + "name": { + "to": { + "contains": "archived" + } + } + } + }, + { + "diff_type": "added", + "entity": "box_hubs", + "where": { + "title": { + "contains": "2025 Field Research Index" + } + }, + "expected_count": 1 + } + ], + "prompt": "Your research institute's Box storage is disorganized. Somewhere in the archive, there are field research documents from cryptozoology expeditions \u2014 specifically sighting reports that may contain photographic evidence of unidentified creatures. Your task: Find a cryptozoology sighting report (search for relevant terms). Download and read its content. If the document mentions \"photographic evidence\" anywhere in the text, it should be tagged as verified; otherwise tag it unverified. Create a proper organizational structure: a main folder \"Expeditions_2025\" in the root, with a subfolder \"Cryptid_Sightings\" inside it. Move the sighting report into this subfolder with the appropriate tag. Add a comment to the file documenting your review: include today's date and the expedition name (which you'll find mentioned in the document's content). After moving the file, check its original location. If there are any obvious duplicate files (backup copies with similar names), delete them to clean up. Then rename the original source folder by appending \"_archived\" to its name. Finally, create a Hub called \"2025 Field Research Index\" and add the \"Expeditions_2025\" folder to it for easy access." + }, + { + "id": "test_42", + "name": "Level 4: Tea Ceremony Ro Season", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 9, + "tools_required": [ + "GET /hubs", + "GET /search", + "PUT /files/{id}", + "POST /comments", + "GET /search", + "POST /comments", + "DELETE /files/{id}", + "POST /hubs/{id}/manage_items" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "3180616460" + } + }, + "expected_changes": { + "tags": { + "to": { + "contains": "winter_season" + } + }, + "description": { + "to": { + "contains": "Ro season" + } + } + }, + "ignore": [ + "parent_id", + "shared_link" + ] + }, + { + "diff_type": "added", + "entity": "box_comments", + "where": { + "item_id": { + "eq": "3180616460" + }, + "message": { + "contains": "charcoal" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "box_comments", + "where": { + "item_id": { + "eq": "3309661031" + }, + "message": { + "contains": "Hatsugama" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "1018029878" + } + }, + "expected_changes": { + "item_status": { + "to": { + "eq": "trashed" + } + } + } + }, + { + "diff_type": "added", + "entity": "box_hub_items", + "where": { + "item_id": { + "eq": "3180616460" + } + }, + "expected_count": 1 + } + ], + "prompt": "The tea ceremony school is transitioning to Ro season (\u7089, the winter hearth period). You need to help organize the digital materials for this important seasonal change. First, find which hub already exists for tea ceremony seasonal materials \u2014 you'll need to add updated content there later. Locate the winter preparation guide in the chado folder. Verify it's the current document (not a draft), then update it with the tag winter_season and set its description to \"Ro season preparation - \u7089 (November-April)\". Add a comment to the winter preparation guide noting: \"Ready for Ro season (\u7089) - charcoal placement verified.\" Next, find the utensil inventory file. Add a comment reminding the team: \"Utensils require cleaning before Hatsugama ceremony.\" There's an old draft file in the same folder that has been superseded \u2014 it's clearly marked as obsolete. Delete it to clean up the archive. Finally, add the winter preparation guide to the seasonal materials hub so it's easily accessible to all practitioners." + }, + { + "id": "test_43", + "name": "Level 4: Moog Minimoog Restoration", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 10, + "tools_required": [ + "GET /search", + "GET /folders/{id}", + "GET /collections", + "POST /comments", + "PUT /comments/{id}", + "PUT /tasks/{id}", + "PUT /tasks/{id}", + "PUT /files/{id}", + "POST /hubs" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_comments", + "where": { + "item_id": { + "eq": "1062973727" + }, + "message": { + "contains": "C47" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "2666248889" + } + }, + "expected_changes": { + "tags": { + "to": { + "contains": "restoration-complete" + } + } + } + }, + { + "diff_type": "added", + "entity": "box_hubs", + "where": { + "title": { + "contains": "Synth Restoration Archive" + } + }, + "expected_count": 1 + } + ], + "prompt": "You're helping manage the documentation for a Moog Minimoog restoration project. The synth is from 1974 (serial 10847) and the team has been tracking repairs and calibrations in Box. First, search for files related to the Minimoog or Moog restoration. Get the details of the project folder to understand what's there. Check if any synth restoration documents are in your favorites collection. On the capacitor replacement log, add a new comment documenting: \"C47 replaced with Nichicon 47\u00b5F/25V - oscillator section complete.\" Then find the existing comment about \"C31 verified\" and update it to add: \"- measurement confirmed at 0.98x nominal.\" For the filter calibration procedure file, there are two pending tasks. Find the task about \"resonance calibration\" and mark it as complete. Find the task about \"cutoff tracking\" and update its message to: \"Cutoff tracking verified \u00b13 cents across 5 octaves - exceeds spec.\" Add the tag restoration-complete to the oscillator schematic notes file since that section is now finished. Finally, create a new hub called \"Synth Restoration Archive\" to centralize all vintage instrument documentation going forward." + }, + { + "id": "test_44", + "name": "Level 5: Rare Books Conservation Audit", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 12, + "tools_required": [ + "GET /users/me", + "GET /search", + "GET /files/{id}", + "GET /files/{id}", + "GET /collections", + "POST /comments", + "PUT /comments/{id}", + "DELETE /comments/{id}", + "GET /files/{id}/content", + "POST /files/{id}/content", + "GET /hubs/{id}", + "PUT /hubs/{id}", + "DELETE /folders/{id}" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_comments", + "where": { + "item_id": { + "eq": "1701916585" + }, + "message": { + "contains": "Audit initiated" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "1172138282" + } + }, + "expected_changes": { + "version_number": { + "to": { + "ne": "1" + } + } + }, + "ignore": [ + "sha_1", + "size", + "file_version_id" + ] + }, + { + "diff_type": "changed", + "entity": "box_hubs", + "where": { + "id": { + "eq": "777777" + } + }, + "expected_changes": { + "description": { + "to": { + "contains": "Q4 2025" + } + } + }, + "ignore": [ + "updated_at" + ] + }, + { + "diff_type": "changed", + "entity": "box_folders", + "where": { + "id": { + "eq": "7983826892" + } + }, + "expected_changes": { + "item_status": { + "to": { + "eq": "trashed" + } + } + } + } + ], + "prompt": "The rare book conservation lab is running its year-end audit. You need to aggregate treatment data and update the annual summary. First, confirm your identity \u2014 who are you logged in as? You'll need this for audit attribution. Locate the conservation lab folder and check its contents. Get the details of both quarterly humidity logs (Q3 and Q4 2025) \u2014 each contains a \"BOOKS TREATED THIS QUARTER\" count that you'll need. Check if any conservation documents are currently in your favorites collection. On the incunabula condition report, add a comment: \"Audit initiated by [your username] on [today's date].\" Also find the existing comment about \"Budget review pending\" and update it to: \"Budget approved - Q3+Q4 aggregated total: [X] books\" where X is the sum of books treated in Q3 and Q4. There's an outdated comment on the condition report marked \"[OUTDATED]\" with incorrect information \u2014 delete it. Download the annual summary file, update it with the correct Q3 and Q4 treatment counts (extracted from the humidity logs), and upload it as a new version. The total YTD should now reflect all four quarters. Find the \"Conservation Lab Archive\" hub and update its description to: \"Rare book conservation documentation - Last audit: Q4 2025.\" Finally, there's a deprecated folder from 2024 that's scheduled for deletion \u2014 remove it." + }, + { + "id": "test_45", + "name": "Level 4: History Archive Reorganization", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 10, + "tools_required": [ + "GET /search", + "GET /search", + "PUT /folders/{id}", + "GET /folders/{id}/items", + "PUT /files/{id}", + "POST /folders", + "POST /folders", + "GET /files/{id}/tasks", + "DELETE /tasks/{id}", + "GET /hubs" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_folders", + "where": { + "id": { + "eq": "2228309175" + } + }, + "expected_changes": { + "parent_id": { + "to": { + "eq": "1206853609" + } + }, + "name": { + "to": { + "eq": "Legacy_Materials" + } + } + } + }, + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "eq": "Archive_Cleanup_2026" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "eq": "Duplicates_Review" + } + }, + "expected_count": 1 + } + ], + "prompt": "Your history research archive in Box is disorganized and needs cleanup. You have redundant folders, misfiled documents, and obsolete tasks cluttering the system. In the history area, there are two folders that seem to contain overlapping Buenos Aires research: one called \"BA\" and one called \"Buenos Aires\". Consolidate them by moving the entire \"BA\" folder into \"Buenos Aires\" as a subfolder, then rename the \"BA\" folder to \"Legacy_Materials\" to indicate it contains older content. In the readings area, list the contents and look for organizational issues. The file \"digital history methods - week 3 reading.txt\" is sitting at the top level of the history folder but belongs in the \"digital humanities\" subfolder under readings. Move this file to its correct location. Create a new folder called \"Archive_Cleanup_2026\" in the root of the history folder to track this reorganization effort. Inside it, create a subfolder called \"Duplicates_Review\" where duplicate files can be moved for review. Look through the seed for files marked as duplicates (files with \"(1)\" in the name or \"backup\"/\"copy\" in the name). These files have obsolete tasks attached. Find and delete the tasks marked \"[OBSOLETE]\" or \"[OUTDATED]\" since the reorganization will handle these files differently. Check what hubs currently exist \u2014 you may want to add reorganized materials to an appropriate hub later." + }, + { + "id": "test_46", + "name": "Level 2: Conservation Audit Shared Link", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 5, + "tools_required": [ + "GET /users/me", + "GET /search", + "PUT /files/{id}", + "GET /collections", + "PUT /files/{id}" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "1172138282" + } + }, + "expected_changes": { + "shared_link": { + "from": { + "exists": false + }, + "to": { + "exists": true + } + } + }, + "ignore": [ + "collections" + ] + } + ], + "prompt": "You are preparing the final conservation audit for external review. First, confirm your identity \u2014 get your current user details. Locate the \"Annual Summary 2025\" file in the rare books folder. Create a shared link for this file with access set to \"open\" so external auditors can view it. Then, check your \"Favorites\" collection. If the Annual Summary is not already in your favorites, add it to the collection for quick access. Finally, verify the file's details to confirm the shared link is active and the file is listed in the collection." + }, + { + "id": "test_47", + "name": "Level 4: Demographics 2025 Reorganization", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 11, + "tools_required": [ + "POST /hubs", + "GET /search", + "PUT /folders/{id}", + "POST /folders", + "GET /search", + "GET /files/{id}/content", + "PUT /files/{id}", + "POST /comments", + "GET /search", + "PUT /files/{id}", + "POST /files/content", + "PUT /hubs/{id}" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "box_hubs", + "where": { + "title": { + "contains": "Demographics 2025" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "box_folders", + "where": { + "id": { + "eq": "9782984299" + } + }, + "expected_changes": { + "name": { + "to": { + "eq": "Census_2018_Master" + } + } + } + }, + { + "diff_type": "added", + "entity": "box_folders", + "where": { + "name": { + "eq": "National_Highlights" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "box_comments", + "where": { + "item_id": { + "eq": "1421498350" + }, + "message": { + "contains": "Transport series" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "box_files", + "where": { + "name": { + "eq": "hub_manifest.txt" + } + }, + "expected_count": 1 + } + ], + "prompt": "You are reorganizing the institute's demographic data assets. The goal is to consolidate disparate 2018 Census files and April 2025 transport data into a unified structure. First, create a new Hub called \"Demographics 2025\". This will be the central access point. In the macroeconomics area, there is a folder containing 2018 Census CSV files (look for a folder with many CSVs). Rename this folder to \"Census_2018_Master\". Inside \"Census_2018_Master\", create a subfolder called \"National_Highlights\". Now, search for and identify the \"transport-april-2025-csv.csv\" file. Download/read it to extract the first row's Series_reference. Task 1 (Left Branch): Move the transport file into \"Census_2018_Master\". Add a comment to it: \"Transport series [Series_reference] included for cross-reference.\" Task 2 (Right Branch): Find any file in the census folder that contains \"population\" in its name. Move it into the \"National_Highlights\" subfolder you created. Finally, create a new text file named \"hub_manifest.txt\" inside \"Census_2018_Master\" with the content: \"Consolidated: Census 2018 + Transport 2025.\" Update the \"Demographics 2025\" hub description to: \"Unified demographic and transport datasets.\" " + }, + { + "id": "test_48", + "name": "Level 3: Google Earnings Size Audit", + "type": "compositeEval", + "seed_template": "box_default", + "impersonate_user_id": "27512847635", + "metadata": { + "min_tool_calls": 8, + "tools_required": [ + "GET /search", + "GET /files/{id}", + "PUT /files/{id}", + "POST /hubs", + "GET /search", + "POST /hubs/{id}/manage_items", + "POST /folders", + "POST /files/content", + "POST /comments" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "box_files", + "where": { + "id": { + "eq": "2748861636" + } + }, + "expected_changes": { + "tags": { + "to": { + "ne": null + } + } + } + }, + { + "diff_type": "added", + "entity": "box_hubs", + "where": { + "title": { + "contains": "Q2 Financial Review" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "box_files", + "where": { + "name": { + "eq": "audit_summary.txt" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "box_comments", + "where": { + "item_id": { + "eq": "2748861636" + }, + "message": { + "contains": "Audit status" + } + }, + "expected_count": 1 + } + ], + "prompt": "You are auditing the \"investments\" folder for the upcoming financial review. Locate the Google earnings report PDF (goog-10-q-q2-2025.pdf). Get its file details to check its size. Condition 1: If the file size is greater than 1MB (1,048,576 bytes), add the tag large_audit. Condition 2: If the file size is less than or equal to 1MB, add the tag standard_audit. Next, create a new Hub called \"Q2 Financial Review\". Search for all files with \"fomc\" in their name. For each file found, add it to the \"Q2 Financial Review\" hub. Find the \"Analysis_2026\" folder (if it exists, otherwise create it). Inside, upload a new text file named audit_summary.txt. The content should be: \"Audit complete. Google report size: [SIZE_IN_BYTES] bytes.\" Finally, add a comment to the Google earnings report: \"Audit status: Tagged based on size ([SIZE_IN_BYTES]b).\" " + } + ] +} \ No newline at end of file diff --git a/experiments/kdd 2026/qualitative_analysis/test_suites/calendar_bench.json b/experiments/kdd 2026/qualitative_analysis/test_suites/calendar_bench.json new file mode 100644 index 0000000..8410c33 --- /dev/null +++ b/experiments/kdd 2026/qualitative_analysis/test_suites/calendar_bench.json @@ -0,0 +1,6079 @@ +{ + "id": "calendar-bench", + "name": "Calendar Bench", + "description": "Benchmark tests for Google Calendar MCP operations", + "service": "calendar", + "ignore_fields": { + "global": [ + "created_at", + "updated_at", + "etag", + "html_link", + "ical_uid", + "sequence", + "start_datetime", + "end_datetime" + ] + }, + "tests": [ + { + "id": "test_1", + "name": "Cosmic Voyagers Astronomy Club - Multi-step calendar organization", + "prompt": "Our astronomy club is getting serious and we need proper organization. First, show me what calendars I have - I want to make sure we're not duplicating anything. Create a dedicated calendar called 'Cosmic Voyagers HQ' for all our stargazing activities. Yuki (yuki@test.com) is my co-organizer, so give her write access to the new calendar. The Perseid meteor shower is this Saturday at midnight - create an event called 'Perseid Meteor Shower Watch Party' for it on our new calendar. Before the main event, we need to set up the telescopes, but it has to work with Oleksandra's schedule (oleksandra@test.com) - find when she's free her Saturday evening and create a 'Telescope Alignment Ceremony' at that time (use Oleksandra's timezone). The duration of the event has to be 1.5 hours. Oh, I just remembered - the watch party location is confirmed as 'Hillcrest Observatory Field', so update that event. Also, there's still that embarrassing 'Failed Rocket Launch Viewing (Cancelled)' event on my main calendar from when SpaceX scrubbed last month - you know what to do with it.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Cosmic Voyagers HQ" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "yuki@test.com" + }, + "role": { + "eq": "writer" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Perseid Meteor Shower Watch Party" + }, + "start.dateTime": { + "contains": "2018-06-24T00:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + }, + "location": { + "contains": "Hillcrest Observatory Field" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Telescope Alignment Ceremony" + }, + "start.dateTime": { + "contains": "2018-06-23T19:30" + }, + "end.dateTime": { + "contains": "2018-06-23T21:00" + }, + "start.timeZone": { + "eq": "Europe/Kyiv" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "event_failed_rocket" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 8, + "tools_required": [ + "calendarList.list", + "calendars.insert", + "acl.insert", + "events.insert", + "freeBusy.query", + "events.patch", + "events.delete" + ] + } + }, + { + "id": "test_2", + "name": "Green Thumbs Urban Garden Collective - Complex garden coordination", + "prompt": "Tomato season waits for no one - create 'Sacred Tomato Planting Ritual' on my calendar for Sunday morning immediately. Then show me what else I have this week so we don't double-book the garden crew. That tomato event needs more details - update it to say 'Bring your own seedlings and prayers' in the description. For the compost committee, I need to find a time Saturday when both Kenji (kenji@test.com) and Oksana (oksana@test.com) can make it. Speaking of which, which of my calendars is the 'Harvest Schedule' one? Once you find it, create 'Compost Communion: The Turning of the Heap' on that calendar at whatever time works for Kenji and Oksana (set in Kenji's timezone, please). Make sure the duration of the event is 2 hours. Bad news - 'Weed Warrior Wednesday' got rained out, so delete it from the Harvest Schedule and confirm it's actually gone. We have a new collective member, Chisom (chisom@test.com), who needs to see the harvest calendar but shouldn't edit it - set that up. Also, I completely forgot to invite Dariush (dariush@test.com) to the compost thing - he's our soil whisperer, please add him. One last thing: we're starting a new experimental growing project and need a calendar called 'Greenhouse Experiments' for it.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Sacred Tomato Planting Ritual" + }, + "calendar_id": { + "eq": "test.user@test.com" + }, + "description": { + "i_contains": "seedlings" + }, + "start.dateTime": { + "contains": "2018-06-17" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Compost Communion" + }, + "calendar_id": { + "eq": "cal_harvest_schedule" + }, + "start.dateTime": { + "contains": "2018-06-23" + }, + "end.dateTime": { + "contains": "2018-06-23" + }, + "start.timeZone": { + "eq": "Asia/Tokyo" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_event_attendees", + "where": { + "email": { + "eq": "dariush@test.com" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "event_weed_warrior" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "chisom@test.com" + }, + "role": { + "eq": "reader" + }, + "calendar_id": { + "eq": "cal_harvest_schedule" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Greenhouse Experiments" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 11, + "tools_required": [ + "calendarList.list", + "events.insert", + "events.list", + "events.patch", + "freeBusy.query", + "events.delete", + "acl.insert", + "calendars.insert" + ] + } + }, + { + "id": "test_3", + "name": "Dice & Dragons Tabletop Gaming Guild - Campaign scheduling", + "prompt": "The guild needs organizing. First, remind me which calendars I have - I'm looking for our 'Dungeon Masters Guild' one. We're kicking off a new campaign called 'The Curse of the Crimson Dice' and I need to schedule Session Zero for Friday at 7pm on that calendar. The duration should be 3 hours. Amara (amara@test.com) offered to run a one-shot this weekend - find when she's free and schedule 'Amara's Epic One-Shot Adventure' for 4 hours at that time on the guild calendar (use Amara's timezone). Oh, and that Session Zero event needs more info - update the description to say 'Bring character concepts. Snacks provided. No phones at the table.' I want to see all the sessions we have planned this month on the guild calendar. Hiroshi (hiroshi@test.com) has been running great sessions and deserves to schedule his own games now - give him edit access to the Dungeon Masters Guild calendar. That old 'TPK Recovery Support Group (Postponed Indefinitely)' event is still sitting there as a bad joke from when we had that campaign wipe, and it should not be sitting there anymore. Finally, we've been mixing board game nights with RPG sessions and it's confusing people. Use the existing Board Game Bazaar calendar (ID cal_board_game_bazaar) for non-RPG gaming (create it if it doesn't exist). Then scan every game event on the Dungeon Masters Guild calendar: each event description is tagged 'Type: RPG' or 'Type: Non-RPG'. Copy every Non-RPG event to Board Game Bazaar; if it is recurring, copy it as a recurring event there too.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Curse of the Crimson Dice" + }, + "description": { + "i_contains": "character concepts" + }, + "calendar_id": { + "eq": "cal_dungeon_masters" + }, + "start.dateTime": { + "contains": "2018-06-22T19:00" + }, + "end.dateTime": { + "contains": "2018-06-22T22:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Amara's Epic One-Shot Adventure" + }, + "calendar_id": { + "eq": "cal_dungeon_masters" + }, + "start.dateTime": { + "contains": "2018-06-24T14:00" + }, + "end.dateTime": { + "contains": "2018-06-24T18:00" + }, + "start.timeZone": { + "eq": "Africa/Lagos" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "hiroshi@test.com" + }, + "role": { + "eq": "writer" + }, + "calendar_id": { + "eq": "cal_dungeon_masters" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "event_tpk_recovery" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Board Game Brawl Night" + }, + "calendar_id": { + "eq": "cal_board_game_bazaar" + }, + "recurrence": { + "contains": "RRULE:FREQ=WEEKLY;BYDAY=MO" + }, + "start.dateTime": { + "contains": "2018-06-18T19:00" + }, + "end.dateTime": { + "contains": "2018-06-18T21:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Catan Quarry Trade" + }, + "calendar_id": { + "eq": "cal_board_game_bazaar" + }, + "start.dateTime": { + "contains": "2018-06-20T18:00" + }, + "end.dateTime": { + "contains": "2018-06-20T20:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Meeple Market Mixer" + }, + "calendar_id": { + "eq": "cal_board_game_bazaar" + }, + "recurrence": { + "contains": "RRULE:FREQ=WEEKLY;BYDAY=FR" + }, + "start.dateTime": { + "contains": "2018-06-22T18:00" + }, + "end.dateTime": { + "contains": "2018-06-22T20:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Ticket to Ride Summit" + }, + "calendar_id": { + "eq": "cal_board_game_bazaar" + }, + "start.dateTime": { + "contains": "2018-06-23T17:00" + }, + "end.dateTime": { + "contains": "2018-06-23T19:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "RPG Legends League" + }, + "calendar_id": { + "eq": "cal_board_game_bazaar" + } + }, + "expected_count": 0 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "RPG: Mirefall Campaign" + }, + "calendar_id": { + "eq": "cal_board_game_bazaar" + } + }, + "expected_count": 0 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "RPG: Iron Citadel" + }, + "calendar_id": { + "eq": "cal_board_game_bazaar" + } + }, + "expected_count": 0 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "RPG: Ember Vale Prelude" + }, + "calendar_id": { + "eq": "cal_board_game_bazaar" + } + }, + "expected_count": 0 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_dungeon_rpg_legend" + }, + "calendar_id": { + "eq": "cal_dungeon_masters" + } + }, + "expected_count": 0 + }, + { + "diff_type": "removed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_dungeon_rpg_legend" + }, + "calendar_id": { + "eq": "cal_dungeon_masters" + } + }, + "expected_count": 0 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_dungeon_rpg_legend" + }, + "calendar_id": { + "eq": "cal_dungeon_masters" + } + }, + "expected_count": 0 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_dungeon_rpg_mire" + }, + "calendar_id": { + "eq": "cal_dungeon_masters" + } + }, + "expected_count": 0 + }, + { + "diff_type": "removed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_dungeon_rpg_mire" + }, + "calendar_id": { + "eq": "cal_dungeon_masters" + } + }, + "expected_count": 0 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_dungeon_rpg_mire" + }, + "calendar_id": { + "eq": "cal_dungeon_masters" + } + }, + "expected_count": 0 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_dungeon_rpg_iron_citadel" + }, + "calendar_id": { + "eq": "cal_dungeon_masters" + } + }, + "expected_count": 0 + }, + { + "diff_type": "removed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_dungeon_rpg_iron_citadel" + }, + "calendar_id": { + "eq": "cal_dungeon_masters" + } + }, + "expected_count": 0 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_dungeon_rpg_iron_citadel" + }, + "calendar_id": { + "eq": "cal_dungeon_masters" + } + }, + "expected_count": 0 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_dungeon_rpg_ember_prelude" + }, + "calendar_id": { + "eq": "cal_dungeon_masters" + } + }, + "expected_count": 0 + }, + { + "diff_type": "removed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_dungeon_rpg_ember_prelude" + }, + "calendar_id": { + "eq": "cal_dungeon_masters" + } + }, + "expected_count": 0 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_dungeon_rpg_ember_prelude" + }, + "calendar_id": { + "eq": "cal_dungeon_masters" + } + }, + "expected_count": 0 + } + ], + "metadata": { + "min_tool_calls": 13, + "tools_required": [ + "calendarList.list", + "events.insert", + "freeBusy.query", + "events.patch", + "events.list", + "acl.insert", + "events.delete" + ] + } + }, + { + "id": "test_4", + "name": "Celluloid Dreams Film Festival - Large scale event coordination", + "prompt": "The Celluloid Dreams Film Festival is in full swing and I'm drowning in logistics. First, find our main festival calendar - it's called 'Celluloid Dreams Festival 2018'. I need you to go through the entire screening schedule and tell me exactly how many films are showing at the 'Noir Dungeon' venue - I'm worried we overbooked that theater. While you're at it, create an emergency event called 'Emergency Projector Repair: The Reel Must Go On' for 2 hours on Saturday afternoon on the festival calendar. Takeshi (takeshi@test.com) is our miracle-worker projectionist - check when he's free Saturday and schedule the repair during his available time (use his timezone). Add him as an attendee to that repair event with a note saying 'Bring spare bulbs and prayers' in the description. Here's a problem: we have this highly anticipated screening of 'The Last Samurai of Saturn' - find it in our schedule and tell me when it's showing. Also, delete all the 'Intermission: Existential Crisis (15 min)' events - we're cutting breaks to squeeze in more films. Olena (olena@test.com) from The Kyiv Film Review needs to see our complete schedule for her coverage - give her read access to the festival calendar. Create a new calendar called 'Green Room Chaos' for backstage crew coordination. Oh, and once you've found 'The Last Samurai of Saturn', move it to the same venue as our most popular screening, 'Epic Journey to the Stars' - ticket demand is through the roof.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Emergency Projector Repair" + }, + "description": { + "i_contains": "spare bulbs" + }, + "calendar_id": { + "eq": "cal_celluloid_dreams" + }, + "start.dateTime": { + "contains": "2018-06-23T14:00" + }, + "end.dateTime": { + "contains": "2018-06-23T16:00" + }, + "start.timeZone": { + "eq": "Asia/Tokyo" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_event_attendees", + "where": { + "email": { + "eq": "takeshi@test.com" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "event_film_022" + } + }, + "expected_changes": { + "location": { + "to": { + "contains": "Grand Aurora Theater" + } + } + }, + "expected_count": 1, + "ignore": [ + "attendees", + "color_id", + "description", + "end", + "recurrence", + "reminders", + "start", + "status", + "summary", + "transparency", + "visibility" + ] + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "event_intermission_1" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "event_intermission_2" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "olena@test.com" + }, + "role": { + "eq": "reader" + }, + "calendar_id": { + "eq": "cal_celluloid_dreams" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Green Room Chaos" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 11, + "tools_required": [ + "calendarList.list", + "events.list", + "freeBusy.query", + "events.insert", + "events.patch", + "events.delete", + "acl.insert", + "calendars.insert" + ] + } + }, + { + "id": "test_5", + "name": "Symposium of Infinite Curiosity - Academic conference coordination", + "prompt": "The Symposium of Infinite Curiosity is three weeks away and the program is chaos. Find our main calendar - 'Symposium of Infinite Curiosity 2018'. We have sessions scheduled and I need an exact count of how many are in the 'Quantum' track (they'll have [Quantum] in the title). Add Mei-Lin's opening keynote - it's called 'Keynote: The Heresy of Obvious Conclusions' and should be Day 1 (Monday June 18) at 8am, lasting 1 hour. Update that keynote with a description: 'Mandatory attendance for all track chairs. Coffee will be existential.' Bogdan (bogdan@test.com) and Ravi (ravi@test.com) need to meet urgently on Day 2 (Tuesday June 19) afternoon to discuss a problematic submission - find when they're both free and create 'Secret Tribunal of the Program Committee' for 2 hours at that time on the symposium calendar. Dr. Chiamaka (chiamaka@test.com) is presenting four different papers across the conference - tell me when each of her sessions is. Someone finally noticed the irony: 'Workshop: Introduction to Procrastination (Postponed)' - delete it. Create a private calendar called 'Speakers Green Room of Mild Panic' for backstage coordination. Ingrid (ingrid@test.com) just joined as volunteer coordinator - give her edit access to the main symposium calendar. Chiamaka's first presentation needs to move to the same venue as 'Panel: Temporal Causality Roundtable' \u2014 but only if that venue is free at the same time. If that panel already occupies that venue at that time, move Chiamaka's first presentation to 'Annex of Temporal Studies' instead.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Heresy of Obvious Conclusions" + }, + "description": { + "i_contains": "existential" + }, + "calendar_id": { + "eq": "cal_symposium_curiosity" + }, + "start.dateTime": { + "contains": "2018-06-18T08:00" + }, + "end.dateTime": { + "contains": "2018-06-18T09:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Secret Tribunal" + }, + "calendar_id": { + "eq": "cal_symposium_curiosity" + }, + "start.dateTime": { + "contains": "2018-06-19T15:00" + }, + "end.dateTime": { + "contains": "2018-06-19T17:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "event_procrastination_workshop" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "event_chiamaka_pres_1" + } + }, + "expected_changes": { + "location": { + "to": { + "contains": "Annex of Temporal Studies" + } + } + }, + "ignore": [ + "attendees", + "color_id", + "description", + "end", + "recurrence", + "reminders", + "start", + "status", + "summary", + "transparency", + "visibility" + ] + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "ingrid@test.com" + }, + "role": { + "eq": "writer" + }, + "calendar_id": { + "eq": "cal_symposium_curiosity" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Speakers Green Room" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 12, + "tools_required": [ + "calendarList.list", + "events.list", + "events.insert", + "events.patch", + "freeBusy.query", + "events.delete", + "calendars.insert", + "acl.insert" + ] + } + }, + { + "id": "test_6", + "name": "Thunderwave Music Festival - Multi-stage festival coordination", + "prompt": "Thunderwave Festival is about to explode and I need clarity on the chaos. Find the 'Thunderwave Festival 2018' calendar. We have performances booked across 6 stages and I need to know exactly how many acts are playing the 'Volcano Stage' - go through the schedule and count them. Kofi (kofi@test.com) is our Volcano Stage manager - check when he's free Saturday afternoon (June 16) because we need an emergency sound check. We just confirmed a secret sunrise set - create 'Sacred Sound Ritual: DJ Nebula Sunrise Set' for Sunday June 17 at 5am, lasting 2 hours, on 'Ethereal Meadow Stage'. I'm worried we accidentally dropped some metal bands from the lineup. Search the schedule and find every act with [METAL] in the title - tell me the count. For the sunrise set, add Yuna (yuna@test.com) and Petro (petro@test.com) as attendees - they're running lights and sound. Good news: 'The Amplifier Incident Investigation (Staff Only)' can be deleted - we found the culprit (it was a rogue beer). Sakura (sakura@test.com) is our festival photographer and needs to see the complete schedule to plan her shots - give her read access to the Thunderwave calendar. Finally, create a private calendar called 'Artist Hospitality Demands and Disasters' for tracking the ridiculous rider requests.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "DJ Nebula" + }, + "calendar_id": { + "eq": "cal_thunderwave_festival" + }, + "location": { + "contains": "Ethereal Meadow" + }, + "start.dateTime": { + "contains": "2018-06-17T05:00" + }, + "end.dateTime": { + "contains": "2018-06-17T07:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_event_attendees", + "where": { + "email": { + "eq": "yuna@test.com" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_event_attendees", + "where": { + "email": { + "eq": "petro@test.com" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "event_amplifier_incident" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "sakura@test.com" + }, + "role": { + "eq": "reader" + }, + "calendar_id": { + "eq": "cal_thunderwave_festival" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Artist Hospitality" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 9, + "tools_required": [ + "calendarList.list", + "events.list", + "freeBusy.query", + "events.insert", + "events.delete", + "acl.insert", + "calendars.insert" + ] + } + }, + { + "id": "test_7", + "name": "Crypto-Zoology Summit - Mythical creatures research conference", + "prompt": "We're hosting the Intergalactic Crypto-Zoology Summit and I need you to set up the schedule. Find the 'Crypto-Zoology Summit 2018' calendar. Schedule the opening keynote 'Keynote: The Sasquatch Migration Patterns' for 9am on Monday June 18, lasting 1 hour. I need to schedule the main debate panel, 'Panel: Nessie vs Ogopogo - A Comparative Analysis', but it depends on Zahra's (zahra@test.com) availability in the afternoon of June 18 - find when she's free and book a 2-hour panel at that time on the summit calendar. Mateusz (mateusz@test.com) just agreed to co-present the Sasquatch keynote, so please add him as an attendee to that event. I accidentally added a workshop called 'How to Fake Bigfoot Prints' to the summit calendar earlier - delete it immediately, we can't have that on the official record. Aarav (aarav@test.com) from the press office needs read access to the summit calendar.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Sasquatch Migration" + }, + "calendar_id": { + "eq": "cal_cryptozoology_summit" + }, + "start.dateTime": { + "contains": "2018-06-18T09:00" + }, + "end.dateTime": { + "contains": "2018-06-18T10:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_event_attendees", + "where": { + "email": { + "eq": "mateusz@test.com" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Nessie" + }, + "calendar_id": { + "eq": "cal_cryptozoology_summit" + }, + "start.dateTime": { + "contains": "2018-06-18T14:00" + }, + "end.dateTime": { + "contains": "2018-06-18T16:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "event_bigfoot_workshop" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "aarav@test.com" + }, + "role": { + "eq": "reader" + }, + "calendar_id": { + "eq": "cal_cryptozoology_summit" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 7, + "tools_required": [ + "calendarList.list", + "events.insert", + "freeBusy.query", + "events.patch", + "events.delete", + "acl.insert" + ] + } + }, + { + "id": "test_8", + "name": "Time-Traveler's Convention - Temporal event coordination", + "prompt": "We're setting up the Time-Traveler's Convention and the timeline is fragile. First, check if 'Timeline Alpha' already exists in my calendars - it should be there. Create a new calendar called 'Timeline Beta' for our temporal experiments. Schedule the 'Paradox Prevention Seminar' for Tuesday June 19 at 10am, lasting 2 hours, on Timeline Beta. Sven (sven@test.com) is arriving from 2099 and needs to attend, but his arrival window is fluctuating - check his availability for Wednesday June 20 instead. Move the 'Paradox Prevention Seminar' to Sven's free slot on Wednesday. The Time Council has flagged the 'Grandfather Paradox Demonstration' as a Class 5 risk - find it and delete it immediately. Finally, grant Fatima (fatima@test.com) write access to Timeline Beta so she can document the changes to history.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Timeline Beta" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Paradox Prevention Seminar" + }, + "start.dateTime": { + "contains": "2018-06-20T14:00" + }, + "end.dateTime": { + "contains": "2018-06-20T16:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "event_grandfather_paradox" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "fatima@test.com" + }, + "role": { + "eq": "writer" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 7, + "tools_required": [ + "calendarList.list", + "calendars.insert", + "events.insert", + "freeBusy.query", + "events.patch", + "events.delete", + "acl.insert" + ] + } + }, + { + "id": "test_9", + "name": "Mirage Menagerie Caravan Festival - Batching required", + "prompt": "I'm drowning in festival logistics for Mirage Menagerie 2026. Find that calendar first. We also need a private crew calendar called Backstage Sandstorm Ops and Piotr (piotr@test.com) must be able to edit it. On the main festival calendar, schedule our eight 15-minute micro-acts starting Saturday June 23, 2018 at 2:00pm, back-to-back every 15 minutes in this exact order: Glass-Dune Juggling, Whispering Wadi Puppets, Lantern Maze Overture, Sand-Script Calligraphy, Mothlight Drummers, Nomad Kite Ballet, Oasis Echo Choir, and Moon-Salt Acrobatics. Add a quick note-style event: 'Starlit Tea Ceremony with Akira tomorrow 3pm' (tomorrow is Monday June 18, 2018). I also need a Twilight Troupe Council for 1 hour on Saturday evening (June 23, 2018) when both Ananya (ananya@test.com) and Zainab (zainab@test.com) can attend--check their availability first. Then update all the micro-acts to be at Dune Pavilion B and include Ananya. Finally, remove the placeholders 'Placeholder: Dust Rehearsal' and 'Placeholder: Ghost Stage'. Please batch the repeated edits/inserts/deletes so we don't trip our API rate limits.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Backstage Sandstorm Ops" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "piotr@test.com" + }, + "role": { + "eq": "writer" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Glass-Dune Juggling" + }, + "location": { + "contains": "Dune Pavilion B" + }, + "calendar_id": { + "eq": "cal_mirage_menagerie" + }, + "start.dateTime": { + "contains": "2018-06-23T14:00" + }, + "end.dateTime": { + "contains": "2018-06-23T14:15" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Whispering Wadi Puppets" + }, + "location": { + "contains": "Dune Pavilion B" + }, + "calendar_id": { + "eq": "cal_mirage_menagerie" + }, + "start.dateTime": { + "contains": "2018-06-23T14:15" + }, + "end.dateTime": { + "contains": "2018-06-23T14:30" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Lantern Maze Overture" + }, + "location": { + "contains": "Dune Pavilion B" + }, + "calendar_id": { + "eq": "cal_mirage_menagerie" + }, + "start.dateTime": { + "contains": "2018-06-23T14:30" + }, + "end.dateTime": { + "contains": "2018-06-23T14:45" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Sand-Script Calligraphy" + }, + "location": { + "contains": "Dune Pavilion B" + }, + "calendar_id": { + "eq": "cal_mirage_menagerie" + }, + "start.dateTime": { + "contains": "2018-06-23T14:45" + }, + "end.dateTime": { + "contains": "2018-06-23T15:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Mothlight Drummers" + }, + "location": { + "contains": "Dune Pavilion B" + }, + "calendar_id": { + "eq": "cal_mirage_menagerie" + }, + "start.dateTime": { + "contains": "2018-06-23T15:00" + }, + "end.dateTime": { + "contains": "2018-06-23T15:15" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Nomad Kite Ballet" + }, + "location": { + "contains": "Dune Pavilion B" + }, + "calendar_id": { + "eq": "cal_mirage_menagerie" + }, + "start.dateTime": { + "contains": "2018-06-23T15:15" + }, + "end.dateTime": { + "contains": "2018-06-23T15:30" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Oasis Echo Choir" + }, + "location": { + "contains": "Dune Pavilion B" + }, + "calendar_id": { + "eq": "cal_mirage_menagerie" + }, + "start.dateTime": { + "contains": "2018-06-23T15:30" + }, + "end.dateTime": { + "contains": "2018-06-23T15:45" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Moon-Salt Acrobatics" + }, + "location": { + "contains": "Dune Pavilion B" + }, + "calendar_id": { + "eq": "cal_mirage_menagerie" + }, + "start.dateTime": { + "contains": "2018-06-23T15:45" + }, + "end.dateTime": { + "contains": "2018-06-23T16:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_event_attendees", + "where": { + "email": { + "eq": "ananya@test.com" + } + }, + "expected_count": 8 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Starlit Tea Ceremony with Akira" + }, + "calendar_id": { + "eq": "cal_mirage_menagerie" + }, + "start.dateTime": { + "contains": "2018-06-18T15:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Twilight Troupe Council" + }, + "calendar_id": { + "eq": "cal_mirage_menagerie" + }, + "start.dateTime": { + "contains": "2018-06-23T19:00" + }, + "end.dateTime": { + "contains": "2018-06-23T20:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "event_placeholder_dust" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "event_placeholder_ghost" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 8, + "tools_required": [ + "calendarList.list", + "calendars.insert", + "acl.insert", + "events.insert", + "freeBusy.query", + "events.patch", + "events.delete" + ] + } + }, + { + "id": "test_10", + "name": "Museum of Whispered Relics - Calendar governance and access", + "prompt": "We are reorganizing the Traveling Museum of Whispered Relics. Find the main calendar called Whispered Relics Mainline and the old Embargoed Vault calendar first. Create two new route calendars: Relic Transit - Northern Route and Relic Transit - Coastal Route. Set the Northern Route description to 'Northern caravan route logistics' and the Coastal Route description to 'Coastal caravan route logistics'. Use distinct colors from the calendar palette: set Northern Route to color ID 7 and Coastal Route to color ID 11. Subscribe me to the external calendar with ID cal_city_archives_access (titled 'City Archives Access Windows'). In my calendar list, hide Embargoed Vault from view and ensure both new route calendars are visible with their assigned colors. Access changes: Niamh (niamh@test.com) should be an owner on both route calendars, and Farid (farid@test.com) should be a reader on both. Remove Olena (olena@test.com) from the Embargoed Vault entirely.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Relic Transit - Northern Route" + }, + "description": { + "contains": "Northern caravan route logistics" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Relic Transit - Coastal Route" + }, + "description": { + "contains": "Coastal caravan route logistics" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_city_archives_access" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_embargoed_vault" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_changes": { + "hidden": { + "to": true + } + } + }, + { + "diff_type": "added", + "entity": "calendar_list_entries", + "where": { + "user_id": { + "eq": "user_agent" + }, + "color_id": { + "eq": "7" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_list_entries", + "where": { + "user_id": { + "eq": "user_agent" + }, + "color_id": { + "eq": "11" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "niamh@test.com" + }, + "role": { + "eq": "owner" + } + }, + "expected_count": 2 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "farid@test.com" + }, + "role": { + "eq": "reader" + } + }, + "expected_count": 2 + }, + { + "diff_type": "changed", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_embargoed_vault" + }, + "scope_value": { + "eq": "olena@test.com" + } + }, + "expected_changes": { + "deleted": { + "to": true + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 9, + "tools_required": [ + "calendarList.list", + "calendars.insert", + "calendarList.insert", + "calendarList.patch", + "acl.insert", + "acl.delete" + ] + } + }, + { + "id": "test_11", + "name": "Emberline Embassy Network - Calendar governance and access", + "prompt": "We're reorganizing the Emberline Embassy courier network. Find the Emberline Embassy Roster calendar and the legacy Old Courier Shifts entry. I need two new route calendars: Emberline Courier North Circuit and Emberline Courier South Circuit. Also subscribe me to the external calendar with ID cal_consular_blackout (Consular Blackout Windows) so we can avoid those times. For compliance, set up a watch on my settings and then confirm my current locale/timezone preferences. Update the North Circuit to use timezone Europe/Warsaw with description 'Northern route handoff schedule', and the South Circuit to use timezone Asia/Kolkata with description 'Southern route handoff schedule'. Make both route calendars visible in my list and set their colors: North Circuit color ID 6 and South Circuit color ID 12. Share both routes with Priya (priya@test.com) as a writer and Hassan (hassan@test.com) as a reader. Finally, remove Old Courier Shifts from my calendar list. Please batch the calendar-list updates and permission changes to reduce API calls.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Emberline Courier North Circuit" + }, + "time_zone": { + "eq": "Europe/Warsaw" + }, + "description": { + "contains": "Northern route handoff schedule" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Emberline Courier South Circuit" + }, + "time_zone": { + "eq": "Asia/Kolkata" + }, + "description": { + "contains": "Southern route handoff schedule" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_consular_blackout" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_list_entries", + "where": { + "user_id": { + "eq": "user_agent" + }, + "color_id": { + "eq": "6" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_list_entries", + "where": { + "user_id": { + "eq": "user_agent" + }, + "color_id": { + "eq": "12" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_old_courier_shifts" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_changes": { + "deleted": { + "to": true + } + } + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "priya@test.com" + }, + "role": { + "eq": "writer" + } + }, + "expected_count": 2 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "hassan@test.com" + }, + "role": { + "eq": "reader" + } + }, + "expected_count": 2 + } + ], + "metadata": { + "min_tool_calls": 10, + "tools_required": [ + "calendarList.list", + "calendars.insert", + "calendarList.insert", + "settings.watch", + "settings.get", + "calendars.patch", + "calendarList.patch", + "acl.insert", + "calendarList.delete" + ] + } + }, + { + "id": "test_12", + "name": "Skyward Observatory Access Passes - Calendar governance and access", + "prompt": "We're reorganizing the mountain observatory. First, find Skyward Observatory Access and the legacy Dormant Telescopes calendar. Create two new calendars: Meteor Patrol Rotation and Aurora Research Slots. Subscribe me to the external calendar with ID cal_mountain_weather (Mountain Weather Alerts) so we can coordinate around storms. Set the Meteor Patrol Rotation description to 'Night patrol rotation schedule' with timezone America/Denver, and set the Aurora Research Slots description to 'Research telescope booking slots' with timezone America/Los_Angeles. Make sure both new calendars are visible in my list and color-coded: Meteor Patrol Rotation color ID 9 and Aurora Research Slots color ID 14. Access changes: Mei (mei@test.com) should be an owner on both new calendars, Tomasz (tomasz@test.com) should be a reader on both, and remove Leila (leila@test.com) from Dormant Telescopes. Please batch the calendar-list updates and ACL changes to stay under quota limits.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Meteor Patrol Rotation" + }, + "description": { + "contains": "Night patrol rotation schedule" + }, + "time_zone": { + "eq": "America/Denver" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Aurora Research Slots" + }, + "description": { + "contains": "Research telescope booking slots" + }, + "time_zone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_mountain_weather" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_list_entries", + "where": { + "user_id": { + "eq": "user_agent" + }, + "color_id": { + "eq": "9" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_list_entries", + "where": { + "user_id": { + "eq": "user_agent" + }, + "color_id": { + "eq": "14" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "mei@test.com" + }, + "role": { + "eq": "owner" + } + }, + "expected_count": 2 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "tomasz@test.com" + }, + "role": { + "eq": "reader" + } + }, + "expected_count": 2 + }, + { + "diff_type": "changed", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_dormant_telescopes" + }, + "scope_value": { + "eq": "leila@test.com" + } + }, + "expected_changes": { + "deleted": { + "to": true + } + } + } + ], + "metadata": { + "min_tool_calls": 9, + "tools_required": [ + "calendarList.list", + "calendars.insert", + "calendarList.insert", + "calendarList.patch", + "acl.insert", + "acl.delete" + ] + } + }, + { + "id": "test_13", + "name": "Firefly Conservatory - Recurring patrols and cleanup", + "prompt": "We are starting a serious conservation push for the firefly habitat. First, show me all my calendars so I can see whether I already have a conservatory calendar. If not, create a new calendar called 'Firefly Conservatory 2018' and share it with Haruto (haruto@test.com) as a writer. The weekly Lantern Patrols need to happen every Tuesday at 7:00pm for 6 weeks starting June 19, 2018, lasting 1 hour - set that up as a recurring event (one series, not six separate events). Zanele (zanele@test.com) can only do the Bioluminescent Microscopy Workshop on Saturday evening June 23, 2018 between 6pm and 10pm in her timezone - check her availability and schedule a 1-hour workshop when she is free, using her timezone. Once the patrol route is final, update the Lantern Patrol to use the location 'Willow Glade Observation Ring'. Finally, delete the old 'Broken Jar Ceremony' event from my primary calendar.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Firefly Conservatory 2018" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "haruto@test.com" + }, + "role": { + "eq": "writer" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Lantern Patrol" + }, + "location": { + "contains": "Willow Glade Observation Ring" + }, + "start.dateTime": { + "contains": "2018-06-19T19:00" + }, + "end.dateTime": { + "contains": "2018-06-19T20:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + }, + "recurrence": { + "contains": "FREQ=WEEKLY" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Bioluminescent Microscopy Workshop" + }, + "start.dateTime": { + "contains": "2018-06-23T19:00" + }, + "end.dateTime": { + "contains": "2018-06-23T20:00" + }, + "start.timeZone": { + "eq": "Africa/Johannesburg" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "event_broken_jar" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 8, + "tools_required": [ + "calendarList.list", + "calendars.insert", + "acl.insert", + "events.insert", + "freeBusy.query", + "events.patch", + "events.delete" + ] + } + }, + { + "id": "test_14", + "name": "Clockwork Tinkerers Guild - Recurring series exceptions", + "prompt": "I\u2019m setting up the Clockwork Tinkerers Guild calendar. First, show me my calendars so I don\u2019t duplicate anything; if we don\u2019t already have it, create a calendar called Clockwork Tinkerers Guild and give Aiko (aiko@test.com) write access. Our Gear & Ember Workshop needs to run every Friday at 6:00pm for eight weeks starting June 22, 2018\u2014set it up as a recurring series. However, we need two exceptions: the June 29 session should start at 7:00pm and include the note \u2018Late start due to forge maintenance,\u2019 and the July 6 session must be cancelled entirely (festival blackout). After applying those exceptions, show me the guild calendar so I can confirm the series looks right. Then add a one-off event called Brass Beetle Showcase on Saturday July 7 at noon.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendars", + "where": { + "id": { + "eq": "cal_clockwork_tinkerers_guild" + } + }, + "expected_count": 0 + }, + { + "diff_type": "removed", + "entity": "calendars", + "where": { + "id": { + "eq": "cal_clockwork_tinkerers_guild" + } + }, + "expected_count": 0 + }, + { + "diff_type": "changed", + "entity": "calendars", + "where": { + "id": { + "eq": "cal_clockwork_tinkerers_guild" + } + }, + "expected_count": 0 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_clockwork_tinkerers_guild" + }, + "scope_value": { + "eq": "aiko@test.com" + }, + "role": { + "eq": "writer" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Gear & Ember Workshop" + }, + "calendar_id": { + "eq": "cal_clockwork_tinkerers_guild" + }, + "start.dateTime": { + "contains": "2018-06-22T18:00" + }, + "end.dateTime": { + "contains": "2018-06-22T19:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + }, + "recurrence": { + "contains": "FREQ=WEEKLY" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Gear & Ember Workshop" + }, + "calendar_id": { + "eq": "cal_clockwork_tinkerers_guild" + }, + "start.dateTime": { + "contains": "2018-06-29T19:00" + }, + "end.dateTime": { + "contains": "2018-06-29T20:00" + }, + "description": { + "i_contains": "forge maintenance" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Gear & Ember Workshop" + }, + "calendar_id": { + "eq": "cal_clockwork_tinkerers_guild" + }, + "recurrence": { + "i_contains": "EXDATE" + } + }, + "expected_count": { + "min": 0, + "max": 1 + } + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Gear & Ember Workshop" + }, + "calendar_id": { + "eq": "cal_clockwork_tinkerers_guild" + }, + "start.dateTime": { + "contains": "2018-07-06T18:00" + }, + "status": { + "eq": "cancelled" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": { + "min": 0, + "max": 1 + } + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Brass Beetle Showcase" + }, + "calendar_id": { + "eq": "cal_clockwork_tinkerers_guild" + }, + "start.dateTime": { + "contains": "2018-07-07T12:00" + }, + "end.dateTime": { + "contains": "2018-07-07T13:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 7, + "tools_required": [ + "calendarList.list", + "acl.insert", + "events.insert", + "events.patch", + "events.list" + ] + } + }, + { + "id": "test_15", + "name": "Tidal Library Rotations - Recurring series lifecycle", + "prompt": "We\u2019re setting up the tidal library\u2019s long-term calendar. First, show me my calendars and create Tidal Library Rotations if it doesn\u2019t already exist. Share it with Fumiko (fumiko@test.com) so she can edit. The Moon-Shell Rebinding ritual needs to recur monthly on the first Tuesday at 9:00am, starting July 3, 2018, and should continue indefinitely until we cancel it. We also need two exceptions: the August 7, 2018 occurrence should start at 11:00am with a note \u2018Storm-surge delay,\u2019 and the September 4, 2018 occurrence should be cancelled entirely. Add a separate one-off event called Ink Tide Inventory on July 15, 2018 at 4:00pm. After confirming the schedule looks right, delete the entire Moon-Shell Rebinding series.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Tidal Library Rotations" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "fumiko@test.com" + }, + "role": { + "eq": "writer" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Moon-Shell Rebinding" + }, + "start.dateTime": { + "contains": "2018-07-03T09:00" + }, + "status": { + "eq": "cancelled" + }, + "recurrence": { + "contains": "FREQ=MONTHLY" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Moon-Shell Rebinding" + }, + "recurrence": { + "i_contains": "EXDATE" + } + }, + "expected_count": { + "min": 0, + "max": 1 + } + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Moon-Shell Rebinding" + }, + "start.dateTime": { + "contains": "2018-09-04T09:00" + }, + "status": { + "eq": "cancelled" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": { + "min": 0, + "max": 1 + } + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Moon-Shell Rebinding" + }, + "start.dateTime": { + "contains": "2018-08-07T11:00" + }, + "description": { + "i_contains": "storm-surge delay" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "summary": { + "contains": "Ink Tide Inventory" + }, + "start.dateTime": { + "contains": "2018-07-15T16:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 8, + "tools_required": [ + "calendarList.list", + "calendars.insert", + "acl.insert", + "events.insert", + "events.patch", + "events.delete" + ] + } + }, + { + "id": "test_16", + "name": "Monastery of Echoing Bells - Daily recurring lifecycle", + "prompt": "We\u2019re setting up a proper schedule for the Monastery of Echoing Bells. First, show me my calendars so I don\u2019t duplicate anything, and create a calendar with that name if needed. Give Linh (linh@test.com) edit access. The Dawn Bell Rite must recur daily at 5:30am, starting June 18, 2018, and it should continue indefinitely until we cancel it. I need two exceptions: the June 20, 2018 occurrence should start at 6:30am with the note \u2018Storm quiet hours,\u2019 and the June 23, 2018 occurrence should be cancelled entirely. Also, check when Kwame (kwame@test.com) is free on the evening of June 24. After you confirm the schedule, delete the entire Dawn Bell Rite series.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendars", + "where": { + "id": { + "eq": "cal_monastery_echoing_bells" + } + }, + "expected_count": 0 + }, + { + "diff_type": "removed", + "entity": "calendars", + "where": { + "id": { + "eq": "cal_monastery_echoing_bells" + } + }, + "expected_count": 0 + }, + { + "diff_type": "changed", + "entity": "calendars", + "where": { + "id": { + "eq": "cal_monastery_echoing_bells" + } + }, + "expected_count": 0 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_monastery_echoing_bells" + }, + "scope_value": { + "eq": "linh@test.com" + }, + "role": { + "eq": "writer" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "cal_monastery_echoing_bells" + }, + "summary": { + "contains": "Dawn Bell Rite" + }, + "start.dateTime": { + "contains": "2018-06-18T05:30" + }, + "status": { + "eq": "cancelled" + }, + "recurrence": { + "contains": "FREQ=DAILY" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "cal_monastery_echoing_bells" + }, + "summary": { + "contains": "Dawn Bell Rite" + }, + "recurrence": { + "i_contains": "EXDATE" + } + }, + "expected_count": { + "min": 0, + "max": 1 + } + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "cal_monastery_echoing_bells" + }, + "summary": { + "contains": "Dawn Bell Rite" + }, + "start.dateTime": { + "contains": "2018-06-23" + }, + "status": { + "eq": "cancelled" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": { + "min": 0, + "max": 1 + } + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "cal_monastery_echoing_bells" + }, + "summary": { + "contains": "Dawn Bell Rite" + }, + "start.dateTime": { + "contains": "2018-06-20T06:30" + }, + "description": { + "i_contains": "storm quiet hours" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 7, + "tools_required": [ + "calendarList.list", + "acl.insert", + "events.insert", + "events.patch", + "freeBusy.query", + "events.delete" + ] + } + }, + { + "id": "test_17", + "name": "Glassmoth Conservatory Candle-Lighting - simple hold update", + "prompt": "Please put a hold on my primary calendar for Glassmoth Conservatory Candle-Lighting and invite Ngozi (ngozi@test.com). After you add it, move it one hour later and set the location to Hothouse Lantern Atrium. Also, set up a watch so I get notified whenever my calendar settings change.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "test.user@test.com" + }, + "summary": { + "contains": "Glassmoth Conservatory Candle-Lighting" + }, + "location": { + "contains": "Hothouse Lantern Atrium" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_event_attendees", + "where": { + "email": { + "eq": "ngozi@test.com" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/users/user_agent/settings" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "events.insert", + "events.patch", + "settings.watch" + ] + } + }, + { + "id": "test_18", + "name": "Sandglass Aviary - import event and revoke access", + "prompt": "Please import the following legacy entry into my primary calendar (not a manual create): 'Saffron Dusk Feather-Mending' on June 22, 2018 from 6:00pm-7:00pm, location 'Windglass Roost,' iCalUID saffron-dusk-20180622@aviary. Also, remove Salma's access to the Sandglass Aviary calendar - her ACL rule is user:salma@test.com.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "test.user@test.com" + }, + "summary": { + "contains": "Saffron Dusk Feather-Mending" + }, + "start.dateTime": { + "contains": "2018-06-22T18:00" + }, + "end.dateTime": { + "contains": "2018-06-22T19:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + }, + "location": { + "contains": "Windglass Roost" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_sandglass_aviary" + }, + "scope_value": { + "eq": "salma@test.com" + }, + "deleted": { + "eq": true + } + }, + "expected_changes": { + "deleted": { + "to": true + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "events.import", + "acl.delete" + ] + } + }, + { + "id": "test_19", + "name": "Quartzloom Herbarium - event create and access revoke", + "prompt": "On my primary calendar, add a one-hour event called Quartzloom Spore Cataloging on June 21, 2018 from 9:00am-10:00am. Also, remove Mina's access from the Quartzloom Herbarium calendar (calendar ID cal_quartzloom_herbarium, rule ID user:mina@test.com).", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "test.user@test.com" + }, + "summary": { + "contains": "Quartzloom Spore Cataloging" + }, + "start.dateTime": { + "contains": "2018-06-21T09:00" + }, + "end.dateTime": { + "contains": "2018-06-21T10:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_quartzloom_herbarium" + }, + "scope_value": { + "eq": "mina@test.com" + }, + "deleted": { + "eq": true + } + }, + "expected_changes": { + "deleted": { + "to": true + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "events.insert", + "acl.delete" + ] + } + }, + { + "id": "test_20", + "name": "Starfen Observatory - replace event and delete calendar", + "prompt": "On the Starfen Observatory calendar, please review who has access, then fully replace the Comet Scribe Session so it is on June 24, 2018 from 2:00pm-3:00pm at Dome 3 (treat this as a full replace, not a patch). Also, delete the Dust Ledger calendar entirely.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "event_comet_scribe_session" + }, + "calendar_id": { + "eq": "cal_starfen_observatory" + } + }, + "expected_changes": { + "start": { + "to": { + "contains": "2018-06-24T14:00" + } + }, + "end": { + "to": { + "contains": "2018-06-24T15:00" + } + }, + "location": { + "to": { + "contains": "Dome 3" + } + } + }, + "expected_count": 1, + "ignore": [ + "attendees", + "color_id", + "description", + "recurrence", + "reminders", + "status", + "summary", + "transparency", + "visibility" + ] + }, + { + "diff_type": "changed", + "entity": "calendars", + "where": { + "id": { + "eq": "cal_dust_ledger" + } + }, + "expected_changes": { + "deleted": { + "to": true + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "acl.list", + "events.update", + "calendars.delete" + ] + } + }, + { + "id": "test_21", + "name": "Emberglass Atelier - single event create", + "prompt": "Add a one-off event on my primary calendar called Emberglass Kiln Glow on June 25, 2018 from 7:00pm-8:30pm.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "test.user@test.com" + }, + "summary": { + "contains": "Emberglass Kiln Glow" + }, + "start.dateTime": { + "contains": "2018-06-25T19:00" + }, + "end.dateTime": { + "contains": "2018-06-25T20:30" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 1, + "tools_required": [ + "events.insert" + ] + } + }, + { + "id": "test_22", + "name": "Fogloom Archive - quickAdd and settings watch", + "prompt": "Please quick-add this to my primary calendar: 'Fogloom Archive Lantern Check on June 26, 2018 at 8:00pm for 45 minutes.' After it's created, fetch that event by ID so we can verify the parsed details. Also, set up a watch for changes to my calendar settings.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "test.user@test.com" + }, + "summary": { + "contains": "Fogloom Archive Lantern Check" + }, + "start.dateTime": { + "contains": "2018-06-26T20:00" + }, + "end.dateTime": { + "contains": "2018-06-26T20:45" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/users/user_agent/settings" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "events.quickAdd", + "events.get", + "settings.watch" + ] + } + }, + { + "id": "test_23", + "name": "Lumenfjord Scriptorium - replace event and list access", + "prompt": "On the Lumenfjord Scriptorium calendar, check the ACL rule user:scribe@lumenfjord.example and tell me what role it has. Then fully replace the Aurora Ink Drying event so it's on June 27, 2018 from 3:00pm-4:00pm at North Alcove. Afterward, list the events on that calendar so I can verify the update.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "event_aurora_ink_drying" + }, + "calendar_id": { + "eq": "cal_lumenfjord_scriptorium" + } + }, + "expected_changes": { + "start": { + "to": { + "contains": "2018-06-27T15:00" + } + }, + "end": { + "to": { + "contains": "2018-06-27T16:00" + } + }, + "location": { + "to": { + "contains": "North Alcove" + } + } + }, + "expected_count": 1, + "ignore": [ + "attendees", + "color_id", + "description", + "recurrence", + "reminders", + "status", + "summary", + "transparency", + "visibility" + ] + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "acl.get", + "events.update", + "events.list" + ] + } + }, + { + "id": "test_24", + "name": "Sunthread Archive - delete event and list settings", + "prompt": "Please remove the Sunthread Loom Blessing event from my primary calendar (event ID evt_sunthread_loom_001). After that, list all my calendar settings so I can confirm my current timezone before I update Adebayo (adebayo@test.com).", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_sunthread_loom_001" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "events.delete", + "settings.list" + ] + } + }, + { + "id": "test_25", + "name": "Emberpine Cartography - create calendar only", + "prompt": "Create a new calendar called Emberpine Cartography Ledger.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Emberpine Cartography Ledger" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 1, + "tools_required": [ + "calendars.insert" + ] + } + }, + { + "id": "test_26", + "name": "Mistforge Observatory - settings check and watch", + "prompt": "Please list my calendar settings so I can confirm my timezone and date/time formats before I reply to Sana (sana@test.com). Also, set up a watch on my settings so I get notified of any changes.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/users/user_agent/settings" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "settings.list", + "settings.watch" + ] + } + }, + { + "id": "test_27", + "name": "Lattice Observatory - hide calendar and replace recurring event", + "prompt": "Please hide the Lattice Observatory calendar in my calendar list (calendar ID cal_lattice_observatory). Also, fully replace the recurring Prism-Lens Alignment event (event ID evt_prism_lens_004) on that calendar so it runs weekly on Thursdays at 6:00am, starting June 28, 2018, for 45 minutes at Pier 7 Scope. Ewa asked me to confirm the updated series today.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_lattice_observatory" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_changes": { + "hidden": { + "to": true + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_prism_lens_004" + }, + "calendar_id": { + "eq": "cal_lattice_observatory" + } + }, + "expected_changes": { + "start": { + "to": { + "contains": "2018-06-28T06:00" + } + }, + "end": { + "to": { + "contains": "2018-06-28T06:45" + } + }, + "location": { + "to": { + "contains": "Pier 7 Scope" + } + }, + "recurrence": { + "to": { + "contains": "FREQ=WEEKLY" + } + } + }, + "expected_count": 1, + "ignore": [ + "attendees", + "color_id", + "description", + "reminders", + "status", + "summary", + "transparency", + "visibility" + ] + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "calendarList.patch", + "events.update" + ] + } + }, + { + "id": "test_28", + "name": "Copperseed Archive - quickAdd and events watch", + "prompt": "Quick-add this to my primary calendar: 'Copperseed Archive dusting on June 28, 2018 at 9:30am for 30 minutes.' Then start watching my primary calendar for event changes so I can notify Fatima (fatima@test.com) if anything shifts.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "test.user@test.com" + }, + "summary": { + "contains": "Copperseed Archive dusting" + }, + "start.dateTime": { + "contains": "2018-06-28T09:30" + }, + "end.dateTime": { + "contains": "2018-06-28T10:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/calendars/test.user@test.com/events" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "events.quickAdd", + "events.watch" + ] + } + }, + { + "id": "test_29", + "name": "Aurora Loom - delete recurring series", + "prompt": "Check that I'm subscribed to the Aurora Loom calendar (ID cal_aurora_loom). Then remove the entire recurring series Starlit Weave Circle (event ID evt_starlit_weave_series) from that calendar.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_starlit_weave_series" + }, + "calendar_id": { + "eq": "cal_aurora_loom" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "calendarList.get", + "events.delete" + ] + } + }, + { + "id": "test_30", + "name": "Cinderflock Choir - delete recurring series", + "prompt": "Please delete the entire recurring Cinderflock Vesper Choir series (event ID evt_cinderflock_vespers) from the Cinderflock Choir calendar (ID cal_cinderflock_choir).", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_cinderflock_vespers" + }, + "calendar_id": { + "eq": "cal_cinderflock_choir" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 1, + "tools_required": [ + "events.delete" + ] + } + }, + { + "id": "test_31", + "name": "Driftglass Studio - move event to annex", + "prompt": "Please list events on my Driftglass Studio calendar so you can find the event ID for Tide-Polish Lesson, then move that event to the Mariner Annex calendar.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_tide_polish_lesson" + }, + "calendar_id": { + "eq": "cal_driftglass_studio" + } + }, + "expected_changes": { + "calendar_id": { + "to": { + "eq": "cal_mariner_annex" + } + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "events.list", + "events.move" + ] + } + }, + { + "id": "test_32", + "name": "Emberwharf Ledger - import event only", + "prompt": "Please import this legacy entry into my primary calendar (do not recreate it manually): 'Emberwharf Tide Log' on June 29, 2018 from 5:00pm-5:30pm, location 'Pier Lantern Desk,' iCalUID emberwharf-tide-20180629@ledger.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "test.user@test.com" + }, + "summary": { + "contains": "Emberwharf Tide Log" + }, + "start.dateTime": { + "contains": "2018-06-29T17:00" + }, + "end.dateTime": { + "contains": "2018-06-29T17:30" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + }, + "location": { + "contains": "Pier Lantern Desk" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 1, + "tools_required": [ + "events.import" + ] + } + }, + { + "id": "test_33", + "name": "Latticewren Survey - create calendar and hide entry", + "prompt": "Create a new calendar called Latticewren Survey Log. Then fetch its calendar-list entry and fully replace that entry so the calendar is hidden and not selected in my list. I want it out of sight until Salma (salma@test.com) asks for it.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Latticewren Survey Log" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_list_entries", + "where": { + "user_id": { + "eq": "user_agent" + }, + "primary": { + "eq": false + }, + "hidden": { + "eq": true + }, + "selected": { + "eq": false + } + }, + "expected_changes": { + "hidden": { + "to": true + }, + "selected": { + "to": false + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "calendars.insert", + "calendarList.get", + "calendarList.update" + ] + } + }, + { + "id": "test_34", + "name": "Icefern Annex - move event and watch destination", + "prompt": "Please move Icefern Map Workshop (event ID evt_icefern_maps_07) from the Icefern Annex calendar to the Boreal Classroom calendar (ID cal_boreal_classroom). Then start watching the Boreal Classroom calendar for event changes so I can notify Hana (hana@test.com) and Sven (sven@test.com) if anything shifts.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_icefern_maps_07" + }, + "calendar_id": { + "eq": "cal_icefern_annex" + } + }, + "expected_changes": { + "calendar_id": { + "to": { + "eq": "cal_boreal_classroom" + } + } + }, + "expected_count": 1, + "ignore": ["status", "sequence", "updated_at"] + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/calendars/cal_boreal_classroom/events" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "events.move", + "events.watch" + ] + } + }, + { + "id": "test_35", + "name": "Nightglass Repository - clear calendar and hide entry", + "prompt": "Please clear all events from my Nightglass Repository calendar (ID cal_nightglass_repository) but keep the calendar. Then hide that calendar in my list. I'll let Ewa (ewa@test.com) and Hana (hana@test.com) know once it's done.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "cal_nightglass_repository" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": {"min": 1}, + "description": "All events on this calendar should be cleared (cancelled)" + }, + { + "diff_type": "changed", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_nightglass_repository" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_changes": { + "hidden": { + "to": true + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "calendars.clear", + "calendarList.patch" + ] + } + }, + { + "id": "test_36", + "name": "Brasswillow Registry - create, share, delete", + "prompt": "Create a new calendar called Brasswillow Registry and share it with Ewa (ewa@test.com) with edit access. After she's had a look, delete the Brasswillow Registry calendar entirely.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Brasswillow Registry" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "ewa@test.com" + }, + "role": { + "eq": "writer" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendars", + "where": { + "summary": { + "contains": "Brasswillow Registry" + } + }, + "expected_changes": { + "deleted": { + "to": true + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "calendars.insert", + "acl.insert", + "calendars.delete" + ] + } + }, + { + "id": "test_37", + "name": "Kiteglass Survey Log - access update and channel stop", + "prompt": "Create a new calendar named Kiteglass Survey Log. Before you do anything else, pull the calendar color palette and set the new calendar to color ID 9. Sven needs editor access on the Harbor Signalboard calendar (ID cal_harbor_signalboard) -- his ACL rule is user:sven@test.com, please update it. Then find the earliest 45-minute overlap between my primary calendar and Sven's calendar across June 27-28, 2018. Also, fetch the event evt_horizon_shim_02 on my primary calendar to confirm its exact time so the overlap you pick doesn't collide. Finally, stop the old settings watch channel with id chan_settings_204 and resourceId res_settings_204.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Kiteglass Survey Log" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_list_entries", + "where": { + "user_id": { + "eq": "user_agent" + }, + "color_id": { + "eq": "9" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_harbor_signalboard" + }, + "scope_value": { + "eq": "sven@test.com" + } + }, + "expected_changes": { + "role": { + "to": { + "eq": "writer" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "removed", + "entity": "calendar_channels", + "where": { + "id": { + "eq": "chan_settings_204" + }, + "resource_id": { + "eq": "res_settings_204" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 7, + "tools_required": [ + "calendars.insert", + "colors.get", + "calendarList.patch", + "acl.update", + "freeBusy.query", + "events.get", + "channels.stop" + ] + } + }, + { + "id": "test_38", + "name": "Driftweave Annex - access, watch, unsubscribe", + "prompt": "Please update Iryna's access on the Driftweave Annex calendar (ID cal_driftweave_annex) to writer -- her ACL rule is user:iryna@test.com. Then set up an events watch on that calendar. Also, unsubscribe me from the Old Aster Lodge calendar (ID cal_old_aster_lodge). Finally, stop the old events watch channel with id chan_annex_77 and resourceId res_annex_77.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_driftweave_annex" + }, + "scope_value": { + "eq": "iryna@test.com" + } + }, + "expected_changes": { + "role": { + "to": { + "eq": "writer" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/calendars/cal_driftweave_annex/events" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + }, + { + "diff_type": "removed", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_old_aster_lodge" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + }, + { + "diff_type": "removed", + "entity": "calendar_channels", + "where": { + "id": { + "eq": "chan_annex_77" + }, + "resource_id": { + "eq": "res_annex_77" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "acl.update", + "events.watch", + "calendarList.delete", + "channels.stop" + ] + } + }, + { + "id": "test_39", + "name": "Mossquill Archive - clear, patch, replace", + "prompt": "Please clear all events from the Mossquill Archive calendar (ID cal_mossquill_archive). Then patch that calendar's description to 'Restoration ledger and vault access.' Update Salma's ACL on the Mossquill Archive calendar (rule user:salma@test.com) to reader using a full replacement. Before changing the inspection slot, check my timezone setting. Then fully replace the event evt_mossquill_vault_check so it's on June 29, 2018 from 4:00pm-5:00pm at Lower Vault Door. Finally, fetch my dateFieldOrder setting.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "cal_mossquill_archive" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendars", + "where": { + "id": { + "eq": "cal_mossquill_archive" + } + }, + "expected_changes": { + "description": { + "to": { + "contains": "Restoration ledger and vault access" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_mossquill_archive" + }, + "scope_value": { + "eq": "salma@test.com" + } + }, + "expected_changes": { + "role": { + "to": { + "eq": "reader" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_mossquill_vault_check" + }, + "calendar_id": { + "eq": "cal_mossquill_archive" + } + }, + "expected_changes": { + "start": { + "to": { + "contains": "2018-06-29T16:00" + } + }, + "end": { + "to": { + "contains": "2018-06-29T17:00" + } + }, + "location": { + "to": { + "contains": "Lower Vault Door" + } + } + }, + "expected_count": 1, + "ignore": [ + "attendees", + "color_id", + "description", + "recurrence", + "reminders", + "status", + "summary", + "transparency", + "visibility" + ] + } + ], + "metadata": { + "min_tool_calls": 6, + "tools_required": [ + "calendars.clear", + "calendars.patch", + "acl.update", + "settings.get", + "events.update" + ] + } + }, + { + "id": "test_40", + "name": "Glimmerforge Atlas - create and share", + "prompt": "Create a new calendar called Glimmerforge Atlas. Share it with Mina (mina@test.com) as writer. Then update Sven's access on that same calendar (rule user:sven@test.com) to writer. Finally, fetch my timezone setting so I can include it in the access note to Adebayo (adebayo@test.com).", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Glimmerforge Atlas" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "mina@test.com" + }, + "role": { + "eq": "writer" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "sven@test.com" + }, + "role": { + "eq": "writer" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "calendars.insert", + "acl.insert", + "acl.update", + "settings.get" + ] + } + }, + { + "id": "test_41", + "name": "Tidemire Conservatory - inspect and clear", + "prompt": "On the Tidemire Conservatory calendar (ID cal_tidemire_conservatory), first fetch the event evt_tidemire_orchid_rounds, then list its instances so I can review upcoming rounds. After that, list my calendar settings for the record. Once I confirm, clear all events from the Tidemire Conservatory calendar. Yara (yara@test.com) needs the final report after the reset.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "cal_tidemire_conservatory" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 4 + } + ], + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "events.get", + "events.instances", + "settings.list", + "calendars.clear" + ] + } + }, + { + "id": "test_42", + "name": "Lanternbraid Pavilion - patch and watch", + "prompt": "On the Lanternbraid Pavilion calendar (ID cal_lanternbraid_pavilion), fetch the event evt_lanternbraid_opening first. Then update the calendar's location to Harborline Rotunda. Also start an ACL watch on the Lanternbraid Pavilion calendar. Finally, unsubscribe me from the Old Copper Annex calendar (ID cal_old_copper_annex).", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendars", + "where": { + "id": { + "eq": "cal_lanternbraid_pavilion" + } + }, + "expected_changes": { + "location": { + "to": { + "contains": "Harborline Rotunda" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/calendars/cal_lanternbraid_pavilion/acl" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + }, + { + "diff_type": "removed", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_old_copper_annex" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "events.get", + "calendars.patch", + "acl.watch", + "calendarList.delete" + ] + } + }, + { + "id": "test_43", + "name": "Meridian Drift Folio - subscribe, tune, patch, watch", + "prompt": "Subscribe me to the external calendar cal_meridian_drift_folio. Then fully replace that calendar list entry so it's hidden, not selected, and uses color ID 7. On that same calendar, patch the event evt_meridian_index to add the description 'Catalog spine check.' Finally, start an ACL watch on every calendar that has at least one event whose name contains 'coolcoolcool'.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_meridian_drift_folio" + }, + "user_id": { + "eq": "user_agent" + }, + "hidden": { + "eq": true + }, + "selected": { + "eq": false + }, + "color_id": { + "eq": "7" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_meridian_index" + }, + "calendar_id": { + "eq": "cal_meridian_drift_folio" + } + }, + "expected_changes": { + "description": { + "to": { + "contains": "Catalog spine check" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/calendars/cal_meridian_drift_folio/acl" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/calendars/cal_tidemire_conservatory/acl" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/calendars/cal_lanternbraid_pavilion/acl" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 6, + "tools_required": [ + "calendarList.insert", + "calendarList.update", + "events.patch", + "events.list", + "acl.watch" + ] + } + }, + { + "id": "test_44", + "name": "Ashline Relay Commons - ACLs, freebusy, hide", + "prompt": "On the Ashline Relay Commons calendar (ID cal_ashline_relay_commons), check the ACL rule user:hana@test.com first. Then grant Chinedu (chinedu@test.com) writer access and Noah (noah@test.com) reader access. After that, use free/busy to find the earliest 60-minute overlap for Hana, Chinedu, and Noah between June 28-29, 2018, and schedule a new event on my primary calendar at that overlap called \"Ashline Relay Briefing\" (use my timezone). Finally, update the calendar list entry so this calendar is hidden and not selected.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_ashline_relay_commons" + }, + "scope_value": { + "eq": "chinedu@test.com" + }, + "role": { + "eq": "writer" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_ashline_relay_commons" + }, + "scope_value": { + "eq": "noah@test.com" + }, + "role": { + "eq": "reader" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_ashline_relay_commons" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_changes": { + "hidden": { + "to": true + }, + "selected": { + "to": false + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "test.user@test.com" + }, + "summary": { + "contains": "Ashline Relay Briefing" + }, + "start.dateTime": { + "contains": "2018-06-28T15:00" + }, + "end.dateTime": { + "contains": "2018-06-28T16:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 6, + "tools_required": [ + "acl.get", + "acl.insert", + "freeBusy.query", + "events.insert", + "calendarList.patch" + ] + } + }, + { + "id": "test_45", + "name": "Silverroot Observatory - replace recurring event and watch", + "prompt": "On the Silverroot Observatory calendar (ID cal_silverroot_observatory), first check the ACL rule user:zahra@test.com. Then update the calendar description to 'Lens rotation and night ledger.' Next, list instances of the recurring event evt_silverroot_rotation, and then fully replace that event so it runs weekly on Mondays at 7:00pm, starting July 2, 2018, for 1 hour at West Dome. After that, enable both an events watch and an ACL watch on this calendar.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendars", + "where": { + "id": { + "eq": "cal_silverroot_observatory" + } + }, + "expected_changes": { + "description": { + "to": { + "contains": "Lens rotation and night ledger" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_silverroot_rotation" + }, + "calendar_id": { + "eq": "cal_silverroot_observatory" + } + }, + "expected_changes": { + "recurrence": { + "to": { + "contains": "RRULE:FREQ=WEEKLY;BYDAY=MO" + } + }, + "start": { + "to": { + "contains": "2018-07-02T19:00" + } + }, + "end": { + "to": { + "contains": "2018-07-02T20:00" + } + }, + "location": { + "to": { + "contains": "West Dome" + } + } + }, + "expected_count": 1, + "ignore": [ + "attendees", + "color_id", + "description", + "reminders", + "status", + "summary", + "transparency", + "visibility" + ] + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/calendars/cal_silverroot_observatory/events" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/calendars/cal_silverroot_observatory/acl" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 6, + "tools_required": [ + "acl.get", + "calendars.patch", + "events.instances", + "events.update", + "events.watch", + "acl.watch" + ] + } + }, + { + "id": "test_46", + "name": "Brineglass Works - move, create, ACL update, settings watch", + "prompt": "On the Brineglass Works calendar (ID cal_brineglass_works), first fetch the event evt_brineglass_forge_demo, then move it to the Harbor Kiln Hall calendar (ID cal_harbor_kiln_hall). Next, use free/busy to find the earliest 30-minute overlap for Lucia (lucia@test.com) and Noah (noah@test.com) on June 30, 2018, and create a new event Saltglass Alignment on Brineglass Works at that time. Then fully replace Lucia\u2019s ACL rule (user:lucia@test.com) on Brineglass Works to writer. Finally, set up a settings watch for my account.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_brineglass_forge_demo" + }, + "calendar_id": { + "eq": "cal_brineglass_works" + } + }, + "expected_changes": { + "calendar_id": { + "to": { + "eq": "cal_harbor_kiln_hall" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "cal_brineglass_works" + }, + "summary": { + "contains": "Saltglass Alignment" + }, + "start.dateTime": { + "contains": "2018-06-30T22:00" + }, + "end.dateTime": { + "contains": "2018-06-30T22:30" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_brineglass_works" + }, + "scope_value": { + "eq": "lucia@test.com" + } + }, + "expected_changes": { + "role": { + "to": { + "eq": "writer" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/users/user_agent/settings" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 6, + "tools_required": [ + "events.get", + "events.move", + "freeBusy.query", + "events.insert", + "acl.update", + "settings.watch" + ] + } + }, + { + "id": "test_47", + "name": "Quillshore Annex - import, ACL check, list entry review, dual watches", + "prompt": "Pull the calendar color palette and set Quillshore Annex (ID cal_quillshore_annex) to color ID 8. Then import the legacy entry Quillshore Salt Index into that calendar for June 30, 2018 from 2:00pm-3:00pm, location Brine Archive Hall, iCalUID quillshore-salt-20180630@annex. After that, check the ACL rule user:linh@test.com on Quillshore Annex and show me the calendar list entry for that calendar. Finally, start an ACL watch on Quillshore Annex and a calendar list watch for my account.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_quillshore_annex" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_changes": { + "color_id": { + "to": { + "eq": "8" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "cal_quillshore_annex" + }, + "summary": { + "contains": "Quillshore Salt Index" + }, + "location": { + "contains": "Brine Archive Hall" + }, + "start.dateTime": { + "contains": "2018-06-30T14:00" + }, + "end.dateTime": { + "contains": "2018-06-30T15:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/calendars/cal_quillshore_annex/acl" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/users/me/calendarList" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 7, + "tools_required": [ + "colors.get", + "calendarList.patch", + "events.import", + "acl.get", + "calendarList.get", + "acl.watch", + "calendarList.watch" + ] + } + }, + { + "id": "test_49", + "name": "Thistlewire Workshop - instances review, create, hide, watch, delete", + "prompt": "On the Thistlewire Workshop calendar (ID cal_thistlewire_workshop), list instances of the recurring event evt_thistlewire_cycles first. Then add a one-off event Bronze Fret Alignment on June 30, 2018 from 10:00am-11:00am. After that, hide the Thistlewire Workshop calendar in my list and start a calendar list watch for my account. Finally, delete the obsolete Copperwind Annex calendar (ID cal_copperwind_annex).", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "cal_thistlewire_workshop" + }, + "summary": { + "contains": "Bronze Fret Alignment" + }, + "start.dateTime": { + "contains": "2018-06-30T10:00" + }, + "end.dateTime": { + "contains": "2018-06-30T11:00" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_thistlewire_workshop" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_changes": { + "hidden": { + "to": true + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/users/me/calendarList" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendars", + "where": { + "id": { + "eq": "cal_copperwind_annex" + } + }, + "expected_changes": { + "deleted": { + "to": true + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 5, + "tools_required": [ + "events.instances", + "events.insert", + "calendarList.patch", + "calendarList.watch", + "calendars.delete" + ] + } + }, + { + "id": "test_50", + "name": "Emberveil Rookery - subscribe, watch, revoke, delete", + "prompt": "Subscribe me to the external calendar cal_emberveil_rookery. Then start an events watch on that calendar. Next, check Hana\u2019s calendar and only set up a settings watch for my account if Hana has an event on June 30, 2018 at 9:00-9:30am Asia/Tokyo time. Then, only remove Salma\u2019s access from Emberveil Rookery (rule cal_emberveil_rookery:user:salma@test.com) if that calendar has more than 7 events between June 20-27, 2018. Finally, delete the obsolete Ashfeather Annex calendar (ID cal_ashfeather_annex).", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_emberveil_rookery" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/calendars/cal_emberveil_rookery/events" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_emberveil_rookery" + }, + "scope_value": { + "eq": "salma@test.com" + }, + "deleted": { + "eq": true + } + }, + "expected_changes": { + "deleted": { + "to": true + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/users/user_agent/settings" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 0 + }, + { + "diff_type": "changed", + "entity": "calendars", + "where": { + "id": { + "eq": "cal_ashfeather_annex" + } + }, + "expected_changes": { + "deleted": { + "to": true + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 6, + "tools_required": [ + "calendarList.insert", + "events.watch", + "events.list", + "settings.watch", + "acl.delete", + "calendars.delete" + ] + } + }, + { + "id": "test_51", + "name": "Windchord Cartotheca - create, color, list patch, ACL update", + "prompt": "Create a new calendar named Windchord Cartotheca. Pull the calendar color palette and set it to color ID 11. Then fetch its calendar list entry and patch it so the calendar is visible and selected. Also update the calendar description to 'Atlas repair bays.' Fully replace Aiko\u2019s ACL rule (user:aiko@test.com) on this calendar to writer. At the very end, on my primary calendar, count the attendees on event evt_cartotheca_intake_huddle (Cartotheca Intake Huddle) and copy those attendees as invitees to event evt_atlas_crate_sync (Atlas Crate Sync). Add the note 'Copied attendees' to Atlas Crate Sync\u2019s description.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Windchord Cartotheca" + }, + "description": { + "contains": "Atlas repair bays" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_list_entries", + "where": { + "user_id": { + "eq": "user_agent" + } + }, + "expected_changes": { + "color_id": { + "to": { + "eq": "11" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "scope_value": { + "eq": "aiko@test.com" + }, + "role": { + "eq": "writer" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_atlas_crate_sync" + }, + "calendar_id": { + "eq": "test.user@test.com" + } + }, + "expected_changes": { + "description": { + "to": { + "contains": "Copied 3 attendees" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_event_attendees", + "where": { + "event_id": { + "eq": "evt_atlas_crate_sync" + }, + "email": { + "in": [ + "lucia@test.com", + "zahra@test.com", + "adebayo@test.com" + ] + } + }, + "expected_count": 3 + }, + { + "diff_type": "added", + "entity": "calendar_event_attendees", + "where": { + "event_id": { + "eq": "evt_atlas_crate_sync" + }, + "email": { + "not_in": [ + "lucia@test.com", + "zahra@test.com", + "adebayo@test.com" + ] + } + }, + "expected_count": 0 + } + ], + "metadata": { + "min_tool_calls": 8, + "tools_required": [ + "calendars.insert", + "colors.get", + "calendarList.patch", + "calendarList.get", + "calendars.patch", + "acl.update", + "events.get", + "events.patch" + ] + } + }, + { + "id": "test_52", + "name": "Stoneglow Depot - clear, replace, ACL update, move, settings watch", + "prompt": "Check my calendar list entry for Stoneglow Depot (ID cal_stoneglow_depot) first. Then fully replace the calendar metadata with summary Stoneglow Depot, description 'Crate intake ledger', and timezone America/Los_Angeles. Fully replace the ACL rule user:clerk@stoneglow.example to reader. Add the note 'Week-of intake note' to the description of all events in Stoneglow Depot that occur during the week of July 1-7, 2018. Move evt_stoneglow_manifest from Stoneglow Depot to Harbor Ledger (ID cal_harbor_ledger).", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_stoneglow_week_0702" + }, + "calendar_id": { + "eq": "cal_stoneglow_depot" + } + }, + "expected_changes": { + "description": { + "to": { + "contains": "Week-of intake note" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendars", + "where": { + "id": { + "eq": "cal_stoneglow_depot" + } + }, + "expected_changes": { + "description": { + "to": { + "contains": "Crate intake ledger" + } + }, + "time_zone": { + "to": { + "eq": "America/Los_Angeles" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_stoneglow_depot" + }, + "scope_value": { + "eq": "clerk@stoneglow.example" + } + }, + "expected_changes": { + "role": { + "to": { + "eq": "reader" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_stoneglow_week_0704" + }, + "calendar_id": { + "eq": "cal_stoneglow_depot" + } + }, + "expected_changes": { + "description": { + "to": { + "contains": "Week-of intake note" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_stoneglow_inventory" + }, + "calendar_id": { + "eq": "cal_stoneglow_depot" + } + }, + "expected_count": 0 + }, + { + "diff_type": "removed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_stoneglow_inventory" + }, + "calendar_id": { + "eq": "cal_stoneglow_depot" + } + }, + "expected_count": 0 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_stoneglow_inventory" + }, + "calendar_id": { + "eq": "cal_stoneglow_depot" + } + }, + "expected_count": 0 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_stoneglow_out_0615" + }, + "calendar_id": { + "eq": "cal_stoneglow_depot" + } + }, + "expected_count": 0 + }, + { + "diff_type": "removed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_stoneglow_out_0615" + }, + "calendar_id": { + "eq": "cal_stoneglow_depot" + } + }, + "expected_count": 0 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_stoneglow_out_0615" + }, + "calendar_id": { + "eq": "cal_stoneglow_depot" + } + }, + "expected_count": 0 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_stoneglow_manifest" + }, + "calendar_id": { + "eq": "cal_stoneglow_depot" + } + }, + "expected_changes": { + "calendar_id": { + "to": { + "eq": "cal_harbor_ledger" + } + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 7, + "tools_required": [ + "calendarList.get", + "calendars.update", + "acl.update", + "events.list", + "events.patch", + "events.move" + ] + } + }, + { + "id": "test_53", + "name": "Crystalfold Foundry - replace, delete events, unsubscribe", + "prompt": "On the Crystalfold Foundry calendar (ID cal_crystalfold_foundry), fully replace evt_crystalfold_quench so it\u2019s on July 1, 2018 from 9:00am-10:30am at Forge Bay 2. Then delete evt_crystalfold_slag and evt_crystalfold_mold. Finally, unsubscribe me from the Old Lattice Mill calendar (ID cal_old_lattice_mill).", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_crystalfold_quench" + }, + "calendar_id": { + "eq": "cal_crystalfold_foundry" + } + }, + "expected_changes": { + "start": { + "to": { + "contains": "2018-07-01T09:00" + } + }, + "end": { + "to": { + "contains": "2018-07-01T10:30" + } + }, + "location": { + "to": { + "contains": "Forge Bay 2" + } + } + }, + "expected_count": 1, + "ignore": [ + "attendees", + "color_id", + "description", + "recurrence", + "reminders", + "status", + "summary", + "transparency", + "visibility" + ] + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_crystalfold_slag" + }, + "calendar_id": { + "eq": "cal_crystalfold_foundry" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_crystalfold_mold" + }, + "calendar_id": { + "eq": "cal_crystalfold_foundry" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_old_lattice_mill" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_changes": { + "deleted": { + "to": true + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "events.update", + "events.delete", + "calendarList.delete" + ] + } + }, + { + "id": "test_54", + "name": "Sablewind Archive - share, revoke, list patch, settings watch", + "prompt": "On the Sablewind Archive calendar (ID cal_sablewind_archive), fetch its calendar list entry and set it to visible (not hidden) with color ID 5. Share the calendar with Keiko (keiko@test.com) as writer, and remove Salma\u2019s access (rule cal_sablewind_archive:user:salma@test.com). Finally, set up a settings watch for my account.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_sablewind_archive" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_changes": { + "hidden": { + "to": false + }, + "color_id": { + "to": { + "eq": "5" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_sablewind_archive" + }, + "scope_value": { + "eq": "keiko@test.com" + }, + "role": { + "eq": "writer" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_sablewind_archive" + }, + "scope_value": { + "eq": "salma@test.com" + }, + "deleted": { + "eq": true + } + }, + "expected_changes": { + "deleted": { + "to": true + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/users/user_agent/settings" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 5, + "tools_required": [ + "calendarList.get", + "calendarList.patch", + "acl.insert", + "acl.delete", + "settings.watch" + ] + } + }, + { + "id": "test_55", + "name": "Skyloom Observatory - event replace, ACL update, events watch", + "prompt": "On the Skyloom Observatory calendar (ID cal_skyloom_observatory), list events first. Then fully replace evt_skyloom_alignment so it\u2019s on July 2, 2018 from 8:00pm\u20139:00pm at Upper Ring. Also fully replace the ACL rule user:mechanic@skyloom.example to reader. After that, start an events watch on the Skyloom Observatory calendar and list events again to confirm the change.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_skyloom_alignment" + }, + "calendar_id": { + "eq": "cal_skyloom_observatory" + } + }, + "expected_changes": { + "start": { + "to": { + "contains": "2018-07-02T20:00" + } + }, + "end": { + "to": { + "contains": "2018-07-02T21:00" + } + }, + "location": { + "to": { + "contains": "Upper Ring" + } + } + }, + "expected_count": 1, + "ignore": [ + "attendees", + "color_id", + "description", + "recurrence", + "reminders", + "status", + "summary", + "transparency", + "visibility" + ] + }, + { + "diff_type": "changed", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_skyloom_observatory" + }, + "scope_value": { + "eq": "mechanic@skyloom.example" + } + }, + "expected_changes": { + "role": { + "to": { + "eq": "reader" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/calendars/cal_skyloom_observatory/events" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 5, + "tools_required": [ + "events.list", + "events.update", + "acl.update", + "events.watch" + ] + } + }, + { + "id": "test_56", + "name": "Ironlace Conservatory - clear, replace, instances, ACL patch, delete calendar", + "prompt": "On the Ironlace Conservatory calendar (ID cal_ironlace_conservatory), list instances of evt_ironlace_orchid first. Then clear all events from that calendar. After the reset, fully replace evt_ironlace_orchid so it's on July 3, 2018 from 10:00am-11:00am at Glassbed Hall. Patch Mina's ACL rule (user:mina@test.com) to reader. Then stop the old channel with id chan_ironlace_12 and resourceId res_ironlace_12. Finally, delete the Old Driftgreen calendar (ID cal_old_driftgreen).", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_ironlace_cleanup" + }, + "calendar_id": { + "eq": "cal_ironlace_conservatory" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_ironlace_orchid" + }, + "calendar_id": { + "eq": "cal_ironlace_conservatory" + } + }, + "expected_changes": { + "start": { + "to": { + "contains": "2018-07-03T10:00" + } + }, + "end": { + "to": { + "contains": "2018-07-03T11:00" + } + }, + "location": { + "to": { + "contains": "Glassbed Hall" + } + } + }, + "expected_count": 1, + "ignore": [ + "attendees", + "color_id", + "description", + "recurrence", + "reminders", + "status", + "summary", + "transparency", + "visibility" + ] + }, + { + "diff_type": "changed", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_ironlace_conservatory" + }, + "scope_value": { + "eq": "mina@test.com" + } + }, + "expected_changes": { + "role": { + "to": { + "eq": "reader" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "removed", + "entity": "calendar_channels", + "where": { + "id": { + "eq": "chan_ironlace_12" + }, + "resource_id": { + "eq": "res_ironlace_12" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendars", + "where": { + "id": { + "eq": "cal_old_driftgreen" + } + }, + "expected_changes": { + "deleted": { + "to": true + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 6, + "tools_required": [ + "events.instances", + "calendars.clear", + "events.update", + "acl.patch", + "channels.stop", + "calendars.delete" + ] + } + }, + { + "id": "test_57", + "name": "Tideglass Registry - subscribe, hide, color, import", + "prompt": "List my calendars first so we don't duplicate anything. Then subscribe me to the external Tideglass Registry calendar (ID cal_tideglass_registry). After that, hide that calendar in my list and set it to color ID 4. Finally, import the legacy entry Tideglass Ledger Seal into the Tideglass Registry calendar for July 4, 2018 from 1:00pm-2:00pm at Seawick Vault, iCalUID tideglass-seal-20180704@registry. Salma, Linh, Sven, and Mateusz are the stakeholders to keep in the loop.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_tideglass_registry" + }, + "user_id": { + "eq": "user_agent" + }, + "hidden": { + "eq": true + }, + "color_id": { + "eq": "4" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "cal_tideglass_registry" + }, + "ical_uid": { + "eq": "tideglass-seal-20180704@registry" + }, + "summary": { + "contains": "Tideglass Ledger Seal" + }, + "start.dateTime": { + "contains": "2018-07-04T13:00" + }, + "end.dateTime": { + "contains": "2018-07-04T14:00" + }, + "location": { + "contains": "Seawick Vault" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "calendarList.list", + "calendarList.insert", + "calendarList.patch", + "events.import" + ] + } + }, + { + "id": "test_58", + "name": "Glassreef Codex - count, move, patch, watch, clear", + "prompt": "For the Glassreef Codex calendar (ID cal_glassreef_codex), I need a tally log. First, check the calendar color palette and confirm my timezone setting. Then list July 1-31, 2018 events on Glassreef Codex and count how many include \"Tide-loom\" in the summary. Move the template event evt_kelp_murmur_template from cal_kelpshade_staging into Glassreef Codex and update it to Tide-loom Count Ledger at Pearlwork Desk, with a description that explicitly includes that count. Also fetch the ACL rule user:archivist@glassreef.example on Glassreef Codex, start an ACL watch for that calendar, and finally clear the old Barnacle Practice calendar (ID cal_barnacle_practice).", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_kelp_murmur_template" + }, + "calendar_id": { + "eq": "cal_glassreef_codex" + } + }, + "expected_changes": { + "calendar_id": { + "to": { + "eq": "cal_glassreef_codex" + } + }, + "summary": { + "to": { + "contains": "Tide-loom Count Ledger" + } + }, + "location": { + "to": { + "contains": "Pearlwork Desk" + } + }, + "description": { + "to": { + "regex": "(?i)(tide-loom.*\\b10\\b|\\b10\\b.*tide-loom)" + } + } + }, + "expected_count": 1, + "ignore": [ + "attendees", + "color_id", + "end", + "recurrence", + "reminders", + "start", + "status", + "transparency", + "visibility" + ] + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/calendars/cal_glassreef_codex/acl" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "cal_barnacle_practice" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 8, + "tools_required": [ + "colors.get", + "settings.get", + "events.list", + "events.move", + "events.patch", + "acl.get", + "acl.watch", + "calendars.clear" + ] + } + }, + { + "id": "test_59", + "name": "Seabriar Leave Ledger - count, book, cancel conflicts, reschedule", + "prompt": "Please help me plan leave using the Seabriar Leave Ledger calendar (ID cal_seabriar_leave). First list my calendar list to confirm the ledger is there, and fetch that calendar's metadata. Then count how many vacation days I've already used by listing instances of evt_used_vacation_day from Jan 1 to Aug 9, 2018. Use that count to book my vacation starting Aug 10, 2018 for the remaining days (assume the annual allowance is 20 days), and make sure you count only business days (no weekends). Before you lock it in, check instances of evt_company_blackout and evt_weekend_silence so you don't place anything on weekends. Update the ledger description to \"Leave ledger and tally-based booking,\" share the ledger with Aiko (aiko@test.com) as a reader, and set its calendar list entry to visible with color ID 10. Create the vacation block event on the ledger, and quick-add a reminder: \"Send pigeon letter Sep 10, 2018 9am.\" Also stop the old channel chan_leave_09 / res_leave_09.\n\nNext, cancel all events on my primary calendar that overlap the vacation window. Finally, I want to know if a pigeon letter sent on Sep 10 (it takes 6 days) would arrive before when the Clilffside Pact (evt_cliffside_pact) is scheduled. If it would not, move it to the earliest weekday after the arrival of the pigeon mail that doesn't overlap my vacation.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendars", + "where": { + "id": { + "eq": "cal_seabriar_leave" + } + }, + "expected_changes": { + "description": { + "to": { + "contains": "Leave ledger and tally-based booking" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_seabriar_leave" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_changes": { + "hidden": { + "to": false + }, + "color_id": { + "to": { + "eq": "10" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_acl_rules", + "where": { + "calendar_id": { + "eq": "cal_seabriar_leave" + }, + "scope_value": { + "eq": "aiko@test.com" + }, + "role": { + "eq": "reader" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "cal_seabriar_leave" + }, + "summary": { + "contains": "Seabriar Leave Block" + }, + "start": { + "contains": "2018-08-10" + }, + "end": { + "contains": "2018-08-23" + }, + "end.dateTime": { + "contains": "2018-08-23" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "cal_seabriar_leave" + }, + "summary": { + "contains": "Send pigeon letter Sep 10, 2018 9am" + } + }, + "expected_count": 1 + }, + { + "diff_type": "removed", + "entity": "calendar_channels", + "where": { + "id": { + "eq": "chan_leave_09" + }, + "resource_id": { + "eq": "res_leave_09" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_primary_leave_conflict_1" + }, + "calendar_id": { + "eq": "test.user@test.com" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_primary_leave_conflict_2" + }, + "calendar_id": { + "eq": "test.user@test.com" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_cliffside_pact" + }, + "calendar_id": { + "eq": "test.user@test.com" + } + }, + "expected_changes": { + "start": { + "to": { + "contains": "2018-09-17T10:00" + } + }, + "end": { + "to": { + "contains": "2018-09-17T11:00" + } + } + }, + "expected_count": 1, + "ignore": [ + "attendees", + "color_id", + "description", + "location", + "recurrence", + "reminders", + "status", + "summary", + "transparency", + "visibility" + ] + } + ], + "metadata": { + "min_tool_calls": 12, + "tools_required": [ + "calendarList.list", + "calendars.get", + "events.instances", + "calendars.patch", + "acl.insert", + "calendarList.patch", + "events.insert", + "events.quickAdd", + "channels.stop", + "events.list", + "events.delete", + "events.patch" + ] + } + }, + { + "id": "test_60", + "name": "Ivory Loom Archive - purge blood events", + "prompt": "On the Ivory Loom Archive calendar (ID cal_ivory_loom_archive), I need a cleanup. First, switch this calendar's timezone to match Ewa's. Next, list the calendar's ACL rules so we confirm access. After that, list events on Ivory Loom Archive and identify every event whose title or description contains the word \"blood\". Delete all of those events.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "changed", + "entity": "calendars", + "where": { + "id": { + "eq": "cal_ivory_loom_archive" + } + }, + "expected_changes": { + "time_zone": { + "to": { + "eq": "Europe/Warsaw" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_ivory_loom_blood_ink" + }, + "calendar_id": { + "eq": "cal_ivory_loom_archive" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_ivory_loom_redaction" + }, + "calendar_id": { + "eq": "cal_ivory_loom_archive" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_ivory_loom_blood_oath" + }, + "calendar_id": { + "eq": "cal_ivory_loom_archive" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_ivory_loom_crimson_notice" + }, + "calendar_id": { + "eq": "cal_ivory_loom_archive" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "calendars.patch", + "acl.list", + "events.list", + "events.delete" + ] + } + }, + { + "id": "test_61", + "name": "Wavelock Guest Sweep - create, purge attendees, freebusy, watch", + "prompt": "Create a new calendar called Wavelock Guest Sweep. Fully update that calendar to set timezone Europe/Berlin and description \"Guest sweep log and embargo notes.\" Then list events on my primary calendar and identify all events where Aiko, Farid, Lucia, or Oksana appear in the attendee list. Delete every such event. Run a free/busy query for those four across Aug 1\u20137, 2018, then another for Aug 8\u201314, 2018. Schedule a weekly 30-minute event on my primary calendar at the earliest time that doesn't conflict with any of those four attendees. Unsubscribe me from the legacy calendar cal_wavelock_legacy. Finally, start a watch on my calendar list and a watch on my settings.", + "type": "actionEval", + "seed_template": "calendar_default", + "impersonate_user_id": "user_agent", + "assertions": [ + { + "diff_type": "added", + "entity": "calendars", + "where": { + "summary": { + "contains": "Wavelock Guest Sweep" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendars", + "where": { + "summary": { + "contains": "Wavelock Guest Sweep" + } + }, + "expected_changes": { + "time_zone": { + "to": { + "eq": "Europe/Berlin" + } + }, + "description": { + "to": { + "contains": "Guest sweep log and embargo notes" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_primary_guest_aiko_farid" + }, + "calendar_id": { + "eq": "test.user@test.com" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_events", + "where": { + "id": { + "eq": "evt_primary_guest_lucia_oksana" + }, + "calendar_id": { + "eq": "test.user@test.com" + } + }, + "expected_changes": { + "status": { + "to": { + "eq": "cancelled" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_events", + "where": { + "calendar_id": { + "eq": "test.user@test.com" + }, + "start.dateTime": { + "contains": "2018-08-01T09:00" + }, + "end.dateTime": { + "contains": "2018-08-01T09:30" + }, + "start.timeZone": { + "eq": "America/Los_Angeles" + }, + "recurrence": { + "contains": "RRULE:FREQ=WEEKLY" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "calendar_list_entries", + "where": { + "calendar_id": { + "eq": "cal_wavelock_legacy" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_changes": { + "deleted": { + "to": true + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/users/me/calendarList" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "calendar_channels", + "where": { + "resource_uri": { + "eq": "/users/user_agent/settings" + }, + "user_id": { + "eq": "user_agent" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 10, + "tools_required": [ + "calendars.insert", + "calendars.update", + "events.list", + "events.delete", + "freeBusy.query", + "events.insert", + "calendarList.delete", + "calendarList.watch", + "settings.watch" + ] + } + } + ] +} \ No newline at end of file diff --git a/experiments/kdd 2026/qualitative_analysis/test_suites/linear_bench.json b/experiments/kdd 2026/qualitative_analysis/test_suites/linear_bench.json new file mode 100644 index 0000000..86ea4ac --- /dev/null +++ b/experiments/kdd 2026/qualitative_analysis/test_suites/linear_bench.json @@ -0,0 +1,3388 @@ +{ + "id": "linear-bench", + "name": "Linear Bench", + "description": "Benchmark tests for Linear MCP operations", + "service": "linear", + "ignore_fields": { + "global": [ + "created_at", + "updated_at", + "updatedAt", + "createdAt", + "editedAt" + ] + }, + "tests": [ + { + "id": "test_0", + "name": "Create a new issue", + "prompt": "Create a new issue in the Engineering team titled 'Fix login bug' ", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issues", + "where": { + "teamId": { + "eq": "ad608998-915c-4bad-bcd9-85ebfccccee8" + }, + "title": { + "contains": "login bug" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "teams", + "issueCreate" + ] + } + }, + { + "id": "test_1", + "name": "Create a new issue", + "prompt": "Create a new issue in the Engineering team titled 'Fix login bug' with high priority", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issues", + "where": { + "teamId": { + "eq": "ad608998-915c-4bad-bcd9-85ebfccccee8" + }, + "title": { + "contains": "login bug" + }, + "priority": { + "eq": 2.0 + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "teams", + "issueCreate" + ] + } + }, + { + "id": "test_2", + "name": "Update issue status to In Progress", + "prompt": "Move issue ENG-1 to 'In Progress' status", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "ENG-1" + } + }, + "expected_changes": { + "stateId": { + "to": { + "eq": "6963a682-5967-477a-9afc-0b8a5b70b070" + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "issues", + "workflowStates", + "issueUpdate" + ] + } + }, + { + "id": "test_3", + "name": "Assign issue to user", + "prompt": "Assign issue ENG-2 to John Doe", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "ENG-2" + } + }, + "expected_changes": { + "assigneeId": { + "from": { + "eq": "03b0809e-713e-44ee-95de-b7a198b135ac" + }, + "to": { + "eq": "2dcc8dc2-ca19-475d-9882-3ba5e911e7ec" + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "issues", + "users", + "issueUpdate" + ] + } + }, + { + "id": "test_4", + "name": "Add comment to issue", + "prompt": "Add a comment to issue ENG-1 saying 'I am working on this now'", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "comments", + "where": { + "issueId": { + "eq": "c6e168e3-fed4-45d0-b03f-a1c1f89ee7ab" + }, + "body": { + "contains": "working on this" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 1, + "tools_required": [ + "commentCreate" + ] + } + }, + { + "id": "test_5", + "name": "Create a new team", + "prompt": "Create a new team called 'Design'", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "teams", + "where": { + "name": { + "eq": "Design" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "workflow_states", + "where": { + "name": { + "eq": "Backlog" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 1, + "tools_required": [ + "teamCreate" + ] + } + }, + { + "id": "test_6", + "name": "Change issue priority to Urgent", + "prompt": "Change the priority of issue ENG-1 to Urgent", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "ENG-1" + } + }, + "expected_changes": { + "priority": { + "to": { + "eq": 1.0 + } + }, + "priorityLabel": { + "to": { + "eq": "Urgent" + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "issues", + "issueUpdate" + ] + } + }, + { + "id": "test_7", + "name": "Create issue with assignee and description", + "prompt": "Create a new issue 'Improve performance' in Engineering team, assign to John, with description 'Optimize database queries'", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issues", + "where": { + "teamId": { + "eq": "ad608998-915c-4bad-bcd9-85ebfccccee8" + }, + "title": { + "contains": "performance" + }, + "assigneeId": { + "eq": "2dcc8dc2-ca19-475d-9882-3ba5e911e7ec" + }, + "description": { + "contains": "database queries" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "teams", + "users", + "issueCreate" + ] + } + }, + { + "id": "test_8", + "name": "Update issue description", + "prompt": "Update the description of issue ENG-1 to include 'Root cause: session timeout issue'", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "ENG-1" + } + }, + "expected_changes": { + "description": { + "to": { + "contains": "session timeout" + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "issues", + "issueUpdate" + ] + } + }, + { + "id": "test_9", + "name": "Create multiple issues in batch", + "prompt": "Create three new issues in the Engineering team: 'Update documentation', 'Refactor API endpoints', and 'Add unit tests'", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issues", + "where": { + "teamId": { + "eq": "ad608998-915c-4bad-bcd9-85ebfccccee8" + } + }, + "expected_count": 3 + } + ], + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "teams", + "issueCreate" + ] + } + }, + { + "id": "test_10", + "name": "Complete issue (move to Done)", + "prompt": "Mark issue ENG-1 as completed", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "ENG-1" + } + }, + "expected_changes": { + "stateId": { + "to": { + "eq": "4334c4ee-405c-4d2c-bf25-4dcb7a8c0512" + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "issues", + "workflowStates", + "issueUpdate" + ] + } + }, + { + "id": "test_11", + "name": "Create a new label", + "prompt": "Create a new label called 'Bugs' ", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issue_labels", + "where": { + "name": { + "eq": "Bugs" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 1, + "tools_required": [ + "issueLabelCreate" + ] + } + }, + { + "id": "test_12", + "name": "Apply Bugs label to login issue", + "prompt": "Add the newly created 'Bugs' label to the Engineering login issue currently assigned to John Doe.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issue_label_issue_association", + "where": { + "issue_id": { + "eq": "c6e168e3-fed4-45d0-b03f-a1c1f89ee7ab" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "issueLabels", + "issues", + "issueUpdate" + ] + } + }, + { + "id": "test_13", + "name": "Add UX label to onboarding issue", + "prompt": "Add the 'UX' label to the onboarding dashboard issue that Sarah Smith owns.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issue_label_issue_association", + "where": { + "issue_id": { + "eq": "5c62f29d-0f6a-4c4d-9d25-52293e2a8d4f" + }, + "issue_label_id": { + "eq": "f9c5b7c8-3909-4f8b-bc25-73e1b56a9c0c" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "issueLabels", + "issues", + "issueUpdate" + ] + } + }, + { + "id": "test_14", + "name": "Update login issue title", + "prompt": "Rename the Engineering issue describing intermittent login failures to 'Fix login bug - follow up'.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "ENG-1" + } + }, + "expected_changes": { + "title": { + "to": { + "contains": "follow up" + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "issues", + "issueUpdate" + ] + } + }, + { + "id": "test_15", + "name": "Tag commented issue with RL label", + "prompt": "Add the 'RL' label to the login issue that John Doe recently commented on.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issue_label_issue_association", + "where": { + "issue_id": { + "eq": "c6e168e3-fed4-45d0-b03f-a1c1f89ee7ab" + }, + "issue_label_id": { + "eq": "8f01ce9d-1433-4c4c-969d-21ca3bf2718f" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "users", + "comments", + "issueLabels", + "issueUpdate" + ] + } + }, + { + "id": "test_16", + "name": "Move ENG-2 to In Review", + "prompt": "Move issue ENG-2 to 'In Review'", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "ENG-2" + } + }, + "expected_changes": { + "stateId": { + "to": { + "eq": "4379b3d7-1143-4aa4-a3a6-da0c436e73b6" + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "issues", + "workflowStates", + "issueUpdate" + ] + } + }, + { + "id": "test_17", + "name": "Reassign ENG-3 to Sarah", + "prompt": "Assign ENG-3 to Sarah Smith", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "ENG-3" + } + }, + "expected_changes": { + "assigneeId": { + "to": { + "eq": "03b0809e-713e-44ee-95de-b7a198b135ac" + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "issues", + "users", + "issueUpdate" + ] + } + }, + { + "id": "test_18", + "name": "Create issue with labels UX and Urgent", + "prompt": "Create a new Engineering issue 'Polish navigation' with labels 'UX' and 'Urgent'", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issues", + "where": { + "teamId": { + "eq": "ad608998-915c-4bad-bcd9-85ebfccccee8" + }, + "title": { + "contains": "Polish navigation" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issue_label_issue_association", + "where": {}, + "expected_count": { + "min": 2 + } + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "teams", + "issueLabels", + "issueCreate" + ] + } + }, + { + "id": "test_19", + "name": "Add a comment to ENG-3", + "prompt": "Add a comment to ENG-3: 'Please add logs for the error path'", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "comments", + "where": { + "issueId": { + "eq": "87c1d2f3-66c4-4dd0-bc93-1b99d04dc374" + }, + "body": { + "contains": "error path" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 1, + "tools_required": [ + "commentCreate" + ] + } + }, + { + "id": "test_20", + "name": "Update seeded comment on ENG-1", + "prompt": "Update the seeded comment on ENG-1 to: 'Updated: working on a fix and adding tests'", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "comments", + "where": { + "id": { + "eq": "e10f59c3-7a49-4d52-8dba-8c8602f8c807" + } + }, + "expected_changes": { + "body": { + "to": { + "contains": "Updated: working on a fix" + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "issues", + "comments", + "commentUpdate" + ] + } + }, + { + "id": "test_21", + "name": "Delete seeded comment on ENG-1", + "prompt": "Delete the seeded comment on ENG-1", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "comments", + "where": { + "id": { + "eq": "e10f59c3-7a49-4d52-8dba-8c8602f8c807" + } + }, + "expected_changes": { + "archivedAt": { + "from": { + "exists": false + }, + "to": { + "exists": true + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "issues", + "comments", + "commentDelete" + ] + } + }, + { + "id": "test_22", + "name": "Batch create issues with labels", + "prompt": "Create two Engineering issues: 'Update onboarding docs' (label UX) and 'Add circuit breaker' (label Urgent)", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issues", + "where": { + "teamId": { + "eq": "ad608998-915c-4bad-bcd9-85ebfccccee8" + }, + "title": { + "contains": "onboarding docs" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "teamId": { + "eq": "ad608998-915c-4bad-bcd9-85ebfccccee8" + }, + "title": { + "contains": "circuit breaker" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issue_label_issue_association", + "where": {}, + "expected_count": { + "min": 2 + } + } + ], + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "teams", + "issueLabels", + "issueCreate" + ] + } + }, + { + "id": "test_23", + "name": "Move ENG-1 to Canceled", + "prompt": "Cancel issue ENG-1 (set its status to Canceled)", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "ENG-1" + } + }, + "expected_changes": { + "stateId": { + "to": { + "eq": "d4f59a6d-33cb-45d1-8f4e-3e57536f912d" + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "issues", + "workflowStates", + "issueUpdate" + ] + } + }, + { + "id": "test_24", + "name": "Create temporary label and apply to ENG-2", + "prompt": "Create a new label 'Backend' and add it to ENG-2", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issue_labels", + "where": { + "name": { + "eq": "Backend" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issue_label_issue_association", + "where": { + "issue_id": { + "eq": "5c62f29d-0f6a-4c4d-9d25-52293e2a8d4f" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "issueLabelCreate", + "issues", + "issueUpdate" + ] + } + }, + { + "id": "test_25", + "name": "Rename a label", + "prompt": "Rename the label 'UX' to 'User Experience'", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issue_labels", + "where": { + "id": { + "eq": "f9c5b7c8-3909-4f8b-bc25-73e1b56a9c0c" + } + }, + "expected_changes": { + "name": { + "to": { + "eq": "User Experience" + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "issueLabels", + "issueLabelUpdate" + ] + } + }, + { + "id": "test_26", + "name": "Remove assignee from ENG-1", + "prompt": "Unassign ENG-1 so it has no assignee", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "ENG-1" + } + }, + "expected_changes": { + "assigneeId": { + "to": { + "exists": false + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "issues", + "issueUpdate" + ] + } + }, + { + "id": "test_27", + "name": "Create State, Issue, and Comment flow", + "prompt": "Add a new workflow state for the product team called 'Done'. Then, create a new issue in this team called 'Mini-demo', mark it as done, and add a comment to it saying 'Marking it as done because Hubert already prepped the demo but forgot to create an issue'.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "workflow_states", + "where": { + "name": { + "eq": "Done" + }, + "teamId": { + "eq": "cdb85540-5065-4346-8aef-ae2b72d6e940" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "eq": "Mini-demo" + }, + "teamId": { + "eq": "cdb85540-5065-4346-8aef-ae2b72d6e940" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "Hubert already prepped" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 5, + "tools_required": [ + "teams", + "workflowStateCreate", + "issueCreate", + "issueUpdate", + "commentCreate" + ] + } + }, + { + "id": "test_28", + "name": "Remove workflow state", + "prompt": "Remove the 'Duplicate' workflow state from the Engineering team.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "workflow_states", + "where": { + "id": { + "eq": "ab04ec5f-1292-48b0-9426-50d354957357" + } + }, + "expected_changes": { + "archivedAt": { + "from": { + "exists": false + }, + "to": { + "exists": true + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "workflowStates", + "workflowStateArchive" + ] + } + }, + { + "id": "test_29", + "name": "Resolve duplicate issues (requires creating state)", + "prompt": "Find duplicated issues regarding 'trace analysis' in the Product team and mark the 2nd one (the newer one) as a duplicate.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "workflow_states", + "where": { + "name": { + "eq": "Duplicate" + }, + "teamId": { + "eq": "cdb85540-5065-4346-8aef-ae2b72d6e940" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "PROD-2" + } + }, + "expected_changes": { + "stateId": { + "from": { + "eq": "0fde0f94-ee5f-4a37-ad23-a3acd0080c57" + }, + "to": { + "exists": true + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "teams", + "issues", + "workflowStateCreate", + "issueUpdate" + ] + } + }, + { + "id": "test_30", + "name": "Add member to team", + "prompt": "Add Artem (b55072d7-ccaa-43cd-8ab7-3dca324e3294) to the Product team.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "team_memberships", + "where": { + "userId": { + "eq": "b55072d7-ccaa-43cd-8ab7-3dca324e3294" + }, + "teamId": { + "eq": "cdb85540-5065-4346-8aef-ae2b72d6e940" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "teams", + "teamMembershipCreate" + ] + } + }, + { + "id": "test_31", + "name": "Edit comment with link", + "prompt": "Please edit the comment (id: e6a0f6c4-4d0e-4f4c-9a54-444444444444) about open telemetry and include the link 'https://smith.langchain.com/' as an example.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "comments", + "where": { + "id": { + "eq": "e6a0f6c4-4d0e-4f4c-9a54-444444444444" + } + }, + "expected_changes": { + "body": { + "to": { + "contains": "smith.langchain.com" + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 1, + "tools_required": [ + "commentUpdate" + ] + } + }, + { + "id": "test_32", + "name": "Vacation Handoff (Conditional Batch Reassignment)", + "prompt": "John Doe is going on vacation. Reassign all of his 'Urgent' issues to Sarah Smith, but leave his non-urgent work as is.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "ENG-3" + } + }, + "expected_changes": { + "assigneeId": { + "from": { + "eq": "2dcc8dc2-ca19-475d-9882-3ba5e911e7ec" + }, + "to": { + "eq": "03b0809e-713e-44ee-95de-b7a198b135ac" + } + } + }, + "ignore": [ + "updatedAt" + ] + }, + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "ENG-1" + } + }, + "expected_count": 0, + "expected_changes": { + "assigneeId": { + "to": { + "exists": true + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "users", + "issueLabels", + "issues", + "issueUpdate" + ] + } + }, + { + "id": "test_33", + "name": "Cross-Team Issue Migration", + "prompt": "The 'Polish onboarding dashboard UX' issue was filed in Engineering by mistake. Move it to the Product team and reset its status to 'In Review'.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "ENG-2" + } + }, + "expected_changes": { + "teamId": { + "from": { + "eq": "ad608998-915c-4bad-bcd9-85ebfccccee8" + }, + "to": { + "eq": "cdb85540-5065-4346-8aef-ae2b72d6e940" + } + }, + "stateId": { + "to": { + "eq": "31d46818-d16d-4279-90e6-a7bab45561c0" + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "issues", + "teams", + "workflowStates", + "issueUpdate" + ] + } + }, + { + "id": "test_34", + "name": "Create Follow-up Task from Incident Comments", + "prompt": "Read the comments on the 'production incident' ticket. Create a new Engineering ticket titled 'Fix 500 errors in eval runner' with a description based on the analysis in the comments. Mark this new ticket as being blocked by ENG-3.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "Fix 500 errors" + }, + "description": { + "contains": "agent" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issue_relations", + "where": { + "type": { + "eq": "blocks" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 5, + "tools_required": [ + "issues", + "comments", + "teams", + "issueCreate", + "issueRelationCreate" + ] + } + }, + { + "id": "test_35", + "name": "Load Balancer (Logic & Aggregation)", + "prompt": "Assign the 'email sign-in' ticket to the Engineering team member who currently has the fewest assigned issues. If there is a tie, pick anyone with the lowest count.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "ENG-6" + } + }, + "expected_changes": { + "assigneeId": { + "to": { + "eq": "b55072d7-ccaa-43cd-8ab7-3dca324e3294" + } + } + }, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "teams", + "issues", + "issueUpdate" + ] + } + }, + { + "id": "test_36", + "name": "Label Migration (Batch & Sequence)", + "prompt": "We are replacing the 'RL' label with a new 'AI' label. Create a new label named 'AI'. Find all tickets with the 'RL' label, tag them with 'AI', and remove the 'RL' label.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issue_labels", + "where": { + "name": { + "eq": "AI" + } + }, + "expected_count": 1 + }, + { + "diff_type": "removed", + "entity": "issue_label_issue_association", + "where": { + "issue_id": { + "eq": "b4f5130f-5c1b-4bc0-a8f6-60a22b0adf5e" + }, + "issue_label_id": { + "eq": "8f01ce9d-1433-4c4c-969d-21ca3bf2718f" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issue_label_issue_association", + "where": { + "issue_id": { + "eq": "b4f5130f-5c1b-4bc0-a8f6-60a22b0adf5e" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "issueLabelCreate", + "issueLabels", + "issues", + "issueUpdate" + ] + } + }, + { + "id": "test_37", + "name": "SLA Enforcement (Dates & States)", + "prompt": "Find any Engineering tickets in 'In Progress' that were created before Jan 2nd, 2025. Move them back to 'Todo' and add a comment: 'Demoted due to lack of progress'.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "ENG-3" + } + }, + "expected_changes": { + "stateId": { + "to": { + "eq": "741f29ae-cfb3-4b8a-a1f8-c5161c842366" + } + } + }, + "ignore": [ + "updatedAt" + ] + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "issueId": { + "eq": "87c1d2f3-66c4-4dd0-bc93-1b99d04dc374" + }, + "body": { + "contains": "Demoted" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 5, + "tools_required": [ + "teams", + "workflowStates", + "issues", + "issueUpdate", + "commentCreate" + ] + } + }, + { + "id": "test_39", + "name": "Issue Decomposition (Hierarchy)", + "prompt": "Break down the 'SSO' ticket into two sub-issues: 'Frontend Implementation' (assigned to Sarah) and 'Backend API' (assigned to John). Ensure the previous ticket is set as the parent for both.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issues", + "where": { + "parentId": { + "eq": "7d3f21ac-89c1-4f3b-9c2e-4fe3a1b71002" + }, + "assigneeId": { + "eq": "03b0809e-713e-44ee-95de-b7a198b135ac" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "parentId": { + "eq": "7d3f21ac-89c1-4f3b-9c2e-4fe3a1b71002" + }, + "assigneeId": { + "eq": "2dcc8dc2-ca19-475d-9882-3ba5e911e7ec" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "issues", + "users", + "issueCreate" + ] + } + }, + { + "id": "test_40", + "name": "Dependency Chain Creation", + "prompt": "Create three new issues in Engineering: 'Alpha', 'Beta', and 'Gamma'. Configure them as a dependency chain where Alpha blocks Beta, and Beta blocks Gamma.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issues", + "where": { + "teamId": { + "eq": "ad608998-915c-4bad-bcd9-85ebfccccee8" + } + }, + "expected_count": 3 + }, + { + "diff_type": "added", + "entity": "issue_relations", + "where": { + "type": { + "eq": "blocks" + } + }, + "expected_count": 2 + } + ], + "metadata": { + "min_tool_calls": 6, + "tools_required": [ + "teams", + "issueCreate", + "issueRelationCreate" + ] + } + }, + { + "id": "test_41", + "name": "Fermentation Festival Coordination", + "prompt": "The community center is hosting the \"Living Cultures Festival\" from Feb 15-19. Create a new team called \"Fermentation Guild\" to coordinate this event. We need to track fermentation timelines carefully.\n\nFirst, add a new workflow state called \"Fermenting\" (color: #8B4513, type: started) to the new team - this will help us track items that are actively culturing.\n\nCreate a label called \"time-critical\" for tasks with strict biological deadlines.\n\nNow for the tricky scheduling: Kenji needs to start his 3-week miso base by January 25th at the latest for it to be ready for the festival tasting on Feb 18th. Create an issue titled \"Prepare Kenji miso base for Feb 18 tasting\" and assign it to Kenji with the time-critical label.\n\nHowever, Fatima needs access to the koji room first to inoculate spores for her amazake demonstration. Create another issue \"Inoculate koji spores for amazake - Fatima\" and set it up so that it blocks Kenji's miso preparation (they share the temperature-controlled koji room and can't run both processes simultaneously).\n\nFinally, add a comment to the miso task that says: \"CULTURE_READY_CHECK: Verify koji colonization complete before rice inoculation. Target temp 86F for 48hrs.\"", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "teams", + "where": { + "name": { + "eq": "Fermentation Guild" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "workflow_states", + "where": { + "name": { + "eq": "Fermenting" + }, + "color": { + "eq": "#8B4513" + }, + "type": { + "eq": "started" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issue_labels", + "where": { + "name": { + "eq": "time-critical" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "miso base" + }, + "assigneeId": { + "eq": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "koji spores" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issue_label_issue_association", + "where": {}, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issue_relations", + "where": { + "type": { + "eq": "blocks" + }, + "issueTitle": { + "contains": "koji spores" + }, + "relatedIssueTitle": { + "contains": "miso" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "CULTURE_READY_CHECK" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 10, + "tools_required": [ + "teams", + "teamCreate", + "users", + "workflowStateCreate", + "issueLabelCreate", + "issueCreate", + "issueRelationCreate", + "issueUpdate", + "commentCreate" + ] + } + }, + { + "id": "test_42", + "name": "Seed Library Germination Audit", + "prompt": "The Seed Library team is conducting its quarterly germination audit. We need to evaluate each donor's success rate and take appropriate action.\n\nFirst, calculate Yuto's germination rate: count how many of his seed packets are in \"Sprouted\" status versus \"Failed\" status, then compute (sprouted / total) \u00d7 100. If his rate is 75% or higher AND he has at least 2 different varieties that sprouted, create a new label called \"Seed Guardian\" and apply it to all of his packets as recognition.\n\nNext, handle Nneka's special case: she donated exactly one packet and it's marked as priority 1 (rare heirloom). Regardless of whether it sprouted or failed, move this packet to \"Preserved Collection\" status\u2014the library will attempt tissue culture propagation on rare genetics.\n\nFinally, evaluate Szymon's packets the same way. If his germination rate is below 60%, move all his non-sprouted packets to \"Needs Donor Review\" status and add a comment to each one that reads: \"GERMINATION_AUDIT: X sprouted / Y total = Z% - below 60% threshold\" where X, Y, Z are the actual calculated values.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issue_labels", + "where": { + "name": { + "eq": "Seed Guardian" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issue_label_issue_association", + "where": {}, + "expected_count": 4 + }, + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "SEED-5" + } + }, + "expected_changes": { + "stateId": { + "to": { + "eq": "34567890-bcde-f012-3456-789abcdef012" + } + } + }, + "ignore": [ + "updatedAt" + ] + }, + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "SEED-7" + } + }, + "expected_changes": { + "stateId": { + "to": { + "eq": "45678901-cdef-0123-4567-89abcdef0123" + } + } + }, + "ignore": [ + "updatedAt" + ] + }, + { + "diff_type": "changed", + "entity": "issues", + "where": { + "identifier": { + "eq": "SEED-8" + } + }, + "expected_changes": { + "stateId": { + "to": { + "eq": "45678901-cdef-0123-4567-89abcdef0123" + } + } + }, + "ignore": [ + "updatedAt" + ] + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "GERMINATION_AUDIT:" + } + }, + "expected_count": 2 + } + ], + "metadata": { + "min_tool_calls": 9, + "tools_required": [ + "teams", + "issues", + "users", + "issueLabels", + "workflowStates", + "issueLabelCreate", + "issueUpdate", + "commentCreate" + ] + } + }, + { + "id": "test_43", + "name": "Forest Mycology Collective Expedition", + "prompt": "The Forest Mycology Collective is organizing their autumn foraging expedition. First, create a new team called \"Forest Mycology Collective\" to track all club activities.\n\nCreate a label called \"awaiting-spore-print\" for specimens that need laboratory analysis before identification can be confirmed.\n\nNow set up the expedition: create an issue titled \"Coastal Redwood Reserve Autumn Foray\" and assign it to Haruki as the expedition leader.\n\nDuring the planning phase, we're pre-logging anticipated specimen finds based on last year's survey. Create a specimen issue titled \"Specimen #1: Cantharellus formosus cluster - Sector 7\" and assign it to Priya for documentation. Create another specimen issue \"Specimen #2: Unknown Amanita - requires cross-reference\" and assign it to Dmitri, applying the \"awaiting-spore-print\" label.\n\nThe Amanita identification depends on comparing its spore print against the Cantharellus specimen first (they were found in the same microhabitat and we need to rule out look-alikes). Set up the Amanita issue as blocked by the Cantharellus issue.\n\nFinally, add a field note comment to the Cantharellus specimen that reads: \"FIELD_NOTE_REF: GPS coordinates 41.2132\u00b0N, found near fallen Douglas fir. Fruiting body golden-yellow, false gills present, apricot aroma confirmed.\"", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "teams", + "where": { + "name": { + "eq": "Forest Mycology Collective" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issue_labels", + "where": { + "name": { + "eq": "awaiting-spore-print" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "Coastal Redwood Reserve" + }, + "assigneeId": { + "eq": "f6a7b8c9-d0e1-2345-0123-789012345678" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "Cantharellus formosus" + }, + "assigneeId": { + "eq": "b8c9d0e1-f2a3-4567-2345-901234567890" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "Amanita" + }, + "assigneeId": { + "eq": "a7b8c9d0-e1f2-3456-1234-890123456789" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issue_label_issue_association", + "where": {}, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issue_relations", + "where": { + "type": { + "eq": "blocks" + }, + "issueTitle": { + "contains": "Cantharellus" + }, + "relatedIssueTitle": { + "contains": "Amanita" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "FIELD_NOTE_REF:" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 11, + "tools_required": [ + "teams", + "teamCreate", + "users", + "issueLabels", + "issueLabelCreate", + "issueCreate", + "issueUpdate", + "issueRelationCreate", + "commentCreate" + ] + } + }, + { + "id": "test_44", + "name": "Mobile App Release - QA Bug Tracking", + "prompt": "The Mobile team is preparing for the v2.5 release and QA has reported some critical bugs that need to be tracked.\n\nFirst, create a new issue titled \"App crashes on login with special characters\" in the Mobile team. This is a high priority bug. Assign it to Marcus.\n\nCreate another issue titled \"Push notifications not working on Android 14\" in the same team and assign it to Aisha.\n\nMove both issues to \"In Progress\" status since the developers are starting work on them immediately.\n\nFinally, add a comment to the login crash issue with the following reproduction steps: \"REPRO_STEPS: 1. Open app 2. Enter username with & or % character 3. Tap login button 4. App crashes to home screen. Tested on iOS 17.2 and Android 14.\"", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "crashes on login" + }, + "assigneeId": { + "eq": "c9d0e1f2-a3b4-5678-3456-012345678901" + }, + "stateId": { + "eq": "mob-state-inprogress-567890abcdef" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "Push notifications" + }, + "assigneeId": { + "eq": "d0e1f2a3-b4c5-6789-4567-123456789012" + }, + "stateId": { + "eq": "mob-state-inprogress-567890abcdef" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "REPRO_STEPS:" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 8, + "tools_required": [ + "teams", + "users", + "issueLabels", + "workflowStates", + "issueCreate", + "issueUpdate", + "commentCreate" + ] + } + }, + { + "id": "test_45", + "name": "IT Support Ticket Workflow", + "prompt": "The IT Support team received a critical server outage report. Here's the workflow to execute:\n\nFirst, check if a label called \"hardware-failure\" exists. If it doesn't, create it.\n\nCreate a new issue titled \"Server rack B7 unresponsive - power supply failure\" in the IT Support team.\n\nApply the \"hardware-failure\" label to this ticket and assign it to Kofi for initial triage.\n\nAdd a comment to the ticket with this diagnostic entry: \"DIAG_LOG_001: Initial ping test failed. Checked physical connections. PSU indicator light is off. Replacement unit requested from inventory.\"\n\nNow update that same comment to append the following resolution note at the end: \" || UPDATE: PSU replaced at 14:32. Server responding. Monitoring for 24hrs.\"\n\nFinally, update the ticket to change the assignee from Kofi to Elena for post-incident verification, and move the ticket to \"In Review\" status.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issue_labels", + "where": { + "name": { + "eq": "hardware-failure" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "Server rack B7" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "issues", + "where": { + "title": { + "contains": "Server rack B7" + } + }, + "expected_count": 1, + "expected_changes": { + "assigneeId": { + "to": { + "eq": "a3b4c5d6-e7f8-9012-7890-456789012345" + } + } + }, + "ignore": ["updatedAt"] + }, + { + "diff_type": "added", + "entity": "issue_label_issue_association", + "where": {}, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "DIAG_LOG_001:" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "comments", + "where": { + "body": { + "contains": "|| UPDATE:" + } + }, + "expected_count": 1, + "expected_changes": { + "body": { + "to": { + "contains": "|| UPDATE:" + } + } + } + } + ], + "metadata": { + "min_tool_calls": 9, + "tools_required": [ + "teams", + "users", + "issueLabels", + "issueLabelCreate", + "issueCreate", + "issueUpdate", + "commentCreate", + "commentUpdate" + ] + } + }, + { + "id": "test_46", + "name": "Sprint Backlog Cleanup", + "prompt": "The Backend team is doing sprint cleanup. Here's what needs to happen:\n\nFirst, find the existing issue about \"database migration\" - we'll need its ID for a dependency.\n\nCreate a new parent issue titled \"Q1 Infrastructure Overhaul\" in the Backend team. This will be our tracking epic.\n\nCreate a sub-issue under that epic titled \"Upgrade Redis cluster to v7\" - make sure to set the parent relationship to the epic you just created.\n\nThe Redis upgrade cannot start until the database migration is complete. Set up the Redis issue as blocked by the database migration issue.\n\nNow, add a standup note comment to the Redis issue that says: \"STANDUP_NOTE: Jamal will start this after migration completes. ETA next Tuesday.\"\n\nWait - that comment was supposed to go on the migration ticket, not the Redis ticket. Delete that comment.\n\nFinally, assign the Redis sub-task to Jamal, and assign the parent epic \"Q1 Infrastructure Overhaul\" to Olga with High priority.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "Q1 Infrastructure Overhaul" + }, + "teamId": { + "eq": "c2d3e4f5-a6b7-8901-2345-6789abcdef01" + }, + "assigneeId": { + "eq": "d6e7f8a9-b0c1-2345-0123-789012345678" + }, + "priority": { + "eq": 2.0 + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "Redis cluster" + }, + "assigneeId": { + "eq": "e7f8a9b0-c1d2-3456-1234-890123456789" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issue_relations", + "where": { + "type": { + "eq": "blocks" + }, + "issueTitle": { + "contains": "database migration" + }, + "relatedIssueTitle": { + "contains": "Redis" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 10, + "tools_required": [ + "teams", + "issues", + "users", + "issueCreate", + "issueRelationCreate", + "commentCreate", + "commentDelete", + "issueUpdate" + ] + } + }, + { + "id": "test_47", + "name": "Product Launch Coordination", + "prompt": "The Launch Coordination team is preparing for the April 1st product release. We need to set up the critical path with proper dependencies and timing.\n\nFirst, create a new workflow state called \"Awaiting Dependency\" (color: #FFA500, type: started) - we'll use this for tasks that are time-blocked by predecessors.\n\nCreate three issues in the Launch Coordination team:\n\n1. \"Complete product documentation for v3.0 launch\" - This is the first domino. Yuki owns this. Due date must be March 22nd because legal needs 5 business days after this completes.\n\n2. \"Legal review of launch materials\" - Svetlana from Legal owns this. Due date is March 29th. This CANNOT start until documentation is complete - set up the blocking relationship.\n\n3. \"Publish marketing campaign assets\" - Kwame owns this. Due date is March 31st (press embargo lifts at 9am that day). This is blocked by legal review completion.\n\nSet up the dependency chain: Documentation blocks Legal Review, and Legal Review blocks Marketing.\n\nFinally, add a comment to the documentation issue that explains the timeline pressure: \"CRITICAL_PATH_NOTE: This task has ZERO slack. If documentation slips past March 22nd, legal review (5 business days) won't complete by March 29th, which blocks marketing from the March 31st embargo lift. Launch date is immovable.\"", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "workflow_states", + "where": { + "name": { + "eq": "Awaiting Dependency" + }, + "color": { + "eq": "#FFA500" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "product documentation" + }, + "teamId": { + "eq": "d3e4f5a6-b7c8-9012-3456-789abcdef012" + }, + "assigneeId": { + "eq": "f8a9b0c1-d2e3-4567-2345-901234567890" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "Legal review" + }, + "teamId": { + "eq": "d3e4f5a6-b7c8-9012-3456-789abcdef012" + }, + "assigneeId": { + "eq": "b0c1d2e3-f4a5-6789-4567-123456789012" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "marketing campaign" + }, + "teamId": { + "eq": "d3e4f5a6-b7c8-9012-3456-789abcdef012" + }, + "assigneeId": { + "eq": "a9b0c1d2-e3f4-5678-3456-012345678901" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issue_relations", + "where": { + "type": { + "eq": "blocks" + } + }, + "expected_count": 2 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "CRITICAL_PATH_NOTE:" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 12, + "tools_required": [ + "teams", + "users", + "workflowStates", + "workflowStateCreate", + "issueCreate", + "issueRelationCreate", + "issueUpdate", + "commentCreate" + ] + } + }, + { + "id": "test_48", + "name": "Research Grant Application Pipeline", + "prompt": "The Research team needs to set up the grant application pipeline for the upcoming NIH submission deadline (June 15th).\n\nFirst, find the existing \"IRB Ethics Approval\" issue - this is our starting point and is already in progress.\n\nCreate three new issues in the Research team to complete the pipeline:\n\n1. \"Data Collection Protocol v2\" - Nadia will own this. It cannot begin until ethics approval is complete.\n\n2. \"Pilot Study Design - 50 participant cohort\" - Tom\u00e1s will lead this. It depends on having the data collection protocol finalized.\n\n3. \"Grant Submission Draft - R01 mechanism\" - Chioma will compile the final submission. This is the last step and depends on pilot study results.\n\nSet up the blocking relationships to enforce the sequential workflow:\n- IRB Ethics Approval blocks Data Collection Protocol\n- Data Collection Protocol blocks Pilot Study Design\n- Pilot Study Design blocks Grant Submission Draft\n\nAfter setting up the dependencies, add a comment to the Grant Submission issue summarizing the critical path: \"PIPELINE_STATUS: This submission depends on completion chain: Ethics (in progress) \u2192 Data Protocol (Nadia) \u2192 Pilot Study (Tom\u00e1s) \u2192 This draft. Target: June 15th deadline.\"", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "Data Collection Protocol" + }, + "teamId": { + "eq": "e4f5a6b7-c8d9-0123-4567-89abcdef0123" + }, + "assigneeId": { + "eq": "c1d2e3f4-a5b6-7890-5678-234567890123" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "Pilot Study" + }, + "teamId": { + "eq": "e4f5a6b7-c8d9-0123-4567-89abcdef0123" + }, + "assigneeId": { + "eq": "d2e3f4a5-b6c7-8901-6789-345678901234" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "Grant Submission" + }, + "teamId": { + "eq": "e4f5a6b7-c8d9-0123-4567-89abcdef0123" + }, + "assigneeId": { + "eq": "e3f4a5b6-c7d8-9012-7890-456789012345" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issue_relations", + "where": { + "type": { + "eq": "blocks" + } + }, + "expected_count": 3 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "PIPELINE_STATUS:" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 11, + "tools_required": [ + "teams", + "issues", + "users", + "issueCreate", + "issueRelationCreate", + "issueUpdate", + "commentCreate" + ] + } + }, + { + "id": "test_49", + "name": "Film Post-Production Pipeline", + "prompt": "The Post-Production team is managing the editing pipeline for \"Project Aurora\". Here's what needs to happen:\n\nFirst, find the \"Master Edit Lock\" issue - this is the critical gate that must complete before downstream work can proceed.\n\nCount how many issues are directly blocked by \"Master Edit Lock\". You'll need this exact number for your report.\n\nCreate two new issues in the Post-Production team:\n1. \"Final Color Grade - DCI-P3 Mastering\" - Kenji will handle this. It cannot start until \"Color Grading Phase 1\" is complete.\n2. \"Audio Mix Master - Dolby Atmos\" - Amara will handle this. It depends on \"Sound Design Draft\" being finished.\n\nAdditionally, the colorist needs to lock the final look before audio can be mixed to picture. Set up \"Final Color Grade\" accordingly.\n\nAfter setting up all the new dependencies, add a comment to the \"Master Edit Lock\" issue with a dependency audit in this exact format:\n\n\"DEPENDENCY_AUDIT: Master Edit Lock directly blocks [X] downstream issues. New dependencies added: Final Color Grade (Kenji), Audio Mix Master (Amara). Cross-stream link established between color and audio pipelines.\"\n\nReplace [X] with the actual count of issues directly blocked by Master Edit Lock.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "Final Color Grade" + }, + "teamId": { + "eq": "f5a6b7c8-d9e0-1234-5678-9abcdef01234" + }, + "assigneeId": { + "eq": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "Audio Mix Master" + }, + "teamId": { + "eq": "f5a6b7c8-d9e0-1234-5678-9abcdef01234" + }, + "assigneeId": { + "eq": "f4a5b6c7-d8e9-0123-8901-567890123456" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issue_relations", + "where": { + "type": { + "eq": "blocks" + } + }, + "expected_count": 3 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "DEPENDENCY_AUDIT:" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "directly blocks 4" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 10, + "tools_required": [ + "teams", + "issues", + "users", + "issueCreate", + "issueRelationCreate", + "issueUpdate", + "commentCreate" + ] + } + }, + { + "id": "test_50", + "name": "Archaeological Dig Site Coordination - Deadlock Resolution", + "prompt": "The Archaeology team is managing the Season 3 excavation at Site Karnak-West. There's a workflow problem blocking progress.\n\nExamine the issues \"Artifact Photography Documentation\" and \"Lab Sample Analysis\". These two issues are in a dependency deadlock - each one is marked as blocking the other, which means neither can proceed.\n\nDetermine which blocking relationship is incorrect. The correct archaeological workflow is: Photography must complete BEFORE samples can go to the lab (you need photos of artifacts in situ before extraction for the record). The reverse relationship (lab blocking photography) was added by mistake and makes no sense.\n\nDelete the incorrect blocking relationship to resolve the deadlock.\n\nNow extend the workflow. Create a new issue called \"Final Site Report Compilation - Season 3\" in the Archaeology team. This report cannot be written until BOTH the photography documentation AND the lab analysis are complete. Set up both as blockers for the report.\n\nAssign the work: Ximena handles photography, Okonkwo handles lab analysis, and S\u00f8ren compiles the final report.\n\nMove the photography issue to \"In Progress\" now that it's unblocked.\n\nAfter fixing everything, add a comment to the \"Lab Sample Analysis\" issue documenting the fix: \"WORKFLOW_FIX: Removed erroneous blocking relation where Lab was blocking Photography. Correct flow is Photography \u2192 Lab (need in-situ photos before extraction). Deadlock resolved. Current chain: Photography \u2192 Lab Analysis \u2192 Final Report.\"", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issue_relations", + "where": { + "id": { + "eq": "rel-lab-blocks-photo-002" + } + }, + "expected_changes": { + "archivedAt": { + "from": { + "exists": false + }, + "to": { + "exists": true + } + } + }, + "expected_count": 1, + "ignore": [ + "updatedAt" + ] + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "Final Site Report" + }, + "teamId": { + "eq": "a6b7c8d9-e0f1-2345-6789-0abcdef12345" + }, + "assigneeId": { + "eq": "c7d8e9f0-a1b2-3456-1234-890123456789" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "issues", + "where": { + "id": { + "eq": "arch-issue-photography-001" + } + }, + "expected_changes": { + "stateId": { + "to": { + "eq": "arch-state-inprogress-2345-cdef01" + } + }, + "assigneeId": { + "to": { + "eq": "b6c7d8e9-f0a1-2345-0123-789012345678" + } + } + }, + "expected_count": 1, + "ignore": [ + "updatedAt" + ] + }, + { + "diff_type": "changed", + "entity": "issues", + "where": { + "id": { + "eq": "arch-issue-lab-analysis-002" + } + }, + "expected_changes": { + "assigneeId": { + "to": { + "eq": "d4e5f6a7-b8c9-0123-def0-456789012345" + } + } + }, + "expected_count": 1, + "ignore": [ + "updatedAt" + ] + }, + { + "diff_type": "added", + "entity": "issue_relations", + "where": { + "type": { + "eq": "blocks" + } + }, + "expected_count": 2 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "WORKFLOW_FIX:" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "Deadlock resolved" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 11, + "tools_required": [ + "teams", + "issues", + "users", + "workflowStates", + "issueRelationDelete", + "issueCreate", + "issueRelationCreate", + "issueUpdate", + "commentCreate" + ] + } + }, + { + "id": "test_51", + "name": "Amateur Astronomy Club - Celestial Event Planning", + "prompt": "The Stargazers astronomy club needs to set up their spring celestial events schedule.\n\nCreate a new issue in the Stargazers team titled \"Lyrid Meteor Shower Viewing Party - Peak Night April 22nd\" with description \"Annual club gathering at Dark Sky Preserve. Expected rate: 18 meteors/hour. Radiant rises after midnight in Perseus.\"\n\nAssign this event to Priya as the event coordinator.\n\nApply the \"public-event\" label to this issue since non-members are welcome to attend.\n\nAdd a comment with the viewing logistics: \"OBSERVATION_DETAILS: Meet at Ridgeline Observatory parking lot at 10pm. Bring red flashlights only - no white light. Bogdan will set up the 12-inch Dobsonian for Saturn viewing while we wait for the radiant to rise. Best meteor photography settings: ISO 3200, f/2.8, 20-second exposures pointed northeast.\"", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "Lyrid Meteor Shower" + }, + "teamId": { + "eq": "b7c8d9e0-f1a2-3456-7890-abcdef123456" + }, + "assigneeId": { + "eq": "b8c9d0e1-f2a3-4567-2345-901234567890" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "April 22" + }, + "description": { + "contains": "Dark Sky Preserve" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "description": { + "contains": "18 meteors/hour" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issue_label_issue_association", + "where": {}, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "OBSERVATION_DETAILS:" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "Ridgeline Observatory" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "12-inch Dobsonian" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 5, + "tools_required": [ + "teams", + "issueLabels", + "issueCreate", + "issueUpdate", + "commentCreate" + ] + } + }, + { + "id": "test_52", + "name": "Pottery Studio - Kiln Firing Schedule", + "prompt": "The Clay & Fire pottery studio tracks their kiln schedule. Help update the firing queue.\n\nFirst, find the existing issues \"Fatou's Celadon Vase\" and \"Stoneware Bowl Set\" in the Ceramics team.\n\nThe celadon vase is ready to go in the kiln - move it to \"Firing\" status.\n\nThe stoneware bowls have finished their cone 10 firing and need to cool down - move them to \"Cooling\" status.\n\nCreate a new label called \"raku-firing\" for pieces that will use the rapid-cooling technique (we'll apply it to future items).\n\nFinally, add a kiln log comment to the celadon vase issue: \"KILN_LOG: Loaded into kiln #2 at 9:15am. Target: Cone 9 oxidation (~2300\u00b0F). Fatou requested slow cooling for crystal development. Do not open kiln door until temp drops below 400\u00b0F.\"", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issues", + "where": { + "id": { + "eq": "cer-issue-vase-001" + } + }, + "expected_changes": { + "stateId": { + "to": { + "eq": "cer-state-firing-1234-bcdef012" + } + } + }, + "expected_count": 1, + "ignore": [ + "updatedAt" + ] + }, + { + "diff_type": "changed", + "entity": "issues", + "where": { + "id": { + "eq": "cer-issue-bowls-002" + } + }, + "expected_changes": { + "stateId": { + "to": { + "eq": "cer-state-cooling-2345-cdef0123" + } + } + }, + "expected_count": 1, + "ignore": [ + "updatedAt" + ] + }, + { + "diff_type": "added", + "entity": "issue_labels", + "where": { + "name": { + "eq": "raku-firing" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "KILN_LOG:" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "Cone 9" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "2300" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "crystal development" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 6, + "tools_required": [ + "issues", + "workflowStates", + "issueUpdate", + "issueLabelCreate", + "commentCreate" + ] + } + }, + { + "id": "test_53", + "name": "Community Garden Plot Management", + "prompt": "The Garden Plots team manages our community garden cooperative. It's spring reassignment season and we need to shuffle some plots around.\n\nFirst, find the existing plot issues: \"Plot A7 - Tomatoes\", \"Plot B3 - Herbs\", and \"Plot C1 - Squash\".\n\nLook up gardeners Ines and Rashida - they're involved in this season's reassignments.\n\nCreate a new tracking issue titled \"Spring 2025 Plot Reassignment Tracker\" in the Garden Plots team with description \"Documenting all plot changes for the growing season. Reassignments finalized at March board meeting.\"\n\nNow process the reassignments:\n\n1. Plot A7 (tomatoes) was abandoned when Marcus moved away. Reassign it to Ines and change its status to \"Active\" since she's starting immediately.\n\n2. Ines and Rashida agreed to swap their herb plots. Reassign \"Plot B3 - Herbs\" from Ines to Rashida. Keep the current status unchanged.\n\n3. The squash plot (C1) owner has left the cooperative entirely. Move it to \"Dormant\" status but don't assign anyone yet - we'll offer it at the next meeting.", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "Spring 2025" + }, + "teamId": { + "eq": "d9e0f1a2-b3c4-5678-9012-cdef01234567" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "issues", + "where": { + "id": { + "eq": "gp-issue-a7-tomatoes-001" + } + }, + "expected_changes": { + "assigneeId": { + "to": { + "eq": "f0a1b2c3-d4e5-6789-4567-123456789012" + } + }, + "stateId": { + "to": { + "eq": "gp-state-active-0003-cdef0123" + } + } + }, + "expected_count": 1, + "ignore": [ + "updatedAt" + ] + }, + { + "diff_type": "changed", + "entity": "issues", + "where": { + "id": { + "eq": "gp-issue-b3-herbs-002" + } + }, + "expected_changes": { + "assigneeId": { + "to": { + "eq": "a1b2c3d4-e5f6-7890-5678-234567890123" + } + } + }, + "expected_count": 1, + "ignore": [ + "updatedAt" + ] + }, + { + "diff_type": "changed", + "entity": "issues", + "where": { + "id": { + "eq": "gp-issue-c1-squash-003" + } + }, + "expected_changes": { + "stateId": { + "to": { + "eq": "gp-state-dormant-0001-abcdef01" + } + } + }, + "expected_count": 1, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 7, + "tools_required": [ + "teams", + "issues", + "users", + "issueCreate", + "issueUpdate" + ] + } + }, + { + "id": "test_54", + "name": "Board Game Caf\u00e9 - Tournament Rescheduling Crisis", + "prompt": "The Meeple & Brew board game caf\u00e9 has a scheduling emergency. The venue for our Catan Regional Championship double-booked us, so we need to reschedule the entire tournament pipeline.\n\nFind the three tournament issues: \"Catan Regional Championship - Spring 2025\", \"Qualifying Round - Top 16 Bracket\", and \"Tournament Registration Deadline\".\n\nThe championship was originally March 15th but must move to March 23rd (8-day delay).\n\nHere's the critical part - the dates are interdependent:\n- The Qualifying Round must happen exactly 7 days before the Championship\n- The Registration Deadline must close exactly 5 days before the Qualifying Round\n\nCalculate and update all three due dates accordingly.\n\nAlso, Yuto was organizing the championship but has a work trip conflict on the new date. Reassign the championship to Adaeze. Keep Henrik on the qualifying round.\n\nAfter updating all dates, add a comment to the championship issue documenting the changes:\n\n\"RESCHEDULE_AUDIT: Venue conflict forced 8-day delay. New timeline calculated:\n- Registration closes: March 11th (was March 3rd)\n- Qualifiers: March 16th (was March 8th)\n- Championship: March 23rd (was March 15th)\nOrganizer handoff: Yuto \u2192 Adaeze due to travel conflict.\"", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issues", + "where": { + "id": { + "eq": "mb-issue-championship-001" + } + }, + "expected_changes": { + "dueDate": { + "to": { + "eq": "2025-03-23" + } + }, + "assigneeId": { + "to": { + "eq": "d4e5f6a7-b8c9-0123-8901-567890123456" + } + } + }, + "expected_count": 1, + "ignore": [ + "updatedAt" + ] + }, + { + "diff_type": "changed", + "entity": "issues", + "where": { + "id": { + "eq": "mb-issue-qualifying-002" + } + }, + "expected_changes": { + "dueDate": { + "to": { + "eq": "2025-03-16" + } + } + }, + "expected_count": 1, + "ignore": [ + "updatedAt" + ] + }, + { + "diff_type": "changed", + "entity": "issues", + "where": { + "id": { + "eq": "mb-issue-registration-003" + } + }, + "expected_changes": { + "dueDate": { + "to": { + "eq": "2025-03-11" + } + } + }, + "expected_count": 1, + "ignore": [ + "updatedAt" + ] + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "RESCHEDULE_AUDIT:" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "Yuto" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "Adaeze" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 6, + "tools_required": [ + "issues", + "users", + "issueUpdate", + "commentCreate" + ] + } + }, + { + "id": "test_55", + "name": "Quarterly Resource Allocation Review", + "prompt": "The PMO is conducting a Q1 resource allocation review. Here's what needs to happen:\n\nFirst, look at all teams and count how many members each team has.\n\nFind the team with the most members - this is our \"fully staffed\" benchmark.\n\nFor every team that has FEWER members than the benchmark team, create a new issue in that team titled \"Q1 Staffing Request - Need [X] additional team members\" where [X] is the exact difference between that team's member count and the benchmark team's count. Set priority to High for these issues.\n\nAlso, there's a misrouted issue: \"API Documentation Update\" was accidentally created in the Design team but belongs in Engineering. Move it to the Engineering team.\n\nFinally, add a comment to any issue in the Engineering team summarizing the analysis:\n\n\"RESOURCE_AUDIT: Q1 staffing review complete. Engineering has [MAX] members (benchmark). Staffing gaps identified: Product needs [A], Design needs [B], QA needs [C]. Total headcount gap across org: [TOTAL]. Staffing request issues created in all understaffed teams.\"\n\nReplace the bracketed values with the actual numbers from your analysis. Note: [TOTAL] should be the sum of headcount gaps from ALL understaffed teams (not just Product, Design, and QA).", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "changed", + "entity": "issues", + "where": { + "id": { + "eq": "res-issue-api-docs-001" + } + }, + "expected_changes": { + "teamId": { + "to": {"eq": "ad608998-915c-4bad-bcd9-85ebfccccee8"} + } + }, + "expected_count": 1, + "ignore": [ + "updatedAt" + ] + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "teamId": { + "eq": "cdb85540-5065-4346-8aef-ae2b72d6e940" + }, + "title": { + "contains": "Staffing Request" + }, + "priority": { + "eq": 2 + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "teamId": { + "eq": "f1a2b3c4-d5e6-7890-1234-567890abcdef" + }, + "title": { + "contains": "Staffing Request" + }, + "priority": { + "eq": 2 + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "teamId": { + "eq": "a1b2c3d4-e5f6-7890-1234-567890abcdef" + }, + "title": { + "contains": "Staffing Request" + }, + "priority": { + "eq": 2 + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "RESOURCE_AUDIT:" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "7 members" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "Product needs 4" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "Design needs 5" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "QA needs 3" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "Total headcount gap across org: 28" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 7, + "tools_required": [ + "teams", + "issues", + "issueUpdate", + "issueCreate", + "commentCreate" + ], + "requires_aggregation": true, + "requires_max_finding": true, + "requires_arithmetic": true + } + }, + { + "id": "test_56", + "name": "Community Guidelines Enforcement - Profanity Audit", + "prompt": "The moderation team has flagged the word \"YOLO_BAD\" as inappropriate for our workspace. We need to audit and address any comments containing this term.\n\nFirst, search through all comments to find any that contain \"YOLO_BAD\". Count how many comments contain this word and note their IDs.\n\nCreate a new issue in the Moderation team titled \"Content Cleanup Required - YOLO_BAD audit\" assigned to Saoirse. In the description, include:\n- The exact count of comments found containing \"YOLO_BAD\"\n- A list of the comment IDs that need to be reviewed\n- Use this format: \"AUDIT_RESULT: Found [X] comments containing flagged content. Comment IDs: [id1, id2, ...]\"\n\nFor each issue that has a comment containing \"YOLO_BAD\", add a warning comment: \"MODERATION_NOTICE: A comment on this issue contains content that violates community guidelines. Please review and edit your comment to remove inappropriate language. Ref: YOLO_BAD audit.\"", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issues", + "where": { + "teamId": { + "eq": "mod-team-001" + }, + "title": { + "contains": "Content Cleanup" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "YOLO_BAD" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "assigneeId": { + "eq": "mod-user-saoirse-001" + }, + "title": { + "contains": "Content Cleanup" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "description": { + "contains": "AUDIT_RESULT:" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "description": { + "contains": "Found 3 comments" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "MODERATION_NOTICE:" + } + }, + "expected_count": 2 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "issueId": { + "eq": "mod-issue-darkmode-001" + }, + "body": { + "contains": "MODERATION_NOTICE:" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "issueId": { + "eq": "mod-issue-checkout-001" + }, + "body": { + "contains": "MODERATION_NOTICE:" + } + }, + "expected_count": 1 + } + ], + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "comments", + "users", + "issueCreate", + "commentCreate" + ], + "requires_counting": true, + "requires_id_collection": true, + "expected_count": 3, + "affected_issues": 2 + } + }, + { + "id": "test_57", + "name": "Competitive Pigeon Racing Club - Storm Emergency Protocol", + "prompt": "The Wing & Wind pigeon racing club has an emergency. A fast-moving storm system is approaching the race corridor and we need to execute safety protocols.\n\nFirst, find all birds currently marked as \"In Flight\" in the Racing Operations team - these are the ones at risk.\n\nCreate an emergency coordination issue in the Racing Operations team titled \"WEATHER ALERT: Storm cell approaching sector 7 - All birds at risk\" with description \"NWS severe thunderstorm warning issued 14:32 UTC. Wind gusts to 60mph expected. Initiating emergency diversion protocol.\"\n\nFind the bird tracking issue for \"Stormchaser\" (Liora's champion racer, band #2847). Update it to add this to the description: \"DIVERSION ACTIVE: Rerouted to backup loft at coordinates 41.8781\u00b0 N, 87.6298\u00b0 W. Amadi's loft confirmed ready to receive.\"\n\nFinally, add a weather advisory comment to the emergency coordination issue:\n\"WEATHER_LOG: Storm tracking update at 14:45 UTC. Cell moving NNE at 35mph. ETA to race corridor: 47 minutes. All handlers notified via SMS. GPS tracking shows 3 birds diverted successfully. Amadi confirming visual on Stormchaser approaching backup loft.\"", + "type": "actionEval", + "seed_template": "linear_expanded", + "impersonate_user_id": "2790a7ee-fde0-4537-9588-e233aa5a68d1", + "assertions": [ + { + "diff_type": "added", + "entity": "issues", + "where": { + "teamId": { + "eq": "race-team-001" + }, + "title": { + "contains": "WEATHER ALERT" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "title": { + "contains": "sector 7" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "description": { + "contains": "NWS" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "issues", + "where": { + "description": { + "contains": "60mph" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "issues", + "where": { + "id": { + "eq": "race-issue-stormchaser-001" + } + }, + "expected_changes": { + "description": { + "to": { + "contains": "DIVERSION ACTIVE" + } + } + }, + "expected_count": 1, + "ignore": [ + "updatedAt" + ] + }, + { + "diff_type": "changed", + "entity": "issues", + "where": { + "id": { + "eq": "race-issue-stormchaser-001" + } + }, + "expected_changes": { + "description": { + "to": { + "contains": "41.8781" + } + } + }, + "expected_count": 1, + "ignore": [ + "updatedAt" + ] + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "WEATHER_LOG:" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "14:45 UTC" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "Amadi confirming" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "comments", + "where": { + "body": { + "contains": "WEATHER_LOG:" + }, + "issueId": { + "eq": "race-issue-stormchaser-001" + } + }, + "expected_count": 0 + }, + { + "diff_type": "changed", + "entity": "issues", + "where": { + "id": { + "eq": "race-issue-stormchaser-001" + } + }, + "expected_changes": { + "description": { + "to": { + "contains": "87.6298" + } + } + }, + "expected_count": 1, + "ignore": [ + "updatedAt" + ] + } + ], + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "issues", + "issueCreate", + "issueUpdate", + "commentCreate" + ], + "requires_state_filtering": true, + "expected_in_flight_birds": 3, + "coordinate_precision_test": true + } + } + ] +} \ No newline at end of file diff --git a/experiments/kdd 2026/qualitative_analysis/test_suites/slack_bench_v2.json b/experiments/kdd 2026/qualitative_analysis/test_suites/slack_bench_v2.json new file mode 100644 index 0000000..a74bbe0 --- /dev/null +++ b/experiments/kdd 2026/qualitative_analysis/test_suites/slack_bench_v2.json @@ -0,0 +1,4065 @@ +{ + "id": "slack-bench-v2", + "name": "Slack Bench v2 (Combined)", + "description": "Combined benchmark: v1 tests + LLM-generated hard tests", + "service": "slack", + "ignore_fields": { + "global": [ + "created_at", + "updated_at" + ] + }, + "tests": [ + { + "id": "test_1", + "name": "Send message to general channel", + "prompt": "Send a 'hello' message to the general channel", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "conversations.list", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + }, + "message_text": { + "contains": "hello" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_2", + "name": "Send direct message", + "prompt": "Send a DM to John saying 'Can we sync later?'", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "users.list", + "conversations.open", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": { + "eq": "U01AGENBOT9" + }, + "message_text": { + "contains": "sync later" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "channels", + "where": { + "is_dm": { + "eq": true + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_3", + "name": "Send direct message Artem, and Hubert (Create group conversation + send message)", + "prompt": "Send a DM (group conversation not channel) to Artem and Hubert saying 'Hey, I've took a look at the presentation and I have some questions. Can you help me?'", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "users.list", + "conversations.open", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": { + "eq": "U01AGENBOT9" + }, + "message_text": { + "contains": "presentation and I have some questions" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "channels", + "where": { + "is_gc": { + "eq": true + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_4", + "name": "Create a new channel", + "prompt": "Create a new channel called 'rl-project'", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 1, + "tools_required": [ + "conversations.create" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "channels", + "where": { + "channel_name": { + "i_contains": "rl-project" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_5", + "name": "Add user to channel", + "prompt": "Add Morgan Stanley to the 'random' channel", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "users.list", + "conversations.list", + "conversations.invite" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U05MORGAN23" + }, + "channel_id": { + "eq": "C02EFGH5678" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_6", + "name": "Create a new channel and add user to it ", + "prompt": "Create a new channel called 'rl-project' and add Morgan Stanley to it", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "users.list", + "conversations.create", + "conversations.invite" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "channels", + "where": { + "channel_name": { + "i_contains": "rl-project" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U05MORGAN23" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_7", + "name": "Remove user from channel", + "prompt": "Remove John from the #random channel", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "users.list", + "conversations.list", + "conversations.kick" + ] + }, + "assertions": [ + { + "diff_type": "removed", + "entity": "channel_members", + "where": { + "channel_id": { + "eq": "C02EFGH5678" + }, + "user_id": { + "eq": "U02JOHNDOE1" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_8", + "name": "Archive a channel", + "prompt": "Archive the #growth channel", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "conversations.list", + "conversations.archive" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "channels", + "where": { + "channel_id": { + "eq": "C04MNOP3456" + } + }, + "expected_changes": { + "is_archived": { + "to": true + } + } + } + ] + }, + { + "id": "test_9", + "name": "Reply in a thread", + "prompt": "Reply 'Next monday.' to the most recent message in #general", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "conversations.list", + "conversations.history", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "parent_id": { + "eq": "1700173200.000456" + }, + "channel_id": { + "eq": "C01ABCD1234" + }, + "message_text": { + "contains": "Next monday" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_10", + "name": "Reply in a thread", + "prompt": "Reply 'Next monday.' to the to MCP deployment questions in #general", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "conversations.list", + "conversations.history", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "parent_id": { + "eq": "1700173200.000456" + }, + "channel_id": { + "eq": "C01ABCD1234" + }, + "message_text": { + "contains": "Next monday" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_11", + "name": "Add emoji reactions", + "prompt": "In #random, react with :thumbsup: to all messages that are questions about lunch, and react with :thumbsdown: to the message about piza combo", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 5, + "tools_required": [ + "conversations.list", + "conversations.history", + "reactions.add", + "reactions.add", + "reactions.add" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "message_reactions", + "where": { + "message_id": { + "eq": "1699572000.000789" + }, + "reaction_type": { + "eq": "thumbsup" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "message_reactions", + "where": { + "message_id": { + "eq": "1706052665.000000" + }, + "reaction_type": { + "eq": "thumbsup" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "message_reactions", + "where": { + "message_id": { + "eq": "1706051755.000000" + }, + "reaction_type": { + "eq": "thumbsdown" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_12", + "name": "Add emoji reaction", + "prompt": "React with :thumbsup: to the most recent posted message in #general", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "conversations.list", + "conversations.history", + "reactions.add" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "message_reactions", + "where": { + "message_id": { + "eq": "1700173200.000456" + }, + "user_id": { + "eq": "U01AGENBOT9" + }, + "reaction_type": { + "eq": "thumbsup" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_13", + "name": "Update channel topic", + "prompt": "Change the #general channel topic to 'Weekly standup discussions'", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "conversations.list", + "conversations.setTopic" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "channels", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + } + }, + "expected_changes": { + "topic_text": { + "to": { + "contains": "Weekly standup" + } + } + } + } + ] + }, + { + "id": "test_14", + "name": "Edit existing message", + "prompt": "Find the message that says 'Hey team' and edit it to say 'Hello everyone'", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "search.messages", + "chat.update" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + }, + "message_id": { + "eq": "1699564800.000123" + } + }, + "expected_changes": { + "message_text": { + "to": { + "contains": "Hello everyone" + } + } + } + } + ] + }, + { + "id": "test_15", + "name": "Mention user in message", + "prompt": "Post to #general mentioning Artem with text 'Please review the pull request'", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "users.list", + "conversations.list", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + }, + "message_text": { + "contains": "<@U02ARTEM23>" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_16", + "name": "Multi-channel send", + "prompt": "Send 'System maintenance tonight at 10pm' to both #general and #random", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "conversations.list", + "chat.postMessage", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "message_text": { + "contains": "maintenance" + }, + "channel_id": { + "eq": "C01ABCD1234" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "message_text": { + "contains": "maintenance" + }, + "channel_id": { + "eq": "C02EFGH5678" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_17", + "name": "Delete old message", + "prompt": "Delete the message about new feature you posted in #general", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "conversations.list", + "conversations.history", + "chat.delete" + ] + }, + "assertions": [ + { + "diff_type": "removed", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + }, + "message_text": { + "contains": "new feature" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_18", + "name": "Forward questions to another channel", + "prompt": "Find all questions in #random and post each one to #general as separate messages.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 6, + "tools_required": [ + "conversations.list", + "conversations.history", + "chat.postMessage", + "chat.postMessage", + "chat.postMessage", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + }, + "message_text": { + "contains": "Gemini" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + }, + "message_text": { + "contains": "preview" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + }, + "message_text": { + "contains": "garlic knots" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + }, + "message_text": { + "contains": "shared lunch" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_19", + "name": "Search messages in a channel and combine results into a new message as DM", + "prompt": "Search for all messages (4 messages) in the #engineering channel related to login issues and combine them into a single new message as DM to Hubert. Do not change the meaning of the original messages just combine them.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "search.messages", + "users.list", + "conversations.open", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "channels", + "where": { + "is_dm": { + "eq": true + }, + "channel_id": { + "regex": "^D" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U06HUBERT23" + }, + "channel_id": { + "regex": "^D" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U01AGENBOT9" + }, + "channel_id": { + "regex": "^D" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": { + "eq": "U01AGENBOT9" + }, + "channel_id": { + "regex": "^D" + }, + "message_text": { + "contains": "500 errors" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": { + "eq": "U01AGENBOT9" + }, + "channel_id": { + "regex": "^D" + }, + "message_text": { + "contains": "invalid_grant" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": { + "eq": "U01AGENBOT9" + }, + "channel_id": { + "regex": "^D" + }, + "message_text": { + "contains": "login rate limit" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": { + "eq": "U01AGENBOT9" + }, + "channel_id": { + "regex": "^D" + }, + "message_text": { + "contains": "login endpoint" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_20", + "name": "Search messages in multiple channels and combine results into a new message as DM", + "prompt": "Search for all messages (6 messages) related to login issues and auth improvments. Combine them into a single new message as DM to Hubert. Do not change the meaning of the original messages just combine them.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "search.messages", + "users.list", + "conversations.open", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "channels", + "where": { + "is_dm": { + "eq": true + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U06HUBERT23" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": { + "eq": "U01AGENBOT9" + }, + "message_text": { + "contains": "500 errors" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": { + "eq": "U01AGENBOT9" + }, + "message_text": { + "contains": "invalid_grant" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": { + "eq": "U01AGENBOT9" + }, + "message_text": { + "contains": "login rate limit" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": { + "eq": "U01AGENBOT9" + }, + "message_text": { + "contains": "login endpoint" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": { + "eq": "U01AGENBOT9" + }, + "message_text": { + "contains": "captcha" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": { + "eq": "U01AGENBOT9" + }, + "message_text": { + "contains": "empty password" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_21", + "name": "Search messages in multiple channels and edit message in a channel with the combined results", + "prompt": "Search for all messages (6 messages) related to login issues and auth improvments. Edit the message in the #engineering channel you sent before without details about issues and add the details about the issues and improvements. Do not change the meaning/ woring of the original messages just combine them.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "search.messages", + "conversations.history", + "chat.update" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C03IJKL9012" + }, + "message_id": { + "eq": "1700143200.000999" + } + }, + "expected_changes": { + "message_text": { + "to": { + "contains": "500 errors" + } + } + } + }, + { + "diff_type": "changed", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C03IJKL9012" + }, + "message_id": { + "eq": "1700143200.000999" + } + }, + "expected_changes": { + "message_text": { + "to": { + "contains": "invalid_grant" + } + } + } + }, + { + "diff_type": "changed", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C03IJKL9012" + }, + "message_id": { + "eq": "1700143200.000999" + } + }, + "expected_changes": { + "message_text": { + "to": { + "contains": "login rate limit" + } + } + } + }, + { + "diff_type": "changed", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C03IJKL9012" + }, + "message_id": { + "eq": "1700143200.000999" + } + }, + "expected_changes": { + "message_text": { + "to": { + "contains": "ogin endpoint" + } + } + } + }, + { + "diff_type": "changed", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C03IJKL9012" + }, + "message_id": { + "eq": "1700143200.000999" + } + }, + "expected_changes": { + "message_text": { + "to": { + "contains": "captcha" + } + } + } + }, + { + "diff_type": "changed", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C03IJKL9012" + }, + "message_id": { + "eq": "1700143200.000999" + } + }, + "expected_changes": { + "message_text": { + "to": { + "contains": "empty password" + } + } + } + } + ] + }, + { + "id": "test_22", + "name": "Edit a thread message", + "prompt": "You've replied to one of the messages with a bad joke. Edit it, for 'I will make a proposal for auth improvements tommorow EOD'", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "conversations.history", + "conversations.replies", + "chat.update" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C03IJKL9012" + }, + "parent_id": { + "eq": "1700143200.000999" + }, + "message_id": { + "eq": "1700153200.000999" + }, + "user_id": { + "eq": "U01AGENBOT9" + } + }, + "expected_changes": { + "message_text": { + "to": { + "contains": "proposal for auth improvements tommorow EOD" + } + } + } + } + ] + }, + { + "id": "test_23", + "name": "Rich Text: Basic Formatting (Bold/Italic)", + "prompt": "Send a message to #general saying 'Attention' in bold and 'check logs' in italics. Use Slack Block Kit rich_text blocks with style attributes (bold:true, italic:true).", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "conversations.list", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + }, + "blocks": { + "contains": "rich_text_section" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + }, + "blocks": { + "contains": "\"bold\":true" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + }, + "blocks": { + "contains": "\"italic\":true" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_24", + "name": "Rich Text: Bulleted List", + "prompt": "Send a bulleted list to #random with three items: 'Bagels', 'Coffee', and 'Donuts'. Use Slack Block Kit rich_text blocks with rich_text_list (style:bullet).", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "conversations.list", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C02EFGH5678" + }, + "blocks": { + "contains": "rich_text_list" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C02EFGH5678" + }, + "blocks": { + "contains": "\"style\":\"bullet\"" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_25", + "name": "Rich Text: Code Block and Numbered List", + "prompt": "Do two things using Slack Block Kit: 1) Send a code snippet to #engineering containing `{\"status\": 200}` using rich_text_preformatted element, and 2) Send a numbered list to #general with items 'Phase 1' and 'Phase 2' using rich_text_list with style:ordered.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "conversations.list", + "chat.postMessage", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C03IJKL9012" + }, + "blocks": { + "contains": "rich_text_preformatted" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + }, + "blocks": { + "contains": "rich_text_list" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_26", + "name": "Rich Text: Block Quote", + "prompt": "Quote the text 'To be or not to be' in the #random channel. Use Slack Block Kit rich_text blocks with rich_text_quote element.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "conversations.list", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C02EFGH5678" + }, + "blocks": { + "contains": "rich_text_quote" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_27", + "name": "Table Block Generation", + "prompt": "Send a table to #growth with headers 'Metric' and 'Value', and one row of data: 'DAU', '1500'. Use Slack Block Kit with a table block type.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "conversations.list", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C04MNOP3456" + }, + "blocks": { + "contains": "\"type\":\"table\"" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C04MNOP3456" + }, + "blocks": { + "contains": "DAU" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_28", + "name": "Markdown Block (Direct)", + "prompt": "Send a markdown formatted message to #engineering with a header 'Daily Report' and a bold item '**All Systems Go**'. Use Slack Block Kit with a markdown block type.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "conversations.list", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C03IJKL9012" + }, + "blocks": { + "contains": "\"type\":\"mrkdwn\"" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_29", + "name": "Rich Text: User Mention", + "prompt": "Mention @Artem in #general using Slack Block Kit rich_text blocks with a user element type containing Artem's user ID.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "users.list", + "conversations.list", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + }, + "blocks": { + "contains": "\"type\":\"user\"" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + }, + "blocks": { + "contains": "U02ARTEM23" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_30", + "name": "Chained Reasoning: Search and DM", + "prompt": "Find the user who complained about 'captcha' in #general and send them a DM saying 'I am looking into this.'", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "search.messages", + "conversations.open", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "channels", + "where": { + "is_dm": { + "eq": true + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": { + "eq": "U01AGENBOT9" + }, + "message_text": { + "contains": "looking into this" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U06HUBERT23" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_31", + "name": "Set Operations: Group Invite based on Topic", + "prompt": "Create a new channel called 'auth-force' and invite everyone who has posted about 'login' or 'password'.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "search.messages", + "search.messages", + "conversations.create", + "conversations.invite" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "channels", + "where": { + "channel_name": { + "contains": "auth-force" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "in": [ + "U01AGENBOT9", + "U02JOHNDOE1", + "U03ROBERT23", + "U05MORGAN23", + "U02ARTEM23", + "U06HUBERT23" + ] + } + }, + "expected_count": 6 + } + ] + }, + { + "id": "test_32", + "name": "Constraint Verification (Negative Test)", + "prompt": "Try to invite the user 'ElonMusk' to #general. If you can't find him, inform me (Hubert) via Slack.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "users.list", + "users.list", + "conversations.open", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + } + }, + "expected_count": 0 + }, + { + "diff_type": "added", + "entity": "channels", + "where": { + "is_dm": { + "eq": true + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": { + "eq": "U01AGENBOT9" + }, + "message_text": { + "regex": "find|found|unable|couldn't|could not|not exist" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U06HUBERT23" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_33", + "name": "Information Synthesis", + "prompt": "Who are the admins of the 'Test Workspace'? Reply with their names in #random.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "users.list", + "conversations.list", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C02EFGH5678" + }, + "message_text": { + "contains": "Robert" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C02EFGH5678" + }, + "message_text": { + "contains": "Morgan" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_34", + "name": "Ambiguity Resolution (Contextual User)", + "prompt": "Invite the Morgan who is NOT an admin to #random.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "users.list", + "conversations.list", + "conversations.invite" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U05MORGAN23" + }, + "channel_id": { + "eq": "C02EFGH5678" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_35", + "name": "Ambiguity Resolution (Contextual Channel)", + "prompt": "Post 'Status update: Alpha is on track' to the alpha dev channel.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 2, + "tools_required": [ + "conversations.list", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C06ALPHADEV" + }, + "message_text": { + "contains": "Status update" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_36", + "name": "Cross-channel Summarization", + "prompt": "Summarize the discussion about 'Gemini' in #random and post the summary to #engineering.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "conversations.list", + "conversations.history", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C03IJKL9012" + }, + "message_text": { + "contains": "frontend" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C03IJKL9012" + }, + "message_text": { + "contains": "Flash" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_37", + "name": "Conditional Logic", + "prompt": "Check the discussion in #growth. If the team decided to double down on Reddit, react with :rocket: to the message proposing it.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 3, + "tools_required": [ + "conversations.list", + "conversations.history", + "reactions.add" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "message_reactions", + "where": { + "message_id": { + "eq": "1700300240.000005" + }, + "user_id": { + "eq": "U01AGENBOT9" + }, + "reaction_type": { + "eq": "rocket" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_38", + "name": "Open Source Hackathon Coordination", + "prompt": "Hey, I need your help coordinating our 24-hour global hackathon across Lagos, Kyiv, Warsaw, and SF. First, can you find out which channels are relevant for this open source hackathon we're running? I want to make sure #core-infra has an updated topic that reflects we're in hackathon mode.\n\nAlso, I need to post an update to the infrastructure team about our coordination status. Before I loop in \u0141ukasz Kowalski and Kenji Sato, can you pull up their profiles? I want to confirm \u0141ukasz is still our performance lead and check Kenji's role on the APAC growth side.\n\nI posted something outdated in one of the channels yesterday that needs to be removed - it had wrong timezone info. Can you also check what's been discussed recently in #project-alpha-dev so I'm caught up? And verify who's currently in #frontend - we might need to add some people.\n\nOh, and when you find any important messages about the hackathon prep, just give them a thumbs up so people know we've seen them.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 9, + "tools_required": [ + "conversations.list", + "conversations.setTopic", + "chat.postMessage", + "users.info", + "users.info", + "conversations.history", + "reactions.add", + "chat.delete", + "conversations.members" + ] + }, + "_step_sequence": [ + { + "endpoint": "conversations.setTopic", + "action": "Set channel topic about Open Source Hackathon Coordination", + "justification": "Clarify channel purpose" + }, + { + "endpoint": "chat.postMessage", + "action": "Post update to #core-infra", + "justification": "Share findings or coordinate with team" + }, + { + "endpoint": "users.info", + "action": "Get details about \u0141ukasz Kowalski", + "justification": "Verify their role in performance" + }, + { + "endpoint": "conversations.history", + "action": "Read recent messages in #project-alpha-dev", + "justification": "Gather context about general" + }, + { + "endpoint": "reactions.add", + "action": "React to a key message", + "justification": "Signal acknowledgment without cluttering" + }, + { + "endpoint": "conversations.list", + "action": "Discover channels related to Open Source Hackathon Coordination", + "justification": "Need to find relevant channels before coordinating" + }, + { + "endpoint": "users.info", + "action": "Get details about Kenji Sato", + "justification": "Verify their role in APAC growth" + }, + { + "endpoint": "chat.delete", + "action": "Delete an outdated message", + "justification": "Clean up obsolete information" + }, + { + "endpoint": "conversations.members", + "action": "Check members of #frontend", + "justification": "Verify the right people are involved" + } + ], + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": {}, + "expected_count": { + "min": 1 + } + } + ] + }, + { + "id": "test_39", + "name": "Diwali x Thanksgiving Potluck", + "prompt": "I need some help organizing our Diwali x Thanksgiving potluck celebration! We're doing a combined Indian and American traditions thing and I want to make sure we coordinate this properly across the team.\n\nFirst, can you check what channels we have that might be relevant for this event and see what's been discussed recently in #core-infra? I want to make sure I'm not stepping on any ongoing conversations. Also, I need to know who's on our team so I can figure out who to involve based on their backgrounds and expertise.\n\nOnce you've got that context, please update the topics for #core-infra, #project-alpha, and #growth to reflect that we're planning this potluck celebration. Then post an announcement in #project-alpha about the event.\n\nI also need you to check who's currently in #growth to make sure the right people are included, and open a direct message with Kenji Sato since I need to coordinate with him separately about timing given APAC schedules.\n\nOh, and there's an old message I posted earlier about the event that has wrong details - can you update it with the correct information? There's also an outdated announcement from last week that's no longer relevant, so please delete that. Finally, just react to Priya's message about bringing samosas to show I've seen it!", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 13, + "tools_required": [ + "conversations.list", + "conversations.history", + "users.list", + "conversations.setTopic", + "conversations.setTopic", + "conversations.setTopic", + "chat.postMessage", + "conversations.members", + "conversations.open", + "chat.update", + "chat.delete", + "reactions.add", + "chat.postMessage" + ] + }, + "_step_sequence": [ + { + "endpoint": "chat.postMessage", + "action": "Post update to #project-alpha", + "justification": "Share findings or coordinate with team" + }, + { + "endpoint": "conversations.setTopic", + "action": "Set channel topic about Diwali x Thanksgiving Potluck", + "justification": "Clarify channel purpose" + }, + { + "endpoint": "conversations.setTopic", + "action": "Set channel topic about Diwali x Thanksgiving Potluck", + "justification": "Clarify channel purpose" + }, + { + "endpoint": "chat.update", + "action": "Update a previous message with new info", + "justification": "Correct or enhance earlier communication" + }, + { + "endpoint": "conversations.list", + "action": "Discover channels related to Diwali x Thanksgiving Potluck", + "justification": "Need to find relevant channels before coordinating" + }, + { + "endpoint": "conversations.setTopic", + "action": "Set channel topic about Diwali x Thanksgiving Potluck", + "justification": "Clarify channel purpose" + }, + { + "endpoint": "chat.delete", + "action": "Delete an outdated message", + "justification": "Clean up obsolete information" + }, + { + "endpoint": "conversations.list", + "action": "Discover channels related to Diwali x Thanksgiving Potluck", + "justification": "Need to find relevant channels before coordinating" + }, + { + "endpoint": "conversations.members", + "action": "Check members of #growth", + "justification": "Verify the right people are involved" + }, + { + "endpoint": "reactions.add", + "action": "React to a key message", + "justification": "Signal acknowledgment without cluttering" + }, + { + "endpoint": "conversations.open", + "action": "Open DM with Kenji Sato", + "justification": "Direct coordination about APAC growth" + }, + { + "endpoint": "users.list", + "action": "List all team members", + "justification": "Identify who to involve based on expertise" + }, + { + "endpoint": "conversations.history", + "action": "Read recent messages in #core-infra", + "justification": "Gather context about GPU incidents, Kubernetes, cost optimization" + } + ], + "assertions": [ + { + "diff_type": "added", + "entity": "channels", + "where": { + "is_dm": { + "eq": true + } + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "added", + "entity": "messages", + "where": {}, + "expected_count": { + "min": 1 + } + } + ] + }, + { + "id": "test_40", + "name": "Lunar New Year Product Launch", + "prompt": "I need some help getting our Lunar New Year product launch coordination sorted out. We're targeting APAC markets and I want to make sure we're being culturally sensitive with our timing and messaging.\n\nFirst, can you help me figure out who on our team has the right expertise for this? I need to reach out directly to our frontend person about some UI elements that need to be adapted, and also connect with our engineering lead separately about the technical rollout schedule.\n\nAlso, I noticed the #project-alpha-dev channel might have some people who aren't really needed for this particular launch, and I want to keep discussions focused. Can you check who's currently in that channel? We may need to streamline the membership a bit - I think there are a couple of folks who were added for previous projects but don't need to be looped in on the APAC launch details.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 7, + "tools_required": [ + "users.list", + "conversations.open", + "conversations.open", + "conversations.members", + "conversations.kick", + "conversations.kick", + "users.list" + ] + }, + "_step_sequence": [ + { + "endpoint": "users.list", + "action": "List all team members", + "justification": "Identify who to involve based on expertise" + }, + { + "endpoint": "users.list", + "action": "List all team members", + "justification": "Identify who to involve based on expertise" + }, + { + "endpoint": "conversations.kick", + "action": "Remove someone from a channel", + "justification": "Manage channel membership appropriately" + }, + { + "endpoint": "conversations.open", + "action": "Open DM with Aisha Okonkwo", + "justification": "Direct coordination about frontend" + }, + { + "endpoint": "conversations.kick", + "action": "Remove someone from a channel", + "justification": "Manage channel membership appropriately" + }, + { + "endpoint": "conversations.members", + "action": "Check members of #project-alpha-dev", + "justification": "Verify the right people are involved" + }, + { + "endpoint": "conversations.open", + "action": "Open DM with Hubert Marek", + "justification": "Direct coordination about engineering" + } + ], + "assertions": [ + { + "diff_type": "added", + "entity": "channels", + "where": { + "is_dm": { + "eq": true + } + }, + "expected_count": { + "min": 1 + } + } + ] + }, + { + "id": "test_41", + "name": "Music Festival Tech Stack", + "prompt": "I need some help cleaning up our Afrobeats festival streaming project workspace. We've had some organizational issues lately. First, can you find out who's currently hanging out in #random and also get me a list of everyone on the team? I need to verify Robert Chen's role since he's supposed to be leading the engineering side of things.\n\nI also need you to dig through our CDN-related conversations - we had some important discussions about our content delivery setup that I need to reference. Check what's been happening recently in #project-alpha too.\n\nOnce you've got the lay of the land, please remove Artem Bogdanov from #project-alpha-dev and also kick Hubert Marek from #core-infra - they've moved to different workstreams. Post an update to #core-infra about our streaming infrastructure progress, and update the topic there to reflect our virtual festival focus.\n\nThere's also an outdated message I posted earlier that needs deleting, and I need to correct some information in a previous update I sent. Can you help me sort all this out?", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 13, + "tools_required": [ + "conversations.members", + "users.list", + "users.info", + "search.messages", + "search.messages", + "conversations.history", + "conversations.list", + "conversations.kick", + "conversations.kick", + "chat.postMessage", + "conversations.setTopic", + "chat.delete", + "chat.update" + ] + }, + "_step_sequence": [ + { + "endpoint": "conversations.kick", + "action": "Remove someone from a channel", + "justification": "Manage channel membership appropriately" + }, + { + "endpoint": "chat.postMessage", + "action": "Post update to #core-infra", + "justification": "Share findings or coordinate with team" + }, + { + "endpoint": "conversations.kick", + "action": "Remove someone from a channel", + "justification": "Manage channel membership appropriately" + }, + { + "endpoint": "conversations.members", + "action": "Check members of #random", + "justification": "Verify the right people are involved" + }, + { + "endpoint": "search.messages", + "action": "Search for messages about 'CDN'", + "justification": "Find specific discussions related to the topic" + }, + { + "endpoint": "search.messages", + "action": "Search for messages about 'CDN'", + "justification": "Find specific discussions related to the topic" + }, + { + "endpoint": "conversations.history", + "action": "Read recent messages in #project-alpha", + "justification": "Gather context about general" + }, + { + "endpoint": "conversations.list", + "action": "Discover channels related to Music Festival Tech Stack", + "justification": "Need to find relevant channels before coordinating" + }, + { + "endpoint": "chat.delete", + "action": "Delete an outdated message", + "justification": "Clean up obsolete information" + }, + { + "endpoint": "users.info", + "action": "Get details about Robert Chen", + "justification": "Verify their role in engineering lead" + }, + { + "endpoint": "users.list", + "action": "List all team members", + "justification": "Identify who to involve based on expertise" + }, + { + "endpoint": "conversations.setTopic", + "action": "Set channel topic about Music Festival Tech Stack", + "justification": "Clarify channel purpose" + }, + { + "endpoint": "chat.update", + "action": "Update a previous message with new info", + "justification": "Correct or enhance earlier communication" + } + ], + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": {}, + "expected_count": { + "min": 1 + } + } + ] + }, + { + "id": "test_42", + "name": "Pierogi vs Varenyky Debug Session", + "prompt": "I need your help coordinating something for our Polish-Ukrainian debugging session today. We're calling it the \"Pierogi vs Varenyky Debug Session\" because Olena and Sophie are bringing food during our break!\n\nFirst, can you check on Sophie Dubois and Olena Petrenko's profiles? I want to make sure I have their roles right when I introduce them to the rest of the team. Also, I need to catch up on what's been happening in the engineering channel - there were some login issues discussed that might be relevant.\n\nCould you find any channels that might already be discussing this topic, and if there isn't a dedicated space yet, please create a new channel for our pierogi-vs-varenyky session? We should also post a heads-up in core-infra about our debugging plans.\n\nOh, and Aisha left a great message earlier that I want to react to with a thumbs up. Also, I need to remove someone from one of our project channels who's no longer on the team. Thanks!", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 8, + "tools_required": [ + "users.info", + "users.info", + "conversations.history", + "conversations.list", + "conversations.create", + "chat.postMessage", + "reactions.add", + "conversations.kick" + ] + }, + "_step_sequence": [ + { + "endpoint": "users.info", + "action": "Get details about Sophie Dubois", + "justification": "Verify their role in ML research" + }, + { + "endpoint": "users.info", + "action": "Get details about Olena Petrenko", + "justification": "Verify their role in ML engineering" + }, + { + "endpoint": "reactions.add", + "action": "React to a key message", + "justification": "Signal acknowledgment without cluttering" + }, + { + "endpoint": "conversations.list", + "action": "Discover channels related to Pierogi vs Varenyky Debug Session", + "justification": "Need to find relevant channels before coordinating" + }, + { + "endpoint": "conversations.create", + "action": "Create channel #pierogi-vs-varenyky-", + "justification": "Dedicated space for this initiative" + }, + { + "endpoint": "chat.postMessage", + "action": "Post update to #core-infra", + "justification": "Share findings or coordinate with team" + }, + { + "endpoint": "conversations.history", + "action": "Read recent messages in #engineering", + "justification": "Gather context about Login issues, technical" + }, + { + "endpoint": "conversations.kick", + "action": "Remove someone from a channel", + "justification": "Manage channel membership appropriately" + } + ], + "assertions": [ + { + "diff_type": "added", + "entity": "channels", + "where": { + "is_private": { + "eq": false + } + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "added", + "entity": "messages", + "where": {}, + "expected_count": { + "min": 1 + } + } + ] + }, + { + "id": "test_43", + "name": "Traditional Tea Ceremony Planning", + "prompt": "I need some help organizing our cross-cultural tea ceremony exchange between the Tokyo and Paris offices. Can you set up a dedicated channel for this traditional tea ceremony planning initiative and make sure the channel topic clearly explains what it's about?\n\nBefore we get started, I want to check what's been happening in #random lately - there was some casual conversation about lunch plans and something about Gemini that might be relevant to who's interested. Also, take a look at #growth because I remember seeing some Reddit strategy discussion that could tie into how we promote this cultural exchange.\n\nI posted a few messages earlier about the event that need updating with corrected information - the dates and details have changed. There's also one outdated message I sent that's no longer relevant and should just be removed entirely to avoid confusion.\n\nOh, and if you see the message where Priya or Mateo showed interest in participating, can you add a reaction to acknowledge it? I don't want to clutter the thread with another reply.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 11, + "tools_required": [ + "conversations.create", + "conversations.setTopic", + "conversations.history", + "conversations.history", + "chat.update", + "chat.update", + "chat.update", + "reactions.add", + "chat.delete", + "conversations.create", + "conversations.create" + ] + }, + "_step_sequence": [ + { + "endpoint": "conversations.create", + "action": "Create channel #traditional-tea-cere", + "justification": "Dedicated space for this initiative" + }, + { + "endpoint": "conversations.setTopic", + "action": "Set channel topic about Traditional Tea Ceremony Planning", + "justification": "Clarify channel purpose" + }, + { + "endpoint": "conversations.create", + "action": "Create channel #traditional-tea-cere", + "justification": "Dedicated space for this initiative" + }, + { + "endpoint": "conversations.create", + "action": "Create channel #traditional-tea-cere", + "justification": "Dedicated space for this initiative" + }, + { + "endpoint": "conversations.history", + "action": "Read recent messages in #random", + "justification": "Gather context about Gemini discussion, lunch, casual" + }, + { + "endpoint": "chat.update", + "action": "Update a previous message with new info", + "justification": "Correct or enhance earlier communication" + }, + { + "endpoint": "reactions.add", + "action": "React to a key message", + "justification": "Signal acknowledgment without cluttering" + }, + { + "endpoint": "chat.delete", + "action": "Delete an outdated message", + "justification": "Clean up obsolete information" + }, + { + "endpoint": "conversations.history", + "action": "Read recent messages in #growth", + "justification": "Gather context about Growth metrics, Reddit strategy" + }, + { + "endpoint": "chat.update", + "action": "Update a previous message with new info", + "justification": "Correct or enhance earlier communication" + }, + { + "endpoint": "chat.update", + "action": "Update a previous message with new info", + "justification": "Correct or enhance earlier communication" + } + ], + "assertions": [ + { + "diff_type": "added", + "entity": "channels", + "where": { + "is_private": { + "eq": false + } + }, + "expected_count": { + "min": 1 + } + } + ] + }, + { + "id": "test_44", + "name": "Lunar New Year Product Launch", + "prompt": "I need your help coordinating our Lunar New Year product launch for the APAC market. Can you first catch me up on what's been happening in #model-research and #core-infra? I want to make sure we're not planning a launch during any technical instability.\n\nAlso, I need to verify that Kenji Sato and Robert Chen are the right people to loop in on this - can you confirm their roles for me? Kenji should be handling APAC growth and Robert should be our engineering lead.\n\nOnce you've gathered that context, please set up a dedicated channel for this initiative and make sure the topic clearly reflects what we're working on. Then post a summary of what you found to #project-alpha-dev so the team is aligned.\n\nOh, and I think I sent a message earlier about the timeline that needs updating with the correct dates - can you fix that? And if there's anything important in those channel histories worth acknowledging, give it a thumbs up so people know we've seen it.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 10, + "tools_required": [ + "conversations.history", + "conversations.history", + "users.info", + "users.info", + "conversations.create", + "conversations.setTopic", + "chat.postMessage", + "chat.update", + "reactions.add", + "conversations.create" + ] + }, + "_step_sequence": [ + { + "endpoint": "conversations.history", + "action": "Read recent messages in #model-research", + "justification": "Gather context about 7B checkpoint, quantization, hallucinations" + }, + { + "endpoint": "users.info", + "action": "Get details about Kenji Sato", + "justification": "Verify their role in APAC growth" + }, + { + "endpoint": "conversations.history", + "action": "Read recent messages in #core-infra", + "justification": "Gather context about GPU incidents, Kubernetes, cost optimization" + }, + { + "endpoint": "users.info", + "action": "Get details about Robert Chen", + "justification": "Verify their role in engineering lead" + }, + { + "endpoint": "chat.postMessage", + "action": "Post update to #project-alpha-dev", + "justification": "Share findings or coordinate with team" + }, + { + "endpoint": "conversations.create", + "action": "Create channel #lunar-new-year-produ", + "justification": "Dedicated space for this initiative" + }, + { + "endpoint": "chat.update", + "action": "Update a previous message with new info", + "justification": "Correct or enhance earlier communication" + }, + { + "endpoint": "conversations.setTopic", + "action": "Set channel topic about Lunar New Year Product Launch", + "justification": "Clarify channel purpose" + }, + { + "endpoint": "reactions.add", + "action": "React to a key message", + "justification": "Signal acknowledgment without cluttering" + }, + { + "endpoint": "conversations.create", + "action": "Create channel #lunar-new-year-produ", + "justification": "Dedicated space for this initiative" + } + ], + "assertions": [ + { + "diff_type": "added", + "entity": "channels", + "where": { + "is_private": { + "eq": false + } + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "added", + "entity": "messages", + "where": {}, + "expected_count": { + "min": 1 + } + } + ] + }, + { + "id": "test_45", + "name": "Music Festival Tech Stack", + "prompt": "I need some help coordinating our virtual Afrobeats festival streaming infrastructure project. Can you help me get things organized across our Slack workspace?\n\nFirst, I want to make sure the #engineering channel clearly reflects that we're focused on the Music Festival Tech Stack right now - the topic should be updated so everyone knows what we're working on.\n\nI remember there were some discussions about CDN solutions a while back that would be really relevant to our streaming needs - can you dig those up for me?\n\nI also need to figure out who on our team should be involved. I know Robert Chen is supposed to be leading the engineering side, but can you confirm his role? And I think \u0141ukasz Kowalski has some great performance optimization experience - make sure he's part of the conversation in our main coordination channel.\n\nOnce you've gathered all this info, I need updates posted to #engineering, #frontend, and #general to get everyone aligned on our festival streaming infrastructure plans. Also, check what channels we have available that might be relevant to this project.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 9, + "tools_required": [ + "conversations.setTopic", + "search.messages", + "users.list", + "users.info", + "conversations.list", + "chat.postMessage", + "chat.postMessage", + "chat.postMessage", + "conversations.invite" + ] + }, + "_step_sequence": [ + { + "endpoint": "conversations.setTopic", + "action": "Set channel topic about Music Festival Tech Stack", + "justification": "Clarify channel purpose" + }, + { + "endpoint": "chat.postMessage", + "action": "Post update to #engineering", + "justification": "Share findings or coordinate with team" + }, + { + "endpoint": "conversations.list", + "action": "Discover channels related to Music Festival Tech Stack", + "justification": "Need to find relevant channels before coordinating" + }, + { + "endpoint": "chat.postMessage", + "action": "Post update to #frontend", + "justification": "Share findings or coordinate with team" + }, + { + "endpoint": "search.messages", + "action": "Search for messages about 'CDN'", + "justification": "Find specific discussions related to the topic" + }, + { + "endpoint": "users.list", + "action": "List all team members", + "justification": "Identify who to involve based on expertise" + }, + { + "endpoint": "chat.postMessage", + "action": "Post update to #general", + "justification": "Share findings or coordinate with team" + }, + { + "endpoint": "users.info", + "action": "Get details about Robert Chen", + "justification": "Verify their role in engineering lead" + }, + { + "endpoint": "conversations.invite", + "action": "Invite \u0141ukasz Kowalski to the channel", + "justification": "Their Polish perspective is valuable" + } + ], + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": {}, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": {}, + "expected_count": { + "min": 1 + } + } + ] + }, + { + "id": "test_46", + "name": "Anime Convention Booth Setup", + "prompt": "I need help getting our anime convention booth coordination sorted out. Can you check what's been happening in #product-growth and #random lately? I want to make sure I'm caught up on any relevant discussions before we dive into planning.\n\nAlso, I remember there were some conversations about badges somewhere - can you find those for me? We had some outdated messages about our old booth location that need to be removed since we got reassigned to a different hall.\n\nI need to loop in Olena Petrenko on this since her perspective would be really helpful for the setup logistics. And I should probably reach out directly to John Doe and Priya Sharma separately - John for general coordination and Priya about the infrastructure stuff like power and internet at the booth.\n\nOh, and let's update the channel topics for #product-growth and #project-alpha-dev to reflect that we're focusing on the anime expo booth setup now. There were a couple of my earlier messages that need corrections too - I posted the wrong setup times initially. Once you find the key planning message, just give it a thumbs up so everyone knows we're aligned.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 13, + "tools_required": [ + "conversations.history", + "conversations.history", + "search.messages", + "chat.delete", + "chat.delete", + "conversations.setTopic", + "conversations.setTopic", + "conversations.invite", + "conversations.open", + "conversations.open", + "chat.update", + "chat.update", + "reactions.add" + ] + }, + "_step_sequence": [ + { + "endpoint": "chat.update", + "action": "Update a previous message with new info", + "justification": "Correct or enhance earlier communication" + }, + { + "endpoint": "search.messages", + "action": "Search for messages about 'badges'", + "justification": "Find specific discussions related to the topic" + }, + { + "endpoint": "chat.delete", + "action": "Delete an outdated message", + "justification": "Clean up obsolete information" + }, + { + "endpoint": "reactions.add", + "action": "React to a key message", + "justification": "Signal acknowledgment without cluttering" + }, + { + "endpoint": "conversations.open", + "action": "Open DM with John Doe", + "justification": "Direct coordination about general" + }, + { + "endpoint": "chat.delete", + "action": "Delete an outdated message", + "justification": "Clean up obsolete information" + }, + { + "endpoint": "conversations.setTopic", + "action": "Set channel topic about Anime Convention Booth Setup", + "justification": "Clarify channel purpose" + }, + { + "endpoint": "conversations.history", + "action": "Read recent messages in #product-growth", + "justification": "Gather context about Japan launch, APAC metrics, latency fixes" + }, + { + "endpoint": "conversations.invite", + "action": "Invite Olena Petrenko to the channel", + "justification": "Their Ukrainian perspective is valuable" + }, + { + "endpoint": "conversations.setTopic", + "action": "Set channel topic about Anime Convention Booth Setup", + "justification": "Clarify channel purpose" + }, + { + "endpoint": "conversations.history", + "action": "Read recent messages in #random", + "justification": "Gather context about Gemini discussion, lunch, casual" + }, + { + "endpoint": "conversations.open", + "action": "Open DM with Priya Sharma", + "justification": "Direct coordination about infrastructure" + }, + { + "endpoint": "chat.update", + "action": "Update a previous message with new info", + "justification": "Correct or enhance earlier communication" + } + ], + "assertions": [ + { + "diff_type": "added", + "entity": "channels", + "where": { + "is_dm": { + "eq": true + } + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": {}, + "expected_count": { + "min": 1 + } + } + ] + }, + { + "id": "test_47", + "name": "Cricket World Cup Watch Party", + "prompt": "Hey, I need your help organizing a Cricket World Cup watch party for our office! We've got team members spread across India, UK, and Australia timezones, so this needs some coordination.\n\nFirst, can you check what channels we already have that might be relevant to this kind of event? I want to make sure we're not duplicating efforts.\n\nI think we should create a dedicated channel for the watch party coordination. Once that's set up, update the topic so people know what it's for. I also need to reach out to Priya Sharma directly since she handles infrastructure and we'll need her help with the streaming setup across offices.\n\nCan you pull up our team roster so I can see who else might want to be involved? Oh, and I posted a message in #general about the watch party time being 3pm PST - that's wrong, it should be 3pm IST since we're primarily coordinating with the India office. Please fix that. There's also an old message I sent about booking a downtown venue that's no longer happening - just delete that one entirely.\n\nThanks!", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 7, + "tools_required": [ + "conversations.list", + "conversations.create", + "conversations.setTopic", + "conversations.open", + "users.list", + "chat.update", + "chat.delete" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "channels", + "where": { + "is_private": { + "eq": false + } + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "added", + "entity": "channels", + "where": { + "is_dm": { + "eq": true + } + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "changed", + "entity": "messages", + "where": { + "message_id": { + "eq": "1699564900.000124" + } + }, + "expected_changes": { + "message_text": { + "to": { + "contains": "IST" + } + } + } + }, + { + "diff_type": "removed", + "entity": "messages", + "where": { + "message_id": { + "eq": "1699564950.000125" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_48", + "name": "Channel Audit and Rename", + "prompt": "I need to do a quick audit of our #engineering channel. Can you get me the full details about the channel and check who's currently in it?\n\nPost the audit results to #general - I want a message showing the exact member count (as a number) and a list of the current members by name.\n\nAfter that, rename #engineering to \"engineering-backend\" since that's what the team mainly works on. Then post a follow-up message in #general confirming the rename was successful with the new channel name.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 7, + "tools_required": [ + "conversations.list", + "conversations.info", + "conversations.members", + "users.list", + "chat.postMessage", + "conversations.rename", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + }, + "message_text": { + "contains": "5" + } + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + }, + "message_text": { + "regex": "[Mm]ember" + } + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "changed", + "entity": "channels", + "where": { + "channel_id": { + "eq": "C03IJKL9012" + } + }, + "expected_changes": { + "channel_name": { + "to": { + "contains": "engineering-backend" + } + } + } + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + }, + "message_text": { + "contains": "engineering-backend" + } + }, + "expected_count": { + "min": 1 + } + } + ] + }, + { + "id": "test_49", + "name": "Thread Q&A from DM - Circuit Tracer Rewrite", + "prompt": "There's a thread in #engineering where Robert asked about the circuit tracer library rewrite timeline. We've been having issues with the layer-by-layer loading and need to rewrite it in PyTorch from scratch to handle multi-GPU distribution properly.\n\nSophie sent me a DM with her implementation plan and timeline since she's leading the PyTorch migration. Check my DM with Sophie to find her estimated completion date, then reply to Robert's question in the thread with that information.\n\nAfter replying, add a checkmark reaction to the original thread message to mark it as addressed.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 7, + "tools_required": [ + "conversations.list", + "conversations.history", + "conversations.replies", + "users.list", + "conversations.open", + "conversations.history", + "chat.postMessage", + "reactions.add" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C03IJKL9012" + }, + "parent_id": { + "eq": "1706110000.000100" + }, + "message_text": { + "contains": "Wednesday" + } + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "added", + "entity": "message_reactions", + "where": { + "message_id": { + "eq": "1706110000.000100" + }, + "user_id": { + "eq": "U01AGENBOT9" + } + }, + "expected_count": { + "min": 1 + } + } + ] + }, + { + "id": "test_50", + "name": "Quarterly Workspace Reorganization", + "prompt": "It's end of Q4 and I need to reorganize our Slack workspace. Help me with the following:\n\n1. First, list all the channels I'm currently a member of. Format it as a numbered list showing: channel name, member count. Send that list to me as a DM to myself.\n\n2. The \"old-project-q3\" channel was archived but we're reviving it for Q1 planning. Unarchive it and rename it to \"q1-planning-2026\". Update the topic to \"Q1 2026 Planning - Americas Team\".\n\n3. In #project-alpha-dev, we want to focus on the Americas timezone team only. Check each member's timezone using their profile info, then remove anyone who is NOT in an Americas timezone (timezone should start with \"America/\").\n\n4. I left an \ud83d\udc40 reaction on the circuit-tracer thread in #engineering a while back - please remove that since we've addressed the issue.\n\n5. Join the #product-growth channel since I'm not in it yet.\n\n6. Finally, post a Q1 kickoff message in the newly renamed channel. In the message, list which team members from #project-alpha-dev are in Americas timezones (the ones who remain after cleanup) - include their names and timezones.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 12, + "tools_required": [ + "users.conversations", + "conversations.members", + "conversations.open", + "chat.postMessage", + "conversations.list", + "conversations.unarchive", + "conversations.rename", + "conversations.setTopic", + "conversations.members", + "users.info", + "conversations.kick", + "reactions.remove", + "conversations.join", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": { + "eq": "U01AGENBOT9" + }, + "message_text": { + "contains": "general" + } + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "changed", + "entity": "channels", + "where": { + "channel_id": { + "eq": "C_OLD_PROJECT" + } + }, + "expected_changes": { + "is_archived": { + "to": { + "eq": false + } + }, + "channel_name": { + "to": { + "contains": "q1-planning" + } + } + } + }, + { + "diff_type": "changed", + "entity": "channels", + "where": { + "channel_id": { + "eq": "C_OLD_PROJECT" + } + }, + "expected_changes": { + "topic_text": { + "to": { + "contains": "Americas" + } + } + } + }, + { + "diff_type": "removed", + "entity": "channel_members", + "where": { + "channel_id": { + "eq": "C06ALPHADEV" + }, + "user_id": { + "eq": "U_PRIYA" + } + }, + "expected_count": 1 + }, + { + "diff_type": "removed", + "entity": "channel_members", + "where": { + "channel_id": { + "eq": "C06ALPHADEV" + }, + "user_id": { + "eq": "U_LUKAS" + } + }, + "expected_count": 1 + }, + { + "diff_type": "removed", + "entity": "channel_members", + "where": { + "channel_id": { + "eq": "C06ALPHADEV" + }, + "user_id": { + "eq": "U_KENJI" + } + }, + "expected_count": 1 + }, + { + "diff_type": "removed", + "entity": "channel_members", + "where": { + "channel_id": { + "eq": "C06ALPHADEV" + }, + "user_id": { + "eq": "U_AISHA" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "channel_id": { + "eq": "C06ALPHADEV" + }, + "user_id": { + "eq": "U_MATEO" + } + }, + "expected_count": 0 + }, + { + "diff_type": "removed", + "entity": "channel_members", + "where": { + "channel_id": { + "eq": "C06ALPHADEV" + }, + "user_id": { + "eq": "U_MATEO" + } + }, + "expected_count": 0 + }, + { + "diff_type": "changed", + "entity": "channel_members", + "where": { + "channel_id": { + "eq": "C06ALPHADEV" + }, + "user_id": { + "eq": "U_MATEO" + } + }, + "expected_count": 0 + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "channel_id": { + "eq": "C06ALPHADEV" + }, + "user_id": { + "eq": "U_ROBERT" + } + }, + "expected_count": 0 + }, + { + "diff_type": "removed", + "entity": "channel_members", + "where": { + "channel_id": { + "eq": "C06ALPHADEV" + }, + "user_id": { + "eq": "U_ROBERT" + } + }, + "expected_count": 0 + }, + { + "diff_type": "changed", + "entity": "channel_members", + "where": { + "channel_id": { + "eq": "C06ALPHADEV" + }, + "user_id": { + "eq": "U_ROBERT" + } + }, + "expected_count": 0 + }, + { + "diff_type": "removed", + "entity": "message_reactions", + "where": { + "message_id": { + "eq": "1706110000.000100" + }, + "user_id": { + "eq": "U01AGENBOT9" + }, + "reaction_type": { + "eq": "eyes" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "channel_id": { + "eq": "C_GROWTH" + }, + "user_id": { + "eq": "U01AGENBOT9" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C_OLD_PROJECT" + }, + "message_text": { + "contains": "Mateo" + } + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C_OLD_PROJECT" + }, + "message_text": { + "contains": "Robert" + } + }, + "expected_count": { + "min": 1 + } + } + ] + }, + { + "id": "test_51", + "name": "Silicon Dreams", + "prompt": "Kenji, Olena, and Priya want to spin up a generative art project using the team's GPU infrastructure. They drew inspiration from the compute discussions and that circuit-tracer visualization work happening somewhere in the workspace. Can you get them organized? They need a channel \u2014 call it #fractal-forge \u2014 with a topic that contains \"GPU-meets-art\". Invite all three, and post an inaugural message that references whatever you can dig up about the GPU work and the circuit-tracer thread that got them excited -- those are going to be messeges on the topic, written by either three. Kenji also wants an :art: reaction on whichever message in #engineering first mentioned the circuit-tracer. Set up a group DM with just Kenji and Olena so they can sort out GPU scheduling privately. And actually, rename the channel to #silicon-dreams \u2014 everyone agreed it sounds better.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 12, + "tools_required": [ + "search.messages", + "conversations.history", + "conversations.create", + "conversations.setTopic", + "conversations.invite", + "chat.postMessage", + "reactions.add", + "conversations.replies", + "conversations.rename", + "conversations.open" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "channels", + "where": { + "channel_name": { + "eq": "silicon-dreams" + }, + "topic_text": { + "i_contains": "GPU-meets-art" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "channels", + "where": { + "is_gc": { + "eq": true + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U_PRIYA" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U_KENJI" + } + }, + "expected_count": 2 + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U_OLENA" + } + }, + "expected_count": 2 + }, + { + "diff_type": "added", + "entity": "message_reactions", + "where": { + "message_id": { + "eq": "1706110000.000100" + }, + "reaction_type": { + "eq": "art" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "message_text": { + "i_contains": "circuit" + } + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "message_text": { + "i_contains": "GPU" + } + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "added", + "entity": "message_reactions", + "where": { + "message_id": { + "eq": "1706110000.000100" + }, + "reaction_type": { + "eq": "eyes" + } + }, + "expected_count": 0 + }, + { + "diff_type": "removed", + "entity": "message_reactions", + "where": { + "message_id": { + "eq": "1706110000.000100" + }, + "reaction_type": { + "eq": "eyes" + } + }, + "expected_count": 0 + }, + { + "diff_type": "changed", + "entity": "message_reactions", + "where": { + "message_id": { + "eq": "1706110000.000100" + }, + "reaction_type": { + "eq": "eyes" + } + }, + "expected_count": 0 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C01ABCD1234" + }, + "message_text": { + "i_contains": "circuit" + } + }, + "expected_count": 0 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C02EFGH5678" + }, + "message_text": { + "i_contains": "circuit" + } + }, + "expected_count": 0 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C03IJKL9012" + }, + "message_text": { + "i_contains": "circuit" + } + }, + "expected_count": 0 + } + ] + }, + { + "id": "test_52", + "name": "Midnight Bazaar", + "prompt": "Sophie and Mateo want to bring the workspace's food culture together under one roof \u2014 a \"Midnight Bazaar\" inspired by all those coffee and pizza conversations scattered around the channels. Dig through the workspace to find what food chatter has been going on and who's been part of it - specifically, search for the authors of the messages that contain the words \"food\" or \"eat\". That old archived channel nobody uses anymore \u2014 revive it and repurpose it as bazaar headquarters. Set a topic that captures the night-market vibe (needs to include the words \"street food\"), and write an opening post that weaves in whatever food discussions you find. While you're at it, some housekeeping: Mateo says he's drowning in #project-alpha-dev notifications and wants out \u2014 remove him. Also, that message about the espresso machine in #random? Edit it to plug the bazaar. And delete that stale message in #random asking about ordering \"large pies\" \u2014 the bazaar makes casual lunch plans obsolete.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 10, + "tools_required": [ + "search.messages", + "conversations.unarchive", + "conversations.join", + "conversations.setTopic", + "chat.postMessage", + "conversations.kick", + "chat.update", + "chat.delete" + ] + }, + "assertions": [ + { + "diff_type": "changed", + "entity": "channels", + "where": { + "channel_id": { + "eq": "C_OLD_PROJECT" + } + }, + "expected_changes": { + "is_archived": { + "from": true, + "to": false + }, + "topic_text": { + "to": { + "i_contains": "street food" + } + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "channel_id": { + "eq": "C_OLD_PROJECT" + }, + "user_id": { + "eq": "U01AGENBOT9" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C_OLD_PROJECT" + } + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "removed", + "entity": "channel_members", + "where": { + "channel_id": { + "eq": "C06ALPHADEV" + }, + "user_id": { + "eq": "U_MATEO" + } + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C02EFGH5678" + } + }, + "expected_changes": { + "message_text": { + "to": { + "i_contains": "bazaar" + } + } + }, + "ignore": [ + "blocks" + ], + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "removed", + "entity": "messages", + "where": { + "channel_id": { + "eq": "C02EFGH5678" + }, + "message_text": { + "i_contains": "large pies" + } + }, + "expected_count": 1 + } + ] + }, + { + "id": "test_53", + "name": "Phantom Frequencies", + "prompt": "Aisha, Lukasz, Gabriel, Nick, and Priya want to launch a collaborative radio drama called \"Phantom Frequencies\" \u2014 a serialized fiction project where each person broadcasts a story from their timezone. They got the idea from all the talk about signal latency, CDN routing, and transmission in the workspace. Set them up with a channel called #phantom-frequencies, give it a topic that fits the concept (need to mention \"Phantom Frequencies\"), and get everyone in. Check Aisha's profile to confirm her timezone for the broadcast schedule, and DM her separately to ask about her episode's Lagos-blackout storyline. Write a first post in the channel that draws on whatever transmission and signal discussions you can find in the workspace. Also, that :eyes: reaction you left on the circuit-tracer message in #engineering \u2014 remove it, it's stale. There's a channel called #product-growth you're not in \u2014 pop in and check if there's anything about the APAC launch that could feed into the drama's world-building, then leave once you've got what you need. If you find in this chat a user with any user with a name that contains \"incognito\" ping them to change the nickname to \"anything\" - we need to maintain a trustful atmosphere here. And that #project-alpha channel that's basically just you \u2014 archive it, nobody's using it.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 12, + "tools_required": [ + "conversations.history", + "users.info", + "conversations.create", + "conversations.setTopic", + "conversations.invite", + "chat.postMessage", + "conversations.open", + "reactions.remove", + "conversations.join", + "conversations.leave", + "conversations.archive" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "channels", + "where": { + "channel_name": "phantom-frequencies", + "topic_text": { + "i_contains": "Phantom Frequencies" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "in": [ + "U_AISHA", + "U_LUKAS", + "U09GABRIEL", + "U08NICK23", + "U_PRIYA" + ] + } + }, + "expected_count": { + "min": 5 + } + }, + { + "diff_type": "added", + "entity": "channels", + "where": { + "is_dm": true + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "message_text": { + "i_contains": "Lagos" + } + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "removed", + "entity": "message_reactions", + "where": { + "message_id": "1706110000.000100", + "reaction_type": "eyes" + }, + "expected_count": 1 + }, + { + "diff_type": "changed", + "entity": "channels", + "where": { + "channel_id": "C05ALPHA" + }, + "expected_changes": { + "is_archived": { + "to": true + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": "U_INCOGNITO" + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": "U01AGENBOT9" + }, + "expected_count": { + "min": 3 + } + } + ] + }, + { + "id": "test_54", + "name": "Cartography of Lost Rivers", + "prompt": "Hubert, John, Morgan, and Omer want to start a mapping project for forgotten underground rivers \u2014 they're calling it \"Cartography of Lost Rivers\". Pull up some details about #core-infra to see if that community would be a good match for cross-pollination. Now, \"Morgan\" \u2014 I mean the one who's been in the engineering discussions, not the other one. Also, that Morgan asked me to count all of the messages across all of the chats that mention the word \"supercomputer.\" Do this please. Then create #lost-rivers-cartography, set a topic about mapping forgotten urban waterways, invite all four, and write a project manifesto as the opening post that will say: '\"supercomputer\" mentioned number of times across all of the chats'. DM Morgan privately to ask whether they'd rather lead the cartography side or the field exploration. Lastly, find a message about infrastructure in #engineering and edit it to include a mention of the new project.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 12, + "tools_required": [ + "users.list", + "conversations.list", + "conversations.info", + "search.all", + "conversations.create", + "conversations.setTopic", + "conversations.invite", + "chat.postMessage", + "conversations.open", + "chat.update", + "conversations.history" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "channels", + "where": { + "channel_name": "lost-rivers-cartography", + "topic_text": { + "i_contains": "waterway" + } + }, + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "in": [ + "U06HUBERT23", + "U02JOHNDOE1", + "U05MORGAN23", + "U04OMER23" + ] + } + }, + "expected_count": { + "min": 4 + } + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": "U01AGENBOT9", + "message_text": { + "regex": "(?i)supercomputer.*\\b2\\b" + } + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "added", + "entity": "channels", + "where": { + "is_dm": true + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": "U01AGENBOT9", + "message_text": { + "regex": "(?i)exploration" + } + }, + "expected_count": { + "min": 1 + } + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": "U05MORGAN23" + }, + "expected_count": { + "min": 2 + } + }, + { + "diff_type": "changed", + "entity": "messages", + "where": { + "channel_id": "C03IJKL9012" + }, + "expected_changes": { + "message_text": { + "to": { + "regex": "(?i)lost.rivers" + } + } + }, + "ignore": [ + "blocks" + ], + "expected_count": 1 + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": "U01AGENBOT9" + }, + "expected_count": { + "min": 2 + } + } + ] + }, + { + "id": "test_55", + "name": "Dawn Chorus", + "prompt": "Kenji, Priya, Aisha, Sophie, Lukasz, and Mateo want to do a \"Sunrise Relay\" \u2014 a collaborative poetry chain where each person writes a verse when dawn breaks in their timezone, passing the baton westward as the sun moves around the earth. Pull up everyone's locale and timezone info so you can figure out the correct relay order from earliest sunrise to latest. Check what's been going on in #frontend for some creative inspiration to seed the poem's theme. Create a channel called #sunrise-relay, set the topic to the relay schedule showing each person and their timezone in sunrise order in exactly this format: \": \\n\" , invite all six, and post the full relay plan as the opening message. Drop a :sunrise: reaction on that schedule post. While you're looking at timezones, Mateo mentioned he can't keep up with #model-research because all the discussions happen during European hours and he's on Pacific time \u2014 pull him out of that channel. Oh, and rename #sunrise-relay to #dawn-chorus \u2014 the group decided the poem should be about birdsong at first light.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 10, + "tools_required": [ + "users.list", + "conversations.list", + "conversations.history", + "conversations.create", + "conversations.setTopic", + "conversations.invite", + "chat.postMessage", + "reactions.add", + "conversations.kick", + "conversations.rename" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "channels", + "where": { + "channel_name": "dawn-chorus", + "topic_text": { + "regex": "(?s)(?=.*Lagos)(?=.*Warsaw)(?=.*Paris)Tokyo.*Kolkata.*Los_Angeles" + } + }, + "expected_count": 1, + "description": "Channel created as #sunrise-relay and renamed to #dawn-chorus, topic has relay schedule with all 6 timezones in correct east-to-west sunrise order" + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "in": [ + "U_KENJI", + "U_PRIYA", + "U_AISHA", + "U_LUKAS", + "U_SOPHIE", + "U_MATEO" + ] + } + }, + "expected_count": { + "min": 6 + }, + "description": "All 6 relay participants invited to the new channel" + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": "U01AGENBOT9", + "message_text": { + "regex": "(?s)(?=.*Tokyo)(?=.*Los_Angeles)" + } + }, + "expected_count": { + "min": 1 + }, + "description": "Agent posted the full relay plan as opening message with timezone references" + }, + { + "diff_type": "added", + "entity": "message_reactions", + "where": { + "reaction_type": "sunrise" + }, + "expected_count": 1, + "description": ":sunrise: reaction dropped on the schedule post" + }, + { + "diff_type": "removed", + "entity": "channel_members", + "where": { + "channel_id": "C_MODEL", + "user_id": "U_MATEO" + }, + "expected_count": 1, + "description": "Mateo removed from #model-research due to Pacific timezone mismatch with European discussion hours" + } + ] + }, + { + "id": "test_56", + "name": "The Apiary Report", + "prompt": "Hubert does this thing he calls the \"Apiary Report\" \u2014 he sees the workspace as a beehive, and he wants a quarterly survey. First he needs the full picture: how many honeycomb cells does this hive have, and which ones are alive? Then go taste the honey in #growth \u2014 read through whatever's been happening there. Find the sweetest drop \u2014 the single best message \u2014 and mark it with a :honey_pot:. That's Hubert's forager tradition. Once you've done your tasting, write up a Forager's Report and post it in #random for the rest of the colony, summarizing whatever noteworthy conversation you found in #growth. Note, that the report must contain the words \"FORAGERS REPORT\". Last thing: #project-alpha is an empty cell. Nobody's in it, nothing's happening. Seal it off.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 5, + "tools_required": [ + "conversations.list", + "conversations.history", + "reactions.add", + "chat.postMessage", + "conversations.archive" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "message_reactions", + "where": { + "reaction_type": "honey_pot", + "user_id": "U01AGENBOT9", + "message_id": { + "in": [ + "1700300000.000001", + "1700300060.000002", + "1700300120.000003", + "1700300180.000004", + "1700300240.000005", + "1700300300.000006" + ] + } + }, + "expected_count": 1, + "description": ":honey_pot: reaction added to a message in #growth channel" + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": "C02EFGH5678", + "user_id": "U01AGENBOT9", + "message_text": { + "contains": "FORAGERS REPORT" + } + }, + "expected_count": 1, + "description": "Forager's Report posted to #random with required phrase" + }, + { + "diff_type": "changed", + "entity": "channels", + "where": { + "channel_id": "C05ALPHA" + }, + "expected_count": 1, + "expected_changes": { + "is_archived": { + "from": false, + "to": true + } + }, + "description": "#project-alpha archived (empty cell sealed)" + } + ] + }, + { + "id": "test_57", + "name": "Tide Pool", + "prompt": "Think of the workspace as a coastline full of tide pools \u2014 each channel is its own micro-ecosystem, and you're the naturalist on a field survey. Start by pulling a roster of every organism on this coast and classify them into two species: \"admin\" and \"member.\" How many of each do you count? You need to sort the channel names in alphabetic order and send a message to Omer, in exactly this format: \"Field Repoert 1: : [, ]\". Then inspect #engineering. Probe under the circuit-tracer rock in that channel \u2014 there's a thread with replies most people never noticed. Count exactly how many replies are down there and note who left them. Over in #random, that message about coordinating lunch plans is an invasive species \u2014 remove it. And whoever originally posted that circuit-tracer message in #engineering \u2014 open a private channel with them and send them a field report formatted exactly like this: \"Field Report 2: [N] replies found under circuit-tracer in #engineering \u2014 organisms: [comma-separated names of repliers]\".", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 7, + "tools_required": [ + "users.list", + "conversations.list", + "conversations.open", + "chat.postMessage", + "conversations.replies", + "chat.delete", + "conversations.history" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": "U04OMER23" + }, + "expected_count": 1, + "description": "DM channel opened with Omer to deliver the channel survey (Field Report 1)" + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": "U01AGENBOT9", + "message_text": { + "regex": "(?s)Field Repoert 1.*core-infra[^\\n]*\\[0,\\s*9\\].*engineering[^\\n]*\\[1,\\s*4\\].*frontend[^\\n]*\\[0,\\s*9\\].*general[^\\n]*\\[1,\\s*2\\].*growth[^\\n]*\\[0,\\s*4\\].*model-research[^\\n]*\\[0,\\s*9\\].*project-alpha[^\\n]*\\[0,\\s*1\\].*project-alpha-dev[^\\n]*\\[0,\\s*7\\].*random[^\\n]*\\[1,\\s*3\\]" + } + }, + "expected_count": 1, + "description": "Field Report 1 sent to Omer listing all channels alphabetically with correct per-channel admin/member counts (engineering [1,4], general [1,2], random [1,3], project-alpha-dev [0,7], etc.)" + }, + { + "diff_type": "removed", + "entity": "messages", + "where": { + "channel_id": "C02EFGH5678", + "message_text": { + "i_contains": "lunch" + } + }, + "expected_count": 1, + "description": "Lunch coordination message removed from #random \u2014 invasive species eliminated" + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": "U_LUKAS" + }, + "expected_count": 1, + "description": "DM opened with Lukasz (U_LUKAS) \u2014 the original poster of the circuit-tracer message in #engineering" + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "user_id": "U01AGENBOT9", + "message_text": { + "regex": "(?si)Field Report 2:\\s*\\[?2\\]?\\s+repl.*circuit-tracer.*robert.*kenji" + } + }, + "expected_count": 1, + "description": "Field Report 2 sent to circuit-tracer poster reporting exactly 2 replies by Robert and Kenji under the circuit-tracer thread" + } + ] + }, + { + "id": "test_58", + "name": "Palimpsest", + "prompt": "Robert and Nick want to do a \"Palimpsest\" \u2014 scraping off old marks in the workspace and writing over them with new ones. First, check what channels Nick is actually in \u2014 Robert suspects he's barely present anywhere. Count them. Then scrape off that :eyes: reaction you left on the circuit-tracer message in #engineering \u2014 it's old ink that needs to go. That lonely #project-alpha channel? Overwrite its name \u2014 rename it to #palimpsest-archive, it's being repurposed as a record of overwritten things. Finally, write the new text: post a message in #random that says exactly \"PALIMPSEST COMPLETE: [N] channels found for Nick\" where [N] is however many channels Nick turned out to be in.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 4, + "tools_required": [ + "users.conversations", + "reactions.remove", + "conversations.rename", + "chat.postMessage" + ] + }, + "assertions": [ + { + "diff_type": "removed", + "entity": "message_reactions", + "where": { + "message_id": "1706110000.000100", + "user_id": "U01AGENBOT9", + "reaction_type": "eyes" + }, + "expected_count": 1, + "description": "Agent's :eyes: reaction removed from circuit-tracer message in #engineering \u2014 old ink scraped off" + }, + { + "diff_type": "changed", + "entity": "channels", + "where": { + "channel_id": "C05ALPHA" + }, + "expected_count": 1, + "expected_changes": { + "channel_name": { + "from": "project-alpha", + "to": "palimpsest-archive" + } + }, + "description": "#project-alpha renamed to #palimpsest-archive \u2014 overwritten with new purpose" + }, + { + "diff_type": "added", + "entity": "messages", + "where": { + "channel_id": "C02EFGH5678", + "user_id": "U01AGENBOT9", + "message_text": { + "regex": "PALIMPSEST COMPLETE:\\s*1\\s+channels?\\s+found\\s+for\\s+Nick" + } + }, + "expected_count": 1, + "description": "Palimpsest record posted in #random: 'PALIMPSEST COMPLETE: 1 channel(s) found for Nick' \u2014 Nick is only in #growth" + } + ] + }, + { + "id": "test_59", + "name": "Manage Private Conversations", + "prompt": "How many active private conversations do I have? If I have less than seven conversations, please create new conversations with the users one by one in alphabetic order, skipping those with whom I already have conversations. If I have more than seven conversations, start removing conversations with those in alphabetic order until I have exactly seven conversations.", + "type": "actionEval", + "seed_template": "slack_bench_v2", + "impersonate_user_id": "U01AGENBOT9", + "metadata": { + "min_tool_calls": 8, + "tools_required": [ + "conversations.list", + "users.list", + "conversations.open" + ] + }, + "assertions": [ + { + "diff_type": "added", + "entity": "channels", + "where": { + "is_dm": { + "eq": true + } + }, + "expected_count": 6, + "description": "6 new DM channels created to reach target of 7 private conversations (Agent started with 1 DM with Sophie, needs DMs with: Aisha, Artem, Carlos, Gabriel, Hubert, John \u2014 first 6 alphabetically excluding Sophie)" + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U_LUKAS" + } + }, + "expected_count": 0, + "description": "Łukasz (alphabetically after John) should NOT be added — agent stops at 7 conversations" + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U_MATEO" + } + }, + "expected_count": 0, + "description": "Mateo (alphabetically after John) should NOT be added — agent stops at 7 conversations" + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U07MORGANFREE" + } + }, + "expected_count": 0, + "description": "Morgan Freeman (alphabetically after John) should NOT be added — agent stops at 7 conversations" + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U05MORGAN23" + } + }, + "expected_count": 0, + "description": "Morgan Stanley (alphabetically after John) should NOT be added — agent stops at 7 conversations" + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U08NICK23" + } + }, + "expected_count": 0, + "description": "Nick (alphabetically after John) should NOT be added — agent stops at 7 conversations" + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U_OLENA" + } + }, + "expected_count": 0, + "description": "Olena (alphabetically after John) should NOT be added — agent stops at 7 conversations" + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U04OMER23" + } + }, + "expected_count": 0, + "description": "Omer (alphabetically after John) should NOT be added — agent stops at 7 conversations" + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U_PRIYA" + } + }, + "expected_count": 0, + "description": "Priya (alphabetically after John) should NOT be added — agent stops at 7 conversations" + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U_ROBERT" + } + }, + "expected_count": 0, + "description": "Robert Chen (alphabetically after John) should NOT be added — agent stops at 7 conversations" + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U03ROBERT23" + } + }, + "expected_count": 0, + "description": "Robert Walsh (alphabetically after John) should NOT be added — agent stops at 7 conversations" + }, + { + "diff_type": "added", + "entity": "channel_members", + "where": { + "user_id": { + "eq": "U_KENJI" + } + }, + "expected_count": 0, + "description": "Kenji (alphabetically after John) should NOT be added — agent stops at 7 conversations" + } + ] + } + ] +} \ No newline at end of file diff --git a/experiments/kdd 2026/qualitative_analysis/utils/bayes_bootstrap.py b/experiments/kdd 2026/qualitative_analysis/utils/bayes_bootstrap.py new file mode 100644 index 0000000..a6d2bd0 --- /dev/null +++ b/experiments/kdd 2026/qualitative_analysis/utils/bayes_bootstrap.py @@ -0,0 +1,595 @@ +"""Bayesian bootstrap utilities for statistical inference.""" + +import json +import os +import uuid +from datetime import datetime +from typing import Callable + +import numpy as np + + +def bayes_bootstrap_single( + runs: list[dict], + statistic: Callable, + n_draws: int = 10000, + seed: int = 0, + compare_to: float = 0.0 +) -> dict | None: + """ + Bayesian bootstrap for a single-group statistic. + + Args: + runs: List of observation dicts + statistic: Callable that takes (runs, weights) -> float + n_draws: Number of bootstrap samples + seed: Random seed + compare_to: Threshold for probability comparison (default 0) + + Returns: + dict with mean, median, lo, hi (95% CI), p_lt (P < compare_to), p_gt (P > compare_to), + or None when runs is empty. + """ + rng = np.random.default_rng(seed) + n = len(runs) + + if n == 0: + return None + + # Generate Dirichlet weights + W = rng.dirichlet(np.ones(n), size=n_draws) + + # Compute statistic for each bootstrap sample + stats = np.array([statistic(runs, w) for w in W]) + + lo, hi = np.percentile(stats, [2.5, 97.5]) + + return { + 'mean': float(stats.mean()), + 'median': float(np.median(stats)), + 'lo': float(lo), + 'hi': float(hi), + 'p_lt': float((stats < compare_to).mean()), + 'p_gt': float((stats > compare_to).mean()), + 'compare_to': compare_to + } + + +def bayes_bootstrap_delta( + group_a: list[dict], + group_b: list[dict], + statistic: Callable, + n_draws: int = 10000, + seed: int = 0 +) -> dict | None: + """ + Bayesian bootstrap for Δ = statistic(group_a) - statistic(group_b). + + Uses Dirichlet reweighting to generate a posterior distribution over the + difference between two groups, allowing uncertainty quantification. + + Args: + group_a: List of observation dicts for condition A + group_b: List of observation dicts for condition B + statistic: Callable that takes (observations: list[dict], weights: np.ndarray) -> float + The weights array sums to 1 and has same length as observations. + n_draws: Number of bootstrap samples + seed: Random seed for reproducibility + + Returns: + dict with keys: + - mean: Expected value of Δ (point estimate) + - median: Median of Δ (robust point estimate) + - lo: 2.5th percentile of Δ (lower bound of 95% CI) + - hi: 97.5th percentile of Δ (upper bound of 95% CI) + - p_gt_0: P(Δ > 0), probability that group A > group B + - p_lt_0: P(Δ < 0), probability that group B > group A + + Example statistic functions: + # Weighted mean of 'score' field + def weighted_mean_score(obs, weights): + scores = np.array([o['score'] for o in obs]) + return np.sum(weights * scores) + + # Weighted success rate (score == 100) + def weighted_success_rate(obs, weights): + successes = np.array([o['score'] == 100 for o in obs]) + return np.sum(weights * successes) + """ + rng = np.random.default_rng(seed) + + n_a = len(group_a) + n_b = len(group_b) + + if n_a == 0 or n_b == 0: + return None + + # Generate Dirichlet weights for each group + W_a = rng.dirichlet(np.ones(n_a), size=n_draws) # Shape: (n_draws, n_a) + W_b = rng.dirichlet(np.ones(n_b), size=n_draws) # Shape: (n_draws, n_b) + + # Compute statistic for each bootstrap sample + stats_a = np.array([statistic(group_a, w) for w in W_a]) + stats_b = np.array([statistic(group_b, w) for w in W_b]) + + delta = stats_a - stats_b + + lo, hi = np.percentile(delta, [2.5, 97.5]) + return { + 'mean': float(delta.mean()), + 'median': float(np.median(delta)), + 'lo': float(lo), + 'hi': float(hi), + 'p_gt_0': float((delta > 0).mean()), + 'p_lt_0': float((delta < 0).mean()) + } + + +def bayes_bootstrap_delta_clustered( + group_a: list[dict], + group_b: list[dict], + statistic: Callable, + cluster_key: str = "test_id", + n_draws: int = 10000, + seed: int = 0 +) -> dict | None: + """ + Bayesian bootstrap for Δ = statistic(group_a) - statistic(group_b) with test-level clustering. + + Unlike bayes_bootstrap_delta, this function assigns the SAME weight to observations + with the same cluster_key value across both groups. This is appropriate for paired + comparisons where the same test should have equal importance in both conditions. + + Only observations with cluster_key values present in BOTH groups are included. + + Args: + group_a: List of observation dicts for condition A + group_b: List of observation dicts for condition B + statistic: Callable that takes (observations: list[dict], weights: np.ndarray) -> float + The weights array sums to 1 and has same length as observations. + cluster_key: Field name to cluster on (e.g., "test_id"). Same cluster value + gets the same weight in both groups. + n_draws: Number of bootstrap samples + seed: Random seed for reproducibility + + Returns: + dict with keys: + - mean: Expected value of Δ (point estimate) + - median: Median of Δ (robust point estimate) + - lo: 2.5th percentile of Δ (lower bound of 95% CI) + - hi: 97.5th percentile of Δ (upper bound of 95% CI) + - p_gt_0: P(Δ > 0), probability that group A > group B + - p_lt_0: P(Δ < 0), probability that group B > group A + - n_clusters: Number of shared clusters used in comparison + - n_a: Number of observations in group_a after filtering + - n_b: Number of observations in group_b after filtering + Returns None if no shared clusters exist. + """ + rng = np.random.default_rng(seed) + + # Extract cluster values from both groups + clusters_a = set(obs[cluster_key] for obs in group_a) + clusters_b = set(obs[cluster_key] for obs in group_b) + + # Find shared clusters (must exist in both groups for paired comparison) + shared_clusters = clusters_a & clusters_b + + if len(shared_clusters) == 0: + return None + + # Create ordered list of shared clusters and mapping to index + shared_clusters_list = sorted(shared_clusters) + cluster_to_idx = {c: i for i, c in enumerate(shared_clusters_list)} + n_clusters = len(shared_clusters_list) + + # Filter groups to only include observations with shared clusters + group_a_filtered = [obs for obs in group_a if obs[cluster_key] in shared_clusters] + group_b_filtered = [obs for obs in group_b if obs[cluster_key] in shared_clusters] + + n_a = len(group_a_filtered) + n_b = len(group_b_filtered) + + if n_a == 0 or n_b == 0: + return None + + # Count observations per shared cluster in each group + cluster_sizes_a = np.zeros(n_clusters) + for obs in group_a_filtered: + cluster_sizes_a[cluster_to_idx[obs[cluster_key]]] += 1 + + cluster_sizes_b = np.zeros(n_clusters) + for obs in group_b_filtered: + cluster_sizes_b[cluster_to_idx[obs[cluster_key]]] += 1 + + # Generate ONE set of Dirichlet weights per shared cluster + # Shape: (n_draws, n_clusters) + W_clusters = rng.dirichlet(np.ones(n_clusters), size=n_draws) + + # Map cluster weights to observations and divide by within-group cluster size. + # This preserves paired cluster weights across groups even when cluster sizes differ. + idx_a = np.array([cluster_to_idx[obs[cluster_key]] for obs in group_a_filtered]) + idx_b = np.array([cluster_to_idx[obs[cluster_key]] for obs in group_b_filtered]) + W_a = W_clusters[:, idx_a] / cluster_sizes_a[idx_a] + W_b = W_clusters[:, idx_b] / cluster_sizes_b[idx_b] + + # Re-normalize for numerical stability. + W_a = W_a / W_a.sum(axis=1, keepdims=True) + W_b = W_b / W_b.sum(axis=1, keepdims=True) + + # Compute statistic for each bootstrap sample + stats_a = np.array([statistic(group_a_filtered, w) for w in W_a]) + stats_b = np.array([statistic(group_b_filtered, w) for w in W_b]) + + delta = stats_a - stats_b + + lo, hi = np.percentile(delta, [2.5, 97.5]) + return { + 'mean': float(delta.mean()), + 'median': float(np.median(delta)), + 'lo': float(lo), + 'hi': float(hi), + 'p_gt_0': float((delta > 0).mean()), + 'p_lt_0': float((delta < 0).mean()), + 'n_clusters': n_clusters, + 'n_a': n_a, + 'n_b': n_b + } + + +def bayes_bootstrap_delta_internal_clustering( + group_a: list[dict], + group_b: list[dict], + statistic: Callable, + cluster_key: str = "test_id", + n_draws: int = 10000, + seed: int = 0 +) -> dict | None: + """ + Bayesian bootstrap delta with internal clustering (no shared clusters required). + + Each group is clustered independently by cluster_key. Observations within a cluster + share the cluster's weight (divided by cluster size), so each unique cluster + contributes equally regardless of how many observations it has. + + Example: + Cluster A has 3 obs (values 1,2,3), Cluster B has 1 obs (value 10) + Dirichlet weights: [0.6, 0.4] + + Wrong approach: assign 0.6 to each of A's obs -> A gets 3x weight + Correct approach: assign 0.6/3=0.2 to each of A's obs -> equal cluster weight + + Result: 1*0.2 + 2*0.2 + 3*0.2 + 10*0.4 = 5.2 + (equivalent to: mean(A)*0.6 + mean(B)*0.4 = 2*0.6 + 10*0.4 = 5.2) + """ + rng = np.random.default_rng(seed) + + # Get clusters for each group + clusters_a = sorted(set(obs[cluster_key] for obs in group_a)) + clusters_b = sorted(set(obs[cluster_key] for obs in group_b)) + + if not clusters_a or not clusters_b: + return None + + n_clusters_a = len(clusters_a) + n_clusters_b = len(clusters_b) + + # Create cluster index mappings + cluster_to_idx_a = {c: i for i, c in enumerate(clusters_a)} + cluster_to_idx_b = {c: i for i, c in enumerate(clusters_b)} + + # Count observations per cluster + cluster_sizes_a = np.zeros(n_clusters_a) + for obs in group_a: + cluster_sizes_a[cluster_to_idx_a[obs[cluster_key]]] += 1 + + cluster_sizes_b = np.zeros(n_clusters_b) + for obs in group_b: + cluster_sizes_b[cluster_to_idx_b[obs[cluster_key]]] += 1 + + # Map observations to their cluster indices + idx_a = np.array([cluster_to_idx_a[obs[cluster_key]] for obs in group_a]) + idx_b = np.array([cluster_to_idx_b[obs[cluster_key]] for obs in group_b]) + + # Generate independent Dirichlet weights for each group's clusters + W_clusters_a = rng.dirichlet(np.ones(n_clusters_a), size=n_draws) + W_clusters_b = rng.dirichlet(np.ones(n_clusters_b), size=n_draws) + + # Map cluster weights to observations, DIVIDED BY CLUSTER SIZE + # This ensures each cluster contributes equally regardless of # observations + W_a = W_clusters_a[:, idx_a] / cluster_sizes_a[idx_a] + W_b = W_clusters_b[:, idx_b] / cluster_sizes_b[idx_b] + + # Normalize weights within each group to sum to 1 + W_a = W_a / W_a.sum(axis=1, keepdims=True) + W_b = W_b / W_b.sum(axis=1, keepdims=True) + + # Compute statistics + stats_a = np.array([statistic(group_a, w) for w in W_a]) + stats_b = np.array([statistic(group_b, w) for w in W_b]) + delta = stats_a - stats_b + + lo, hi = np.percentile(delta, [2.5, 97.5]) + return { + 'mean': float(delta.mean()), + 'median': float(np.median(delta)), + 'lo': float(lo), + 'hi': float(hi), + 'p_gt_0': float((delta > 0).mean()), + 'p_lt_0': float((delta < 0).mean()), + 'n_clusters_a': n_clusters_a, + 'n_clusters_b': n_clusters_b, + 'n_a': len(group_a), + 'n_b': len(group_b) + } + + +def bayes_bootstrap_delta_paired_clustered( + group_a: list[dict], + group_b: list[dict], + statistic: Callable, + cluster_key: str = "test_id", + n_draws: int = 10000, + seed: int = 0 +) -> dict | None: + """ + Bayesian bootstrap for paired comparison with proper cluster weighting. + + This is a hybrid of delta_clustered and internal_clustering: + - Shared clusters get the SAME Dirichlet weight in both groups (paired design) + - Within each group, observations in the same cluster share weight equally + (divided by cluster size, so each cluster contributes equally) + + This is appropriate when: + - Both groups share the same experimental units (e.g., same test cases) + - You want to control for unit-level confounds (e.g., task difficulty) + - Each unit has multiple observations per group (e.g., multiple models) + + Statistically, this computes a weighted average of paired differences: + Δ = Σ_c w_c · (mean_A(c) - mean_B(c)) + where w_c ~ Dirichlet(1,...,1) and mean_A(c) is the average within cluster c in group A. + + Args: + group_a: List of observation dicts for condition A + group_b: List of observation dicts for condition B + statistic: Callable that takes (observations, weights) -> float + cluster_key: Field name to cluster on (e.g., "test_id" or composite key) + n_draws: Number of bootstrap samples + seed: Random seed for reproducibility + + Returns: + dict with mean, median, 95% CI, directional probabilities, and counts + Returns None if no shared clusters exist. + """ + rng = np.random.default_rng(seed) + + # Find shared clusters + clusters_a = set(obs[cluster_key] for obs in group_a) + clusters_b = set(obs[cluster_key] for obs in group_b) + shared_clusters = sorted(clusters_a & clusters_b) + + if not shared_clusters: + return None + + n_clusters = len(shared_clusters) + cluster_to_idx = {c: i for i, c in enumerate(shared_clusters)} + + # Filter to shared clusters only + group_a_filtered = [obs for obs in group_a if obs[cluster_key] in shared_clusters] + group_b_filtered = [obs for obs in group_b if obs[cluster_key] in shared_clusters] + + n_a = len(group_a_filtered) + n_b = len(group_b_filtered) + + if n_a == 0 or n_b == 0: + return None + + # Count observations per cluster in each group + cluster_sizes_a = np.zeros(n_clusters) + for obs in group_a_filtered: + cluster_sizes_a[cluster_to_idx[obs[cluster_key]]] += 1 + + cluster_sizes_b = np.zeros(n_clusters) + for obs in group_b_filtered: + cluster_sizes_b[cluster_to_idx[obs[cluster_key]]] += 1 + + # Map observations to cluster indices + idx_a = np.array([cluster_to_idx[obs[cluster_key]] for obs in group_a_filtered]) + idx_b = np.array([cluster_to_idx[obs[cluster_key]] for obs in group_b_filtered]) + + # Generate ONE set of Dirichlet weights for shared clusters + # This is the key: same cluster gets same weight in both groups + W_clusters = rng.dirichlet(np.ones(n_clusters), size=n_draws) + + # Map cluster weights to observations, DIVIDED BY CLUSTER SIZE + # This ensures each cluster contributes equally within each group + W_a = W_clusters[:, idx_a] / cluster_sizes_a[idx_a] + W_b = W_clusters[:, idx_b] / cluster_sizes_b[idx_b] + + # Normalize weights within each group + W_a = W_a / W_a.sum(axis=1, keepdims=True) + W_b = W_b / W_b.sum(axis=1, keepdims=True) + + # Compute statistics + stats_a = np.array([statistic(group_a_filtered, w) for w in W_a]) + stats_b = np.array([statistic(group_b_filtered, w) for w in W_b]) + delta = stats_a - stats_b + + lo, hi = np.percentile(delta, [2.5, 97.5]) + return { + 'mean': float(delta.mean()), + 'median': float(np.median(delta)), + 'lo': float(lo), + 'hi': float(hi), + 'p_gt_0': float((delta > 0).mean()), + 'p_lt_0': float((delta < 0).mean()), + 'n_clusters': n_clusters, + 'n_a': n_a, + 'n_b': n_b + } + + +def bayes_bootstrap_single_internal_clustering( + runs: list[dict], + statistic: Callable, + cluster_key: str = "test_id", + n_draws: int = 10000, + seed: int = 0, + compare_to: float = 0.0 +) -> dict | None: + """ + Bayesian bootstrap for a single-group statistic with internal clustering. + + Observations are clustered by cluster_key. Each cluster gets a Dirichlet weight, + which is then divided among observations in that cluster. This ensures each unique + cluster contributes equally regardless of how many observations it contains. + + Use case: When pooling across doc_levels where the same test_id appears multiple + times (once per doc_level). We want to weight by test, not by observation. + + Args: + runs: List of observation dicts + statistic: Callable that takes (runs, weights) -> float + cluster_key: Field name to cluster on (e.g., "test_id") + n_draws: Number of bootstrap samples + seed: Random seed + compare_to: Threshold for probability comparison (default 0) + + Returns: + dict with mean, median, lo, hi (95% CI), p_lt, p_gt, n_clusters, n_obs + """ + rng = np.random.default_rng(seed) + + if not runs: + return None + + # Get unique clusters + clusters = sorted(set(obs[cluster_key] for obs in runs)) + n_clusters = len(clusters) + + if n_clusters == 0: + return None + + # Create cluster index mapping + cluster_to_idx = {c: i for i, c in enumerate(clusters)} + + # Count observations per cluster + cluster_sizes = np.zeros(n_clusters) + for obs in runs: + cluster_sizes[cluster_to_idx[obs[cluster_key]]] += 1 + + # Map observations to their cluster indices + idx = np.array([cluster_to_idx[obs[cluster_key]] for obs in runs]) + + # Generate Dirichlet weights for clusters + W_clusters = rng.dirichlet(np.ones(n_clusters), size=n_draws) + + # Map cluster weights to observations, DIVIDED BY CLUSTER SIZE + # This ensures each cluster contributes equally regardless of # observations + W = W_clusters[:, idx] / cluster_sizes[idx] + + # Normalize weights to sum to 1 + W = W / W.sum(axis=1, keepdims=True) + + # Compute statistic for each bootstrap sample + stats = np.array([statistic(runs, w) for w in W]) + + lo, hi = np.percentile(stats, [2.5, 97.5]) + + return { + 'mean': float(stats.mean()), + 'median': float(np.median(stats)), + 'lo': float(lo), + 'hi': float(hi), + 'p_lt': float((stats < compare_to).mean()), + 'p_gt': float((stats > compare_to).mean()), + 'compare_to': compare_to, + 'n_clusters': n_clusters, + 'n_obs': len(runs) + } + + +# ============================================================================= +# Results Storage +# ============================================================================= + +DEFAULT_BOOTSTRAP_RESULTS_FILE = "bayesian_bootstrapping_results.json" + + +def load_bootstrap_results(filepath: str = DEFAULT_BOOTSTRAP_RESULTS_FILE) -> dict: + """Load existing bootstrap results from file.""" + if os.path.exists(filepath): + with open(filepath, 'r') as f: + return json.load(f) + return {"runs": []} + + +def save_bootstrap_run( + description: str, + results: dict, + metadata: dict | None = None, + filepath: str = DEFAULT_BOOTSTRAP_RESULTS_FILE +) -> str: + """ + Save a bootstrap run to the results file. + + Args: + description: Manual description of what this run tests/analyzes + results: The bootstrapping results dict (from analysis) + metadata: Optional additional metadata (e.g., parameters used) + filepath: Path to the results file + + Returns: + The generated run_id + """ + data = load_bootstrap_results(filepath) + + run_id = str(uuid.uuid4()) + timestamp = datetime.now().isoformat() + + run_entry = { + "run_id": run_id, + "timestamp": timestamp, + "description": description, + "metadata": metadata or {}, + "results": results + } + + data["runs"].append(run_entry) + + with open(filepath, 'w') as f: + json.dump(data, f, indent=2) + + print(f"Saved bootstrap run: {run_id}") + print(f" Description: {description}") + print(f" Timestamp: {timestamp}") + print(f" Total runs in file: {len(data['runs'])}") + + return run_id + + +def get_bootstrap_run( + run_id: str, + filepath: str = DEFAULT_BOOTSTRAP_RESULTS_FILE +) -> dict | None: + """Retrieve a specific bootstrap run by ID.""" + data = load_bootstrap_results(filepath) + for run in data["runs"]: + if run["run_id"] == run_id: + return run + return None + + +def list_bootstrap_runs( + filepath: str = DEFAULT_BOOTSTRAP_RESULTS_FILE +) -> list[dict]: + """List all bootstrap runs (summary only, without full results).""" + data = load_bootstrap_results(filepath) + summaries = [] + for run in data["runs"]: + summaries.append({ + "run_id": run["run_id"], + "timestamp": run["timestamp"], + "description": run["description"], + "metadata": run.get("metadata", {}) + }) + return summaries diff --git a/experiments/kdd 2026/qualitative_analysis/utils/clean_server_errors.py b/experiments/kdd 2026/qualitative_analysis/utils/clean_server_errors.py new file mode 100644 index 0000000..dc3d563 --- /dev/null +++ b/experiments/kdd 2026/qualitative_analysis/utils/clean_server_errors.py @@ -0,0 +1,180 @@ +""" +Clean merged results by removing runs affected by server errors. +""" + +import json +import os +from datetime import datetime +from collections import defaultdict +from tqdm import tqdm +from typing import Optional + +# Import the unified error classifier +import sys +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from unified_error_classifier import classify_response + + +def has_server_error(run: dict) -> bool: + """ + Check if a run contains any server errors. + + Args: + run: Raw run dict from merged results + + Returns: + True if the run has at least one server error, False otherwise + """ + service = run.get('service', '') + trace = run.get('trace', {}) + steps = trace.get('steps', []) if isinstance(trace, dict) else [] + + for step in steps: + observation = step.get('observation', {}) + + # Get stdout from observation + if isinstance(observation, dict): + stdout = observation.get('stdout', '') + else: + stdout = str(observation) if observation else '' + + # Classify the response + try: + classification = classify_response(stdout, service) + if classification.get("error_type") == "server_error": + return True + except ValueError: + # Unknown service - skip + pass + + return False + + +def clean_merged_results( + merged_results_path: str, + output_folder: Optional[str] = None, + output_filename: Optional[str] = None, + verbose: bool = True +) -> tuple[list, str]: + """ + Clean merged results by removing runs with server errors. + + Args: + merged_results_path: Path to the merged results JSON file + output_folder: Folder to save cleaned results. Defaults to same folder as input. + output_filename: Custom output filename. Defaults to 'cleaned_.json' + verbose: Whether to print progress and statistics + + Returns: + Tuple of (cleaned_runs list, output_filepath) + """ + # Load merged results + with open(merged_results_path, 'r') as f: + runs = json.load(f) + + if verbose: + print(f"Loaded {len(runs)} runs from {merged_results_path}") + + # Filter out runs with server errors + cleaned_runs = [] + removed_count = 0 + + for run in tqdm(runs, desc="Checking for server errors", disable=not verbose): + if has_server_error(run): + removed_count += 1 + else: + cleaned_runs.append(run) + + if verbose: + print(f"\nRemoved {removed_count} runs with server errors ({100*removed_count/len(runs):.1f}%)") + print(f"Cleaned runs: {len(cleaned_runs)}") + + # Show breakdown by service + print("\n--- Breakdown by Service ---") + service_counts = defaultdict(lambda: {"original": 0, "cleaned": 0}) + + for run in runs: + svc = run.get("service", "unknown") + service_counts[svc]["original"] += 1 + + for run in cleaned_runs: + svc = run.get("service", "unknown") + service_counts[svc]["cleaned"] += 1 + + for svc, counts in sorted(service_counts.items()): + removed = counts["original"] - counts["cleaned"] + pct_removed = 100 * removed / counts["original"] if counts["original"] > 0 else 0 + print(f" {svc.upper()}: {counts['original']} -> {counts['cleaned']} (removed {removed}, {pct_removed:.1f}%)") + + # Determine output path + if output_folder is None: + output_folder = os.path.dirname(merged_results_path) + + if output_filename is None: + base_name = os.path.basename(merged_results_path) + output_filename = f"cleaned_{base_name}" + + output_filepath = os.path.join(output_folder, output_filename) + + # Save cleaned results + with open(output_filepath, 'w') as f: + json.dump(cleaned_runs, f, indent=2) + + if verbose: + print(f"\nSaved cleaned dataset to: {output_filepath}") + print(f"Original size: {len(json.dumps(runs)) / 1024 / 1024:.2f} MB") + print(f"Cleaned size: {len(json.dumps(cleaned_runs)) / 1024 / 1024:.2f} MB") + + return cleaned_runs, output_filepath + + +def get_or_create_cleaned_results( + merged_results_path: str, + output_folder: Optional[str] = None, + output_filename: Optional[str] = None, + force_recreate: bool = False +) -> tuple[list, str]: + """ + Get cleaned results from cache or create them if they don't exist. + + Args: + merged_results_path: Path to the merged results JSON file + output_folder: Folder to save/load cleaned results + output_filename: Custom output filename + force_recreate: If True, recreate even if cached file exists + + Returns: + Tuple of (cleaned_runs list, output_filepath) + """ + # Determine expected output path + if output_folder is None: + output_folder = os.path.dirname(merged_results_path) + + if output_filename is None: + base_name = os.path.basename(merged_results_path) + output_filename = f"cleaned_{base_name}" + + output_filepath = os.path.join(output_folder, output_filename) + + # Check if cached file exists + if not force_recreate and os.path.exists(output_filepath): + print(f"Loading existing cleaned results from: {output_filepath}") + with open(output_filepath, 'r') as f: + cleaned_runs = json.load(f) + print(f"Loaded {len(cleaned_runs)} cleaned runs") + return cleaned_runs, output_filepath + + # Create cleaned results + return clean_merged_results( + merged_results_path=merged_results_path, + output_folder=output_folder, + output_filename=output_filename + ) + + +if __name__ == "__main__": + # Example usage + MERGED_RESULTS_FILE = "merged_results_20260204_221118.json" + + cleaned_runs, output_path = get_or_create_cleaned_results(MERGED_RESULTS_FILE) + print(f"\nDone! {len(cleaned_runs)} runs saved to {output_path}") diff --git a/experiments/kdd 2026/qualitative_analysis/utils/create_tests_metadata.py b/experiments/kdd 2026/qualitative_analysis/utils/create_tests_metadata.py new file mode 100644 index 0000000..31c8198 --- /dev/null +++ b/experiments/kdd 2026/qualitative_analysis/utils/create_tests_metadata.py @@ -0,0 +1,245 @@ +""" +Create tests metadata from test suites and merged results. + +This module provides a function to create a metadata file that maps runtime_test_ids +to test information, avoiding the need to recompute this mapping repeatedly. +""" + +import json +import os +import glob +from collections import defaultdict +from typing import Dict, List, Optional, Any + + +def load_test_suites(test_suites_folder: str) -> List[Dict[str, Any]]: + """ + Load all test suite JSON files from a folder. + + Args: + test_suites_folder: Path to folder containing test suite JSON files + + Returns: + List of test suite dictionaries + """ + test_suite_files = glob.glob(os.path.join(test_suites_folder, "*.json")) + + test_suites = [] + for filepath in test_suite_files: + with open(filepath, 'r') as f: + test_suite = json.load(f) + test_suites.append(test_suite) + print(f"Loaded: {os.path.basename(filepath)}") + + print(f"\nTotal test suites loaded: {len(test_suites)}") + return test_suites + + +def build_test_lookup(test_suites: List[Dict[str, Any]]) -> Dict[tuple, Dict[str, Any]]: + """ + Build a lookup dictionary from test suites. + + Maps (test_suite_name, test_name, prompt) -> test info + + Args: + test_suites: List of test suite dictionaries + + Returns: + Dictionary mapping test keys to test data + """ + test_lookup = defaultdict(dict) + + for test_suite in test_suites: + test_suite_name = test_suite["name"] + # Normalize "Slack Bench v2 (Combined)" to "Slack Bench v2" + test_suite_name = "Slack Bench v2" if test_suite_name == "Slack Bench v2 (Combined)" else test_suite_name + + for test in test_suite["tests"]: + key = (test_suite_name, test["name"], test["prompt"]) + if key in test_lookup and test_lookup[key]: + print(f"WARNING: Duplicate test '{test['name']}' with prompt '{test['prompt'][:50]}...' from '{test_suite_name}'") + test_lookup[key]["test_suite_name"] = test_suite_name + test_lookup[key]["test_suite_test_id"] = test["id"] + + print(f"Built lookup for {len(test_lookup)} tests") + return test_lookup + + +def create_tests_metadata( + merged_results_path: str, + test_suites: Optional[List[Dict[str, Any]]] = None, + test_suites_folder: Optional[str] = None, + output_folder: str = "tests_metadata", + force: bool = False +) -> Optional[str]: + """ + Create a metadata file mapping runtime_test_ids to test information. + + Args: + merged_results_path: Path to the merged_results JSON file + test_suites: List of test suite dictionaries (optional if test_suites_folder provided) + test_suites_folder: Path to folder containing test suite JSON files + (optional if test_suites provided) + output_folder: Folder to save metadata file (default: "tests_metadata") + force: If True, recreate metadata even if it already exists + + Returns: + Path to the created metadata file, or None if already exists and force=False + + Raises: + ValueError: If neither test_suites nor test_suites_folder is provided + """ + # Determine output filename based on input filename + input_filename = os.path.basename(merged_results_path) + base_name = input_filename.rsplit('.json', 1)[0] + output_filename = f"{base_name}_tests_metadata.json" + + # Create output folder if needed + os.makedirs(output_folder, exist_ok=True) + output_path = os.path.join(output_folder, output_filename) + + # Check if metadata already exists + if os.path.exists(output_path) and not force: + print(f"Tests metadata already exists: {output_path}") + print("Use force=True to regenerate.") + return None + + # Load test suites if not provided + if test_suites is None: + if test_suites_folder is None: + raise ValueError("Either test_suites or test_suites_folder must be provided") + test_suites = load_test_suites(test_suites_folder) + + # Build test lookup + test_lookup = build_test_lookup(test_suites) + + # Load merged results + print(f"\nLoading merged results from: {merged_results_path}") + with open(merged_results_path, 'r') as f: + runs = json.load(f) + print(f"Loaded {len(runs)} runs") + + # Create metadata mapping (runtime_test_id -> test info) + metadata = {} + missing_count = 0 + + for run in runs: + runtime_test_id = run.get("test_id") + if not runtime_test_id: + continue + + # Skip if already processed + if runtime_test_id in metadata: + continue + + test_suite_name = run.get("test_suite_name", "") + # Normalize test suite name + test_suite_name = "Slack Bench v2" if test_suite_name == "Slack Bench v2 (Combined)" else test_suite_name + + test_name = run.get("test_name", "") + prompt = run.get("prompt", "") + + # Look up test info + key = (test_suite_name, test_name, prompt) + test_info = test_lookup.get(key, {}) + + if not test_info: + missing_count += 1 + if missing_count <= 5: + print(f"WARNING: No test info found for test {runtime_test_id}: {test_suite_name} / {test_name[:30]}...") + + metadata[runtime_test_id] = { + "test_suite_name": test_info.get("test_suite_name", test_suite_name), + "test_suite_test_id": test_info.get("test_suite_test_id") + } + + if missing_count > 5: + print(f"... and {missing_count - 5} more tests with missing test info") + + # Save metadata + with open(output_path, 'w') as f: + json.dump(metadata, f, indent=2) + + print(f"\nSaved metadata for {len(metadata)} tests to: {output_path}") + print(f"File size: {os.path.getsize(output_path) / 1024:.1f} KB") + + return output_path + + +def load_tests_metadata(merged_results_path: str, output_folder: str = "tests_metadata") -> Optional[Dict[str, Dict]]: + """ + Load existing tests metadata for a merged_results file. + + Args: + merged_results_path: Path to the merged_results JSON file + output_folder: Folder where metadata files are stored + + Returns: + Metadata dictionary or None if not found + """ + input_filename = os.path.basename(merged_results_path) + base_name = input_filename.rsplit('.json', 1)[0] + output_filename = f"{base_name}_tests_metadata.json" + metadata_path = os.path.join(output_folder, output_filename) + + if not os.path.exists(metadata_path): + return None + + with open(metadata_path, 'r') as f: + return json.load(f) + + +def get_or_create_tests_metadata( + merged_results_path: str, + test_suites_folder: str = "test_suites", + output_folder: str = "tests_metadata" +) -> Dict[str, Dict]: + """ + Get existing tests metadata or create it if it doesn't exist. + + This is the main entry point for getting test metadata. + + Args: + merged_results_path: Path to the merged_results JSON file + test_suites_folder: Path to folder containing test suite JSON files + output_folder: Folder to save/load metadata files + + Returns: + Metadata dictionary mapping runtime_test_id to test information + """ + # Try to load existing metadata + metadata = load_tests_metadata(merged_results_path, output_folder) + if metadata is not None: + print(f"Loaded existing tests metadata with {len(metadata)} tests") + return metadata + + # Create new metadata + create_tests_metadata( + merged_results_path=merged_results_path, + test_suites_folder=test_suites_folder, + output_folder=output_folder + ) + + # Load and return the newly created metadata (must exist after create) + result = load_tests_metadata(merged_results_path, output_folder) + assert result is not None, "Metadata file should exist after create_tests_metadata" + return result + + +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser(description="Create tests metadata from merged results") + parser.add_argument("merged_results", help="Path to merged_results JSON file") + parser.add_argument("--test-suites", default="test_suites", help="Path to test suites folder") + parser.add_argument("--output", default="tests_metadata", help="Output folder for metadata") + parser.add_argument("--force", action="store_true", help="Force regeneration even if exists") + + args = parser.parse_args() + + create_tests_metadata( + merged_results_path=args.merged_results, + test_suites_folder=args.test_suites, + output_folder=args.output, + force=args.force + ) diff --git a/experiments/kdd 2026/qualitative_analysis/utils/unified_error_classifier.py b/experiments/kdd 2026/qualitative_analysis/utils/unified_error_classifier.py new file mode 100644 index 0000000..e73c93d --- /dev/null +++ b/experiments/kdd 2026/qualitative_analysis/utils/unified_error_classifier.py @@ -0,0 +1,1384 @@ +""" +Unified Error Classifier for API Responses +Supports: Google Calendar, Box, Slack, Linear + +Usage: + from unified_error_classifier import classify_response + + result = classify_response(stdout, app_name="linear") + # Returns: {"has_error": bool, "error_type": str, "error_code": str|None, "details": str|None} +""" + +import re +import json +from typing import Optional, Dict, Any +from enum import Enum + + +# ============================================================================= +# UNIFIED ERROR TYPES (consistent across all apps) +# ============================================================================= + +class ErrorType(str, Enum): + NO_ERROR = "no_error" + AUTHENTICATION = "authentication" # 401, invalid auth, token issues + PERMISSION = "permission" # 403, forbidden, insufficient access + NOT_FOUND = "not_found" # 404, resource doesn't exist + BAD_REQUEST = "bad_request" # 400, invalid input, malformed + RATE_LIMIT = "rate_limit" # 429, quota exceeded, too many requests + CONFLICT = "conflict" # 409, duplicate, already exists + GONE = "gone" # 410, deleted, no longer available + SERVER_ERROR = "server_error" # 500+, internal error, backend failure + TEMPORARY = "temporary" # Transient errors, retry later + UNKNOWN = "unknown" # Error detected but unclassified + + +# ============================================================================= +# SHARED UTILITIES +# ============================================================================= + +def classify_http_code(code: int) -> ErrorType: + """Classify error type based on HTTP status code.""" + if code == 400: + return ErrorType.BAD_REQUEST + elif code == 401: + return ErrorType.AUTHENTICATION + elif code == 403: + return ErrorType.PERMISSION + elif code == 404: + return ErrorType.NOT_FOUND + elif code == 405: + return ErrorType.BAD_REQUEST + elif code == 409: + return ErrorType.CONFLICT + elif code == 410: + return ErrorType.GONE + elif code == 412: + return ErrorType.CONFLICT # Precondition Failed (ETag mismatch) + elif code == 429: + return ErrorType.RATE_LIMIT + elif 500 <= code < 600: + return ErrorType.SERVER_ERROR + elif 400 <= code < 500: + return ErrorType.BAD_REQUEST + else: + return ErrorType.UNKNOWN + + +def check_raw_http_response(response: str) -> Optional[Dict[str, Any]]: + """Check for raw HTTP responses like 'HTTP/1.1 404 Not Found' or 'HTTP/1.1 302 Found'. + + Returns: + - Error result for 4xx/5xx status codes + - no_error_result for 2xx/3xx status codes (success/redirect) + - None if not an HTTP response + """ + # Check if response starts with HTTP status line + match = re.match(r'^HTTP/[\d.]+\s+(\d{3})\s+(.*)$', response.strip(), re.MULTILINE) + if match: + code = int(match.group(1)) + if code >= 400: + status_text = match.group(2).strip() + return error_result(classify_http_code(code), str(code), f"HTTP {code} {status_text}") + else: + # 2xx success or 3xx redirect - not an error + return no_error_result() + return None + + +def strip_ansi_codes(text: str) -> str: + """Strip ANSI escape codes from text.""" + import re + return re.sub(r'\x1b\[[0-9;]*m', '', text) + + +def try_parse_json_with_noise(response: str) -> Optional[dict]: + """Try to parse JSON that may have prefix or trailing non-JSON text, or ANSI codes.""" + # Strip ANSI color codes if present + if '\x1b[' in response: + response = strip_ansi_codes(response) + + # First try normal parse + try: + return json.loads(response) + except json.JSONDecodeError: + pass + + # Try parsing just the first line (common pattern: JSON + newline + status) + first_line = response.split('\n')[0].strip() + if first_line.startswith('{'): + try: + return json.loads(first_line) + except json.JSONDecodeError: + pass + + # Try finding JSON object boundaries (handles trailing text) + if response.startswith('{'): + depth = 0 + for i, char in enumerate(response): + if char == '{': + depth += 1 + elif char == '}': + depth -= 1 + if depth == 0: + try: + return json.loads(response[:i+1]) + except json.JSONDecodeError: + break + + # Try finding JSON with prefix text (e.g., "Testing...\n{...}") + json_start = response.find('{') + if json_start > 0: + json_part = response[json_start:] + # Try parsing from the first { to end + try: + return json.loads(json_part) + except json.JSONDecodeError: + pass + # Try finding the matching closing brace + depth = 0 + for i, char in enumerate(json_part): + if char == '{': + depth += 1 + elif char == '}': + depth -= 1 + if depth == 0: + try: + return json.loads(json_part[:i+1]) + except json.JSONDecodeError: + break + + return None + + +def no_error_result() -> Dict[str, Any]: + return {"has_error": False, "error_type": ErrorType.NO_ERROR.value, "error_code": None, "details": None} + + +def error_result(error_type: ErrorType, error_code: str, details: Optional[str] = None) -> Dict[str, Any]: + return {"has_error": True, "error_type": error_type.value, "error_code": error_code, "details": details} + + +# ============================================================================= +# GOOGLE CALENDAR CLASSIFIER +# ============================================================================= + +def classify_gcal_response(response: str) -> Dict[str, Any]: + """Classify Google Calendar API response.""" + if not response or len(response) < 5: + return no_error_result() + + # Check for raw HTTP error response + http_error = check_raw_http_response(response) + if http_error: + return http_error + + # Check for batch response with HTTP errors inside + batch_error = _check_gcal_batch_errors(response) + if batch_error: + return batch_error + + # Check for Gmail/Google HTML error page + match = re.search(r'var\s+gmail_server_error\s*=\s*(\d+)', response) + if match: + code = match.group(1) + http_match = re.search(r'Temporary\s+Error\s*\((\d{3})\)', response) + http_code = int(http_match.group(1)) if http_match else None + error_type = classify_http_code(http_code) if http_code else ErrorType.TEMPORARY + return error_result(error_type, code, f"Gmail server error {code}" + (f" (HTTP {http_code})" if http_code else "")) + + # Check for "Temporary Error (XXX)" pattern + match = re.search(r'Temporary\s+Error\s*\((\d{3})\)', response) + if match: + http_code = int(match.group(1)) + return error_result(classify_http_code(http_code), str(http_code), f"Temporary Error (HTTP {http_code})") + + # Check for Google API JSON error (with support for trailing text) + data = try_parse_json_with_noise(response) + if not data or not isinstance(data, dict): + return no_error_result() + + # Handle Slack-style format: {"ok": false, "error": "..."} + if data.get("ok") is False: + error_msg = data.get("error", "unknown_error") + error_type = _classify_gcal_by_message(str(error_msg)) + return error_result(error_type, str(error_msg), None) + + error_obj = data.get("error") + if not error_obj: + return no_error_result() + + # Handle string error: {"error": "message"} + if isinstance(error_obj, str): + error_type = _classify_gcal_by_message(error_obj) + return error_result(error_type, "error", error_obj) + + if not isinstance(error_obj, dict): + return no_error_result() + + http_code = error_obj.get("code") + message = error_obj.get("message", "") + + # Extract reason + reason = None + errors_list = error_obj.get("errors", []) + if isinstance(errors_list, list) and errors_list: + first_error = errors_list[0] + if isinstance(first_error, dict): + reason = first_error.get("reason") + + # Determine error type: try reason first, then message, then HTTP code + if reason: + error_type = _classify_google_reason(reason) + # If reason is unknown, try message-based classification + if error_type == ErrorType.UNKNOWN and message: + error_type = _classify_gcal_by_message(message) + elif message: + # No reason code - try message first, then HTTP code + error_type = _classify_gcal_by_message(message) + if error_type == ErrorType.UNKNOWN and isinstance(http_code, int) and http_code >= 400: + error_type = classify_http_code(http_code) + elif isinstance(http_code, int) and http_code >= 400: + error_type = classify_http_code(http_code) + else: + return no_error_result() + + return error_result(error_type, reason or str(http_code) if http_code else "error", message) + + +def _check_gcal_batch_errors(response: str) -> Optional[Dict[str, Any]]: + """Check for batch response containing HTTP errors.""" + # Look for HTTP error status lines in batch responses + # Pattern: HTTP/1.1 4xx or HTTP/1.1 5xx within the response + if '--batch' not in response and 'Content-Type: application/http' not in response: + return None + + # Find all HTTP status lines in the batch + http_matches = re.findall(r'HTTP/[\d.]+\s+(\d{3})\s+([^\r\n]*)', response) + for code_str, status_text in http_matches: + code = int(code_str) + if code >= 400: + return error_result(classify_http_code(code), str(code), f"Batch HTTP {code} {status_text}") + + return None + + +def _classify_google_reason(reason: str) -> ErrorType: + """Classify Google API reason code.""" + reason_lower = reason.lower() + + # Authentication + if reason_lower in ("autherror", "invalidcredentials", "unauthorized"): + return ErrorType.AUTHENTICATION + if "auth" in reason_lower and "error" in reason_lower: + return ErrorType.AUTHENTICATION + + # Permission + if reason_lower in ("forbidden", "insufficientpermissions", "accessnotconfigured"): + return ErrorType.PERMISSION + if "permission" in reason_lower or "forbidden" in reason_lower: + return ErrorType.PERMISSION + + # Gone/deleted + if reason_lower in ("gone", "deleted", "moved", "resourcedeleted"): + return ErrorType.GONE + if "deleted" in reason_lower or "removed" in reason_lower: + return ErrorType.GONE + + # Not found + if "notfound" in reason_lower or "not_found" in reason_lower: + return ErrorType.NOT_FOUND + + # Bad request + if reason_lower in ("invalid", "invalidvalue", "required", "badrequest") or "invalid" in reason_lower: + return ErrorType.BAD_REQUEST + + # Rate limit + if "ratelimit" in reason_lower or "quota" in reason_lower: + return ErrorType.RATE_LIMIT + + # Conflict + if reason_lower in ("duplicate", "conflict", "conditionnotmet", "preconditionfailed") or "already" in reason_lower: + return ErrorType.CONFLICT + if "etag" in reason_lower or "mismatch" in reason_lower: + return ErrorType.CONFLICT + + # Server error + if reason_lower in ("internalerror", "backenderror", "serviceunavailable"): + return ErrorType.SERVER_ERROR + if "internal" in reason_lower or "server" in reason_lower or "backend" in reason_lower: + return ErrorType.SERVER_ERROR + + return ErrorType.UNKNOWN + + +def _classify_gcal_by_message(message: str) -> ErrorType: + """Classify Google Calendar error by message content.""" + msg_lower = message.lower() + + # Server/infrastructure errors (environment deleted = server-side issue) + if "internal" in msg_lower or "server error" in msg_lower or "backend" in msg_lower: + return ErrorType.SERVER_ERROR + if "environment" in msg_lower and "deleted" in msg_lower: + return ErrorType.SERVER_ERROR + if "unavailable" in msg_lower: + return ErrorType.TEMPORARY + + # Gone/deleted (user-deleted resources, not infrastructure) + if "deleted" in msg_lower or "removed" in msg_lower: + return ErrorType.GONE + if "no longer" in msg_lower: + return ErrorType.GONE + + # Not found + if "not found" in msg_lower or "does not exist" in msg_lower: + return ErrorType.NOT_FOUND + + # Permission + if "forbidden" in msg_lower or "permission" in msg_lower or "access denied" in msg_lower: + return ErrorType.PERMISSION + + # Authentication + if "unauthorized" in msg_lower or "authentication" in msg_lower: + return ErrorType.AUTHENTICATION + + # Bad request + if "invalid" in msg_lower or "bad request" in msg_lower: + return ErrorType.BAD_REQUEST + if "unsupported" in msg_lower or "unknown method" in msg_lower: + return ErrorType.BAD_REQUEST + if "no" in msg_lower and "passed" in msg_lower: + return ErrorType.BAD_REQUEST + if "no" in msg_lower and "specified" in msg_lower: + return ErrorType.BAD_REQUEST + if "not_supplied" in msg_lower or "not supplied" in msg_lower: + return ErrorType.BAD_REQUEST + if "not provided" in msg_lower or "required" in msg_lower: + return ErrorType.BAD_REQUEST + + # Conflict + if "already exists" in msg_lower or "duplicate" in msg_lower: + return ErrorType.CONFLICT + + # Rate limit + if "rate" in msg_lower and "limit" in msg_lower: + return ErrorType.RATE_LIMIT + if "quota" in msg_lower: + return ErrorType.RATE_LIMIT + + return ErrorType.UNKNOWN + + +# ============================================================================= +# BOX CLASSIFIER +# ============================================================================= + +BOX_ERROR_CODES = { + # 400 Bad Request + "bad_digest": ErrorType.BAD_REQUEST, + "bad_request": ErrorType.BAD_REQUEST, + "cannot_make_collaborated_subfolder_private": ErrorType.BAD_REQUEST, + "collaborations_not_available_on_root_folder": ErrorType.BAD_REQUEST, + "cyclical_folder_structure": ErrorType.BAD_REQUEST, + "folder_not_empty": ErrorType.BAD_REQUEST, + "invalid_collaboration_item": ErrorType.BAD_REQUEST, + "invalid_grant": ErrorType.AUTHENTICATION, + "invalid_limit": ErrorType.BAD_REQUEST, + "invalid_offset": ErrorType.BAD_REQUEST, + "invalid_request_parameters": ErrorType.BAD_REQUEST, + "invalid_status": ErrorType.BAD_REQUEST, + "invalid_upload_session_id": ErrorType.BAD_REQUEST, + "item_name_invalid": ErrorType.BAD_REQUEST, + "item_name_too_long": ErrorType.BAD_REQUEST, + "metadata_after_file_contents": ErrorType.BAD_REQUEST, + "password_reset_required": ErrorType.AUTHENTICATION, + "requested_page_out_of_range": ErrorType.BAD_REQUEST, + "requested_preview_unavailable": ErrorType.BAD_REQUEST, + "sync_item_move_failure": ErrorType.BAD_REQUEST, + "task_assignee_not_allowed": ErrorType.PERMISSION, + "terms_of_service_required": ErrorType.BAD_REQUEST, + "user_already_collaborator": ErrorType.CONFLICT, + # 401 Unauthorized + "unauthorized": ErrorType.AUTHENTICATION, + # 403 Forbidden + "access_denied_insufficient_permissions": ErrorType.PERMISSION, + "insufficient_scope": ErrorType.PERMISSION, + "access_denied_item_locked": ErrorType.PERMISSION, + "access_from_location_blocked": ErrorType.PERMISSION, + "file_size_limit_exceeded": ErrorType.PERMISSION, + "forbidden": ErrorType.PERMISSION, + "forbidden_by_policy": ErrorType.PERMISSION, + "incorrect_shared_item_password": ErrorType.AUTHENTICATION, + "storage_limit_exceeded": ErrorType.PERMISSION, + "user_email_confirmation_required": ErrorType.AUTHENTICATION, + "cors_origin_not_whitelisted": ErrorType.PERMISSION, + # 404 Not Found + "not_found": ErrorType.NOT_FOUND, + "not_trashed": ErrorType.NOT_FOUND, + "preview_cannot_be_generated": ErrorType.NOT_FOUND, + "trashed": ErrorType.GONE, + # 405 Method Not Allowed + "method_not_allowed": ErrorType.BAD_REQUEST, + # 409 Conflict + "conflict": ErrorType.CONFLICT, + "item_name_in_use": ErrorType.CONFLICT, + "name_temporarily_reserved": ErrorType.CONFLICT, + "operation_blocked_temporary": ErrorType.CONFLICT, + "recent_similar_comment": ErrorType.CONFLICT, + "user_login_already_used": ErrorType.CONFLICT, + # 410 Gone + "session_expired": ErrorType.GONE, + "upload_failed": ErrorType.GONE, + # 411-415 + "length_required": ErrorType.BAD_REQUEST, + "precondition_failed": ErrorType.CONFLICT, + "sync_state_precondition_failed": ErrorType.CONFLICT, + "request_entity_too_large": ErrorType.BAD_REQUEST, + "unsupported_media_type": ErrorType.BAD_REQUEST, + # 429 Rate Limit + "rate_limit_exceeded": ErrorType.RATE_LIMIT, + # 500+ + "internal_server_error": ErrorType.SERVER_ERROR, + "bad_gateway": ErrorType.SERVER_ERROR, + "unavailable": ErrorType.SERVER_ERROR, +} + + +def classify_box_response(response: str) -> Dict[str, Any]: + """Classify Box API response.""" + if not response or len(response) < 5: + return no_error_result() + + # Check for raw HTTP error response + http_error = check_raw_http_response(response) + if http_error: + return http_error + + # Try JSON error format (with support for trailing text/concatenated JSON) + data = try_parse_json_with_noise(response) + if data is None: + # Check plain text/HTML errors and classify by content + response_lower = response.lower() + + # Skip client-side JSON parsing errors (not API errors) + # These occur when the API returns empty response (normal for DELETE) and script tries to parse + if "expecting value" in response_lower and "line 1 column 1" in response_lower: + return no_error_result() + if "jsondecodeerror" in response_lower: + return no_error_result() + if "error parsing response" in response_lower: + return no_error_result() + + # Skip clear success messages + if "✓" in response and ("success" in response_lower or "valid" in response_lower or "completed" in response_lower): + return no_error_result() + + # Skip Git LFS pointer files (valid file content, not errors) + # Format: "version https://git-lfs.github.com/spec/v1\noid sha256:...\nsize ..." + if "git-lfs.github.com/spec" in response_lower or ( + response_lower.startswith("version ") and "oid sha256:" in response_lower + ): + return no_error_result() + + # Skip markdown/document content (file content, not API errors) + # Markdown headers indicate this is document content + stripped = response.strip() + if stripped.startswith("# ") or stripped.startswith("## ") or stripped.startswith("### "): + return no_error_result() + + # Skip text documents with separator lines (===, ---, common log/report formats) + lines = stripped.split('\n') + if len(lines) >= 2: + second_line = lines[1].strip() if len(lines) > 1 else "" + # Check for underline-style headers (Title\n====== or Title\n------) + if second_line and (all(c == '=' for c in second_line) or all(c == '-' for c in second_line)): + if len(second_line) >= 3: # At least 3 chars to be a separator + return no_error_result() + + # Check for HTTP error codes in script output (e.g., "HTTP_CODE:401", "HTTP Status: 401", "HTTP Code: 409") + http_code_match = re.search(r'(?:HTTP[_\s]?CODE|HTTP[_\s]?Status)[:\s]*(\d{3})', response, re.IGNORECASE) + if http_code_match: + code = int(http_code_match.group(1)) + if code >= 400: + return error_result(classify_http_code(code), str(code), f"HTTP {code} in script output") + + # Detect curl verbose output (-v flag) and extract actual HTTP status + # Curl verbose format: "< HTTP/1.1 302 Found" for response status line + if "* Host" in response or "* Trying" in response or "Note: Unnecessary use of -X" in response: + # This is curl verbose output - look for the actual HTTP response status + curl_status_match = re.search(r'< HTTP/[\d.]+\s+(\d{3})\s+', response) + if curl_status_match: + code = int(curl_status_match.group(1)) + if code >= 400: + return error_result(classify_http_code(code), str(code), f"HTTP {code} in curl output") + else: + # 2xx/3xx = success/redirect + return no_error_result() + # If we can't find HTTP status in curl output, don't treat as error + return no_error_result() + + # Skip script/log output that isn't an API error + # These contain execution logs, not API error responses + if "curl " in response_lower or "command:" in response_lower: + # Check if it's actually reporting success + if "return code: 0" in response_lower or "✓" in response or "success" in response_lower: + return no_error_result() + + # Skip if it looks like shell script output (starts with === or ---) + if response.strip().startswith("===") or response.strip().startswith("---"): + if "error" not in response_lower[:100]: # Only skip if no error in first 100 chars + return no_error_result() + + # Gone/removed resources (common in Box HTML error pages) + if "has been removed" in response_lower or "been deleted" in response_lower: + return error_result(ErrorType.GONE, "RESOURCE_REMOVED", f"Resource removed: {response[:200]}") + if "no longer available" in response_lower or "no longer exists" in response_lower: + return error_result(ErrorType.GONE, "RESOURCE_GONE", f"Resource gone: {response[:200]}") + + # Not found + if "not found" in response_lower or "does not exist" in response_lower: + return error_result(ErrorType.NOT_FOUND, "NOT_FOUND", f"Not found: {response[:200]}") + + # Permission/auth + if "forbidden" in response_lower or "access denied" in response_lower: + return error_result(ErrorType.PERMISSION, "FORBIDDEN", f"Permission denied: {response[:200]}") + if "unauthorized" in response_lower or "authentication" in response_lower: + return error_result(ErrorType.AUTHENTICATION, "UNAUTHORIZED", f"Auth error: {response[:200]}") + + # Server errors - check for explicit error messages, not just status codes + # (status codes might appear in URLs like /files/9979104500/) + if "internal server error" in response_lower: + return error_result(ErrorType.SERVER_ERROR, "SERVER_ERROR", f"Server error: {response[:200]}") + if "service unavailable" in response_lower: + return error_result(ErrorType.SERVER_ERROR, "SERVICE_UNAVAILABLE", f"Service unavailable: {response[:200]}") + + # Check for simple "Error: XXX" pattern where XXX is HTTP status code + simple_error_match = re.match(r'^Error:\s*(\d{3})\s*$', response.strip(), re.IGNORECASE) + if simple_error_match: + code = int(simple_error_match.group(1)) + return error_result(classify_http_code(code), str(code), f"Error {code}") + + # Generic error detection + if "error" in response_lower: + return error_result(ErrorType.UNKNOWN, "PLAIN_TEXT_ERROR", f"Plain text error: {response[:200]}") + + return no_error_result() + + if not isinstance(data, dict): + return no_error_result() + + # Check for batch results format: {"results":[{"status":"error",...}]} + results = data.get("results") + if isinstance(results, list) and results: + for result in results: + if isinstance(result, dict) and result.get("status") == "error": + message = result.get("message", "") + # Try to extract error type from message + msg_lower = message.lower() + if "not found" in msg_lower: + return error_result(ErrorType.NOT_FOUND, "batch_not_found", message) + elif "unauthorized" in msg_lower or "authentication" in msg_lower: + return error_result(ErrorType.AUTHENTICATION, "batch_auth_error", message) + elif "forbidden" in msg_lower or "permission" in msg_lower: + return error_result(ErrorType.PERMISSION, "batch_permission_error", message) + elif "deleted" in msg_lower or "trashed" in msg_lower: + return error_result(ErrorType.GONE, "batch_gone", message) + elif "internal" in msg_lower or "server error" in msg_lower: + return error_result(ErrorType.SERVER_ERROR, "batch_server_error", message) + elif "invalid" in msg_lower or "bad request" in msg_lower: + return error_result(ErrorType.BAD_REQUEST, "batch_bad_request", message) + elif "conflict" in msg_lower or "already exists" in msg_lower or "already in" in msg_lower: + return error_result(ErrorType.CONFLICT, "batch_conflict", message) + else: + return error_result(ErrorType.UNKNOWN, "batch_error", message) + + # Box error format: {"type": "error", "status": 404, "code": "not_found", "message": "..."} + if data.get("type") == "error": + code = data.get("code", "").lower() + status = data.get("status") + message = data.get("message", "") + + if code in BOX_ERROR_CODES: + error_type = BOX_ERROR_CODES[code] + elif isinstance(status, int) and status >= 400: + error_type = classify_http_code(status) + else: + error_type = ErrorType.UNKNOWN + + return error_result(error_type, code or str(status), message) + + # Alternative format: {"error": "...", "error_description": "..."} + error_field = data.get("error") + if error_field: + code = str(error_field).lower().replace(" ", "_") + message = data.get("error_description", data.get("message", "")) + + # Combine error and message for pattern matching + full_text = f"{error_field} {message}".lower() + + if code in BOX_ERROR_CODES: + error_type = BOX_ERROR_CODES[code] + else: + error_type = _classify_box_error_by_message(full_text) + + return error_result(error_type, code, message if message else str(error_field)) + + return no_error_result() + + +def _classify_box_error_by_message(message: str) -> ErrorType: + """Classify Box error by message content when no explicit code.""" + msg_lower = message.lower() + + # Server/infrastructure errors (environment deleted = server-side issue) + if "internal" in msg_lower or "server error" in msg_lower: + return ErrorType.SERVER_ERROR + if "environment" in msg_lower and "deleted" in msg_lower: + return ErrorType.SERVER_ERROR + if "unavailable" in msg_lower or "temporarily" in msg_lower: + return ErrorType.TEMPORARY + + # Gone/deleted (user-deleted resources, not infrastructure) + if "deleted" in msg_lower or "trashed" in msg_lower or "removed" in msg_lower: + return ErrorType.GONE + if "no longer" in msg_lower or "expired" in msg_lower: + return ErrorType.GONE + + # Not found + if "not found" in msg_lower or "does not exist" in msg_lower: + return ErrorType.NOT_FOUND + if "no such" in msg_lower or "doesn't exist" in msg_lower: + return ErrorType.NOT_FOUND + + # Permission + if "forbidden" in msg_lower or "permission" in msg_lower or "access denied" in msg_lower: + return ErrorType.PERMISSION + if "not allowed" in msg_lower: + return ErrorType.PERMISSION + + # Authentication + if "unauthorized" in msg_lower or "authentication" in msg_lower: + return ErrorType.AUTHENTICATION + if "invalid token" in msg_lower or "token expired" in msg_lower: + return ErrorType.AUTHENTICATION + + # Bad request + if "invalid" in msg_lower or "bad request" in msg_lower: + return ErrorType.BAD_REQUEST + if "malformed" in msg_lower or "missing" in msg_lower: + return ErrorType.BAD_REQUEST + if "unsupported" in msg_lower or "unknown method" in msg_lower: + return ErrorType.BAD_REQUEST + if "no" in msg_lower and "passed" in msg_lower: + return ErrorType.BAD_REQUEST + if "no" in msg_lower and "specified" in msg_lower: + return ErrorType.BAD_REQUEST + if "not_supplied" in msg_lower or "not supplied" in msg_lower: + return ErrorType.BAD_REQUEST + if "not provided" in msg_lower or "required" in msg_lower: + return ErrorType.BAD_REQUEST + + # Conflict + if "already exists" in msg_lower or "duplicate" in msg_lower: + return ErrorType.CONFLICT + if "conflict" in msg_lower: + return ErrorType.CONFLICT + + # Rate limit + if "rate" in msg_lower and "limit" in msg_lower: + return ErrorType.RATE_LIMIT + if "too many" in msg_lower: + return ErrorType.RATE_LIMIT + + return ErrorType.UNKNOWN + + +# ============================================================================= +# SLACK CLASSIFIER +# ============================================================================= + +SLACK_ERROR_CODES = { + # Authentication + "invalid_auth": ErrorType.AUTHENTICATION, + "not_authed": ErrorType.AUTHENTICATION, + "account_inactive": ErrorType.AUTHENTICATION, + "token_revoked": ErrorType.AUTHENTICATION, + "token_expired": ErrorType.AUTHENTICATION, + "not_allowed_token_type": ErrorType.AUTHENTICATION, + "org_login_required": ErrorType.AUTHENTICATION, + "invalid_token": ErrorType.AUTHENTICATION, + "team_access_not_granted": ErrorType.AUTHENTICATION, + # Permission + "no_permission": ErrorType.PERMISSION, + "missing_scope": ErrorType.PERMISSION, + "ekm_access_denied": ErrorType.PERMISSION, + "enterprise_is_restricted": ErrorType.PERMISSION, + "not_in_channel": ErrorType.PERMISSION, + "is_archived": ErrorType.PERMISSION, + "channel_is_archived": ErrorType.PERMISSION, + "restricted_action": ErrorType.PERMISSION, + "restricted_action_read_only_channel": ErrorType.PERMISSION, + "restricted_action_thread_only_channel": ErrorType.PERMISSION, + "restricted_action_non_threadable_channel": ErrorType.PERMISSION, + "not_allowed": ErrorType.PERMISSION, + "posting_to_general_channel_denied": ErrorType.PERMISSION, + "as_user_not_supported": ErrorType.PERMISSION, + "cannot_dm_bot": ErrorType.PERMISSION, + "cant_update_message": ErrorType.PERMISSION, + "cant_delete_message": ErrorType.PERMISSION, + "cant_invite": ErrorType.PERMISSION, + "cant_kick_from_general": ErrorType.PERMISSION, + "cant_kick_from_last_channel": ErrorType.PERMISSION, + "cant_archive_general": ErrorType.PERMISSION, + "cant_leave_general": ErrorType.PERMISSION, + "last_member": ErrorType.PERMISSION, + "access_denied": ErrorType.PERMISSION, + "user_is_restricted": ErrorType.PERMISSION, + "user_is_ultra_restricted": ErrorType.PERMISSION, + "user_is_bot": ErrorType.PERMISSION, + "channel_not_allowed": ErrorType.PERMISSION, + "compliance_exports_prevent_deletion": ErrorType.PERMISSION, + # Not Found + "channel_not_found": ErrorType.NOT_FOUND, + "user_not_found": ErrorType.NOT_FOUND, + "users_not_found": ErrorType.NOT_FOUND, + "no_user": ErrorType.NOT_FOUND, + "message_not_found": ErrorType.NOT_FOUND, + "file_not_found": ErrorType.NOT_FOUND, + "team_not_found": ErrorType.NOT_FOUND, + "thread_not_found": ErrorType.NOT_FOUND, + "app_not_found": ErrorType.NOT_FOUND, + "bot_not_found": ErrorType.NOT_FOUND, + "view_not_found": ErrorType.NOT_FOUND, + "trigger_not_found": ErrorType.NOT_FOUND, + "workflow_not_found": ErrorType.NOT_FOUND, + "no_reaction": ErrorType.NOT_FOUND, + "emoji_not_found": ErrorType.NOT_FOUND, + "pin_not_found": ErrorType.NOT_FOUND, + "bookmark_not_found": ErrorType.NOT_FOUND, + "reminder_not_found": ErrorType.NOT_FOUND, + "conversation_not_found": ErrorType.NOT_FOUND, + # Bad Request + "invalid_arguments": ErrorType.BAD_REQUEST, + "invalid_arg_name": ErrorType.BAD_REQUEST, + "invalid_array_arg": ErrorType.BAD_REQUEST, + "invalid_charset": ErrorType.BAD_REQUEST, + "invalid_form_data": ErrorType.BAD_REQUEST, + "invalid_post_type": ErrorType.BAD_REQUEST, + "invalid_json": ErrorType.BAD_REQUEST, + "invalid_name": ErrorType.BAD_REQUEST, + "invalid_name_specials": ErrorType.BAD_REQUEST, + "invalid_name_maxlength": ErrorType.BAD_REQUEST, + "invalid_name_punctuation": ErrorType.BAD_REQUEST, + "invalid_name_required": ErrorType.BAD_REQUEST, + "invalid_cursor": ErrorType.BAD_REQUEST, + "invalid_limit": ErrorType.BAD_REQUEST, + "invalid_ts_latest": ErrorType.BAD_REQUEST, + "invalid_ts_oldest": ErrorType.BAD_REQUEST, + "invalid_timestamp": ErrorType.BAD_REQUEST, + "invalid_blocks": ErrorType.BAD_REQUEST, + "invalid_blocks_format": ErrorType.BAD_REQUEST, + "invalid_attachments": ErrorType.BAD_REQUEST, + "invalid_metadata_format": ErrorType.BAD_REQUEST, + "invalid_metadata_schema": ErrorType.BAD_REQUEST, + "too_many_attachments": ErrorType.BAD_REQUEST, + "too_many_blocks": ErrorType.BAD_REQUEST, + "too_many_users": ErrorType.BAD_REQUEST, + "msg_too_long": ErrorType.BAD_REQUEST, + "no_text": ErrorType.BAD_REQUEST, + "missing_argument": ErrorType.BAD_REQUEST, + "missing_channel": ErrorType.BAD_REQUEST, + "missing_ts": ErrorType.BAD_REQUEST, + "missing_user": ErrorType.BAD_REQUEST, + "missing_message": ErrorType.BAD_REQUEST, + "bad_timestamp": ErrorType.BAD_REQUEST, + "method_not_supported_for_channel_type": ErrorType.BAD_REQUEST, + "request_timeout": ErrorType.BAD_REQUEST, + "unsupported_endpoint": ErrorType.BAD_REQUEST, + "unknown_method": ErrorType.BAD_REQUEST, + # Conflict + "name_taken": ErrorType.CONFLICT, + "already_reacted": ErrorType.CONFLICT, + "already_pinned": ErrorType.CONFLICT, + "already_starred": ErrorType.CONFLICT, + "already_in_channel": ErrorType.CONFLICT, + "already_archived": ErrorType.CONFLICT, + "user_already_team_member": ErrorType.CONFLICT, + "channel_already_exists": ErrorType.CONFLICT, + "message_limit_exceeded": ErrorType.CONFLICT, + "duplicate_channel_not_allowed": ErrorType.CONFLICT, + "duplicate_message": ErrorType.CONFLICT, + "edit_window_closed": ErrorType.CONFLICT, + # Rate Limit + "ratelimited": ErrorType.RATE_LIMIT, + "rate_limited": ErrorType.RATE_LIMIT, + "too_many_requests": ErrorType.RATE_LIMIT, + # Server Error + "internal_error": ErrorType.SERVER_ERROR, + "fatal_error": ErrorType.SERVER_ERROR, + "service_unavailable": ErrorType.SERVER_ERROR, + # Temporary + "temporarily_disabled": ErrorType.TEMPORARY, + "team_added_to_org": ErrorType.TEMPORARY, +} + + +def classify_slack_response(response: str) -> Dict[str, Any]: + """Classify Slack API response.""" + if not response or len(response) < 5: + return no_error_result() + + # Check for raw HTTP error response + http_error = check_raw_http_response(response) + if http_error: + return http_error + + # Strip ANSI color codes if present + if '\x1b[' in response: + response = strip_ansi_codes(response) + + # Try JSON + try: + data = json.loads(response) + except (json.JSONDecodeError, TypeError): + return no_error_result() + + if not isinstance(data, dict): + return no_error_result() + + # Slack format: {"ok": false, "error": "error_code"} + # Some errors use boolean flags instead: {"ok": false, "not_in_channel": true} + if data.get("ok") is False: + # Handle buggy test data: ok:false but message indicates success + msg = data.get("message", "").lower() + if "deleted" in msg and "error" not in data: + return no_error_result() # "Lunch message deleted" etc. + error_code = data.get("error") + + # Check for boolean error indicators if no explicit error field + if not error_code: + boolean_error_fields = { + "not_in_channel": ("not_in_channel", ErrorType.PERMISSION), + "is_archived": ("channel_is_archived", ErrorType.PERMISSION), + "channel_not_found": ("channel_not_found", ErrorType.NOT_FOUND), + "user_not_found": ("user_not_found", ErrorType.NOT_FOUND), + "already_reacted": ("already_reacted", ErrorType.CONFLICT), + "no_reaction": ("no_reaction", ErrorType.NOT_FOUND), + "cant_update_message": ("cant_update_message", ErrorType.PERMISSION), + "cant_delete_message": ("cant_delete_message", ErrorType.PERMISSION), + } + for field, (code, err_type) in boolean_error_fields.items(): + if data.get(field) is True: + return error_result(err_type, code, None) + error_code = "unknown_error" + + if error_code in SLACK_ERROR_CODES: + error_type = SLACK_ERROR_CODES[error_code] + else: + error_type = _classify_unknown_slack_error(error_code) + + # Get additional details + details = data.get("response_metadata", {}).get("messages", []) + details_str = "; ".join(details) if details else data.get("needed", data.get("provided", None)) + + return error_result(error_type, error_code, details_str) + + return no_error_result() + + +def _classify_unknown_slack_error(error_code: str) -> ErrorType: + """Classify unknown Slack error by pattern.""" + code_lower = error_code.lower() + + # Server/infrastructure errors (environment deleted = server-side issue) + if "internal" in code_lower or "server" in code_lower or "fatal" in code_lower: + return ErrorType.SERVER_ERROR + if "environment" in code_lower and "deleted" in code_lower: + return ErrorType.SERVER_ERROR + if "unavailable" in code_lower or "temporarily" in code_lower: + return ErrorType.TEMPORARY + + # Gone/deleted resources (user-deleted resources, not infrastructure) + if "deleted" in code_lower or "removed" in code_lower or "archived" in code_lower: + return ErrorType.GONE + + # Not found + if "not_found" in code_lower or code_lower.endswith("_not_found") or "not found" in code_lower: + return ErrorType.NOT_FOUND + if "no such" in code_lower or "does not exist" in code_lower or "doesn't exist" in code_lower: + return ErrorType.NOT_FOUND + + # Bad request + if code_lower.startswith("invalid_") or "invalid" in code_lower: + return ErrorType.BAD_REQUEST + if code_lower.startswith("missing_") or "missing" in code_lower: + return ErrorType.BAD_REQUEST + if "bad" in code_lower or "malformed" in code_lower: + return ErrorType.BAD_REQUEST + if "unsupported" in code_lower or "unknown_method" in code_lower: + return ErrorType.BAD_REQUEST + if "no" in code_lower and "passed" in code_lower: # "No query passed", etc. + return ErrorType.BAD_REQUEST + if "no" in code_lower and "specified" in code_lower: # "no_item_specified", etc. + return ErrorType.BAD_REQUEST + if "not_supplied" in code_lower or "not supplied" in code_lower: + return ErrorType.BAD_REQUEST + if "not provided" in code_lower or "required" in code_lower: + return ErrorType.BAD_REQUEST + + # Conflict + if "already_" in code_lower or "duplicate" in code_lower or "already exists" in code_lower: + return ErrorType.CONFLICT + + # Rate limit + if "rate" in code_lower or "limit" in code_lower or "throttl" in code_lower: + return ErrorType.RATE_LIMIT + + # Permission + if "permission" in code_lower or "denied" in code_lower or code_lower.startswith("cant_"): + return ErrorType.PERMISSION + if "forbidden" in code_lower or "not allowed" in code_lower: + return ErrorType.PERMISSION + + # Authentication + if "auth" in code_lower or "token" in code_lower or "credential" in code_lower: + return ErrorType.AUTHENTICATION + + return ErrorType.UNKNOWN + + +# ============================================================================= +# LINEAR CLASSIFIER +# ============================================================================= + +LINEAR_ERROR_CODES = { + # Authentication + "UNAUTHENTICATED": ErrorType.AUTHENTICATION, + "UNAUTHORIZED": ErrorType.AUTHENTICATION, + "INVALID_API_KEY": ErrorType.AUTHENTICATION, + "API_KEY_EXPIRED": ErrorType.AUTHENTICATION, + "TOKEN_EXPIRED": ErrorType.AUTHENTICATION, + "INVALID_TOKEN": ErrorType.AUTHENTICATION, + "AUTHENTICATION_ERROR": ErrorType.AUTHENTICATION, + "AuthenticationError": ErrorType.AUTHENTICATION, + # Permission + "FORBIDDEN": ErrorType.PERMISSION, + "ACCESS_DENIED": ErrorType.PERMISSION, + "PERMISSION_DENIED": ErrorType.PERMISSION, + "INSUFFICIENT_PERMISSIONS": ErrorType.PERMISSION, + "ORGANIZATION_ACCESS_DENIED": ErrorType.PERMISSION, + "TEAM_ACCESS_DENIED": ErrorType.PERMISSION, + "FEATURE_NOT_ENABLED": ErrorType.PERMISSION, + # Not Found + "NOT_FOUND": ErrorType.NOT_FOUND, + "ENTITY_NOT_FOUND": ErrorType.NOT_FOUND, + "ISSUE_NOT_FOUND": ErrorType.NOT_FOUND, + "PROJECT_NOT_FOUND": ErrorType.NOT_FOUND, + "TEAM_NOT_FOUND": ErrorType.NOT_FOUND, + "USER_NOT_FOUND": ErrorType.NOT_FOUND, + "CYCLE_NOT_FOUND": ErrorType.NOT_FOUND, + "LABEL_NOT_FOUND": ErrorType.NOT_FOUND, + "COMMENT_NOT_FOUND": ErrorType.NOT_FOUND, + "ATTACHMENT_NOT_FOUND": ErrorType.NOT_FOUND, + "WORKFLOW_STATE_NOT_FOUND": ErrorType.NOT_FOUND, + "MILESTONE_NOT_FOUND": ErrorType.NOT_FOUND, + "ROADMAP_NOT_FOUND": ErrorType.NOT_FOUND, + "INITIATIVE_NOT_FOUND": ErrorType.NOT_FOUND, + "INTEGRATION_NOT_FOUND": ErrorType.NOT_FOUND, + "WEBHOOK_NOT_FOUND": ErrorType.NOT_FOUND, + # Bad Request + "BAD_REQUEST": ErrorType.BAD_REQUEST, + "INVALID_INPUT": ErrorType.BAD_REQUEST, + "VALIDATION_ERROR": ErrorType.BAD_REQUEST, + "GRAPHQL_VALIDATION_FAILED": ErrorType.BAD_REQUEST, + "GRAPHQL_PARSE_FAILED": ErrorType.BAD_REQUEST, + "GRAPHQL_ERROR": ErrorType.BAD_REQUEST, + "INVALID_QUERY": ErrorType.BAD_REQUEST, + "INVALID_MUTATION": ErrorType.BAD_REQUEST, + "INVALID_ARGUMENT": ErrorType.BAD_REQUEST, + "MISSING_ARGUMENT": ErrorType.BAD_REQUEST, + "MISSING_REQUIRED_FIELD": ErrorType.BAD_REQUEST, + "INVALID_FIELD_VALUE": ErrorType.BAD_REQUEST, + "INVALID_ID": ErrorType.BAD_REQUEST, + "INVALID_UUID": ErrorType.BAD_REQUEST, + "INVALID_DATE": ErrorType.BAD_REQUEST, + "INVALID_FILTER": ErrorType.BAD_REQUEST, + "INVALID_SORT": ErrorType.BAD_REQUEST, + "QUERY_TOO_COMPLEX": ErrorType.BAD_REQUEST, + "VARIABLES_ERROR": ErrorType.BAD_REQUEST, + # Conflict + "CONFLICT": ErrorType.CONFLICT, + "ALREADY_EXISTS": ErrorType.CONFLICT, + "DUPLICATE": ErrorType.CONFLICT, + "DUPLICATE_KEY": ErrorType.CONFLICT, + "VERSION_CONFLICT": ErrorType.CONFLICT, + "OPTIMISTIC_LOCK_ERROR": ErrorType.CONFLICT, + "STATE_CONFLICT": ErrorType.CONFLICT, + "ISSUE_ALREADY_ASSIGNED": ErrorType.CONFLICT, + "LABEL_ALREADY_EXISTS": ErrorType.CONFLICT, + # Rate Limit + "RATE_LIMITED": ErrorType.RATE_LIMIT, + "RATE_LIMIT_EXCEEDED": ErrorType.RATE_LIMIT, + "TOO_MANY_REQUESTS": ErrorType.RATE_LIMIT, + "COMPLEXITY_LIMIT_EXCEEDED": ErrorType.RATE_LIMIT, + "QUERY_DEPTH_LIMIT_EXCEEDED": ErrorType.RATE_LIMIT, + # Server Error + "INTERNAL_ERROR": ErrorType.SERVER_ERROR, + "INTERNAL_SERVER_ERROR": ErrorType.SERVER_ERROR, + "SERVER_ERROR": ErrorType.SERVER_ERROR, + "SERVICE_UNAVAILABLE": ErrorType.SERVER_ERROR, + "TIMEOUT": ErrorType.SERVER_ERROR, + "DATABASE_ERROR": ErrorType.SERVER_ERROR, + "UNEXPECTED_ERROR": ErrorType.SERVER_ERROR, + # Gone + "ENTITY_DELETED": ErrorType.GONE, + "ARCHIVED": ErrorType.GONE, + "ISSUE_ARCHIVED": ErrorType.GONE, + "PROJECT_ARCHIVED": ErrorType.GONE, + # Temporary + "NETWORK_ERROR": ErrorType.TEMPORARY, + "CONNECTION_ERROR": ErrorType.TEMPORARY, + "RETRY_LATER": ErrorType.TEMPORARY, +} + + +def classify_linear_response(response: str) -> Dict[str, Any]: + """Classify Linear API response (GraphQL or REST).""" + if not response or len(response) < 5: + return no_error_result() + + # Check for raw HTTP error response + http_error = check_raw_http_response(response) + if http_error: + return http_error + + # Strip ANSI color codes if present + if '\x1b[' in response: + response = strip_ansi_codes(response) + + # Try JSON + try: + data = json.loads(response) + except (json.JSONDecodeError, TypeError): + return no_error_result() + + if not isinstance(data, dict): + return no_error_result() + + # GraphQL format: {"errors": [...]} + errors = data.get("errors") + if errors and isinstance(errors, list) and len(errors) > 0: + first_error = errors[0] + if isinstance(first_error, dict): + message = first_error.get("message", "") + extensions = first_error.get("extensions", {}) + + # Get error code from extensions or infer from message + error_code = None + if isinstance(extensions, dict): + error_code = extensions.get("code") + + if not error_code and message: + error_code = _infer_linear_error_code(message) + + if not error_code: + error_code = "GRAPHQL_ERROR" + + # Classify + if error_code in LINEAR_ERROR_CODES: + error_type = LINEAR_ERROR_CODES[error_code] + else: + error_type = _classify_unknown_linear_error(error_code, message) + + return error_result(error_type, error_code, message) + + # Handle Slack-style format: {"ok": false, "error": "..."} + if data.get("ok") is False: + error_msg = data.get("error", "unknown_error") + if isinstance(error_msg, str): + inferred_code = _infer_linear_error_code(error_msg) + if inferred_code: + error_type = LINEAR_ERROR_CODES.get(inferred_code, _classify_unknown_linear_error(inferred_code, error_msg)) + return error_result(error_type, inferred_code, error_msg) + else: + error_type = _classify_unknown_linear_error(error_msg, error_msg) + return error_result(error_type, error_msg.upper().replace(" ", "_"), error_msg) + + # REST format: {"error": "..."} + error_field = data.get("error") + if error_field: + if data.get("success") is True or (data.get("data") is not None and "errors" not in data): + return no_error_result() + + message = data.get("message", "") + status = data.get("status") + + if isinstance(error_field, str): + error_code = error_field.upper().replace(" ", "_") + elif isinstance(error_field, dict): + # Dict error: {"code": "...", "message": "..."} or just {"message": "..."} + if "code" in error_field: + error_code = str(error_field["code"]).upper() + elif "message" in error_field: + # No code, use message for inference + err_msg = error_field.get("message", "") + inferred_code = _infer_linear_error_code(err_msg) + if inferred_code: + error_type = LINEAR_ERROR_CODES.get(inferred_code, _classify_unknown_linear_error(inferred_code, err_msg)) + return error_result(error_type, inferred_code, err_msg) + else: + error_type = _classify_unknown_linear_error("", err_msg) + return error_result(error_type, "ERROR", err_msg) + else: + error_code = "UNKNOWN_ERROR" + message = str(error_field) + else: + error_code = str(error_field).upper() + + # Combine message sources + if not message and isinstance(error_field, str): + message = error_field + + if error_code in LINEAR_ERROR_CODES: + error_type = LINEAR_ERROR_CODES[error_code] + elif isinstance(status, int) and status >= 400: + error_type = classify_http_code(status) + else: + error_type = _classify_unknown_linear_error(error_code, message) + + return error_result(error_type, error_code, message) + + return no_error_result() + + +def _infer_linear_error_code(message: str) -> Optional[str]: + """Infer error code from Linear GraphQL error message.""" + msg_lower = message.lower() + + # Server/infrastructure errors (check early - high priority) + if "internal" in msg_lower or "server error" in msg_lower: + return "INTERNAL_SERVER_ERROR" + if "environment" in msg_lower and "deleted" in msg_lower: + return "INTERNAL_SERVER_ERROR" # Environment deleted = infrastructure issue + if "timeout" in msg_lower: + return "TIMEOUT" + if "unavailable" in msg_lower: + return "SERVICE_UNAVAILABLE" + # Server-side data integrity issues (not client's fault) + if "cannot return null for non-nullable" in msg_lower: + return "INTERNAL_SERVER_ERROR" # Schema/resolver returning unexpected null + if "should be created automatically" in msg_lower: + return "INTERNAL_SERVER_ERROR" # Missing auto-created data (e.g., workflow states) + + # Gone/deleted/archived resources (user-deleted, not infrastructure) + if "deleted" in msg_lower or "has been removed" in msg_lower: + return "ENTITY_DELETED" + if "archived" in msg_lower: + return "ARCHIVED" + if "no longer" in msg_lower: # "no longer available", "no longer exists" + return "ENTITY_DELETED" + + # GraphQL syntax/validation errors + if "syntax error" in msg_lower: + return "GRAPHQL_PARSE_FAILED" + if "enum" in msg_lower and "cannot represent" in msg_lower: + return "GRAPHQL_VALIDATION_FAILED" + if "expected value of type" in msg_lower: + return "GRAPHQL_VALIDATION_FAILED" + if "type" in msg_lower and "is required" in msg_lower: + return "GRAPHQL_VALIDATION_FAILED" + if "was not provided" in msg_lower: + return "GRAPHQL_VALIDATION_FAILED" + if "is not defined" in msg_lower: + return "GRAPHQL_VALIDATION_FAILED" + if "unknown type" in msg_lower: + return "GRAPHQL_VALIDATION_FAILED" + if "cannot query field" in msg_lower: + return "GRAPHQL_VALIDATION_FAILED" + if "cannot represent" in msg_lower: + return "GRAPHQL_VALIDATION_FAILED" + if "validation" in msg_lower or ("field" in msg_lower and "argument" in msg_lower): + return "GRAPHQL_VALIDATION_FAILED" + # Additional validation patterns + if "is never used" in msg_lower: # Unused variable + return "GRAPHQL_VALIDATION_FAILED" + if "used in position expecting" in msg_lower: # Type mismatch + return "GRAPHQL_VALIDATION_FAILED" + if "must have a selection of subfields" in msg_lower: + return "GRAPHQL_VALIDATION_FAILED" + if "does not exist in" in msg_lower and "enum" in msg_lower: # Invalid enum value + return "GRAPHQL_VALIDATION_FAILED" + if "invalid input" in msg_lower or "invalid value" in msg_lower: + return "INVALID_INPUT" + + # Not found + if "not found" in msg_lower: + return "NOT_FOUND" + if "does not exist" in msg_lower or "doesn't exist" in msg_lower: + return "NOT_FOUND" + if "no such" in msg_lower: + return "NOT_FOUND" + + # Auth/permission + if "unauthorized" in msg_lower or "unauthenticated" in msg_lower: + return "UNAUTHENTICATED" + if "forbidden" in msg_lower or "permission" in msg_lower or "access denied" in msg_lower: + return "FORBIDDEN" + + # Conflict + if "already exists" in msg_lower or "duplicate" in msg_lower: + return "ALREADY_EXISTS" + if "conflict" in msg_lower: + return "CONFLICT" + + # Rate limiting + if "rate" in msg_lower and "limit" in msg_lower: + return "RATE_LIMITED" + if "too many" in msg_lower: + return "TOO_MANY_REQUESTS" + + return None + + +def _classify_unknown_linear_error(error_code: str, message: str = "") -> ErrorType: + """Classify unknown Linear error by pattern.""" + code_lower = error_code.lower() + msg_lower = message.lower() if message else "" + + if "not_found" in code_lower or "notfound" in code_lower: + return ErrorType.NOT_FOUND + if code_lower.startswith("invalid_") or code_lower.startswith("bad_"): + return ErrorType.BAD_REQUEST + if code_lower.startswith("missing_"): + return ErrorType.BAD_REQUEST + if "_denied" in code_lower or "forbidden" in code_lower: + return ErrorType.PERMISSION + if "_expired" in code_lower or "_revoked" in code_lower: + return ErrorType.AUTHENTICATION + if code_lower.startswith("already_") or code_lower.startswith("duplicate_") or "_exists" in code_lower: + return ErrorType.CONFLICT + if "rate_" in code_lower or "_limit_" in code_lower: + return ErrorType.RATE_LIMIT + if code_lower.startswith("internal_") or code_lower.startswith("server_"): + return ErrorType.SERVER_ERROR + if "_archived" in code_lower or "_deleted" in code_lower: + return ErrorType.GONE + + # Check message as fallback + if msg_lower: + if "not found" in msg_lower: + return ErrorType.NOT_FOUND + if "permission" in msg_lower or "access" in msg_lower: + return ErrorType.PERMISSION + if "authentication" in msg_lower or "unauthorized" in msg_lower: + return ErrorType.AUTHENTICATION + if "invalid" in msg_lower or "required" in msg_lower: + return ErrorType.BAD_REQUEST + if "unsupported" in msg_lower or "unknown method" in msg_lower: + return ErrorType.BAD_REQUEST + if "no" in msg_lower and "passed" in msg_lower: + return ErrorType.BAD_REQUEST + if "no" in msg_lower and "specified" in msg_lower: + return ErrorType.BAD_REQUEST + if "not_supplied" in msg_lower or "not supplied" in msg_lower: + return ErrorType.BAD_REQUEST + if "not provided" in msg_lower: + return ErrorType.BAD_REQUEST + if "already exists" in msg_lower or "duplicate" in msg_lower: + return ErrorType.CONFLICT + + return ErrorType.UNKNOWN + + +# ============================================================================= +# MAIN UNIFIED CLASSIFIER +# ============================================================================= + +# App name aliases +APP_ALIASES = { + "calendar": "gcal", + "google_calendar": "gcal", + "google-calendar": "gcal", + "gcal": "gcal", + "box": "box", + "slack": "slack", + "linear": "linear", +} + +CLASSIFIERS = { + "gcal": classify_gcal_response, + "box": classify_box_response, + "slack": classify_slack_response, + "linear": classify_linear_response, +} + + +def classify_response(stdout: str, app_name: str) -> Dict[str, Any]: + """ + Unified error classifier for API responses. + + Args: + stdout: Raw response string (JSON, HTML, or text) + app_name: Name of the app ("calendar", "gcal", "box", "slack", "linear") + + Returns: + { + "has_error": bool, + "error_type": str (one of ErrorType values), + "error_code": str or None, + "details": str or None + } + """ + # Normalize app name + app_key = APP_ALIASES.get(app_name.lower().replace("-", "_").replace(" ", "_")) + + if not app_key: + raise ValueError(f"Unknown app: {app_name}. Supported: {list(APP_ALIASES.keys())}") + + classifier = CLASSIFIERS[app_key] + return classifier(stdout) + + +# ============================================================================= +# CONVENIENCE FUNCTIONS +# ============================================================================= + +def has_error(stdout: str, app_name: str) -> bool: + """Quick check if response contains an error.""" + return classify_response(stdout, app_name)["has_error"] + + +def get_error_type(stdout: str, app_name: str) -> str: + """Get just the error type (or 'no_error').""" + return classify_response(stdout, app_name)["error_type"] + + +# ============================================================================= +# TEST +# ============================================================================= + +if __name__ == "__main__": + print("=" * 70) + print("UNIFIED ERROR CLASSIFIER") + print("=" * 70) + print(f"Supported apps: {list(APP_ALIASES.keys())}") + print(f"Error types: {[e.value for e in ErrorType]}") + print() + + # Test cases + tests = [ + ("gcal", '{"error": {"code": 404, "message": "Not Found", "errors": [{"reason": "notFound"}]}}'), + ("box", '{"type": "error", "status": 401, "code": "unauthorized", "message": "Invalid token"}'), + ("slack", '{"ok": false, "error": "channel_not_found"}'), + ("linear", '{"errors": [{"message": "Issue with id \'123\' not found"}]}'), + ("linear", '{"errors": [{"message": "Syntax Error: Unexpected character"}]}'), + ("linear", '{"data": {"issue": {"id": "123"}}}'), # No error + ] + + print("Test cases:") + for app, response in tests: + result = classify_response(response, app) + print(f" [{app}] has_error={result['has_error']}, type={result['error_type']}, code={result['error_code']}") + + print() + print("Function: classify_response(stdout, app_name)") diff --git a/experiments/kdd 2026/quantitative_analysis.ipynb b/experiments/kdd 2026/quantitative_analysis/quantitative_analysis.ipynb similarity index 100% rename from experiments/kdd 2026/quantitative_analysis.ipynb rename to experiments/kdd 2026/quantitative_analysis/quantitative_analysis.ipynb From 6f1c52b6a314d30150f940cc31418367d80b8d89 Mon Sep 17 00:00:00 2001 From: Artem Zhuravel Date: Sat, 21 Feb 2026 14:45:11 +0530 Subject: [PATCH 2/2] Add new folder to git lfs --- .gitattributes | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitattributes b/.gitattributes index 6167c4f..806c88b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,3 @@ examples/box/seeds/filesystem/** filter=lfs diff=lfs merge=lfs -text experiments/kdd[[:space:]]2026/evaluation_outputs/**/*.json filter=lfs diff=lfs merge=lfs -text +experiments/kdd[[:space:]]2026/bayesian_bootstrap_results/qualitative/* filter=lfs diff=lfs merge=lfs -text