Spaces:
Sleeping
Sleeping
| 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.") | |