File size: 4,167 Bytes
0772b5a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import asyncio
import os
import sys
import time
import json
import logging
from typing import Dict, Any
from dotenv import load_dotenv

load_dotenv()
logging.basicConfig(level=logging.INFO, format="%(asctime)s | %(levelname)-7s | %(message)s")

from agents.orchestrator import Orchestrator

TEST_CASES = [
    {
        "id": "case_1_easy",
        "name": "Bài 1 (Dễ): Hình chóp tứ giác đều",
        "text": "Cho hình chóp S.ABCD có đáy ABCD là hình vuông cạnh 10. Chiều cao SO vuông góc với đáy tại tâm O, SO=15. Tính thể tích khối chóp S.ABCD.",
        "expected_answer": "500",
    },
    {
        "id": "case_2_medium",
        "name": "Bài 2 (Trung bình): Hình chóp tam giác đều",
        "text": "Cho hình chóp tam giác đều S.ABC có cạnh đáy bằng 6, chiều cao SO = 8 vuông góc với đáy tại trọng tâm O của tam giác ABC. Tính thể tích khối chóp S.ABC.",
        "expected_answer": "24*sqrt(3) ≈ 41.57",
    },
    {
        "id": "case_3_hard",
        "name": "Bài 3 (Khó): Hình chóp cụt tứ giác đều",
        "text": "Cho hình chóp cụt tứ giác đều ABCD.A1B1C1D1 có cạnh đáy dưới bằng 8, cạnh đáy trên bằng 4, chiều cao giữa hai đáy h=6. Tính thể tích khối chóp cụt.",
        "expected_answer": "224",
    },
]

async def main():
    print("=" * 80, flush=True)
    print("      END-TO-END AI CORE BENCHMARK (v6.0 Unified Architecture)", flush=True)
    print("      GeometryParserAgent + GeometryEngine + DeepMathSolverAgent", flush=True)
    print("=" * 80, flush=True)

    orchestrator = Orchestrator()
    results = []

    for tc in TEST_CASES:
        print(f"\n" + "=" * 80, flush=True)
        print(f"🔥 TEST CASE: {tc['name']}", flush=True)
        print(f"📄 Đề bài: {tc['text']}", flush=True)
        print(f"🎯 Kỳ vọng kết quả: {tc['expected_answer']}", flush=True)
        print("=" * 80, flush=True)

        start_time = time.time()
        try:
            res = await orchestrator.run(
                text=tc["text"],
                job_id=f"e2e_{tc['id']}",
            )
            elapsed = time.time() - start_time

            status = res.get("status")
            is_3d = res.get("is_3d")
            dsl = res.get("geometry_dsl")
            coords = res.get("coordinates", {})
            solution = res.get("solution", {})
            answer = solution.get("answer") if solution else "N/A"
            steps = solution.get("steps", []) if solution else []
            vars_eval = solution.get("evaluated_variables", {}) if solution else {}

            print(f"\n⏱ Tổng thời gian chạy: {elapsed:.2f}s", flush=True)
            print(f"📊 Trạng thái: {status} | Không gian 3D: {is_3d} | Tọa độ điểm ({len(coords)}): {list(coords.keys())}", flush=True)
            print(f"\n📐 Generated Geometry DSL:\n{dsl}", flush=True)
            print(f"\n🐍 Evaluated Variables via SymPy Sandbox: {vars_eval}", flush=True)
            print(f"🏆 Kết quả tính toán cuối cùng: {answer}", flush=True)
            print(f"\n📋 Các bước giải chi tiết ({len(steps)} bước):", flush=True)
            for s in steps:
                print(f"   • {s}", flush=True)

            results.append({
                "id": tc["id"],
                "name": tc["name"],
                "elapsed": round(elapsed, 2),
                "status": status,
                "n_coords": len(coords),
                "answer": answer,
                "vars": vars_eval,
            })
        except Exception as e:
            print(f"❌ Error during test: {e}", flush=True)
            import traceback
            traceback.print_exc()

    print("\n" + "=" * 80, flush=True)
    print("                    E2E BENCHMARK SUMMARY TABLE", flush=True)
    print("=" * 80, flush=True)
    for r in results:
        print(f"[{r['id']}] {r['name']}: Status={r['status']}, Coords={r['n_coords']} pts, Time={r['elapsed']}s, Ans={r['answer']}, Vars={r['vars']}", flush=True)
    print("=" * 80, flush=True)

if __name__ == "__main__":
    asyncio.run(main())