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) | |