evliyapp_backend / scripts /test_embedding_retrieval.py
GulAkkoca
backend entegration ver1
38a13e6
Raw
History Blame Contribute Delete
4.15 kB
import sys
import os
import logging
# Python'un 'app' klasörünü bulabilmesi için proje ana dizinini yola ekliyoruz
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from app.recommendation.embedding import embed_query
from app.recommendation.retrieval import retrieve_candidates
logging.basicConfig(level=logging.INFO)
# 1. Test Embedding
print("="*50)
print("1. EMBEDDING TESTI")
print("="*50)
query = "Kadıköy'de deniz manzaralı güzel bir kahveci"
print(f"Sorgu: '{query}'")
print("Vektör oluşturuluyor (Model yüklenecek)...")
vec = embed_query(query)
print(f"Vektör uzunluğu: {len(vec)} (Beklenen: 384)")
print(f"Vektörün ilk 5 elemanı: {vec[:5]}")
print("\n")
# 2. Test Retrieval (Mock Supabase Client)
print("="*50)
print("2. RETRIEVAL (VERİ ÇEKME) TESTİ (MOCK DB)")
print("="*50)
class MockSupabaseClient:
def rpc(self, rpc_name, params):
self.rpc_name = rpc_name
self.params = params
return self
def execute(self):
print(f" -> [Mock DB] Çalıştırılan Fonksiyon (RPC): {self.rpc_name}")
print(f" -> [Mock DB] Veritabanına gönderilen parametreler:")
for k, v in self.params.items():
if isinstance(v, list) and len(v) > 5 and isinstance(v[0], float):
print(f" {k}: [Uzunluğu {len(v)} olan vektör listesi]")
else:
print(f" {k}: {v}")
# Sahte veritabanı cevapları
return MockResponse([
{"id": "uuid-1", "name": "Moda Çay Bahçesi", "district": "Kadıköy", "similarity": 0.95},
{"id": "uuid-2", "name": "Walter's Coffee Roastery", "district": "Kadıköy", "similarity": 0.88}
])
class MockResponse:
def __init__(self, data):
self.data = data
mock_supabase = MockSupabaseClient()
# Yapay zekadan (NLP) dönen sahte cevap
nlp_result = {
"status": "success",
"intent": "search_place",
"query": "Kadıköy'de deniz manzaralı güzel bir kahveci",
"entities": {
"location_context": {
"city": "Kadıköy"
},
"category_match": {
"main_category": "kahveci"
}
}
}
print(f"NLP Çıktısı Simüle Ediliyor: {nlp_result}")
print("retrieve_candidates fonksiyonu çağrılıyor...")
candidates = retrieve_candidates(
supabase_client=mock_supabase,
nlp_result=nlp_result,
query_embedding=vec,
top_k=5
)
print("\nRetrieval fonksiyonundan dönen sonuçlar:")
for c in candidates:
print(f" - {c}")
# 3. Test Retrieval with Route Stops
print("\n" + "="*50)
print("3. RETRIEVAL (ROUTING & STOPS) TESTI")
print("="*50)
nlp_result_route = {
"status": "success",
"intent": "routing",
"query": "Kadıköy'den kalkıp Karaköy ve Eminönü üzerinden Beşiktaş'a rota, güzel kahveciler",
"route": {
"enabled": True,
"origin": "Kadıköy",
"stops": ["Karaköy", "Eminönü"],
"destination": "Beşiktaş"
},
"entities": {
"category_match": {
"main_category": "kahveci"
}
}
}
print(f"NLP Çıktısı Simüle Ediliyor (Route): {nlp_result_route}")
print("retrieve_candidates fonksiyonu (Route) çağrılıyor...\n")
candidates_route = retrieve_candidates(
supabase_client=mock_supabase,
nlp_result=nlp_result_route,
query_embedding=vec,
top_k=5
)
print("\nRouting Retrieval fonksiyonundan dönen sonuçlar:")
for c in candidates_route:
print(f" - {c}")
# Kontroller (Asserts)
print("\n[Test Kontrolü] Mock RPC params inceleniyor...")
params = mock_supabase.params
assert "p_route_stops" in params, "HATA: Mock RPC parametreleri içinde p_route_stops bulunamadı!"
assert isinstance(params["p_route_stops"], list), "HATA: p_route_stops bir liste olarak gönderilmiyor!"
assert params["p_route_stops"] == ["Karaköy", "Eminönü"], f"HATA: Beklenen duraklar gelmedi. Gelen: {params['p_route_stops']}"
print("✅ Başarılı: p_route_stops Mock RPC parametrelerinde mevcut.")
print(f"✅ Başarılı: p_route_stops doğru formatta (Liste) ve değerlerle ({params['p_route_stops']}) gidiyor.")