Spaces:
Running
Running
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()
|