KKC1234/Analyzer1
0
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