Spaces:
Runtime error
Runtime error
import streamlit as st | |
from codet5_summarizer import CodeT5Summarizer, MODEL_OPTIONS | |
import textwrap | |
import os | |
import base64 | |
st.set_page_config(page_title="Code Summarizer & Report Generator", layout="wide") | |
st.title("π Code Summarizer & Report Generator") | |
st.markdown(""" | |
Upload a Python code file to get a high-level summary and a report structure with editable sections. | |
You can choose from various models including Mistral, CodeT5, and Gemini. | |
""") | |
# Model selection | |
model_label = st.selectbox("Select Model", list(MODEL_OPTIONS.keys()), index=0) | |
summarizer = CodeT5Summarizer(model_name=MODEL_OPTIONS[model_label]) | |
# Upload code file | |
uploaded_file = st.file_uploader("Upload a .py file", type="py") | |
if uploaded_file: | |
code = uploaded_file.read().decode("utf-8") | |
st.code(code, language="python") | |
st.markdown("---") | |
st.subheader("π Generating Summary...") | |
if "Mistral" in model_label or "Gemini" in model_label: | |
summary = summarizer.summarize(code) | |
function_summaries = None | |
class_summaries = None | |
else: | |
results = summarizer.summarize_code(code) | |
summary = results["file_summary"] | |
function_summaries = results["function_summaries"] | |
class_summaries = results["class_summaries"] | |
st.text_area("Summary", summary, height=200) | |
if function_summaries: | |
st.subheader("π§© Function Summaries") | |
for func, summ in function_summaries.items(): | |
st.text_area(f"Function: {func}", summ, height=100) | |
if class_summaries: | |
st.subheader("ποΈ Class Summaries") | |
for cls, summ in class_summaries.items(): | |
st.text_area(f"Class: {cls}", summ, height=100) | |
# Report generation section | |
st.markdown("---") | |
st.subheader("π Generate Report") | |
default_sections = [ | |
"Abstract", "Introduction", "Literature Review", "Methodology", | |
"Modules", "Software & Hardware Requirements", "Architecture & UML Diagrams", | |
"References", "Conclusion" | |
] | |
sections = st.multiselect("Select Sections", default_sections, default=default_sections) | |
report = "" | |
for section in sections: | |
content = st.text_area(f"βοΈ {section} Content", value=f"{section} description goes here...", height=150) | |
report += f"\n## {section}\n\n{textwrap.dedent(content)}\n" | |
# Export format | |
st.markdown("---") | |
st.subheader("π€ Export Report") | |
export_format = st.radio("Select Export Format", ["Markdown", "Text", "HTML"]) | |
def generate_download_link(content, filename): | |
b64 = base64.b64encode(content.encode()).decode() | |
return f'<a href="data:file/txt;base64,{b64}" download="{filename}">π₯ Download {filename}</a>' | |
if st.button("Generate Export File"): | |
filename = uploaded_file.name.replace(".py", "") | |
if export_format == "Markdown": | |
st.markdown(generate_download_link(report, f"{filename}_report.md"), unsafe_allow_html=True) | |
elif export_format == "Text": | |
st.markdown(generate_download_link(report, f"{filename}_report.txt"), unsafe_allow_html=True) | |
else: | |
html_report = report.replace("\n", "<br>") | |
html_content = f"<html><body>{html_report}</body></html>" | |
st.markdown(generate_download_link(html_content, f"{filename}_report.html"), unsafe_allow_html=True) | |