from pathlib import Path from typing import List import typer from mmengine.config import Config from typer import Option from opencompass.registry import build_from_cfg from opencompass.summarizers.multi_model import MultiModelSummarizer app = typer.Typer(add_completion=False, pretty_exceptions_show_locals=False) @app.command(help='Visualize the results of multiple models') def main( cfg_paths: List[Path] = Option( ..., help='The path to the config file of the task', exists=True, ), work_dirs: List[Path] = Option( ..., help='The work dirs for the task(named by timestamp), ' 'need to ensure the order is the same as cfg_paths.', exists=True, ), group: str = Option(None, help='If not None, show the accuracy in the group.'), ): assert len(cfg_paths) == len(work_dirs) cfgs = [Config.fromfile(it, format_python_code=False) for it in cfg_paths] multi_models_summarizer = None for cfg, work_dir in zip(cfgs, work_dirs): cfg['work_dir'] = work_dir summarizer_cfg = cfg.get('summarizer', {}) summarizer_cfg['type'] = MultiModelSummarizer summarizer_cfg['config'] = cfg summarizer = build_from_cfg(summarizer_cfg) if multi_models_summarizer is None: multi_models_summarizer = summarizer else: multi_models_summarizer.merge(summarizer) multi_models_summarizer.summarize() if group: multi_models_summarizer.show_group(group) if __name__ == '__main__': app()