Update app.py
Browse files
app.py
CHANGED
@@ -1,57 +1,90 @@
|
|
1 |
import streamlit as st
|
2 |
-
|
3 |
-
|
|
|
4 |
|
5 |
-
#
|
6 |
-
api_key =
|
7 |
|
8 |
-
#
|
9 |
-
|
|
|
|
|
10 |
|
|
|
11 |
contexto = """
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
CONCEPTOS BÁSICOS UAS, RPAS, drone o aeromodelo Se usan diferentes términos para referirnos a las aeronaves no tripuladas, pero ¿qué diferencias hay entre ellos? • Aeronave no tripulada o RPA (Remotely Piloted Aircraft) Cualquier aeronave que opere o esté diseñada para operar de forma autónoma o para ser pilotada a distancia sin un piloto a bordo. este RPA, es también llamado DAOD por DINACIA (Dispositivo aéreo operado a distancia)) • Dron (drone en inglés) Palabra coloquialmente usada para referirse en general a todas las aeronaves no tripuladas, debido a su similitud con un zumbido de Abejorro es otra forma de nombrar a los RPA • Aeromodelo Aeronave de tamaño reducido pilotado a distancia usada principalmente para vuelos deportivos o experimentales. también puede ser un RPA • RPAS «sistema de aeronave pilotada por control remoto» Aeronave pilotada a distancia, su sistema de vuelo, su estación, los enlaces requeridos de mando y control y cualquier otro componente según lo indicado en el diseño de la aeronave. • UAV « aeronave no tripulada» Aeronave no tripulada
|
21 |
"""
|
22 |
|
23 |
-
def
|
24 |
-
prompt = f"
|
25 |
-
|
26 |
-
|
27 |
-
return questions
|
28 |
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
return results, correct_answers
|
33 |
|
34 |
-
|
35 |
-
|
|
|
|
|
|
|
36 |
|
37 |
-
|
|
|
|
|
|
|
38 |
|
39 |
-
|
40 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
|
42 |
-
|
43 |
-
|
44 |
-
form.write(question)
|
45 |
-
user_answers.append(form.radio(f"Pregunta {i+1}", options))
|
46 |
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
results, correct_answers = evaluate_answers(st.session_state.questions, user_answers)
|
51 |
-
st.write("Resultados:")
|
52 |
-
for i, result in enumerate(results):
|
53 |
-
st.write(f"Pregunta {i+1}: {'Correcta' if result else 'Incorrecta'} (Respuesta correcta: {correct_answers[i]})")
|
54 |
|
|
|
55 |
if st.button("Generar nuevas preguntas"):
|
56 |
-
st.session_state.
|
57 |
-
st.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
import streamlit as st
|
2 |
+
import openai
|
3 |
+
import random
|
4 |
+
import os
|
5 |
|
6 |
+
# Configurar la API key de OpenAI desde la variable de entorno
|
7 |
+
openai.api_key = os.environ.get("OPENAI_API_KEY")
|
8 |
|
9 |
+
# Verificar si la API key está configurada
|
10 |
+
if not openai.api_key:
|
11 |
+
st.error("La API key de OpenAI no está configurada. Por favor, configúrala en las variables de entorno.")
|
12 |
+
st.stop()
|
13 |
|
14 |
+
# El resto del código permanece igual
|
15 |
contexto = """
|
16 |
+
CONCEPTOS BÁSICOS UAS, RPAS, drone o aeromodelo:
|
17 |
+
Se usan diferentes términos para referirnos a las aeronaves no tripuladas, pero ¿qué diferencias hay entre ellos?
|
18 |
+
• Aeronave no tripulada o RPA (Remotely Piloted Aircraft): Cualquier aeronave que opere o esté diseñada para operar de forma autónoma o para ser pilotada a distancia sin un piloto a bordo. Este RPA, es también llamado DAOD por DINACIA (Dispositivo aéreo operado a distancia)
|
19 |
+
• Dron (drone en inglés): Palabra coloquialmente usada para referirse en general a todas las aeronaves no tripuladas, debido a su similitud con un zumbido de Abejorro es otra forma de nombrar a los RPA
|
20 |
+
• Aeromodelo: Aeronave de tamaño reducido pilotado a distancia usada principalmente para vuelos deportivos o experimentales. También puede ser un RPA
|
21 |
+
• RPAS «sistema de aeronave pilotada por control remoto»: Aeronave pilotada a distancia, su sistema de vuelo, su estación, los enlaces requeridos de mando y control y cualquier otro componente según lo indicado en el diseño de la aeronave.
|
22 |
+
• UAV « aeronave no tripulada»: Aeronave no tripulada, que tiene la capacidad de volar autónomamente y el equipo para controlarla de forma remota.
|
23 |
+
• UAS «Unmanned Aircraft System»: El término UAS engloba los RPAS y las aeronaves autónomas es un término más genérico que se refiere a cualquier sistema de aeronaves no tripuladas, incluidos RPAS y UAV. (el piloto a distancia no puede intervenir durante el vuelo).
|
|
|
24 |
"""
|
25 |
|
26 |
+
def generar_preguntas(num_preguntas=38):
|
27 |
+
prompt = f"""Basándote en el siguiente contexto sobre drones y aeronaves no tripuladas, genera {num_preguntas} preguntas de opción múltiple.
|
28 |
+
Cada pregunta debe tener tres opciones de respuesta y solo una debe ser correcta.
|
29 |
+
Devuelve las preguntas en formato JSON como una lista de diccionarios, donde cada diccionario contenga las claves 'pregunta', 'opciones' (lista de 3 opciones), y 'respuesta_correcta' (índice de la opción correcta, 0, 1 o 2).
|
|
|
30 |
|
31 |
+
Contexto:
|
32 |
+
{contexto}
|
33 |
+
"""
|
|
|
34 |
|
35 |
+
response = openai.ChatCompletion.create(
|
36 |
+
model="gpt-4o-mini", # Asegúrate de que este es el nombre correcto del modelo
|
37 |
+
messages=[{"role": "system", "content": prompt}],
|
38 |
+
temperature=0.7,
|
39 |
+
)
|
40 |
|
41 |
+
# Asumimos que la respuesta está en formato JSON y la parseamos
|
42 |
+
import json
|
43 |
+
preguntas = json.loads(response.choices[0].message.content)
|
44 |
+
return preguntas
|
45 |
|
46 |
+
def evaluar_respuestas(preguntas, respuestas_usuario):
|
47 |
+
correctas = 0
|
48 |
+
resultados = []
|
49 |
+
for i, (pregunta, respuesta_usuario) in enumerate(zip(preguntas, respuestas_usuario)):
|
50 |
+
if respuesta_usuario == pregunta['respuesta_correcta']:
|
51 |
+
correctas += 1
|
52 |
+
resultados.append(f"Pregunta {i+1}: Correcta")
|
53 |
+
else:
|
54 |
+
resultados.append(f"Pregunta {i+1}: Incorrecta. La respuesta correcta era: {pregunta['opciones'][pregunta['respuesta_correcta']]}")
|
55 |
+
return correctas, resultados
|
56 |
|
57 |
+
# Aplicación Streamlit
|
58 |
+
st.title("Cuestionario de Drones")
|
|
|
|
|
59 |
|
60 |
+
# Inicializar o cargar preguntas
|
61 |
+
if 'preguntas' not in st.session_state:
|
62 |
+
st.session_state.preguntas = generar_preguntas()
|
|
|
|
|
|
|
|
|
63 |
|
64 |
+
# Botón para generar nuevas preguntas
|
65 |
if st.button("Generar nuevas preguntas"):
|
66 |
+
st.session_state.preguntas = generar_preguntas()
|
67 |
+
st.session_state.respuestas_enviadas = False
|
68 |
+
|
69 |
+
# Formulario para las preguntas
|
70 |
+
with st.form("quiz_form"):
|
71 |
+
respuestas_usuario = []
|
72 |
+
for i, pregunta in enumerate(st.session_state.preguntas):
|
73 |
+
st.write(f"**Pregunta {i+1}:** {pregunta['pregunta']}")
|
74 |
+
respuesta = st.radio(f"Selecciona una opción para la pregunta {i+1}:",
|
75 |
+
pregunta['opciones'],
|
76 |
+
key=f"pregunta_{i}")
|
77 |
+
respuestas_usuario.append(pregunta['opciones'].index(respuesta))
|
78 |
+
|
79 |
+
submitted = st.form_submit_button("Enviar respuestas")
|
80 |
+
|
81 |
+
# Evaluar respuestas cuando se envía el formulario
|
82 |
+
if submitted:
|
83 |
+
st.session_state.respuestas_enviadas = True
|
84 |
+
st.session_state.correctas, st.session_state.resultados = evaluar_respuestas(st.session_state.preguntas, respuestas_usuario)
|
85 |
+
|
86 |
+
# Mostrar resultados
|
87 |
+
if st.session_state.get('respuestas_enviadas', False):
|
88 |
+
st.write(f"Has acertado {st.session_state.correctas} de {len(st.session_state.preguntas)} preguntas.")
|
89 |
+
for resultado in st.session_state.resultados:
|
90 |
+
st.write(resultado)
|