Spaces:
Runtime error
Runtime error
Upload folder using huggingface_hub
Browse files- frontend/pages/6_About.py +53 -50
frontend/pages/6_About.py
CHANGED
|
@@ -9,7 +9,7 @@ st.markdown("""
|
|
| 9 |
|
| 10 |
html, body, [class*="css"] {
|
| 11 |
font-family: 'Inter', sans-serif;
|
| 12 |
-
color: #
|
| 13 |
}
|
| 14 |
|
| 15 |
.main {
|
|
@@ -18,73 +18,76 @@ html, body, [class*="css"] {
|
|
| 18 |
|
| 19 |
h1 {
|
| 20 |
font-weight: 800 !important;
|
| 21 |
-
letter-spacing: -
|
| 22 |
-
color: #
|
| 23 |
-
font-size:
|
| 24 |
-
margin-bottom: 0.
|
| 25 |
}
|
| 26 |
|
| 27 |
h3 {
|
| 28 |
font-weight: 700 !important;
|
| 29 |
-
color: #
|
| 30 |
-
margin-top:
|
| 31 |
-
font-size:
|
|
|
|
| 32 |
}
|
| 33 |
|
| 34 |
p, li, div {
|
| 35 |
-
font-size: 1.
|
| 36 |
-
line-height: 1.
|
|
|
|
| 37 |
}
|
| 38 |
|
| 39 |
.tech-badge {
|
| 40 |
display: inline-block;
|
| 41 |
-
padding:
|
| 42 |
-
margin: 0
|
| 43 |
border-radius: 50px;
|
| 44 |
-
font-size: 0.
|
| 45 |
font-weight: 600;
|
| 46 |
-
background: rgba(
|
| 47 |
-
border: 1px solid rgba(
|
| 48 |
-
color: #
|
| 49 |
-
transition: all 0.3s
|
| 50 |
}
|
| 51 |
|
| 52 |
.tech-badge:hover {
|
| 53 |
-
background: rgba(
|
| 54 |
-
border-color: #
|
| 55 |
-
transform: translateY(-
|
| 56 |
-
box-shadow: 0
|
| 57 |
}
|
| 58 |
|
| 59 |
.live-link {
|
| 60 |
text-decoration: none;
|
| 61 |
font-weight: 600;
|
| 62 |
-
color: #
|
| 63 |
-
border-bottom: 1px dashed
|
| 64 |
transition: all 0.2s ease;
|
| 65 |
}
|
| 66 |
|
| 67 |
.live-link:hover {
|
| 68 |
-
color: #
|
| 69 |
-
border-bottom
|
| 70 |
}
|
| 71 |
|
| 72 |
-
/* Glass cards
|
| 73 |
div[data-testid="stExpander"], .stAlert {
|
| 74 |
-
background: rgba(255, 255, 255, 0.
|
| 75 |
-
border: 1px solid rgba(255, 255, 255, 0.
|
| 76 |
-
border-radius:
|
| 77 |
-
backdrop-filter: blur(
|
|
|
|
| 78 |
}
|
| 79 |
|
| 80 |
-
/*
|
| 81 |
-
.stAlert p, .stAlert div {
|
| 82 |
-
color: #
|
| 83 |
-
font-
|
| 84 |
}
|
| 85 |
|
| 86 |
.stMarkdown {
|
| 87 |
-
margin-bottom:
|
| 88 |
}
|
| 89 |
|
| 90 |
</style>
|
|
@@ -118,29 +121,29 @@ graph = graphviz.Digraph(node_attr={'shape': 'box', 'style': 'rounded,filled', '
|
|
| 118 |
graph_attr={'rankdir': 'TB', 'splines': 'ortho', 'nodesep': '1.0', 'bgcolor': 'transparent', 'fontcolor': 'white'})
|
| 119 |
|
| 120 |
# Define UI & API nodes at the top
|
| 121 |
-
graph.node('UI', 'Streamlit Frontend\nInteractive Dashboard (IST)', fillcolor='#
|
| 122 |
-
graph.node('API', 'FastAPI Backend\nInternal Routing (UTC)', fillcolor='#
|
| 123 |
-
graph.node('HUB', 'HF Hub Dataset\nCentralized History Store', shape='folder', fillcolor='#
|
| 124 |
-
graph.node('DB', 'SQLite DB\nLocal Instance Cache', shape='cylinder', fillcolor='#
|
| 125 |
|
| 126 |
# Core connections
|
| 127 |
-
graph.edge('UI', 'API', label=' internal localhost:8000', color='#
|
| 128 |
-
graph.edge('API', 'DB', label=' Read/Write', color='#
|
| 129 |
-
graph.edge('API', 'HUB', label=' HfApi Sync (Persistent)', color='#
|
| 130 |
|
| 131 |
# Machine Learning Subgraph
|
| 132 |
with graph.subgraph(name='cluster_ml') as ml:
|
| 133 |
-
ml.attr(label='Machine Learning & Inference Pipeline', style='dashed', color='#
|
| 134 |
-
ml.node('ENS', 'Ensemble Engine\nSoft-Voting Aggregator', shape='diamond', fillcolor='#
|
| 135 |
-
ml.node('MODELS', 'Classifiers\n(RF, SVM, LogReg, NN, KNN)', fillcolor='#
|
| 136 |
-
ml.node('SHAP', 'SHAP Explainer\nFeature Impact Analysis', fillcolor='#
|
| 137 |
|
| 138 |
# Hardware Export Subgraph
|
| 139 |
with graph.subgraph(name='cluster_edge') as edge:
|
| 140 |
-
edge.attr(label='Hardware & Edge AI Export', style='dashed', color='#
|
| 141 |
-
edge.node('TRANS', 'C-Code Transpiler\nINT8 Quantization', fillcolor='#
|
| 142 |
-
edge.node('HEADER', 'tinyml_model.h\nOptimized Header File', shape='note', fillcolor='#
|
| 143 |
-
edge.node('MCU', 'ESP32 / ARM Cortex-M\nMicrocontroller Node', fillcolor='#
|
| 144 |
|
| 145 |
# Map Cross-cluster edges
|
| 146 |
graph.edge('API', 'ENS', label=' Predict', color='#cccccc', fontcolor='#cccccc')
|
|
|
|
| 9 |
|
| 10 |
html, body, [class*="css"] {
|
| 11 |
font-family: 'Inter', sans-serif;
|
| 12 |
+
color: #FAFAFA;
|
| 13 |
}
|
| 14 |
|
| 15 |
.main {
|
|
|
|
| 18 |
|
| 19 |
h1 {
|
| 20 |
font-weight: 800 !important;
|
| 21 |
+
letter-spacing: -1.5px !important;
|
| 22 |
+
color: #FFFFFF !important;
|
| 23 |
+
font-size: 3.2rem !important;
|
| 24 |
+
margin-bottom: 0.8rem !important;
|
| 25 |
}
|
| 26 |
|
| 27 |
h3 {
|
| 28 |
font-weight: 700 !important;
|
| 29 |
+
color: #AED9E0 !important; /* Sky Blue Pastel */
|
| 30 |
+
margin-top: 2.5rem !important;
|
| 31 |
+
font-size: 2rem !important;
|
| 32 |
+
letter-spacing: -0.5px !important;
|
| 33 |
}
|
| 34 |
|
| 35 |
p, li, div {
|
| 36 |
+
font-size: 1.15rem !important;
|
| 37 |
+
line-height: 1.7 !important;
|
| 38 |
+
color: #E0E0E0 !important;
|
| 39 |
}
|
| 40 |
|
| 41 |
.tech-badge {
|
| 42 |
display: inline-block;
|
| 43 |
+
padding: 8px 18px;
|
| 44 |
+
margin: 0 10px 12px 0;
|
| 45 |
border-radius: 50px;
|
| 46 |
+
font-size: 0.95rem;
|
| 47 |
font-weight: 600;
|
| 48 |
+
background: rgba(174, 217, 224, 0.1); /* Sky Blue Tint */
|
| 49 |
+
border: 1px solid rgba(174, 217, 224, 0.3);
|
| 50 |
+
color: #AED9E0;
|
| 51 |
+
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
| 52 |
}
|
| 53 |
|
| 54 |
.tech-badge:hover {
|
| 55 |
+
background: rgba(174, 217, 224, 0.2);
|
| 56 |
+
border-color: #AED9E0;
|
| 57 |
+
transform: translateY(-3px);
|
| 58 |
+
box-shadow: 0 6px 20px rgba(174, 217, 224, 0.15);
|
| 59 |
}
|
| 60 |
|
| 61 |
.live-link {
|
| 62 |
text-decoration: none;
|
| 63 |
font-weight: 600;
|
| 64 |
+
color: #AED9E0;
|
| 65 |
+
border-bottom: 1px dashed rgba(174, 217, 224, 0.5);
|
| 66 |
transition: all 0.2s ease;
|
| 67 |
}
|
| 68 |
|
| 69 |
.live-link:hover {
|
| 70 |
+
color: #FFFFFF;
|
| 71 |
+
border-bottom: 1px solid #FFFFFF;
|
| 72 |
}
|
| 73 |
|
| 74 |
+
/* Enhanced Glass cards */
|
| 75 |
div[data-testid="stExpander"], .stAlert {
|
| 76 |
+
background: rgba(255, 255, 255, 0.04) !important;
|
| 77 |
+
border: 1px solid rgba(255, 255, 255, 0.08) !important;
|
| 78 |
+
border-radius: 20px !important;
|
| 79 |
+
backdrop-filter: blur(16px) saturate(180%);
|
| 80 |
+
padding: 1.5rem !important;
|
| 81 |
}
|
| 82 |
|
| 83 |
+
/* Clinical Contrast for Info Blocks */
|
| 84 |
+
.stAlert p, .stAlert div, .stAlert b, .stAlert strong {
|
| 85 |
+
color: #FFFFFF !important;
|
| 86 |
+
font-size: 1.15rem !important;
|
| 87 |
}
|
| 88 |
|
| 89 |
.stMarkdown {
|
| 90 |
+
margin-bottom: 1.2rem;
|
| 91 |
}
|
| 92 |
|
| 93 |
</style>
|
|
|
|
| 121 |
graph_attr={'rankdir': 'TB', 'splines': 'ortho', 'nodesep': '1.0', 'bgcolor': 'transparent', 'fontcolor': 'white'})
|
| 122 |
|
| 123 |
# Define UI & API nodes at the top
|
| 124 |
+
graph.node('UI', 'Streamlit Frontend\nInteractive Dashboard (IST)', fillcolor='#AED9E0', fontcolor='#0e1117', color='#AED9E0', penwidth='2')
|
| 125 |
+
graph.node('API', 'FastAPI Backend\nInternal Routing (UTC)', fillcolor='#A8E6CF', fontcolor='#0e1117', color='#A8E6CF', penwidth='2')
|
| 126 |
+
graph.node('HUB', 'HF Hub Dataset\nCentralized History Store', shape='folder', fillcolor='#FFF9C4', fontcolor='#0e1117', color='#FFF9C4', penwidth='2')
|
| 127 |
+
graph.node('DB', 'SQLite DB\nLocal Instance Cache', shape='cylinder', fillcolor='#DCCBEC', fontcolor='#0e1117', color='#DCCBEC', penwidth='2')
|
| 128 |
|
| 129 |
# Core connections
|
| 130 |
+
graph.edge('UI', 'API', label=' internal localhost:8000', color='#555555', fontcolor='#aaaaaa')
|
| 131 |
+
graph.edge('API', 'DB', label=' Read/Write', color='#555555', fontcolor='#aaaaaa')
|
| 132 |
+
graph.edge('API', 'HUB', label=' HfApi Sync (Persistent)', color='#555555', fontcolor='#aaaaaa')
|
| 133 |
|
| 134 |
# Machine Learning Subgraph
|
| 135 |
with graph.subgraph(name='cluster_ml') as ml:
|
| 136 |
+
ml.attr(label='Machine Learning & Inference Pipeline', style='dashed', color='#333333', fontcolor='#888888')
|
| 137 |
+
ml.node('ENS', 'Ensemble Engine\nSoft-Voting Aggregator', shape='diamond', fillcolor='#FFDAB9', fontcolor='#0e1117', color='#FFDAB9', penwidth='2')
|
| 138 |
+
ml.node('MODELS', 'Classifiers\n(RF, SVM, LogReg, NN, KNN)', fillcolor='#FFDAB9', fontcolor='#0e1117', color='#FFDAB9', penwidth='2')
|
| 139 |
+
ml.node('SHAP', 'SHAP Explainer\nFeature Impact Analysis', fillcolor='#FFDAB9', fontcolor='#0e1117', color='#FFDAB9', penwidth='2')
|
| 140 |
|
| 141 |
# Hardware Export Subgraph
|
| 142 |
with graph.subgraph(name='cluster_edge') as edge:
|
| 143 |
+
edge.attr(label='Hardware & Edge AI Export', style='dashed', color='#333333', fontcolor='#888888')
|
| 144 |
+
edge.node('TRANS', 'C-Code Transpiler\nINT8 Quantization', fillcolor='#FFD1DC', fontcolor='#0e1117', color='#FFD1DC', penwidth='2')
|
| 145 |
+
edge.node('HEADER', 'tinyml_model.h\nOptimized Header File', shape='note', fillcolor='#FFD1DC', fontcolor='#0e1117', color='#FFD1DC', penwidth='2')
|
| 146 |
+
edge.node('MCU', 'ESP32 / ARM Cortex-M\nMicrocontroller Node', fillcolor='#FFD1DC', fontcolor='#0e1117', color='#FFD1DC', penwidth='2')
|
| 147 |
|
| 148 |
# Map Cross-cluster edges
|
| 149 |
graph.edge('API', 'ENS', label=' Predict', color='#cccccc', fontcolor='#cccccc')
|