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()