TheQuantEd's picture
deploy: AMD EA Strategy Optimizer — Neo4j + FastAPI + Streamlit
6252f54
"""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()