#!/usr/bin/env python # -*- coding: utf-8 -*- """ Enhanced Gradio UI for the Salesforce/codet5-large model using the Hugging Face Inference API. Adheres to best practices, PEP8, flake8, and the Zen of Python. """ import gradio as gr MODEL_ID = "Salesforce/codet5-large" def prepare_payload(prompt: str, max_tokens: int) -> dict: """ Prepare the payload dictionary for the Hugging Face inference call. Args: prompt (str): The input code containing ``. max_tokens (int): Maximum number of tokens for generation. Returns: dict: Payload for the model API call. """ return {"inputs": prompt, "parameters": {"max_length": max_tokens}} def extract_generated_text(api_response: dict) -> str: """ Extract generated text from the API response. Args: api_response (dict): The response dictionary from the model API call. Returns: str: The generated text, or string representation of the response. """ return api_response.get("generated_text", str(api_response)) def main(): with gr.Blocks(fill_height=True, theme=gr.themes.Soft()) as demo: with gr.Sidebar(): gr.Markdown("## 🤖 Inference Provider") gr.Markdown( ( "This Space showcases the `{}` model, served via the Hugging Face Inference API.\n\n" "Sign in with your Hugging Face account to access the model." ).format(MODEL_ID) ) login_button = gr.LoginButton("🔐 Sign in") gr.Markdown("---") gr.Markdown(f"**Model:** `{MODEL_ID}`") gr.Markdown("[📄 View Model Card](https://huggingface.co/Salesforce/codet5-large)") gr.Markdown("# 🧠 CodeT5 Inference UI") gr.Markdown("Enter your Python code snippet with `` as the mask token.") with gr.Row(): with gr.Column(scale=1): code_input = gr.Code( label="Input Code", language="python", value="def greet(user): print(f'hello !')", lines=10, autofocus=True, ) max_tokens = gr.Slider( minimum=8, maximum=128, value=32, step=8, label="Max Tokens" ) submit_btn = gr.Button("🚀 Run Inference") with gr.Column(scale=1): output_text = gr.Textbox( label="Inference Output", lines=10, interactive=False, placeholder="Model output will appear here...", ) # Load the model from Hugging Face Inference API. model_iface = gr.load( f"models/{MODEL_ID}", accept_token=login_button, provider="hf-inference", ) # Chain click events: prepare payload -> API call -> extract output. submit_btn.click( fn=prepare_payload, inputs=[code_input, max_tokens], outputs=model_iface, api_name="prepare_payload", ).then( fn=extract_generated_text, inputs=model_iface, outputs=output_text, api_name="extract_output", ) demo.launch() if __name__ == "__main__": main()