RAG / app.py
krisha06's picture
Update app.py
064f427 verified
Raw
History Blame Contribute Delete
2.42 kB
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))