JeCabrera commited on
Commit
88c5efb
verified
1 Parent(s): 4260be4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +33 -57
app.py CHANGED
@@ -1,30 +1,20 @@
 
1
  import os
2
  import time
3
- import gradio as gr
4
  import google.generativeai as genai
5
  from mimetypes import MimeTypes
6
 
7
  # Configurar la API de Gemini
8
  genai.configure(api_key=os.environ["GOOGLE_API_KEY"])
9
 
10
- # Ruta personalizada para los archivos subidos
11
- UPLOAD_DIR = os.path.join(os.getcwd(), "uploads") # Crea una carpeta "uploads" en el directorio actual
12
-
13
- # Aseg煤rate de que la carpeta de subida exista
14
- if not os.path.exists(UPLOAD_DIR):
15
- os.makedirs(UPLOAD_DIR)
16
-
17
- # Funci贸n que sube y procesa archivos
18
  def upload_and_process_file(file):
19
  """
20
  Sube y procesa un archivo para usarlo con el modelo de Gemini.
21
- Detecta autom谩ticamente el tipo MIME del archivo.
22
- Procesa im谩genes, PDFs y archivos de texto.
23
  """
24
- # Guardar el archivo en la carpeta 'uploads'
25
- file_path = os.path.join(UPLOAD_DIR, file.name)
26
- with open(file_path, "wb") as f:
27
- f.write(file.read())
28
 
29
  # Detectar el tipo MIME del archivo
30
  mime = MimeTypes()
@@ -35,15 +25,13 @@ def upload_and_process_file(file):
35
 
36
  # Subir el archivo a Gemini
37
  print(f"Subiendo el archivo '{file_path}' con MIME type '{mime_type}'...")
38
- uploaded_file = genai.upload_file(file_path, mime_type=mime_type)
39
- print(f"Archivo subido: {uploaded_file.display_name}, URI: {uploaded_file.uri}")
40
-
41
  # Esperar a que el archivo est茅 activo
42
- wait_for_files_active([uploaded_file])
43
-
44
- return uploaded_file.uri # Devuelve la URI del archivo subido
45
 
46
- # Funci贸n para esperar que los archivos est茅n activos
47
  def wait_for_files_active(files):
48
  """
49
  Espera a que los archivos subidos a Gemini est茅n activos y listos para su uso.
@@ -53,14 +41,27 @@ def wait_for_files_active(files):
53
  status = genai.get_file(file.name)
54
  while status.state.name == "PROCESSING":
55
  print(".", end="", flush=True)
56
- time.sleep(5) # Intervalo de espera m谩s corto para mejorar la experiencia del usuario
57
  status = genai.get_file(file.name)
58
 
59
  if status.state.name != "ACTIVE":
60
  raise Exception(f"El archivo {file.name} no pudo procesarse correctamente.")
61
  print("\nTodos los archivos est谩n listos.")
62
 
63
- # Funci贸n para iniciar el chat con el modelo
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  def start_chat_with_file(file, user_input):
65
  """
66
  Inicia una conversaci贸n con el modelo utilizando un archivo como entrada.
@@ -78,45 +79,20 @@ def start_chat_with_file(file, user_input):
78
  response = chat_session.send_message(user_input)
79
  return response.text
80
 
81
- # Configuraci贸n del modelo generativo
82
- generation_config = {
83
- "temperature": 1,
84
- "top_p": 0.95,
85
- "top_k": 40,
86
- "max_output_tokens": 8192,
87
- "response_mime_type": "text/plain",
88
- }
89
-
90
- model = genai.GenerativeModel(
91
- model_name="gemini-1.5-flash",
92
- generation_config=generation_config,
93
- )
94
 
95
  # Interfaz de Gradio
96
- def interface(user_input, file):
97
- """
98
- Interfaz de Gradio que procesa el archivo subido y permite interactuar con el modelo.
99
- """
100
- try:
101
- file_uri = upload_and_process_file(file)
102
- except Exception as e:
103
- return f"Error al procesar el archivo: {e}"
104
-
105
- response = start_chat_with_file(file_uri, user_input)
106
  return response
107
 
108
  # Crear la interfaz de Gradio
109
  iface = gr.Interface(
110
- fn=interface,
111
- inputs=[
112
- gr.Textbox(label="Tu mensaje al modelo", placeholder="Escribe aqu铆 tu mensaje...", lines=2),
113
- gr.File(label="Sube un archivo (Imagen, PDF o Texto)")
114
- ],
115
  outputs="text",
116
- title="Interacci贸n con el Modelo Generativo de Gemini",
117
- description="Sube un archivo y escribe un mensaje para iniciar una conversaci贸n con el modelo.",
118
  )
119
 
120
- # Iniciar la interfaz
121
- if __name__ == "__main__":
122
- iface.launch()
 
1
+ import gradio as gr
2
  import os
3
  import time
 
4
  import google.generativeai as genai
5
  from mimetypes import MimeTypes
6
 
7
  # Configurar la API de Gemini
8
  genai.configure(api_key=os.environ["GOOGLE_API_KEY"])
9
 
 
 
 
 
 
 
 
 
10
  def upload_and_process_file(file):
11
  """
12
  Sube y procesa un archivo para usarlo con el modelo de Gemini.
 
 
13
  """
14
+ if isinstance(file, gr.inputs.File):
15
+ file_path = file.name # Obtener la ruta temporal del archivo
16
+ else:
17
+ raise ValueError("El archivo no se subi贸 correctamente.")
18
 
19
  # Detectar el tipo MIME del archivo
20
  mime = MimeTypes()
 
25
 
26
  # Subir el archivo a Gemini
27
  print(f"Subiendo el archivo '{file_path}' con MIME type '{mime_type}'...")
28
+ file = genai.upload_file(file_path, mime_type=mime_type)
29
+ print(f"Archivo subido: {file.display_name}, URI: {file.uri}")
30
+
31
  # Esperar a que el archivo est茅 activo
32
+ wait_for_files_active([file])
33
+ return file
 
34
 
 
35
  def wait_for_files_active(files):
36
  """
37
  Espera a que los archivos subidos a Gemini est茅n activos y listos para su uso.
 
41
  status = genai.get_file(file.name)
42
  while status.state.name == "PROCESSING":
43
  print(".", end="", flush=True)
44
+ time.sleep(5)
45
  status = genai.get_file(file.name)
46
 
47
  if status.state.name != "ACTIVE":
48
  raise Exception(f"El archivo {file.name} no pudo procesarse correctamente.")
49
  print("\nTodos los archivos est谩n listos.")
50
 
51
+ # Configuraci贸n del modelo generativo
52
+ generation_config = {
53
+ "temperature": 1,
54
+ "top_p": 0.95,
55
+ "top_k": 40,
56
+ "max_output_tokens": 8192,
57
+ "response_mime_type": "text/plain",
58
+ }
59
+
60
+ model = genai.GenerativeModel(
61
+ model_name="gemini-1.5-flash",
62
+ generation_config=generation_config,
63
+ )
64
+
65
  def start_chat_with_file(file, user_input):
66
  """
67
  Inicia una conversaci贸n con el modelo utilizando un archivo como entrada.
 
79
  response = chat_session.send_message(user_input)
80
  return response.text
81
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
 
83
  # Interfaz de Gradio
84
+ def process_file(file, user_input):
85
+ processed_file = upload_and_process_file(file)
86
+ response = start_chat_with_file(processed_file, user_input)
 
 
 
 
 
 
 
87
  return response
88
 
89
  # Crear la interfaz de Gradio
90
  iface = gr.Interface(
91
+ fn=process_file,
92
+ inputs=[gr.File(label="Sube tu archivo"), gr.Textbox(label="Escribe tu mensaje")],
 
 
 
93
  outputs="text",
94
+ live=True
 
95
  )
96
 
97
+ # Ejecutar la interfaz
98
+ iface.launch()