CoolFace
Apppublic

KKC1234/Analyzer1

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
app.py115 linesDownload Raw Back to root
1import streamlit as st2import os3import google.generativeai as genai4import tempfile5import time6 7# Configure the Gemini API8genai.configure(api_key=os.environ.get("GEMINI_API_KEY"))9 10# Create the model11generation_config = {12    "temperature": 0.9,13    "top_p": 1.0,14    "top_k": 32,15    "max_output_tokens": 8192,16}17model = genai.GenerativeModel(18    model_name="gemini-1.5-pro",19    generation_config=generation_config,20)21 22def upload_to_gemini(file_path, mime_type=None):23    """Uploads the given file to Gemini."""24    try:25        file = genai.upload_file(file_path, mime_type=mime_type)26        time.sleep(2)  # Short delay after uploading27        return file28    except Exception as e:29        st.error(f"Error uploading file: {str(e)}")30        return None31 32def process_file(file, prompt, mime_type):33    with tempfile.NamedTemporaryFile(delete=False, suffix=f".{mime_type.split('/')[-1]}") as tmp_file:34        tmp_file.write(file.getvalue())35        tmp_file.flush()36        tmp_file_path = tmp_file.name37    try:38        uploaded_file = upload_to_gemini(tmp_file_path, mime_type=mime_type)39        if uploaded_file is None:40            return "File upload failed."41        response = model.generate_content([uploaded_file, prompt])42        return response.text43    except Exception as e:44        return f"Error processing file: {str(e)}"45    finally:46        os.unlink(tmp_file_path)47 48# Streamlit UI49st.title("File Analysis with Gemini")50 51# Sidebar for file type selection52file_type = st.sidebar.selectbox(53    "Choose file type",54    ["Image", "Video", "Audio", "PDF"]55)56 57# Main content area58st.subheader(f"Upload {file_type}s")59 60file_types = {61    "Image": ["png", "jpg", "jpeg"],62    "Video": ["mp4"],63    "Audio": ["mp3"],64    "PDF": ["pdf"]65}66 67mime_types = {68    "Image": "image/jpeg",69    "Video": "video/mp4",70    "Audio": "audio/mpeg",71    "PDF": "application/pdf"72}73 74default_prompts = {75    "Image": "Describe these images in detail.",76    "Video": "Provide a description of the videos.",77    "Audio": "Summarize the audio contents and provide key points.",78    "PDF": "Summarize the main points of these documents."79}80 81uploaded_files = st.file_uploader(f"Choose {file_type.lower()} files", type=file_types[file_type], accept_multiple_files=True)82 83user_prompt = st.text_area("Enter your prompt for analysis:", default_prompts[file_type])84 85if st.button("Analyze"):86    if uploaded_files:87        for i, uploaded_file in enumerate(uploaded_files):88            with st.spinner(f"Processing {file_type.lower()} {i+1} of {len(uploaded_files)}..."):89                result = process_file(uploaded_file, user_prompt, mime_types[file_type])90                91                if "Error" not in result:92                    st.success(f"{file_type} {i+1} processed successfully!")93                    st.subheader(f"Analysis Result for {uploaded_file.name}:")94                    st.write(result)95                else:96                    st.error(f"Error processing {uploaded_file.name}: {result}")97            98            st.markdown("---")  # Separator between file results99    else:100        st.error(f"Please upload at least one {file_type.lower()} file.")101 102# Display the uploaded files103if uploaded_files:104    st.subheader("Uploaded Files:")105    for uploaded_file in uploaded_files:106        if file_type == "Image":107            st.image(uploaded_file, caption=f"Uploaded Image: {uploaded_file.name}", use_column_width=True)108        elif file_type == "Video":109            st.video(uploaded_file)110        elif file_type == "Audio":111            st.audio(uploaded_file)112        elif file_type == "PDF":113            st.write(f"PDF uploaded successfully: {uploaded_file.name}")114        115        st.markdown("---")  # Separator between displayed files