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