Save results to CSV file.
(self)
| 439 | self.print_summary(total_time) |
| 440 | |
| 441 | def save_results(self): |
| 442 | """Save results to CSV file.""" |
| 443 | timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") |
| 444 | model_name = self.model_path.stem |
| 445 | |
| 446 | # Use custom CSV path if provided |
| 447 | if self.csv_output: |
| 448 | csv_file = self.csv_output |
| 449 | # Create parent directory if needed |
| 450 | csv_file.parent.mkdir(parents=True, exist_ok=True) |
| 451 | else: |
| 452 | csv_file = self.output_dir / f"ppl_{model_name}_{timestamp}.csv" |
| 453 | |
| 454 | print(f"\n💾 Saving results...") |
| 455 | |
| 456 | with open(csv_file, 'w', newline='') as f: |
| 457 | writer = csv.DictWriter(f, fieldnames=['dataset', 'perplexity', 'time_seconds', 'status']) |
| 458 | writer.writeheader() |
| 459 | for result in self.results: |
| 460 | writer.writerow({ |
| 461 | 'dataset': result['dataset'], |
| 462 | 'perplexity': result['perplexity'] if result['perplexity'] is not None else 'N/A', |
| 463 | 'time_seconds': f"{result['time']:.2f}", |
| 464 | 'status': result['status'] |
| 465 | }) |
| 466 | |
| 467 | print(f" ✅ CSV saved: {csv_file}") |
| 468 | |
| 469 | # Save detailed log |
| 470 | log_file = self.output_dir / f"ppl_{model_name}_{timestamp}.log" |
| 471 | with open(log_file, 'w') as f: |
| 472 | f.write(f"Perplexity Test Results\n") |
| 473 | f.write(f"{'='*80}\n") |
| 474 | f.write(f"Model: {self.model_path}\n") |
| 475 | f.write(f"Timestamp: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") |
| 476 | f.write(f"{'='*80}\n\n") |
| 477 | |
| 478 | for result in self.results: |
| 479 | f.write(f"\n{'='*80}\n") |
| 480 | f.write(f"Dataset: {result['dataset']}\n") |
| 481 | f.write(f"Perplexity: {result['perplexity']}\n") |
| 482 | f.write(f"Time: {result['time']:.2f}s\n") |
| 483 | f.write(f"Status: {result['status']}\n") |
| 484 | f.write(f"\nOutput:\n{result['stdout']}\n") |
| 485 | if result['stderr']: |
| 486 | f.write(f"\nErrors:\n{result['stderr']}\n") |
| 487 | |
| 488 | print(f" ✅ Log saved: {log_file}") |
| 489 | |
| 490 | def print_summary(self, total_time): |
| 491 | """Print summary of all tests.""" |