| 88 | return results |
| 89 | |
| 90 | def save(self, results: Iterable[Any], usage_counter: ModelUsageCounter = None): |
| 91 | with self._lock: |
| 92 | if usage_counter: |
| 93 | self.usage["total"] = usage_counter.total |
| 94 | self.usage["completed"] = usage_counter.completed |
| 95 | self.usage["token"] = usage_counter.token |
| 96 | self.usage["time"] = usage_counter.time |
| 97 | |
| 98 | completed, total = self.usage["completed"], self.usage["total"] |
| 99 | if completed % self.save_step == 0 or completed == total: |
| 100 | # verify the progress |
| 101 | self.detail_completed += len(self.tmp_add_progress) |
| 102 | if self.detail_completed != completed: |
| 103 | raise Exception(f"Error occurred when save buffer: completed={completed} is not equal to completed in detail_progress={self.detail_completed}") |
| 104 | |
| 105 | self.detail_progress[self.tmp_add_progress] = True |
| 106 | self.tmp_add_progress = [] # clear the temporary progress to be added |
| 107 | usage = {**self.usage, **{"detail_progress": self.detail_progress.tolist()}} |
| 108 | |
| 109 | # save buffer |
| 110 | save_json(usage, self.usage_path) |
| 111 | save_json(results, self.result_path) |