update support of yayi api

This commit is contained in:
JensenDong 2025-01-08 23:53:34 +08:00
parent f1e50d4bf0
commit 3ee430a2c0
2 changed files with 190 additions and 33 deletions

View File

@ -0,0 +1,163 @@
from mmengine.config import read_base
import os.path as osp
from opencompass.partitioners import NaivePartitioner, NumWorkerPartitioner
from opencompass.partitioners import SizePartitioner
from opencompass.runners import LocalRunner, VOLCRunner
from opencompass.tasks import OpenICLInferTask, OpenICLEvalTask
#######################################################################
# PART 0 Essential Configs #
#######################################################################
with read_base():
# Datasets Part
# Knowledge
from opencompass.configs.datasets.mmlu_pro.mmlu_pro_0shot_cot_gen_08c1de import (
mmlu_pro_datasets,
)
# General Reasoning
from opencompass.configs.datasets.gpqa.gpqa_openai_simple_evals_gen_5aeece import (
gpqa_datasets,
)
from opencompass.configs.datasets.bbh.bbh_0shot_nocot_gen_925fc4 import (
bbh_datasets,
)
from opencompass.configs.datasets.humaneval.humaneval_openai_sample_evals_gen_dcae0e import (
humaneval_datasets,
)
# Instruction Following
from opencompass.configs.datasets.IFEval.IFEval_gen_353ae7 import (
ifeval_datasets,
)
from opencompass.configs.datasets.livecodebench.livecodebench_gen_a4f90b import (
LCBCodeGeneration_dataset,
)
# Math
from opencompass.configs.datasets.aime2024.aime2024_gen_6e39a4 import (
aime2024_datasets,
)
from opencompass.configs.datasets.math.math_prm800k_500_0shot_cot_gen import (
math_datasets,
)
# Summary Groups
from opencompass.configs.summarizers.groups.bbh import bbh_summary_groups
from opencompass.configs.summarizers.groups.mmlu_pro import (
mmlu_pro_summary_groups,
)
from opencompass.models import Yayi
#######################################################################
# PART 1 Datasets List #
#######################################################################
# Datasets list for evaluation
# Only take LCB generation for evaluation
datasets = sum(
(v for k, v in locals().items() if k.endswith('_datasets')), []
) + [LCBCodeGeneration_dataset]
#######################################################################
# PART 2 Datset Summarizer #
#######################################################################
core_summary_groups = [
{
'name': 'core_average',
'subsets': [
['IFEval', 'Prompt-level-strict-accuracy'],
['bbh', 'naive_average'],
['math_prm800k_500', 'accuracy'],
['aime2024', 'accuracy'],
['GPQA_diamond', 'accuracy'],
['mmlu_pro', 'naive_average'],
['openai_humaneval', 'humaneval_pass@1'],
['lcb_code_generation', 'pass@1'],
],
},
]
summarizer = dict(
dataset_abbrs=[
['core_average', 'naive_average'],
'',
'Instruction Following',
['IFEval', 'Prompt-level-strict-accuracy'],
'',
'General Reasoning',
['bbh', 'naive_average'],
['GPQA_diamond', 'accuracy'],
'',
'Math Calculation',
['math_prm800k_500', 'accuracy'],
['aime2024', 'accuracy'],
'',
'Knowledge',
['mmlu_pro', 'naive_average'],
'',
'Code',
['openai_humaneval', 'humaneval_pass@1'],
['lcb_code_generation', 'pass@1'],
],
summary_groups=sum(
[v for k, v in locals().items() if k.endswith('_summary_groups')], []
),
)
#######################################################################
# PART 3 Models List #
#######################################################################
api_meta_template = dict(
round=[
dict(role='HUMAN', api_role='HUMAN'),
dict(role='BOT', api_role='BOT', generate=True),
],
reserved_roles=[dict(role='SYSTEM', api_role='SYSTEM')],
)
models = [
dict(
abbr="YAYI",
type=Yayi,
path="YAYI",
url="https://tilake.wenge.com/saas-gateway/******",
url_path="/******",
x_tilake_app_key="xxxxxx", # Please give you app_key
x_tilake_app_secret="xxxxxxxxx", # Please give you app_secret
x_tilake_ca_sginature_method="HmacSHA256",
meta_template=api_meta_template,
batch_size=1,
)
]
#######################################################################
# PART 4 Inference/Evaluation Configuaration #
#######################################################################
# Local Runner
infer = dict(
partitioner=dict(type=SizePartitioner, max_task_size=100, gen_task_coef=1),
runner=dict(
type=LocalRunner,
max_num_workers=16,
retry=3, # Modify if needed
task=dict(type=OpenICLInferTask),
),
)
# Eval with local runner
eval = dict(
partitioner=dict(type=NaivePartitioner, n=10),
runner=dict(
type=LocalRunner, max_num_workers=16, task=dict(type=OpenICLEvalTask)
),
)
#######################################################################
# PART 5 Utils Configuaration #
#######################################################################
work_dir = f"outputs/YAYI/"

View File

@ -70,19 +70,23 @@ def get_current_time_gmt_format():
class Yayi(BaseAPIModel):
"""Model wrapper around SenseTime.
"""Model wrapper around Yayi.
Args:
path (str): The name of SenseTime model.
e.g. `nova-ptc-xl-v1`
key (str): Authorization key.
path (str): The name of Yayi model.
url (str): The base URL for the API.
url_path (str): The specific path for the API endpoint.
x_tilake_app_key (str): The application key for authentication.
x_tilake_app_secret (str): The application secret for authentication.
x_tilake_ca_sginature_method (str): The signature method for authentication.
query_per_second (int): The maximum queries allowed per second
between two consecutive calls of the API. Defaults to 1.
max_seq_len (int): Unused here.
between two consecutive calls of the API. Defaults to 2.
max_seq_len (int): The maximum sequence length. Defaults to 8192.
meta_template (Dict, optional): The model's meta prompt
template if needed, in case the requirement of injecting or
wrapping of any meta instructions.
retry (int): Number of retires if the API call fails. Defaults to 2.
retry (int): Number of retries if the API call fails. Defaults to 2.
temperature (float): The temperature for the model's response. Defaults to 0.0.
"""
def __init__(
@ -94,10 +98,10 @@ class Yayi(BaseAPIModel):
x_tilake_app_secret: str,
x_tilake_ca_sginature_method: str,
query_per_second: int = 2,
max_seq_len: int = 2048,
max_seq_len: int = 8192,
meta_template: Optional[Dict] = None,
retry: int = 2,
temperature: float = 0.4,
temperature: float = 0.0,
):
super().__init__(
path=path,
@ -116,14 +120,8 @@ class Yayi(BaseAPIModel):
self.model = path
def generate_signature(self, method, accept, content_type, date, url_path):
"""生成签名.
:param method:
:param accept:
:param content_type:
:param date:
:param url_path:
:return:
"""
生成签名.
"""
string_to_sign = (method + '\n' + accept + '\n' + content_type + '\n' +
date + '\n' + url_path)
@ -134,11 +132,8 @@ class Yayi(BaseAPIModel):
return encode_base64_string(signature)
def generate_header(self, content_type, accept, date, signature):
"""生成请求头参数.
:param content_type:
:param accept:
:return:
"""
生成请求头参数.
"""
headers = {
'x-tilake-app-key': self.X_TILAKE_APP_KEY,
@ -155,7 +150,7 @@ class Yayi(BaseAPIModel):
def generate(
self,
inputs: List[PromptType],
max_out_len: int = 512,
max_out_len: int = 8192,
) -> List[str]:
"""Generate results given a list of inputs.
@ -178,7 +173,7 @@ class Yayi(BaseAPIModel):
def _generate(
self,
input: PromptType,
max_out_len: int = 512,
max_out_len: int = 8192,
) -> str:
"""Generate results given an input.
@ -199,7 +194,7 @@ class Yayi(BaseAPIModel):
messages = []
msg_buffer, last_role = [], None
for item in input:
item['role'] = 'yayi' if item['role'] == 'BOT' else 'user'
item['role'] = 'assistant' if item['role'] == 'BOT' else 'user'
if item['role'] != last_role and last_role is not None:
messages.append({
'content': '\n'.join(msg_buffer),
@ -218,14 +213,12 @@ class Yayi(BaseAPIModel):
accept = '*/*'
method = 'POST'
data = {
'id': '001', # 请求id无需修改。
'model': self.model,
'id': "001",
'messages': messages,
'max_new_tokens': max_out_len, # max_new_tokens及以下参数可根据实际任务进行调整。
'temperature': self.temperature,
'presence_penalty': 0.85,
'frequency_penalty': 0.16,
'do_sample': True,
'max_new_tokens': 8192,
'temperature': 0.0,
'presence_penalty': 0.0,
'frequency_penalty': 0.0,
'top_p': 1.0,
'top_k': -1,
}
@ -242,6 +235,7 @@ class Yayi(BaseAPIModel):
signature=signature_str)
try:
print(data)
response = requests.post(self.url, json=data, headers=headers)
except Exception as e:
print(e)
@ -253,7 +247,7 @@ class Yayi(BaseAPIModel):
continue
print(response)
try:
return response['data']['choices'][0]['message']['content']
return response['choices'][0]['message']['content']
except Exception as e:
print(e)
continue