| 6 | |
| 7 | |
| 8 | class 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)), |
nothing calls this directly
no outgoing calls
no test coverage detected