ayushKishor's picture
Prevent UI from sticking while running
aef38b9
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pluto v2 - Pipeline Dashboard</title>
<meta name="description" content="Pluto v2: Silver-and-orange dashboard for a real mode-switching extraction pipeline">
<link rel="stylesheet" href="/static/style.css?v=4">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap"
rel="stylesheet">
</head>
<body>
<header class="header">
<div class="header__inner">
<div class="header__copy">
<div class="header__brand">
<div class="header__logo">
<svg width="30" height="30" viewBox="0 0 28 28" fill="none" aria-hidden="true">
<circle cx="14" cy="14" r="12" stroke="url(#brand-grad)" stroke-width="2.5" fill="none"></circle>
<path d="M14 6 L14 22 M8 14 L20 14" stroke="url(#brand-grad)" stroke-width="2" stroke-linecap="round"></path>
<defs>
<linearGradient id="brand-grad" x1="1" y1="1" x2="28" y2="28">
<stop offset="0%" stop-color="#f7f8fa"></stop>
<stop offset="45%" stop-color="#c7cdd3"></stop>
<stop offset="100%" stop-color="#ff9b3d"></stop>
</linearGradient>
</defs>
</svg>
</div>
<h1 class="header__title">Pluto</h1>
<span class="header__badge">v2</span>
</div>
<p class="header__subtitle">Mode-switching extraction pipeline with a silver-and-orange operator dashboard.</p>
</div>
<div class="header__status">Evidence-first workflow</div>
</div>
</header>
<section class="query-bar" id="querySection">
<div class="query-bar__inner">
<input type="text" id="queryInput" class="query-bar__input" placeholder="Enter your research query..."
autocomplete="off">
<button id="runBtn" class="query-bar__btn" disabled>
<span class="btn-icon">&#9654;</span> Run Pipeline
</button>
<button id="benchBtn" class="query-bar__btn query-bar__btn--bench" disabled>
<span class="btn-icon">&#9878;</span> Benchmark
</button>
</div>
<div class="query-bar__meta">
<div class="query-bar__scope" id="queryScopeLabel">Scope: entire corpus | Standard answer</div>
<label class="query-bar__detail">
<span class="query-bar__detail-label">Answer depth</span>
<select id="detailModeSelect" class="query-bar__select">
<option value="standard">Standard</option>
<option value="detailed">Detailed</option>
</select>
</label>
</div>
</section>
<section class="upload-zone" id="uploadZone">
<div class="upload-zone__inner">
<div class="upload-zone__droparea" id="dropArea">
<div class="upload-zone__icon">&#128206;</div>
<div class="upload-zone__text">
<strong>Drop files here</strong> or
<label class="upload-zone__browse" for="fileInput">browse</label>
</div>
<div class="upload-zone__hint">PDF, DOCX, TXT, MD - max 10MB each</div>
<input type="file" id="fileInput" class="upload-zone__input" multiple
accept=".pdf,.docx,.doc,.txt,.md,.markdown">
</div>
<div class="upload-zone__status" id="uploadStatus"></div>
<div class="upload-zone__corpus" id="corpusList">
<div class="corpus-header">
<div class="corpus-header__copy">
<span class="corpus-header__title">&#128193; Corpus Documents</span>
<span class="corpus-header__summary" id="corpusSelectionSummary">Click a ready corpus document to limit the next query to that document.</span>
</div>
<button class="corpus-header__refresh" id="refreshCorpus" title="Refresh">&#8635;</button>
</div>
<div class="corpus-docs" id="corpusDocs">Loading...</div>
</div>
</div>
</section>
<section class="stage-rail" id="stageRail">
<div class="stage-rail__track">
<div class="stage-card" data-stage="route" id="stage-route">
<div class="stage-card__number">S0</div>
<div class="stage-card__label">ROUTE</div>
<div class="stage-card__status" id="status-route">idle</div>
</div>
<div class="stage-rail__connector"></div>
<div class="stage-card" data-stage="extract" id="stage-extract">
<div class="stage-card__number">S1</div>
<div class="stage-card__label">EXTRACT</div>
<div class="stage-card__status" id="status-extract">idle</div>
</div>
<div class="stage-rail__connector"></div>
<div class="stage-card" data-stage="merge" id="stage-merge">
<div class="stage-card__number">S2</div>
<div class="stage-card__label">MERGE</div>
<div class="stage-card__status" id="status-merge">idle</div>
</div>
<div class="stage-rail__connector"></div>
<div class="stage-card" data-stage="evidence_check" id="stage-evidence_check">
<div class="stage-card__number">S3</div>
<div class="stage-card__label">EVIDENCE CHECK</div>
<div class="stage-card__status" id="status-evidence_check">idle</div>
</div>
</div>
</section>
<main class="dashboard" id="dashboard">
<section class="panel panel--answer" id="answerPanel">
<h2 class="panel__title">
<span class="panel__icon">&#128221;</span> Final Answer
</h2>
<div class="panel__body" id="answerBody">
<p class="panel__placeholder">Run a query to see results...</p>
</div>
</section>
<section class="panel panel--benchmark" id="benchPanel" hidden>
<h2 class="panel__title">
<span class="panel__icon">&#9878;</span> Pluto vs Single Model Baseline
</h2>
<div class="panel__body bench-body" id="benchBody">
<div id="benchLoader" class="bench-loader">Benchmarking...</div>
</div>
</section>
<section class="panel panel--evidence" id="evidencePanel">
<h2 class="panel__title">
<span class="panel__icon">&#128279;</span> Evidence
</h2>
<div class="panel__body" id="evidenceBody">
<p class="panel__placeholder">No evidence yet</p>
</div>
</section>
<section class="panel panel--trace" id="tracePanel">
<h2 class="panel__title">
<span class="panel__icon">&#128202;</span> Trace Summary
</h2>
<div class="panel__body" id="traceBody">
<p class="panel__placeholder">Pipeline trace will appear here</p>
</div>
</section>
<section class="panel panel--bus" id="busPanel">
<h2 class="panel__title">
<span class="panel__icon">&#129302;</span> Agent Logs (Bus)
</h2>
<div class="panel__body" id="busBody">
<p class="panel__placeholder">Agent activity will stream here...</p>
</div>
</section>
<section class="panel panel--confidence" id="confidencePanel">
<h2 class="panel__title">
<span class="panel__icon">&#127919;</span> Confidence
</h2>
<div class="confidence-meter" id="confidenceMeter">
<div class="confidence-meter__ring">
<svg viewBox="0 0 120 120">
<circle class="confidence-meter__bg" cx="60" cy="60" r="52"></circle>
<circle class="confidence-meter__fill" cx="60" cy="60" r="52" id="confRing" stroke-dasharray="327"
stroke-dashoffset="327"></circle>
</svg>
<span class="confidence-meter__value" id="confValue">-</span>
</div>
</div>
</section>
</main>
<footer class="footer">
<span>Pluto v2 Pipeline | Deterministic routing | Real model switching | Evidence checking</span>
</footer>
<script src="/static/app.js?v=6"></script>
</body>
</html>