Spaces:
Runtime error
Runtime error
| """Streamlit frontend for the multi-domain analyzer platform.""" | |
| from __future__ import annotations | |
| import streamlit as st | |
| from app.examples import EXAMPLES | |
| from schemas.request import AnalyzeCodeRequest | |
| from services.analysis_service import AnalysisService | |
| analysis_service = AnalysisService() | |
| def _analyze(code: str, context_window: str, traceback_text: str, domain_hint: str): | |
| """Run the analysis service with validated request payloads.""" | |
| request = AnalyzeCodeRequest( | |
| code=code, | |
| context_window=context_window, | |
| traceback_text=traceback_text, | |
| domain_hint=domain_hint, # type: ignore[arg-type] | |
| ) | |
| return analysis_service.analyze(request) | |
| def main() -> None: | |
| """Render the Streamlit UI.""" | |
| st.set_page_config(page_title="Multi-Domain AI Code Analyzer", layout="wide") | |
| st.title("Multi-Domain AI Code Analyzer & Improvement System") | |
| st.caption("PyTorch-powered code review across DSA, Data Science, ML/DL, and Web backend code.") | |
| example_name = st.selectbox("Example input", list(EXAMPLES.keys())) | |
| example = EXAMPLES[example_name] | |
| auto_analyze = st.toggle("Real-time scoring", value=True) | |
| left, right = st.columns([1.2, 1.0]) | |
| with left: | |
| code = st.text_area("Code input", value=example["code"], height=420) | |
| context_window = st.text_area("Context window", value=example["context_window"], height=100) | |
| traceback_text = st.text_area("Optional traceback / runtime hint", value=example["traceback_text"], height=100) | |
| domain_hint = st.selectbox("Domain hint", ["auto", "dsa", "data_science", "ml_dl", "web"], index=["auto", "dsa", "data_science", "ml_dl", "web"].index(example["domain_hint"])) | |
| analyze_clicked = st.button("Analyze Code", type="primary") | |
| result = None | |
| if code and (analyze_clicked or auto_analyze): | |
| result = _analyze(code, context_window, traceback_text, domain_hint) | |
| with right: | |
| if result is None: | |
| st.info("Paste code or load an example to start analysis.") | |
| else: | |
| metric_cols = st.columns(4) | |
| metric_cols[0].metric("Detected domain", result.detected_domain) | |
| metric_cols[1].metric("ML score", f"{result.score_breakdown.ml_score:.0%}") | |
| metric_cols[2].metric("Domain score", f"{result.score_breakdown.domain_score:.0%}") | |
| metric_cols[3].metric("Reward", f"{result.score_breakdown.reward:.0%}") | |
| st.bar_chart(result.domain_confidences) | |
| st.caption(result.summary) | |
| if result is not None: | |
| overview_tab, suggestions_tab, domain_tab, static_tab = st.tabs( | |
| ["Overview", "Suggestions", "Domain Detail", "Static Analysis"] | |
| ) | |
| with overview_tab: | |
| st.subheader("Improvement Plan") | |
| for step in result.improvement_plan: | |
| st.write(f"- {step}") | |
| st.subheader("Complexity") | |
| st.write( | |
| { | |
| "time_complexity": result.static_analysis.time_complexity, | |
| "space_complexity": result.static_analysis.space_complexity, | |
| "cyclomatic_complexity": result.static_analysis.cyclomatic_complexity, | |
| } | |
| ) | |
| with suggestions_tab: | |
| st.subheader("Suggestions") | |
| for suggestion in result.domain_analysis.suggestions: | |
| st.write(f"- {suggestion}") | |
| if result.domain_analysis.issues: | |
| st.subheader("Issues") | |
| for issue in result.domain_analysis.issues: | |
| st.write(f"- [{issue.severity}] {issue.title}: {issue.description}") | |
| with domain_tab: | |
| st.subheader("Domain Highlights") | |
| st.json(result.domain_analysis.highlights) | |
| st.write(f"Domain score: {result.domain_analysis.domain_score:.0%}") | |
| with static_tab: | |
| st.subheader("Static Analysis") | |
| st.json(result.static_analysis.model_dump()) | |
| if __name__ == "__main__": | |
| main() | |