| | import streamlit as st
|
| | import os
|
| | from utils.data_manager import (
|
| | extraer_texto_pdf,
|
| | preprocesar_texto,
|
| | obtener_respuesta,
|
| | handle_voice_input
|
| | )
|
| |
|
| | OPENAI_API_KEY= "sk-proj-3LjZDUxPCK7NOxAGsBrcT3BlbkFJPwq200vDWf5JG2YWgAsx"
|
| |
|
| | 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()
|
| |
|
| |
|
| | 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()
|
| |
|