55from pathlib import Path
66import sys
77import os
8+ import shutil
89
910def main ():
1011 # Установка кодировки вывода в UTF-8
@@ -16,9 +17,8 @@ def main():
1617 formatter_class = argparse .RawDescriptionHelpFormatter ,
1718 epilog = """
1819Примеры использования:
19- python runner.py # Запустить оценку на всех датасетах (по умолчанию)
20+ python runner.py # Запустить оценку (по умолчанию)
2021 python runner.py --dataset russianmath # Запустить только на датасете RussianMath
21- python runner.py --dataset mathdemon # Запустить только на датасете MathDemon_Demidovich
2222 python runner.py --no-cache # Игнорировать кэш и переоценить все модели
2323 python runner.py --max-workers 8 # Использовать 8 параллельных потоков
2424 """
@@ -29,8 +29,8 @@ def main():
2929 help = 'Путь к файлу конфигурации (по умолчанию: configs/run.yaml)' )
3030 parser .add_argument ('--no-cache' , action = 'store_true' ,
3131 help = 'Игнорировать кэш и переоценить все модели' )
32- parser .add_argument ('--dataset' , choices = ['all' , 'russianmath' , 'mathdemon' ], default = 'all' ,
33- help = 'Выбор датасета для оценки: all (все), russianmath, mathdemon (по умолчанию: all)' )
32+ parser .add_argument ('--dataset' , choices = ['all' , 'russianmath' ], default = 'all' ,
33+ help = 'Выбор датасета для оценки: all (все), russianmath (по умолчанию: all)' )
3434 args = parser .parse_args ()
3535
3636 # Загружаем конфиг
@@ -58,39 +58,63 @@ def main():
5858 }
5959
6060 # Запуск оценки в зависимости от выбранного датасета
61- if args .dataset == 'all' :
62- print ("\n Запуск оценки на всех датасетах ( RussianMath и MathDemon_Demidovich) " )
61+ if args .dataset == 'all' or args . dataset == 'russianmath' :
62+ print ("\n Запуск оценки на датасете RussianMath" )
6363 leaderboard .evaluate_all_models (system_prompts )
64- leaderboard .evaluate_math_demon_subsets ()
65- elif args .dataset == 'russianmath' :
66- print ("\n Запуск оценки только на датасете RussianMath" )
67- leaderboard .evaluate_all_models (system_prompts )
68- elif args .dataset == 'mathdemon' :
69- print ("\n Запуск оценки только на датасете MathDemon_Dемидович" )
70- leaderboard .evaluate_math_demon_subsets ()
7164
72- # Вычисляем комбинированные оценки для моделей
73- if args .dataset == 'all' :
74- print ("\n Вычисление комбинированной оценки по всем датасетам" )
75- leaderboard .calculate_combined_scores ()
65+ # Получаем ширину терминала
66+ terminal_width = shutil .get_terminal_size ().columns
7667
77- # Генерируем и выводим лидерборд
78- TERMINAL_WIDTH = 100 # Примерная ширина терминала
68+ # Генерируем и выводим лидерборд с корректным форматированием
7969 header = " LEADERBOARD "
80- padding = "=" * ((TERMINAL_WIDTH - len (header )) // 2 )
81- print (f"\n { padding } { header } { padding } \n " )
70+ padding = "=" * ((terminal_width - len (header )) // 2 )
71+ print (f"\n { padding } { header } { padding } " )
8272
73+ # Генерируем markdown таблицу
8374 md = leaderboard .generate_markdown ()
8475
85- # Выводим упрощенную версию лидерборда в консоль
76+ # Выводим красиво форматированную таблицу
8677 lines = md .split ('\n ' )
87- for line in lines :
88- if line .startswith ('|' ):
89- # Убираем ссылки [Details](path) из вывода в консоль
90- cleaned_line = line .split ('|' )
91- if len (cleaned_line ) > 5 : # Проверяем, что это строка с данными
92- cleaned_line = cleaned_line [:- 1 ] # Убираем последнюю колонку с ссылками
93- print ('|' .join (cleaned_line ))
78+ table_lines = [line for line in lines if line .startswith ('|' )]
79+
80+ if len (table_lines ) >= 2 : # Есть заголовок и разделитель
81+ header_line = table_lines [0 ]
82+ separator_line = table_lines [1 ]
83+ data_lines = table_lines [2 :] if len (table_lines ) > 2 else []
84+
85+ # Анализируем ширину каждого столбца из заголовка
86+ columns = header_line .split ('|' )
87+ columns = [col .strip () for col in columns if col ] # Убираем пустые элементы
88+
89+ # Находим максимальную ширину для каждого столбца
90+ column_widths = [len (col ) for col in columns ]
91+
92+ # Учитываем ширину данных в каждой строке
93+ for line in data_lines :
94+ cells = line .split ('|' )
95+ cells = [cell .strip () for cell in cells if cell ]
96+ for i , cell in enumerate (cells ):
97+ if i < len (column_widths ):
98+ column_widths [i ] = max (column_widths [i ], len (cell ))
99+
100+ # Форматируем и выводим заголовок
101+ formatted_header = '| ' + ' | ' .join (f"{ col :<{column_widths [i ]}} " for i , col in enumerate (columns )) + ' |'
102+ print (f"\n { formatted_header } " )
103+
104+ # Форматируем и выводим разделитель
105+ formatted_separator = '|-' + '-|-' .join ('-' * width for width in column_widths ) + '-|'
106+ print (formatted_separator )
107+
108+ # Форматируем и выводим данные
109+ for line in data_lines :
110+ cells = line .split ('|' )
111+ cells = [cell .strip () for cell in cells if cell ]
112+ formatted_line = '| ' + ' | ' .join (f"{ cell :<{column_widths [i ]}} " for i , cell in enumerate (cells )) + ' |'
113+ print (formatted_line )
114+ else :
115+ # Если не смогли обработать таблицу, просто выводим как есть
116+ for line in table_lines :
117+ print (line )
94118
95119 print (f"\n Детальные результаты сохранены в: { leaderboard .output_dir } " )
96120
0 commit comments