Spaces:
Sleeping
Sleeping
import gradio as gr | |
from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM | |
def load_model(): | |
model_name = "Salesforce/codet5-small" | |
tokenizer = AutoTokenizer.from_pretrained(model_name) | |
model = AutoModelForSeq2SeqLM.from_pretrained(model_name) | |
return pipeline("summarization", model=model, tokenizer=tokenizer) | |
def explain_code(files): | |
explainer = load_model() | |
explanations = [] | |
for file in files: | |
filename = file.name if hasattr(file, 'name') else 'Uploaded File' | |
if isinstance(file, bytes): | |
code = file.decode('utf-8') | |
elif hasattr(file, 'read'): | |
code = file.read().decode('utf-8') | |
else: | |
code = str(file) | |
lines = code.splitlines() | |
line_explanations = [] | |
for idx, line in enumerate(lines): | |
if not line.strip(): | |
continue | |
input_length = len(line.split()) | |
max_length = max(1, input_length // 2) | |
result = explainer(line, max_length=max_length, do_sample=False)[0].get('summary_text', '') | |
line_explanations.append(f"Line {idx+1}: {line}\nExplanation: {result.strip()}\n") | |
explanations.append(f"## {filename}\n" + "\n".join(line_explanations)) | |
return "\n\n".join(explanations) | |
def main(): | |
with gr.Blocks() as demo: | |
gr.Markdown("# CodeExplainerBot (Local CodeT5-small)") | |
code_input = gr.File(label="Upload code files", file_count="multiple", type="binary") | |
output = gr.Textbox(label="Line-by-line Explanation", lines=20) | |
explain_btn = gr.Button("Explain Code") | |
explain_btn.click(fn=explain_code, inputs=[code_input], outputs=output) | |
demo.launch() | |
if __name__ == "__main__": | |
main() | |