Team Ai
Apppublic

umarfarooqtoru/codeexplainer

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
app.py44 linesDownload Raw Back to root
1import gradio as gr2from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM3 4def load_model():5    model_name = "Salesforce/codet5-small"6    tokenizer = AutoTokenizer.from_pretrained(model_name)7    model = AutoModelForSeq2SeqLM.from_pretrained(model_name)8    return pipeline("summarization", model=model, tokenizer=tokenizer)9 10def explain_code(files):11    explainer = load_model()12    explanations = []13    for file in files:14        filename = file.name if hasattr(file, 'name') else 'Uploaded File'15        if isinstance(file, bytes):16            code = file.decode('utf-8')17        elif hasattr(file, 'read'):18            code = file.read().decode('utf-8')19        else:20            code = str(file)21        lines = code.splitlines()22        line_explanations = []23        for idx, line in enumerate(lines):24            if not line.strip():25                continue26            input_length = len(line.split())27            max_length = max(1, input_length // 2)28            result = explainer(line, max_length=max_length, do_sample=False)[0].get('summary_text', '')29            line_explanations.append(f"Line {idx+1}: {line}\nExplanation: {result.strip()}\n")30        explanations.append(f"## {filename}\n" + "\n".join(line_explanations))31    return "\n\n".join(explanations)32 33def main():34    with gr.Blocks() as demo:35        gr.Markdown("# CodeExplainerBot (Local CodeT5-small)")36        code_input = gr.File(label="Upload code files", file_count="multiple", type="binary")37        output = gr.Textbox(label="Line-by-line Explanation", lines=20)38        explain_btn = gr.Button("Explain Code")39        explain_btn.click(fn=explain_code, inputs=[code_input], outputs=output)40    demo.launch()41 42if __name__ == "__main__":43    main()44