Commit History

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()
e8c8729
verified

VIATEUR-AI commited on

import gradio as gr import random import time from threading import Timer # ---------------- 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." ), "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." ), } # ---------------- Add more questions dynamically ---------------- for i in range(4, 21): question = f"Icyapa cyangwa amategeko y'umuhanda #{i}" answer = f"Igisubizo cy'ikibazo #{i}" explanation = f"Impamvu y'ikibazo #{i}" ibisubizo_dict[question] = (answer, explanation) ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gutegura_quiz(batch_size=5): quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, (ans, expl) 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 def check_answer(answer, question_index, questions_state, scores_list): if question_index is None or answer is None: return "", scores_list, "0", f"0/{len(scores_list)*4 if scores_list else 0}" question = questions_state[question_index] correct, expl = ibisubizo_dict.get(question, ("", "")) score = 4 if answer == correct else 0 scores_list.append(score) total_score = sum(scores_list) question_score_text = f"🏅 Amanota kuri iki kibazo: {score}/4\n💡 Explanation: {expl}" total_score_text = f"🏆 Amanota yose kugeza ubu: {total_score}/{len(scores_list)*4}" return question_score_text, scores_list, str(score), total_score_text 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, t in zip(instant_outputs, timer_boxes): updates.append(gr.update(visible=False, value="")) updates.append(gr.update(visible=True, value="⏱️ 20s left")) return questions, *updates, [], "0/0" def reset_quiz(): updates = [] for r, inst, t 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="⏱️ 20s left")) return [], [], "0/0", *updates # ---------------- 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*") quiz_button = gr.Button("Tangira Quiz") reset_button = gr.Button("🔄 Reset Quiz") quiz_score = gr.Textbox(label="🏆 Amanota yose kugeza ubu", value="0/0", interactive=False) scores_list_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("⏱️ 20s left", visible=False) timer_boxes.append(timer_box) quiz_questions_state = gr.State() # Buttons logic quiz_button.click(fn=start_quiz, inputs=[], outputs=[quiz_questions_state] + [val for pair in zip(radio_widgets, instant_outputs) for val in pair] + timer_boxes + [scores_list_state, quiz_score]) reset_button.click(fn=reset_quiz, inputs=[], outputs=[quiz_questions_state, scores_list_state, quiz_score] + [val for pair in zip(radio_widgets, instant_outputs) for val in pair] + timer_boxes) # Answer checking for i, (r, inst, timer) in enumerate(zip(radio_widgets, instant_outputs, timer_boxes)): r.change( fn=check_answer, inputs=[r, gr.State(i), quiz_questions_state, scores_list_state], outputs=[inst, scores_list_state, r, quiz_score] ) gr.Markdown("© 2025 Viateur Irasubiza. Uburenganzira bwose burabitswe.\n\nAI yakozwe kugirango ifashe Abanyarwanda kwiga amategeko y'umuhanda.") demo.launch()
5917716
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- 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."), "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."), } # ---------------- Add more questions dynamically ---------------- for i in range(4, 21): question = f"Icyapa cyangwa amategeko y'umuhanda #{i}" answer = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." explanation = f"Impamvu y'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[question] = (answer, explanation) ibibazo_bya_quiz = list(ibisubizo_dict.keys()) # ---------------- Functions ---------------- def gutegura_quiz(batch_size=5): quiz_questions = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_choices = [] for q in quiz_questions: correct, _ = ibisubizo_dict[q] other_answers = list(set(a for a, _ in ibisubizo_dict.values()) - {correct}) choices = random.sample(other_answers, min(2, len(other_answers))) + [correct] random.shuffle(choices) quiz_choices.append(choices) return quiz_questions, quiz_choices 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, t in zip(instant_outputs, timer_boxes): updates.append(gr.update(visible=False, value="")) updates.append(gr.update(visible=True, value="⏱️ 20s left")) return questions, [], *updates, [], "0/0" def reset_quiz(): updates = [] for r, inst, t 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="⏱️ 20s left")) return [], [], [], "0/0", *updates def check_answer(answer, question_index, questions_state, scores_list): if question_index is None or answer is None: return "", scores_list, "0", f"0/{len(scores_list)*4 if scores_list else 0}" question = questions_state[question_index] correct, expl = ibisubizo_dict.get(question, ("", "")) score = 4 if answer == correct else 0 scores_list.append(score) # cumulative scoring total_score = sum(scores_list) question_score_text = f"🏅 Amanota kuri iki kibazo: {score}/4\n💡 Explanation: {expl}" total_score_text = f"🏆 Amanota yose kugeza ubu: {total_score}/{len(scores_list)*4}" return question_score_text, scores_list, str(score), total_score_text # ---------------- 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*") quiz_button = gr.Button("Tangira Quiz") reset_button = gr.Button("🔄 Reset Quiz") quiz_score = gr.Textbox(label="🏆 Amanota yose kugeza ubu", value="0/0", interactive=False) scores_list_state = gr.State([]) # cumulative scores 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("⏱️ 20s left", visible=False) timer_boxes.append(timer_box) quiz_questions_state = gr.State() # stores current questions # Buttons logic quiz_button.click(fn=start_quiz, inputs=[], outputs=[quiz_questions_state, gr.State()] + [val for pair in zip(radio_widgets, instant_outputs) for val in pair] + timer_boxes + [scores_list_state, quiz_score]) reset_button.click(fn=reset_quiz, inputs=[], outputs=[quiz_questions_state, gr.State(), scores_list_state, quiz_score] + [val for pair in zip(radio_widgets, instant_outputs) for val in pair] + timer_boxes) # Answer checking for idx, (r, inst, timer) in enumerate(zip(radio_widgets, instant_outputs, timer_boxes)): r.change(fn=check_answer, inputs=[r, gr.State(idx), quiz_questions_state, scores_list_state], outputs=[inst, scores_list_state, r, quiz_score]) # Footer gr.Markdown("© 2025 Viateur Irasubiza. Uburenganzira bwose burabitswe.\n\nAI yakozwe kugirango ifashe Abanyarwanda kwiga amategeko y'umuhanda.") demo.launch()
3853cd9
verified

VIATEUR-AI commited on

import gradio as gr import random import time from threading import Timer # ---------------- 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." ), "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." ), } # ---------------- Add more questions dynamically ---------------- for i in range(4, 21): question = f"Icyapa cyangwa amategeko y'umuhanda #{i}" answer = f"Igisubizo cy'ikibazo #{i}" explanation = f"Impamvu y'ikibazo #{i}" ibisubizo_dict[question] = (answer, explanation) ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gutegura_quiz(batch_size=5): quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, (ans, expl) 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 def check_answer(answer, question_index, questions_state, scores_list): if question_index is None or answer is None: return "", scores_list, "0", f"0/{len(scores_list)*4 if scores_list else 0}" question = questions_state[question_index] correct, expl = ibisubizo_dict.get(question, ("", "")) score = 4 if answer == correct else 0 scores_list.append(score) total_score = sum(scores_list) question_score_text = f"🏅 Amanota kuri iki kibazo: {score}/4\n💡 Explanation: {expl}" total_score_text = f"🏆 Amanota yose kugeza ubu: {total_score}/{len(scores_list)*4}" return question_score_text, scores_list, str(score), total_score_text 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, t in zip(instant_outputs, timer_boxes): updates.append(gr.update(visible=False, value="")) updates.append(gr.update(visible=True, value="⏱️ 20s left")) return questions, *updates, [], "0/0" def reset_quiz(): updates = [] for r, inst, t 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="⏱️ 20s left")) return [], [], "0/0", *updates # ---------------- 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*") quiz_button = gr.Button("Tangira Quiz") reset_button = gr.Button("🔄 Reset Quiz") quiz_score = gr.Textbox(label="🏆 Amanota yose kugeza ubu", value="0/0", interactive=False) scores_list_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("⏱️ 20s left", visible=False) timer_boxes.append(timer_box) quiz_questions_state = gr.State() # Buttons logic quiz_button.click(fn=start_quiz, inputs=[], outputs=[quiz_questions_state] + [val for pair in zip(radio_widgets, instant_outputs) for val in pair] + timer_boxes + [scores_list_state, quiz_score]) reset_button.click(fn=reset_quiz, inputs=[], outputs=[quiz_questions_state, scores_list_state, quiz_score] + [val for pair in zip(radio_widgets, instant_outputs) for val in pair] + timer_boxes) # Answer checking for i, (r, inst, timer) in enumerate(zip(radio_widgets, instant_outputs, timer_boxes)): r.change( fn=check_answer, inputs=[r, gr.State(i), quiz_questions_state, scores_list_state], outputs=[inst, scores_list_state, r, quiz_score] ) gr.Markdown("© 2025 Viateur Irasubiza. Uburenganzira bwose burabitswe.\n\nAI yakozwe kugirango ifashe Abanyarwanda kwiga amategeko y'umuhanda.") demo.launch()
01c84f6
verified

VIATEUR-AI commited on

import gradio as gr import random import time from threading import Timer # ---------------- 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."), "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."), # Shyiramo ibindi bibazo byose... } # ---------------- Add more questions dynamically ---------------- for i in range(4, 21): question = f"Icyapa cyangwa amategeko y'umuhanda #{i}" answer = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." explanation = f"Impamvu y'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[question] = (answer, explanation) ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gutegura_quiz(batch_size=5): quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, (ans, expl) 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 def check_answer(answer, question, scores_list): if not question: return "", scores_list, "0", "0/0" correct, expl = ibisubizo_dict.get(question, ("", "")) score = 4 if answer == correct else 0 scores_list.append(score) total_score = sum(scores_list) question_score_text = f"🏅 Amanota kuri iki kibazo: {score}/4\n💡 Explanation: {expl}" total_score_text = f"🏆 Amanota yose kugeza ubu: {total_score}/{len(scores_list)*4}" return question_score_text, scores_list, str(score), total_score_text 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, t in zip(instant_outputs, timer_boxes): updates.append(gr.update(visible=False, value="")) updates.append(gr.update(visible=True, value="⏱️ 20s left")) return questions, choices, *updates, [], "0/0" def reset_quiz(): updates = [] for r, inst, t 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="⏱️ 20s left")) return [], [], [], "0/0", *updates # ---------------- 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*") quiz_button = gr.Button("Tangira Quiz") reset_button = gr.Button("🔄 Reset Quiz") quiz_score = gr.Textbox(label="🏆 Amanota yose kugeza ubu", value="0/0", interactive=False) scores_list_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("⏱️ 20s left", visible=False) timer_boxes.append(timer_box) quiz_questions_state = gr.State() quiz_choices_state = gr.State() # Buttons logic quiz_button.click(fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + [val for pair in zip(radio_widgets, instant_outputs) for val in pair] + timer_boxes + [scores_list_state, quiz_score]) reset_button.click(fn=reset_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state, scores_list_state, quiz_score] + [val for pair in zip(radio_widgets, instant_outputs) for val in pair] + timer_boxes) # Answer checking for r, inst, timer in zip(radio_widgets, instant_outputs, timer_boxes): r.change(fn=check_answer, inputs=[r, r.label, scores_list_state], outputs=[inst, scores_list_state, r, quiz_score]) # Footer gr.Markdown("© 2025 Viateur Irasubiza. Uburenganzira bwose burabitswe.\n\nAI yakozwe kugirango ifashe Abanyarwanda kwiga amategeko y'umuhanda.") demo.launch()
528bf4b
verified

VIATEUR-AI commited on

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()
5245a46
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- 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." ), # Ongera ibindi bibazo niba wifuza... } # ---------------- 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 # ---------------- 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 = [] 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) # --- 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)) 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 + [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 in zip(radio_widgets, instant_outputs): updates.append(gr.update(visible=False, value=None)) updates.append(gr.update(value="")) return 0, "0/20", *updates reset_button.click( fn=reset_quiz, inputs=[], outputs=[current_score, quiz_score] + radio_widgets + instant_outputs ) # --- Footer / Copyright --- gr.Markdown("© 2025 Viateur Irasubiza. Uburenganzira bwose burabitswe.\n\nAI yakozwe kugirango ifashe Abanyarwanda kwiga amategeko y'umuhanda.") demo.launch()
fe7bea4
verified

VIATEUR-AI commited on

import gradio as gr import random import time # ---------------- 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."), "Icyapa cya One Way gisobanura iki?": ("Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Kugendera mu cyerekezo kimwe birinda impanuka mu mihanda yicaye."), "Icyapa cya Yield gisobanura iki?": ("Utegereza izindi modoka mbere yo gukomeza.", "Yield ituma utuma abandi banyamaguru cyangwa imodoka banyura imbere yawe."), "Icyapa cya No Entry gisobanura iki?": ("Ntukinjire muri uwo muhanda.", "Ni ukubuza imodoka kwinjira ku muhanda utari wowe."), "Icyapa cya Roundabout gisobanura iki?": ("Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Roundabout igufasha guca mu muhanda utabangamiye abandi."), "Icyapa cya No Parking gisobanura iki?": ("Ntukabike imodoka muri icyo gice cy’umuhanda.", "Icyapa cyerekana aho utagomba guhagarika imodoka."), } # ---------------- Add more questions dynamically ---------------- for i in range(11, 201): question = f"Icyapa cyangwa amategeko y'umuhanda #{i}" answer = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." explanation = f"Impamvu y'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[question] = (answer, explanation) ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- 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(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, (ans, expl) 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 # ---------------- 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() 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, t in zip(instant_outputs, timer_boxes): updates.append(gr.update(visible=False, value="")) updates.append(gr.update(visible=True, value="⏱️ 20s left")) return questions, choices, *updates, 0, "0/20" quiz_button.click(fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + [val for pair in zip(radio_widgets, instant_outputs) for val in pair] + timer_boxes + [current_score, quiz_score]) # --- Check Answer with hint & explanation 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, r.label, current_score], outputs=[inst, current_score, quiz_score]) # --- Reset Quiz def reset_quiz(): updates = [] for r, inst, t in zip(radio_widgets, instant_outputs, timer_boxes): updates.append(gr.update(visible=False)) updates.append(gr.update(value="")) updates.append(gr.update(value="⏱️ 20s left")) return 0, "0/20", *updates reset_button.click(fn=reset_quiz, inputs=[], outputs=[current_score, quiz_score] + [val for pair in zip(radio_widgets, instant_outputs) for val in pair] + timer_boxes) # --- Footer / Copyright gr.Markdown("© 2025 Viateur Irasubiza. Uburenganzira bwose burabitswe.\n\nAI yakozwe kugirango ifashe Abanyarwanda kwiga amategeko y'umuhanda.") demo.launch()
e28804a
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- Dictionary y'ibibazo n'ibisubizo ---------------- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", } # Ongera ureme ibibazo byinshi for i in range(11, 201): ikibazo = f"Icyapa cyangwa amategeko y'umuhanda #{i}" igisubizo = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[ikibazo] = igisubizo ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gusubiza(ikibazo): return ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") def gutegura_quiz(batch_size=5): quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, ans in quiz: other_answers = list(set(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 # ---------------- Gradio Interface ---------------- with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo: # ---------------- Header ---------------- gr.Markdown("# 🚗 AI y’Amategeko y’Umuhanda 🇷🇼") gr.Markdown("### *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=4) 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() radio_widgets = [] instant_outputs = [] for i in range(5): r = gr.Radio(choices=[], label=f"Ikibazo {i+1}", visible=False) inst = gr.Markdown("", visible=False) radio_widgets.append(r) instant_outputs.append(inst) # Fungura cyangwa reset 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(visible=False, value="")) return questions, choices, *updates, 0, "0/20" quiz_button.click( fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets + [current_score, quiz_score] ) reset_button.click( fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets + [current_score, quiz_score] ) # ---------------- Instant Score Callback ---------------- def check_answer(answer, questions, index, score): if index is None or index >= len(questions): return "", score, f"{score}/20" question = questions[index] correct = ibisubizo_dict.get(question, "") if answer == correct: score += 4 status = "✅ Igisubizo cyawe ni cyo" else: status = f"❌ Igisubizo nyacyo: {correct}" return status, score, f"{score}/20" for i, (r, inst) in enumerate(zip(radio_widgets, instant_outputs)): r.change( fn=check_answer, inputs=[r, quiz_questions_state, gr.Number(value=i, visible=False), current_score], outputs=[inst, current_score, quiz_score] ) # ---------------- Footer (Copyright) ---------------- gr.Markdown("### © 2025 Viateur Irasubiza. Uburenganzira bwose burabitswe.") gr.Markdown("*AI yakozwe kugirango ifashe Abanyarwanda kwiga amategeko y'umuhanda.*") demo.launch()
3d5c37c
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- Dictionary y'ibibazo n'ibisubizo ---------------- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", } # Ongera ureme ibibazo byinshi for i in range(11, 201): ikibazo = f"Icyapa cyangwa amategeko y'umuhanda #{i}" igisubizo = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[ikibazo] = igisubizo ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gusubiza(ikibazo): return ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") def gutegura_quiz(batch_size=5): quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, ans in quiz: other_answers = list(set(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 # ---------------- 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=4) 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") 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() radio_widgets = [] instant_outputs = [] for i in range(5): r = gr.Radio(choices=[], label=f"Ikibazo {i+1}", visible=False) inst = gr.Markdown("", visible=False) radio_widgets.append(r) instant_outputs.append(inst) # Fungura 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(visible=False, value="")) return questions, choices, *updates, 0, "0/20" quiz_button.click( fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets + [current_score, quiz_score] ) # ---------------- Instant Score Callback ---------------- def check_answer(answer, questions, index, score): if index is None or index >= len(questions): return "", score, f"{score}/20" question = questions[index] correct = ibisubizo_dict.get(question, "") if answer == correct: score += 4 status = "✅ Igisubizo cyawe ni cyo" else: status = f"❌ Igisubizo nyacyo: {correct}" return status, score, f"{score}/20" for i, (r, inst) in enumerate(zip(radio_widgets, instant_outputs)): r.change( fn=check_answer, inputs=[r, quiz_questions_state, gr.Number(value=i, visible=False), current_score], outputs=[inst, current_score, quiz_score] ) demo.launch()
542b56f
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- Dictionary y'ibibazo n'ibisubizo 200 ---------------- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", } for i in range(11, 201): ikibazo = f"Icyapa cyangwa amategeko y'umuhanda #{i}" igisubizo = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[ikibazo] = igisubizo ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gusubiza(ikibazo): return ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") def gutegura_quiz(batch_size=5): quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, ans in quiz: other_answers = list(set(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 # ---------------- 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=4) 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") 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() radio_widgets = [] instant_outputs = [] 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) 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(visible=False, value="")) return questions, choices, *updates, 0, "0/20" quiz_button.click( fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets + [current_score, quiz_score] ) # ---------------- Instant Score Callback ---------------- def check_answer(answer, question, score): if not question: return "", score, f"{score}/20" correct = ibisubizo_dict.get(question, "") if answer == correct: score += 4 status = "✅ Igisubizo cyawe ni cyo" else: status = f"❌ Igisubizo nyacyo: {correct}" return status, score, f"{score}/20" for r, inst in zip(radio_widgets, instant_outputs): r.change(fn=check_answer, inputs=[r, r.label, current_score], outputs=[inst, current_score, quiz_score]) demo.launch()
6587c5c
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- Dictionary y'ibibazo n'ibisubizo 200 ---------------- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", } # Kongera kugeza 200 ibibazo for i in range(11, 201): ikibazo = f"Icyapa cyangwa amategeko y'umuhanda #{i}" igisubizo = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[ikibazo] = igisubizo ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gusubiza(ikibazo): return ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") def gutegura_quiz(batch_size=5): quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, ans in quiz: other_answers = list(set(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 # ---------------- Gradio Interface ---------------- with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo: gr.Markdown( """ # 🚗 AI y’Amategeko y’Umuhanda 🇷🇼 ### *Yakozwe na Viateur Irasubiza* --- Menya amategeko y’umuhanda mu buryo bworoshye, mu Kinyarwanda. """ ) # 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=4) kanda.click(fn=gusubiza, inputs=ikibazo, outputs=igisubizo) # ---------------- Quiz Section ---------------- gr.Markdown("## 📝 Quiz: Menya ibyo wize") quiz_button = gr.Button("Tangira Quiz") quiz_output = gr.Markdown(label="📝 Ibisubizo bya Quiz") quiz_score = gr.Textbox(label="🏆 Amanota yose", value="0/20", interactive=False) current_score = gr.State(0) # States quiz_questions_state = gr.State() quiz_choices_state = gr.State() # Radio widgets radio_widgets = [] for i in range(5): r = gr.Radio(choices=[], label=f"Ikibazo {i+1}", visible=False) radio_widgets.append(r) # 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)) return questions, choices, *updates, 0, "0/20" quiz_button.click( fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets + [current_score, quiz_score] ) # ---------------- Submit Quiz with Instant Score ---------------- submit_btn = gr.Button("💯 Subiza Quiz") def submit_quiz(*answers): questions = quiz_questions_state.value if not questions: return "❌ Ntacyo wasubije! Tangira Quiz mbere yo gusubiza.", 0, "0/20", *[gr.update(value=None) for _ in radio_widgets] score = 0 results = "### 📋 Ibisubizo bya Quiz\n\n" for i, (ans, r) in enumerate(zip(answers, radio_widgets)): if r.visible: correct = ibisubizo_dict[questions[i]] if ans == correct: status = "✅" question_score = 4 score += question_score else: status = "❌" question_score = 0 results += f"{status} **Ikibazo {i+1}:** {questions[i]} (Amanota: {question_score}/4)\n" results += f"- Igisubizo cyawe: {ans if ans else 'Ntasubizo watanze'}\n" results += f"- Igisubizo nyacyo: {correct}\n\n" total_score = len([r for r in radio_widgets if r.visible]) * 4 results += f"---\n🎯 **Amanota yawe ni: {score}/{total_score}**\n" return results, score, f"{score}/{total_score}", *[gr.update(value=None) for _ in radio_widgets] submit_btn.click( fn=submit_quiz, inputs=radio_widgets, outputs=[quiz_output, current_score, quiz_score] + radio_widgets ) gr.Markdown("**© 2025 Viateur Irasubiza** 🛣️ AI ifasha Abanyarwanda kwiga amategeko y’umuhanda mu buryo bworoshye n’igihe gito.") demo.launch()
c4f2069
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- Dictionary y'ibibazo n'ibisubizo ---------------- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", } # Kongera ibibazo kugeza kuri 200 for i in range(11, 201): ikibazo = f"Icyapa cyangwa amategeko y'umuhanda #{i}" igisubizo = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[ikibazo] = igisubizo # ---------------- Functions ---------------- def gusubiza(ikibazo, total_score): ans = ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") # Amanota y'ikibazo kimwe: 4 niba ari correct, 0 niba atariyo score = 4 if ans == ibisubizo_dict[ikibazo] else 0 total_score += score return ans, f"{score}/4", total_score # ---------------- Gradio Interface ---------------- with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo: gr.Markdown( """ # 🚗 AI y’Amategeko y’Umuhanda 🇷🇼 ### *Yakozwe na Viateur Irasubiza* --- Menya amategeko y’umuhanda mu buryo bworoshye, mu Kinyarwanda. """ ) with gr.Row(): with gr.Column(scale=1): dropdown_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=4) amanota = gr.Textbox(label="🏆 Amanota y'ikibazo", interactive=False) total_score_box = gr.Textbox(label="🎯 Amanota yose", value="0", interactive=False) total_score_state = gr.State(value=0) def on_dropdown_select(ikibazo, total_score): ans, score, new_total = gusubiza(ikibazo, total_score) return ans, score, new_total kanda.click( fn=on_dropdown_select, inputs=[dropdown_ikibazo, total_score_state], outputs=[igisubizo, amanota, total_score_state] ) gr.Markdown("**© 2025 Viateur Irasubiza** 🛣️ AI ifasha Abanyarwanda kwiga amategeko y’umuhanda mu buryo bworoshye n’igihe gito.") demo.launch()
e45a5ed
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- Dictionary y'ibibazo n'ibisubizo ---------------- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", } # Kongera ibibazo kugeza kuri 200 for i in range(11, 201): ikibazo = f"Icyapa cyangwa amategeko y'umuhanda #{i}" igisubizo = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[ikibazo] = igisubizo ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gusubiza(ikibazo): return ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") def gutegura_quiz(batch_size=5): quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, ans in quiz: other_answers = list(set(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 def gusuzuma_quiz(user_answers, quiz_questions): score = 0 results = "### 📋 Ibisubizo bya Quiz\n\n" for i, ans in enumerate(user_answers): correct = ibisubizo_dict[quiz_questions[i]] if ans == correct: status = "✅" question_score = 4 else: status = "❌" question_score = 0 score += question_score results += f"{status} **Ikibazo {i+1}:** {quiz_questions[i]} (Amanota: {question_score}/4)\n" results += f"- Igisubizo cyawe: {ans if ans else 'Ntasubizo watanze'}\n" results += f"- Igisubizo nyacyo: {correct}\n\n" total_score = len(user_answers) * 4 progress_percent = int((score / total_score) * 100) return results, progress_percent, f"{score}/{total_score}" # ---------------- Gradio Interface ---------------- with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo: gr.Markdown( """ # 🚗 AI y’Amategeko y’Umuhanda 🇷🇼 ### *Yakozwe na Viateur Irasubiza* --- Menya amategeko y’umuhanda mu buryo bworoshye, mu Kinyarwanda. """ ) # ---------------- Gusaba Igisubizo ---------------- with gr.Row(): with gr.Column(scale=1): dropdown_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=4) amanota = gr.Textbox(label="🏆 Amanota ako kanya", interactive=False, value="0/4") # Fungura ku button def on_dropdown_select(ikibazo): ans = gusubiza(ikibazo) score = "4/4" if ans == ibisubizo_dict[ikibazo] else "0/4" return ans, score kanda.click(fn=on_dropdown_select, inputs=dropdown_ikibazo, outputs=[igisubizo, amanota]) # ---------------- Quiz Section ---------------- gr.Markdown("## 📝 Quiz: Menya ibyo wize") quiz_button = gr.Button("Tangira Quiz") quiz_output = gr.Markdown(label="📝 Ibisubizo bya Quiz") progress_bar = gr.Progress(label="🎯 Amanota") quiz_score = gr.Textbox(label="🏆 Amanota yose", value="0/20", interactive=False) quiz_questions_state = gr.State() quiz_choices_state = gr.State() radio_widgets = [gr.Radio(choices=[], label=f"Ikibazo {i+1}", visible=False) for i in range(5)] # ---------------- 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)) return questions, choices, *updates, gr.update(value=0), "0/20" quiz_button.click( fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets + [progress_bar, quiz_score] ) # ---------------- Submit Quiz ---------------- submit_btn = gr.Button("💯 Subiza Quiz") def submit_quiz(*answers): questions = quiz_questions_state.value if not questions: return "❌ Ntacyo wasubije! Tangira Quiz mbere yo gusubiza.", gr.update(value=0), "0/20", *[gr.update(value=None) for _ in radio_widgets] user_answers = [ans if r.visible else "" for ans, r in zip(answers, radio_widgets)] results, progress_percent, score_text = gusuzuma_quiz(user_answers, questions) # Progress color color = "red" if progress_percent <= 40 else "yellow" if progress_percent <= 70 else "green" updates = [gr.update(value=None) for _ in radio_widgets] return results, gr.update(value=progress_percent, color=color), score_text, *updates submit_btn.click( fn=submit_quiz, inputs=radio_widgets, outputs=[quiz_output, progress_bar, quiz_score] + radio_widgets ) gr.Markdown("**© 2025 Viateur Irasubiza** 🛣️ AI ifasha Abanyarwanda kwiga amategeko y’umuhanda mu buryo bworoshye n’igihe gito.") demo.launch()
25e64a7
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- Dictionary y'ibibazo n'ibisubizo ---------------- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", } # Kongera kugeza 200 ibibazo for i in range(11, 201): ikibazo = f"Icyapa cyangwa amategeko y'umuhanda #{i}" igisubizo = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[ikibazo] = igisubizo ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gusubiza_instant(ikibazo): correct_answer = ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") amanota = 4 if correct_answer != "Nta bisubizo bihari kuri icyo kibazo." else 0 # Progress bar (percentage) progress_percent = int((amanota / 4) * 100) if progress_percent <= 40: color = "red" elif progress_percent <= 70: color = "yellow" else: color = "green" return f"**Igisubizo:** {correct_answer}\n**Amanota:** {amanota}/4", gr.update(value=progress_percent, color=color) def gutegura_quiz(batch_size=5): quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, ans in quiz: other_answers = list(set(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 def gusuzuma_quiz(*user_answers_and_questions): user_answers = user_answers_and_questions[:-1] quiz_questions = user_answers_and_questions[-1] score = 0 results = "### 📋 Ibisubizo bya Quiz\n\n" for i, ans in enumerate(user_answers): correct = ibisubizo_dict[quiz_questions[i]] if ans == correct: status = "✅" question_score = 4 else: status = "❌" question_score = 0 score += question_score results += f"{status} **Ikibazo {i+1}:** {quiz_questions[i]} (Amanota: {question_score}/4)\n" results += f"- Igisubizo cyawe: {ans if ans else 'Ntasubizo watanze'}\n" results += f"- Igisubizo nyacyo: {correct}\n\n" total_score = len(user_answers) * 4 results += f"---\n🎯 **Amanota yawe ni: {score}/{total_score}**\n" progress_percent = int((score / total_score) * 100) return results, progress_percent, f"{score}/{total_score}" # ---------------- Gradio Interface ---------------- with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo: gr.Markdown( """ # 🚗 AI y’Amategeko y’Umuhanda 🇷🇼 ### *Yakozwe na Viateur Irasubiza* --- Hitamo ikibazo maze ubone igisubizo n’amanota ako kanya hamwe na progress bar. """ ) # ---------------- Dropdown Instant ---------------- with gr.Row(): with gr.Column(scale=1): dropdown_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_amanota = gr.Markdown(label="🧠 Igisubizo n'Amanota") progress_bar = gr.Progress(value=0, interactive=False) kanda.click(fn=gusubiza_instant, inputs=dropdown_ikibazo, outputs=[igisubizo_amanota, progress_bar]) # ---------------- Quiz Section ---------------- gr.Markdown("## 📝 Quiz: Menya ibyo wize") quiz_button = gr.Button("Tangira Quiz") quiz_output = gr.Markdown(label="📝 Ibisubizo bya Quiz") quiz_progress = gr.Number(label="Progress (%)", value=0, interactive=False) quiz_score = gr.Textbox(label="🏆 Amanota yose", value="0/20", interactive=False) quiz_questions_state = gr.State() quiz_choices_state = gr.State() radio_widgets = [gr.Radio(choices=[], label=f"Ikibazo {i+1}", visible=False) for i in range(5)] # 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)) return questions, choices, *updates, 0, "0/20" quiz_button.click(fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets + [quiz_progress, quiz_score]) # Submit Quiz submit_btn = gr.Button("💯 Subiza Quiz") def submit_quiz(*answers): questions = quiz_questions_state.value if not questions: return "❌ Ntacyo wasubije! Tangira Quiz mbere yo gusubiza.", 0, "0/20", *[gr.update(value=None) for _ in radio_widgets] user_answers = [] for ans, r in zip(answers, radio_widgets): if r.visible: user_answers.append(ans if ans is not None else "") results, progress_percent, score_text = gusuzuma_quiz(*user_answers, questions) updates = [gr.update(value=None) for _ in radio_widgets] return results, progress_percent, score_text, *updates submit_btn.click(fn=submit_quiz, inputs=radio_widgets, outputs=[quiz_output, quiz_progress, quiz_score] + radio_widgets) gr.Markdown("**© 2025 Viateur Irasubiza** 🛣️ AI ifasha Abanyarwanda kwiga amategeko y’umuhanda mu buryo bworoshye n’igihe gito.") demo.launch()
40e78f2
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- Dictionary y'ibibazo n'ibisubizo ---------------- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", } # Kongera kugeza 200 ibibazo for i in range(11, 201): ikibazo = f"Icyapa cyangwa amategeko y'umuhanda #{i}" igisubizo = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[ikibazo] = igisubizo ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gusubiza_instant(ikibazo): correct_answer = ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") amanota = 4 if correct_answer != "Nta bisubizo bihari kuri icyo kibazo." else 0 return f"**Igisubizo:** {correct_answer}\n**Amanota:** {amanota}/4" def gutegura_quiz(batch_size=5): quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, ans in quiz: other_answers = list(set(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 def gusuzuma_quiz(*user_answers_and_questions): user_answers = user_answers_and_questions[:-1] quiz_questions = user_answers_and_questions[-1] score = 0 results = "### 📋 Ibisubizo bya Quiz\n\n" for i, ans in enumerate(user_answers): correct = ibisubizo_dict[quiz_questions[i]] if ans == correct: status = "✅" question_score = 4 else: status = "❌" question_score = 0 score += question_score results += f"{status} **Ikibazo {i+1}:** {quiz_questions[i]} (Amanota: {question_score}/4)\n" results += f"- Igisubizo cyawe: {ans if ans else 'Ntasubizo watanze'}\n" results += f"- Igisubizo nyacyo: {correct}\n\n" total_score = len(user_answers) * 4 results += f"---\n🎯 **Amanota yawe ni: {score}/{total_score}**\n" progress_percent = int((score / total_score) * 100) return results, progress_percent, f"{score}/{total_score}" # ---------------- Gradio Interface ---------------- with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo: gr.Markdown( """ # 🚗 AI y’Amategeko y’Umuhanda 🇷🇼 ### *Yakozwe na Viateur Irasubiza* --- Hitamo ikibazo maze ubone igisubizo n’amanota ako kanya. """ ) # ---------------- Dropdown Instant ---------------- with gr.Row(): with gr.Column(scale=1): dropdown_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_amanota = gr.Markdown(label="🧠 Igisubizo n'Amanota") kanda.click(fn=gusubiza_instant, inputs=dropdown_ikibazo, outputs=igisubizo_amanota) # ---------------- Quiz Section ---------------- gr.Markdown("## 📝 Quiz: Menya ibyo wize") quiz_button = gr.Button("Tangira Quiz") quiz_output = gr.Markdown(label="📝 Ibisubizo bya Quiz") quiz_progress = gr.Number(label="Progress (%)", value=0, interactive=False) quiz_score = gr.Textbox(label="🏆 Amanota yose", value="0/20", interactive=False) quiz_questions_state = gr.State() quiz_choices_state = gr.State() radio_widgets = [gr.Radio(choices=[], label=f"Ikibazo {i+1}", visible=False) for i in range(5)] # 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)) return questions, choices, *updates, 0, "0/20" quiz_button.click(fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets + [quiz_progress, quiz_score]) # Submit Quiz submit_btn = gr.Button("💯 Subiza Quiz") def submit_quiz(*answers): questions = quiz_questions_state.value if not questions: return "❌ Ntacyo wasubije! Tangira Quiz mbere yo gusubiza.", 0, "0/20", *[gr.update(value=None) for _ in radio_widgets] user_answers = [] for ans, r in zip(answers, radio_widgets): if r.visible: user_answers.append(ans if ans is not None else "") results, progress_percent, score_text = gusuzuma_quiz(*user_answers, questions) updates = [gr.update(value=None) for _ in radio_widgets] return results, progress_percent, score_text, *updates submit_btn.click(fn=submit_quiz, inputs=radio_widgets, outputs=[quiz_output, quiz_progress, quiz_score] + radio_widgets) gr.Markdown("**© 2025 Viateur Irasubiza** 🛣️ AI ifasha Abanyarwanda kwiga amategeko y’umuhanda mu buryo bworoshye n’igihe gito.") demo.launch()
3834f43
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- Dictionary y'ibibazo n'ibisubizo ---------------- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", } # Kongera ibibazo kugeza kuri 200 for i in range(11, 201): ikibazo = f"Icyapa cyangwa amategeko y'umuhanda #{i}" igisubizo = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[ikibazo] = igisubizo ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gusubiza(ikibazo): return ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") def gutegura_quiz(batch_size=5): quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, ans in quiz: other_answers = list(set(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 def gusuzuma_quiz(*user_answers_and_questions): user_answers = user_answers_and_questions[:-1] quiz_questions = user_answers_and_questions[-1] score = 0 results = "### 📋 Ibisubizo bya Quiz\n\n" for i, ans in enumerate(user_answers): correct = ibisubizo_dict[quiz_questions[i]] if ans == correct: status = "✅" question_score = 4 else: status = "❌" question_score = 0 score += question_score results += f"{status} **Ikibazo {i+1}:** {quiz_questions[i]} (Amanota: {question_score}/4)\n" results += f"- Igisubizo cyawe: {ans if ans else 'Ntasubizo watanze'}\n" results += f"- Igisubizo nyacyo: {correct}\n\n" total_score = len(user_answers) * 4 results += f"---\n🎯 **Amanota yawe ni: {score}/{total_score}**\n" progress_percent = int((score / total_score) * 100) return results, progress_percent, f"{score}/{total_score}" # ---------------- Gradio Interface ---------------- with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo: gr.Markdown( """ # 🚗 AI y’Amategeko y’Umuhanda 🇷🇼 ### *Yakozwe na Viateur Irasubiza* --- Menya amategeko y’umuhanda mu buryo bworoshye, mu Kinyarwanda. """ ) # ---------------- 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=4) kanda.click(fn=gusubiza, inputs=ikibazo, outputs=igisubizo) # ---------------- Quiz Section ---------------- gr.Markdown("## 📝 Quiz: Menya ibyo wize") quiz_button = gr.Button("Tangira Quiz") quiz_output = gr.Markdown(label="📝 Ibisubizo bya Quiz") quiz_score = gr.Textbox(label="🏆 Amanota yose", value="0/20", interactive=False) # States quiz_questions_state = gr.State() quiz_choices_state = gr.State() # Radio widgets radio_widgets = [] for i in range(5): r = gr.Radio(choices=[], label=f"Ikibazo {i+1}", visible=False) radio_widgets.append(r) # ---------------- 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)) return questions, choices, *updates, "0/20" quiz_button.click( fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets + [quiz_score] ) # ---------------- Submit Quiz ---------------- submit_btn = gr.Button("💯 Subiza Quiz") def submit_quiz(*answers): questions = quiz_questions_state.value if not questions: return "❌ Ntacyo wasubije! Tangira Quiz mbere yo gusubiza.", *[gr.update(value=None) for _ in radio_widgets], "0/20" user_answers = [] for ans, r in zip(answers, radio_widgets): if r.visible: user_answers.append(ans if ans is not None else "") results, progress_percent, score_text = gusuzuma_quiz(*user_answers, questions) updates = [gr.update(value=None) for _ in radio_widgets] # Progress bar muri Markdown progress_bar = f"Progress: {progress_percent}% " + "█" * (progress_percent // 10) return results + "\n\n" + progress_bar, *updates, score_text submit_btn.click( fn=submit_quiz, inputs=radio_widgets, outputs=[quiz_output] + radio_widgets + [quiz_score] ) gr.Markdown("**© 2025 Viateur Irasubiza** 🛣️ AI ifasha Abanyarwanda kwiga amategeko y’umuhanda mu buryo bworoshye n’igihe gito.") demo.launch()
6360f76
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- Dictionary y'ibibazo n'ibisubizo ---------------- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", } # Kongera ibibazo kugeza kuri 200 for i in range(11, 201): ikibazo = f"Icyapa cyangwa amategeko y'umuhanda #{i}" igisubizo = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[ikibazo] = igisubizo ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gusubiza(ikibazo): return ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") def gutegura_quiz(batch_size=5): quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, ans in quiz: other_answers = list(set(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 def gusuzuma_quiz(*user_answers_and_questions): user_answers = user_answers_and_questions[:-1] quiz_questions = user_answers_and_questions[-1] score = 0 results = "### 📋 Ibisubizo bya Quiz\n\n" for i, ans in enumerate(user_answers): correct = ibisubizo_dict[quiz_questions[i]] if ans == correct: status = "✅" question_score = 4 else: status = "❌" question_score = 0 score += question_score results += f"{status} **Ikibazo {i+1}:** {quiz_questions[i]} (Amanota: {question_score}/4)\n" results += f"- Igisubizo cyawe: {ans if ans else 'Ntasubizo watanze'}\n" results += f"- Igisubizo nyacyo: {correct}\n\n" total_score = len(user_answers) * 4 results += f"---\n🎯 **Amanota yawe ni: {score}/{total_score}**\n" progress_percent = int((score / total_score) * 100) return results, progress_percent, f"{score}/{total_score}" # ---------------- Gradio Interface ---------------- with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo: gr.Markdown( """ # 🚗 AI y’Amategeko y’Umuhanda 🇷🇼 ### *Yakozwe na Viateur Irasubiza* --- Menya amategeko y’umuhanda mu buryo bworoshye, mu Kinyarwanda. """ ) # ---------------- 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=4) kanda.click(fn=gusubiza, inputs=ikibazo, outputs=igisubizo) # ---------------- Quiz Section ---------------- gr.Markdown("## 📝 Quiz: Menya ibyo wize") quiz_button = gr.Button("Tangira Quiz") quiz_output = gr.Markdown(label="📝 Ibisubizo bya Quiz") quiz_progress = gr.Progress() quiz_score = gr.Textbox(label="🏆 Amanota yose", value="0/20", interactive=False) # States quiz_questions_state = gr.State() quiz_choices_state = gr.State() # Radio widgets radio_widgets = [] for i in range(5): r = gr.Radio(choices=[], label=f"Ikibazo {i+1}", visible=False) radio_widgets.append(r) # ---------------- 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)) return questions, choices, *updates, 0, "0/20" quiz_button.click( fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets + [quiz_progress, quiz_score] ) # ---------------- Submit Quiz ---------------- submit_btn = gr.Button("💯 Subiza Quiz") def submit_quiz(*answers): questions = quiz_questions_state.value if not questions: return "❌ Ntacyo wasubije! Tangira Quiz mbere yo gusubiza.", 0, "0/20", *[gr.update(value=None) for _ in radio_widgets] user_answers = [] for ans, r in zip(answers, radio_widgets): if r.visible: user_answers.append(ans if ans is not None else "") results, progress_percent, score_text = gusuzuma_quiz(*user_answers, questions) # Progress bar color if progress_percent <= 40: color = "red" elif progress_percent <= 70: color = "yellow" else: color = "green" updates = [gr.update(value=None) for _ in radio_widgets] return results, gr.update(value=progress_percent, interactive=False, color=color), score_text, *updates submit_btn.click( fn=submit_quiz, inputs=radio_widgets, outputs=[quiz_output, quiz_progress, quiz_score] + radio_widgets ) gr.Markdown("**© 2025 Viateur Irasubiza** 🛣️ AI ifasha Abanyarwanda kwiga amategeko y’umuhanda mu buryo bworoshye n’igihe gito.") demo.launch()
8ac6dbc
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- Dictionary y'ibibazo n'ibisubizo ---------------- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", } # Kongera kugeza 200 ibibazo for i in range(11, 201): ikibazo = f"Icyapa cyangwa amategeko y'umuhanda #{i}" igisubizo = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[ikibazo] = igisubizo ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gusubiza(ikibazo): return ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") def gutegura_quiz(batch_size=5): quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, ans in quiz: other_answers = list(set(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 def gusuzuma_quiz(*user_answers_and_questions): user_answers = user_answers_and_questions[:-1] quiz_questions = user_answers_and_questions[-1] score = 0 results = "### 📋 Ibisubizo bya Quiz\n\n" for i, ans in enumerate(user_answers): correct = ibisubizo_dict[quiz_questions[i]] if ans == correct: status = "✅" question_score = 4 else: status = "❌" question_score = 0 score += question_score results += f"{status} **Ikibazo {i+1}:** {quiz_questions[i]} (Amanota: {question_score}/4)\n" results += f"- Igisubizo cyawe: {ans if ans else 'Ntasubizo watanze'}\n" results += f"- Igisubizo nyacyo: {correct}\n\n" total_score = len(user_answers) * 4 results += f"---\n🎯 **Amanota yawe ni: {score}/{total_score}**\n" progress_percent = int((score / total_score) * 100) return results, progress_percent, f"{score}/{total_score}" # ---------------- Gradio Interface ---------------- with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo: gr.Markdown( """ # 🚗 AI y’Amategeko y’Umuhanda 🇷🇼 ### *Yakozwe na Viateur Irasubiza* --- Menya amategeko y’umuhanda mu buryo bworoshye, mu Kinyarwanda. """ ) # ---------------- 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=4) kanda.click(fn=gusubiza, inputs=ikibazo, outputs=igisubizo) # ---------------- Quiz Section ---------------- gr.Markdown("## 📝 Quiz: Menya ibyo wize") quiz_button = gr.Button("Tangira Quiz") quiz_output = gr.Markdown(label="📝 Ibisubizo bya Quiz") quiz_progress = gr.Number(label="📊 Progress (%)", value=0, interactive=False) quiz_score = gr.Textbox(label="🏆 Amanota yose", value="0/20", interactive=False) # States quiz_questions_state = gr.State() quiz_choices_state = gr.State() # Radio widgets radio_widgets = [] for i in range(5): r = gr.Radio(choices=[], label=f"Ikibazo {i+1}", visible=False) radio_widgets.append(r) # ---------------- 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)) return questions, choices, *updates, 0, "0/20" # Progress na score quiz_button.click( fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets + [quiz_progress, quiz_score] ) # ---------------- Submit Quiz ---------------- submit_btn = gr.Button("💯 Subiza Quiz") def submit_quiz(*answers): questions = quiz_questions_state.value if not questions: return "❌ Ntacyo wasubije! Tangira Quiz mbere yo gusubiza.", 0, "0/20", *[gr.update(value=None) for _ in radio_widgets] user_answers = [] for ans, r in zip(answers, radio_widgets): if r.visible: user_answers.append(ans if ans is not None else "") results, progress_percent, score_text = gusuzuma_quiz(*user_answers, questions) # Color coding ku progress if progress_percent <= 40: color = "red" elif progress_percent <= 70: color = "yellow" else: color = "green" updates = [gr.update(value=None) for _ in radio_widgets] return results, gr.update(value=progress_percent), score_text, *updates submit_btn.click( fn=submit_quiz, inputs=radio_widgets, outputs=[quiz_output, quiz_progress, quiz_score] + radio_widgets ) gr.Markdown("**© 2025 Viateur Irasubiza** 🛣️ AI ifasha Abanyarwanda kwiga amategeko y’umuhanda mu buryo bworoshye n’igihe gito.") demo.launch()
95acdc0
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- Dictionary y'ibibazo n'ibisubizo ---------------- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", } # Kongera kugeza 200 ibibazo for i in range(11, 201): ikibazo = f"Icyapa cyangwa amategeko y'umuhanda #{i}" igisubizo = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[ikibazo] = igisubizo ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gusubiza(ikibazo): return ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") def gutegura_quiz(batch_size=5): quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, ans in quiz: other_answers = list(set(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 def gusuzuma_quiz(*user_answers_and_questions): user_answers = user_answers_and_questions[:-1] quiz_questions = user_answers_and_questions[-1] score = 0 results = "### 📋 Ibisubizo bya Quiz\n\n" for i, ans in enumerate(user_answers): correct = ibisubizo_dict[quiz_questions[i]] if ans == correct: status = "✅" question_score = 4 else: status = "❌" question_score = 0 score += question_score results += f"{status} **Ikibazo {i+1}:** {quiz_questions[i]} (Amanota: {question_score}/4)\n" results += f"- Igisubizo cyawe: {ans if ans else 'Ntasubizo watanze'}\n" results += f"- Igisubizo nyacyo: {correct}\n\n" total_score = len(user_answers) * 4 results += f"---\n🎯 **Amanota yawe ni: {score}/{total_score}**\n" progress_percent = int((score / total_score) * 100) return results, progress_percent, f"{score}/{total_score}" # ---------------- Gradio Interface ---------------- with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo: gr.Markdown( """ # 🚗 AI y’Amategeko y’Umuhanda 🇷🇼 ### *Yakozwe na Viateur Irasubiza* --- Menya amategeko y’umuhanda mu buryo bworoshye, mu Kinyarwanda. """ ) # ---------------- 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=4) kanda.click(fn=gusubiza, inputs=ikibazo, outputs=igisubizo) # ---------------- Quiz Section ---------------- gr.Markdown("## 📝 Quiz: Menya ibyo wize") quiz_button = gr.Button("Tangira Quiz") quiz_output = gr.Markdown(label="📝 Ibisubizo bya Quiz") quiz_progress = gr.Progress() quiz_score = gr.Textbox(label="🏆 Amanota yose", value="0/20", interactive=False) # States quiz_questions_state = gr.State() quiz_choices_state = gr.State() # Radio widgets radio_widgets = [] for i in range(5): r = gr.Radio(choices=[], label=f"Ikibazo {i+1}", visible=False) radio_widgets.append(r) # ---------------- 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)) return questions, choices, *updates, gr.update(value=0), "0/20" quiz_button.click( fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets + [quiz_progress, quiz_score] ) # ---------------- Submit Quiz ---------------- submit_btn = gr.Button("💯 Subiza Quiz") def submit_quiz(*answers): questions = quiz_questions_state.value if not questions: return "❌ Ntacyo wasubije! Tangira Quiz mbere yo gusubiza.", 0, "0/20", *[gr.update(value=None) for _ in radio_widgets] user_answers = [] for ans, r in zip(answers, radio_widgets): if r.visible: user_answers.append(ans if ans is not None else "") results, progress_percent, score_text = gusuzuma_quiz(*user_answers, questions) # Color coding ku progress bar if progress_percent <= 40: color = "red" elif progress_percent <= 70: color = "yellow" else: color = "green" updates = [gr.update(value=None) for _ in radio_widgets] return results, gr.update(value=progress_percent, interactive=False, color=color), score_text, *updates submit_btn.click( fn=submit_quiz, inputs=radio_widgets, outputs=[quiz_output, quiz_progress, quiz_score] + radio_widgets ) gr.Markdown("**© 2025 Viateur Irasubiza** 🛣️ AI ifasha Abanyarwanda kwiga amategeko y’umuhanda mu buryo bworoshye n’igihe gito.") demo.launch()
790d328
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- Dictionary y'ibibazo n'ibisubizo ---------------- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", } # Kongera kugeza 200 ibibazo for i in range(11, 201): ikibazo = f"Icyapa cyangwa amategeko y'umuhanda #{i}" igisubizo = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[ikibazo] = igisubizo ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gusubiza(ikibazo): return ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") def gutegura_quiz(batch_size=5): quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, ans in quiz: other_answers = list(set(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 def gusuzuma_quiz(*user_answers_and_questions): user_answers = user_answers_and_questions[:-1] quiz_questions = user_answers_and_questions[-1] score = 0 results = "### 📋 Ibisubizo bya Quiz\n\n" for i, ans in enumerate(user_answers): correct = ibisubizo_dict[quiz_questions[i]] if ans == correct: status = "✅" question_score = 4 else: status = "❌" question_score = 0 score += question_score results += f"{status} **Ikibazo {i+1}:** {quiz_questions[i]} (Amanota: {question_score}/4)\n" results += f"- Igisubizo cyawe: {ans if ans else 'Ntasubizo watanze'}\n" results += f"- Igisubizo nyacyo: {correct}\n\n" total_score = len(user_answers) * 4 results += f"---\n🎯 **Amanota yawe ni: {score}/{total_score}**\n" progress_percent = int((score / total_score) * 100) # Ibara rya progress if progress_percent <= 40: color = "red" elif progress_percent <= 70: color = "yellow" else: color = "green" progress_html = f""" <div style="border: 1px solid #ccc; width: 100%; height: 25px; border-radius: 5px;"> <div style="width: {progress_percent}%; background-color: {color}; height: 100%; border-radius: 5px; text-align:center; color:black;"> {progress_percent}% </div> </div> """ return results, progress_html, f"{score}/{total_score}" # ---------------- Gradio Interface ---------------- with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo: gr.Markdown( """ # 🚗 AI y’Amategeko y’Umuhanda 🇷🇼 ### *Yakozwe na Viateur Irasubiza* --- Menya amategeko y’umuhanda mu buryo bworoshye, mu Kinyarwanda. """ ) # ---------------- 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=4) kanda.click(fn=gusubiza, inputs=ikibazo, outputs=igisubizo) # ---------------- Quiz Section ---------------- gr.Markdown("## 📝 Quiz: Menya ibyo wize") quiz_button = gr.Button("Tangira Quiz") quiz_output = gr.Markdown(label="📝 Ibisubizo bya Quiz") quiz_progress = gr.HTML() quiz_score = gr.Textbox(label="🏆 Amanota yose", value="0/20", interactive=False) # States quiz_questions_state = gr.State() quiz_choices_state = gr.State() # Radio widgets radio_widgets = [] for i in range(5): r = gr.Radio(choices=[], label=f"Ikibazo {i+1}", visible=False) radio_widgets.append(r) # ---------------- 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)) return questions, choices, *updates, "<div></div>", "0/20" quiz_button.click( fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets + [quiz_progress, quiz_score] ) # ---------------- Submit Quiz ---------------- submit_btn = gr.Button("💯 Subiza Quiz") def submit_quiz(*answers): questions = quiz_questions_state.value if not questions or len(questions) == 0: return "❌ Ntacyo wasubije! Tangira Quiz mbere yo gusubiza.", "<div></div>", "0/20", *[gr.update(value=None) for _ in radio_widgets] user_answers = [] for ans, r in zip(answers, radio_widgets): if r.visible: user_answers.append(ans if ans is not None else "") results, progress_html, score_text = gusuzuma_quiz(*user_answers, questions) updates = [gr.update(value=None) for _ in radio_widgets] return results, progress_html, score_text, *updates submit_btn.click( fn=submit_quiz, inputs=radio_widgets, outputs=[quiz_output, quiz_progress, quiz_score] + radio_widgets ) gr.Markdown("**© 2025 Viateur Irasubiza** 🛣️ AI ifasha Abanyarwanda kwiga amategeko y’umuhanda mu buryo bworoshye n’igihe gito.") demo.launch()
a97fda8
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- Dictionary y'ibibazo n'ibisubizo ---------------- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", } # Kongera kugeza 200 ibibazo for i in range(11, 201): ikibazo = f"Icyapa cyangwa amategeko y'umuhanda #{i}" igisubizo = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[ikibazo] = igisubizo ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gusubiza(ikibazo): return ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") def gutegura_quiz(batch_size=5): quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, ans in quiz: other_answers = list(set(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 def gusuzuma_quiz(*user_answers_and_questions): user_answers = user_answers_and_questions[:-1] quiz_questions = user_answers_and_questions[-1] score = 0 results = "### 📋 Ibisubizo bya Quiz\n\n" for i, ans in enumerate(user_answers): correct = ibisubizo_dict[quiz_questions[i]] if ans == correct: status = "✅" question_score = 4 else: status = "❌" question_score = 0 score += question_score results += f"{status} **Ikibazo {i+1}:** {quiz_questions[i]} (Amanota: {question_score}/4)\n" results += f"- Igisubizo cyawe: {ans if ans else 'Ntasubizo watanze'}\n" results += f"- Igisubizo nyacyo: {correct}\n\n" total_score = len(user_answers) * 4 results += f"---\n🎯 **Amanota yawe ni: {score}/{total_score}**\n" progress_percent = int((score / total_score) * 100) return results, progress_percent, f"{score}/{total_score}" # ---------------- Gradio Interface ---------------- with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo: gr.Markdown( """ # 🚗 AI y’Amategeko y’Umuhanda 🇷🇼 ### *Yakozwe na Viateur Irasubiza* --- Menya amategeko y’umuhanda mu buryo bworoshye, mu Kinyarwanda. """ ) # ---------------- 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=4) kanda.click(fn=gusubiza, inputs=ikibazo, outputs=igisubizo) # ---------------- Quiz Section ---------------- gr.Markdown("## 📝 Quiz: Menya ibyo wize") quiz_button = gr.Button("Tangira Quiz") quiz_output = gr.Markdown(label="📝 Ibisubizo bya Quiz") quiz_progress = gr.Number(label="Progress (%)", value=0, interactive=False) quiz_score = gr.Textbox(label="🏆 Amanota yose", value="0/20", interactive=False) # States quiz_questions_state = gr.State() quiz_choices_state = gr.State() # Radio widgets radio_widgets = [] for i in range(5): r = gr.Radio(choices=[], label=f"Ikibazo {i+1}", visible=False) radio_widgets.append(r) # ---------------- 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)) return questions, choices, *updates, 0, "0/20" quiz_button.click( fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets + [quiz_progress, quiz_score] ) # ---------------- Submit Quiz ---------------- submit_btn = gr.Button("💯 Subiza Quiz") def submit_quiz(*answers): questions = quiz_questions_state.value if not questions: return "❌ Ntacyo wasubije! Tangira Quiz mbere yo gusubiza.", 0, "0/20", *[gr.update(value=None) for _ in radio_widgets] user_answers = [] for ans, r in zip(answers, radio_widgets): if r.visible: user_answers.append(ans if ans is not None else "") results, progress_percent, score_text = gusuzuma_quiz(*user_answers, questions) updates = [gr.update(value=None) for _ in radio_widgets] return results, progress_percent, score_text, *updates submit_btn.click( fn=submit_quiz, inputs=radio_widgets, outputs=[quiz_output, quiz_progress, quiz_score] + radio_widgets ) gr.Markdown("**© 2025 Viateur Irasubiza** 🛣️ AI ifasha Abanyarwanda kwiga amategeko y’umuhanda mu buryo bworoshye n’igihe gito.") demo.launch()
54f0c01
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- Dictionary y'ibibazo n'ibisubizo 200 ---------------- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", } # Kongera kugeza 200 ibibazo for i in range(11, 201): ikibazo = f"Icyapa cyangwa amategeko y'umuhanda #{i}" igisubizo = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[ikibazo] = igisubizo ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gusubiza(ikibazo): return ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") def gutegura_quiz(batch_size=5): quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, ans in quiz: other_answers = list(set(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 def gusuzuma_quiz(*user_answers_and_questions): user_answers = user_answers_and_questions[:-1] quiz_questions = user_answers_and_questions[-1] score = 0 results = "### 📋 Ibisubizo bya Quiz\n\n" for i, ans in enumerate(user_answers): correct = ibisubizo_dict[quiz_questions[i]] if ans == correct: status = "✅" question_score = 4 else: status = "❌" question_score = 0 score += question_score results += f"{status} **Ikibazo {i+1}:** {quiz_questions[i]} (Amanota: {question_score}/4)\n" results += f"- Igisubizo cyawe: {ans if ans else 'Ntasubizo watanze'}\n" results += f"- Igisubizo nyacyo: {correct}\n\n" total_score = len(user_answers) * 4 results += f"---\n🎯 **Amanota yawe ni: {score}/{total_score}**\n" progress_percent = int((score / total_score) * 100) return results, progress_percent, f"{score}/{total_score}" # ---------------- Gradio Interface ---------------- with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo: gr.Markdown( """ # 🚗 AI y’Amategeko y’Umuhanda 🇷🇼 ### *Yakozwe na Viateur Irasubiza* --- Menya amategeko y’umuhanda mu buryo bworoshye, mu Kinyarwanda. """ ) # ---------------- 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=4) kanda.click(fn=gusubiza, inputs=ikibazo, outputs=igisubizo) # ---------------- Quiz Section ---------------- gr.Markdown("## 📝 Quiz: Menya ibyo wize") quiz_button = gr.Button("Tangira Quiz") quiz_output = gr.Markdown(label="📝 Ibisubizo bya Quiz") quiz_progress = gr.Progress() # ✅ Ntukongeremo label quiz_score = gr.Textbox(label="🏆 Amanota yose", value="0/20", interactive=False) # States quiz_questions_state = gr.State() quiz_choices_state = gr.State() # Radio widgets radio_widgets = [] for i in range(5): r = gr.Radio(choices=[], label=f"Ikibazo {i+1}", visible=False) radio_widgets.append(r) # ---------------- 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)) return questions, choices, *updates, gr.update(value=0), "0/20" quiz_button.click( fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets + [quiz_progress, quiz_score] ) # ---------------- Submit Quiz ---------------- submit_btn = gr.Button("💯 Subiza Quiz") def submit_quiz(*answers): questions = quiz_questions_state.value if not questions: return "❌ Ntacyo wasubije! Tangira Quiz mbere yo gusubiza.", 0, "0/20" user_answers = [] for ans, r in zip(answers, radio_widgets): if r.visible: user_answers.append(ans if ans is not None else "") results, progress_percent, score_text = gusuzuma_quiz(*user_answers, questions) # Color coding ku progress bar if progress_percent <= 40: color = "red" elif progress_percent <= 70: color = "yellow" else: color = "green" updates = [gr.update(value=None) for _ in radio_widgets] return results, gr.update(value=progress_percent, interactive=False, color=color), score_text, *updates submit_btn.click( fn=submit_quiz, inputs=radio_widgets, outputs=[quiz_output, quiz_progress, quiz_score] + radio_widgets ) gr.Markdown("**© 2025 Viateur Irasubiza** 🛣️ AI ifasha Abanyarwanda kwiga amategeko y’umuhanda mu buryo bworoshye n’igihe gito.") demo.launch()
8f3491c
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- Dictionary y'ibibazo n'ibisubizo 200 ---------------- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", } # Kongera kugeza 200 ibibazo for i in range(11, 201): ikibazo = f"Icyapa cyangwa amategeko y'umuhanda #{i}" igisubizo = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[ikibazo] = igisubizo ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gusubiza(ikibazo): return ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") def gutegura_quiz(batch_size=5): quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, ans in quiz: other_answers = list(set(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 def gusuzuma_quiz(*user_answers_and_questions): user_answers = user_answers_and_questions[:-1] quiz_questions = user_answers_and_questions[-1] score = 0 results = "### 📋 Ibisubizo bya Quiz\n\n" for i, ans in enumerate(user_answers): correct = ibisubizo_dict[quiz_questions[i]] if ans == correct: status = "✅" question_score = 4 else: status = "❌" question_score = 0 score += question_score results += f"{status} **Ikibazo {i+1}:** {quiz_questions[i]} (Amanota: {question_score}/4)\n" results += f"- Igisubizo cyawe: {ans if ans else 'Ntasubizo watanze'}\n" results += f"- Igisubizo nyacyo: {correct}\n\n" total_score = len(user_answers) * 4 results += f"---\n🎯 **Amanota yawe ni: {score}/{total_score}**\n" progress_percent = int((score / total_score) * 100) return results, progress_percent, f"{score}/{total_score}" # ---------------- Gradio Interface ---------------- with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo: gr.Markdown( """ # 🚗 AI y’Amategeko y’Umuhanda 🇷🇼 ### *Yakozwe na Viateur Irasubiza* --- Menya amategeko y’umuhanda mu buryo bworoshye, mu Kinyarwanda. """ ) # ---------------- 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=4) kanda.click(fn=gusubiza, inputs=ikibazo, outputs=igisubizo) # ---------------- Quiz Section ---------------- gr.Markdown("## 📝 Quiz: Menya ibyo wize") quiz_button = gr.Button("Tangira Quiz") quiz_output = gr.Markdown(label="📝 Ibisubizo bya Quiz") quiz_progress = gr.Progress(label="🎯 Amanota ya Quiz", value=0) quiz_score = gr.Textbox(label="🏆 Amanota yose", value="0/20", interactive=False) # States quiz_questions_state = gr.State() quiz_choices_state = gr.State() # Radio widgets radio_widgets = [] for i in range(5): r = gr.Radio(choices=[], label=f"Ikibazo {i+1}", visible=False) radio_widgets.append(r) # ---------------- 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)) return questions, choices, *updates, gr.update(value=0), "0/20" quiz_button.click( fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets + [quiz_progress, quiz_score] ) # ---------------- Submit Quiz ---------------- submit_btn = gr.Button("💯 Subiza Quiz") def submit_quiz(*answers): questions = quiz_questions_state.value if not questions: return "❌ Ntacyo wasubije! Tangira Quiz mbere yo gusubiza.", 0, "0/20" user_answers = [] for ans, r in zip(answers, radio_widgets): if r.visible: user_answers.append(ans if ans is not None else "") results, progress_percent, score_text = gusuzuma_quiz(*user_answers, questions) # Reset radio widgets for next quiz updates = [gr.update(value=None) for _ in radio_widgets] return results, gr.update(value=progress_percent), score_text, *updates submit_btn.click( fn=submit_quiz, inputs=radio_widgets, outputs=[quiz_output, quiz_progress, quiz_score] + radio_widgets ) gr.Markdown("**© 2025 Viateur Irasubiza** 🛣️ AI ifasha Abanyarwanda kwiga amategeko y’umuhanda mu buryo bworoshye n’igihe gito.") demo.launch()
3f51ffe
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- Dictionary y'ibibazo n'ibisubizo 200 ---------------- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", } # Kongera kugeza 200 ibibazo for i in range(11, 201): ikibazo = f"Icyapa cyangwa amategeko y'umuhanda #{i}" igisubizo = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[ikibazo] = igisubizo ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gusubiza(ikibazo): return ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") def gutegura_quiz(batch_size=5): # Randomly pick questions hatari repeats quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, ans in quiz: other_answers = list(set(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 def gusuzuma_quiz(*user_answers_and_questions): user_answers = user_answers_and_questions[:-1] quiz_questions = user_answers_and_questions[-1] score = 0 results = "### 📋 Ibisubizo bya Quiz\n\n" for i, ans in enumerate(user_answers): correct = ibisubizo_dict[quiz_questions[i]] if ans == correct: score += 4 # buri kibazo gihwanye na 4 marks status = "✅" else: status = "❌" results += f"{status} **Ikibazo {i+1}:** {quiz_questions[i]}\n" results += f"- Igisubizo cyawe: {ans if ans else 'Ntasubizo watanze'}\n" results += f"- Igisubizo nyacyo: {correct}\n\n" total_score = len(user_answers) * 4 results += f"---\n🎯 **Amanota yawe ni: {score}/{total_score}**\n" if score == total_score: results += "👏🏽 Wahize neza cyane! Urabizi bihagije ku mategeko y’umuhanda. 🚗💨" elif score >= total_score * 0.6: results += "👍🏽 Wakoze neza! Komeza usubiremo gato kugira ngo urusheho kumenya amategeko." else: results += "📚 Ongera wige amategeko y’umuhanda, uzabikora neza ubutaha." return results # ---------------- Gradio Interface ---------------- with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo: gr.Markdown( """ # 🚗 AI y’Amategeko y’Umuhanda 🇷🇼 ### *Yakozwe na Viateur Irasubiza* --- Menya amategeko y’umuhanda mu buryo bworoshye, mu Kinyarwanda. """ ) # 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=4) kanda.click(fn=gusubiza, inputs=ikibazo, outputs=igisubizo) # ---------------- Quiz Section ---------------- gr.Markdown("## 📝 Quiz: Menya ibyo wize") quiz_button = gr.Button("Tangira Quiz") quiz_output = gr.Textbox(label="📝 Ibisubizo bya Quiz") # States quiz_questions_state = gr.State() quiz_choices_state = gr.State() # Radio widgets radio_widgets = [] for i in range(5): r = gr.Radio(choices=[], label=f"Ikibazo {i+1}", visible=False) radio_widgets.append(r) # 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)) else: updates.append(gr.update(visible=False)) return questions, choices, *updates quiz_button.click(fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets) # Submit quiz submit_btn = gr.Button("💯 Subiza Quiz") def submit_quiz(*answers): questions = quiz_questions_state.value if not questions: return "Ntacyo wasubije! Tangira Quiz mbere yo gusubiza." user_answers = [] for ans, r in zip(answers, radio_widgets): if r.visible: user_answers.append(ans if ans is not None else "") return gusuzuma_quiz(*user_answers, questions) submit_btn.click(fn=submit_quiz, inputs=radio_widgets, outputs=quiz_output) gr.Markdown("**© 2025 Viateur Irasubiza** 🛣️ AI ifasha Abanyarwanda kwiga amategeko y’umuhanda mu buryo bworoshye n’igihe gito.") demo.launch()
2e3a182
verified

VIATEUR-AI commited on

import gradio as gr import random # ---------------- Dictionary y'ibibazo n'ibisubizo 200 ---------------- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", # --- sample ibibazo 11-200 autogenerated --- } # Kongera kugeza 200 ibibazo for i in range(11, 201): ikibazo = f"Icyapa cyangwa amategeko y'umuhanda #{i}" igisubizo = f"Igisubizo cy'ikibazo #{i} ku mategeko y'umuhanda." ibisubizo_dict[ikibazo] = igisubizo ibibazo_bya_quiz = list(ibisubizo_dict.items()) # ---------------- Functions ---------------- def gusubiza(ikibazo): return ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") def gutegura_quiz(batch_size=5): # Randomly pick questions hatari repeats quiz = random.sample(ibibazo_bya_quiz, min(batch_size, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, ans in quiz: other_answers = list(set(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 def gusuzuma_quiz(*user_answers_and_questions): user_answers = user_answers_and_questions[:-1] quiz_questions = user_answers_and_questions[-1] score = 0 for i, ans in enumerate(user_answers): correct = ibisubizo_dict[quiz_questions[i]] if ans == correct: score += 1 return f"Watoye neza {score}/{len(user_answers)}" # ---------------- Gradio Interface ---------------- with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo: gr.Markdown( """ # 🚗 AI y’Amategeko y’Umuhanda 🇷🇼 ### *Yakozwe na Viateur Irasubiza* --- Menya amategeko y’umuhanda mu buryo bworoshye, mu Kinyarwanda. """ ) # 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=4) kanda.click(fn=gusubiza, inputs=ikibazo, outputs=igisubizo) # ---------------- Quiz Section ---------------- gr.Markdown("## 📝 Quiz: Menya ibyo wize") quiz_button = gr.Button("Tangira Quiz") quiz_output = gr.Textbox(label="📝 Ibisubizo bya Quiz") # States quiz_questions_state = gr.State() quiz_choices_state = gr.State() # Radio widgets radio_widgets = [] for i in range(5): r = gr.Radio(choices=[], label=f"Ikibazo {i+1}", visible=False) radio_widgets.append(r) # 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)) else: updates.append(gr.update(visible=False)) return questions, choices, *updates quiz_button.click(fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets) # Submit quiz submit_btn = gr.Button("💯 Subiza Quiz") def submit_quiz(*answers): questions = quiz_questions_state.value if not questions: return "Ntacyo wasubije! Tangira Quiz mbere yo gusubiza." user_answers = [] for ans, r in zip(answers, radio_widgets): if r.visible: user_answers.append(ans if ans is not None else "") return gusuzuma_quiz(*user_answers, questions) submit_btn.click(fn=submit_quiz, inputs=radio_widgets, outputs=quiz_output) gr.Markdown("**© 2025 Viateur Irasubiza** 🛣️ AI ifasha Abanyarwanda kwiga amategeko y’umuhanda mu buryo bworoshye n’igihe gito.") demo.launch()
3b61042
verified

VIATEUR-AI commited on

import gradio as gr import random # --- Dictionary y'ibibazo n'ibisubizo (sample 20 hano, ushobora kongera kugeza 200) --- ibisubizo_dict = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Icyapa cya One Way gisobanura iki?": "Umuhanda uriho imodoka zinyura mu cyerekezo kimwe gusa.", "Icyapa cya Yield gisobanura iki?": "Utegereza izindi modoka mbere yo gukomeza.", "Icyapa cya No Entry gisobanura iki?": "Ntukinjire muri uwo muhanda.", "Icyapa cya Roundabout gisobanura iki?": "Urazenguruka ku mizunguruko ugaha umuhanda abari imbere.", "Icyapa cya No Parking gisobanura iki?": "Ntukabike imodoka muri icyo gice cy’umuhanda.", "Ugomba kwambara seatbelt igihe utwaye imodoka?": "Yego, buri gihe ugomba kwambara seatbelt.", "Amatara y’umuhanda atukura asobanura iki?": "Uhagarare.", "Amatara y’umuhanda y’icyatsi asobanura iki?": "Komeza wimuke.", "Amatara y’umuhanda y’umuhondo asobanura iki?": "Gabanya umuvuduko kandi wite ku bakurikiye.", "Iyo ugiye guhagarika imodoka, ukora iki?": "Uraruhuka imbere y’ahantu hateganyijwe cyangwa ku ruhande rw’umuhanda.", "Umuhanda uri mu cyerekezo kimwe gusa, ukora iki?": "Ugomba gukurikiza icyerekezo kimwe gusa.", "Umwana uri ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo uhura n’umuderevu uri mu nzira y’abanyamaguru, ukora iki?": "Ureka umuderevu anyure neza.", "Ni ryari ugomba kugabanya umuvuduko?": "Mu mijyi, hafi y’ishuri, cyangwa igihe hari impanuka.", "Ni ryari ugomba guhagarara burundu?": "Ku cyapa cya STOP cyangwa igihe umuhanda utandukanye n’uwo urimo." } ibibazo_bya_quiz = list(ibisubizo_dict.items()) # --- Functions --- def gusubiza(ikibazo): return ibisubizo_dict.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") def gutegura_quiz(): quiz = random.sample(ibibazo_bya_quiz, min(5, len(ibibazo_bya_quiz))) quiz_questions = [] quiz_choices = [] for q, ans in quiz: other_answers = list(set(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 def gusuzuma_quiz(*user_answers_and_questions): user_answers = user_answers_and_questions[:-1] quiz_questions = user_answers_and_questions[-1] score = 0 for i, ans in enumerate(user_answers): correct = ibisubizo_dict[quiz_questions[i]] if ans == correct: score += 1 return f"Watoye neza {score}/{len(user_answers)}" # --- Gradio Interface --- with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo: gr.Markdown( """ # 🚗 AI y’Amategeko y’Umuhanda 🇷🇼 ### *Yakozwe na Viateur Irasubiza* --- Menya amategeko y’umuhanda mu buryo bworoshye, mu Kinyarwanda. """ ) # 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=4) kanda.click(fn=gusubiza, inputs=ikibazo, outputs=igisubizo) gr.Markdown("## 📝 Quiz: Menya ibyo wize") quiz_button = gr.Button("Tangira Quiz") quiz_output = gr.Textbox(label="📝 Ibisubizo bya Quiz") quiz_questions_state = gr.State() quiz_choices_state = gr.State() radio_widgets = [] for i in range(5): r = gr.Radio(choices=[], label=f"Ikibazo {i+1}", visible=False) radio_widgets.append(r) 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)) else: updates.append(gr.update(visible=False)) return questions, choices, *updates quiz_button.click(fn=start_quiz, inputs=[], outputs=[quiz_questions_state, quiz_choices_state] + radio_widgets) submit_btn = gr.Button("💯 Subiza Quiz") def submit_quiz(*answers): questions = quiz_questions_state.value return gusuzuma_quiz(*answers, questions) submit_btn.click(fn=submit_quiz, inputs=radio_widgets, outputs=quiz_output) gr.Markdown("**© 2025 Viateur Irasubiza** 🛣️ AI ifasha Abanyarwanda kwiga amategeko y’umuhanda mu buryo bworoshye n’igihe gito.") demo.launch()
5f5fe6e
verified

VIATEUR-AI commited on

Update app.py
8cf882d
verified

VIATEUR-AI commited on

Update app.py
3754ff0
verified

VIATEUR-AI commited on

Update app.py
25546af
verified

VIATEUR-AI commited on

Update app.py
a8c6f68
verified

VIATEUR-AI commited on

Update app.py
adce40c
verified

VIATEUR-AI commited on

Update README.md
3d41629
verified

VIATEUR-AI commited on

ibisubizo = { "Icyapa cya STOP gisobanura iki?": "Ugomba guhagarara neza mbere yo gukomeza, urebe ko umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mijyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi yaho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba neza niba umuhanda ubibemerera kandi nta modoka iza imbere.", "Uburyo bwo gutwara igare ku muhanda ni ubuhe?": "Gukoresha umubyimba w’imbere y’umuhanda no kwambara ingofero y’umutekano.", "Icyapa cya One Way gisobanura iki?": "Umuhanda ushobora gukoreshwa mu buryo bumwe gusa.", "Icyapa cya No Parking gisobanura iki?": "Ntushobora guhagarara cyangwa guhagarika imodoka aho hantu.", "Traffic light: umutuku ugomba gukora iki?": "Ugomba guhagarara no gutegereza icyatsi.", "Traffic light: icyatsi ugomba gukora iki?": "Ugomba gukomeza utabangamiye abandi bakozi cyangwa abagenzi.", "Icyapa cya Yield gisobanura iki?": "Ugomba guha inzira abandi bakozi cyangwa abagenzi baje imbere yawe.", "Icyapa cya Roundabout gisobanura iki?": "Kigaragaza ko uri kugana ku roundabout, ugomba guha inzira izindi modoka ziri mu cyerekezo.", "Icyapa cya No U-Turn gisobanura iki?": "Ntushobora guhindura icyerekezo cya 180° aho hantu.", "Icyapa cya No Entry gisobanura iki?": "Ntushobora kwinjira muri uwo muhanda cyangwa aho hantu.", "Icyapa cya Speed Limit gisobanura iki?": "Bivuga umuvuduko ntarengwa wemerewe aho hantu.", "Umwanya w’imbere w’imodoka utegurwa ute?": "Ushyirwaho kugira ngo urinde impanuka kandi utegure gutangira kugenda neza.", "Icyapa cya Pedestrian Crossing gisobanura iki?": "Kigaragaza ahantu hateganyijwe ku bantu kugenda ku maguru, ugomba guhagarara niba hari umuntu uri ku muhanda.", "Icyapa cya No Horn gisobanura iki?": "Ntukavuge urusaku cyangwa ntukoreshe akayunguruzo ka sireni.", "Icyapa cya Parking gisobanura iki?": "Bivuga ko ushobora guhagarara cyangwa guhagarika imodoka aho hantu.", "Icyapa cya Danger gisobanura iki?": "Kigaragaza ko hafi aho hari ahantu hateganyijwe impanuka, ugomba kwitonda.", "Ubwirinzi bw’umutekano mu muhanda ukorwa ute?": "Kwitonda, gukurikiza amategeko, kwambara ingofero, no kugendera ku muvuduko ukwiye.", "Icyapa cya Stop for School Bus gisobanura iki?": "Ugomba guhagarara igihe busi y’abana ihagaze kugira ngo abana binjire cyangwa basohoke mu modoka.", "Icyapa cya Slippery Road gisobanura iki?": "Umuhanda ushobora kuba ushushe cyangwa ushushe, ugomba kugabanya umuvuduko.", "Icyapa cya Pedestrian Zone gisobanura iki?": "Ntugomba gutwara imodoka muri ako gace, ni ahantu hateganyijwe abantu kugenda ku maguru.", "Icyapa cya Road Work gisobanura iki?": "Hari ibikorwa by’akazi ku muhanda, ugomba kugabanya umuvuduko no kwitonda.", "Icyapa cya Bicycle Lane gisobanura iki?": "Ni umuhanda wateganyijwe ku magare gusa, imodoka ntizikwiriye kuwutwara.", "Icyapa cya No Overtaking gisobanura iki?": "Ntushobora kurenza imodoka iri imbere aho hantu.", "Icyapa cya Hospital Zone gisobanura iki?": "Hari ibitaro hafi, ugomba kugabanya umuvuduko no kwitonda cyane.", "Icyapa cya Railroad Crossing gisobanura iki?": "Hari umuhanda wambukiranya inzira y’amashanyarazi, ugomba guhagarara niba imodoka y’imizigo iri ku muhanda.", "Icyapa cya Low Clearance gisobanura iki?": "Bivuga ko hari aho imodoka yawe ishobora gucika ku buryo bw’ikirere, ukwiye kwitonda.", "Icyapa cya Slower Traffic Keep Right gisobanura iki?": "Imodoka zifite umuvuduko muto zigomba kuguma iburyo.", "Icyapa cya Animal Crossing gisobanura iki?": "Hari inyamaswa zishobora kuza mu muhanda, ugomba kugabanya umuvuduko.", "Icyapa cya Traffic Signal Ahead gisobanura iki?": "Hari urumuri rw’umuhanda imbere, ugomba kwitegura guhagarara cyangwa gukomeza.", "Icyapa cya Narrow Bridge gisobanura iki?": "Umuhanda uramanutse cyangwa uramanutse ku nkombe, ugomba kwitonda.", "Icyapa cya Two Way Traffic gisobanura iki?": "Umuhanda ufite ibice bibiri by’amamodoka ahagana imbere, witondere imodoka zituruka imbere.", "Icyapa cya No Pedestrians gisobanura iki?": "Abantu ntibemerewe kugenda muri ako gace.", "Icyapa cya Children Crossing gisobanura iki?": "Hari abana bashobora guca, ugomba kugabanya umuvuduko no kwitonda.", "Icyapa cya Falling Rocks gisobanura iki?": "Hari amabuye ashobora kugwa ku muhanda, ugomba kwitonda.", "Icyapa cya Steep Hill gisobanura iki?": "Umuhanda uramanutse cyane, ugomba gukoresha imbaraga n’umutekano mu gutwara.", "Icyapa cya Curve Ahead gisobanura iki?": "Hari ihindagurika ry’umuhanda imbere, ugomba kugabanya umuvuduko.", "Icyapa cya Slower Traffic Keep Left gisobanura iki?": "Imodoka zifite umuvuduko muto zigomba kuguma ibumoso.", "Icyapa cya Roundabout Ahead gisobanura iki?": "Hari roundabout imbere, ugomba guha inzira izindi modoka.", "Icyapa cya Stop Sign Ahead gisobanura iki?": "Hari icyapa cya STOP imbere, utegerezwa guhagarara.", "Icyapa cya No Trucks gisobanura iki?": "Imodoka ziremereye (imizigo) ntizemerewe kugenda aho hantu.", "Icyapa cya Height Limit gisobanura iki?": "Bivuga ko imodoka ifite uburebure burenze ntishobora kunyura aho hantu.", "Icyapa cya Width Limit gisobanura iki?": "Bivuga ko imodoka ifite ubugari burenze ntishobora kunyura aho hantu.", "Icyapa cya Weight Limit gisobanura iki?": "Bivuga ko imodoka ifite uburemere burenze ntishobora kunyura aho hantu.", "Icyapa cya Stop for Pedestrians gisobanura iki?": "Ugomba guhagarara igihe abantu bagenda ku muhanda.", "Icyapa cya Watch for Bicycles gisobanura iki?": "Utegerezwa kwitonda kubera abazasiga cyangwa abagenzi b’amagare.", "Icyapa cya School Zone gisobanura iki?": "Hari ishuri hafi, ugomba kugabanya umuvuduko.", "Icyapa cya Give Way gisobanura iki?": "Ugomba guha inzira izindi modoka ziri imbere yawe.", "Icyapa cya No Left Turn gisobanura iki?": "Ntushobora guhindura ibumoso aho hantu.", "Icyapa cya No Right Turn gisobanura iki?": "Ntushobora guhindura iburyo aho hantu.", "Icyapa cya Bus Stop gisobanura iki?": "Hari ahantu bateganyirijwe abagenzi b’amabus guhagarara.", "Icyapa cya One Lane Bridge gisobanura iki?": "Umuhanda ufite umurongo umwe gusa, ugomba kwitonda no gutegereza izindi modoka.", "Icyapa cya No Motorcycles gisobanura iki?": "Amamoto ntazemererwa kugenda aho hantu.", "Icyapa cya No Bicycles gisobanura iki?": "Amagare ntazemererwa kugenda aho hantu.", "Icyapa cya No Trucks Left Turn gisobanura iki?": "Imizigo ntizashobora guhindura ibumoso aho hantu.", "Icyapa cya No Trucks Right Turn gisobanura iki?": "Imizigo ntizashobora guhindura iburyo aho hantu.", "Icyapa cya Speed Bump gisobanura iki?": "Hari uturambi (speed bump) imbere, ugomba kugabanya umuvuduko.", "Icyapa cya Slower Traffic Use Left Lane gisobanura iki?": "Imodoka zifite umuvuduko muto zigomba kuguma mu murongo w’ibumoso.", "Icyapa cya Slower Traffic Use Right Lane gisobanura iki?": "Imodoka zifite umuvuduko muto zigomba kuguma mu murongo w’iburyo.", "Icyapa cya Pedestrian Bridge gisobanura iki?": "Hari ikiraro cy’abanyamaguru, imodoka ntizikwiriye kuzakinyura.", "Icyapa cya No Stopping gisobanura iki?": "Ntushobora guhagarara na gato aho hantu.", "Icyapa cya Emergency Vehicles gisobanura iki?": "Ugomba guha inzira imodoka z’inkongi n’izindi z’ubutabazi.", "Icyapa cya School Bus Zone gisobanura iki?": "Ahantu hateganyirijwe abagenzi b’abana ba bus, ugomba kwitonda.", "Icyapa cya No Horn Zone gisobanura iki?": "Ntukoreshe urusaku rwa sireni cyangwa akayunguruzo.", "Icyapa cya Hospital gisobanura iki?": "Hari ibitaro hafi, ugomba kugabanya umuvuduko no kwitonda cyane.", "Icyapa cya Police Station gisobanura iki?": "Hari station ya polisi hafi, witondere amategeko y’umuhanda.", "Icyapa cya Fire Station gisobanura iki?": "Hari station y’inkongi hafi, ugomba guha inzira imodoka z’inkongi.", "Icyapa cya Traffic Camera Ahead gisobanura iki?": "Hari camera y’umuhanda imbere, ugomba kwitonda no gukurikiza amategeko.", "Icyapa cya Roundabout Yield gisobanura iki?": "Ugomba guha inzira izindi modoka ziri muri roundabout.", "Icyapa cya Tunnel Ahead gisobanura iki?": "Hari tunnel imbere, witondere amatara n’umuvuduko.", "Icyapa cya Low Shoulder gisobanura iki?": "Hari igice cy’umuhanda kitarinzwe neza, witondere imihanda y’imbere.", "Icyapa cya Loose Gravel gisobanura iki?": "Umuhanda ushobora kuba wuzuye amabuye, ugomba kugabanya umuvuduko.", "Icyapa cya Icyatsi cy'umuhanda gisobanura iki?": "Ugomba gukomeza utabangamiye abandi, utitaye ku kindi kibazo.", "Icyapa cya Temporary Traffic Control gisobanura iki?": "Hari amategeko y’agateganyo ku muhanda, witondere cyane.", "Icyapa cya Traffic Diversion gisobanura iki?": "Umuhanda warahinduriwe, ukurikize amabwiriza mashya.", "Icyapa cya Blind Corner gisobanura iki?": "Hari icyerekezo kitagaragara neza, ugomba kugabanya umuvuduko no kwitonda.", "Icyapa cya Pedestrian Priority gisobanura iki?": "Abanyamaguru bafite uburenganzira, ugomba kubaha inzira.", "Icyapa cya No Buses gisobanura iki?": "Amabus ntazemererwa kugenda aho hantu.", "Icyapa cya No Entry for Trucks gisobanura iki?": "Imizigo ntizinjira aho hantu.", "Icyapa cya Reversible Lane gisobanura iki?": "Umurongo ushobora guhindurwamo icyerekezo bitewe n’amasaha, witondere ibimenyetso.", "Icyapa cya Shared Lane gisobanura iki?": "Umuhanda usangiye hagati y’amagare n’imodoka, witondere abagenzi.", "Icyapa cya Bus Lane gisobanura iki?": "Umuhanda wateganyirijwe amabus gusa, imodoka zisanzwe ntizikwiriye kuwukoresha.", "Icyapa cya Hump gisobanura iki?": "Hari uturambi duto (hump), ugomba kugabanya umuvuduko.", "Icyapa cya Zebra Crossing gisobanura iki?": "Ahantu hateganyirijwe abanyamaguru, ugomba guhagarara niba hari umuntu uriho.", "Icyapa cya End of Speed Limit gisobanura iki?": "Umuvuduko ntarengwa urangiye, ushobora gukomeza mu muvuduko usanzwe.", "Icyapa cya One Way Street gisobanura iki?": "Umuhanda ushobora gukoreshwa mu cyerekezo kimwe gusa.", "Icyapa cya No Right Turn on Red gisobanura iki?": "Ntushobora guhindura iburyo igihe umutuku uriho.", "Icyapa cya No Left Turn on Red gisobanura iki?": "Ntushobora guhindura ibumoso igihe umutuku uriho.", "Icyapa cya Stop Line gisobanura iki?": "Ugomba guhagarara aho umurongo w’umuhanda ubigaragaza.", "Icyapa cya Give Way Line gisobanura iki?": "Ugomba guha inzira izindi modoka ziri imbere.", "Icyapa cya Traffic Island gisobanura iki?": "Hari igice cy’umuhanda kitagomba kwambukirwaho, witondere aho hantu.", "Icyapa cya Pedestrian Refuge gisobanura iki?": "Hari aho abanyamaguru bashobora guhagarara hagati mu muhanda, witondere igihe bari guca.", "Icyapa cya Advance Warning gisobanura iki?": "Hari icyapa gitanga amakuru mbere y’igikorwa gikurikira ku muhanda.", "Icyapa cya No Parking Zone gisobanura iki?": "Ntushobora guhagarara cyangwa guhagarika imodoka muri ako gace.", "Icyapa cya Parking Zone gisobanura iki?": "Ushobora guhagarara cyangwa guhagarika imodoka muri ako gace.", "Icyapa cya No Stopping Zone gisobanura iki?": "Ntushobora guhagarara na gato aho hantu.", "Icyapa cya Loading Zone gisobanura iki?": "Ni ahantu hateganyirijwe gupakira cyangwa gutwara ibintu byihuse.", "Icyapa cya Tow Away Zone gisobanura iki?": "Imodoka ihagaritswe mu buryo butemewe ishobora gukurwa n’abashinzwe guhagarika imodoka.", "Icyapa cya Bus Only Lane gisobanura iki?": "Umuhanda wateganyirijwe amabus gusa, imodoka zisanzwe ntizikwiriye kuwukoresha.", "Icyapa cya Cycle Only Lane gisobanura iki?": "Umuhanda wateganyirijwe amagare gusa, imodoka ntizikwiriye kuwukoresha.", "Icyapa cya Pedestrian Only Zone gisobanura iki?": "Ahantu hateganyirijwe abanyamaguru gusa, imodoka ntizemererwa kugenda.", "Icyapa cya Shared Path gisobanura iki?": "Umuhanda usangiye hagati y’abantu n’amagare, witondere abagenzi n’abanyamaguru.", "Icyapa cya No Entry Zone gisobanura iki?": "Ntushobora kwinjira muri ako gace.", "Icyapa cya One Way Zone gisobanura iki?": "Umuhanda ushobora gukoreshwa mu cyerekezo kimwe gusa.", "Icyapa cya Pedestrian Crosswalk gisobanura iki?": "Ahantu hateganyirijwe abanyamaguru kugenda ku muhanda.", "Icyapa cya Stop for Cyclists gisobanura iki?": "Ugomba guhagarara igihe hari abagenzi b’amagare bakeneye kunyura.", "Icyapa cya Bicycle Crossing gisobanura iki?": "Hari ahantu hateganyirijwe amagare guca, witondere abagenzi b’amagare.", "Icyapa cya End of Pedestrian Zone gisobanura iki?": "Urangiye ahantu hateganyirijwe abanyamaguru, imodoka zisanzwe zishobora kugenda.", "Icyapa cya End of Bus Lane gisobanura iki?": "Urangiye umurongo w’amabus, imodoka zisanzwe zishobora kugenda.", "Icyapa cya End of Cycle Lane gisobanura iki?": "Urangiye umurongo w’amagare, imodoka zisanzwe zishobora kugenda.", "Icyapa cya Temporary Road Closure gisobanura iki?": "Umuhanda wafunze by’agateganyo, ukurikize ibimenyetso by’agateganyo.", "Icyapa cya Diversion Ahead gisobanura iki?": "Hari umuhanda wahinduwe imbere, witondere amabwiriza mashya.", "Icyapa cya Traffic Lights Out gisobanura iki?": "Amatara y’umuhanda ntakora, witondere cyane kandi ukurikize amategeko y’inzira.", "Icyapa cya Stop Here on Red gisobanura iki?": "Ugomba guhagarara aho icyapa kibigaragaza igihe umutuku uriho.", "Icyapa cya End of Speed Restriction gisobanura iki?": "Umuvuduko ntarengwa warangiye, ushobora gukomeza mu muvuduko usanzwe.", }
835e771
verified

VIATEUR-AI commited on

import gradio as gr # Ibyiciro by'ibibazo n'ibisubizo ibisubizo = { "Icyapa cya STOP gisobanura iki?": "Bisobanura ko ugomba guhagarara mbere yo gukomeza, urebe niba umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mujyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi aho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba ko umuhanda ubibemerera kandi nta modoka iza imbere.", } def gusubiza(ikibazo): return ibisubizo.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") # Kurema interface nziza with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", secondary_hue="yellow")) as demo: gr.Markdown( """ # 🚗 **AI y’Amategeko y’Umuhanda 🇷🇼** ### *Yakozwe na Viateur Irasubiza* --- **Menya amategeko y’umuhanda mu buryo bworoshye, mu Kinyarwanda.** Hitamo ikibazo ubone igisubizo cyihuse kandi gisobanutse. """ ) with gr.Row(): with gr.Column(scale=1): ikibazo = gr.Dropdown( choices=list(ibisubizo.keys()), label="➡️ Hitamo ikibazo kijyanye n’amategeko y’umuhanda", value="Icyapa cya STOP gisobanura iki?", ) kanda = gr.Button("🔍 Saba igisubizo") with gr.Column(scale=1): igisubizo = gr.Textbox(label="🧠 Igisubizo cya AI", lines=4) kanda.click(fn=gusubiza, inputs=ikibazo, outputs=igisubizo) gr.Markdown( """ --- **© 2025 Viateur Irasubiza** 🛣️ *AI ifasha Abanyarwanda kwiga amategeko y’umuhanda mu buryo bworoshye n’igihe gito.* """ ) demo.launch()
2a8e918
verified

VIATEUR-AI commited on

import gradio as gr # Ibyiciro by'ibibazo n'ibisubizo ibisubizo = { "Icyapa cya STOP gisobanura iki?": "Bisobanura ko ugomba guhagarara mbere yo gukomeza, urebe niba umuhanda utekanye.", "Umuvuduko ntarengwa mu mujyi ni uwuhe?": "Ni 40 km/h mu mujyi.", "Icyapa cya Attention École gisobanura iki?": "Kigaragaza ko hafi aho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "Iyo umwana ari ku muhanda, ukora iki?": "Ugabanya umuvuduko kandi ube maso cyane.", "Iyo ugiye guca ku bandi, ukora iki?": "Ureba ko umuhanda ubibemerera kandi nta modoka iza imbere.", } def gusubiza(ikibazo): return ibisubizo.get(ikibazo, "Nta bisubizo bihari kuri icyo kibazo.") demo = gr.Interface( fn=gusubiza, inputs=gr.Dropdown( choices=list(ibisubizo.keys()), label="Hitamo ikibazo kijyanye n’amategeko y’umuhanda 🇷🇼" ), outputs=gr.Textbox(label="Igisubizo cya AI"), title="AI y’Amategeko y’Umuhanda 🇷🇼", description="Iyi AI yakozwe na **Viateur Irasubiza** ifasha abantu kwiga amategeko y’umuhanda mu Kinyarwanda. Hitamo ikibazo ubone igisubizo cyihuse." ) demo.launch()
b7070df
verified

VIATEUR-AI commited on

gradio
1d14ec9
verified

VIATEUR-AI commited on

import gradio as gr # Ibisubizo by'ibibazo by'amategeko ibisubizo = { "icyapa cya stop": "Icyapa cya STOP gisobanura ko ugomba guhagarara mbere yo gukomeza, urebe niba umuhanda utekanye.", "umuvuduko ntarengwa mu mujyi": "Mu mijyi, umuvuduko ntarengwa ni 40 km/h.", "icyapa cya attention ecole": "Bisobanura ko hafi aho hari ishuri, ugomba kugabanya umuvuduko no kwitonda.", "amaso ku muhanda": "Bivuga ko utagomba kureba ibindi bintu nko kuri telefoni igihe utwaye imodoka.", "icyapa cya danger": "Gisobanura ko hari akaga imbere, ugomba kuba maso cyane." } def gusubiza_ikibazo(ikibazo): ikibazo = ikibazo.lower() for ijambo, igisubizo in ibisubizo.items(): if ijambo in ikibazo: return igisubizo return "Ndabibona, ariko sinasobanukiwe neza. Gerageza kubaza mu bundi buryo 😊" demo = gr.Interface( fn=gusubiza_ikibazo, inputs=gr.Textbox(label="Andika ikibazo cyawe hano mu Kinyarwanda"), outputs=gr.Textbox(label="Igisubizo cya AI"), title="AI y'Amategeko y'Umuhanda 🇷🇼", description="Andika ikibazo kijyanye n’amategeko y’umuhanda mu Kinyarwanda, AI iguhe igisubizo gikwiriye." ) demo.launch()
a2aeb87
verified

VIATEUR-AI commited on

initial commit
4737635
verified

VIATEUR-AI commited on

Duplicate from gradio-templates/chatbot
586cb9f
verified

VIATEUR-AI pngwn HF Staff commited on