Spaces:
Runtime error
Runtime error
File size: 4,568 Bytes
4195ac0 44daadf 4195ac0 bcb4808 4195ac0 0a7c017 35b9d7e 732c892 4195ac0 5bb2ded 4195ac0 2ee56f9 4195ac0 5bb2ded 4195ac0 5bb2ded 4195ac0 6e9feb9 4195ac0 5bb2ded 660c675 a13afb6 4195ac0 660c675 a13afb6 4195ac0 a13afb6 4195ac0 d9d8e75 4195ac0 35b9d7e 5bb2ded d9d8e75 5bb2ded 4195ac0 5bb2ded 4195ac0 77dd101 4195ac0 5bb2ded 9b1ede4 4195ac0 570b457 660c675 570b457 4195ac0 48db6cb 5bb2ded 48db6cb 29dd10e 48db6cb 0640418 48db6cb 5bb2ded 4195ac0 e084787 4195ac0 35b9d7e 4195ac0 f9b68ce 35b9d7e 4195ac0 5bb2ded |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
import gradio as gr
from datasets import load_dataset, Dataset
from datetime import datetime
from datetime import date
import io
import os
from PIL import Image, ImageDraw, ImageFont
from huggingface_hub import login
login(token=os.environ["HUGGINGFACE_TOKEN"])
# Constants
SCORES_DATASET = "agents-course/unit4-students-scores"
CERTIFICATES_DATASET = "agents-course/course-certificates-of-excellence"
THRESHOLD_SCORE = 30
# Function to check user score
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
# Function to check if certificate entry exists
def has_certificate_entry(username):
cert_data = load_dataset(CERTIFICATES_DATASET, split="train", download_mode="force_redownload")
print(username)
return any(row["username"] == username for row in cert_data)
# Function to add certificate entry
def add_certificate_entry(username, name, score):
# Load current dataset
ds = load_dataset(CERTIFICATES_DATASET, split="train", download_mode="force_redownload")
# Remove any existing entry with the same username
filtered_rows = [row for row in ds if row["username"] != username]
# Append the updated/new entry
new_entry = {
"username": username,
"score": score,
"timestamp": datetime.now().isoformat()
}
filtered_rows.append(new_entry)
# Rebuild dataset and push
updated_ds = Dataset.from_list(filtered_rows)
updated_ds.push_to_hub(CERTIFICATES_DATASET)
# Function to generate certificate PDF
def generate_certificate(name, score):
"""Generate certificate image and PDF."""
certificate_path = os.path.join(
os.path.dirname(__file__), "templates", "certificate.png"
)
im = Image.open(certificate_path)
d = ImageDraw.Draw(im)
name_font = ImageFont.truetype("Quattrocento-Regular.ttf", 100)
date_font = ImageFont.truetype("Quattrocento-Regular.ttf", 48)
name = name.title()
d.text((1000, 740), name, fill="black", anchor="mm", font=name_font)
d.text((1480, 1170), str(date.today()), fill="black", anchor="mm", font=date_font)
pdf = im.convert("RGB")
pdf.save("certificate.pdf")
return im, "certificate.pdf"
# Main function to handle certificate generation
def handle_certificate(name, profile: gr.OAuthProfile):
if profile is None:
return "You must be logged in with your Hugging Face account.", None
username = profile.username
user_score = check_user_score(username)
if not user_score:
return "You need to complete Unit 4 first.", None, None
score = user_score["score"]
if score < THRESHOLD_SCORE:
return f"Your score is {score}. You need at least {THRESHOLD_SCORE} to pass.", None, None
certificate_image, certificate_pdf = generate_certificate(name, score)
add_certificate_entry(username, name, score)
return "Congratulations! Here's your certificate:", certificate_image, certificate_pdf
# Gradio interface
with gr.Blocks() as demo:
gr.Markdown("# 🎓 Agents Course - Get Your Final Certificate")
gr.Markdown("Welcome! Follow the steps below to receive your official certificate:")
gr.Markdown("⚠️ **Note**: Due to high demand, you might experience occasional bugs. If something doesn't work, please try again after a moment!")
with gr.Group():
gr.Markdown("## ✅ How it works")
gr.Markdown("""
1. **Sign in** with your Hugging Face account using the button below.
2. **Enter your full name** (this will appear on the certificate).
3. Click **'Get My Certificate'** to check your score and download your certificate.
""")
gr.Markdown("---")
gr.Markdown("📝 **Note**: You must have completed [Unit 4](https://huggingface.co/learn/agents-course/unit4/introduction) and your Agent must have scored **above 30** to get your certificate.")
gr.LoginButton()
with gr.Row():
name_input = gr.Text(label="Enter your name (this will appear on the certificate)")
generate_btn = gr.Button("Get my certificate")
output_text = gr.Textbox(label="Result")
cert_image = gr.Image(label="Your Certificate")
cert_file = gr.File(label="Download Certificate (PDF)", file_types=[".pdf"])
generate_btn.click(
fn=handle_certificate,
inputs=[name_input],
outputs=[output_text, cert_image, cert_file]
)
demo.launch()
|