flare / intent_test_runner.py
ciyidogan's picture
Update intent_test_runner.py
8be9d0b verified
raw
history blame
6.25 kB
import os, requests, time
from log import log
BASE_URL = "http://localhost:7860"
MOCK_BASE = os.getenv("MOCK_BASE_URL") # Örnek: https://abc123.ngrok.io
test_results = []
def assert_test(name, actual, expected_substring, explanation=None):
if explanation:
log(f"🧪 TEST: {name}{explanation}")
actual_str = str(actual)
if expected_substring in actual_str:
log(f"[TEST] {name:<45} ✅")
test_results.append((name, True))
else:
log(f"[TEST] {name:<45} ❌ — Beklenen: {expected_substring}, Gelen: {actual_str[:100]}...")
test_results.append((name, False))
def summarize_tests():
total = len(test_results)
success = sum(1 for _, ok in test_results if ok)
fail = total - success
log("🧾 TEST SONUCU ÖZETİ")
log(f"🔢 Toplam Test : {total}")
log(f"✅ Başarılı : {success}")
log(f"❌ Başarısız : {fail}")
def wait_for_intent_training(timeout_sec=60):
log("⏳ Intent eğitimi tamamlanıyor mu kontrol ediliyor...")
for _ in range(timeout_sec // 3):
logs = open("/tmp/logs.txt").read() if os.path.exists("/tmp/logs.txt") else ""
if "✅ Intent eğitimi tamamlandı" in logs:
return True
time.sleep(3)
return False
def run_all_tests():
try:
log("🚀 Test süreci başlatıldı.")
session_id = requests.post(f"{BASE_URL}/start_chat").json().get("session_id")
headers = {"X-Session-ID": session_id}
# 1. LLM fallback testi
r = requests.post(f"{BASE_URL}/chat", json={"user_input": "zzzzzzzzzzzzz"}, headers=headers)
assert_test("LLM fallback", r.json(), "Bu konuda maalesef")
# 2. Intent eğitimi (doviz + yol intentleri)
intents = {
"intents": [
{
"name": "doviz-kuru",
"examples": ["dolar kuru nedir", "euro kuru nedir"],
"variables": ["currency:{dolar} kuru nedir", "currency:{euro} kuru nedir"],
"variable_formats": {"currency": "currency_format"},
"action": {
"url": f"{MOCK_BASE}/doviz",
"method": "POST",
"headers": [{"key": "Authorization", "value": "Bearer {auth_tokens.doviz-kuru.token}"}],
"body": {"currency": "{variables.currency}"},
"auth": {
"auth_endpoint": f"{MOCK_BASE}/auth",
"auth_body": {"username": "user", "password": "pass"},
"auth_token_path": "token",
"auth_refresh_endpoint": f"{MOCK_BASE}/refresh",
"refresh_body": {"refresh_token": "{auth_tokens.doviz-kuru.refresh_token}"}
},
"response_parser": {"field": "rate"},
"reply_template": "{variables.currency} kuru şu an {rate} TL."
}
},
{
"name": "yol-durumu",
"examples": ["Ankara'dan İstanbul'a yol durumu"],
"variables": ["from_location:{Ankara} to_location:{İstanbul} yol durumu"],
"action": {
"url": f"{MOCK_BASE}/yol",
"method": "POST",
"headers": [{"key": "Authorization", "value": "Bearer {auth_tokens.yol-durumu.token}"}],
"body": {
"from_location": "{variables.from_location}",
"to_location": "{variables.to_location}"
},
"auth": {
"auth_endpoint": f"{MOCK_BASE}/auth",
"auth_body": {"username": "user", "password": "pass"},
"auth_token_path": "token",
"auth_refresh_endpoint": f"{MOCK_BASE}/refresh",
"refresh_body": {"refresh_token": "{auth_tokens.yol-durumu.refresh_token}"}
},
"response_parser": {"field": "status"},
"reply_template": "{status}"
}
}
]
}
requests.post(f"{BASE_URL}/train_intents", json=intents)
if not wait_for_intent_training():
assert_test("Intent eğitimi zamanında tamamlandı", "False", "True")
summarize_tests()
return
r = requests.post(f"{BASE_URL}/load_intent_model")
assert_test("Intent modeli yüklendi", r.json(), "ok")
# 3. Eksik parametre — doviz-kuru
r = requests.post(f"{BASE_URL}/chat", json={"user_input": "döviz kuru nedir"}, headers=headers)
assert_test("Eksik parametre — currency", r.json(), "Lütfen currency")
# 4. Parametre tamamlandı — euro
r = requests.post(f"{BASE_URL}/chat", json={"user_input": "euro"}, headers=headers)
assert_test("Parametre tamamlandı — euro", r.json(), "euro kuru şu an")
# 5. Geçersiz parametre — currency
r = requests.post(f"{BASE_URL}/chat", json={"user_input": "yenidolar kuru nedir"}, headers=headers)
assert_test("Geçersiz parametre — currency", r.json(), "geçerli bir döviz")
# 6. Eksik parametre — yol durumu
r = requests.post(f"{BASE_URL}/chat", json={"user_input": "Ankara'dan yol durumu"}, headers=headers)
assert_test("Eksik parametre — to_location", r.json(), "Lütfen to_location")
# 7. Parametre tamamlandı — yol
r = requests.post(f"{BASE_URL}/chat", json={"user_input": "İstanbul"}, headers=headers)
assert_test("Parametre tamamlandı — yol durumu", r.json(), "trafik açık")
# 8. Konu değişikliği → awaiting reset
r = requests.post(f"{BASE_URL}/chat", json={"user_input": "hava nasıl"}, headers=headers)
assert_test("Konu değişikliği sonrası fallback", r.json(), "Bu konuda maalesef")
summarize_tests()
except Exception as e:
log(f"❌ run_all_tests sırasında hata oluştu: {e}")