File size: 4,152 Bytes
fddb26d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
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.")