Spaces:
Sleeping
Sleeping
File size: 6,145 Bytes
586cb9f adce40c 5917716 e8c8729 586cb9f 542b56f 5f5fe6e 5917716 e8c8729 5917716 e8c8729 5f5fe6e 8cf882d 528bf4b e8c8729 c4f2069 e8c8729 5917716 c4f2069 e8c8729 5917716 c4f2069 5917716 c4f2069 adce40c e8c8729 5245a46 3b61042 2a8e918 e8c8729 e28804a e8c8729 c4f2069 3d5c37c e8c8729 c4f2069 6587c5c 5245a46 e8c8729 c4f2069 542b56f e28804a 6587c5c e8c8729 5245a46 e8c8729 e28804a 586cb9f a2aeb87 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
import gradio as gr
import random
import time
import threading
# ---------------- Dictionary y'ibibazo n'ibisubizo ----------------
ibisubizo_dict = {
"Icyapa cya STOP gisobanura iki?": (
"Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.",
"Icyapa cya STOP gituma umugenzi amenya guhagarara ngo hamenyekane umutekano w'umuhanda."
),
"Umuvuduko ntarengwa mu mujyi ni uwuhe?": (
"Ni 40 km/h mu mijyi.",
"Umuvuduko ntarengwa ugamije kugabanya impanuka mu mijyi, cyane cyane hafi y'ahantu hateraniye abantu."
),
"Icyapa cya Attention École gisobanura iki?": (
"Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.",
"Iki cyapa cyerekana ahari ishuri cyangwa abana bari hafi y'umuhanda."
),
"Iyo umwana ari ku muhanda, ukora iki?": (
"Ugabanya umuvuduko kandi ube maso cyane.",
"Umwana ashobora guhita yinjira mu muhanda nta kwitegereza, ugomba kwitonda cyane."
),
"Iyo ugiye guca ku bandi, ukora iki?": (
"Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.",
"Kureba mbere yo guca ku bandi birinda impanuka."
),
}
# ---------------- Functions ----------------
def gusubiza(ikibazo):
ans, expl = ibisubizo_dict.get(ikibazo, ("Nta bisubizo bihari kuri icyo kibazo.", "Nta explanation."))
return ans + "\n\n💡 Explanation: " + expl
def gutegura_quiz(batch_size=5):
quiz = random.sample(list(ibisubizo_dict.items()), min(batch_size, len(ibisubizo_dict)))
quiz_questions = []
quiz_choices = []
for q, (ans, _) in quiz:
other_answers = list(set(a for a, _ in ibisubizo_dict.values()) - {ans})
choices = random.sample(other_answers, min(2, len(other_answers))) + [ans]
random.shuffle(choices)
quiz_questions.append(q)
quiz_choices.append(choices)
return quiz_questions, quiz_choices
# ---------------- Timer Function ----------------
def start_timer(timer_box, duration=20):
def countdown():
for i in range(duration, -1, -1):
timer_box.update(value=f"⏱️ {i} seconds left", visible=True)
time.sleep(1)
thread = threading.Thread(target=countdown, daemon=True)
thread.start()
# ---------------- Gradio Interface ----------------
with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo:
gr.Markdown("# 🚗 AI y’Amategeko y’Umuhanda 🇷🇼\n### *Yakozwe na Viateur Irasubiza*")
# --- Igice cyo gusaba igisubizo ---
with gr.Row():
with gr.Column(scale=1):
ikibazo = gr.Dropdown(choices=list(ibisubizo_dict.keys()), label="➡️ Hitamo ikibazo", value=list(ibisubizo_dict.keys())[0])
kanda = gr.Button("🔍 Saba igisubizo")
with gr.Column(scale=1):
igisubizo = gr.Textbox(label="🧠 Igisubizo", lines=6)
kanda.click(fn=gusubiza, inputs=ikibazo, outputs=igisubizo)
# --- Quiz Section ---
gr.Markdown("## 📝 Quiz: Amanota ako kanya ku kibazo kimwe ku gihe")
quiz_button = gr.Button("Tangira Quiz")
reset_button = gr.Button("🔄 Reset Quiz")
quiz_score = gr.Textbox(label="🏆 Amanota yose", value="0/20", interactive=False)
current_score = gr.State(0)
quiz_questions_state = gr.State()
quiz_choices_state = gr.State()
current_question_state = gr.State("")
radio_widgets = []
instant_outputs = []
timer_boxes = []
for i in range(5):
r = gr.Radio(choices=[], label=f"Ikibazo {i+1}", visible=False)
radio_widgets.append(r)
inst = gr.Markdown("", visible=False)
instant_outputs.append(inst)
timer_box = gr.Markdown("", visible=False)
timer_boxes.append(timer_box)
# --- Start Quiz ---
def start_quiz():
questions, choices = gutegura_quiz()
updates = []
for i, r in enumerate(radio_widgets):
if i < len(questions):
updates.append(gr.update(choices=choices[i], label=questions[i], visible=True, value=None))
else:
updates.append(gr.update(visible=False))
for inst in instant_outputs:
updates.append(gr.update(value="", visible=False))
for timer_box in timer_boxes:
updates.append(gr.update(value="", visible=False))
# Start timer for first question
start_timer(timer_boxes[0])
return questions, choices, *updates, 0, "0/20", questions[0]
quiz_button.click(
fn=start_quiz,
inputs=[],
outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets + instant_outputs + timer_boxes + [current_score, quiz_score, current_question_state]
)
# --- Check Answer ---
def check_answer(answer, question, score):
if not question:
return "", score, f"{score}/20"
correct, expl = ibisubizo_dict.get(question, ("", ""))
if answer == correct:
score += 4
status = f"✅ Igisubizo cyawe ni cyo\n💡 Explanation: {expl}"
else:
status = f"❌ Igisubizo nyacyo: {correct}\n💡 Explanation: {expl}\nTip: Subira usome neza icyapa!"
return status, score, f"{score}/20"
for r, inst in zip(radio_widgets, instant_outputs):
r.change(fn=check_answer, inputs=[r, current_question_state, current_score], outputs=[inst, current_score, quiz_score])
# --- Reset Quiz ---
def reset_quiz():
updates = []
for r, inst, timer_box in zip(radio_widgets, instant_outputs, timer_boxes):
updates.append(gr.update(visible=False, value=None))
updates.append(gr.update(value=""))
updates.append(gr.update(value="", visible=False))
return 0, "0/20", *updates
reset_button.click(
fn=reset_quiz,
inputs=[],
outputs=[current_score, quiz_score] + radio_widgets + instant_outputs + timer_boxes
)
# --- Footer / Copyright ---
gr.Markdown("© 2025 Viateur Irasubiza. Uburenganzira bwose burabitswe.\n\nAI yakozwe kugirango ifashe Abanyarwanda kwiga amategeko y'umuhanda.")
demo.launch()
|