File size: 3,020 Bytes
6a2680d
 
552467f
a443e72
9e93c24
6a2680d
f60ce12
 
 
9b54f00
c0347bb
9b54f00
fe1ed8d
e9dd2d3
 
 
 
 
 
 
 
 
 
 
 
6a2680d
c0347bb
e50eaad
e9dd2d3
 
 
 
 
 
 
 
e50eaad
e9dd2d3
 
e50eaad
fe1ed8d
68f8a40
 
9e93c24
 
e50eaad
68f8a40
 
6a2680d
 
 
c0347bb
 
 
 
 
 
 
 
 
 
e9dd2d3
fe1ed8d
c0347bb
 
 
 
 
 
 
 
 
fe1ed8d
c0347bb
 
 
 
 
 
 
 
1b77b6e
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
import streamlit as st
from PIL import Image
import google.generativeai as genai
from gtts import gTTS
import os

# Configuración de la página de Streamlit
st.set_page_config(layout="wide")

# Configuración de la API key para Google Generative AI
api_key = "AIzaSyDJZ3r6VRhRivR0pb96cBRg_VvGg_fXq5k"  # API key proporcionada

def procesar_texto(texto):
    try:
        genai.configure(api_key=api_key)
        modelo = genai.GenerativeModel('gemini-1.5-pro-latest')
        respuesta = modelo.generate_content(texto)
        # Verifica si la respuesta contiene la propiedad `text`
        if hasattr(respuesta, 'text'):
            return respuesta.text
        else:
            return "No se pudo generar una respuesta válida."
    except Exception as e:
        st.error(f"Error al procesar el texto: {e}")
        return "No se pudo generar una respuesta."

def procesar_imagen(imagen):
    try:
        genai.configure(api_key=api_key)
        modelo = genai.GenerativeModel('gemini-1.5-pro-latest')
        respuesta = modelo.generate_content(imagen.name)
        # Verifica si la respuesta contiene la propiedad `text`
        if hasattr(respuesta, 'text'):
            return respuesta.text
        else:
            return "No se pudo procesar la imagen correctamente."
    except Exception as e:
        st.error(f"Error al procesar la imagen: {e}")
        return "No se pudo procesar la imagen."

def hablar_texto(texto):
    try:
        tts = gTTS(text=texto, lang='es')
        archivo_audio = "respuesta.mp3"
        tts.save(archivo_audio)
        os.system(f"mpg321 {archivo_audio}")  # Puedes usar otro reproductor como afplay en macOS o VLC
    except Exception as e:
        st.error(f"Error al generar audio: {e}")

st.title("🤖 ChatBot")

espacio_contenido_generado = st.empty()

# Cargar y aplicar CSS personalizado
with open("./style.css") as f:
    st.markdown(f"<style>{f.read()}</style>", unsafe_allow_html=True)

# Contenido principal
col1, col2 = st.columns([1, 3])

with col1:
    tipo_entrada = st.selectbox("Selecciona el tipo de entrada", ["Haz una pregunta❓", "🖼️ Subir imagen"])

with col2:
    if tipo_entrada == "Haz una pregunta❓":
        entrada_texto = st.text_input("Ingresa tu pregunta aquí")
        if entrada_texto:
            with st.spinner("Generando respuesta..."):
                resultado = procesar_texto(entrada_texto)
            espacio_contenido_generado.write(resultado)
            if st.button("🔊 Hablar", key="hablar_entrada_texto"):
                hablar_texto(resultado)

    elif tipo_entrada == "🖼️ Subir imagen":
        entrada_imagen = st.file_uploader("Sube una imagen", type=["jpg", "png", "jpeg"])
        if entrada_imagen:
            imagen = Image.open(entrada_imagen)
            st.image(imagen, caption='Imagen subida.', use_column_width=True)
            with st.spinner("Procesando imagen..."):
                respuesta = procesar_imagen(entrada_imagen)
            espacio_contenido_generado.write(respuesta)