umarfarooqtoru/codeexplainer
0
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 