Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

add funccall evalution features #4

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Dec 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions 4 scripts/run_fc_example.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/bash


python src/qwen_eval_main.py
9 changes: 9 additions & 0 deletions 9 src/datasets/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from .base_dataset import ToolDataset
from .toolfill_dataset import ToolFillDataset
from .toolparser_dataset import ToolParserDataset
from .toolsummary_dataset import ToolSummaryDataset
from .funccall_dataset import FuncCallDataset

__all__ = [
"ToolFillDataset", "ToolDataset", "ToolParserDataset", "ToolSummaryDataset", "FuncCallDataset"
]
40 changes: 40 additions & 0 deletions 40 src/datasets/base_dataset.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from src.utils.jsonl_utils import read_jsonl_file, save_to_jsonl_file
from src.utils.json_utils import read_json_file, save_to_json_file



class ToolDataset:
def __init__(self, dataset_name, tool_task, filepath):
self.dataset_name = dataset_name
self.tool_task = tool_task
self.filepath = filepath
self.datas = self.load_data()

def load_data(self, ) -> list:
if self.filepath:
return self.load_data_from_local(self.filepath)
elif self.dataset_name and self.tool_task:
return self.load_data_from_hf(self.tool_task)
return []

def load_data_from_local(self, filepath):
''''''
pass

def load_data_from_hf(self, tool_task):
pass

def __iter__(self):
self.current_index = 0
return self

def __next__(self):
if self.current_index < len(self.datas):
current_item = self.datas[self.current_index]
self.current_index += 1
return current_item
else:
raise StopIteration

def __len__(self):
return len(self.datas)
41 changes: 41 additions & 0 deletions 41 src/datasets/funccall_dataset.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from src.utils.jsonl_utils import read_jsonl_file, save_to_jsonl_file
from src.utils.json_utils import read_json_file, save_to_json_file
from .base_dataset import ToolDataset

import os




class FuncCallDataset(ToolDataset):
def __init__(self, dataset_name, tool_task, filepath):
self.dataset_name = dataset_name
self.tool_task = tool_task
self.filepath = filepath
self.datas = self.load_data()

def load_data(self, ) -> list:
if self.filepath:
return self.load_data_from_local(self.filepath)
elif self.dataset_name and self.tool_task:
return self.load_data_from_hf(self.tool_task)
return []

def load_data_from_local(self, filepath):
def _load_from_file(filename):
if "jsonl" in filename:
return read_jsonl_file(filename)
elif "json" in filename:
return read_json_file(filename)

datas = []
if os.path.isdir(filepath):
for filename in os.listdir(filepath):
datas.extend(_load_from_file(os.path.join(filepath, filename)))
else:
datas = _load_from_file(filepath)

return datas

def load_data_from_hf(self, tool_task):
pass
30 changes: 30 additions & 0 deletions 30 src/datasets/toolfill_dataset.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from src.utils.jsonl_utils import read_jsonl_file, save_to_jsonl_file
from src.utils.json_utils import read_json_file, save_to_json_file
from .base_dataset import ToolDataset




class ToolFillDataset(ToolDataset):
def __init__(self, dataset_name, tool_task, filepath):
self.dataset_name = dataset_name
self.tool_task = tool_task
self.filepath = filepath
self.datas = self.load_data()

def load_data(self, ) -> list:
if self.filepath:
return self.load_data_from_local(self.filepath)
elif self.dataset_name and self.tool_task:
return self.load_data_from_hf(self.tool_task)
return []

def load_data_from_local(self, filepath):
if "jsonl" in filepath:
return read_jsonl_file(filepath)
elif "json" in filepath:
return read_json_file(filepath)
return []

def load_data_from_hf(self, tool_task):
pass
30 changes: 30 additions & 0 deletions 30 src/datasets/toolparser_dataset.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from src.utils.jsonl_utils import read_jsonl_file, save_to_jsonl_file
from src.utils.json_utils import read_json_file, save_to_json_file
from .base_dataset import ToolDataset




class ToolParserDataset(ToolDataset):
def __init__(self, dataset_name, tool_task, filepath):
self.dataset_name = dataset_name
self.tool_task = tool_task
self.filepath = filepath
self.datas = self.load_data()

def load_data(self, ) -> list:
if self.filepath:
return self.load_data_from_local(self.filepath)
elif self.dataset_name and self.tool_task:
return self.load_data_from_hf(self.tool_task)
return []

def load_data_from_local(self, filepath):
if "jsonl" in filepath:
return read_jsonl_file(filepath)
elif "json" in filepath:
return read_json_file(filepath)
return []

def load_data_from_hf(self, tool_task):
pass
28 changes: 28 additions & 0 deletions 28 src/datasets/toolsummary_dataset.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from src.utils.jsonl_utils import read_jsonl_file, save_to_jsonl_file
from src.utils.json_utils import read_json_file, save_to_json_file
from .base_dataset import ToolDataset


class ToolSummaryDataset(ToolDataset):
def __init__(self, dataset_name, tool_task, filepath):
self.dataset_name = dataset_name
self.tool_task = tool_task
self.filepath = filepath
self.datas = self.load_data()

def load_data(self, ) -> list:
if self.filepath:
return self.load_data_from_local(self.filepath)
elif self.dataset_name and self.tool_task:
return self.load_data_from_hf(self.tool_task)
return []

def load_data_from_local(self, filepath):
if "jsonl" in filepath:
return read_jsonl_file(filepath)
elif "json" in filepath:
return read_json_file(filepath)
return []

def load_data_from_hf(self, tool_task):
pass
10 changes: 10 additions & 0 deletions 10 src/evals/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from .base_evalution import ToolEvalution
from .toolfill_evalution import ToolFillEvalution
from .toolparser_evalution import ToolParserEvalution
from .toolsummary_evalution import ToolSummaryEvalution
from .func_call_evalution import FuncCallEvalution


__all__ = [
"ToolEvalution", "ToolFillEvalution", "ToolParserEvalution", "ToolSummaryEvalution", "FuncCallEvalution"
]
43 changes: 43 additions & 0 deletions 43 src/evals/base_evalution.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
from src.models.base_model import ToolModel
from src.models.generate_configs import GenerateConfigs
from src.datasets import ToolFillDataset



class ToolEvalution:
def __init__(
self,
model: ToolModel,
dataset: ToolFillDataset,
base_prompt: str = '',
generate_configs: GenerateConfigs = None,
):
self.model = model
self.dataset = dataset
self.base_prompt = base_prompt
self.generate_configs = generate_configs

if not isinstance(model, ToolModel):
raise BaseException(f"must be ToolModel Class! not {model}")

def calc(self):
'''开始计算结果'''
self.predicts = []
for idx, data in enumerate(self.dataset):
# if idx >= 5: break
prompt = self.base_prompt.format(**data)
answer = data["api_param"]
predict = self.generate(prompt, self.generate_configs)
self.predicts.append({"prompt": prompt, "predict": predict, "answer": answer})

metric = self.eval_metric(self.predicts)
return metric

def generate(self, prompt, generate_configs):
'''返回结果'''
return self.model.generate(prompt, generate_configs)

def eval_metric(self, datas):
'''calc custom metric'''
pass

Loading
Morty Proxy This is a proxified and sanitized view of the page, visit original site.