File size: 2,780 Bytes
83bb1bd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
FINAL SMART RECOMMENDER SYSTEM
Embeddings + Intent + Filtering + Reranking + Keyword Boosting
"""

from filtered_search_engine import SmartRecommender
from reranker import Reranker
from keyword_boosting_layer import apply_keyword_boost
import pandas as pd

class FinalSalahkar:

    def __init__(self):
        print("✨ Initializing Final AI Recommender...")
        self.engine = SmartRecommender()
        self.reranker = Reranker()
        self.df = pd.read_csv("salahkar_enhanced.csv")
        
        # Optimization: Pre-compute name-to-row mapping for O(1) lookup
        # This is much faster than running df[df["name"] == name] for every result
        self.name_map = self.df.set_index("name").to_dict('index')
        
        print("πŸš€ System Ready!")

    def ask(self, query, k=7):
        print("\n==============================================")
        print(f"🧠 INPUT QUERY β†’ {query}")
        print("==============================================")

        # STEP 1 β†’ BASE SEARCH (filtered FAISS)
        # Now returns (results_list, detected_intent)
        results, intent = self.engine.recommend(query, k=k)

        # STEP 2 β†’ Prepare embedding text for reranking
        prepared = []
        for item in results:
            name = item["name"]
            
            # Optimization: FAST LOOKUP
            row = self.name_map.get(name)
            
            if row:
                prepared.append({
                    "name": name,
                    "domain": item["domain"],
                    "category": item["category"],
                    "region": item["region"],
                    "embedding_score": item["score"],
                    "text": row["search_embedding_text"], # Use index text for reranking
                    "intent": intent 
                })

        # STEP 3 β†’ Cross-Encoder Reranking
        ranked = self.reranker.rerank(query, prepared)

        # STEP 4 β†’ Keyword Boost (final scoring)
        # This applies the location/food/heritage boosts we configured
        boosted = apply_keyword_boost(query, ranked)

        # STEP 5 β†’ Display final sorted results
        print("\nπŸ† FINAL SMART RANKED RESULTS:")
        for i, item in enumerate(boosted[:k]):
            score = item.get('final_score', item.get('rerank_score', 0))
            print(f"{i+1}. {item['name']}  |  Final Score: {round(score, 3)}")

        return boosted


if __name__ == "__main__":
    bot = FinalSalahkar()

    # Test the complex new queries to verify accuracy
    bot.ask("romantic historical place india")
    bot.ask("spiritual peaceful temple")
    bot.ask("best south indian spicy breakfast")
    bot.ask("sweet festival food india")
    bot.ask("famous beaches near ongole") # Test new data point