222 lines
7.2 KiB
Python
222 lines
7.2 KiB
Python
# Copyright (c) Alibaba, Inc. and its affiliates.
|
|
from dotenv import dotenv_values
|
|
|
|
from tests.utils import test_level_list
|
|
|
|
env = dotenv_values('.env')
|
|
|
|
import os
|
|
import unittest
|
|
|
|
from evalscope.constants import EvalType, JudgeStrategy
|
|
from evalscope.utils.logger import get_logger
|
|
from tests.common import TestBenchmark
|
|
|
|
os.environ['EVALSCOPE_LOG_LEVEL'] = 'DEBUG'
|
|
|
|
logger = get_logger()
|
|
|
|
|
|
class TestRunCustom(TestBenchmark):
|
|
def setUp(self):
|
|
"""Setup common test configuration."""
|
|
self.base_config = {
|
|
'api_url': 'https://dashscope.aliyuncs.com/compatible-mode/v1',
|
|
'api_key': env.get('DASHSCOPE_API_KEY'),
|
|
'eval_type': EvalType.OPENAI_API,
|
|
'eval_batch_size': 10,
|
|
'debug': True,
|
|
'stream': True,
|
|
'generation_config': {
|
|
'temperature': 0,
|
|
'n': 1,
|
|
'max_tokens': 4096,
|
|
},
|
|
'ignore_errors': False,
|
|
'judge_model_args': {
|
|
'model_id': 'qwen-plus',
|
|
'api_url': 'https://dashscope.aliyuncs.com/compatible-mode/v1',
|
|
'api_key': env.get('DASHSCOPE_API_KEY'),
|
|
'generation_config': {
|
|
'temperature': 0.0,
|
|
'max_tokens': 4096
|
|
},
|
|
},
|
|
'judge_strategy': JudgeStrategy.LLM,
|
|
}
|
|
|
|
|
|
def test_run_custom_task_mcq(self):
|
|
"""Test custom MCQ dataset with local checkpoint."""
|
|
self._run_dataset_test(
|
|
dataset_name='general_mcq',
|
|
dataset_args={
|
|
'local_path': 'custom_eval/text/mcq',
|
|
'subset_list': ['example'],
|
|
'query_template': 'Question: {question}\n{choices}\nAnswer: {answer}'
|
|
},
|
|
model='Qwen/Qwen3-0.6B',
|
|
model_args={'precision': 'torch.float16'},
|
|
generation_config={
|
|
'max_tokens': 512,
|
|
'extra_body': {'enable_thinking': True},
|
|
},
|
|
eval_batch_size=5,
|
|
limit=10,
|
|
)
|
|
|
|
|
|
def test_run_custom_task_qa(self):
|
|
"""Test custom QA dataset with local checkpoint."""
|
|
self._run_dataset_test(
|
|
dataset_name='general_qa',
|
|
dataset_args={
|
|
'local_path': 'custom_eval/text/qa',
|
|
'subset_list': ['example']
|
|
},
|
|
model='Qwen/Qwen3-0.6B',
|
|
model_args={'precision': 'torch.float16'},
|
|
generation_config={
|
|
'max_tokens': 512,
|
|
'extra_body': {'enable_thinking': True},
|
|
},
|
|
eval_batch_size=5,
|
|
limit=10,
|
|
)
|
|
|
|
|
|
def test_run_local_dataset(self):
|
|
"""Test trivia_qa with local dataset."""
|
|
self._run_dataset_test(
|
|
dataset_name='trivia_qa',
|
|
dataset_args={
|
|
'dataset_id': 'data/data/trivia_qa',
|
|
},
|
|
model='qwen-plus',
|
|
limit=5,
|
|
)
|
|
|
|
|
|
def test_run_general_no_answer(self):
|
|
"""Test general_qa without reference answers using LLM judge."""
|
|
self._run_dataset_test(
|
|
dataset_name='general_qa',
|
|
dataset_args={
|
|
'dataset_id': 'custom_eval/text/qa',
|
|
'subset_list': ['arena'],
|
|
},
|
|
model='qwen2.5-7b-instruct',
|
|
limit=10,
|
|
)
|
|
|
|
def test_run_general_no_answer_with_judge(self):
|
|
self._run_dataset_test(
|
|
dataset_name='general_qa',
|
|
dataset_args={
|
|
'dataset_id': 'custom_eval/text/qa',
|
|
'subset_list': ['arena'],
|
|
},
|
|
model='qwen2.5-7b-instruct',
|
|
limit=10,
|
|
judge_model_args={
|
|
'model_id': 'qwen2.5-72b-instruct',
|
|
'api_url': 'https://dashscope.aliyuncs.com/compatible-mode/v1',
|
|
'api_key': env.get('DASHSCOPE_API_KEY'),
|
|
'generation_config': {
|
|
'temperature': 0.0,
|
|
'max_tokens': 4096
|
|
},
|
|
'score_type': 'numeric',
|
|
},
|
|
eval_batch_size=5,
|
|
judge_strategy=JudgeStrategy.LLM,
|
|
)
|
|
|
|
def test_run_general_with_answer(self):
|
|
"""Test general_qa with reference answers using LLM recall judge."""
|
|
self._run_dataset_test(
|
|
dataset_name='general_qa',
|
|
dataset_args={
|
|
'dataset_id': 'custom_eval/text/qa',
|
|
'subset_list': ['example'],
|
|
},
|
|
model='qwen-plus',
|
|
limit=10,
|
|
judge_model_args={
|
|
'model_id': 'qwen2.5-72b-instruct',
|
|
'api_url': 'https://dashscope.aliyuncs.com/compatible-mode/v1',
|
|
'api_key': env.get('DASHSCOPE_API_KEY'),
|
|
'generation_config': {
|
|
'temperature': 0.0,
|
|
'max_tokens': 4096
|
|
},
|
|
'score_type': 'pattern',
|
|
},
|
|
eval_batch_size=1,
|
|
judge_strategy=JudgeStrategy.LLM,
|
|
)
|
|
|
|
|
|
def test_run_general_arena(self):
|
|
"""Test general_arena for model comparison."""
|
|
self._run_dataset_test(
|
|
dataset_name='general_arena',
|
|
dataset_args={
|
|
'extra_params': {
|
|
'models': [
|
|
{
|
|
'name': 'qwen2.5-7b',
|
|
'report_path': 'outputs/20250819_165034/reports/qwen2.5-7b-instruct'
|
|
},
|
|
{
|
|
'name': 'qwen2.5-72b',
|
|
'report_path': 'outputs/20250819_164926/reports/qwen2.5-72b-instruct'
|
|
}
|
|
],
|
|
'baseline': 'qwen2.5-72b'
|
|
}
|
|
},
|
|
model_id='Arena',
|
|
limit=10,
|
|
judge_model_args={
|
|
'model_id': 'qwen-plus',
|
|
'api_url': 'https://dashscope.aliyuncs.com/compatible-mode/v1',
|
|
'api_key': env.get('DASHSCOPE_API_KEY'),
|
|
'generation_config': {
|
|
'temperature': 0.0,
|
|
'max_tokens': 8000
|
|
},
|
|
},
|
|
eval_batch_size=5,
|
|
)
|
|
|
|
|
|
def test_run_general_vqa(self):
|
|
"""Test general_vqa adapter with OpenAI-compatible message format for multimodal QA."""
|
|
self._run_dataset_test(
|
|
dataset_name='general_vqa',
|
|
dataset_args={
|
|
'local_path': 'custom_eval/multimodal/vqa',
|
|
'subset_list': ['example_openai'],
|
|
},
|
|
model='qwen-vl-plus',
|
|
generation_config={'max_tokens': 512},
|
|
eval_batch_size=2,
|
|
limit=5,
|
|
)
|
|
|
|
|
|
def test_run_general_vmcq(self):
|
|
"""Test general_vmcq adapter with non-OpenAI MCQ format (MMMU-style)."""
|
|
self._run_dataset_test(
|
|
dataset_name='general_vmcq',
|
|
dataset_args={
|
|
'local_path': 'custom_eval/multimodal/mcq',
|
|
'subset_list': ['example'],
|
|
},
|
|
model='qwen-vl-plus',
|
|
generation_config={'max_tokens': 512},
|
|
eval_batch_size=2,
|
|
limit=5,
|
|
)
|