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