File size: 6,140 Bytes
69221ba
6a2680d
5de271e
69221ba
721c976
e9dd6a1
69221ba
 
721c976
5de271e
ccd14fa
57e9c17
526e9da
 
 
 
 
 
 
 
 
 
 
 
 
ccd14fa
e296907
 
03a5a23
 
 
 
 
 
 
 
 
 
 
 
 
e296907
 
69221ba
e296907
 
 
 
3c6eb02
 
f29bf47
 
 
 
 
3c6eb02
 
 
 
69221ba
5de271e
3c6eb02
 
6159535
f5e545f
6159535
 
 
69221ba
3c6eb02
69221ba
3c6eb02
 
 
 
 
69221ba
 
44f1bf5
e9dd6a1
ccd14fa
 
 
 
 
44f1bf5
3c6eb02
e9dd6a1
e25d313
6a0ff1d
526e9da
6a0ff1d
ccd14fa
ae80140
ab461f2
ae80140
 
 
 
 
 
 
 
6a0ff1d
 
 
721c976
e9dd6a1
721c976
 
 
 
 
 
 
 
 
 
 
c540cff
e9dd6a1
 
 
 
 
 
 
 
721c976
 
 
 
 
 
 
 
c540cff
721c976
526e9da
 
964c83f
526e9da
c540cff
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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("""
    <style>
        .center-text {
            text-align: center;
        }
        .footer {
            text-align: center;
            font-size: 12px;
        }
    </style>
""", 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("<h1 class='center-text'>🤖 ¡Bienvenido a Soph-IA!</h1>", unsafe_allow_html=True)

# Explicación técnica
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? 😊")

# 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"<div class='response'>{resultado}</div>", unsafe_allow_html=True)
            audio_data = hablar_texto(resultado)
            if audio_data:
                st.markdown(f"""
                    <audio controls>
                        <source src="{audio_data}" type="audio/mpeg">
                        Tu navegador no soporta el elemento de audio.
                    </audio>
                """, 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"<div class='response'>{respuesta}</div>", unsafe_allow_html=True)

# Mensaje final centrado
st.markdown("<h3 class='center-text'>¡Gracias por usar Soph-IA! 😊</h3>", unsafe_allow_html=True)

# Pie de página centrado
st.markdown("<p class='footer'>© 2024 Jeysshon</p>", unsafe_allow_html=True)