GAS17 commited on
Commit
6f92222
·
verified ·
1 Parent(s): 3afedf9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +75 -42
app.py CHANGED
@@ -1,57 +1,90 @@
1
  import streamlit as st
2
- from huggingface_hub import InferenceApi
3
- from typing import List, Tuple
 
4
 
5
- # Cargar la API Key desde los secretos
6
- api_key = st.secrets["api_key"]
7
 
8
- # Inicializar el cliente de la API de Hugging Face
9
- inference = InferenceApi(repo_id="gpt-4o-mini", token=api_key)
 
 
10
 
 
11
  contexto = """
12
- - Eres Citrino especializado en Dron, un asistente de voz amigable y servicial que hablas español, del Rio de la Plata. Hablar de manera informal -
13
- Responde brevemente a la solicitud del usuario y no proporciones información innecesaria. -
14
- Si no entiendes la solicitud del usuario, pide aclaración. Usar espacios entre oraciones, emplear listas, no usar emojis ni otro formato en tus respuestas.
15
- Responde de manera que sea fácil de leer por software de texto a voz.
16
- Unicamente responde a lo relacionado al dron, a la información de la ventana de contexto. Prohibido hablar de algun otro tema.
17
- Sugerir siempre algo mas relacionado al tema, la continuacion del tema especifico. Entender el contexto para incentivar el intercambio.
18
- En la primera interacción tienes que saludar a Gastón.
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 generate_questions(api_key: str) -> List[str]:
24
- prompt = f"Genera 38 preguntas de opción múltiple con 3 opciones cada una y la respuesta correcta, basadas en el siguiente contexto:\n\n{contexto}"
25
- response = inference(inputs=prompt, parameters={"max_new_tokens": 1024, "return_full_text": False})
26
- questions = response["generated_text"].strip().split("\n\n")
27
- return questions
28
 
29
- def evaluate_answers(questions: List[str], user_answers: List[str]) -> Tuple[List[bool], List[str]]:
30
- correct_answers = [q.split('\n')[-1].split(': ')[-1] for q in questions]
31
- results = [user_answers[i] == correct_answers[i] for i in range(len(correct_answers))]
32
- return results, correct_answers
33
 
34
- if "questions" not in st.session_state:
35
- st.session_state.questions = generate_questions(api_key)
 
 
 
36
 
37
- st.title("Evaluación de Drones")
 
 
 
38
 
39
- form = st.form(key="quiz_form")
40
- user_answers = []
 
 
 
 
 
 
 
 
41
 
42
- for i, q in enumerate(st.session_state.questions):
43
- question, *options = q.split('\n')
44
- form.write(question)
45
- user_answers.append(form.radio(f"Pregunta {i+1}", options))
46
 
47
- submit_button = form.form_submit_button(label="Enviar respuestas")
48
-
49
- if submit_button:
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.questions = generate_questions(api_key)
57
- st.experimental_rerun()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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)