|
10 | 10 |
|
11 | 11 | from bespokelabs.curator.log import logger |
12 | 12 | from bespokelabs.curator.status_tracker.offline_status_tracker import OfflineStatusTracker |
13 | | -from bespokelabs.curator.status_tracker.tqdm_constants.colors import COST, END, ERROR, HEADER, METRIC, MODEL, SUCCESS |
14 | 13 |
|
15 | 14 |
|
16 | 15 | @dataclass |
@@ -368,52 +367,3 @@ def append(self, other: "CuratorResponse"): |
368 | 367 | self.request_stats.add(other.request_stats) |
369 | 368 | self.performance_stats.add(other.performance_stats) |
370 | 369 |
|
371 | | - def display_stats(self): |
372 | | - """Display final statistics in plain text format. |
373 | | -
|
374 | | - This method prints a formatted summary of all statistics including |
375 | | - model information, request statistics, token usage, costs, and |
376 | | - performance metrics. The output is color-coded for better readability. |
377 | | - """ |
378 | | - elapsed_time = time.time() - self.start_time |
379 | | - elapsed_minutes = elapsed_time / 60 |
380 | | - rpm = self.request_stats.num_tasks_succeeded / max(0.001, elapsed_minutes) |
381 | | - input_tpm = self.token_usage.prompt_tokens / max(0.001, elapsed_minutes) |
382 | | - output_tpm = self.token_usage.completion_tokens / max(0.001, elapsed_minutes) |
383 | | - |
384 | | - stats = [ |
385 | | - f"\n{HEADER}Final Statistics:{END}", |
386 | | - f"{HEADER}Model Information:{END}", |
387 | | - f" Model: {MODEL}{self.model_name}{END}", |
388 | | - f" Rate Limit (RPM): {METRIC}{self.max_requests_per_minute}{END}", |
389 | | - f" Rate Limit (TPM): {METRIC}{self.max_tokens_per_minute}{END}", |
390 | | - "", |
391 | | - f"{HEADER}Request Statistics:{END}", |
392 | | - f" Total Requests: {METRIC}{self.request_stats.total_requests}{END}", |
393 | | - f" Cached: {SUCCESS}{self.request_stats.num_tasks_already_completed}{END}", |
394 | | - f" Successful: {SUCCESS}{self.request_stats.num_tasks_succeeded}{END}", |
395 | | - f" Failed: {ERROR}{self.request_stats.num_tasks_failed}{END}", |
396 | | - "", |
397 | | - f"{HEADER}Token Statistics:{END}", |
398 | | - f" Total Tokens Used: {METRIC}{self.token_usage.total_tokens:,}{END}", |
399 | | - f" Total Input Tokens: {METRIC}{self.token_usage.prompt_tokens:,}{END}", |
400 | | - f" Total Output Tokens: {METRIC}{self.token_usage.completion_tokens:,}{END}", |
401 | | - f" Average Tokens per Request: {METRIC}{int(self.token_usage.total_tokens / max(1, self.request_stats.num_tasks_succeeded))}{END}", |
402 | | - f" Average Input Tokens: {METRIC}{int(self.token_usage.prompt_tokens / max(1, self.request_stats.num_tasks_succeeded))}{END}", |
403 | | - f" Average Output Tokens: {METRIC}{int(self.token_usage.completion_tokens / max(1, self.request_stats.num_tasks_succeeded))}{END}", |
404 | | - "", |
405 | | - f"{HEADER}Cost Statistics:{END}", |
406 | | - f" Total Cost: {COST}${self.cost_info.total_cost:.3f}{END}", |
407 | | - f" Average Cost per Request: {COST}${self.cost_info.total_cost / max(1, self.request_stats.num_tasks_succeeded):.3f}{END}", |
408 | | - f" Input Cost per 1M Tokens: {COST}${self.cost_info.input_cost_per_million:.3f}{END}", |
409 | | - f" Output Cost per 1M Tokens: {COST}${self.cost_info.output_cost_per_million:.3f}{END}", |
410 | | - "", |
411 | | - f"{HEADER}Performance Statistics:{END}", |
412 | | - f" Total Time: {METRIC}{elapsed_time:.2f}s{END}", |
413 | | - f" Average Time per Request: {METRIC}{elapsed_time / max(1, self.request_stats.num_tasks_succeeded):.2f}s{END}", |
414 | | - f" Requests per Minute: {METRIC}{rpm:.1f}{END}", |
415 | | - f" Max Concurrent Requests: {METRIC}{self.performance_stats.max_concurrent_requests}{END}", |
416 | | - f" Input Tokens per Minute: {METRIC}{input_tpm:.1f}{END}", |
417 | | - f" Output Tokens per Minute: {METRIC}{output_tpm:.1f}{END}", |
418 | | - ] |
419 | | - logger.info("\n".join(stats)) |
0 commit comments