File size: 7,981 Bytes
d1aea20 2940ad4 d82403f d1aea20 a1cfef6 8f3a5d1 d1aea20 a1cfef6 d1aea20 8f3a5d1 2fab7d3 0ec8fd1 15e9641 2fab7d3 00d34d4 15e9641 0ec8fd1 15e9641 0ec8fd1 8f3a5d1 0ec8fd1 8f3a5d1 0ec8fd1 8f3a5d1 0ec8fd1 8f3a5d1 0ec8fd1 8f3a5d1 0ec8fd1 8f3a5d1 0ec8fd1 15e9641 2fdeb17 15e9641 8f3a5d1 0ec8fd1 0613b1a 0ec8fd1 0613b1a 0ec8fd1 00d34d4 0ec8fd1 a4315ce 0ec8fd1 15e9641 0ec8fd1 d82403f 0ec8fd1 15e9641 0ec8fd1 15e9641 2940ad4 0ec8fd1 2940ad4 efa0646 d82403f 15e9641 2940ad4 8f3a5d1 2940ad4 8f3a5d1 15e9641 2fab7d3 2940ad4 |
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 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
import torch
from flask import Flask, render_template, request, jsonify, session
import json
import os
from transformers import pipeline
from gtts import gTTS
from pydub import AudioSegment
from pydub.silence import detect_nonsilent
from transformers import AutoConfig # Import AutoConfig for the config object
import time
from waitress import serve
from simple_salesforce import Salesforce
import requests # Import requests for exception handling
app = Flask(__name__)
app.secret_key = 'your_secret_key' # Use a secure secret key for sessions
# Use whisper-small for faster processing and better speed
device = "cuda" if torch.cuda.is_available() else "cpu"
# Create config object to set timeout and other parameters
config = AutoConfig.from_pretrained("openai/whisper-small")
config.update({"timeout": 60}) # Set timeout to 60 seconds
# Salesforce connection setup
try:
print("Attempting to connect to Salesforce...")
sf = Salesforce(username='[email protected]', password='Sati@1020', security_token='sSSjyhInIsUohKpG8sHzty2q')
print("Connected to Salesforce successfully!")
except Exception as e:
print(f"Failed to connect to Salesforce: {str(e)}")
# Function for Salesforce operations
def create_salesforce_record(name, email, phone_number):
try:
customer_login = sf.Customer_Login__c.create({
'Name': name,
'Email__c': email,
'Phone_Number__c': phone_number
})
return customer_login
except Exception as e:
raise Exception(f"Failed to create record: {str(e)}")
def get_menu_items():
query = "SELECT Name, Price__c, Ingredients__c, Category__c FROM Menu_Item__c"
result = sf.query(query)
return result['records']
def create_salesforce_order(cart_items, total_price, customer_id):
try:
order = sf.Order__c.create({
'Total_Price__c': total_price,
'Cart_Items__c': json.dumps(cart_items), # Storing cart items as JSON
'Customer__c': customer_id # Linking to the customer record
})
return order
except Exception as e:
raise Exception(f"Failed to create order: {str(e)}")
# Voice-related functions
def generate_audio_prompt(text, filename):
try:
tts = gTTS(text)
tts.save(os.path.join("static", filename))
except gtts.tts.gTTSError as e:
print(f"Error: {e}")
print("Retrying after 5 seconds...")
time.sleep(5) # Wait for 5 seconds before retrying
generate_audio_prompt(text, filename)
# Utility functions
def convert_to_wav(input_path, output_path):
try:
audio = AudioSegment.from_file(input_path)
audio = audio.set_frame_rate(16000).set_channels(1) # Convert to 16kHz, mono
audio.export(output_path, format="wav")
except Exception as e:
print(f"Error: {str(e)}")
raise Exception(f"Audio conversion failed: {str(e)}")
def is_silent_audio(audio_path):
audio = AudioSegment.from_wav(audio_path)
nonsilent_parts = detect_nonsilent(audio, min_silence_len=500, silence_thresh=audio.dBFS-16) # Reduced silence duration
print(f"Detected nonsilent parts: {nonsilent_parts}")
return len(nonsilent_parts) == 0 # If no speech detected
# Routes and Views
@app.route("/")
def index():
return render_template("index.html")
@app.route("/dashboard", methods=["GET"])
def dashboard():
return render_template("dashboard.html") # Render the dashboard template
@app.route('/submit', methods=['POST'])
def submit():
try:
data = request.get_json()
print("Received Data:", data) # Debugging line
if not data:
return jsonify({"success": False, "message": "Invalid or empty JSON received"}), 400
name = data.get("name")
email = data.get("email")
phone = data.get("phone")
if not name or not email or not phone:
return jsonify({"success": False, "message": "Missing required fields"}), 400
salesforce_data = {
"Name": name,
"Email__c": email, # Ensure this is the correct field API name in Salesforce
"Phone_Number__c": phone # Ensure this is the correct field API name in Salesforce
}
try:
result = sf.Customer_Login__c.create(salesforce_data) # Replace `Customer_Login__c` with your Salesforce object API name
print(f"Salesforce Response: {result}") # Debugging line
return jsonify({"success": True, "message": "Data submitted successfully"})
except Exception as e:
if "STORAGE_LIMIT_EXCEEDED" in str(e):
return jsonify({"success": False, "message": "Salesforce storage limit exceeded. Please clean up or contact support."}), 500
else:
print(f"Salesforce Insertion Error: {str(e)}") # Log Salesforce errors
return jsonify({"success": False, "message": "Salesforce submission failed", "error": str(e)}), 500
except Exception as e:
print(f"Server Error: {str(e)}") # Log general errors
return jsonify({"success": False, "message": "Internal server error", "error": str(e)}), 500
@app.route('/validate-login', methods=['POST'])
def validate_login():
try:
data = request.get_json()
login_email = data.get("email")
login_mobile = data.get("mobile")
if not login_email or not login_mobile:
return jsonify({"success": False, "message": "Missing email or mobile number"}), 400
query = f"SELECT Id, Name, Email__c, Phone_Number__c FROM Customer_Login__c WHERE Email__c = '{login_email}' AND Phone_Number__c = '{login_mobile}'"
result = sf.query(query)
if result['records']:
user_name = result['records'][0]['Name']
return jsonify({"success": True, "message": "Login successful", "name": user_name})
else:
return jsonify({"success": False, "message": "Invalid email or mobile number"}), 401
except Exception as e:
print(f"Error validating login: {str(e)}")
return jsonify({"success": False, "message": "Internal server error", "error": str(e)}), 500
@app.route("/menu", methods=["GET"])
def menu_page():
menu_items = get_menu_items()
menu_data = [{"name": item['Name'], "price": item['Price__c'], "ingredients": item['Ingredients__c'], "category": item['Category__c']} for item in menu_items]
return render_template("menu_page.html", menu_items=menu_data)
@app.route("/add_to_cart", methods=["POST"])
def add_to_cart():
cart_items = session.get('cart_items', [])
item_name = request.json.get('item_name')
quantity = request.json.get('quantity')
cart_items.append({"name": item_name, "quantity": quantity})
session['cart_items'] = cart_items # Update session with new cart items
return jsonify({"success": True, "message": f"Added {item_name} to your cart."})
@app.route("/view_cart", methods=["GET"])
def view_cart():
cart_items = session.get('cart_items', [])
return render_template("cart_page.html", cart_items=cart_items)
@app.route("/place_order", methods=["POST"])
def place_order():
cart_items = session.get('cart_items', [])
total_price = sum([item['quantity'] * 100 for item in cart_items]) # Placeholder price calculation
customer_id = session.get('customer_id')
if not customer_id:
return jsonify({"message": "User not logged in"}), 400
try:
order_data = {"Total_Price__c": total_price, "Cart_Items__c": json.dumps(cart_items), "Customer__c": customer_id}
order = sf.Order__c.create(order_data)
session.pop('cart_items', None) # Clear the cart after placing the order
return jsonify({"message": "Order placed successfully!", "order": order})
except Exception as e:
return jsonify({"message": f"Failed to create order: {str(e)}"}), 500
# Run the app
if __name__ == "__main__":
app.run(debug=True)
|