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