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.")