File size: 3,939 Bytes
500f371
4bde338
6efed0c
bc54a0a
cb0053e
aef709e
cb0053e
6efed0c
5ef5e82
6efed0c
 
 
 
 
 
 
 
 
cb0053e
 
6efed0c
 
c99083d
6efed0c
 
 
 
 
cb0053e
 
6efed0c
cb0053e
 
 
 
 
6efed0c
 
 
 
cb0053e
6efed0c
 
 
cb0053e
6efed0c
cb0053e
c99083d
cb0053e
c99083d
cb0053e
 
 
 
 
 
 
 
 
 
 
 
6efed0c
cb0053e
c99083d
cb0053e
 
 
 
 
 
 
 
 
f9815f3
 
cb0053e
 
 
c99083d
6efed0c
 
 
 
 
 
 
 
83e8f4c
6efed0c
 
 
 
f9815f3
6efed0c
 
 
 
 
cb0053e
6efed0c
cb0053e
6efed0c
 
 
 
acaff10
6efed0c
 
 
 
 
 
 
 
 
 
 
c99083d
6efed0c
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import os
import time
import gradio as gr
import google.generativeai as genai
from mimetypes import MimeTypes

# Configurar la API de Gemini
genai.configure(api_key=os.environ["GEMINI_API_KEY"])

# Ruta personalizada para los archivos subidos
UPLOAD_DIR = os.path.join(os.getcwd(), "uploads")  # Crea una carpeta "uploads" en el directorio actual

# Aseg煤rate de que la carpeta de subida exista
if not os.path.exists(UPLOAD_DIR):
    os.makedirs(UPLOAD_DIR)

# Funci贸n que sube y procesa archivos
def upload_and_process_file(file):
    """
    Sube y procesa un archivo para usarlo con el modelo de Gemini.
    Detecta autom谩ticamente el tipo MIME del archivo.
    Procesa im谩genes, PDFs y archivos de texto.
    """
    # Guardar el archivo en la carpeta 'uploads'
    file_path = os.path.join(UPLOAD_DIR, file.name)
    with open(file_path, "wb") as f:
        f.write(file.read())
    
    # Detectar el tipo MIME del archivo
    mime = MimeTypes()
    mime_type, _ = mime.guess_type(file_path)
    
    if not mime_type:
        raise ValueError("No se pudo determinar el tipo MIME del archivo.")
    
    # Subir el archivo a Gemini
    print(f"Subiendo el archivo '{file_path}' con MIME type '{mime_type}'...")
    uploaded_file = genai.upload_file(file_path, mime_type=mime_type)
    print(f"Archivo subido: {uploaded_file.display_name}, URI: {uploaded_file.uri}")
    
    # Esperar a que el archivo est茅 activo
    wait_for_files_active([uploaded_file])
    
    return uploaded_file.uri  # Devuelve la URI del archivo subido

# Funci贸n para esperar que los archivos est茅n activos
def wait_for_files_active(files):
    """
    Espera a que los archivos subidos a Gemini est茅n activos y listos para su uso.
    """
    print("Esperando el procesamiento de los archivos...")
    for file in files:
        status = genai.get_file(file.name)
        while status.state.name == "PROCESSING":
            print(".", end="", flush=True)
            time.sleep(5)  # Intervalo de espera m谩s corto para mejorar la experiencia del usuario
            status = genai.get_file(file.name)
        
        if status.state.name != "ACTIVE":
            raise Exception(f"El archivo {file.name} no pudo procesarse correctamente.")
    print("\nTodos los archivos est谩n listos.")

# Funci贸n para iniciar el chat con el modelo
def start_chat_with_file(file, user_input):
    """
    Inicia una conversaci贸n con el modelo utilizando un archivo como entrada.
    """
    chat_session = model.start_chat(
        history=[
            {
                "role": "user",
                "parts": [file],
            },
        ]
    )

    # Enviar mensaje al modelo
    response = chat_session.send_message(user_input)
    return response.text

# Configuraci贸n del modelo generativo
generation_config = {
    "temperature": 1,
    "top_p": 0.95,
    "top_k": 40,
    "max_output_tokens": 8192,
    "response_mime_type": "text/plain",
}

model = genai.GenerativeModel(
    model_name="gemini-1.5-flash",
    generation_config=generation_config,
)

# Interfaz de Gradio
def interface(user_input, file):
    """
    Interfaz de Gradio que procesa el archivo subido y permite interactuar con el modelo.
    """
    try:
        file_uri = upload_and_process_file(file)
    except Exception as e:
        return f"Error al procesar el archivo: {e}"
    
    response = start_chat_with_file(file_uri, user_input)
    return response

# Crear la interfaz de Gradio
iface = gr.Interface(
    fn=interface,
    inputs=[
        gr.Textbox(label="Tu mensaje al modelo", placeholder="Escribe aqu铆 tu mensaje...", lines=2),
        gr.File(label="Sube un archivo (Imagen, PDF o Texto)")
    ],
    outputs="text",
    title="Interacci贸n con el Modelo Generativo de Gemini",
    description="Sube un archivo y escribe un mensaje para iniciar una conversaci贸n con el modelo.",
)

# Iniciar la interfaz
if __name__ == "__main__":
    iface.launch()