Spaces:
Sleeping
Sleeping
Download src/scripts/evaluate.py from dvwn/nl2sql-api: direct link, hf CLI and curl.
- Browser
- Download file 2.35 kB
-
https://huggingface.co/spaces/dvwn/nl2sql-api/resolve/0731edebbcfdc1aea27e71064073f11e96eafe7a/src/scripts/evaluate.py
- Command line
-
hf download hf://spaces/dvwn/nl2sql-api@0731edebbcfdc1aea27e71064073f11e96eafe7a/src/scripts/evaluate.py
-
curl -L -o evaluate.py https://huggingface.co/spaces/dvwn/nl2sql-api/resolve/0731edebbcfdc1aea27e71064073f11e96eafe7a/src/scripts/evaluate.py
2.35 kB
| # Evaluation Script for NL2SQL Models | |
| import json | |
| import pandas as pd | |
| from src.database.db_manager import get_db_connection, get_schema_context | |
| from src.nl2sql.qwen_engine import query_qwen, build_qwen_prompt | |
| def compare_results(df_generated_sql, df_gold_sql): | |
| """Compares the generated SQL query with the expected SQL query.""" | |
| if df_generated_sql is None or df_gold_sql is None: | |
| return False | |
| try: | |
| return df_generated_sql.values.tolist() == df_gold_sql.values.tolist() | |
| except Exception as e: | |
| print(f"Error comparing results: {e}") | |
| return False | |
| def run_evaluation(): | |
| # Load test cases from a JSON file | |
| with open('src/scripts/test_cases.json', 'r') as f: | |
| test_cases = json.load(f) | |
| results = [] | |
| correct_count = 0 | |
| schema = get_schema_context() | |
| print(f"Running evaluation on {len(test_cases)} test cases...\n") | |
| for case in test_cases: | |
| print(f"Testing ID {case['id']}: {case['question'][:50]}...") | |
| # Generate SQL query using the LLM | |
| prompt = build_qwen_prompt(case['question'], schema) | |
| generated_sql = query_qwen(prompt) | |
| # Execute both generated SQL and gold SQL | |
| connection = get_db_connection() | |
| try: | |
| df_generated = pd.read_sql_query(generated_sql, connection) | |
| df_gold = pd.read_sql_query(case['gold_sql'], connection) | |
| # Compare results | |
| is_correct = compare_results(df_generated, df_gold) | |
| if is_correct: | |
| correct_count += 1 | |
| results.append({ | |
| "id": case['id'], | |
| "status": "PASS" if is_correct else "FAIL", | |
| "generated": generated_sql | |
| }) | |
| except Exception as e: | |
| results.append({"id": case['id'], "status": f"ERROR: {str(e)}"}) | |
| finally: | |
| connection.close() | |
| # Print summary | |
| accuracy = (correct_count / len(test_cases)) * 100 | |
| print(f"\n EVALUATION COMPLETE") | |
| print(f"Total Test Cases: {len(test_cases)}") | |
| print(f"Correctly Generated SQL: {correct_count}") | |
| print(f"Execution Accuracy: {accuracy:.2f}%") | |
| # Save results to a JSON file | |
| with open('evaluation_results.json', 'w') as f: | |
| json.dump(results, f, indent=4) | |
| if __name__ == "__main__": | |
| run_evaluation() |