Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
import glob | |
import json | |
import argparse | |
import sys | |
from dataclasses import dataclass | |
from enum import Enum | |
import csv | |
class Task: | |
benchmark: str | |
metric: str | |
col_name: str | |
type: str | |
baseline: float = 0.0 | |
from src.about import Tasks, get_tasks | |
g_tasks, mc_tasks, rag_tasks, all_tasks = get_tasks() | |
if __name__ == '__main__': | |
parser = argparse.ArgumentParser(description='Calculate average scores from JSON with scores') | |
parser.add_argument('json', type=str, help='Path to JSON file with scores') | |
parser.add_argument('--header', action='store_true', help='Print header') | |
parser.add_argument('-d', '--delimiter', type=str, default=',', help='Delimiter for CSV output') | |
args = parser.parse_args() | |
if args.json.endswith('.json'): | |
paths=[args.json] | |
else: | |
paths=glob.glob(args.json + '/**/results*.json', recursive=True) | |
print(paths) | |
# paths=[args.json] | |
results = {} | |
for path in paths: | |
print(path) | |
data = json.load(open(path)) | |
for task in Tasks: | |
try: | |
# print(task.value.benchmark, task.value.baseline) | |
# print(data['results'][task.value.benchmark], data['results'][task.value.benchmark][task.value.metric]) | |
results[task.value.benchmark] = data['results'][task.value.benchmark][task.value.metric] | |
if 'perplexity' not in task.value.metric and 'eqbench' not in task.value.metric: | |
results[task.value.benchmark] *= 100 | |
# if 'perplexity' in task.metric or 'eqbench' in task.metric: | |
# mean_acc = np.mean(accs) | |
# else: | |
# mean_acc = np.mean(accs) * 100.0 | |
except KeyError: | |
print(f'No data for {task.value.benchmark}', file=sys.stderr) | |
# results=data['results'] | |
print(results) | |
all_tasks_wo_polqa = [task for task in all_tasks if 'polqa' not in task] | |
baselines = {task.value.benchmark: task.value.baseline * 100 for task in Tasks} | |
print(baselines) | |
average_old = sum([v for task, v in results.items() if v is not None and task in all_tasks_wo_polqa]) / len( | |
all_tasks_wo_polqa) | |
average = sum( | |
[(results.get(task, 0) - baselines.get(task, 0)) / (100 - baselines.get(task, 0)) * 100 for task in | |
all_tasks]) / len(all_tasks) | |
for task in all_tasks: | |
print (task, results.get(task, 0), baselines.get(task, 0)) | |
average_g = sum( | |
[(results.get(task, 0) - baselines.get(task, 0)) / (100 - baselines.get(task, 0)) * 100 for task in | |
g_tasks]) / len(g_tasks) | |
average_mc = sum( | |
[(results.get(task, 0) - baselines.get(task, 0)) / (100 - baselines.get(task, 0)) * 100 for task in | |
mc_tasks]) / len(mc_tasks) | |
average_rag = sum( | |
[(results.get(task, 0) - baselines.get(task, 0)) / (100 - baselines.get(task, 0)) * 100 for task in | |
rag_tasks]) / len(rag_tasks) | |
# for task in Tasks: | |
# print(task.value.benchmark, task.value.baseline) | |
# print(data['results'][task.value.benchmark]) | |
# print(f'Average: {average:.2f}') | |
# print(f'Average generate: {average_g:.2f}') | |
# print(f'Average multiple choice: {average_mc:.2f}') | |
# print(f'Average old: {average_old:.2f}') | |
row = [args.json, None, average, average_old, average_g, average_mc, average_rag] | |
for task in Tasks: | |
row.append(results.get(task.value.benchmark, None)) | |
# printe headers | |
if args.header: | |
csv.writer(sys.stdout, delimiter=args.delimiter).writerow(['file', 'name', 'average', 'average_old', 'average_g', 'average_mc'] + [task.value.benchmark for task in Tasks]) | |
# print(row) | |
csv.writer(sys.stdout, delimiter=args.delimiter).writerow(row) | |