import gradio as gr
import tempfile
import uuid
from gradio_client import Client, handle_file
# --------------------------------
# CONFIG
# --------------------------------
SPACE_A = "MonishRaman/Hackathon_certificate_api"
# Create client once
client = Client(SPACE_A)
# --------------------------------
# HTML TEMPLATE
# --------------------------------
CERT_HTML = """
Certificate of Participation
{name}
Project: {project}
Track: {track}
Certificate ID: {cid}
"""
# --------------------------------
# CORE FUNCTION
# --------------------------------
def generate_certificate(name, project, track):
if not name or not project or not track:
return None, "❌ All fields are required"
cert_id = f"CERT-{uuid.uuid4().hex[:8].upper()}"
html = CERT_HTML.format(
name=name.strip(),
project=project.strip(),
track=track.strip(),
cid=cert_id
)
# Save HTML
with tempfile.NamedTemporaryFile(delete=False, suffix=".html", mode="w", encoding="utf-8") as f:
f.write(html)
html_path = f.name
try:
# 🔥 CALL SPACE A (CORRECT ENDPOINT)
result = client.predict(
handle_file(html_path),
api_name="/predict"
)
# Normalize output
if isinstance(result, list):
result = result[0]
if not result:
return None, "❌ No image returned from Space A"
return result, f"✅ Certificate generated successfully\nID: `{cert_id}`"
except Exception as e:
return None, f"❌ Error: {str(e)}"
# --------------------------------
# UI
# --------------------------------
with gr.Blocks(title="Hackathon Certificate Generator") as demo:
gr.Markdown("# 🎓 Hackathon Certificate Generator")
name = gr.Textbox(label="Participant Name")
project = gr.Textbox(label="Project Name")
track = gr.Textbox(label="Track")
generate_btn = gr.Button("Generate Certificate", variant="primary")
output = gr.File(label="Download Certificate")
status = gr.Markdown()
generate_btn.click(
fn=generate_certificate,
inputs=[name, project, track],
outputs=[output, status]
)
demo.launch()