Spaces:
Paused
Paused
| """Run Agent 2 (Grading) baseline evaluations.""" | |
| from __future__ import annotations | |
| import argparse | |
| import logging | |
| import sys | |
| from datetime import datetime | |
| from pathlib import Path | |
| PROJECT_ROOT = Path(__file__).parent.parent.parent | |
| sys.path.insert(0, str(PROJECT_ROOT)) | |
| from scripts.evaluation.eval_utils import ( # noqa: E402 | |
| create_metadata, | |
| format_mode_section, | |
| format_summary, | |
| save_evaluation_results, | |
| ) | |
| from src.evaluation.baseline import BaselineEvaluator # noqa: E402 | |
| # Configure logging | |
| logging.basicConfig( | |
| level=logging.INFO, | |
| format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", | |
| ) | |
| logger = logging.getLogger(__name__) | |
| # Output directory | |
| DEFAULT_OUTPUT_DIR = PROJECT_ROOT / "data" / "evaluation" / "grading_agent" | |
| DEFAULT_SAMPLE_SIZE = 10 | |
| def save_results( | |
| output_dir: Path, vocab_results: dict, grammar_results: dict, model_size: str | |
| ) -> None: | |
| """Save evaluation results to files.""" | |
| metadata = create_metadata(f"Qwen/Qwen2.5-{model_size}-Instruct", "Agent 2 (Grading)") | |
| metadata["model_size"] = model_size | |
| results_json = { | |
| "metadata": metadata, | |
| "grading_vocab": vocab_results, | |
| "grading_grammar": grammar_results, | |
| } | |
| report = generate_markdown_report(vocab_results, grammar_results, model_size) | |
| save_evaluation_results(output_dir, results_json, report) | |
| def generate_markdown_report(vocab_results: dict, grammar_results: dict, model_size: str) -> str: | |
| """Generate markdown evaluation report.""" | |
| return f"""# Agent 2 (Grading) - {model_size} Baseline Evaluation | |
| **Model:** Qwen/Qwen2.5-{model_size}-Instruct | |
| **Evaluation Date:** {datetime.now().strftime("%Y-%m-%d")} | |
| ## Summary | |
| {format_mode_section("Grading Vocabulary", vocab_results)} | |
| {format_mode_section("Grading Grammar", grammar_results)} | |
| ## Detailed Results | |
| ### Grading Vocabulary | |
| {format_test_results(vocab_results)} | |
| ### Grading Grammar | |
| {format_test_results(grammar_results)} | |
| """ | |
| def format_test_results(results: dict) -> str: | |
| """Format test results for markdown.""" | |
| output = [] | |
| metrics = results.get("metrics", {}) | |
| if not metrics: | |
| return "No test results available" | |
| # Group test results by test_id | |
| test_status = {} # test_id -> overall passed/failed | |
| # Process each metric | |
| for metric_name, metric_results in metrics.items(): | |
| if not metric_results: | |
| continue | |
| output.append(f"\n#### {metric_name.replace('_', ' ').title()}") | |
| for metric_result in metric_results: | |
| test_id = metric_result.get("test_id", "unknown") | |
| passed = metric_result.get("passed", False) | |
| score = metric_result.get("score", 0) | |
| reason = metric_result.get("reason", "") | |
| # Track overall test status (test fails if any metric fails) | |
| if test_id not in test_status: | |
| test_status[test_id] = True | |
| if not passed: | |
| test_status[test_id] = False | |
| status = "β" if passed else "β" | |
| output.append(f"- {status} `{test_id}` (score: {score:.2f})") | |
| if not passed and reason: | |
| output.append(f" - {reason}") | |
| # Add summary at the top | |
| summary_lines = ["\n#### Test Summary"] | |
| for test_id, passed in sorted(test_status.items()): | |
| status = "β" if passed else "β" | |
| summary_lines.append(f"- {status} `{test_id}`") | |
| return "\n".join(summary_lines + output) | |
| def run_baseline_evaluation( | |
| evaluator: BaselineEvaluator, sample_size: int | None, model_size: str = "7B" | |
| ) -> tuple[dict, dict]: | |
| """Run baseline evaluation for both vocab and grammar.""" | |
| logger.info("=" * 80) | |
| logger.info(f"AGENT 2 (GRADING) - {model_size} BASELINE") | |
| logger.info("=" * 80 + "\n") | |
| logger.info("Running grading_vocab with 7B model...") | |
| _, vocab_results = evaluator.run_grading_vocab_baseline(sample_size=sample_size, use_7b=True) | |
| logger.info("β Vocab grading (7B) complete") | |
| logger.info("Running grading_grammar with 7B model...") | |
| _, grammar_results = evaluator.run_grading_grammar_baseline( | |
| sample_size=sample_size, use_7b=True | |
| ) | |
| logger.info("β Grammar grading (7B) complete") | |
| return vocab_results, grammar_results | |
| def main() -> None: | |
| """Run grading baseline evaluation with 7B model.""" | |
| parser = argparse.ArgumentParser(description="Run baseline grading evaluation") | |
| parser.add_argument( | |
| "--sample-size", | |
| type=int, | |
| default=DEFAULT_SAMPLE_SIZE, | |
| help="Number of test cases to evaluate per subgroup (None = all)", | |
| ) | |
| parser.add_argument( | |
| "--output-dir", | |
| type=str, | |
| default=str(DEFAULT_OUTPUT_DIR), | |
| help="Path to output directory", | |
| ) | |
| args = parser.parse_args() | |
| logger.info("Initializing BaselineEvaluator...") | |
| evaluator = BaselineEvaluator() | |
| vocab_results, grammar_results = run_baseline_evaluation(evaluator, args.sample_size) | |
| save_results(Path(args.output_dir), vocab_results, grammar_results, "7B") | |
| logger.info("\n" + "=" * 80) | |
| logger.info("SUMMARY") | |
| logger.info("=" * 80 + "\n") | |
| logger.info(f"Vocabulary Grading: {format_summary(vocab_results)}") | |
| logger.info(f"Grammar Grading: {format_summary(grammar_results)}") | |
| logger.info("\nβ Evaluation complete!") | |
| if __name__ == "__main__": | |
| main() | |