sora 4f33521567 chore: upgrade vendored evalscope to upstream v1.9.1 and reapply local patches
- Upgrade evalscope/evalscope from dev snapshot to upstream v1.9.1
- New benchmarks available: deep_swe, skillsbench, toolathlon,
  terminal_bench_v2_1, swe_bench_pro, browsecomp, gdpval, mcp_atlas, etc.
- Reapply local patches:
  - api/model/generate_config.py: add max_completion_tokens
  - api/model/model.py: treat EMPTY api_key as unset
  - models/utils/openai.py: pass max_completion_tokens; handle choice.index=None
  - benchmarks/swe_bench/utils.py: guard None instance_id/client
  - api/evaluator/cache.py: remove model_name from cache/report paths
2026-08-03 05:28:50 +00:00

223 lines
8.1 KiB
Python

# Copyright (c) Alibaba, Inc. and its affiliates.
import inspect
import os
from dataclasses import dataclass
from typing import List, Optional, Union
from evalscope.constants import HubType
from evalscope.utils.logger import get_logger
logger = get_logger()
@dataclass(frozen=True)
class DatasetHub:
"""Small hub handle shared by dataset loaders and benchmark-specific media resolvers."""
data_id_or_path: str
data_source: Optional[str] = HubType.MODELSCOPE
revision: Optional[str] = None
trust_remote: bool = True
force_redownload: bool = False
cache_dir: Optional[str] = None
def load(self, split: str, subset: str = 'default', **kwargs):
return load_dataset_from_hub(
data_id_or_path=self.data_id_or_path,
split=split,
subset=subset,
data_source=self.data_source,
version=self.revision,
trust_remote=self.trust_remote,
force_redownload=self.force_redownload,
**kwargs,
)
def download_file(self, file_path: str) -> str:
return download_dataset_file(
data_id_or_path=self.data_id_or_path,
file_path=file_path,
data_source=self.data_source,
revision=self.revision,
force_redownload=self.force_redownload,
cache_dir=self.cache_dir,
)
def download_snapshot(
self,
allow_file_pattern: Optional[Union[str, List[str]]] = None,
ignore_file_pattern: Optional[Union[str, List[str]]] = None,
) -> str:
return download_dataset_snapshot(
data_id_or_path=self.data_id_or_path,
data_source=self.data_source,
revision=self.revision,
force_redownload=self.force_redownload,
cache_dir=self.cache_dir,
allow_file_pattern=allow_file_pattern,
ignore_file_pattern=ignore_file_pattern,
)
def _resolve_data_source(data_id_or_path: str, data_source: Optional[str]) -> str:
if data_source == HubType.LOCAL or os.path.exists(data_id_or_path):
return HubType.LOCAL
return data_source or HubType.MODELSCOPE
def load_dataset_from_hub(
data_id_or_path: str,
split: str,
subset: str = 'default',
data_source: Optional[str] = HubType.MODELSCOPE,
version: Optional[str] = None,
trust_remote: bool = True,
force_redownload: bool = False,
**kwargs,
):
"""Load a dataset split from ModelScope, Hugging Face, or a local dataset path."""
import datasets
from datasets import DownloadMode as HFDownloadMode
from modelscope import MsDataset
from modelscope.utils.constant import DownloadMode as MSDownloadMode
data_source = _resolve_data_source(data_id_or_path, data_source)
hf_download_mode = None if not force_redownload else HFDownloadMode.FORCE_REDOWNLOAD
ms_download_mode = None if not force_redownload else MSDownloadMode.FORCE_REDOWNLOAD
if data_source == HubType.MODELSCOPE:
load_kwargs = dict(
dataset_name=data_id_or_path,
split=split,
subset_name=subset if subset != 'default' else None,
trust_remote_code=trust_remote,
**kwargs,
)
if version:
load_kwargs['version'] = version
if ms_download_mode:
load_kwargs['download_mode'] = ms_download_mode
dataset = MsDataset.load(**load_kwargs)
if not isinstance(dataset, datasets.Dataset):
dataset = dataset.to_hf_dataset()
return dataset
if data_source in [HubType.HUGGINGFACE, HubType.LOCAL]:
# Hugging Face datasets may fail on local mirrors that contain a stale dataset_infos.json.
dataset_infos_path = os.path.join(data_id_or_path, 'dataset_infos.json')
if os.path.exists(dataset_infos_path):
logger.info(f'Removing dataset_infos.json file at {dataset_infos_path} to avoid datasets errors.')
os.remove(dataset_infos_path)
load_kwargs = dict(
path=data_id_or_path,
name=subset if subset != 'default' else None,
split=split,
revision=version,
download_mode=hf_download_mode,
**kwargs,
)
if 'trust_remote_code' in inspect.signature(datasets.load_dataset).parameters:
load_kwargs['trust_remote_code'] = trust_remote
return datasets.load_dataset(**load_kwargs)
raise ValueError(f'Unsupported dataset hub: {data_source}')
def download_dataset_file(
data_id_or_path: str,
file_path: str,
data_source: Optional[str] = HubType.MODELSCOPE,
revision: Optional[str] = None,
force_redownload: bool = False,
cache_dir: Optional[str] = None,
) -> str:
"""Download or resolve a single file from a dataset hub."""
data_source = _resolve_data_source(data_id_or_path, data_source)
if data_source == HubType.LOCAL:
root_dir = os.path.realpath(data_id_or_path)
resolved_path = os.path.realpath(os.path.join(root_dir, file_path))
if os.path.commonpath([root_dir, resolved_path]) != root_dir:
raise ValueError(f'Invalid dataset file path: {file_path}')
if not os.path.exists(resolved_path):
raise FileNotFoundError(f'Dataset file {file_path} was not found in {root_dir}.')
return resolved_path
if data_source == HubType.HUGGINGFACE:
from huggingface_hub import hf_hub_download
return hf_hub_download(
repo_id=data_id_or_path,
filename=file_path,
repo_type='dataset',
revision=revision,
cache_dir=cache_dir,
force_download=force_redownload,
)
if data_source == HubType.MODELSCOPE:
from modelscope import dataset_snapshot_download
download_kwargs = {'allow_file_pattern': file_path}
if revision:
download_kwargs['revision'] = revision
if cache_dir:
download_kwargs['cache_dir'] = cache_dir
snapshot_dir = dataset_snapshot_download(data_id_or_path, **download_kwargs)
resolved_path = os.path.join(snapshot_dir, file_path)
if not os.path.exists(resolved_path):
raise FileNotFoundError(f'Dataset file {file_path} was not found in {snapshot_dir}.')
return resolved_path
raise ValueError(f'Unsupported dataset hub: {data_source}')
def download_dataset_snapshot(
data_id_or_path: str,
data_source: Optional[str] = HubType.MODELSCOPE,
revision: Optional[str] = None,
force_redownload: bool = False,
cache_dir: Optional[str] = None,
allow_file_pattern: Optional[Union[str, List[str]]] = None,
ignore_file_pattern: Optional[Union[str, List[str]]] = None,
) -> str:
"""Download or resolve a dataset snapshot root from a supported hub."""
data_source = _resolve_data_source(data_id_or_path, data_source)
if data_source == HubType.LOCAL:
root_dir = os.path.realpath(data_id_or_path)
if not os.path.isdir(root_dir):
raise FileNotFoundError(f'Local dataset directory was not found: {data_id_or_path}')
return root_dir
if data_source == HubType.HUGGINGFACE:
from huggingface_hub import snapshot_download
return snapshot_download(
repo_id=data_id_or_path,
repo_type='dataset',
revision=revision,
cache_dir=cache_dir,
force_download=force_redownload,
allow_patterns=allow_file_pattern,
ignore_patterns=ignore_file_pattern,
)
if data_source == HubType.MODELSCOPE:
from modelscope import dataset_snapshot_download
download_kwargs = {}
if revision:
download_kwargs['revision'] = revision
if cache_dir:
download_kwargs['cache_dir'] = cache_dir
if allow_file_pattern is not None:
download_kwargs['allow_file_pattern'] = allow_file_pattern
if ignore_file_pattern is not None:
download_kwargs['ignore_file_pattern'] = ignore_file_pattern
return dataset_snapshot_download(data_id_or_path, **download_kwargs)
raise ValueError(f'Unsupported dataset hub: {data_source}')