|
import streamlit as st |
|
from huggingface_hub import InferenceApi |
|
from typing import List, Tuple |
|
|
|
|
|
api_key = st.secrets["api_key"] |
|
|
|
|
|
inference = InferenceApi(repo_id="gpt-3.5-turbo", token=api_key) |
|
|
|
contexto = """ |
|
- 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 - |
|
Responde brevemente a la solicitud del usuario y no proporciones información innecesaria. - |
|
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. |
|
Responde de manera que sea fácil de leer por software de texto a voz. |
|
Unicamente responde a lo relacionado al dron, a la información de la ventana de contexto. Prohibido hablar de algun otro tema. |
|
Sugerir siempre algo mas relacionado al tema, la continuacion del tema especifico. Entender el contexto para incentivar el intercambio. |
|
En la primera interacción tienes que saludar a Gastón. |
|
|
|
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 |
|
""" |
|
|
|
def generate_questions(api_key: str) -> List[str]: |
|
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}" |
|
response = inference(inputs=prompt, parameters={"max_new_tokens": 1024, "return_full_text": False}) |
|
questions = response["generated_text"].strip().split("\n\n") |
|
return questions |
|
|
|
def evaluate_answers(questions: List[str], user_answers: List[str]) -> Tuple[List[bool], List[str]]: |
|
correct_answers = [q.split('\n')[-1].split(': ')[-1] for q in questions] |
|
results = [user_answers[i] == correct_answers[i] for i in range(len(correct_answers))] |
|
return results, correct_answers |
|
|
|
if "questions" not in st.session_state: |
|
st.session_state.questions = generate_questions(api_key) |
|
|
|
st.title("Evaluación de Drones") |
|
|
|
form = st.form(key="quiz_form") |
|
user_answers = [] |
|
|
|
for i, q in enumerate(st.session_state.questions): |
|
question, *options = q.split('\n') |
|
form.write(question) |
|
user_answers.append(form.radio(f"Pregunta {i+1}", options)) |
|
|
|
submit_button = form.form_submit_button(label="Enviar respuestas") |
|
|
|
if submit_button: |
|
results, correct_answers = evaluate_answers(st.session_state.questions, user_answers) |
|
st.write("Resultados:") |
|
for i, result in enumerate(results): |
|
st.write(f"Pregunta {i+1}: {'Correcta' if result else 'Incorrecta'} (Respuesta correcta: {correct_answers[i]})") |
|
|
|
if st.button("Generar nuevas preguntas"): |
|
st.session_state.questions = generate_questions(api_key) |
|
st.experimental_rerun() |
|
|