File size: 4,958 Bytes
69221ba
6a2680d
5de271e
69221ba
 
721c976
69221ba
 
721c976
5de271e
950aea1
721c976
57e9c17
e296907
 
 
03a5a23
 
 
 
 
 
 
 
 
 
 
 
 
 
e296907
 
69221ba
e296907
 
 
 
3c6eb02
 
 
 
 
 
 
69221ba
5de271e
3c6eb02
 
 
69221ba
3c6eb02
69221ba
3c6eb02
 
 
 
 
69221ba
 
44f1bf5
69221ba
 
950aea1
44f1bf5
3c6eb02
e50eaad
721c976
 
 
e25d313
6a0ff1d
 
 
ae80140
 
ab461f2
ae80140
 
 
 
 
 
 
 
6a0ff1d
 
 
721c976
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6a0ff1d
964c83f
 
 
1fb143e
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
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="🤖 Soph-IA", layout="wide")

# Obtener la API key desde los secretos de Hugging Face
api_key = st.secrets["API_KEY"]  # Accede al secreto

# Respuestas automatizadas basadas en palabras clave
def respuestas_automatizadas(texto):
    texto = texto.lower()
    # Respuestas para preguntas específicas
    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)
        modelo = genai.GenerativeModel('gemini-1.5-pro-latest')
        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')

        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')
        tts.save("respuesta.mp3")
        os.system("mpg321 respuesta.mp3")
    except Exception as e:
        st.error("Hubo un error al generar el audio. Por favor, recarga la página y vuelve a intentar.")

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

# Título centrado
st.markdown("<h1 style='text-align: center;'>🤖 ¡Bienvenido a Soph-IA!</h1>", unsafe_allow_html=True)

# Explicación técnica de Soph-IA
st.markdown("""
    <p style='text-align: justify;'>
    Soy <strong>Soph-IA</strong>, una inteligencia artificial basada en redes neuronales profundas, derivada de la arquitectura 
    <strong>VGG16</strong>. 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.
    </p>
""", unsafe_allow_html=True)

espacio_contenido_generado = st.empty()

st.write("¡Hola! Soy Soph-IA, 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 Soph-IA! 😊")

# Pie de página
st.markdown("<p style='text-align: center;'>© 2024 Jeysshon</p>", unsafe_allow_html=True)