fffiloni commited on
Commit
848a549
·
verified ·
1 Parent(s): 08d9789

Upload index.html

Browse files
Files changed (1) hide show
  1. web/index.html +209 -196
web/index.html CHANGED
@@ -7,281 +7,294 @@
7
  <link rel="stylesheet" href="/custom-static/app.css" />
8
  </head>
9
  <body>
10
- <div class="app-shell simple-shell">
11
- <header class="topbar simple-topbar">
12
  <div class="brand">
13
- <div class="brand-mark"></div>
14
  <div>
15
  <h1>Agentic Space Factory</h1>
16
- <p>Build and validate private Hugging Face Spaces.</p>
17
  </div>
18
  </div>
19
- <nav class="top-tabs" aria-label="Primary navigation">
20
- <button class="nav-item active" data-view="build">Build</button>
21
- <button class="nav-item" data-view="progress">Runs</button>
22
- <button class="nav-item" data-view="validate">Space Test</button>
23
- </nav>
24
  <div class="top-actions">
25
  <button class="bucket-pill" id="bucketStatusPill"><span class="status-dot" id="bucketStatusDot"></span><span id="bucketStatusText">Checking bucket…</span></button>
26
  <span class="user-chip" id="userChip">Sign in</span>
 
27
  <a class="logout-link" id="logoutLink" href="/logout" hidden>Logout</a>
28
  </div>
29
  </header>
30
 
31
- <main class="main simple-main">
32
  <section class="auth-panel" id="authPanel" hidden></section>
33
  <section class="operation-status" id="operationStatus" hidden></section>
34
 
35
- <section data-section="build" class="simple-build">
36
- <section class="panel run-storage-card simple-storage-card">
37
- <div>
38
- <span class="eyebrow">Run storage</span>
39
- <strong><span class="status-dot" id="bucketInlineDot"></span><span id="bucketInlineLabel">loading…</span></strong>
40
- <p class="muted">Runs, logs, reports and artifacts are saved in your private bucket.</p>
41
- </div>
42
- <div class="inline-actions">
43
- <button class="secondary small" id="checkBucket">Check bucket</button>
44
- <button class="secondary small" id="createBucket">Create private bucket</button>
45
- </div>
46
- <span class="badge" id="bucketInlineStatus">Checking</span>
47
- </section>
48
-
49
- <section class="panel build-card simple-build-card">
50
- <div class="section-head">
51
  <div>
52
  <span class="eyebrow">New Build</span>
53
  <h2>Launch a private Space</h2>
54
- <p class="muted">Provide a model card or model ID. The factory creates a private Space, tries ZeroGPU first, then validates the deployed app.</p>
55
  </div>
56
  <button class="secondary small" id="prepareNewBuild">Reset form</button>
57
  </div>
58
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  <div class="build-mode-panel" id="buildModePanel">
60
  <strong>Preparing a new build</strong>
61
- <p>This tab only launches new builds. Inspect existing runs in the Runs tab.</p>
62
  </div>
63
 
64
- <div class="simple-build-grid">
65
- <div class="field-stack">
 
 
66
  <label>Run ID<input id="runId" placeholder="auto-generated if empty" /></label>
67
- <label>Model card URL or model ID<input id="modelId" value="Tongyi-MAI/Z-Image-Turbo" /></label>
68
- <label>Target Space name<input id="targetSpace" placeholder="space-factory-z-image-v1" /></label>
69
- <label>Goal / notes<textarea id="buildGoal" rows="5" placeholder="What should this Space do? Any constraints or notes?"></textarea></label>
70
  </div>
 
 
71
 
72
- <div class="field-stack">
 
 
73
  <label>Pi model<input id="piModel" value="Qwen/Qwen3-Coder-Next" /></label>
74
- <label>Implementation mode<select id="implementationMode"><option>full-inference-gated</option><option>full-inference-attempt</option><option>safe-scaffold</option></select></label>
75
  <div class="form-grid two-cols">
76
- <label>Preferred hardware<select id="preferredHardware"><option>zero-a10g</option><option>l40sx1</option><option>a10g-large</option><option>cpu-basic</option></select></label>
77
- <label>Fallback hardware<select id="fallbackHardware"><option>l40sx1</option><option>a10g-large</option><option>a100-large</option><option>h200</option></select></label>
78
  </div>
79
- <label>Expected output type<select id="buildExpectedOutput"><option>text</option><option selected>image</option><option>video</option><option>audio</option><option>any</option></select></label>
80
  <div class="toggle-list simple-toggles">
81
  <label><span>Try ZeroGPU first <small>Preferred for cost efficiency.</small></span><input id="tryZeroGpu" type="checkbox" checked /></label>
82
  <label><span>Allow fixed GPU fallback <small>Use fallback if ZeroGPU is unavailable.</small></span><input id="allowFallback" type="checkbox" checked /></label>
83
- <label><span>Private Space <small>Generated Spaces remain private by default.</small></span><input type="checkbox" checked disabled /></label>
84
  </div>
85
  </div>
86
- </div>
87
 
88
- <section class="launch-summary simple-launch-summary">
89
- <strong>Launch summary</strong>
90
- <ul>
91
- <li>Creates a private Space under your account.</li>
92
- <li>Uses ZeroGPU first, if enabled.</li>
93
- <li>Falls back to fixed GPU when allowed.</li>
94
- <li>Saves logs, artifacts and reports to your connected bucket.</li>
95
- </ul>
96
- </section>
97
-
98
- <button class="primary" id="launchBuild" disabled>Build private Space</button>
99
  <p class="muted build-gate" id="buildGateText">Checking your run bucket before enabling builds…</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  </section>
101
 
102
- <section class="panel launch-result-card" id="launchResultPanel" hidden>
103
  <div class="section-head compact">
104
  <div>
105
- <span class="eyebrow">Launch result</span>
106
- <h2>Build launched</h2>
107
- <p class="muted">The run is now available in the Runs tab.</p>
108
  </div>
109
- <button class="secondary small" data-view-target="progress">Open in Runs</button>
110
  </div>
111
- <div class="detail-grid four">
112
- <div><span>Run ID</span><strong id="launchRunId">—</strong></div>
113
- <div><span>Status</span><strong id="launchStatus">—</strong></div>
114
- <div><span>Target Space</span><strong id="launchSpace">—</strong></div>
115
- <div><span>Hardware</span><strong id="launchHardware">—</strong></div>
 
 
 
116
  </div>
117
- <div class="quick-links extra-links">
118
- <a class="link-btn disabled" id="launchOpenJob" target="_blank">Job ↗</a>
119
- <a class="link-btn disabled" id="launchOpenSpace" target="_blank">Space ↗</a>
120
- <a class="link-btn disabled" id="launchOpenSettings" target="_blank">Settings ↗</a>
121
- <a class="link-btn disabled" id="launchOpenArtifacts" target="_blank">Artifacts ↗</a>
 
122
  </div>
123
- </section>
124
- </section>
125
 
126
- <section data-section="progress" hidden>
127
- <section class="panel full-runs-panel simple-runs-panel">
128
- <div class="section-head">
 
 
129
  <div>
130
- <span class="eyebrow">Runs</span>
131
- <h2>Inspect existing runs</h2><span hidden>Run Explorer</span>
132
- <p class="muted">Search, filter and inspect build status, events, reports and artifacts.</p>
133
  </div>
134
  <div class="inline-actions">
135
- <button class="secondary small" id="refreshRuns">Refresh runs</button>
136
- <button class="secondary small" id="resumeLatestRunFull">Resume latest</button>
137
  </div>
138
  </div>
 
139
 
140
- <div class="full-runs-grid simple-runs-grid">
141
- <aside class="run-list-card simple-run-list">
142
- <div class="search-wrap"><input id="runSearchFull" placeholder="Search runs…" /><span>⌕</span></div>
143
- <div class="run-filters" id="runFilters">
144
- <button class="filter active" data-status="all">All</button>
145
- <button class="filter" data-status="running">Running</button>
146
- <button class="filter" data-status="full_inference_success">Success</button>
147
- <button class="filter" data-status="manual_hardware_required">Manual</button>
148
- <button class="filter" data-status="failed">Failed</button>
149
- </div>
150
- <div id="runsTable" class="runs-table">Loading runs…</div>
151
- </aside>
152
-
153
- <section class="run-detail-card expanded simple-selected-run">
154
- <div class="run-summary-card simple-run-summary" id="runSummaryCard">
155
- <div>
156
- <span class="badge neutral" id="progressStatus">Idle</span>
157
- <h3 id="progressTitle">No run selected</h3>
158
- <p class="muted" id="lastEvent">Select a run to inspect it.</p>
159
- </div>
160
- <div class="summary-meta">
161
- <div><span>Run ID</span><strong id="detailRunId">—</strong></div>
162
- <div><span>Status</span><strong id="homeRunDetailStatus">No run</strong></div>
163
- <div><span>Target Space</span><strong id="detailSpace">—</strong></div>
164
- <div><span>Current step</span><strong id="currentStep">—</strong></div>
165
- <div><span>Elapsed</span><strong id="elapsed">—</strong></div>
166
- <div><span>Last checked</span><strong id="lastPolled">—</strong></div>
167
- </div>
168
- <div class="quick-links">
169
- <a class="link-btn disabled" id="openJob" target="_blank">Job ↗</a>
170
- <a class="link-btn disabled" id="openSpace" target="_blank">Space ↗</a>
171
- <a class="link-btn disabled" id="openSettings" target="_blank">Settings ↗</a>
172
- <a class="link-btn disabled" id="openArtifacts" target="_blank">Artifacts ↗</a>
173
- </div>
174
- </div>
175
-
176
- <div class="progress-bar"><div id="progressFill" style="width:0%"></div></div>
177
- <div class="progress-percent"><strong id="progressPercent">0%</strong><span id="hardwarePlan">ZeroGPU → fixed GPU fallback</span></div>
178
- <div class="timeline" id="timeline"></div>
179
-
180
- <div class="manual-action" id="manualActionPanel" hidden>
181
- <div><strong id="manualActionTitle">Manual hardware required</strong><p id="manualActionText">Open Space settings, choose the recommended GPU, then run Space Test.</p></div>
182
- <div class="inline-actions"><a class="link-btn" id="manualOpenSettings" target="_blank">Open Space settings ↗</a><button class="secondary small" id="manualGoValidate">Prepare Space Test</button></div>
183
- </div>
184
- <div class="poll-warning" id="pollWarning" hidden>Progress polling is temporarily unavailable. Retrying automatically…</div>
185
-
186
- <div class="detail-grid four simple-run-facts">
187
- <div><span>Model</span><strong id="selectedModelId">—</strong></div>
188
- <div><span>Hardware</span><strong id="detailHardware">—</strong></div>
189
  <div><span>Gate</span><strong id="detailGateStatus">—</strong></div>
 
190
  <div><span>Events</span><strong id="detailTraces">—</strong></div>
 
 
191
  </div>
 
 
 
 
 
 
 
 
 
 
 
192
 
193
- <div class="quick-links extra-links selected-links-row">
194
- <a class="link-btn disabled" id="selectedOpenJob" target="_blank">Selected Job ↗</a>
195
- <a class="link-btn disabled" id="selectedOpenSpace" target="_blank">Selected Space ↗</a>
196
- <a class="link-btn disabled" id="selectedOpenSettings" target="_blank">Selected Settings ↗</a>
197
- <a class="link-btn disabled" id="selectedOpenArtifacts" target="_blank">Selected Artifacts ↗</a>
198
- <button class="secondary" id="selectedValidateBtn" disabled>Prefill Space Test</button>
199
- </div>
200
- <div class="blockers" id="selectedBlockers" hidden></div>
201
-
202
- <div class="split-panels simple-split">
203
- <section class="mini-panel">
204
- <h4>Latest events</h4>
205
- <div id="activityFeed" class="activity-feed"><div class="empty">No activity yet.</div></div>
206
- <pre class="events compact-events" id="eventsPanel">No events yet.</pre>
207
- </section>
208
- <section class="mini-panel">
209
- <h4>Diagnostics</h4>
210
- <div class="diagnostic-list">
211
- <div><span>Status</span><strong id="detailJobStatus">—</strong></div>
212
- <div><span>Run detail status</span><strong id="runDetailStatus">—</strong></div>
213
- <div><span>Selected Run</span><strong id="selectedRunId">—</strong></div>
214
- <div><span>Selected Space</span><strong id="selectedTargetSpace">—</strong></div>
215
- <div><span>Selected Hardware</span><strong id="selectedHardware">—</strong></div>
216
- </div>
217
- <div id="statusChips" class="status-chips"></div>
218
- <div class="issue-card" id="issueCard" hidden><strong id="issueTitle">Issue</strong><p id="issueDetail">—</p></div>
219
- <ul class="metric-list" id="metricsList"><li><span>/health</span><strong>pending</strong></li><li><span>/generate smoke test</span><strong>pending</strong></li><li><span>Latency</span><strong>—</strong></li><li><span>Recommended ZeroGPU duration</span><strong>—</strong></li></ul>
220
- <ul id="selectedValidation" hidden></ul>
221
- </section>
222
- </div>
223
 
224
- <div class="split-panels simple-split">
225
- <section class="mini-panel report-card">
226
- <h4>Report preview</h4>
227
- <div class="report-home" id="homeReportPreview"><strong>No run selected</strong><p>Select a run to preview its report.</p></div>
228
- <pre id="reportPreview" class="report-preview">No report selected.</pre>
229
- <button class="secondary full" id="homeValidateBtn" disabled>Prefill Space Test</button>
230
- </section>
231
- <section class="mini-panel">
232
- <h4>Artifacts</h4>
233
- <div id="artifactList" class="artifact-list">No artifacts indexed yet.</div>
234
- </section>
235
- </div>
236
- </section>
237
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
238
  </section>
239
  </section>
240
 
241
- <section data-section="validate" hidden>
242
- <section class="panel validate-panel simple-validate-panel">
243
- <div class="section-head">
244
  <div>
245
  <span class="eyebrow">Space Test</span>
246
  <h2>Validate an existing Space</h2>
247
- <p class="muted">Call the live Gradio API, verify output type, measure latency and store artifacts.</p>
248
  </div>
249
- <span class="badge neutral" id="spaceTestStatus">Pending</span>
250
  </div>
251
- <div class="validate-grid simple-validate-grid">
252
- <div class="field-stack">
253
- <label>Target Space ID<input id="validateSpace" placeholder="alice/z-image-demo" /></label>
254
- <label>API name<input id="validateApi" value="/generate" /></label>
255
- <label>Expected output type<select id="expectedOutput"><option>image</option><option>video</option><option>audio</option><option>text</option><option>any</option></select></label>
256
- <label>Timeout seconds<input id="validateTimeout" value="1800" /></label>
257
- <button class="primary" id="launchValidate">Run smoke test</button>
258
- </div>
259
  <div class="field-stack">
260
- <label>Test args JSON<textarea id="testArgs" rows="7">["a cinematic robot cat astronaut, detailed, studio lighting"]</textarea></label>
261
- <label>Test kwargs JSON<textarea id="testKwargs" rows="5">{}</textarea></label>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
262
  </div>
263
- <div class="result-card" id="spaceTestPreview">
264
- <h3>Result</h3>
265
- <div class="diagnostic-list">
 
 
 
 
 
 
266
  <div><span>Status</span><strong id="spaceTestOutput">Waiting for API test</strong></div>
267
  <div><span>Verdict</span><strong id="spaceTestVerdict">pending</strong></div>
268
  </div>
269
- <p class="muted">Validation runs as an HF Job and writes its report to the same bucket.</p>
 
 
 
 
 
 
270
  </div>
271
  </div>
272
  </section>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
273
  </section>
274
 
275
- <section class="hidden-run-inspector" hidden>
276
- <span>Live job progress</span><span>Run details</span><span>Validation & metrics</span><span>Latest events</span>
277
- <span id="sidebarBucketDot"></span>
278
- <input id="runSearch" hidden />
279
- <div id="runsTableHome" hidden></div>
280
- <button id="refreshRunsHome" hidden></button>
281
- <button id="resumeLatestRun" hidden></button>
282
  <a id="runHeaderSpace" target="_blank"></a>
283
- <div id="diagBuildStatus"></div><div id="diagBuildStep"></div><ul id="zeroGpuChecklist"></ul>
284
- </section>
285
  </main>
286
  </div>
287
  <script src="/custom-static/api.js"></script>
 
7
  <link rel="stylesheet" href="/custom-static/app.css" />
8
  </head>
9
  <body>
10
+ <div class="app-shell onepage-shell">
11
+ <header class="topbar onepage-topbar">
12
  <div class="brand">
13
+ <div class="brand-mark"></div>
14
  <div>
15
  <h1>Agentic Space Factory</h1>
16
+ <p>Build, inspect, and validate private Hugging Face Spaces.</p>
17
  </div>
18
  </div>
 
 
 
 
 
19
  <div class="top-actions">
20
  <button class="bucket-pill" id="bucketStatusPill"><span class="status-dot" id="bucketStatusDot"></span><span id="bucketStatusText">Checking bucket…</span></button>
21
  <span class="user-chip" id="userChip">Sign in</span>
22
+ <button class="primary small" id="resumeLatestRun">Resume latest run</button>
23
  <a class="logout-link" id="logoutLink" href="/logout" hidden>Logout</a>
24
  </div>
25
  </header>
26
 
27
+ <main class="onepage-main">
28
  <section class="auth-panel" id="authPanel" hidden></section>
29
  <section class="operation-status" id="operationStatus" hidden></section>
30
 
31
+ <section class="workspace-grid">
32
+ <section class="panel build-panel" id="newBuildCard">
33
+ <div class="section-head compact">
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  <div>
35
  <span class="eyebrow">New Build</span>
36
  <h2>Launch a private Space</h2>
37
+ <p class="muted">Provide a model card or model ID. The factory creates a private Space, tries ZeroGPU first, and stores logs and artifacts in your private bucket.</p>
38
  </div>
39
  <button class="secondary small" id="prepareNewBuild">Reset form</button>
40
  </div>
41
 
42
+ <section class="run-storage compact-storage">
43
+ <div>
44
+ <span class="eyebrow">Run storage</span>
45
+ <strong><span class="status-dot" id="bucketInlineDot"></span><span id="bucketInlineLabel">loading…</span></strong>
46
+ <p class="muted">Runs, reports, generated files, traces, and validation outputs are written to your private bucket.</p>
47
+ </div>
48
+ <div class="inline-actions">
49
+ <button class="secondary small" id="checkBucket">Check bucket</button>
50
+ <button class="secondary small" id="createBucket">Create private bucket</button>
51
+ </div>
52
+ <span class="badge" id="bucketInlineStatus">Checking</span>
53
+ </section>
54
+
55
  <div class="build-mode-panel" id="buildModePanel">
56
  <strong>Preparing a new build</strong>
57
+ <p>This form launches new builds. Existing runs can be inspected in the Runs Explorer on the right.</p>
58
  </div>
59
 
60
+ <div class="field-stack">
61
+ <label>Model card URL or model ID<input id="modelId" value="meta-llama/Meta-Llama-3.1-8B-Instruct" /></label>
62
+ <label>Target Space name<input id="targetSpace" placeholder="my-llama-31-8b-demo" /></label>
63
+ <div class="form-grid two-cols">
64
  <label>Run ID<input id="runId" placeholder="auto-generated if empty" /></label>
65
+ <label>Expected output type<select id="buildExpectedOutput"><option>text</option><option>image</option><option>video</option><option>audio</option><option>any</option></select></label>
 
 
66
  </div>
67
+ <label>Goal / notes<textarea id="buildGoal" rows="4" placeholder="What should this Space do? Any constraints or notes?"></textarea></label>
68
+ </div>
69
 
70
+ <details class="settings-accordion" open>
71
+ <summary>Settings</summary>
72
+ <div class="field-stack settings-stack">
73
  <label>Pi model<input id="piModel" value="Qwen/Qwen3-Coder-Next" /></label>
74
+ <label>Implementation mode<select id="implementationMode"><option selected>full-inference-gated</option><option>full-inference-attempt</option><option>safe-scaffold</option></select></label>
75
  <div class="form-grid two-cols">
76
+ <label>Preferred hardware<select id="preferredHardware"><option selected>zero-a10g</option><option>l40sx1</option><option>a10g-large</option><option>cpu-basic</option></select></label>
77
+ <label>Fallback hardware<select id="fallbackHardware"><option selected>l40sx1</option><option>a10g-large</option><option>a100-large</option><option>h200</option><option>cpu-basic</option></select></label>
78
  </div>
 
79
  <div class="toggle-list simple-toggles">
80
  <label><span>Try ZeroGPU first <small>Preferred for cost efficiency.</small></span><input id="tryZeroGpu" type="checkbox" checked /></label>
81
  <label><span>Allow fixed GPU fallback <small>Use fallback if ZeroGPU is unavailable.</small></span><input id="allowFallback" type="checkbox" checked /></label>
 
82
  </div>
83
  </div>
84
+ </details>
85
 
86
+ <button class="primary full" id="launchBuild" disabled>Build private Space</button>
 
 
 
 
 
 
 
 
 
 
87
  <p class="muted build-gate" id="buildGateText">Checking your run bucket before enabling builds…</p>
88
+
89
+ <section class="launch-result-card" id="launchResultPanel" hidden>
90
+ <div class="section-head compact">
91
+ <div>
92
+ <span class="eyebrow">Launch result</span>
93
+ <h3>Build launched</h3>
94
+ </div>
95
+ </div>
96
+ <div class="detail-grid two-cols">
97
+ <div><span>Run ID</span><strong id="launchRunId">—</strong></div>
98
+ <div><span>Status</span><strong id="launchStatus">—</strong></div>
99
+ <div><span>Target Space</span><strong id="launchSpace">—</strong></div>
100
+ <div><span>Hardware</span><strong id="launchHardware">—</strong></div>
101
+ </div>
102
+ <div class="quick-links">
103
+ <a class="link-btn disabled" id="launchOpenJob" target="_blank">Job ↗</a>
104
+ <a class="link-btn disabled" id="launchOpenSpace" target="_blank">Space ↗</a>
105
+ <a class="link-btn disabled" id="launchOpenSettings" target="_blank">Settings ↗</a>
106
+ <a class="link-btn disabled" id="launchOpenArtifacts" target="_blank">Artifacts ↗</a>
107
+ </div>
108
+ </section>
109
  </section>
110
 
111
+ <section class="panel active-run-panel" id="activeRunPanel">
112
  <div class="section-head compact">
113
  <div>
114
+ <span class="eyebrow">Active Run</span>
115
+ <h2 id="progressTitle">No run selected</h2>
116
+ <p class="muted" id="lastEvent">Select a run from the explorer or launch a new build.</p>
117
  </div>
118
+ <span class="badge neutral" id="progressStatus">Idle</span>
119
  </div>
120
+
121
+ <div class="summary-meta summary-meta-grid">
122
+ <div><span>Run ID</span><strong id="detailRunId">—</strong></div>
123
+ <div><span>Target Space</span><strong id="detailSpace">—</strong></div>
124
+ <div><span>Model</span><strong id="selectedModelId">—</strong></div>
125
+ <div><span>Elapsed time</span><strong id="elapsed">—</strong></div>
126
+ <div><span>Current step</span><strong id="currentStep">—</strong></div>
127
+ <div><span>Last checked</span><strong id="lastPolled">—</strong></div>
128
  </div>
129
+
130
+ <div class="quick-links">
131
+ <a class="link-btn disabled" id="openJob" target="_blank">Open Job ↗</a>
132
+ <a class="link-btn disabled" id="openSpace" target="_blank">Open Space ↗</a>
133
+ <a class="link-btn disabled" id="openSettings" target="_blank">Open Settings ↗</a>
134
+ <a class="link-btn disabled" id="openArtifacts" target="_blank">Artifacts ↗</a>
135
  </div>
 
 
136
 
137
+ <div class="progress-bar"><div id="progressFill" style="width:0%"></div></div>
138
+ <div class="progress-percent"><strong id="progressPercent">0%</strong><span id="hardwarePlan">ZeroGPU → fixed GPU fallback</span></div>
139
+ <div class="timeline" id="timeline"></div>
140
+
141
+ <div class="manual-action" id="manualActionPanel" hidden>
142
  <div>
143
+ <strong id="manualActionTitle">Manual hardware required</strong>
144
+ <p id="manualActionText">Open Space settings, choose the recommended GPU, then run Space Test.</p>
 
145
  </div>
146
  <div class="inline-actions">
147
+ <a class="link-btn" id="manualOpenSettings" target="_blank">Open Space settings ↗</a>
148
+ <button class="secondary small" id="manualGoValidate">Prefill Space Test</button>
149
  </div>
150
  </div>
151
+ <div class="poll-warning" id="pollWarning" hidden>Progress polling is temporarily unavailable. Retrying automatically…</div>
152
 
153
+ <div class="split-panels three-way">
154
+ <section class="mini-panel">
155
+ <h4>Latest events</h4>
156
+ <div id="activityFeed" class="activity-feed"><div class="empty">No activity yet.</div></div>
157
+ </section>
158
+ <section class="mini-panel">
159
+ <h4>Diagnostics</h4>
160
+ <div class="diagnostic-list">
161
+ <div><span>Status</span><strong id="detailJobStatus"></strong></div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  <div><span>Gate</span><strong id="detailGateStatus">—</strong></div>
163
+ <div><span>Hardware</span><strong id="detailHardware">—</strong></div>
164
  <div><span>Events</span><strong id="detailTraces">—</strong></div>
165
+ <div><span>Build status</span><strong id="diagBuildStatus">—</strong></div>
166
+ <div><span>Current phase</span><strong id="diagBuildStep">—</strong></div>
167
  </div>
168
+ <div id="statusChips" class="status-chips"></div>
169
+ <div class="issue-card" id="issueCard" hidden><strong id="issueTitle">Issue</strong><p id="issueDetail">—</p></div>
170
+ <ul class="zero-rules" id="zeroGpuChecklist"></ul>
171
+ </section>
172
+ <section class="mini-panel report-card">
173
+ <h4>Report preview</h4>
174
+ <div class="report-home" id="homeReportPreview"><strong>No run selected</strong><p>Select a run to preview its report.</p></div>
175
+ <button class="secondary small full" id="homeValidateBtn" disabled>Prefill Space Test</button>
176
+ </section>
177
+ </div>
178
+ </section>
179
 
180
+ <section class="panel runs-explorer-panel" id="runsExplorerPanel">
181
+ <div class="section-head compact">
182
+ <div>
183
+ <span class="eyebrow">Runs Explorer</span>
184
+ <h2>Browse runs</h2>
185
+ </div>
186
+ <button class="secondary small" id="refreshRuns">Refresh</button>
187
+ </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
188
 
189
+ <div class="search-wrap"><input id="runSearchFull" placeholder="Search runs by ID, model, or space…" /><span>⌕</span></div>
190
+ <div class="run-filters" id="runFilters">
191
+ <button class="filter active" data-status="all">All</button>
192
+ <button class="filter" data-status="running">Running</button>
193
+ <button class="filter" data-status="full_inference_success">Success</button>
194
+ <button class="filter" data-status="manual_hardware_required">Manual</button>
195
+ <button class="filter" data-status="failed">Failed</button>
196
+ <button class="filter" data-status="stale">Stale</button>
 
 
 
 
 
197
  </div>
198
+ <div id="runsTable" class="runs-table">Loading runs…</div>
199
+
200
+ <section class="selected-run-card">
201
+ <h3>Selected run</h3>
202
+ <div class="detail-grid two-cols compact-grid">
203
+ <div><span>Run ID</span><strong id="selectedRunId">—</strong></div>
204
+ <div><span>Status</span><strong id="runDetailStatus">—</strong></div>
205
+ <div><span>Target Space</span><strong id="selectedTargetSpace">—</strong></div>
206
+ <div><span>Hardware</span><strong id="selectedHardware">—</strong></div>
207
+ </div>
208
+ <div class="quick-links selected-links-row">
209
+ <a class="link-btn disabled" id="selectedOpenSpace" target="_blank">Space ↗</a>
210
+ <a class="link-btn disabled" id="selectedOpenJob" target="_blank">Job ↗</a>
211
+ <a class="link-btn disabled" id="selectedOpenArtifacts" target="_blank">Artifacts ↗</a>
212
+ <a class="link-btn disabled" id="selectedOpenSettings" target="_blank">Settings ↗</a>
213
+ </div>
214
+ <button class="secondary full" id="selectedValidateBtn" disabled>Prefill Space Test</button>
215
+ <div class="blockers" id="selectedBlockers" hidden></div>
216
+ </section>
217
  </section>
218
  </section>
219
 
220
+ <section class="bottom-grid">
221
+ <section class="panel space-test-panel" id="spaceTestSection">
222
+ <div class="section-head compact">
223
  <div>
224
  <span class="eyebrow">Space Test</span>
225
  <h2>Validate an existing Space</h2>
226
+ <p class="muted">Call the live Gradio API, verify output type, measure latency, and store artifacts.</p>
227
  </div>
 
228
  </div>
229
+ <div class="space-test-grid">
 
 
 
 
 
 
 
230
  <div class="field-stack">
231
+ <label>Target Space ID<input id="validateSpace" placeholder="fffiloni/my-llama-31-8b-demo" /></label>
232
+ <div class="form-grid test-top-row">
233
+ <label>API name<input id="validateApi" value="/predict" /></label>
234
+ <label>Expected output type<select id="expectedOutput"><option>text</option><option>image</option><option>video</option><option>audio</option><option>any</option></select></label>
235
+ <label>Timeout (s)<input id="validateTimeout" value="60" /></label>
236
+ </div>
237
+ <div class="editor-grid">
238
+ <label>Test args (JSON)<textarea id="testArgs" rows="7">[
239
+ {
240
+ "inputs": "Explain the concept of agentic AI in one paragraph."
241
+ }
242
+ ]</textarea></label>
243
+ <label>Test kwargs (JSON)<textarea id="testKwargs" rows="7">{
244
+ "max_new_tokens": 128,
245
+ "temperature": 0.2
246
+ }</textarea></label>
247
+ </div>
248
  </div>
249
+ <div class="validation-result-card" id="spaceTestPreview">
250
+ <div class="section-head compact">
251
+ <div>
252
+ <span class="eyebrow">Validation result</span>
253
+ <h3>Latest validation</h3>
254
+ </div>
255
+ <span class="badge neutral" id="spaceTestStatus">Pending</span>
256
+ </div>
257
+ <div class="detail-grid two-cols compact-grid">
258
  <div><span>Status</span><strong id="spaceTestOutput">Waiting for API test</strong></div>
259
  <div><span>Verdict</span><strong id="spaceTestVerdict">pending</strong></div>
260
  </div>
261
+ <ul class="metric-list" id="metricsList">
262
+ <li><span>/health</span><strong>pending</strong></li>
263
+ <li><span>/generate smoke test</span><strong>pending</strong></li>
264
+ <li><span>Latency</span><strong>—</strong></li>
265
+ <li><span>Recommended ZeroGPU duration</span><strong>—</strong></li>
266
+ </ul>
267
+ <button class="primary full" id="launchValidate">Launch validation</button>
268
  </div>
269
  </div>
270
  </section>
271
+
272
+ <section class="panel artifact-report-panel">
273
+ <div class="split-panels bottom-split">
274
+ <section class="mini-panel">
275
+ <h4>Raw events</h4>
276
+ <pre class="events compact-events" id="eventsPanel">No events yet.</pre>
277
+ </section>
278
+ <section class="mini-panel">
279
+ <h4>Full report</h4>
280
+ <pre id="reportPreview" class="report-preview">No report selected.</pre>
281
+ </section>
282
+ <section class="mini-panel">
283
+ <h4>Artifacts</h4>
284
+ <div id="artifactList" class="artifact-list">No artifacts indexed yet.</div>
285
+ </section>
286
+ </div>
287
+ </section>
288
  </section>
289
 
290
+ <div class="support-elements" hidden>
291
+ <input id="runSearch" />
292
+ <div id="runsTableHome"></div>
293
+ <button id="refreshRunsHome"></button>
294
+ <button id="resumeLatestRunFull"></button>
 
 
295
  <a id="runHeaderSpace" target="_blank"></a>
296
+ <ul id="selectedValidation"></ul>
297
+ </div>
298
  </main>
299
  </div>
300
  <script src="/custom-static/api.js"></script>