GAS17 commited on
Commit
88f043f
·
verified ·
1 Parent(s): 6f92222

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -13
app.py CHANGED
@@ -2,6 +2,8 @@ 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")
@@ -11,7 +13,7 @@ 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?
@@ -26,22 +28,50 @@ Se usan diferentes términos para referirnos a las aeronaves no tripuladas, pero
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
@@ -58,7 +88,7 @@ def evaluar_respuestas(preguntas, respuestas_usuario):
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
 
2
  import openai
3
  import random
4
  import os
5
+ import json
6
+ import re
7
 
8
  # Configurar la API key de OpenAI desde la variable de entorno
9
  openai.api_key = os.environ.get("OPENAI_API_KEY")
 
13
  st.error("La API key de OpenAI no está configurada. Por favor, configúrala en las variables de entorno.")
14
  st.stop()
15
 
16
+ # El contexto permanece igual
17
  contexto = """
18
  CONCEPTOS BÁSICOS UAS, RPAS, drone o aeromodelo:
19
  Se usan diferentes términos para referirnos a las aeronaves no tripuladas, pero ¿qué diferencias hay entre ellos?
 
28
  def generar_preguntas(num_preguntas=38):
29
  prompt = f"""Basándote en el siguiente contexto sobre drones y aeronaves no tripuladas, genera {num_preguntas} preguntas de opción múltiple.
30
  Cada pregunta debe tener tres opciones de respuesta y solo una debe ser correcta.
31
+ Devuelve las preguntas en el siguiente formato:
32
+
33
+ 1. [Pregunta 1]
34
+ a) [Opción 1]
35
+ b) [Opción 2]
36
+ c) [Opción 3]
37
+ Respuesta correcta: [a, b, o c]
38
+
39
+ 2. [Pregunta 2]
40
+ ...
41
 
42
  Contexto:
43
  {contexto}
44
  """
45
 
46
+ try:
47
+ response = openai.ChatCompletion.create(
48
+ model="gpt-4o-mini", # Asegúrate de que este es el nombre correcto del modelo
49
+ messages=[{"role": "system", "content": prompt}],
50
+ temperature=0.7,
51
+ )
52
+
53
+ content = response.choices[0].message.content
54
+
55
+ # Parseamos el contenido para convertirlo en una estructura de datos
56
+ preguntas = []
57
+ current_question = {}
58
+ for line in content.split('\n'):
59
+ if re.match(r'^\d+\.', line):
60
+ if current_question:
61
+ preguntas.append(current_question)
62
+ current_question = {'pregunta': line.split('.', 1)[1].strip(), 'opciones': []}
63
+ elif line.startswith(('a)', 'b)', 'c)')):
64
+ current_question['opciones'].append(line[2:].strip())
65
+ elif line.startswith('Respuesta correcta:'):
66
+ current_question['respuesta_correcta'] = ord(line.split(':')[1].strip()) - ord('a')
67
+
68
+ if current_question:
69
+ preguntas.append(current_question)
70
+
71
+ return preguntas
72
+ except Exception as e:
73
+ st.error(f"Error al generar preguntas: {str(e)}")
74
+ return []
75
 
76
  def evaluar_respuestas(preguntas, respuestas_usuario):
77
  correctas = 0
 
88
  st.title("Cuestionario de Drones")
89
 
90
  # Inicializar o cargar preguntas
91
+ if 'preguntas' not in st.session_state or not st.session_state.preguntas:
92
  st.session_state.preguntas = generar_preguntas()
93
 
94
  # Botón para generar nuevas preguntas