import google.generativeai as genai import pandas as pd import os import json from data import df_all_cards #handling intent classification for retrieval def handle_query_classification(user_query): genai.configure(api_key=os.environ.get("api_key_1")) model1 = genai.GenerativeModel('gemini-2.0-flash') prompt = f""" You are a smart financial assistant. ### User's Query: {user_query} ### Task: Classify the user's intent into one of the following categories: 1. "retrieve" → If the user is asking for card suggestions, recommendations, or showing cards (e.g., "suggest a card", "need a travel card") OR if they mention their lifestyle, income, spending, or needs (e.g., travel, shopping, fuel, rewards, luxury). 2. "specific" → If the user is asking about a particular credit card by name (even if the word "card" is not used). Examples: "Tell me about HDFC Regalia", "Is SBI Elite good?". 3. "no_retrieval" → ONLY if the query is generic (e.g., “What is credit score?”), casual chit-chat (e.g., “Hi”), or doesn’t mention any lifestyle, financial needs, or specific card names. Respond ONLY in the following JSON format: If intent is "no_retrieval", you MUST include a helpful 'response' field. If intent is "retrieve" or "specific", do NOT include any response or explanation. Respond in this exact format: {{ "intent": "retrieve" | "specific" | "no_retrieval", "response": "Only include this if intent is 'no_retrieval'" }} """ raw_response = model1.generate_content(prompt).text.strip() # Clean any markdown formatting if present if raw_response.startswith("```"): raw_response = raw_response.strip("`").strip() if raw_response.startswith("json"): raw_response = raw_response[len("json"):].strip() try: parsed = json.loads(raw_response) return parsed except Exception as e: print("JSON parsing error:", e) print("Raw response from LLM:", raw_response) raise # result = handle_query_classification("Want to optimize my spending – travel often, premium hotels, and online shopping.") # if result["intent"] == "no_retrieval": # print(result['response']) #passing the card mentioned in the user query def find_matching_card(user_query): lowered_query = user_query.lower() for _, row in df_all_cards.iterrows(): if row["name"].lower() in lowered_query: return row.to_dict() return None #for queries enquiring about a card def generate_card_response_with_context(user_query, card_info): genai.configure(api_key=os.environ.get("api_key_1")) model1 = genai.GenerativeModel('gemini-2.0-flash') prompt = f""" You are a helpful financial assistant. A user has asked about a specific credit card. Card Name: {card_info.get('name')} Description: {card_info.get('description')} User's Question: {user_query} Please provide a concise, relevant answer using the above card context. """ response = model1.generate_content(prompt) return response.text.strip()