BuddyMath / tests /archive_scripts /test_v4_2_16.py
dotandru's picture
Fix: Clean production deployment with sse-starlette
9d29c62
Raw
History Blame Contribute Delete
3.38 kB
# test_v4_2_16.py - REGRESSION TEST FOR ALGEBRA & INTENT GATING
import asyncio
from orchestrator import orchestrator, PipelineContext
async def run_tests():
print("🚀 starting BuddyMath V4.2.16 Regression Test Matrix...\n")
test_cases = [
{
"id": "CASE_1_SMADAR_ALGEBRA",
"name": "סמדר והמחברות (כיתה ז')",
"grade": "ז'",
"category": "ALGEBRA",
"math_input": "4x + 5y = 120, y = x + 6",
"text": "סמדר קנתה מחברות חשבון ב-4 שקלים וחלקות ב-5 שקלים. כמה קנתה?",
"expected_operator": "LINEAR_SYSTEM"
},
{
"id": "CASE_2_Y12_ALGEBRA_NO_INTENT",
"name": "יב' אלגברה - ללא כוונת חקירה",
"grade": "יב'",
"category": "INVESTIGATION", # קטגוריה מוטעית בכוונה
"math_input": "y = 4x + 3",
"text": "מצא את נקודת החיתוך של הישר עם הצירים.",
"expected_operator": "ALGEBRA_GENERAL" # אמור להיחסם כי אין מילת 'חקור'
},
{
"id": "CASE_3_Y12_INVESTIGATION_FULL",
"name": "יב' חקירה - עם כוונת חקירה",
"grade": "יב'",
"category": "INVESTIGATION",
"math_input": "y = x^2 - 4",
"text": "חקור את הפונקציה ומצא נקודות קיצון.",
"expected_operator": "DERIVATIVE" # אמור לעבור כי יש 'חקור' ו'קיצון'
}
]
for tc in test_cases:
print(f"--- Testing: {tc['name']} ---")
# 1. יצירת קונטקסט בדיקה
context = PipelineContext(
grade=tc["grade"],
grade_num=12 if "יב" in tc["grade"] else 7,
topic=tc["category"],
math_input=tc["math_input"],
confidence=1.0,
original_text=tc["text"],
category=tc["category"]
)
# 2. הרצת הסולבר ישירות (בדיקת מנוע המתמטיקה)
result = orchestrator.smart_solver.solve(context)
print(f" [SOLVER] Operator Used: {result.operator_used}")
print(f" [SOLVER] Success: {result.success}")
# 3. בדיקת ה-Validator (בדיקת חסימת זליגות)
# נדמה פלט של LLM שמנסה להזליג נגזרת באלגברה
mock_resp = {
"sections": [{
"steps": [{"explanation_text": "נחשב את הנגזרת של הפונקציה כדי למצוא פתרון."}]
}],
"logic_error": False
}
from orchestrator import validate_and_sanitize_response
validated = validate_and_sanitize_response(mock_resp, category=tc["category"])
if tc["category"] != "INVESTIGATION":
print(f" [VALIDATOR] Logic Error Detected (Expected): {validated['logic_error']}")
# Verification
if result.operator_used == tc["expected_operator"]:
print(f"✅ PASSED: {tc['id']}\n")
else:
print(f"❌ FAILED: {tc['id']} - Expected {tc['expected_operator']} but got {result.operator_used}\n")
if __name__ == "__main__":
asyncio.run(run_tests())