File size: 3,381 Bytes
eb3b12e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import os
from utils.data_manager import (
    extraer_texto_pdf, 
    preprocesar_texto, 
    obtener_respuesta, 
    handle_voice_input
)
# Configuración de la clave API
OPENAI_API_KEY= "sk-proj-3LjZDUxPCK7NOxAGsBrcT3BlbkFJPwq200vDWf5JG2YWgAsx"  # Reemplaza esto con tu clave API real

def inicializar_estado():
    """Inicializa el estado de la sesión si no está ya inicializado."""
    if 'modelo' not in st.session_state:
        st.session_state['modelo'] = "gpt-3.5-turbo"
    if 'temperatura' not in st.session_state:
        st.session_state['temperatura'] = 0.5
    if 'mensajes_chat' not in st.session_state:
        st.session_state['mensajes_chat'] = []

def barra_lateral():
    """Configura la barra lateral de la aplicación."""
    st.sidebar.image(os.path.join("assets"), use_column_width=True)
    st.sidebar.title("🤖 Galatea OMARDENT")
    st.sidebar.markdown("---")
    st.sidebar.subheader("🧠 Configuración del Modelo")
    st.session_state['modelo'] = st.sidebar.selectbox(
        "Selecciona el modelo:",
        ["gpt-3.5-turbo", "gpt-4", "gpt-4-32k"],
        index=0,
        help="Elige el modelo de lenguaje de OpenAI que prefieras."
    )
    st.sidebar.markdown("---")
    st.session_state['temperatura'] = st.sidebar.slider(
        "🌡️ Temperatura",
        min_value=0.0, max_value=1.0,
        value=st.session_state['temperatura'], step=0.1
    )

def mostrar_mensajes_chat():
    """Muestra los mensajes del chat."""
    for mensaje in st.session_state['mensajes_chat']:
        with st.chat_message(mensaje["role"]):
            st.markdown(mensaje["content"])

def manejar_pregunta_usuario(pregunta_usuario, archivo_pdf):
    """Procesa la pregunta del usuario."""
    st.session_state['mensajes_chat'].append({"role": "user", "content": pregunta_usuario})
    with st.chat_message("user"):
        st.markdown(pregunta_usuario)

    texto_preprocesado = ""
    if archivo_pdf:
        texto_pdf = extraer_texto_pdf(archivo_pdf)
        texto_preprocesado = preprocesar_texto(texto_pdf)

    respuesta = obtener_respuesta(pregunta_usuario, texto_preprocesado, st.session_state['modelo'], st.session_state['temperatura'])
    st.session_state['mensajes_chat'].append({"role": "assistant", "content": respuesta})
    with st.chat_message("assistant"):
        st.markdown(respuesta)

def manejar_captura_de_voz(audio_capturado):
    """Procesa el archivo de audio subido."""
    texto_extraido = handle_voice_input(audio_capturado)
    st.markdown("### Texto extraído del audio:")
    st.write(texto_extraido)

def main():
    st.header("💬 Hablar con Galatea OMARDENT - Página de Chat")
    inicializar_estado()
    barra_lateral()

    # --- Área principal de la aplicación ---
    archivo_pdf = st.file_uploader("📂 Cargar PDF", type='pdf', key='chat_pdf')

    mostrar_mensajes_chat()

    pregunta_usuario = st.chat_input("Pregunta:")
    if pregunta_usuario:
        manejar_pregunta_usuario(pregunta_usuario, archivo_pdf)

    st.markdown("### Captura de voz")
    audio_capturado = st.file_uploader("Subir archivo de audio", type=["wav", "mp3"], key='audio_chat')
    if audio_capturado:
        manejar_captura_de_voz(audio_capturado)

    st.markdown("---")

if __name__ == "__main__":
    main()