| 6 | |
| 7 | |
| 8 | class ToolParserEvalution(ToolEvalution): |
| 9 | def __init__( |
| 10 | self, |
| 11 | model: ToolModel, |
| 12 | dataset: ToolParserDataset, |
| 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 | # if idx >= 5: break |
| 31 | prompt = self.base_prompt.format(**data) |
| 32 | response = data["response"] |
| 33 | answer = data["selected_keys"] |
| 34 | predict = self.generate(prompt, self.template, self.generate_configs) |
| 35 | self.predicts.append({"prompt": prompt, "predict": predict, "answer": answer, "response": response}) |
| 36 | |
| 37 | metric = self.eval_metric(self.predicts) |
| 38 | return metric |
| 39 | |
| 40 | self.model = model |
| 41 | self.dataset = dataset |
| 42 | self.base_prompt = base_prompt |
| 43 | self.template = template |
| 44 | self.generate_configs = generate_configs |
| 45 | |
| 46 | if not isinstance(model, ToolModel): |
| 47 | raise BaseException(f"must be ToolModel Class! not {model}") |
| 48 | |
| 49 | def generate(self, prompt, template, generate_configs): |
| 50 | '''返回结果''' |
| 51 | return self.model.generate(prompt, template, generate_configs) |
| 52 | |
| 53 | def eval_metric(self, datas): |
| 54 | '''''' |
| 55 | self.right_predicts = [] |
| 56 | self.wrong_predicts = [] |
| 57 | self.error_predicts = [] |
| 58 | for data in datas: |
| 59 | prompt, predict, answer, response = data["prompt"], data["predict"], data["answer"], data["response"] |
| 60 | selected_keys = rec_search_key(response, "", [], predict) |
| 61 | try: |
| 62 | predict_json = selected_keys if isinstance(selected_keys, list) else eval(selected_keys) |
| 63 | answer_json = answer if isinstance(answer, list) else eval(answer) |
| 64 | |
| 65 | predict_json = set(predict_json) if isinstance(predict_json, list) else predict_json |
nothing calls this directly
no outgoing calls
no test coverage detected