Scodey / app.py
DeepActionPotential's picture
Upload folder using huggingface_hub
5249394 verified
Raw
History Blame Contribute Delete
3.75 kB
from typing import List
import streamlit as st
from tkinter import Tk, filedialog
from streamlit.components.v1 import html
from autogen import ConversableAgent
from ui.introductory_page import IntroductoryPage
from ui.analysis_page import NavigationPanel, CodePreview, ResultsDisplay
from agents.code_overview_agents import CodeSummarizerAgent, CodeSmellDetectorAgent
from agents.code_structure_agents import DesignPatternDetectorAgent, DesignPatternRecommenderAgent, SOLIDPrinciplesManagerAgent
from agents.code_visualization_agents import MermaideDiagramAgent
from config import DefaultSettings
from utils.utils import load_config, load_css
# Configuration and Agent Initialization
llm_config = load_config(DefaultSettings().default_model_type)
agents = [
CodeSummarizerAgent().make_agent(llm_config),
CodeSmellDetectorAgent().make_agent(llm_config),
DesignPatternDetectorAgent().make_agent(llm_config),
DesignPatternRecommenderAgent().make_agent(llm_config),
SOLIDPrinciplesManagerAgent().make_agent(llm_config),
MermaideDiagramAgent().make_agent(llm_config)
]
class AnalysisManager:
"""Manages and provides access to analysis results."""
def __init__(self, results):
load_css("./ui/styles.css")
self.results = results
def get_file_data(self, file_path):
return self.results.get(file_path, {})
def list_files(self):
return list(self.results.keys())
class CodeAnalysisApp:
"""Main application orchestrator."""
def __init__(self, agents: List[ConversableAgent]) -> None:
self.agents = agents
def run(self):
"""Main application entry point."""
st.set_page_config(
layout="wide",
initial_sidebar_state="expanded",
page_icon="🔍"
)
if not self._check_analysis_state():
IntroductoryPage(self.agents).render()
return
self._setup_interface()
self._render_main_view()
self._add_reset_button()
def _check_analysis_state(self):
"""Validate analysis completion status."""
if 'analysis_done' not in st.session_state:
st.session_state.analysis_done = False
return st.session_state.get('results') and st.session_state.analysis_done
def _setup_interface(self):
"""Initialize application components."""
load_css("./ui/styles.css")
self.analysis = AnalysisManager(st.session_state.results)
self.nav = NavigationPanel(self.analysis.list_files())
def _render_main_view(self):
"""Display main two-column interface."""
selected_file = self.nav.render()
file_data = self.analysis.get_file_data(selected_file)
col1, col2 = st.columns([0.5, 0.5])
with col1:
CodePreview(
file_path=selected_file,
language=file_data['language']
).render()
with col2:
ResultsDisplay(
file_data['analysis_results']
).render()
def _add_reset_button(self):
"""Add sidebar reset functionality."""
st.sidebar.button(
"New Analysis",
on_click=self._reset_state
)
def _reset_state(self):
"""Clear analysis-related session state."""
state_keys = ['results', 'analysis_done', 'selected_dir', 'prev_dir']
for key in state_keys:
if key in st.session_state:
del st.session_state[key]
st.rerun()
if __name__ == "__main__":
CodeAnalysisApp(agents).run()