Scodey / app.py
DeepActionPotential's picture
Upload folder using huggingface_hub
5249394 verified
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()