Spaces:
Sleeping
Sleeping
File size: 4,151 Bytes
a2f1a4d 9b35d16 71978cc 3f01465 71978cc 4be2e38 c32c1af 4be2e38 84a5b18 71978cc 84a5b18 9b35d16 84a5b18 71978cc 84a5b18 a2f1a4d 4be2e38 c32c1af 4be2e38 a2f1a4d 84a5b18 71978cc a2f1a4d 5119cc5 a2f1a4d 5119cc5 a2f1a4d 5119cc5 a2f1a4d 5119cc5 a2f1a4d 84a5b18 5119cc5 a2f1a4d 84a5b18 a2f1a4d d06a7aa 3f01465 d06a7aa 3f01465 d06a7aa 3f01465 d06a7aa 3f01465 4be2e38 fba6dac |
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 |
from flask import Flask, render_template, send_from_directory, request, jsonify
from simple_salesforce import Salesforce
from dotenv import load_dotenv
import os
import requests
# Load environment variables from .env file
load_dotenv()
app = Flask(__name__, template_folder='templates', static_folder='static')
# Function to get Salesforce connection
def get_salesforce_connection():
try:
sf = Salesforce(
username=os.getenv('SFDC_USERNAME'),
password=os.getenv('SFDC_PASSWORD'),
security_token=os.getenv('SFDC_SECURITY_TOKEN'),
domain=os.getenv('SFDC_DOMAIN', 'login')
)
return sf
except Exception as e:
print(f"Error connecting to Salesforce: {e}")
return None
# Initialize Salesforce connection
sf = get_salesforce_connection()
@app.route('/')
def index():
return render_template('index.html')
@app.route('/static/<path:filename>')
def serve_static(filename):
return send_from_directory('static', filename)
@app.route('/get_ingredients', methods=['POST'])
def get_ingredients():
global sf
if not sf:
sf = get_salesforce_connection()
if not sf:
return jsonify({"error": "Failed to connect to Salesforce"}), 500
dietary_preference = request.json.get('dietary_preference', '').lower()
# SOQL query based on dietary preference
if dietary_preference == 'veg':
soql = "SELECT Name, Image_URL__c FROM Sector_Detail__c WHERE Category__c = 'Veg' LIMIT 200"
elif dietary_preference == 'non-vegetarian':
soql = "SELECT Name, Image_URL__c FROM Sector_Detail__c WHERE Category__c = 'Non-Veg' LIMIT 200"
else:
soql = "SELECT Name, Image_URL__c FROM Sector_Detail__c LIMIT 200"
try:
result = sf.query(soql)
ingredients = [
{"name": record['Name'], "image_url": record.get('Image_URL__c', '')}
for record in result['records'] if 'Name' in record
]
return jsonify({"ingredients": ingredients})
except Exception as e:
return jsonify({"error": f"Failed to fetch ingredients: {str(e)}"}), 500
# Endpoint to generate South Indian recipes using OpenAI ChatGPT
@app.route('/generate_recipes', methods=['POST'])
def generate_recipes():
data = request.json
selected_ingredients = data.get('ingredients', [])
if not selected_ingredients:
return jsonify({"error": "No ingredients selected"}), 400
api_key = os.getenv('CHATGPT_API_KEY')
if not api_key:
return jsonify({"error": "CHATGPT_API_KEY not configured in .env"}), 500
headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
ingredients_str = ', '.join(selected_ingredients)
prompt = f"Generate 5 authentic South Indian recipes using {ingredients_str}. For each recipe, provide: name, image_url (use placeholder like https://via.placeholder.com/100?text={{name}}), description (a short engaging summary), details (an object with preparation steps and key ingredients as a list). Return the response as a JSON array of recipe objects."
payload = {
'model': 'gpt-3.5-turbo',
'messages': [{'role': 'user', 'content': prompt}],
'max_tokens': 500
}
try:
response = requests.post('https://api.openai.com/v1/chat/completions', headers=headers, json=payload)
response.raise_for_status()
result = response.json()
content = result['choices'][0]['message']['content']
# Parse the ChatGPT response (assuming it returns JSON-like string)
import json
recipes = json.loads(content) # Adjust parsing based on actual ChatGPT output format
return jsonify({"recipes": recipes})
except requests.exceptions.RequestException as e:
return jsonify({"error": f"Failed to connect to ChatGPT API: {str(e)}"}), 500
except json.JSONDecodeError as e:
return jsonify({"error": f"Failed to parse ChatGPT response: {str(e)}. Raw response: {content}"}), 500
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=7860) |