Rahatara commited on
Commit
8fbbbe9
·
verified ·
1 Parent(s): 8cdd93f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -59
app.py CHANGED
@@ -1,71 +1,55 @@
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("GOOGLE_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"])
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()
 
 
 
1
  import os
 
 
 
2
  import gradio as gr
3
+ import google.generativeai as genai
4
 
5
+ # Initialize the Gemini API
6
+ def initialize_gemini():
7
+ api_key = os.getenv("GOOGLE_API_KEY")
8
+ if not api_key:
9
+ raise ValueError("GOOGLE_API_KEY is not set in environment variables.")
10
+ genai.configure(api_key=api_key)
11
+ return genai.GenerativeModel("gemini-2.0-flash-exp") # Assuming gemini-2.0-flash-exp is the correct model name
12
+
13
+ # Handle file inputs and text to generate a response
14
+ def generate_response(text_input, files):
15
+ contents = []
16
+ if text_input:
17
+ contents.append({"text": text_input}) # Add text input to the contents
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
 
19
+ for file in files:
20
+ with open(file.name, "rb") as f:
21
+ data = f.read()
22
+ # Guess the MIME type from the file input
23
+ mime_type = gr.io.utils.guess_mime_type(file.name)
24
+ if mime_type:
25
+ contents.append({
26
+ "mime_type": mime_type,
27
+ "data": data
28
+ })
29
+
30
+ model = initialize_gemini()
31
+ response = model.generate_content(contents)
32
+ response.resolve()
33
  return response.text
34
 
35
+ # Gradio Interface
36
+ def setup_interface():
37
  with gr.Blocks() as app:
38
  with gr.Row():
39
+ text_input = gr.Textbox(label="Enter any text:", placeholder="Type your question or comment here...")
40
+ file_input = gr.File(label="Upload your files", file_types=["image", "video", "audio", "pdf"])
41
+ submit_button = gr.Button("Generate Response")
42
+ response_output = gr.Textbox(label="Response from Gemini", placeholder="Response will appear here...")
43
 
44
+ submit_button.click(
45
+ fn=generate_response,
46
+ inputs=[text_input, file_input],
47
+ outputs=[response_output]
48
+ )
49
 
50
  return app
51
 
52
+ # Run the interface
53
+ if __name__ == "__main__":
54
+ app = setup_interface()
55
+ app.launch(share=True) # Set `share=True` for Hugging Face Spaces or public deployment