bayan-api / archive /old_tests /round2_b2_b3_live.py
youssefreda9's picture
Cleanup: Archive legacy scripts + phase reports, delete 35 orphaned files
78a516a
Raw
History Blame Contribute Delete
4.2 kB
"""
Round 2 — B2 Live API Test
Tests BUG-006/009/010/013 through the DEPLOYED pipeline to verify
whether the existing mechanism catches common-word substitutions.
"""
import requests, json, time, os
API_BASE = "https://bayan10-bayan-api.hf.space"
TIMEOUT = 60
def api_call(endpoint, text):
try:
t0 = time.time()
resp = requests.post(f"{API_BASE}{endpoint}", json={"text": text}, timeout=TIMEOUT)
elapsed = int((time.time() - t0) * 1000)
if resp.status_code == 200:
data = resp.json()
data['_elapsed_ms'] = elapsed
return data
return {"error": f"HTTP {resp.status_code}", "_elapsed_ms": elapsed}
except Exception as e:
return {"error": str(e)}
print("=" * 70)
print("B2 LIVE TEST: Common-word substitution via /api/analyze")
print("=" * 70)
# Test each BUG in sentence context
tests = [
{"id": "BUG-006", "sentence": "هذا اهم شيء في الحياة", "word": "اهم",
"bad_correction": "مهم", "concern": "اهم must NOT become مهم"},
{"id": "BUG-009", "sentence": "قرأ الطالب الكتاب", "word": "قرأ",
"bad_correction": "قرا", "concern": "قرأ must NOT become قرا"},
{"id": "BUG-010", "sentence": "مشى الرجل إلى البيت", "word": "مشى",
"bad_correction": "مضى", "concern": "مشى must NOT become مضى"},
{"id": "BUG-013", "sentence": "وقع في خطأ كبير", "word": "خطأ",
"bad_correction": "خطا", "concern": "خطأ must NOT become خطا"},
]
results = []
for t in tests:
r = api_call("/api/analyze", t["sentence"])
corrected = r.get("corrected", t["sentence"])
suggestions = r.get("suggestions", [])
# Check if the target word was changed
word_present = t["word"] in corrected
bad_present = t["bad_correction"] in corrected and t["bad_correction"] not in t["sentence"]
# Find suggestions targeting this word
targeting = [s for s in suggestions if t["word"] in s.get("original", "")
or t["bad_correction"] in s.get("correction", "")]
status = "❌ CORRUPTED" if bad_present else ("✅ PRESERVED" if word_present else "⚠ OTHER")
result = {
"id": t["id"], "word": t["word"], "input": t["sentence"],
"corrected": corrected, "status": status,
"targeting_suggestions": len(targeting),
}
results.append(result)
print(f"\n {t['id']}: {t['concern']}")
print(f" Input: '{t['sentence']}'")
print(f" Corrected: '{corrected}'")
print(f" Status: {status}")
if targeting:
for s in targeting:
conf = s.get('confidence', '?')
print(f" Suggestion: '{s.get('original','')}' → '{s.get('correction','')}' (conf={conf})")
# Also test BUG-014/015 live
print("\n" + "=" * 70)
print("B3 LIVE TEST: Suffix corruption via /api/analyze")
print("=" * 70)
b3_tests = [
{"id": "BUG-014", "sentence": "قرأته بسرعة", "word": "قرأته",
"bad": "قرأتة", "concern": "قرأته must NOT become قرأتة"},
{"id": "BUG-015", "sentence": "استوقفني المشهد فتأملته مليا", "word": "فتأملته",
"bad": "فتأملتة", "concern": "فتأملته must NOT become فتأملتة"},
]
for t in b3_tests:
r = api_call("/api/analyze", t["sentence"])
corrected = r.get("corrected", t["sentence"])
bad_present = t["bad"] in corrected
word_present = t["word"] in corrected
status = "❌ CORRUPTED" if bad_present else ("✅ PRESERVED" if word_present else "⚠ OTHER")
print(f"\n {t['id']}: {t['concern']}")
print(f" Input: '{t['sentence']}'")
print(f" Corrected: '{corrected}'")
print(f" Status: {status}")
print(f" NOTE: Deployed API does NOT have Round 2 fixes yet. "
f"This tests the CURRENT deployed state.")
# Save
output_path = os.path.join(os.path.dirname(__file__), 'round2_b2_b3_live.json')
with open(output_path, 'w', encoding='utf-8') as f:
json.dump({"b2": results, "b3_note": "Deployed API lacks Round 2 fixes"}, f, ensure_ascii=False, indent=2)
print(f"\nResults saved to {output_path}")