Spaces:
Sleeping
Sleeping
import requests | |
import google.generativeai as genai | |
import streamlit as st | |
from PIL import Image | |
# Configure Gemini API (Use your actual API key) | |
# genai.configure(api_key='AIzaSyD5yLv8zkGNC7YbxxODLqlMJJKTv8VWdQw') | |
genai.configure(api_key='AIzaSyA2KzkhAYsBCPYfvgmEuE1DFGS1GuznW4Q') | |
# Function to get data from OpenFoodFacts API | |
def get_data(product_name): | |
url = "https://world.openfoodfacts.org/cgi/search.pl" | |
params = { | |
'search_terms': product_name, | |
'search_simple': 1, | |
'json': 1, | |
} | |
response = requests.get(url, params=params) | |
data = response.json() | |
if 'products' not in data or len(data['products']) == 0: | |
return [] # Return empty if no products found | |
# Filter products with names and return top 5 | |
data['products'] = [p for p in data['products'] if 'product_name' in p] | |
return data['products'][:1] | |
# Function to generate product analysis using Gemini | |
def generate_summary(product, tone): | |
name = product.get('product_name', 'Not mentioned') | |
brand = product.get('brands', 'Not mentioned') | |
nutriscore_grade = product.get('nutriscore_grade', 'Not mentioned') | |
eco_score = product.get('ecoscore_grade', 'Not mentioned') | |
packaging = product.get('packaging', 'Not mentioned') | |
ingredients = product.get('ingredients_text', 'Not mentioned') | |
nutrients = product.get('nutriments', 'Not mentioned') | |
nova = product.get('nova_groups_tags', 'Not mentioned') | |
# Generate prompt based on tone | |
prompt = f""" | |
You are an AI assistant analyzing consumer products. Here are the details: | |
- Name: {name} | |
- Brand: {brand} | |
- EcoScore: {eco_score} | |
- NutriScore: {nutriscore_grade} | |
- NovaScore: {nova} | |
- Ingredients: {ingredients} | |
- Nutrients: {nutrients} | |
- Packaging: {packaging} | |
Please provide a {tone} analysis including: | |
1. Positive aspects of the product. | |
2. Negative aspects of the product. | |
3. Health impact. | |
4. Environmental impact. | |
""" | |
model = genai.GenerativeModel(model_name="gemini-1.5-flash") | |
response = model.generate_content(prompt) | |
return response.text | |
# Streamlit interface | |
def main(): | |
# Page setup and header with background image | |
st.set_page_config(page_title="ConsumeNice", page_icon="π½", layout="centered") | |
# Custom CSS for better aesthetics | |
st.markdown( | |
""" | |
<style> | |
.main {background-color: #000000;} | |
.reportview-container .main .block-container { | |
padding-top: 2rem; | |
padding-right: 2.5rem; | |
padding-left: 2.5rem; | |
} | |
h1, h2, h3, h4, h5 {color: #ffffff;} | |
.stButton>button { | |
background-color: #6c757d; | |
color: white; | |
border-radius: 8px; | |
} | |
.stButton>button:hover { | |
background-color: #5a6268; | |
} | |
.stTextInput>div>input { | |
padding: 10px; | |
border-radius: 6px; | |
border: 1px solid #ced4da; | |
background-color: #f8f9fa; | |
} | |
.stRadio>div>label {color: #495057 !important;} | |
.css-1d391kg {color: #495057 !important;} | |
.css-145kmo2 {color: #495057 !important;} | |
</style> | |
""", | |
unsafe_allow_html=True | |
) | |
# App logo and header side by side | |
col1, col2 = st.columns([1, 3]) # Adjust proportions as needed | |
with col1: | |
st.image(Image.open('logo.png'), width=120, caption="ConsumeNice - Know What You Consume") | |
with col2: | |
st.markdown( | |
"<h1 style='text-align: left; color: #ffffff;'>π½οΈ ConsumeNice - Analyze Products with AI</h1>", | |
unsafe_allow_html=True | |
) | |
st.write("Welcome to ConsumeNice, where you can search for products and get an AI-generated analysis based on their nutritional, environmental, and packaging details.") | |
# Sidebar for developer profiles and hackathon info | |
st.sidebar.markdown( | |
""" | |
<h1 style='color: #0072B2;'>π Hackathon Project</h1> | |
""", | |
unsafe_allow_html=True | |
) | |
st.sidebar.markdown("Welcome to the ConsumeNice project, developed for the hackathon to showcase AI integration in product analysis.") | |
# Add some icons/emojis to make it look more engaging | |
st.sidebar.markdown("### π§ Project Features") | |
# st.sidebar.markdown("- Analyze product details using OpenFoodFacts API.") | |
st.sidebar.markdown("- AI-generated analysis using Google Gemini AI.") | |
st.sidebar.markdown("- Environment, packaging, and health analysis.") | |
# Developer details with LinkedIn links | |
st.sidebar.markdown("### π¨βπ» Developers") | |
st.sidebar.markdown("[Srish](https://www.linkedin.com/in/srishrachamalla/) - AI/ML Developer") | |
st.sidebar.markdown("[Sai Teja](https://www.linkedin.com/in/saiteja-pallerla-668734225/) - Data Analyst") | |
# Add expander sections for additional content | |
with st.sidebar.expander("βΉ About ConsumeNice"): | |
st.write("ConsumeNice is designed to give consumers more insights into the products they consume, analyzing factors like health impact, environmental footprint, and packaging.") | |
with st.sidebar.expander("π Useful Resources"): | |
st.write("[Google Gemini AI Documentation](https://ai.google.dev/gemini-api/docs)") | |
st.write("[Streamlit Documentation](https://docs.streamlit.io/)") | |
# Add progress indicator for hackathon phases or development stages | |
st.sidebar.markdown("### β³ Hackathon Progress") | |
st.sidebar.progress(0.99) # Set progress level (0 to 1) | |
# Sidebar footer with final notes | |
st.sidebar.markdown("---") | |
st.sidebar.markdown( | |
""" | |
<div style="text-align: center; font-size: 0.85em;"> | |
Developed by Srish & Sai Teja β’ Powered by Google Gemini AI | |
</div> | |
""", unsafe_allow_html=True | |
) | |
# User input fields with improved placeholders and hints | |
product_input = st.text_input("Enter Product Name", placeholder="e.g., Coca-Cola, Oreo, Dove Soap") | |
tone = st.radio("Choose Analysis Depth", options=["Simple", "In-depth"], index=0) | |
# ##ss | |
if st.button("Search"): | |
with st.spinner("Searching for products..."): | |
products = get_data(product_input) | |
if not products: | |
st.error("No products found for the given name.") | |
else: | |
# product_names = [f"{p['product_name']} (Brand: {p.get('brands', 'Unknown')})" for p in products] | |
# selected_product_name = st.radio("Select a Product", product_names, key='product_selection') | |
# print(selected_product_name) | |
# selected_product = next(p for p in products if f"{p['product_name']} (Brand: {p.get('brands', 'Unknown')})" == selected_product_name) | |
# print(selected_product) | |
# st.write(f"### Product Selected: {selected_product['product_name']} (Brand: {selected_product.get('brands', 'Unknown')})") | |
# if selected_product: | |
# if 'summary' not in st.session_state: | |
# st.session_state.summary = None | |
# with st.spinner("Generating AI-powered analysis..."): | |
# summary = generate_summary(selected_product, tone.lower()) | |
# st.session_state.summary = summary | |
# st.write("### Product Analysis Summary:") | |
# st.success(st.session_state.summary) | |
product_names = [f"{p['product_name']} (Brand: {p.get('brands', 'Unknown')})" for p in products] | |
selected_product = products[0] | |
st.write(f"### Product Selected: {product_names[0]}") | |
with st.spinner("Generating AI-powered analysis..."): | |
summary = generate_summary(selected_product, tone.lower()) | |
st.session_state.summary = summary | |
st.write("### Product Analysis Summary:") | |
st.success(st.session_state.summary) | |
# Footer with hackathon and design details | |
st.markdown("---") | |
st.markdown(""" | |
<div style="text-align: center; font-size: 0.9em;"> | |
<p><i>ConsumeNice</i> was developed for a hackathon using <b>Streamlit</b> to showcase AI integration with real-world data sources.</p> | |
<p>Developed by Srish & Sai Teja β’ Powered by Google Gemini AI</p> | |
</div> | |
""", unsafe_allow_html=True) | |
if __name__ == "__main__": | |
main() |