RAG / app.py
krisha06's picture
Update app.py
064f427 verified
import streamlit as st
import pandas as pd
import requests
from io import BytesIO
from PIL import Image
from transformers import pipeline
# --- 1. Load Recipes Dataset ---
@st.cache_data
def load_data():
return pd.read_csv("recipes.csv")
df = load_data()
# --- 2. Initialize LLM Pipeline ---
llm = pipeline("text-generation", model="facebook/opt-1.3b")
# --- 3. Retrieve Recipe Function ---
def retrieve_recipe(query):
matching_recipes = df[df['recipe_name'].str.contains(query, case=False, na=False)]
return matching_recipes if not matching_recipes.empty else None
# --- 4. Generate Response for Non-Recipe Queries ---
def generate_response(query):
prompt = f"You are an AI assistant that only provides recipe-related responses. If the user asks something unrelated to recipes, politely decline. Query: {query}"
response = llm(prompt, max_length=100, do_sample=True)[0]['generated_text']
return response
# --- 5. Display Image Function ---
def display_image(image_url, recipe_name):
try:
if not isinstance(image_url, str) or not image_url.startswith("http"):
raise ValueError("Invalid or missing image URL")
response = requests.get(image_url, timeout=5)
response.raise_for_status()
image = Image.open(BytesIO(response.content))
st.image(image, caption=recipe_name, use_container_width=True)
except requests.exceptions.RequestException:
st.image("https://via.placeholder.com/300?text=No+Image", caption=recipe_name, use_container_width=True)
# --- 6. Streamlit UI ---
st.title("🍽 Recipe Finder RAG App")
query = st.text_input("Ask me for a recipe:")
if query:
recipe_result = retrieve_recipe(query)
if recipe_result is not None:
for _, row in recipe_result.iterrows():
st.subheader(row['recipe_name'])
st.write(f"**Prep Time:** {row['prep_time']} | **Cook Time:** {row['cook_time']} | **Total Time:** {row['total_time']}")
st.write(f"**Servings:** {row['servings']} | **Yield:** {row['yield']}")
st.write(f"**Ingredients:** {row['ingredients']}")
st.write(f"**Directions:** {row['directions']}")
st.write(f"[View Full Recipe]({row['url']})")
display_image(row['img_src'], row['recipe_name'])
else:
st.warning("⚠ No recipe found! Generating a response...")
st.write(generate_response(query))