Spaces:
Runtime error
Runtime error
| import os | |
| import tempfile | |
| import openai | |
| import streamlit as st | |
| import PyPDF2 | |
| from dotenv import load_dotenv | |
| # Configurar p谩gina de Streamlit | |
| st.set_page_config(page_title="Galatea Asistente", layout="wide") | |
| # Funci贸n para inicializar el estado de la sesi贸n | |
| def inicializar_estado(): | |
| 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'] = [] | |
| if 'transcripcion_voz' not in st.session_state: | |
| st.session_state['transcripcion_voz'] = "" | |
| if 'texto_preprocesado_pdf' not in st.session_state: | |
| st.session_state['texto_preprocesado_pdf'] = "" | |
| inicializar_estado() | |
| # Configuraci贸n de la barra lateral | |
| st.sidebar.title("Configuraci贸n del Asistente") | |
| st.sidebar.subheader("Modelo de Lenguaje") | |
| st.session_state['modelo'] = st.sidebar.selectbox( | |
| "Selecciona el modelo:", | |
| ["gpt-3.5-turbo", "gpt-4"], | |
| index=0 | |
| ) | |
| st.sidebar.subheader("Ajustes del Modelo") | |
| st.session_state['temperatura'] = st.sidebar.slider( | |
| "Temperatura", | |
| min_value=0.0, max_value=1.0, | |
| value=st.session_state['temperatura'], | |
| step=0.1 | |
| ) | |
| st.sidebar.text_input("Assistant ID", key="assistant_id", help="Introduce el Assistant ID del playground de OpenAI") | |
| # Funci贸n para extraer texto de un PDF | |
| def extraer_texto_pdf(ruta_archivo): | |
| texto = "" | |
| try: | |
| with open(ruta_archivo, 'rb') as file: | |
| reader = PyPDF2.PdfReader(file) | |
| for page in range(len(reader.pages)): | |
| texto += reader.pages[page].extract_text() | |
| except Exception as e: | |
| st.error(f"Error al extraer texto del PDF: {e}") | |
| return texto | |
| # Cargar y preprocesar el texto del PDF predefinido | |
| ruta_pdf_predefinido = "/assets/instrucciones.pdf" # Actualiza esta ruta con la ruta real de tu archivo PDF | |
| texto_pdf = extraer_texto_pdf(ruta_pdf_predefinido) | |
| st.session_state['texto_preprocesado_pdf'] = texto_pdf | |
| # Funci贸n para manejar la pregunta del usuario | |
| def manejar_pregunta_usuario(pregunta_usuario): | |
| st.session_state['mensajes_chat'].append({"role": "user", "content": pregunta_usuario}) | |
| with st.chat_message("user"): | |
| st.markdown(pregunta_usuario) | |
| # Aqu铆 debes agregar la l贸gica para obtener la respuesta del modelo | |
| contexto = st.session_state['texto_preprocesado_pdf'] | |
| respuesta = obtener_respuesta(pregunta_usuario, contexto) | |
| st.session_state['mensajes_chat'].append({"role": "assistant", "content": respuesta}) | |
| with st.chat_message("assistant"): | |
| st.markdown(respuesta) | |
| # Funci贸n para obtener la respuesta del modelo | |
| def obtener_respuesta(pregunta, contexto): | |
| try: | |
| response = openai.Completion.create( | |
| model=st.session_state['modelo'], | |
| prompt=f"Eres Galatea, un auxiliar de odontolog铆a en la cl铆nica odontol贸gica Omardent. Resuelve las inquietudes de los pacientes bas谩ndote en el siguiente contexto:\n\n{contexto}\n\nPregunta: {pregunta}\nRespuesta:", | |
| max_tokens=150, | |
| temperature=st.session_state['temperatura'] | |
| ) | |
| return response.choices[0].text.strip() | |
| except Exception as e: | |
| st.error(f"Error al obtener respuesta del modelo: {e}") | |
| return "Lo siento, ocurri贸 un error al procesar tu solicitud." | |
| # Mostrar el fondo de video y superponer texto | |
| st.markdown( | |
| """ | |
| <style> | |
| #video-container { | |
| position: relative; | |
| width: 100%; | |
| height: 90vh; | |
| overflow: hidden; | |
| } | |
| #background-video { | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| width: 90%; | |
| height: 90%; | |
| object-fit: cover; | |
| z-index: -1; | |
| } | |
| #chat-container { | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| display: flex; | |
| flex-direction: column; | |
| justify-content: flex-end; | |
| padding: 20px; | |
| box-sizing: border-box; | |
| } | |
| .chat-message { | |
| background: rgba(255, 255, 255, 0.8); | |
| border-radius: 10px; | |
| padding: 10px; | |
| margin-bottom: 10px; | |
| max-width: 70%; | |
| border: 2px solid #007BFF; /* Borde azul */ | |
| } | |
| .chat-message.user { | |
| align-self: flex-start; | |
| border-color: #007BFF; /* Borde azul para usuario */ | |
| } | |
| .chat-message.assistant { | |
| align-self: flex-end; | |
| background: rgba(0, 123, 255, 0.8); | |
| color: white; | |
| border-color: #0056b3; /* Borde azul oscuro para asistente */ | |
| } | |
| </style> | |
| <div id="video-container"> | |
| <video id="background-video" autoplay loop muted> | |
| <source src="https://cdn.leonardo.ai/users/645c3d5c-ca1b-4ce8-aefa-a091494e0d09/generations/0c4f0fe7-5937-4644-b984-bdbd95018990/0c4f0fe7-5937-4644-b984-bdbd95018990.mp4" type="video/mp4"> | |
| </video> | |
| <div id="chat-container"> | |
| """, | |
| unsafe_allow_html=True | |
| ) | |
| # Mostrar los mensajes del chat | |
| for mensaje in st.session_state['mensajes_chat']: | |
| clase = "user" if mensaje["role"] == "user" else "assistant" | |
| st.markdown(f'<div class="chat-message {clase}">{mensaje["content"]}</div>', unsafe_allow_html=True) | |
| # Campo de entrada de texto para el usuario | |
| pregunta_usuario = st.text_input("Escribe tu pregunta aqu铆:", key='unique_chat_input_key', value=st.session_state['transcripcion_voz']) | |
| if st.button("Enviar Pregunta"): | |
| manejar_pregunta_usuario(pregunta_usuario) | |
| st.markdown("</div></div>", unsafe_allow_html=True) | |
| # Incluir imagen de fondo (opcional) | |
| st.image("/mnt/data/clara asesora.jpg", use_column_width=True) | |