Spaces:
Sleeping
Sleeping
# 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() | |
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() | |