trygemini / app.py
ombhojane's picture
Create app.py
b632636 verified
import streamlit as st
import os
import google.generativeai as genai
import tempfile
import time
# Configure the Gemini API
genai.configure(api_key=os.environ.get("GEMINI_API_KEY"))
# Create the model
generation_config = {
"temperature": 0.9,
"top_p": 1.0,
"top_k": 32,
"max_output_tokens": 8192,
}
model = genai.GenerativeModel(
model_name="gemini-1.5-pro",
generation_config=generation_config,
)
def upload_to_gemini(file_path, mime_type=None):
"""Uploads the given file to Gemini."""
try:
file = genai.upload_file(file_path, mime_type=mime_type)
time.sleep(2) # Short delay after uploading
return file
except Exception as e:
st.error(f"Error uploading file: {str(e)}")
return None
def process_file(file, prompt, mime_type):
with tempfile.NamedTemporaryFile(delete=False, suffix=f".{mime_type.split('/')[-1]}") as tmp_file:
tmp_file.write(file.getvalue())
tmp_file.flush()
tmp_file_path = tmp_file.name
try:
uploaded_file = upload_to_gemini(tmp_file_path, mime_type=mime_type)
if uploaded_file is None:
return "File upload failed."
response = model.generate_content([uploaded_file, prompt])
return response.text
except Exception as e:
return f"Error processing file: {str(e)}"
finally:
os.unlink(tmp_file_path)
# Streamlit UI
st.title("File Analysis with Gemini")
# Sidebar for file type selection
file_type = st.sidebar.selectbox(
"Choose file type",
["Image", "Video", "Audio", "PDF"]
)
# Main content area
st.subheader(f"Upload {file_type}")
uploaded_file = st.file_uploader(f"Choose a {file_type.lower()} file", type={"Image": ["png", "jpg", "jpeg"],
"Video": ["mp4"],
"Audio": ["mp3"],
"PDF": ["pdf"]}[file_type])
user_prompt = st.text_area("Enter your prompt for analysis:",
{"Image": "Describe this image in detail.",
"Video": "Provide a description of the video.",
"Audio": "Summarize the audio content and provide key points.",
"PDF": "Summarize the main points of this document."}[file_type])
if st.button("Analyze"):
if uploaded_file is not None:
with st.spinner(f"Processing {file_type.lower()}..."):
mime_type = {"Image": "image/jpeg",
"Video": "video/mp4",
"Audio": "audio/mpeg",
"PDF": "application/pdf"}[file_type]
result = process_file(uploaded_file, user_prompt, mime_type)
if "Error" not in result:
st.success(f"{file_type} processed successfully!")
st.subheader("Analysis Result:")
st.write(result)
else:
st.error(result)
else:
st.error(f"Please upload a {file_type.lower()} file.")
# Display the uploaded file
if uploaded_file is not None:
if file_type == "Image":
st.image(uploaded_file, caption="Uploaded Image", use_column_width=True)
elif file_type == "Video":
st.video(uploaded_file)
elif file_type == "Audio":
st.audio(uploaded_file)
elif file_type == "PDF":
st.write("PDF uploaded successfully. Content cannot be displayed directly in Streamlit.")