Spaces:
Sleeping
Sleeping
File size: 1,756 Bytes
e804d56 2c583db e804d56 2c583db e804d56 6f42ff1 2c583db e804d56 19dc357 e804d56 aa6ef3b 2c583db e804d56 2c583db 915bcb7 e804d56 ab430b6 e804d56 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
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()
|