petter2025 commited on
Commit
ebdbbf6
·
verified ·
1 Parent(s): d6a094c

Update ui/components.py

Browse files
Files changed (1) hide show
  1. ui/components.py +108 -192
ui/components.py CHANGED
@@ -1,246 +1,162 @@
1
  """
2
- ARF UI Components
3
- Gradio-first, Hugging Face Spaces safe
4
- Compatible with app.py v3.8.0
 
 
 
 
 
5
  """
6
 
7
- from __future__ import annotations
8
-
9
  import gradio as gr
10
- import plotly.graph_objects as go
11
- from typing import Dict, Any, List
12
 
13
 
14
  # ============================================================
15
- # HEADER / FOOTER
16
  # ============================================================
17
-
18
- def create_header(version: str, enterprise: bool = False):
19
- badge = "ENTERPRISE EDITION" if enterprise else "OSS EDITION"
20
- return gr.HTML(
21
- f"""
22
- <div style="padding:20px;border-bottom:1px solid #eee">
23
- <h1>🚀 Agentic Reliability Framework</h1>
24
- <p><b>Version:</b> {version} · <b>{badge}</b></p>
25
- </div>
26
- """
27
- )
28
-
29
-
30
- def create_footer():
31
  return gr.HTML(
32
  """
33
- <div style="padding:20px;border-top:1px solid #eee;text-align:center;color:#666">
34
- ARF © 2025 · Self-Healing Agentic Systems
 
35
  </div>
 
36
  """
37
  )
38
 
39
 
40
- def create_status_bar():
 
 
 
41
  return gr.HTML(
42
  """
43
- <div style="padding:10px;background:#f5f7fa;border-radius:8px">
44
- System Online · 🧠 Agentic Core Active · 📦 OSS Mode
45
  </div>
46
  """
47
  )
48
 
49
 
50
  # ============================================================
51
- # TAB 1 — INCIDENT DEMO
52
  # ============================================================
53
-
54
- def create_tab1_incident_demo(scenarios: Dict[str, Any], default: str):
55
- scenario_dropdown = gr.Dropdown(
56
- choices=list(scenarios.keys()),
57
- value=default,
58
- label="Incident Scenario"
59
- )
60
-
61
- scenario_description = gr.Markdown("Select a scenario to begin analysis.")
62
- metrics_display = gr.JSON(label="Live Metrics")
63
- impact_display = gr.Markdown("### Estimated Business Impact")
64
- timeline_output = gr.Markdown("Timeline will render here")
65
-
66
- oss_btn = gr.Button("Run OSS Analysis")
67
- enterprise_btn = gr.Button("Execute Enterprise Healing", variant="primary")
68
- approval_toggle = gr.Checkbox(label="Require Human Approval", value=True)
69
-
70
- demo_btn = gr.Button("Run Demo")
71
- approval_display = gr.HTML()
72
- oss_results_display = gr.JSON(label="OSS Results")
73
- enterprise_results_display = gr.JSON(label="Enterprise Results")
74
-
75
- return (
76
- scenario_dropdown,
77
- scenario_description,
78
- metrics_display,
79
- impact_display,
80
- timeline_output,
81
- oss_btn,
82
- enterprise_btn,
83
- approval_toggle,
84
- demo_btn,
85
- approval_display,
86
- oss_results_display,
87
- enterprise_results_display,
88
- )
89
 
90
 
91
  # ============================================================
92
- # TAB 2 — ROI / BUSINESS IMPACT
93
  # ============================================================
 
 
 
94
 
95
- def create_tab2_business_roi(scenarios: Dict[str, Any]):
96
- dashboard_output = gr.Plot(label="Executive ROI Dashboard")
97
-
98
- roi_scenario_dropdown = gr.Dropdown(
99
- choices=list(scenarios.keys()),
100
- label="Scenario"
101
- )
 
102
 
103
- monthly_slider = gr.Slider(
104
- 1, 100, value=15, step=1, label="Monthly Incidents"
105
- )
106
-
107
- team_slider = gr.Slider(
108
- 1, 50, value=5, step=1, label="On-call Team Size"
109
- )
110
-
111
- calculate_btn = gr.Button("Calculate ROI", variant="primary")
112
- roi_output = gr.JSON(label="ROI Breakdown")
113
- roi_chart = gr.Plot(label="ROI Multiplier")
114
-
115
- return (
116
- dashboard_output,
117
- roi_scenario_dropdown,
118
- monthly_slider,
119
- team_slider,
120
- calculate_btn,
121
- roi_output,
122
- roi_chart,
123
- )
124
 
125
 
126
  # ============================================================
127
- # TAB 3 — ENTERPRISE FEATURES
128
  # ============================================================
129
-
130
  def create_tab3_enterprise_features():
131
- license_display = gr.JSON(label="License Status")
132
-
133
- validate_btn = gr.Button("Validate License")
134
- trial_btn = gr.Button("Start Trial")
135
- upgrade_btn = gr.Button("Upgrade")
136
 
137
- mcp_mode = gr.Radio(
138
- ["advisory", "approval", "autonomous"],
139
- value="advisory",
140
- label="MCP Execution Mode"
141
- )
142
-
143
- mcp_mode_info = gr.JSON(label="Mode Details")
144
-
145
- features_table = gr.Dataframe(
146
- headers=["Feature", "Available"],
147
- value=[
148
- ["Autonomous Healing", "Enterprise"],
149
- ["Audit Trail", "Enterprise"],
150
- ["Compliance", "Enterprise"],
151
- ],
152
- interactive=False
153
- )
154
-
155
- integrations_table = gr.Dataframe(
156
- headers=["Integration", "Status"],
157
- value=[
158
- ["Kubernetes", "Ready"],
159
- ["AWS", "Ready"],
160
- ["GCP", "Ready"],
161
- ],
162
- interactive=False
163
- )
164
 
165
- return (
166
- license_display,
167
- validate_btn,
168
- trial_btn,
169
- upgrade_btn,
170
- mcp_mode,
171
- mcp_mode_info,
172
- features_table,
173
- integrations_table,
174
- )
175
 
176
 
177
  # ============================================================
178
  # TAB 4 — AUDIT TRAIL
179
  # ============================================================
180
-
181
  def create_tab4_audit_trail():
182
- refresh_btn = gr.Button("Refresh")
183
- clear_btn = gr.Button("Clear")
184
- export_btn = gr.Button("Export")
185
 
186
- execution_table = gr.Dataframe(
187
- headers=["Time", "Scenario", "Mode", "Status", "Savings", "Details"],
188
- interactive=False
189
- )
 
190
 
191
- incident_table = gr.Dataframe(
192
- headers=["Time", "Component", "Scenario", "Severity", "Status"],
193
- interactive=False
194
- )
195
-
196
- export_text = gr.Textbox(
197
- label="Exported Audit JSON",
198
- lines=15
199
- )
200
-
201
- return (
202
- refresh_btn,
203
- clear_btn,
204
- export_btn,
205
- execution_table,
206
- incident_table,
207
- export_text,
208
- )
209
 
210
 
211
  # ============================================================
212
  # TAB 5 — LEARNING ENGINE
213
  # ============================================================
214
-
215
  def create_tab5_learning_engine():
216
- learning_graph = gr.Plot(label="Learning Graph")
 
 
 
 
 
 
 
 
 
 
217
 
218
- graph_type = gr.Dropdown(
219
- ["patterns", "performance", "confidence"],
220
- value="patterns",
221
- label="Graph Type"
222
- )
223
 
224
- show_labels = gr.Checkbox(value=True, label="Show Labels")
225
-
226
- search_query = gr.Textbox(label="Search Incidents")
227
- search_btn = gr.Button("Search")
228
- clear_btn_search = gr.Button("Clear")
229
-
230
- search_results = gr.JSON(label="Search Results")
231
- stats_display = gr.JSON(label="Learning Stats")
232
- patterns_display = gr.JSON(label="Detected Patterns")
233
- performance_display = gr.JSON(label="Performance Metrics")
234
-
235
- return (
236
- learning_graph,
237
- graph_type,
238
- show_labels,
239
- search_query,
240
- search_btn,
241
- clear_btn_search,
242
- search_results,
243
- stats_display,
244
- patterns_display,
245
- performance_display,
246
  )
 
1
  """
2
+ Minimalist, Math-First UI Components for ARF OSS
3
+ Designed for engineers, not marketers.
4
+
5
+ Principles:
6
+ - Deterministic layout
7
+ - Low visual entropy
8
+ - Computational semantics
9
+ - OSS-first credibility
10
  """
11
 
 
 
12
  import gradio as gr
13
+ from typing import List, Dict, Any
 
14
 
15
 
16
  # ============================================================
17
+ # HEADER
18
  # ============================================================
19
+ def create_header() -> gr.HTML:
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  return gr.HTML(
21
  """
22
+ <div style="font-family: monospace; padding-bottom: 8px;">
23
+ <strong>ARF v3.3.6 (OSS)</strong> · Agentic Reliability Engine<br/>
24
+ Status: <span style="color: #2ecc71;">READY</span>
25
  </div>
26
+ <hr/>
27
  """
28
  )
29
 
30
 
31
+ # ============================================================
32
+ # STATUS BAR
33
+ # ============================================================
34
+ def create_status_bar() -> gr.HTML:
35
  return gr.HTML(
36
  """
37
+ <div style="font-family: monospace; font-size: 13px;">
38
+ core=active | mode=oss | audit=enabled
39
  </div>
40
  """
41
  )
42
 
43
 
44
  # ============================================================
45
+ # TAB 1 — INCIDENT INPUT & EXECUTION
46
  # ============================================================
47
+ def create_tab1_incident_demo():
48
+ with gr.Column():
49
+ gr.Markdown("### 1. Incident Input", elem_classes=["mono"])
50
+
51
+ scenario = gr.Dropdown(
52
+ label="Incident Scenario",
53
+ choices=[
54
+ "cache_miss_storm",
55
+ "database_connection_leak",
56
+ "api_rate_limit_spike",
57
+ "memory_pressure_event",
58
+ ],
59
+ value="cache_miss_storm",
60
+ )
61
+
62
+ mode = gr.Radio(
63
+ label="Execution Mode",
64
+ choices=["advisory", "approval", "autonomous"],
65
+ value="advisory",
66
+ )
67
+
68
+ gr.Markdown("### 2. Execute Analysis")
69
+
70
+ run_btn = gr.Button("Run Analysis", variant="primary")
71
+
72
+ return {
73
+ "scenario": scenario,
74
+ "mode": mode,
75
+ "run_btn": run_btn,
76
+ }
 
 
 
 
 
 
77
 
78
 
79
  # ============================================================
80
+ # TAB 2 — BUSINESS IMPACT (OSS SAFE)
81
  # ============================================================
82
+ def create_tab2_business_roi():
83
+ with gr.Column():
84
+ gr.Markdown("### Estimated Impact (Model-Derived)")
85
 
86
+ output = gr.Markdown(
87
+ """
88
+ Loss Rate: $0 / hour
89
+ Recovery Time: N/A
90
+ Confidence Interval: N/A
91
+ """,
92
+ elem_classes=["mono"],
93
+ )
94
 
95
+ return {"roi_output": output}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
 
97
 
98
  # ============================================================
99
+ # TAB 3 — ENTERPRISE FEATURES (LOCKED)
100
  # ============================================================
 
101
  def create_tab3_enterprise_features():
102
+ with gr.Column():
103
+ gr.Markdown("### Enterprise Capabilities (Unavailable in OSS)")
 
 
 
104
 
105
+ gr.Markdown(
106
+ """
107
+ - Autonomous execution
108
+ - Multi-agent arbitration
109
+ - Policy enforcement
110
+ - SLA-backed recovery
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
 
112
+ _This OSS build exposes intent only._
113
+ """,
114
+ elem_classes=["mono"],
115
+ )
 
 
 
 
 
 
116
 
117
 
118
  # ============================================================
119
  # TAB 4 — AUDIT TRAIL
120
  # ============================================================
 
121
  def create_tab4_audit_trail():
122
+ with gr.Column():
123
+ gr.Markdown("### Execution Trace")
 
124
 
125
+ audit_log = gr.Dataframe(
126
+ headers=["phase", "status", "Δt (ms)"],
127
+ datatype=["str", "str", "number"],
128
+ row_count=5,
129
+ )
130
 
131
+ return {"audit_log": audit_log}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
 
133
 
134
  # ============================================================
135
  # TAB 5 — LEARNING ENGINE
136
  # ============================================================
 
137
  def create_tab5_learning_engine():
138
+ with gr.Column():
139
+ gr.Markdown("### Learning Engine State")
140
+
141
+ gr.Markdown(
142
+ """
143
+ memory_vectors: enabled
144
+ outcome_feedback: passive
145
+ model_updates: disabled (OSS)
146
+ """,
147
+ elem_classes=["mono"],
148
+ )
149
 
 
 
 
 
 
150
 
151
+ # ============================================================
152
+ # FOOTER
153
+ # ============================================================
154
+ def create_footer() -> gr.HTML:
155
+ return gr.HTML(
156
+ """
157
+ <hr/>
158
+ <div style="font-family: monospace; font-size: 12px;">
159
+ ARF OSS · Apache-2.0 · 2025
160
+ </div>
161
+ """
 
 
 
 
 
 
 
 
 
 
 
162
  )