| import streamlit as st
|
| import asyncio
|
| from agents.project_manager import ProjectManagerAgent
|
| import json
|
| from typing import Dict, Any
|
|
|
|
|
| project_manager = ProjectManagerAgent()
|
|
|
|
|
| st.set_page_config(
|
| page_title="AI Development Pod",
|
| page_icon="🤖",
|
| layout="wide"
|
| )
|
|
|
|
|
| st.markdown("""
|
| <style>
|
| .main {
|
| padding: 2rem;
|
| }
|
| .stButton>button {
|
| width: 100%;
|
| }
|
| .stTextArea>div>div>textarea {
|
| height: 200px;
|
| }
|
| .progress-bar {
|
| height: 10px;
|
| background-color: #f0f0f0;
|
| border-radius: 5px;
|
| margin: 10px 0;
|
| }
|
| .progress-bar-fill {
|
| height: 100%;
|
| background-color: #4CAF50;
|
| border-radius: 5px;
|
| transition: width 0.3s ease-in-out;
|
| }
|
| </style>
|
| """, unsafe_allow_html=True)
|
|
|
|
|
| st.title("🤖 AI Development Pod")
|
| st.markdown("""
|
| This is an AI-powered virtual development team that can handle your software project from requirements to testing.
|
| Simply enter your project requirements and let the AI team do the rest!
|
| """)
|
|
|
|
|
| st.sidebar.title("Navigation")
|
| page = st.sidebar.radio("Go to", ["Start Project", "Project Status", "Quality Check"])
|
|
|
| def display_progress(messages: list):
|
| """Display progress based on workflow messages"""
|
| steps = {
|
| "User stories created successfully": 20,
|
| "Design created successfully": 40,
|
| "Code generated successfully": 60,
|
| "Test cases created successfully": 80,
|
| "Tests executed successfully": 100
|
| }
|
|
|
| current_progress = 0
|
| for message in messages:
|
| if message in steps:
|
| current_progress = max(current_progress, steps[message])
|
|
|
| st.markdown(f"""
|
| <div class="progress-bar">
|
| <div class="progress-bar-fill" style="width: {current_progress}%"></div>
|
| </div>
|
| <p style="text-align: center;">{current_progress}% Complete</p>
|
| """, unsafe_allow_html=True)
|
|
|
| for message in messages:
|
| st.info(message)
|
|
|
| async def run_project(requirements: str) -> Dict[str, Any]:
|
| """Run the project workflow"""
|
| return await project_manager.start_project(requirements)
|
|
|
| async def get_project_status() -> Dict[str, Any]:
|
| """Get the project status"""
|
| return await project_manager.get_status()
|
|
|
| async def run_quality_check() -> Dict[str, Any]:
|
| """Run the quality check"""
|
| return await project_manager.check_quality()
|
|
|
| if page == "Start Project":
|
| st.header("Start New Project")
|
|
|
|
|
| requirements = st.text_area(
|
| "Enter your project requirements:",
|
| placeholder="Describe your project requirements in detail...",
|
| height=200
|
| )
|
|
|
| if st.button("Start Project"):
|
| if requirements:
|
| with st.spinner("Processing your project..."):
|
|
|
| result = asyncio.run(run_project(requirements))
|
|
|
|
|
| display_progress(result["messages"])
|
|
|
|
|
| tab1, tab2, tab3, tab4 = st.tabs(["User Stories", "Design", "Code", "Test Results"])
|
|
|
| with tab1:
|
| st.subheader("User Stories")
|
| st.markdown(result["user_stories"])
|
|
|
| with tab2:
|
| st.subheader("Design")
|
| st.markdown(result["design"])
|
|
|
| with tab3:
|
| st.subheader("Generated Code")
|
| st.code(result["code"], language="python")
|
|
|
| with tab4:
|
| st.subheader("Test Results")
|
| st.markdown(result["test_results"])
|
| else:
|
| st.error("Please enter project requirements")
|
|
|
| elif page == "Project Status":
|
| st.header("Project Status")
|
|
|
| if st.button("Check Status"):
|
| with st.spinner("Getting project status..."):
|
| status = asyncio.run(get_project_status())
|
|
|
|
|
| col1, col2, col3, col4 = st.columns(4)
|
|
|
| with col1:
|
| st.metric("User Stories", status["data"]["user_stories"])
|
| with col2:
|
| st.metric("Designs", status["data"]["designs"])
|
| with col3:
|
| st.metric("Code Files", status["data"]["code"])
|
| with col4:
|
| st.metric("Test Results", status["data"]["test_results"])
|
|
|
| elif page == "Quality Check":
|
| st.header("Quality Check")
|
|
|
| if st.button("Run Quality Check"):
|
| with st.spinner("Running quality check..."):
|
| quality_report = asyncio.run(run_quality_check())
|
|
|
| st.subheader("Quality Report")
|
| st.markdown(quality_report["quality_report"])
|
|
|
|
|
| st.markdown("---")
|
| st.markdown("""
|
| <div style='text-align: center'>
|
| <p>AI Development Pod - Powered by Groq's Gemma2-9b-it and LangGraph</p>
|
| </div>
|
| """, unsafe_allow_html=True) |