from db import fetch_db_rows_as_dicts import google.generativeai as genai import json GOOGLE_API_KEY='AIzaSyC0T2fN5Dga-6nkPc6HYV7-bDZskqgALX0' genai.configure(api_key=GOOGLE_API_KEY) model = genai.GenerativeModel(model_name = "gemini-pro") def load_json_from_string(json_string): try: data = json.loads(json_string) return data except json.JSONDecodeError as e: print(f"Error decoding JSON: {e}") except Exception as e: print(f"An error occurred: {e}") def concatenate_keys(keys): concatenated_string = "" for i, d in enumerate(keys, start=1): concatenated_string += f"{d} " return concatenated_string.strip() def transform_to_dict_of_dicts(columns, rows): # Initialize the result dictionary result = {} # Iterate over each row for row in rows: # The first element of the row is the key for the outer dictionary outer_key = row[0].strip() # Initialize the inner dictionary inner_dict = {} # Iterate over the rest of the elements in the row for i, value in enumerate(row[1:], start=1): # The corresponding column name is the key for the inner dictionary inner_key = columns[i].strip() # Add the key-value pair to the inner dictionary inner_dict[inner_key] = value # Add the inner dictionary to the result dictionary with the outer key result[outer_key] = inner_dict return result def findTop3MoneyNeeds(proposition): moneyNeeds, rows = fetch_db_rows_as_dicts('money_needs.sqlite', 'money_needs') moneyNeedsDict = transform_to_dict_of_dicts(moneyNeeds, rows) print(list(moneyNeedsDict.keys())) needs = findTop3Needs(proposition, list(moneyNeedsDict.keys())) needDictIndexes = [] for need in needs: needDictIndexes.append(moneyNeedsDict[need]) print(needDictIndexes) return needDictIndexes def findTop3Needs(proposition, moneyNeeds): moneyNeedsString = concatenate_keys(moneyNeeds) prompt = '''You have these listed needs of customers {} Now given a proposition "{}" Find the best 3 strings out of the list which matches this proposition. Return output strictly only in json under a list called matches ''' moneyNeedsPrompt = prompt.format(moneyNeedsString, proposition) response = model.generate_content([moneyNeedsPrompt]) output = response.text output = output.replace('```json', '') output = output.replace('```', '') obj = load_json_from_string(output) print(obj) return obj['matches'] #findTop3MoneyNeeds('We have a product for family people giving them discounts and low interest loans for home appliances. They can pay us back in small instalments over the course of 4 years')