Rahatara commited on
Commit
5e299d9
·
verified ·
1 Parent(s): 0abd76f

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +71 -0
app.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import time
3
+ import mimetypes
4
+ import google.generativeai as genai
5
+ import gradio as gr
6
+
7
+ # Configure the Gemini API
8
+ genai.configure(api_key=os.getenv("GEMINI_API_KEY"))
9
+
10
+ def upload_to_gemini(file_path, mime_type=None):
11
+ """Uploads the given file to Gemini, returning the URI for use in chat."""
12
+ file = genai.upload_file(file_path, mime_type=mime_type)
13
+ print(f"Uploaded file '{file.display_name}' as: {file.uri}")
14
+ return file.uri
15
+
16
+ def wait_for_files_active(file_uris):
17
+ """Ensure all files are processed and ready for use."""
18
+ print("Waiting for file processing...")
19
+ for uri in file_uris:
20
+ while True:
21
+ file = genai.get_file(uri)
22
+ if file.state.name == "ACTIVE":
23
+ print("File ready.")
24
+ break
25
+ elif file.state.name == "FAILED":
26
+ raise Exception(f"File {uri} failed to process")
27
+ time.sleep(10)
28
+
29
+ def handle_files(files):
30
+ """Handle file uploads, process them, and interact with Gemini API."""
31
+ # Save uploaded files locally
32
+ saved_files = []
33
+ for file in files:
34
+ local_path = f"/tmp/{file.name}"
35
+ with open(local_path, "wb") as f:
36
+ f.write(file.read())
37
+ saved_files.append((local_path, mimetypes.guess_type(local_path)[0]))
38
+
39
+ # Upload files to Gemini and wait for them to be ready
40
+ file_uris = [upload_to_gemini(path, mime_type) for path, mime_type in saved_files]
41
+ wait_for_files_active(file_uris)
42
+
43
+ # Start a chat session with uploaded files
44
+ model = genai.GenerativeModel(
45
+ model_name="gemini-2.0-flash-exp",
46
+ generation_config={
47
+ "temperature": 0.4,
48
+ "top_p": 0.95,
49
+ "top_k": 40,
50
+ "max_output_tokens": 8192,
51
+ "response_mime_type": "text/plain",
52
+ }
53
+ )
54
+ chat_session = model.start_chat(history=[{"role": "user", "parts": [{"file_uri": uri} for uri in file_uris]}])
55
+ response = chat_session.send_message("Describe the contents.")
56
+ return response.text
57
+
58
+ def gradio_interface():
59
+ """Setup Gradio UI for file uploads and processing."""
60
+ with gr.Blocks() as app:
61
+ with gr.Row():
62
+ file_input = gr.File(label="Upload files", file_types=[".pdf", ".png", ".jpg", ".mp3", ".mp4"], multiple=True)
63
+ submit_button = gr.Button("Submit")
64
+ output = gr.Textbox(label="Response from Gemini")
65
+
66
+ submit_button.click(fn=handle_files, inputs=[file_input], outputs=[output])
67
+
68
+ return app
69
+
70
+ app = gradio_interface()
71
+ app.launch()