| import streamlit as st |
| import os |
| import google.generativeai as genai |
| import tempfile |
| import time |
|
|
| |
| genai.configure(api_key=os.environ.get("GEMINI_API_KEY")) |
|
|
| |
| 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) |
| 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) |
|
|
| |
| st.title("File Analysis with Gemini") |
|
|
| |
| file_type = st.sidebar.selectbox( |
| "Choose file type", |
| ["Image", "Video", "Audio", "PDF"] |
| ) |
|
|
| |
| 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.") |
|
|
| |
| 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.") |