MCPcopy Create free account
hub / github.com/codefuse-ai/codefuse-devops-eval / ToolFillEvalution

Class ToolFillEvalution

src/evals/toolfill_evalution.py:8–67  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6
7
8class ToolFillEvalution(ToolEvalution):
9 def __init__(
10 self,
11 model: ToolModel,
12 dataset: ToolFillDataset,
13 base_prompt: str = '',
14 template: str = 'default',
15 generate_configs: GenerateConfigs = None,
16 ):
17 self.model = model
18 self.dataset = dataset
19 self.base_prompt = base_prompt
20 self.template = template
21 self.generate_configs = generate_configs
22
23 if not isinstance(model, ToolModel):
24 raise BaseException(f"must be ToolModel Class! not {model}")
25
26 def calc(self):
27 '''开始计算结果'''
28 self.predicts = []
29 for idx, data in enumerate(self.dataset):
30 prompt = self.base_prompt.format(**data)
31 answer = data["api_param"]
32 predict = self.generate(prompt, self.template, self.generate_configs)
33 self.predicts.append({"prompt": prompt, "predict": predict, "answer": answer})
34
35 metric = self.eval_metric(self.predicts)
36 return metric
37
38 def generate(self, prompt, template, generate_configs):
39 '''返回结果'''
40 return self.model.generate(prompt, template, generate_configs)
41
42 def eval_metric(self, datas):
43 ''''''
44 self.right_predicts = []
45 self.wrong_predicts = []
46 self.error_predicts = []
47 for data in datas:
48 prompt, predict, answer = data["prompt"], data["predict"], data["answer"]
49
50 try:
51 predict_json = predict if isinstance(predict, dict) else eval(predict)
52 answer_json = answer if isinstance(answer, dict) else eval(answer)
53 if predict_json == answer_json:
54 # print("prompt: {}\npredict: {}\nanswer: {}".format(prompt, predict, answer))
55 self.right_predicts.append({"prompt": prompt, "predict": predict, "answer": answer})
56 else:
57 self.wrong_predicts.append({"prompt": prompt, "predict": predict, "answer": answer})
58 except:
59 self.error_predicts.append({"prompt": prompt, "predict": predict, "answer": answer})
60 #
61 print(len(self.right_predicts), len(self.wrong_predicts), len(self.error_predicts))
62
63 metric = {
64 "accuracy": len(self.right_predicts)/(len(self.right_predicts)+len(self.wrong_predicts)+len(self.error_predicts)),
65 "error": len(self.error_predicts)/(len(self.right_predicts)+len(self.wrong_predicts)+len(self.error_predicts)),

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected