import streamlit as st from PIL import Image import google.generativeai as genai from gtts import gTTS import os import io # Configuración de la página de Streamlit st.set_page_config(page_title="🤖 ChatBot", layout="wide") # Configuración de la API key para Google Generative AI api_key = "AIzaSyDJZ3r6VRhRivR0pb96cBRg_VvGg_fXq5k" # API key proporcionada def procesar_texto(texto): genai.configure(api_key=api_key) modelo = genai.GenerativeModel('gemini-1.5-pro-latest') try: respuesta = modelo.generate_content(texto) if respuesta and hasattr(respuesta, 'text'): return respuesta.text else: return "No se recibió una respuesta válida." except Exception as e: st.error(f"Error al procesar el texto: {e}") return "Hubo un error al procesar la solicitud." def procesar_imagen(imagen): genai.configure(api_key=api_key) modelo = genai.GenerativeModel('gemini-1.5-pro-latest') try: # Asegúrate de que la imagen sea un objeto PIL.Image if isinstance(imagen, Image.Image): # Convertir la imagen a un formato compatible si es necesario respuesta = modelo.generate_content(imagen) return respuesta.text else: return "La imagen no es del tipo esperado." except Exception as e: st.error(f"Error al procesar la imagen: {e}") return "Hubo un error al procesar la imagen." def hablar_texto(texto): try: tts = gTTS(text=texto, lang='es') tts.save("respuesta.mp3") os.system("mpg321 respuesta.mp3") # Usa mpg321 para reproducir el archivo except Exception as e: st.error(f"Error al generar el audio: {e}") st.title("🤖 ¡Bienvenido a ChatBot!") espacio_contenido_generado = st.empty() # Cargar y aplicar CSS personalizado with open("./style.css") as f: st.markdown(f"", unsafe_allow_html=True) # Contenido principal st.write("¡Hola! Soy tu asistente virtual. ¿Cómo puedo ayudarte hoy? 😊") 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(f"**Respuesta:** {resultado}") if st.button("🔊 Escuchar respuesta"): 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(imagen) espacio_contenido_generado.write(f"**Respuesta de la imagen:** {respuesta}") st.write("¡Gracias por usar el ChatBot! 😊")