Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -30,10 +30,10 @@ def obtener_respuesta(pregunta, historial, modelo="gpt-4", temperatura=0.5):
|
|
| 30 |
return respuesta
|
| 31 |
|
| 32 |
# Función para convertir texto a voz usando Google Cloud Text-to-Speech
|
| 33 |
-
def text_to_speech(text
|
| 34 |
client = texttospeech.TextToSpeechClient()
|
| 35 |
synthesis_input = texttospeech.SynthesisInput(text=text)
|
| 36 |
-
voice = texttospeech.VoiceSelectionParams(language_code=
|
| 37 |
audio_config = texttospeech.AudioConfig(audio_encoding=texttospeech.AudioEncoding.MP3)
|
| 38 |
response = client.synthesize_speech(input=synthesis_input, voice=voice, audio_config=audio_config)
|
| 39 |
audio_path = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3").name
|
|
@@ -59,81 +59,56 @@ def reproducir_audio(file_path):
|
|
| 59 |
|
| 60 |
# Función para manejar la encuesta dinámica
|
| 61 |
def encuesta_asistente():
|
| 62 |
-
st.title("Asistente Boti Encuesta"
|
| 63 |
-
st.write("Este asistente te guiará a través de una serie de preguntas para ayudarte a configurar tu asistente virtual"
|
| 64 |
|
| 65 |
# Logo de ayuda del asistente
|
| 66 |
ayuda_logo = "https://img.freepik.com/premium-vector/minimal-ai-tech-robot-vector-illustration_589744-869.jpg"
|
| 67 |
st.image(ayuda_logo, width=50)
|
| 68 |
|
| 69 |
# Botón de ayuda del asistente
|
| 70 |
-
if st.button("Ayuda del asistente"
|
| 71 |
reproducir_audio("audios/instructivo.mp3")
|
| 72 |
|
| 73 |
preguntas = [
|
| 74 |
{
|
| 75 |
-
"pregunta": "¿Cuál es tu nombre?"
|
| 76 |
"tipo": "texto"
|
| 77 |
},
|
| 78 |
{
|
| 79 |
-
"pregunta": "¿Qué tipo de asistente virtual deseas?"
|
| 80 |
"tipo": "multiple",
|
| 81 |
-
"opciones": ["Asistente Personal"
|
| 82 |
-
"Asistente de Negocios" if st.session_state.idioma == "Español" else "Business Assistant",
|
| 83 |
-
"Asistente de Salud" if st.session_state.idioma == "Español" else "Health Assistant",
|
| 84 |
-
"Asistente de Educación" if st.session_state.idioma == "Español" else "Education Assistant",
|
| 85 |
-
"Otro" if st.session_state.idioma == "Español" else "Other"]
|
| 86 |
},
|
| 87 |
{
|
| 88 |
-
"pregunta": "¿Qué objetivo debe cumplir este asistente?"
|
| 89 |
"tipo": "multiple",
|
| 90 |
-
"opciones": ["Organización Personal"
|
| 91 |
-
"Mejora de Productividad" if st.session_state.idioma == "Español" else "Productivity Improvement",
|
| 92 |
-
"Asistencia Médica" if st.session_state.idioma == "Español" else "Medical Assistance",
|
| 93 |
-
"Educación y Aprendizaje" if st.session_state.idioma == "Español" else "Education and Learning",
|
| 94 |
-
"Otro" if st.session_state.idioma == "Español" else "Other"]
|
| 95 |
},
|
| 96 |
{
|
| 97 |
-
"pregunta": "¿Cuáles son las funciones que debe tener?"
|
| 98 |
"tipo": "multiple",
|
| 99 |
-
"opciones": ["Gestión de Calendarios"
|
| 100 |
-
"Recordatorios" if st.session_state.idioma == "Español" else "Reminders",
|
| 101 |
-
"Consultas Médicas" if st.session_state.idioma == "Español" else "Medical Consultations",
|
| 102 |
-
"Ayuda con Tareas Escolares" if st.session_state.idioma == "Español" else "Help with School Tasks",
|
| 103 |
-
"Otro" if st.session_state.idioma == "Español" else "Other"]
|
| 104 |
},
|
| 105 |
{
|
| 106 |
-
"pregunta": "¿Cómo te gustaría que este asistente te ayude en tus tareas diarias?"
|
| 107 |
"tipo": "multiple",
|
| 108 |
-
"opciones": ["Planificación de Día"
|
| 109 |
-
"Recordatorios" if st.session_state.idioma == "Español" else "Reminders",
|
| 110 |
-
"Consultas y Respuestas" if st.session_state.idioma == "Español" else "Consultations and Answers",
|
| 111 |
-
"Apoyo Emocional" if st.session_state.idioma == "Español" else "Emotional Support",
|
| 112 |
-
"Otro" if st.session_state.idioma == "Español" else "Other"]
|
| 113 |
},
|
| 114 |
{
|
| 115 |
-
"pregunta": "¿Qué interfaz debería tener este asistente?"
|
| 116 |
"tipo": "multiple",
|
| 117 |
-
"opciones": ["Aplicación Móvil"
|
| 118 |
-
"Aplicación Web" if st.session_state.idioma == "Español" else "Web App",
|
| 119 |
-
"Asistente de Voz" if st.session_state.idioma == "Español" else "Voice Assistant",
|
| 120 |
-
"Chatbot en Redes Sociales" if st.session_state.idioma == "Español" else "Social Media Chatbot",
|
| 121 |
-
"Otro" if st.session_state.idioma == "Español" else "Other"]
|
| 122 |
},
|
| 123 |
{
|
| 124 |
-
"pregunta": "¿Utilizarías el asistente para aumentar tu tiempo libre o para generar ingresos adicionales?"
|
| 125 |
"tipo": "multiple",
|
| 126 |
-
"opciones": ["Aumentar tiempo libre"
|
| 127 |
-
"Generar ingresos adicionales" if st.session_state.idioma == "Español" else "Generate additional income"]
|
| 128 |
},
|
| 129 |
{
|
| 130 |
-
"pregunta": "Por último, ¿qué estilos y elementos visuales debería tener?"
|
| 131 |
"tipo": "multiple",
|
| 132 |
-
"opciones": ["Estilo moderno con colores vivos"
|
| 133 |
-
"Colores sobrios y clásico" if st.session_state.idioma == "Español" else "Classic and sober colors",
|
| 134 |
-
"Moderno, colores pastel o simples" if st.session_state.idioma == "Español" else "Modern, pastel or simple colors",
|
| 135 |
-
"Moderno, elegante, simple, no importa el estilo" if st.session_state.idioma == "Español" else "Modern, elegant, simple, any style",
|
| 136 |
-
"Otro" if st.session_state.idioma == "Español" else "Other"]
|
| 137 |
}
|
| 138 |
]
|
| 139 |
|
|
@@ -148,17 +123,17 @@ def encuesta_asistente():
|
|
| 148 |
|
| 149 |
# Validación de preguntas adicionales
|
| 150 |
if st.session_state.preguntas_adicionales and not st.session_state.respuestas_adicionales_completadas:
|
| 151 |
-
st.write("Por favor, para poder continuar con el cuestionario es necesario que responda todas las preguntas adicionales."
|
| 152 |
pregunta_adicional_actual = st.session_state.pregunta_adicional_actual
|
| 153 |
pregunta_adicional = st.session_state.preguntas_adicionales[pregunta_adicional_actual]
|
| 154 |
st.write(f"**Pregunta adicional {pregunta_adicional_actual + 1}:** {pregunta_adicional}")
|
| 155 |
|
| 156 |
-
st.session_state.respuestas_adicionales[f'respuesta_adicional_1_{pregunta_adicional_actual}'] = st.text_input("Respuesta adicional 1:"
|
| 157 |
-
st.session_state.respuestas_adicionales[f'respuesta_adicional_2_{pregunta_adicional_actual}'] = st.text_input("Respuesta adicional 2:"
|
| 158 |
-
st.session_state.respuestas_adicionales[f'otras_observaciones_{pregunta_adicional_actual}'] = st.text_input("Otras observaciones:"
|
| 159 |
|
| 160 |
-
if st.button("Enviar respuestas adicionales"
|
| 161 |
-
with st.spinner('Procesando sus respuestas, por favor espere...'
|
| 162 |
st.session_state.respuestas[pregunta_adicional + " (Respuesta adicional 1)"] = st.session_state.respuestas_adicionales[f'respuesta_adicional_1_{pregunta_adicional_actual}']
|
| 163 |
st.session_state.respuestas[pregunta_adicional + " (Respuesta adicional 2)"] = st.session_state.respuestas_adicionales[f'respuesta_adicional_2_{pregunta_adicional_actual}']
|
| 164 |
st.session_state.respuestas[pregunta_adicional + " (Otras observaciones)"] = st.session_state.respuestas_adicionales[f'otras_observaciones_{pregunta_adicional_actual}']
|
|
@@ -181,16 +156,16 @@ def encuesta_asistente():
|
|
| 181 |
st.write(f"**Pregunta:** {pregunta_actual['pregunta']}")
|
| 182 |
|
| 183 |
if pregunta_actual["tipo"] == "texto":
|
| 184 |
-
respuesta = st.text_input("Tu respuesta:"
|
| 185 |
elif pregunta_actual["tipo"] == "multiple":
|
| 186 |
-
respuesta = st.selectbox("Selecciona una opción:"
|
| 187 |
-
if respuesta == "Otro"
|
| 188 |
-
respuesta_otro = st.text_input("Por favor especifica:"
|
| 189 |
if respuesta_otro:
|
| 190 |
respuesta = respuesta_otro
|
| 191 |
|
| 192 |
-
if st.button("Enviar respuesta"
|
| 193 |
-
with st.spinner('Procesando su respuesta, por favor espere...'
|
| 194 |
st.session_state.respuestas[pregunta_actual['pregunta']] = respuesta
|
| 195 |
|
| 196 |
# Obtener respuesta del asistente
|
|
@@ -207,19 +182,19 @@ def encuesta_asistente():
|
|
| 207 |
st.session_state.respuestas_adicionales_completadas = False
|
| 208 |
|
| 209 |
# Convertir respuesta a audio
|
| 210 |
-
audio_path = text_to_speech(respuesta_asistente
|
| 211 |
st.session_state.audio_path = audio_path
|
| 212 |
|
| 213 |
st.session_state.pregunta_actual += 1
|
| 214 |
st.experimental_rerun()
|
| 215 |
else:
|
| 216 |
-
st.write("Gracias por responder todas las preguntas. Haz clic en 'Registrar Encuesta' para finalizar y generar el archivo descargable."
|
| 217 |
-
if st.button("Registrar Encuesta"
|
| 218 |
st.session_state.encuesta_completada = True
|
| 219 |
-
st.success("Encuesta completada exitosamente. Haz clic en 'Obtener Resultado de la Encuesta' para descargar el archivo."
|
| 220 |
|
| 221 |
if 'respuesta_actual' in st.session_state:
|
| 222 |
-
st.write("Respuesta del asistente:"
|
| 223 |
st.write(st.session_state.respuesta_actual)
|
| 224 |
|
| 225 |
audio_path = st.session_state.audio_path
|
|
@@ -271,7 +246,7 @@ def generar_documento():
|
|
| 271 |
|
| 272 |
with open(temp_file.name, "rb") as file:
|
| 273 |
st.download_button(
|
| 274 |
-
label="Descargar Archivo"
|
| 275 |
data=file,
|
| 276 |
file_name="resultado_encuesta.docx",
|
| 277 |
mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
@@ -281,11 +256,14 @@ def generar_documento():
|
|
| 281 |
|
| 282 |
# Función para incrustar video en la página principal
|
| 283 |
def incrustar_video_principal():
|
| 284 |
-
|
|
|
|
|
|
|
|
|
|
| 285 |
video_html = f"""
|
| 286 |
-
<video width="100%"
|
| 287 |
-
<source src="{
|
| 288 |
-
|
| 289 |
</video>
|
| 290 |
"""
|
| 291 |
st.markdown(video_html, unsafe_allow_html=True)
|
|
@@ -324,7 +302,7 @@ st.markdown(
|
|
| 324 |
background-color: white !important;
|
| 325 |
}
|
| 326 |
.nav-bar {
|
| 327 |
-
background-color: #000000;
|
| 328 |
color: white;
|
| 329 |
padding: 10px;
|
| 330 |
text-align: center;
|
|
@@ -342,23 +320,13 @@ st.markdown(
|
|
| 342 |
unsafe_allow_html=True
|
| 343 |
)
|
| 344 |
|
| 345 |
-
#
|
| 346 |
-
def pagina_principal():
|
| 347 |
-
st.title("Bienvenido a Boti Asistente" if st.session_state.idioma == "Español" else "Welcome to Boti Assistant")
|
| 348 |
-
st.write("Esta es la página principal de Boti Asistente, especializado en el desarrollo de bots para Botidinamix." if st.session_state.idioma == "Español" else "This is the main page of Boti Assistant, specialized in the development of bots for Botidinamix.")
|
| 349 |
-
incrustar_video_principal()
|
| 350 |
-
st.markdown("<h2 style='text-align: center; color: white;'>Para realizar su encuesta, haga clic en la barra superior</h2>" if st.session_state.idioma == "Español" else "<h2 style='text-align: center; color: white;'>To take your survey, click on the top bar</h2>", unsafe_allow_html=True)
|
| 351 |
-
|
| 352 |
-
def pagina_asistente():
|
| 353 |
-
encuesta_asistente()
|
| 354 |
-
|
| 355 |
-
# Barra de navegación superior
|
| 356 |
def barra_navegacion():
|
| 357 |
st.markdown(
|
| 358 |
-
|
| 359 |
<div class="nav-bar">
|
| 360 |
-
<a class="nav-link" href="?page=principal">
|
| 361 |
-
<a class="nav-link" href="?page=asistente">
|
| 362 |
</div>
|
| 363 |
""",
|
| 364 |
unsafe_allow_html=True
|
|
@@ -366,18 +334,27 @@ def barra_navegacion():
|
|
| 366 |
|
| 367 |
# Función para seleccionar idioma
|
| 368 |
def seleccionar_idioma():
|
| 369 |
-
st.sidebar.
|
| 370 |
-
idioma = st.sidebar.radio("Idioma" if st.session_state.idioma == "Español" else "Language", ("Español", "English"))
|
| 371 |
st.session_state.idioma = idioma
|
| 372 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 373 |
# Función principal
|
| 374 |
def main():
|
| 375 |
if 'idioma' not in st.session_state:
|
| 376 |
st.session_state.idioma = 'Español'
|
| 377 |
-
|
| 378 |
seleccionar_idioma()
|
| 379 |
barra_navegacion()
|
| 380 |
-
|
| 381 |
query_params = st.experimental_get_query_params()
|
| 382 |
page = query_params.get("page", ["principal"])[0]
|
| 383 |
if page == "principal":
|
|
|
|
| 30 |
return respuesta
|
| 31 |
|
| 32 |
# Función para convertir texto a voz usando Google Cloud Text-to-Speech
|
| 33 |
+
def text_to_speech(text):
|
| 34 |
client = texttospeech.TextToSpeechClient()
|
| 35 |
synthesis_input = texttospeech.SynthesisInput(text=text)
|
| 36 |
+
voice = texttospeech.VoiceSelectionParams(language_code="es-ES", ssml_gender=texttospeech.SsmlVoiceGender.NEUTRAL)
|
| 37 |
audio_config = texttospeech.AudioConfig(audio_encoding=texttospeech.AudioEncoding.MP3)
|
| 38 |
response = client.synthesize_speech(input=synthesis_input, voice=voice, audio_config=audio_config)
|
| 39 |
audio_path = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3").name
|
|
|
|
| 59 |
|
| 60 |
# Función para manejar la encuesta dinámica
|
| 61 |
def encuesta_asistente():
|
| 62 |
+
st.title("Asistente Boti Encuesta")
|
| 63 |
+
st.write("Este asistente te guiará a través de una serie de preguntas para ayudarte a configurar tu asistente virtual")
|
| 64 |
|
| 65 |
# Logo de ayuda del asistente
|
| 66 |
ayuda_logo = "https://img.freepik.com/premium-vector/minimal-ai-tech-robot-vector-illustration_589744-869.jpg"
|
| 67 |
st.image(ayuda_logo, width=50)
|
| 68 |
|
| 69 |
# Botón de ayuda del asistente
|
| 70 |
+
if st.button("Ayuda del asistente"):
|
| 71 |
reproducir_audio("audios/instructivo.mp3")
|
| 72 |
|
| 73 |
preguntas = [
|
| 74 |
{
|
| 75 |
+
"pregunta": "¿Cuál es tu nombre?",
|
| 76 |
"tipo": "texto"
|
| 77 |
},
|
| 78 |
{
|
| 79 |
+
"pregunta": "¿Qué tipo de asistente virtual deseas?",
|
| 80 |
"tipo": "multiple",
|
| 81 |
+
"opciones": ["Asistente Personal", "Asistente de Negocios", "Asistente de Salud", "Asistente de Educación", "Otro"]
|
|
|
|
|
|
|
|
|
|
|
|
|
| 82 |
},
|
| 83 |
{
|
| 84 |
+
"pregunta": "¿Qué objetivo debe cumplir este asistente?",
|
| 85 |
"tipo": "multiple",
|
| 86 |
+
"opciones": ["Organización Personal", "Mejora de Productividad", "Asistencia Médica", "Educación y Aprendizaje", "Otro"]
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
},
|
| 88 |
{
|
| 89 |
+
"pregunta": "¿Cuáles son las funciones que debe tener?",
|
| 90 |
"tipo": "multiple",
|
| 91 |
+
"opciones": ["Gestión de Calendarios", "Recordatorios", "Consultas Médicas", "Ayuda con Tareas Escolares", "Otro"]
|
|
|
|
|
|
|
|
|
|
|
|
|
| 92 |
},
|
| 93 |
{
|
| 94 |
+
"pregunta": "¿Cómo te gustaría que este asistente te ayude en tus tareas diarias?",
|
| 95 |
"tipo": "multiple",
|
| 96 |
+
"opciones": ["Planificación de Día", "Recordatorios", "Consultas y Respuestas", "Apoyo Emocional", "Otro"]
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
},
|
| 98 |
{
|
| 99 |
+
"pregunta": "¿Qué interfaz debería tener este asistente?",
|
| 100 |
"tipo": "multiple",
|
| 101 |
+
"opciones": ["Aplicación Móvil", "Aplicación Web", "Asistente de Voz", "Chatbot en Redes Sociales", "Otro"]
|
|
|
|
|
|
|
|
|
|
|
|
|
| 102 |
},
|
| 103 |
{
|
| 104 |
+
"pregunta": "¿Utilizarías el asistente para aumentar tu tiempo libre o para generar ingresos adicionales?",
|
| 105 |
"tipo": "multiple",
|
| 106 |
+
"opciones": ["Aumentar tiempo libre", "Generar ingresos adicionales"]
|
|
|
|
| 107 |
},
|
| 108 |
{
|
| 109 |
+
"pregunta": "Por último, ¿qué estilos y elementos visuales debería tener?",
|
| 110 |
"tipo": "multiple",
|
| 111 |
+
"opciones": ["Estilo moderno con colores vivos", "Colores sobrios y clásico", "Moderno, colores pastel o simples", "Moderno, elegante, simple, no importa el estilo", "Otro"]
|
|
|
|
|
|
|
|
|
|
|
|
|
| 112 |
}
|
| 113 |
]
|
| 114 |
|
|
|
|
| 123 |
|
| 124 |
# Validación de preguntas adicionales
|
| 125 |
if st.session_state.preguntas_adicionales and not st.session_state.respuestas_adicionales_completadas:
|
| 126 |
+
st.write("Por favor, para poder continuar con el cuestionario es necesario que responda todas las preguntas adicionales.")
|
| 127 |
pregunta_adicional_actual = st.session_state.pregunta_adicional_actual
|
| 128 |
pregunta_adicional = st.session_state.preguntas_adicionales[pregunta_adicional_actual]
|
| 129 |
st.write(f"**Pregunta adicional {pregunta_adicional_actual + 1}:** {pregunta_adicional}")
|
| 130 |
|
| 131 |
+
st.session_state.respuestas_adicionales[f'respuesta_adicional_1_{pregunta_adicional_actual}'] = st.text_input("Respuesta adicional 1:", key=f"respuesta_adicional_1_{pregunta_adicional_actual}")
|
| 132 |
+
st.session_state.respuestas_adicionales[f'respuesta_adicional_2_{pregunta_adicional_actual}'] = st.text_input("Respuesta adicional 2:", key=f"respuesta_adicional_2_{pregunta_adicional_actual}")
|
| 133 |
+
st.session_state.respuestas_adicionales[f'otras_observaciones_{pregunta_adicional_actual}'] = st.text_input("Otras observaciones:", key=f'otras_observaciones_{pregunta_adicional_actual}')
|
| 134 |
|
| 135 |
+
if st.button("Enviar respuestas adicionales", key=f"btn_adicional_{pregunta_adicional_actual}"):
|
| 136 |
+
with st.spinner('Procesando sus respuestas, por favor espere...'):
|
| 137 |
st.session_state.respuestas[pregunta_adicional + " (Respuesta adicional 1)"] = st.session_state.respuestas_adicionales[f'respuesta_adicional_1_{pregunta_adicional_actual}']
|
| 138 |
st.session_state.respuestas[pregunta_adicional + " (Respuesta adicional 2)"] = st.session_state.respuestas_adicionales[f'respuesta_adicional_2_{pregunta_adicional_actual}']
|
| 139 |
st.session_state.respuestas[pregunta_adicional + " (Otras observaciones)"] = st.session_state.respuestas_adicionales[f'otras_observaciones_{pregunta_adicional_actual}']
|
|
|
|
| 156 |
st.write(f"**Pregunta:** {pregunta_actual['pregunta']}")
|
| 157 |
|
| 158 |
if pregunta_actual["tipo"] == "texto":
|
| 159 |
+
respuesta = st.text_input("Tu respuesta:", key=f"respuesta_{st.session_state.pregunta_actual}")
|
| 160 |
elif pregunta_actual["tipo"] == "multiple":
|
| 161 |
+
respuesta = st.selectbox("Selecciona una opción:", pregunta_actual["opciones"], key=f"respuesta_{st.session_state.pregunta_actual}")
|
| 162 |
+
if respuesta == "Otro":
|
| 163 |
+
respuesta_otro = st.text_input("Por favor especifica:", key=f"respuesta_otro_{st.session_state.pregunta_actual}")
|
| 164 |
if respuesta_otro:
|
| 165 |
respuesta = respuesta_otro
|
| 166 |
|
| 167 |
+
if st.button("Enviar respuesta", key=f"btn_{st.session_state.pregunta_actual}"):
|
| 168 |
+
with st.spinner('Procesando su respuesta, por favor espere...'):
|
| 169 |
st.session_state.respuestas[pregunta_actual['pregunta']] = respuesta
|
| 170 |
|
| 171 |
# Obtener respuesta del asistente
|
|
|
|
| 182 |
st.session_state.respuestas_adicionales_completadas = False
|
| 183 |
|
| 184 |
# Convertir respuesta a audio
|
| 185 |
+
audio_path = text_to_speech(respuesta_asistente)
|
| 186 |
st.session_state.audio_path = audio_path
|
| 187 |
|
| 188 |
st.session_state.pregunta_actual += 1
|
| 189 |
st.experimental_rerun()
|
| 190 |
else:
|
| 191 |
+
st.write("Gracias por responder todas las preguntas. Haz clic en 'Registrar Encuesta' para finalizar y generar el archivo descargable.")
|
| 192 |
+
if st.button("Registrar Encuesta"):
|
| 193 |
st.session_state.encuesta_completada = True
|
| 194 |
+
st.success("Encuesta completada exitosamente. Haz clic en 'Obtener Resultado de la Encuesta' para descargar el archivo.")
|
| 195 |
|
| 196 |
if 'respuesta_actual' in st.session_state:
|
| 197 |
+
st.write("Respuesta del asistente:")
|
| 198 |
st.write(st.session_state.respuesta_actual)
|
| 199 |
|
| 200 |
audio_path = st.session_state.audio_path
|
|
|
|
| 246 |
|
| 247 |
with open(temp_file.name, "rb") as file:
|
| 248 |
st.download_button(
|
| 249 |
+
label="Descargar Archivo",
|
| 250 |
data=file,
|
| 251 |
file_name="resultado_encuesta.docx",
|
| 252 |
mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
|
|
| 256 |
|
| 257 |
# Función para incrustar video en la página principal
|
| 258 |
def incrustar_video_principal():
|
| 259 |
+
video_path = "videos/Boty.mp4"
|
| 260 |
+
with open(video_path, "rb") as video_file:
|
| 261 |
+
video_bytes = video_file.read()
|
| 262 |
+
video_base64 = base64.b64encode(video_bytes).decode()
|
| 263 |
video_html = f"""
|
| 264 |
+
<video width="100%" autoplay muted>
|
| 265 |
+
<source src="data:video/mp4;base64,{video_base64}" type="video/mp4">
|
| 266 |
+
Tu navegador no soporta la reproducción de videos.
|
| 267 |
</video>
|
| 268 |
"""
|
| 269 |
st.markdown(video_html, unsafe_allow_html=True)
|
|
|
|
| 302 |
background-color: white !important;
|
| 303 |
}
|
| 304 |
.nav-bar {
|
| 305 |
+
background-color: #000000; /* Cambiado a negro */
|
| 306 |
color: white;
|
| 307 |
padding: 10px;
|
| 308 |
text-align: center;
|
|
|
|
| 320 |
unsafe_allow_html=True
|
| 321 |
)
|
| 322 |
|
| 323 |
+
# Función para la barra de navegación
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 324 |
def barra_navegacion():
|
| 325 |
st.markdown(
|
| 326 |
+
"""
|
| 327 |
<div class="nav-bar">
|
| 328 |
+
<a class="nav-link" href="?page=principal">""" + ("Página Principal" if st.session_state.idioma == "Español" else "Main Page") + """</a>
|
| 329 |
+
<a class="nav-link" href="?page=asistente">""" + ("Asistente Boti" if st.session_state.idioma == "Español" else "Boti Assistant") + """</a>
|
| 330 |
</div>
|
| 331 |
""",
|
| 332 |
unsafe_allow_html=True
|
|
|
|
| 334 |
|
| 335 |
# Función para seleccionar idioma
|
| 336 |
def seleccionar_idioma():
|
| 337 |
+
idioma = st.sidebar.radio("Idioma", ("Español", "English"))
|
|
|
|
| 338 |
st.session_state.idioma = idioma
|
| 339 |
|
| 340 |
+
# Funciones para las páginas
|
| 341 |
+
def pagina_principal():
|
| 342 |
+
st.title("Bienvenido a Boti Asistente")
|
| 343 |
+
st.write("Esta es la página principal de Boti Asistente, especializado en el desarrollo de bots para Botidinamix.")
|
| 344 |
+
incrustar_video_principal()
|
| 345 |
+
st.markdown("<h2 style='text-align: center; color: white;'>Para realizar su encuesta, haga clic en la barra superior</h2>", unsafe_allow_html=True)
|
| 346 |
+
|
| 347 |
+
def pagina_asistente():
|
| 348 |
+
encuesta_asistente()
|
| 349 |
+
|
| 350 |
# Función principal
|
| 351 |
def main():
|
| 352 |
if 'idioma' not in st.session_state:
|
| 353 |
st.session_state.idioma = 'Español'
|
| 354 |
+
|
| 355 |
seleccionar_idioma()
|
| 356 |
barra_navegacion()
|
| 357 |
+
|
| 358 |
query_params = st.experimental_get_query_params()
|
| 359 |
page = query_params.get("page", ["principal"])[0]
|
| 360 |
if page == "principal":
|