math-solver / scripts /test_e2e_ai_core.py
Cuong2004
Deploy API from GitHub Actions
0772b5a
Raw
History Blame Contribute Delete
4.17 kB
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())