JeCabrera commited on
Commit
6efed0c
verified
1 Parent(s): 34662bb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +64 -40
app.py CHANGED
@@ -1,34 +1,49 @@
1
  import os
2
  import time
 
3
  import google.generativeai as genai
4
  from mimetypes import MimeTypes
5
 
6
  # Configurar la API de Gemini
7
- genai.configure(api_key=os.environ["GOOGLE_API_KEY"])
8
 
9
- def upload_and_process_file(path):
 
 
 
 
 
 
 
 
10
  """
11
  Sube y procesa un archivo para usarlo con el modelo de Gemini.
12
-
13
- - Detecta autom谩ticamente el tipo MIME del archivo.
14
- - Procesa im谩genes, PDFs y archivos de texto.
15
  """
 
 
 
 
 
16
  # Detectar el tipo MIME del archivo
17
  mime = MimeTypes()
18
- mime_type, _ = mime.guess_type(path)
19
 
20
  if not mime_type:
21
  raise ValueError("No se pudo determinar el tipo MIME del archivo.")
22
 
23
  # Subir el archivo a Gemini
24
- print(f"Subiendo el archivo '{path}' con MIME type '{mime_type}'...")
25
- file = genai.upload_file(path, mime_type=mime_type)
26
- print(f"Archivo subido: {file.display_name}, URI: {file.uri}")
27
-
28
  # Esperar a que el archivo est茅 activo
29
- wait_for_files_active([file])
30
- return file
 
31
 
 
32
  def wait_for_files_active(files):
33
  """
34
  Espera a que los archivos subidos a Gemini est茅n activos y listos para su uso.
@@ -45,20 +60,7 @@ def wait_for_files_active(files):
45
  raise Exception(f"El archivo {file.name} no pudo procesarse correctamente.")
46
  print("\nTodos los archivos est谩n listos.")
47
 
48
- # Configuraci贸n del modelo generativo
49
- generation_config = {
50
- "temperature": 1,
51
- "top_p": 0.95,
52
- "top_k": 40,
53
- "max_output_tokens": 8192,
54
- "response_mime_type": "text/plain",
55
- }
56
-
57
- model = genai.GenerativeModel(
58
- model_name="gemini-1.5-flash",
59
- generation_config=generation_config,
60
- )
61
-
62
  def start_chat_with_file(file, user_input):
63
  """
64
  Inicia una conversaci贸n con el modelo utilizando un archivo como entrada.
@@ -76,23 +78,45 @@ def start_chat_with_file(file, user_input):
76
  response = chat_session.send_message(user_input)
77
  return response.text
78
 
 
 
 
 
 
 
 
 
79
 
80
- # Ejemplo de uso
81
- if __name__ == "__main__":
82
- # Ruta del archivo a subir
83
- file_path = "ruta_al_archivo.pdf" # Cambiar por la ruta del archivo
84
 
85
- # Subir y procesar el archivo
 
 
 
 
86
  try:
87
- processed_file = upload_and_process_file(file_path)
88
  except Exception as e:
89
- print(f"Error al procesar el archivo: {e}")
90
- exit(1)
 
 
91
 
92
- # Interactuar con el modelo usando el archivo procesado
93
- user_input = "Por favor, analiza este documento y dame un resumen."
94
- response = start_chat_with_file(processed_file, user_input)
 
 
 
 
 
 
 
 
95
 
96
- # Mostrar la respuesta
97
- print("Respuesta del modelo:")
98
- print(response)
 
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["GEMINI_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()
31
+ mime_type, _ = mime.guess_type(file_path)
32
 
33
  if not mime_type:
34
  raise ValueError("No se pudo determinar el tipo MIME del archivo.")
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.
 
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
  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()