smolagents/examples/benchmark.ipynb

1018 lines
111 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.3.1\u001b[0m\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n"
]
}
],
"source": [
"!pip install -e .. sympy numpy matplotlib seaborn -q # Install dev version of smolagents + some packages"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using the latest cached version of the dataset since m-ric/smolagentsbenchmark couldn't be found on the Hugging Face Hub\n",
"Found the latest cached dataset configuration 'default' at /Users/aymeric/.cache/huggingface/datasets/m-ric___smolagentsbenchmark/default/0.0.0/0ad5fb2293ab185eece723a4ac0e4a7188f71add (last modified on Wed Jan 8 17:50:13 2025).\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>question</th>\n",
" <th>source</th>\n",
" <th>true_answer</th>\n",
" <th>true_reasoning</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>If Eliud Kipchoge could maintain his record-ma...</td>\n",
" <td>GAIA</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>How many studio albums were published by Merce...</td>\n",
" <td>GAIA</td>\n",
" <td>3</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Here's a fun riddle that I think you'll enjoy....</td>\n",
" <td>GAIA</td>\n",
" <td>3</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>My family reunion is this week, and I was assi...</td>\n",
" <td>GAIA</td>\n",
" <td>2</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>In Emily Midkiff's June 2014 article in a jour...</td>\n",
" <td>GAIA</td>\n",
" <td>fluffy</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>127</th>\n",
" <td>What year was the municipality of San Carlos, ...</td>\n",
" <td>SimpleQA</td>\n",
" <td>1786</td>\n",
" <td>['https://en.wikipedia.org/wiki/San_Carlos,_An...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>128</th>\n",
" <td>In which year was Maria Elena Walsh named Illu...</td>\n",
" <td>SimpleQA</td>\n",
" <td>1985</td>\n",
" <td>['https://en.wikipedia.org/wiki/Mar%C3%ADa_Ele...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>129</th>\n",
" <td>What is the durability of the Istarelle spear ...</td>\n",
" <td>SimpleQA</td>\n",
" <td>800</td>\n",
" <td>['http://demonssouls.wikidot.com/spear', 'http...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>130</th>\n",
" <td>What is the number of the executive order that...</td>\n",
" <td>SimpleQA</td>\n",
" <td>7034</td>\n",
" <td>['https://www.loc.gov/collections/federal-thea...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>131</th>\n",
" <td>Within plus or minus one minute, when was Marq...</td>\n",
" <td>SimpleQA</td>\n",
" <td>77</td>\n",
" <td>['https://www.fifa.com/fifaplus/en/match-centr...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>132 rows × 4 columns</p>\n",
"</div>"
],
"text/plain": [
" question source true_answer \\\n",
"0 If Eliud Kipchoge could maintain his record-ma... GAIA 17 \n",
"1 How many studio albums were published by Merce... GAIA 3 \n",
"2 Here's a fun riddle that I think you'll enjoy.... GAIA 3 \n",
"3 My family reunion is this week, and I was assi... GAIA 2 \n",
"4 In Emily Midkiff's June 2014 article in a jour... GAIA fluffy \n",
".. ... ... ... \n",
"127 What year was the municipality of San Carlos, ... SimpleQA 1786 \n",
"128 In which year was Maria Elena Walsh named Illu... SimpleQA 1985 \n",
"129 What is the durability of the Istarelle spear ... SimpleQA 800 \n",
"130 What is the number of the executive order that... SimpleQA 7034 \n",
"131 Within plus or minus one minute, when was Marq... SimpleQA 77 \n",
"\n",
" true_reasoning \n",
"0 None \n",
"1 None \n",
"2 None \n",
"3 None \n",
"4 None \n",
".. ... \n",
"127 ['https://en.wikipedia.org/wiki/San_Carlos,_An... \n",
"128 ['https://en.wikipedia.org/wiki/Mar%C3%ADa_Ele... \n",
"129 ['http://demonssouls.wikidot.com/spear', 'http... \n",
"130 ['https://www.loc.gov/collections/federal-thea... \n",
"131 ['https://www.fifa.com/fifaplus/en/match-centr... \n",
"\n",
"[132 rows x 4 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import datasets\n",
"import pandas as pd\n",
"\n",
"eval_ds = datasets.load_dataset(\"m-ric/smolagentsbenchmark\")[\"train\"]\n",
"pd.DataFrame(eval_ds)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Define utilities and tools\n",
"To run the SERPAPI tool, you will need to have a [SerpAPI](https://serpapi.com/dashboard) API key: for this you need a paid account."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import time\n",
"import json\n",
"import os\n",
"import re\n",
"import string\n",
"import warnings\n",
"from tqdm import tqdm\n",
"from typing import List\n",
"\n",
"from smolagents import (\n",
" GoogleSearchTool,\n",
" CodeAgent,\n",
" ToolCallingAgent,\n",
" HfApiModel,\n",
" AgentError,\n",
" VisitWebpageTool,\n",
" PythonInterpreterTool,\n",
")\n",
"from smolagents.agents import ActionStep\n",
"from dotenv import load_dotenv\n",
"\n",
"load_dotenv()\n",
"os.makedirs(\"output\", exist_ok=True)\n",
"\n",
"\n",
"def serialize_agent_error(obj):\n",
" if isinstance(obj, AgentError):\n",
" return {\"error_type\": obj.__class__.__name__, \"message\": obj.message}\n",
" else:\n",
" return str(obj)\n",
"\n",
"\n",
"def answer_questions(\n",
" eval_ds, file_name, agent, model_id, action_type, is_vanilla_llm=False\n",
"):\n",
" answered_questions = []\n",
" if os.path.exists(file_name):\n",
" with open(file_name, \"r\") as f:\n",
" for line in f:\n",
" answered_questions.append(json.loads(line)[\"question\"])\n",
"\n",
" for _, example in tqdm(enumerate(eval_ds), total=len(eval_ds)):\n",
" try:\n",
" question = example[\"question\"]\n",
" if example[\"source\"] == \"SimpleQA\":\n",
" question += \" Answer with only the final number.\"\n",
" if example[\"source\"] == \"MATH\":\n",
" question += \" Write code, not latex.\"\n",
" if question in answered_questions:\n",
" continue\n",
" start_time = time.time()\n",
"\n",
" if is_vanilla_llm:\n",
" llm = agent\n",
" answer = llm([{\"role\": \"user\", \"content\": question}])\n",
" token_count = llm.last_input_token_count + llm.last_output_token_count\n",
" intermediate_steps = []\n",
" else:\n",
" answer = agent.run(question)\n",
" token_count = agent.monitor.get_total_token_counts()\n",
" intermediate_steps = str(agent.logs)\n",
" # Remove memory from logs to make them more compact.\n",
" for step in agent.logs:\n",
" if isinstance(step, ActionStep):\n",
" step.agent_memory = None\n",
"\n",
" end_time = time.time()\n",
" annotated_example = {\n",
" \"model_id\": model_id,\n",
" \"agent_action_type\": action_type,\n",
" \"question\": question,\n",
" \"answer\": answer,\n",
" \"true_answer\": example[\"true_answer\"],\n",
" \"source\": example[\"source\"],\n",
" \"intermediate_steps\": intermediate_steps,\n",
" \"start_time\": start_time,\n",
" \"end_time\": end_time,\n",
" \"token_counts\": token_count,\n",
" }\n",
"\n",
" with open(file_name, \"a\") as f:\n",
" json.dump(annotated_example, f, default=serialize_agent_error)\n",
" f.write(\"\\n\") # add a newline for JSONL format\n",
" except Exception as e:\n",
" print(\"Failed:\", e)\n",
"\n",
"\n",
"def normalize_number_str(number_str: str) -> float:\n",
" # we replace these common units and commas to allow\n",
" # conversion to float\n",
" for char in [\"$\", \"%\", \",\"]:\n",
" number_str = number_str.replace(char, \"\")\n",
" try:\n",
" return float(number_str)\n",
" except ValueError:\n",
" return float(\"inf\")\n",
"\n",
"\n",
"def split_string(\n",
" s: str,\n",
" char_list: list[str] = [\",\", \";\"],\n",
") -> list[str]:\n",
" pattern = f\"[{''.join(char_list)}]\"\n",
" return re.split(pattern, s)\n",
"\n",
"\n",
"def is_float(element: any) -> bool:\n",
" try:\n",
" float(element)\n",
" return True\n",
" except ValueError:\n",
" return False\n",
"\n",
"\n",
"def normalize_str(input_str, remove_punct=True) -> str:\n",
" \"\"\"\n",
" Normalize a string by:\n",
" - Removing all white spaces\n",
" - Optionally removing punctuation (if remove_punct is True)\n",
" - Converting to lowercase\n",
" Parameters:\n",
" - input_str: str, the string to normalize\n",
" - remove_punct: bool, whether to remove punctuation (default: True)\n",
" Returns:\n",
" - str, the normalized string\n",
" \"\"\"\n",
" # Remove all white spaces. Required e.g for seagull vs. sea gull\n",
" no_spaces = re.sub(r\"\\s\", \"\", input_str)\n",
"\n",
" # Remove punctuation, if specified.\n",
" if remove_punct:\n",
" translator = str.maketrans(\"\", \"\", string.punctuation)\n",
" return no_spaces.lower().translate(translator)\n",
" else:\n",
" return no_spaces.lower()\n",
"\n",
"\n",
"def extract_numbers(text: str) -> List[str]:\n",
" \"\"\"This pattern matches:\n",
" - Optional negative sign\n",
" - Numbers with optional comma thousand separators\n",
" - Optional decimal points with decimal numbers\n",
" \"\"\"\n",
" pattern = r\"-?(?:\\d{1,3}(?:,\\d{3})+|\\d+)(?:\\.\\d+)?\"\n",
"\n",
" return [el.replace(\",\", \"\") for el in re.findall(pattern, text)]\n",
"\n",
"\n",
"def get_question_score_gaia(\n",
" model_answer: str,\n",
" ground_truth: str,\n",
") -> bool:\n",
" if is_float(ground_truth):\n",
" normalized_answer = normalize_number_str(str(model_answer))\n",
" return normalized_answer == float(ground_truth)\n",
"\n",
" elif any(char in ground_truth for char in [\",\", \";\"]): # if gt is a list\n",
" # question with the fish: normalization removes punct\n",
" gt_elems = split_string(ground_truth)\n",
" ma_elems = split_string(model_answer)\n",
"\n",
" if len(gt_elems) != len(ma_elems): # check length is the same\n",
" warnings.warn(\n",
" \"Answer lists have different lengths, returning False.\", UserWarning\n",
" )\n",
" return False\n",
"\n",
" comparisons = []\n",
" for ma_elem, gt_elem in zip(\n",
" ma_elems, gt_elems\n",
" ): # compare each element as float or str\n",
" if is_float(gt_elem):\n",
" normalized_ma_elem = normalize_number_str(ma_elem)\n",
" comparisons.append(normalized_ma_elem == float(gt_elem))\n",
" else:\n",
" # we do not remove punct since comparisons can include punct\n",
" comparisons.append(\n",
" normalize_str(ma_elem, remove_punct=False)\n",
" == normalize_str(gt_elem, remove_punct=False)\n",
" )\n",
" return all(comparisons)\n",
"\n",
" else: # if gt is a str\n",
" return normalize_str(model_answer) == normalize_str(ground_truth)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Benchmark agents\n",
"\n",
"### Open models"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"open_model_ids = [\n",
" \"meta-llama/Llama-3.3-70B-Instruct\",\n",
" # \"Qwen/QwQ-32B-Preview\",\n",
" \"Qwen/Qwen2.5-72B-Instruct\",\n",
" \"Qwen/Qwen2.5-Coder-32B-Instruct\",\n",
" \"meta-llama/Llama-3.2-3B-Instruct\",\n",
" \"meta-llama/Llama-3.1-8B-Instruct\",\n",
" \"mistralai/Mistral-Nemo-Instruct-2407\",\n",
" # \"HuggingFaceTB/SmolLM2-1.7B-Instruct\",\n",
" # \"meta-llama/Llama-3.1-70B-Instruct\",\n",
"]\n",
"\n",
"for model_id in open_model_ids:\n",
" print(f\"Evaluating '{model_id}'...\")\n",
" # action_type = \"tool_calling\"\n",
" # agent = ToolCallingAgent(\n",
" # tools=[GoogleSearchTool(), VisitWebpageTool(), PythonInterpreterTool()],\n",
" # model=HfApiModel(model_id),\n",
" # max_steps=10,\n",
" # )\n",
" # file_name = f\"output/{model_id.replace('/', '_')}-{action_type}-26-dec-2024.jsonl\"\n",
" # answer_questions(eval_ds, file_name, agent, model_id, action_type)\n",
"\n",
" action_type = \"code\"\n",
" agent = CodeAgent(\n",
" tools=[GoogleSearchTool(), VisitWebpageTool()],\n",
" model=HfApiModel(model_id),\n",
" additional_authorized_imports=[\"numpy\", \"sympy\"],\n",
" max_steps=10,\n",
" )\n",
" file_name = f\"output/{model_id.replace('/', '_')}-{action_type}-26-dec-2024.jsonl\"\n",
" answer_questions(eval_ds, file_name, agent, model_id, action_type)\n",
"\n",
" # Also evaluate vanilla model\n",
" action_type = \"vanilla\"\n",
" llm = HfApiModel(model_id)\n",
" file_name = f\"output/{model_id.replace('/', '_')}-{action_type}-26-dec-2024.jsonl\"\n",
" answer_questions(\n",
" eval_ds, file_name, llm, model_id, action_type, is_vanilla_llm=True\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Closed models"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from smolagents import LiteLLMModel\n",
"\n",
"litellm_model_ids = [\"gpt-4o\", \"anthropic/claude-3-5-sonnet-latest\"]\n",
"\n",
"for model_id in litellm_model_ids:\n",
" print(f\"Evaluating '{model_id}'...\")\n",
" action_type = \"tool_calling\"\n",
" agent = ToolCallingAgent(\n",
" tools=[\n",
" GoogleSearchTool(),\n",
" VisitWebpageTool(),\n",
" PythonInterpreterTool([\"numpy\", \"sympy\"]),\n",
" ],\n",
" model=LiteLLMModel(model_id),\n",
" max_steps=10,\n",
" )\n",
" file_name = f\"output/{model_id.replace('/', '_')}-{action_type}-26-dec-2024.jsonl\"\n",
" answer_questions(eval_ds, file_name, agent, model_id, action_type)\n",
"\n",
" action_type = \"code\"\n",
" agent = CodeAgent(\n",
" tools=[GoogleSearchTool(), VisitWebpageTool()],\n",
" model=LiteLLMModel(model_id),\n",
" additional_authorized_imports=[\"numpy\"],\n",
" max_steps=10,\n",
" )\n",
" file_name = f\"output/{model_id.replace('/', '_')}-{action_type}-26-dec-2024.jsonl\"\n",
" answer_questions(eval_ds, file_name, agent, model_id, action_type)\n",
"\n",
" # Also evaluate vanilla model\n",
" action_type = \"vanilla\"\n",
" llm = LiteLLMModel(model_id)\n",
" file_name = f\"output/{model_id.replace('/', '_')}-{action_type}-26-dec-2024.jsonl\"\n",
" answer_questions(\n",
" eval_ds, file_name, llm, model_id, action_type, is_vanilla_llm=True\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"# import glob\n",
"# import json\n",
"# jsonl_files = glob.glob(f\"output/*.jsonl\")\n",
"\n",
"# for file_path in jsonl_files:\n",
"# print(file_path)\n",
"# # Read all lines and filter out SimpleQA sources\n",
"# filtered_lines = []\n",
"# removed = 0\n",
"# with open(file_path, 'r', encoding='utf-8') as f:\n",
"# for line in f:\n",
"# try:\n",
"# data = json.loads(line.strip())\n",
"# if not any([question in data[\"question\"] for question in eval_ds[\"question\"]]):\n",
"# removed +=1\n",
"# else:\n",
"# filtered_lines.append(line)\n",
"# except json.JSONDecodeError:\n",
"# print(\"Invalid line:\", line)\n",
"# continue # Skip invalid JSON lines\n",
"# print(f\"Removed {removed} lines.\")\n",
"# # Write filtered content back to the same file\n",
"# with open(file_path, 'w', encoding='utf-8') as f:\n",
"# f.writelines(filtered_lines)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Score answers"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/var/folders/6m/9b1tts6d5w960j80wbw9tx3m0000gn/T/ipykernel_74415/3026956094.py:163: UserWarning: Answer lists have different lengths, returning False.\n",
" warnings.warn(\n"
]
}
],
"source": [
"import pandas as pd\n",
"import glob\n",
"\n",
"res = []\n",
"for file_path in glob.glob(\"output/*.jsonl\"):\n",
" smoldf = pd.read_json(file_path, lines=True)\n",
" smoldf[\"action_type\"] = \"vanilla\" if \"-vanilla-\" in file_path else \"code\"\n",
" res.append(smoldf)\n",
"result_df = pd.concat(res)\n",
"\n",
"\n",
"def get_correct(row):\n",
" if row[\"source\"] == \"MATH\": # Checks the last number in answer\n",
" numbers_answer = extract_numbers(str(row[\"answer\"]))\n",
" if len(numbers_answer) == 0:\n",
" return False\n",
" return float(numbers_answer[-1]) == float(row[\"true_answer\"])\n",
" else:\n",
" return get_question_score_gaia(str(row[\"answer\"]), str(row[\"true_answer\"]))\n",
"\n",
"\n",
"result_df[\"correct\"] = result_df.apply(get_correct, axis=1)\n",
"\n",
"result_df = (\n",
" (result_df.groupby([\"model_id\", \"source\", \"action_type\"])[[\"correct\"]].mean() * 100)\n",
" .round(1)\n",
" .reset_index()\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"pivot_df = result_df.pivot_table(\n",
" index=[\"model_id\", \"source\"],\n",
" columns=[\"action_type\"],\n",
" values=\"correct\",\n",
" fill_value=float(\"nan\"),\n",
").reset_index()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Display results"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>action_type</th>\n",
" <th>model_id</th>\n",
" <th>source</th>\n",
" <th>code</th>\n",
" <th>vanilla</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Qwen/Qwen2.5-72B-Instruct</td>\n",
" <td>GAIA</td>\n",
" <td>28.1</td>\n",
" <td>6.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Qwen/Qwen2.5-72B-Instruct</td>\n",
" <td>MATH</td>\n",
" <td>74.0</td>\n",
" <td>31.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Qwen/Qwen2.5-72B-Instruct</td>\n",
" <td>SimpleQA</td>\n",
" <td>70.0</td>\n",
" <td>10.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Qwen/Qwen2.5-Coder-32B-Instruct</td>\n",
" <td>GAIA</td>\n",
" <td>18.8</td>\n",
" <td>3.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Qwen/Qwen2.5-Coder-32B-Instruct</td>\n",
" <td>MATH</td>\n",
" <td>76.0</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Qwen/Qwen2.5-Coder-32B-Instruct</td>\n",
" <td>SimpleQA</td>\n",
" <td>86.0</td>\n",
" <td>8.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>anthropic/claude-3-5-sonnet-latest</td>\n",
" <td>GAIA</td>\n",
" <td>40.6</td>\n",
" <td>3.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>anthropic/claude-3-5-sonnet-latest</td>\n",
" <td>MATH</td>\n",
" <td>67.0</td>\n",
" <td>50.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>anthropic/claude-3-5-sonnet-latest</td>\n",
" <td>SimpleQA</td>\n",
" <td>90.0</td>\n",
" <td>34.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>gpt-4o</td>\n",
" <td>GAIA</td>\n",
" <td>28.1</td>\n",
" <td>3.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>gpt-4o</td>\n",
" <td>MATH</td>\n",
" <td>70.0</td>\n",
" <td>40.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>gpt-4o</td>\n",
" <td>SimpleQA</td>\n",
" <td>88.0</td>\n",
" <td>6.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>meta-llama/Llama-3.1-8B-Instruct</td>\n",
" <td>GAIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>meta-llama/Llama-3.1-8B-Instruct</td>\n",
" <td>MATH</td>\n",
" <td>42.0</td>\n",
" <td>18.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>meta-llama/Llama-3.1-8B-Instruct</td>\n",
" <td>SimpleQA</td>\n",
" <td>54.0</td>\n",
" <td>6.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>meta-llama/Llama-3.2-3B-Instruct</td>\n",
" <td>GAIA</td>\n",
" <td>3.1</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>meta-llama/Llama-3.2-3B-Instruct</td>\n",
" <td>MATH</td>\n",
" <td>32.0</td>\n",
" <td>12.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>meta-llama/Llama-3.2-3B-Instruct</td>\n",
" <td>SimpleQA</td>\n",
" <td>4.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>meta-llama/Llama-3.3-70B-Instruct</td>\n",
" <td>GAIA</td>\n",
" <td>34.4</td>\n",
" <td>3.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>meta-llama/Llama-3.3-70B-Instruct</td>\n",
" <td>MATH</td>\n",
" <td>82.0</td>\n",
" <td>40.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>meta-llama/Llama-3.3-70B-Instruct</td>\n",
" <td>SimpleQA</td>\n",
" <td>84.0</td>\n",
" <td>12.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"action_type model_id source code vanilla\n",
"0 Qwen/Qwen2.5-72B-Instruct GAIA 28.1 6.2\n",
"1 Qwen/Qwen2.5-72B-Instruct MATH 74.0 31.9\n",
"2 Qwen/Qwen2.5-72B-Instruct SimpleQA 70.0 10.0\n",
"3 Qwen/Qwen2.5-Coder-32B-Instruct GAIA 18.8 3.1\n",
"4 Qwen/Qwen2.5-Coder-32B-Instruct MATH 76.0 60.0\n",
"5 Qwen/Qwen2.5-Coder-32B-Instruct SimpleQA 86.0 8.0\n",
"6 anthropic/claude-3-5-sonnet-latest GAIA 40.6 3.1\n",
"7 anthropic/claude-3-5-sonnet-latest MATH 67.0 50.0\n",
"8 anthropic/claude-3-5-sonnet-latest SimpleQA 90.0 34.0\n",
"9 gpt-4o GAIA 28.1 3.1\n",
"10 gpt-4o MATH 70.0 40.0\n",
"11 gpt-4o SimpleQA 88.0 6.0\n",
"12 meta-llama/Llama-3.1-8B-Instruct GAIA 0.0 0.0\n",
"13 meta-llama/Llama-3.1-8B-Instruct MATH 42.0 18.0\n",
"14 meta-llama/Llama-3.1-8B-Instruct SimpleQA 54.0 6.0\n",
"15 meta-llama/Llama-3.2-3B-Instruct GAIA 3.1 0.0\n",
"16 meta-llama/Llama-3.2-3B-Instruct MATH 32.0 12.0\n",
"17 meta-llama/Llama-3.2-3B-Instruct SimpleQA 4.0 0.0\n",
"18 meta-llama/Llama-3.3-70B-Instruct GAIA 34.4 3.1\n",
"19 meta-llama/Llama-3.3-70B-Instruct MATH 82.0 40.0\n",
"20 meta-llama/Llama-3.3-70B-Instruct SimpleQA 84.0 12.0"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display(pivot_df)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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f4/b5l0v3bQfRy3YvGm6P4dccRTtMvevTctixU7YVJO5/brvi/pxlPvOtbmpYBw177ywXShSf5+pz3e+qIM4yk8ACfNF09/PmWOmzp5qFyxPYjuaL2hxgwYNKvdpCFEWKlZYHzZsmLn44ovNG2+8kf7dN998Y/r06WPeeecd07btv1mp3bt3NzNnzjQdOnQo09kKIYQQQgghhBBCCFFdSFgX1Yw3ZFhZLL744mby5Mm2znrTpk3T5WFatmxp2rRpU2fb999/v0xnKYQQQgghhBBCCCGEEKLaqNgCpKuvvroV1EePHp3+3ahRo2zZl8bzaocJIYQQQgghhBBCCCGEEKWmYhXqVq1amZ122smcf/75ZsyYMeaFF14wd955p9l///3LfWpCCCGEEEIIIYQQQgghqpiKrbEO06ZNs8L6iBEjzEILLWQOPvhg069fv3KflhBCCCGEEEIIIYQQQogqpmIz1l3W+hVXXGE+/PBD89prr0lUr3L++OMPu6Dt5ptvbtZaay2z7bbbmjvuuMPW4ReiUpCdiqTAot8PPfRQ+uf99tvPDBgwoGTHX2211exi5ELUl6lTp5qhQ4fmtS1t8Y477lhSWxcNu88fNmxYwX9/+umn2w9gk7TDQsSJbFQkAdmpECLJVLSwLoRj/PjxZvfddzffffedufLKK83TTz9tjj76aDN48GBz5JFHmjlz5pT7FIWQnYpE8cwzz5hbbrmlbMd//fXXzTrrrFO244uGw913320effTRvLalrODnn39e9HMS1cFVV11lXnnllXKfhhChyEZFEpCdCiGSTNNyn4AQ+XDppZeapZZaytx2222mSZMm9nfLLLOMWXvttW1G8AMPPGD23Xffcp+mqHJkpyJJlLsSXIcOHcp6fFF9tvzDDz+Ye++916y88spFPydRHZS7HRUiF7JRkQRkp0KIJKOMdVHxTJ482S5ee+ihh6bFSseSSy5pdt11V/Pggw+a9ddf34wcOTL9Xa9evcxpp52W/vmaa64xp5xyiv3/L7/80k4R69q1q9l6661tRrGD6WMnn3yyOe+888y6665rNtpoI3P77beX5FpFcpGdinIxatQos/fee9vSQwziYIO///67eeyxx6z93HDDDWaDDTYw3bt3N5dddpkNXijBcsYZZ5iff/7ZlmT56aef0rMuDjnkENOlSxdrc2+++Wb6OGx3/fXX230dccQR9neUauPYHHeLLbawg0cOpuRSFoltsWEWJP/ggw8yloKpqakx5557rt03n3POOcfMmDGjhHdRVALjxo2zZf+w5e23396W0cKusGXsjIw2Zjlsttlm5uGHH7Z/w3cDBw407777rrWpbGBjxx57rFlkkUXm+4799O7d29rqLrvsYt57772iXacoL7R32MrLL79s7Quboq2iz+XZ054dfvjhtsQQ0He77WhTv/jii3Q//Pjjj9sP38PXX39t14RiW9rRffbZx3zzzTcFnSc2vs0225g111zTtosXXHCBqa2tTbevzIw74YQT7PvSp08f8+mnn5prr73WtvWbbrppnbIKYf2EqExko7LRJCA7lZ0KIeYiYV1UPJ988omtiUqwmwlERTrw9dZbzwbWThz68ccf64g4b7zxhvm///s/M336dNsJduvWzTz55JNW1Lzpppvq1Gd97rnnTIsWLWwHT6dOME95DyHCkJ2KcvD333/boGWTTTaxpYcQIrEpZk044RubQPBGrCZbF7GcQOXMM880HTt2tCVZllhiCbs99kVQQZkYApBTTz21ThYRg0Lsi8EfApwDDjjA2jSiJIIl66I8//zz6e0JosgOxkbZ7rDDDjOTJk2a7zrOPvtsG6xg45Tq4P+vu+66ktxDURnQfmLLbdq0sWVdsBUEc8fHH39sPvvsMzNkyBBzzDHH2MAY28VeDzroIGvT/BwG+2SwZo899pjvO+z3oosussfnHdh4443t8WmjRcOFdpI2h2d/3333WbtiwJp2dPTo0eaRRx4xL730krVD2k/aMfrk/fff3/z555/W7hiM4cO2lHtjIJGZa0888YRt/xBvEG2igp+AQHXSSSeZ4cOHW3vnGC+++GJ6m3vuuccO1uMjtG3b1rbH1CnmHUGcYuCdc8rVT4jKRTYqG00CslPZqRDVjoR1kYhMYFhwwQUzfr/wwgvbf1dfffV09uP7779vO71ffvnFTJw40Xba1FRFsHzqqafMoosuakeml19+edth0nkjODnoVBEyl1tuOZu9yc9jx44tyfWKZCI7FeWAAZijjjrK1vKn7BCBCrMgvvrqK/s9gQiBzoorrmgXbOzUqZMVKJs3b25at25tZ1dQksXNsiBLnSyjZZdd1g7sTJgwwQYXjj333NPuC7GchU/XWGMNG6zwu5133tn07dvX/O9/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IYQQQgghhBBCiAhIWBdCCCFCeOedd8xqq61WtP2zb45RKE8++aTZeuutTdeuXc1ee+1lxowZk3X7559/3h7T/xx33HEmaYwbN84uahnGgAEDzH777ZfXvmbOnGkeeuihWM7rs88+Mx988EEs+xKioZKt3Yvy7hab2tpac9VVV5lNNtnErLPOOub44483EydOzKtN2W677XK27Uwa5no33XRTs95665kTTjjBTJo0Kf19sK3ecMMNzdlnn23++eefrPvdYostzGOPPWbiWFB42LBhphhMnTrVDB061FQqDdVGx48fb/v89ddf3y4Ufdlll5kZM2YUvH9szbfR7t272/1jO9ng/nEfK9mO4vQN4qKh2uUPP/xgDj74YLvtZpttZhcuz0awbXQfZwvY9JlnnmntsUePHubOO++cz693nzXWWMPaca5j/vTTT3Z7/q1kXzGXfyyEKA4S1qsEHJyLL77YbL755mattdYy2267rbnjjjvM7NmzS3oeBBG33Xab7cDWXXddc8ABB5ivv/46FhHIdXiZPu+9957d5ptvvjEHHXSQPTbncMstt5g5c+bY7whC/L/p3LmzrfOay2GLU3h766237DkWgzg78WqwJwf2wQJ6O+ywg71WrplrnzJlSsHnja1xznHy8ccfW2GVc0RoDdrtyy+/bHbccUfrtG6//fbmxRdfTH93+umn17kn7CMfkTYuJ57nOHjwYFMsEAZyBXlJ5P3337d1qI866ijzzDPP2Gd76KGHZhVdeD+w4ddffz39wZ6TBgFTLvvMF+4dfUEcHH300eb777+PZV9CiPKCf/Hss8/a2v8PP/yw+fPPP82pp56a9W8QdE466STz1Vdf5dz/kCFDzCOPPGIFKPrA33//3bbpwX6WdvrVV1+17RTtXv/+/U0p4LyKJdDcfffd5tFHHy3KvquJKDaKr4XPO23aNGtv1157rRk5cqT92/rsn/7Y2eh9991ntznttNNMKSimHcXpG1QbUeySOOuwww4z7dq1M48//ri54IILzM0332yeeuqp0P37PiyfQw45xCy11FJmyy23tN/TRo4dO9bGb+edd54ZOHCgGT58eMZ9vPDCC9aGb7rpJnvOpaCYvmKc/rEQIn8krFcBZCfsvvvu5rvvvjNXXnmlefrpp22DjlN15JFHpoXlUvDggw/aUeNzzjnHOkJLL720FYJw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9dapK664ItWzZ8/UQQcdlBo/fnyqpqYmteaaa6auu+669N/16tUrdeyxx9bZ19ixY1P77LOP3bZHjx52+9raWvvdDTfckOrbt2+d7TfffPPUo48+mvr9999Tq666asYP38Npp51W5++//PLLVL9+/VJrr712apNNNkkNGDAgNWfOnKzXevDBB6euuuqq+X5/zjnnZDw25wecg//7Tp06pTbccMPU2Wefnfrjjz9Cj/f222/b7YPXG/b90KFD7X3l/vHv008/nf7u6quvts/nkksusftw5+aYPHly6ogjjrDb8OxGjhxp9z1u3Dj7Pc/xqKOOSq211lr2fvE83P0aNGiQvY9HH310qr5Ukz1Nnz7dngfnzrVyfJ7PlClT0tvMnj07dc0116Q23njjVNeuXVMHHHBA6osvvkh/P2nSJHvfeS69e/e2x/WfbdR7kImvv/7aHpdrY98PPfRQ+jueT6b7xP1x98n//RprrJHaYostUjfddJO9tjD8c8MGfVsMfs/19O/f3953rnOvvfZKffLJJ/a7GTNmpA488MBU586dU88995w9H3duDrbdeeed7Tb87ZAhQ+rcww8++CC122672e+32WYbux/HKaecYn9/11135byPQgghhBBCCCGEEPnQiP/EKdSLZEGmMYvRMUIcXDBPiKjInoQQQgghhBBCCCFENSBhXQghhBBCCCGEEEIIIYSIgGqsCyGEEEIIIYQQQgghhBARkLAuhBBCCCGEEEIIIYQQQkRAwroQQgghhBBCCCGEEEIIEQEJ60IIIYQQQgghhBBCCCFEBCSsCyGEEEIIIYQQQgghhBARkLAuhBBCCCGEEEIIIYQQQkRAwroQQgghhBBCCCGEEEIIEQEJ60IIIYQQQgghhBBCCCFEBCSsCyGEEEIIIYQQQgghhBARkLAuhBBCCCGEEEIIIYQQQpj8+X9tyqVsNBlimgAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 1500x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas as pd\n",
"from matplotlib.legend_handler import HandlerTuple # Added import\n",
"\n",
"# Assuming pivot_df is your original dataframe\n",
"models = pivot_df[\"model_id\"].unique()\n",
"sources = pivot_df[\"source\"].unique()\n",
"\n",
"# Create figure and axis\n",
"plt.style.use(\"seaborn-v0_8-white\")\n",
"fig, ax = plt.subplots(figsize=(15, 6))\n",
"\n",
"# Set the width of each bar group and positions of the bars\n",
"width = 0.15 # width of each bar\n",
"spacing = 0.02 # space between bars within a group\n",
"group_spacing = 0.2 # space between model groups\n",
"\n",
"# Calculate positions for the bars\n",
"num_sources = len(sources)\n",
"total_width_per_group = (width + spacing) * num_sources * 2 # *2 for agent and vanilla\n",
"x = np.arange(len(models)) * (total_width_per_group + group_spacing)\n",
"\n",
"# Plot bars for each source\n",
"for i, source in enumerate(sources):\n",
" source_data = pivot_df[pivot_df[\"source\"] == source]\n",
" agent_scores = [\n",
" source_data[source_data[\"model_id\"] == model][\"code\"].values[0]\n",
" if len(source_data[source_data[\"model_id\"] == model]) > 0\n",
" else np.nan\n",
" for model in models\n",
" ]\n",
" vanilla_scores = [\n",
" source_data[source_data[\"model_id\"] == model][\"vanilla\"].values[0]\n",
" if len(source_data[source_data[\"model_id\"] == model]) > 0\n",
" else np.nan\n",
" for model in models\n",
" ]\n",
"\n",
" # Position calculation for each pair of bars\n",
" pos = x + i * (width * 2 + spacing)\n",
"\n",
" agent_bars = ax.bar(pos, agent_scores, width, label=f\"{source} (Agent)\", alpha=0.8)\n",
" vanilla_bars = ax.bar(\n",
" pos + width * 0.6,\n",
" vanilla_scores,\n",
" width,\n",
" hatch=\"////\",\n",
" alpha=0.5,\n",
" hatch_linewidth=2,\n",
" label=f\"{source} (Vanilla)\",\n",
" color=\"white\",\n",
" edgecolor=agent_bars[0].get_facecolor(),\n",
" )\n",
"\n",
"# Customize the plot\n",
"ax.set_ylabel(\"Score\")\n",
"ax.set_title(\"Model Performance Comparison\")\n",
"\n",
"# Set x-axis ticks in the middle of each group\n",
"group_centers = x + (total_width_per_group - spacing) / 2\n",
"ax.set_xticks(group_centers)\n",
"\n",
"# Wrap long model names to prevent overlap\n",
"wrapped_labels = [\"\\n\".join(model.split(\"/\")) for model in models]\n",
"ax.set_xticklabels(wrapped_labels, rotation=0, ha=\"center\")\n",
"\n",
"# Modify legend to combine agent and vanilla entries\n",
"handles, labels = ax.get_legend_handles_labels()\n",
"unique_sources = sources\n",
"legend_elements = [\n",
" (handles[i * 2], handles[i * 2 + 1], labels[i * 2].replace(\" (Agent)\", \"\"))\n",
" for i in range(len(unique_sources))\n",
"]\n",
"custom_legend = ax.legend(\n",
" [\n",
" (agent_handle, vanilla_handle)\n",
" for agent_handle, vanilla_handle, _ in legend_elements\n",
" ],\n",
" [label for _, _, label in legend_elements],\n",
" handler_map={tuple: HandlerTuple(ndivide=None)},\n",
" bbox_to_anchor=(1.05, 1),\n",
" loc=\"upper left\",\n",
")\n",
"\n",
"ax.yaxis.grid(True, linestyle=\"--\", alpha=0.3)\n",
"ax.set_ylim(bottom=0)\n",
"plt.tight_layout()\n",
"ax.spines[\"top\"].set_visible(False)\n",
"ax.spines[\"right\"].set_visible(False)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'formatted_df' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[12], line 45\u001b[0m\n\u001b[1;32m 41\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m mathjax_table\n\u001b[1;32m 44\u001b[0m \u001b[38;5;66;03m# Usage (after running your previous data processing code):\u001b[39;00m\n\u001b[0;32m---> 45\u001b[0m mathjax_table \u001b[38;5;241m=\u001b[39m create_mathjax_table(pivot_df, \u001b[43mformatted_df\u001b[49m)\n\u001b[1;32m 46\u001b[0m \u001b[38;5;28mprint\u001b[39m(mathjax_table)\n",
"\u001b[0;31mNameError\u001b[0m: name 'formatted_df' is not defined"
]
}
],
"source": [
"def create_mathjax_table(pivot_df, formatted_df):\n",
" # Start the matrix environment with 4 columns\n",
" # l for left-aligned model and task, c for centered numbers\n",
" mathjax_table = \"\\\\begin{array}{llcc}\\n\"\n",
" mathjax_table += (\n",
" \"\\\\text{Model} & \\\\text{Task} & \\\\text{Agent} & \\\\text{Vanilla} \\\\\\\\\\n\"\n",
" )\n",
" mathjax_table += \"\\\\hline\\n\"\n",
"\n",
" # Sort the DataFrame by model_id and source\n",
" formatted_df = formatted_df.sort_values([\"model_id\", \"source\"])\n",
"\n",
" current_model = None\n",
" for _, row in formatted_df.iterrows():\n",
" model = row[\"model_id\"]\n",
" source = row[\"source\"]\n",
"\n",
" # Add a horizontal line between different models\n",
" if current_model is not None and current_model != model:\n",
" mathjax_table += \"\\\\hline\\n\"\n",
"\n",
" # Format model name\n",
" model_display = model.replace(\"_\", \"\\\\_\")\n",
" if \"Qwen\" in model or \"anthropic\" in model:\n",
" model_display = f\"\\\\textit{{{model_display}}}\"\n",
"\n",
" # If it's the same model as previous row, use empty space\n",
" if current_model == model:\n",
" model_display = \"\\\\;\"\n",
"\n",
" # Add the data row\n",
" mathjax_table += (\n",
" f\"{model_display} & {source} & {row['agent']} & {row['vanilla']} \\\\\\\\\\n\"\n",
" )\n",
"\n",
" current_model = model\n",
"\n",
" mathjax_table += \"\\\\hline\\n\"\n",
" mathjax_table += \"\\\\end{array}\"\n",
"\n",
" return mathjax_table\n",
"\n",
"\n",
"# Usage (after running your previous data processing code):\n",
"mathjax_table = create_mathjax_table(pivot_df, formatted_df)\n",
"print(mathjax_table)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "compare-agents",
"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.12.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}