"""Streamlit frontend — AMD Enterprise Architecture Strategy Optimizer.""" import sys import os sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) import streamlit as st from dotenv import load_dotenv load_dotenv() st.set_page_config( page_title="AMD EA Optimizer", page_icon="⚡", layout="wide", initial_sidebar_state="expanded", ) from frontend.utils.api_client import get_health, analyze from frontend.utils.terminology import TABS from frontend.components.input_form import render_input_form from frontend.components.roadmap_tab import render_roadmap_tab from frontend.components.epics_tab import render_epics_tab from frontend.components.export_tab import render_export_tab from frontend.components.training_tab import render_training_tab from frontend.components.chat_tab import render_chat_tab from frontend.components.graph_explorer_tab import render_graph_explorer_tab from frontend.components.integrations_tab import render_integrations_tab def render_sidebar(): with st.sidebar: # Use local logo for reliability; original URL was 404 logo_path = os.path.join(os.path.dirname(__file__), "amd_logo.svg") st.image(logo_path, width=120) st.markdown("## EA Strategy Optimizer") st.markdown( "Powered by **AMD MI300X · ROCm · Qwen-72B**\n\n" "Knowledge Graph → AI Prioritiser → Qwen-72B on AMD MI300X → Compliance Validator" ) st.divider() health = get_health() status = health.get("status", "unknown") color = "green" if status == "ok" else "orange" if status == "degraded" else "red" st.markdown(f"**Backend:** :{color}[{status}]") gpu = health.get("gpu") or {} if gpu.get("available"): st.markdown(f"**GPU:** {gpu.get('device', '')}") if gpu.get("rocm"): st.markdown(f"**ROCm:** {gpu['rocm']}") else: st.caption("GPU: CPU mode") neo4j_status = health.get("neo4j", "unknown") neo4j_color = "green" if neo4j_status == "connected" else "red" st.markdown(f"**Knowledge Graph:** :{neo4j_color}[{neo4j_status}]") st.divider() st.markdown( "**Track 1 — AI Agents & Agentic Workflows**\n\n" "AMD Developer Hackathon 2026\n\n" "[GitHub](https://github.com) | [HF Space](https://huggingface.co)" ) def main(): render_sidebar() st.title("Enterprise Architecture Strategy Optimizer") st.markdown( "Transform business goals into **governance-grounded strategic roadmaps** — " "with Jira-ready initiatives, business scenarios, and regulatory obligations — " "powered by **AMD MI300X**, Knowledge Graph-RAG, and AI-driven prioritisation." ) # ── Tabs — EA Advisor is the landing tab ───────────────────────────────── ( tab_chat, tab_graph, tab_roadmap, tab_epics, tab_integrations, tab_export, tab_training, ) = st.tabs(TABS) # EA Advisor — always rendered with tab_chat: render_chat_tab() # Graph Explorer — always rendered with tab_graph: render_graph_explorer_tab() # Strategic Roadmap — input form + pipeline results with tab_roadmap: if "result" not in st.session_state: st.session_state["result"] = None payload = render_input_form() if payload is not None: with st.spinner( "Running agentic pipeline: " "Knowledge Graph → AI Prioritiser → Qwen-72B on AMD MI300X → Compliance Validator…" ): try: result = analyze(payload) st.session_state["result"] = result st.success("Strategic roadmap generated successfully!") except Exception as exc: st.error(f"Pipeline failed: {exc}") result = st.session_state.get("result") if result: render_roadmap_tab(result) else: st.info( "Fill in the Organisation Profile above and click **Generate Strategic Roadmap**, " "or use one of the demo scenario buttons." ) with tab_epics: result = st.session_state.get("result") if result: render_epics_tab(result) else: st.info("Generate a strategic roadmap first to view Initiatives & Scenarios.") with tab_integrations: result = st.session_state.get("result") render_integrations_tab(result) with tab_export: result = st.session_state.get("result") if result: render_export_tab(result) else: st.info("Generate a strategic roadmap first to export.") # AI Learning Engine — always rendered with tab_training: render_training_tab() if __name__ == "__main__": main()