afri_app / modules /phonics.py
SmokeyBandit's picture
Update modules/phonics.py
edb3b83 verified
import gradio as gr
from utils.helpers import load_content
from .translation_model import TranslationModel
def phonics_component():
content = load_content()
translator = TranslationModel()
def practice_phonics(sound, user_input):
if not user_input.strip():
return "Please enter a word"
for level in ["beginner", "intermediate"]:
examples = next((p["examples"] for p in content["phonics"][level]
if p["sound"] == sound), [])
if examples:
# Translate user input to English to verify meaning
translation = translator.translate(user_input.lower().strip(), "af", "en")
# Check if the word contains the sound
has_sound = sound.lower() in user_input.lower()
# Check if it's a valid Afrikaans word by translating back
back_translation = translator.translate(translation, "en", "af")
is_valid = back_translation.lower().strip() == user_input.lower().strip()
if user_input.lower().strip() in [ex.lower() for ex in examples]:
return f"Correct! βœ“ '{user_input}' contains the sound '{sound}'"
elif has_sound and is_valid:
return f"Good job! '{user_input}' is a valid word with the '{sound}' sound"
else:
return f"Try again. Examples: {', '.join(examples)}"
return "Sound not found"
with gr.Column() as phonics:
for level in ["beginner", "intermediate"]:
with gr.Tab(f"{level.capitalize()} Phonics"):
for phoneme in content["phonics"][level]:
with gr.Accordion(f"{phoneme['sound']} - {phoneme['pronunciation']}", open=False):
sound_input = gr.Textbox(value=phoneme["sound"], visible=False)
examples = gr.Markdown(", ".join(phoneme["examples"]))
user_input = gr.Textbox(label="Type a word with this sound")
check_btn = gr.Button("Check")
result = gr.Textbox(label="Result")
check_btn.click(
fn=practice_phonics,
inputs=[sound_input, user_input],
outputs=result
)
return phonics