import gradio as gr from datasets import load_dataset, Dataset from datetime import datetime import io import os # Load the datasets SCORES_DATASET = "agents-course/unit4-students-scores" CERTIFICATES_DATASET = "agents-course/course-certificates-of-excellence" THRESOLD_SCORE = 45 # Check the score based on username def check_user_score(username): score_data = load_dataset(SCORES_DATASET, split="train", download_mode="force_redownload") matches = [row for row in score_data if row["username"] == username] return matches[0] if matches else None # Check if this user already generated a certificate def has_certificate_entry(username): cert_data = load_dataset(CERTIFICATES_DATASET, split="train", download_mode="force_redownload") return any(row["username"] == username for row in cert_data) def add_certificate_entry(username, name): # Create a new entry new_entry = { "username": username, "name": name, "date": datetime.now().strftime("%Y-%m-%d"), } # Download the dataset, append and push ds = load_dataset(CERTIFICATES_DATASET, split="train") updated = ds.add_item(new_entry) updated.push_to_hub(CERTIFICATES_DATASET) def generate_certificate(name, score): pass def handle_certificate(name, request: gr.Request): username = request.username if not username: return "You must be logged in with your Hugging Face account.", None user_score = check_user_score(username) if not user_score: return "You need to complete Unit 4 first.", None score = user_score["score"] if score < THRESOLD_SCORE: return f"Your score is {score}. You need at least {THRESOLD_SCORE} to pass.", None # Passed: check if already in certificate dataset if not has_certificate_entry(username): add_certificate_entry(username, name) certificate = generate_certificate(name, score) return "Congratulations! Here's your certificate:", certificate with gr.Blocks(auth=True) as demo: gr.Markdown("# 🎓 Unit 4 Certificate Generator") with gr.Row(): name_input = gr.Text(label="Enter your name") generate_btn = gr.Button("Get my certificate") output_text = gr.Textbox(label="Result") cert_file = gr.File(label="Your Certificate", file_types=[".pdf"]) generate_btn.click( fn=handle_certificate, inputs=[name_input], outputs=[output_text, cert_file] ) demo.launch()