OMARDENT / chat.py
Josedcape's picture
Upload 8 files
eb3b12e verified
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()