File size: 4,296 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
import urllib.request
import json
import time

CASES = [
    {
        "level": "1. Easy (Cơ bản)",
        "name": "Hình chóp tứ giác đều S.ABCD",
        "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",
        "expected_formula": "V = 1/3 * S_day * h = 1/3 * 100 * 15 = 500"
    },
    {
        "level": "2. Medium (Trung bình - Căn thức & Tam giác đều)",
        "name": "Hình chóp tam giác đều S.ABC",
        "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 mặt phẳng đáy (ABC) tại tâm O. Tính thể tích khối chóp S.ABC.",
        "expected_answer": "24*sqrt(3) (≈ 41.57) hoặc 41.57",
        "expected_formula": "S_ABC = (6^2 * sqrt(3)) / 4 = 9*sqrt(3), V = 1/3 * 9*sqrt(3) * 8 = 24*sqrt(3) ≈ 41.57"
    },
    {
        "level": "3. Hard (Nâng cao - Hình chóp cụt)",
        "name": "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 h=6. Tính thể tích khối chóp cụt.",
        "expected_answer": "224",
        "expected_formula": "S1 = 64, S2 = 16, V = (6/3) * (64 + 16 + sqrt(64*16)) = 2 * (80 + 32) = 224"
    }
]

def run_test():
    print("\n" + "="*75)
    print("🎯 BẮT ĐẦU TEST BỘ 3 BÀI TOÁN HÌNH HỌC VỚI SYMPY CALCULATE ENGINE & GEMMA 4 31B")
    print("="*75)

    results = []
    for idx, c in enumerate(CASES, 1):
        print(f"\n📌 TEST CASE {idx}: [{c['level']}] - {c['name']}")
        print(f"📝 Đề bài: {c['text']}")
        print(f"🎯 Kỳ vọng: {c['expected_formula']}")
        print("-" * 60)

        start_t = time.time()
        payload = json.dumps({"text": c["text"]}).encode("utf-8")
        req = urllib.request.Request(
            "http://127.0.0.1:8000/api/v1/ai/solve",
            data=payload,
            headers={"Content-Type": "application/json"}
        )

        try:
            with urllib.request.urlopen(req, timeout=120) as resp:
                elapsed = time.time() - start_t
                data = json.loads(resp.read().decode("utf-8"))
                
                status = data.get("status")
                solution = data.get("solution") or {}
                dsl = data.get("geometry_dsl")
                coords = data.get("coordinates")
                answer = solution.get("answer")
                steps = solution.get("steps", [])
                sym_expr = solution.get("symbolic_expression")
                context = solution.get("evaluated_context")

                print(f"⏱️ Thời gian xử lý: {elapsed:.2f}s | Trạng thái: {status}")
                print(f"\n📐 DSL sinh ra:\n{dsl}")
                print(f"\n📍 Toạ độ giải được:\n{json.dumps(coords, indent=2)}")
                print(f"\n🧮 Lời giải tính toán tự động qua SymPy Calculator:")
                for step in steps:
                    print(f"  {step}")
                print(f"\n👉 Đáp số cuối cùng (Đã qua SymPy): {answer}")
                if sym_expr:
                    print(f"👉 Biểu thức LaTeX: {sym_expr}")
                if context:
                    print(f"👉 Context các biến tính toán: {context}")

                results.append({
                    "case": c["level"],
                    "status": "PASS" if status == "success" and answer else "FAIL",
                    "answer": answer,
                    "elapsed": f"{elapsed:.2f}s"
                })
        except Exception as e:
            print(f"❌ Lỗi thực thi: {e}")
            results.append({
                "case": c["level"],
                "status": "ERROR",
                "error": str(e)
            })

    print("\n" + "="*75)
    print("📊 TỔNG KẾT KẾT QUẢ BENCHMARK 3 BÀI TOÁN:")
    print("="*75)
    for r in results:
        print(f"• {r['case']}: [{r['status']}] Đáp số: {r.get('answer', 'N/A')} (Thời gian: {r.get('elapsed', 'N/A')})")
    print("="*75 + "\n")

if __name__ == "__main__":
    run_test()