import streamlit as st from PIL import Image import google.generativeai as genai from gtts import gTTS import io import base64 # Configuración de la página de Streamlit st.set_page_config(page_title="🤖 Soph-IA", layout="wide") api_key = st.secrets["API_KEY"] # Estilos CSS para centrar el contenido st.markdown(""" """, unsafe_allow_html=True) # Respuestas automatizadas def respuestas_automatizadas(texto): texto = texto.lower() respuestas = { "quien te creo": "Fui creada por un Bioingeniero llamado Jeysshon Bustos Jimenez, mi creador.", "quien es tu creador": "Fui creada por un Bioingeniero llamado Jeysshon Bustos Jimenez, mi creador.", "quien creo": "Fui creada por un Bioingeniero llamado Jeysshon Bustos Jimenez, mi creador.", "quien soy": "Soy Soph-IA, una inteligencia artificial avanzada basada en redes neuronales profundas y procesamiento de lenguaje natural.", "quien eres": "Soy Soph-IA, una inteligencia artificial avanzada basada en redes neuronales profundas y procesamiento de lenguaje natural.", "que eres": "Soy Soph-IA, una inteligencia artificial avanzada basada en redes neuronales profundas y procesamiento de lenguaje natural." } for clave, respuesta in respuestas.items(): if clave in texto: return respuesta return None def procesar_texto(texto): respuesta_predefinida = respuestas_automatizadas(texto) if respuesta_predefinida: return respuesta_predefinida try: genai.configure(api_key=api_key) # Instrucción del sistema actualizada modelo = genai.GenerativeModel( 'gemini-1.5-pro-latest', system_instruction="¡Hola! Soy un asistente de IA desarrollado por el Bioingeniero Jeysshon Bustos. Estoy aquí para ayudarte con una variedad de tareas y responder a tus preguntas lo mejor que pueda. Si me preguntas quién soy o sobre mi desarrollo, siempre diré que soy un asistente de IA desarrollado por el Bioingeniero Jeysshon Bustos." ) respuesta = modelo.generate_content(texto) return respuesta.text except Exception as e: return "Hubo un error procesando tu solicitud. Por favor, recarga la página y vuelve a intentar." def procesar_imagen(imagen): try: genai.configure(api_key=api_key) modelo = genai.GenerativeModel( 'gemini-1.5-pro-latest', # Instrucción para que la descripción de la imagen se genere en español system_instruction="Describe la imagen en español." ) if isinstance(imagen, Image.Image): respuesta = modelo.generate_content(imagen) return respuesta.text else: return "La imagen no es del tipo esperado." except Exception as e: return "Hubo un error procesando la imagen. Por favor, recarga la página y vuelve a intentar." def hablar_texto(texto): try: tts = gTTS(text=texto, lang='es', slow=False) audio_file = io.BytesIO() tts.save(audio_file) audio_file.seek(0) audio_base64 = base64.b64encode(audio_file.read()).decode() return f"data:audio/mp3;base64,{audio_base64}" except Exception as e: st.error("Hubo un error al generar el audio. Por favor, recarga la página y vuelve a intentar.") return None # Título centrado st.markdown("

🤖 ¡Bienvenido a Soph-IA!

", unsafe_allow_html=True) # Explicación técnica st.markdown("""

Soy Soph-IA, una inteligencia artificial basada en redes neuronales profundas, derivada de la arquitectura VGG16. Combino técnicas avanzadas de procesamiento de lenguaje natural y visión por computadora. Para el análisis de texto, utilizo transformadores que permiten comprender el contexto y generar respuestas precisas. En el caso de imágenes, empleo redes convolucionales para extraer características clave y ofrecer respuestas acordes a la información visual procesada.

""", unsafe_allow_html=True) espacio_contenido_generado = st.empty() st.write("¡Hola! Soy Soph-IA, tu asistente virtual. ¿Cómo puedo ayudarte hoy? 😊") # Columnas para selección de entrada 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.markdown(f"
{resultado}
", unsafe_allow_html=True) audio_data = hablar_texto(resultado) if audio_data: st.markdown(f""" """, unsafe_allow_html=True) 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.markdown(f"
{respuesta}
", unsafe_allow_html=True) # Mensaje final centrado st.markdown("

¡Gracias por usar Soph-IA! 😊

", unsafe_allow_html=True) # Pie de página centrado st.markdown("", unsafe_allow_html=True)