eat2fit / app.py
DurgaDeepak's picture
Update app.py
05f1709 verified
raw
history blame
2.24 kB
# app.py
import gradio as gr
import spaces
from transformers import pipeline
import os
from PyPDF2 import PdfReader
from dotenv import load_dotenv
load_dotenv()
@spaces.GPU
class ChatBot:
def __init__(self):
self.llm = pipeline("text-generation", model="mistralai/Mistral-7B-Instruct-v0.1", token=os.getenv("HF_TOKEN"))
self.context = ""
def read_meal_plans(self, folder="meal_plans"):
text = ""
for file in os.listdir(folder):
if file.endswith(".pdf"):
reader = PdfReader(os.path.join(folder, file))
for page in reader.pages:
text += page.extract_text() + "\n"
return text
def reply(self, message, history, preferences):
diet, goal, allergens = preferences
if not self.context:
mealplan_text = self.read_meal_plans()
self.context = f"Meal Plans: {mealplan_text}\nUser Preferences: Diet={diet}, Goal={goal}, Allergens={allergens}"
prompt = f"{self.context}\nUser: {message}\nAI:"
response = self.llm(prompt, max_new_tokens=100, do_sample=True, temperature=0.7)[0]['generated_text'].split("AI:")[-1].strip()
return response
bot = ChatBot()
def chat(message, history, diet, goal, allergens):
return bot.reply(message, history, (diet, goal, allergens))
diet_choices = ["Vegetarian", "Vegan", "Keto", "Paleo", "No Preference"]
goal_choices = ["Weight Loss", "Muscle Gain", "Maintenance"]
allergen_choices = ["Nuts", "Dairy", "Gluten", "Soy", "Eggs"]
with gr.Blocks() as demo:
gr.Markdown("# 🥗 AI Meal Plan Assistant")
with gr.Row():
diet = gr.Dropdown(diet_choices, label="Diet Type")
goal = gr.Dropdown(goal_choices, label="Goal")
allergens = gr.CheckboxGroup(allergen_choices, label="Allergies")
chatbot = gr.Chatbot()
msg = gr.Textbox(placeholder="Ask me for meal ideas...", label="Message")
send = gr.Button("Send")
def user_input(message, chat_history):
response = chat(message, chat_history, diet.value, goal.value, allergens.value)
chat_history.append((message, response))
return chat_history, ""
send.click(user_input, [msg, chatbot], [chatbot, msg])
demo.launch()