Add a FastAPI panel under webui/ to select suites or benchmarks, configure model endpoint and thinking mode, stream evaluation logs, and visualize multi-model scores from output/.
201 lines
7.4 KiB
HTML
201 lines
7.4 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>EvalStone Launch</title>
|
||
<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=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap" rel="stylesheet" />
|
||
<link rel="stylesheet" href="/static/styles.css" />
|
||
</head>
|
||
<body>
|
||
<div class="page">
|
||
<header class="top">
|
||
<div class="brand">
|
||
<span class="brand-mark"></span>
|
||
<div>
|
||
<h1>EvalStone Launch</h1>
|
||
<p>本地评测启动台 · 基于 <code>bash/run.py</code></p>
|
||
</div>
|
||
</div>
|
||
<div class="top-right">
|
||
<nav class="nav-tabs">
|
||
<a href="/" class="active">启动台</a>
|
||
<a href="/results">结果分析</a>
|
||
</nav>
|
||
<div class="top-meta">
|
||
<span id="healthDot" class="dot"></span>
|
||
<span id="healthText">connecting…</span>
|
||
</div>
|
||
</div>
|
||
</header>
|
||
|
||
<main class="layout">
|
||
<section class="panel form-panel">
|
||
<form id="launchForm">
|
||
<div class="block">
|
||
<h2>模型接入</h2>
|
||
<div class="grid-2">
|
||
<label>
|
||
<span>Model Name</span>
|
||
<input id="model" name="model" required placeholder="DeepSeek-V4-Flash-Int8" />
|
||
</label>
|
||
<label>
|
||
<span>API URL</span>
|
||
<input id="api_url" name="api_url" required placeholder="http://localhost:30000/v1" />
|
||
</label>
|
||
<label>
|
||
<span>API Key</span>
|
||
<input id="api_key" name="api_key" placeholder="EMPTY" />
|
||
</label>
|
||
<label>
|
||
<span>Folder Name(可选)</span>
|
||
<input id="folder_name" name="folder_name" placeholder="默认取 model / model_THINKING" />
|
||
</label>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="block">
|
||
<h2>Thinking</h2>
|
||
<div class="thinking-row">
|
||
<label class="switch">
|
||
<input type="checkbox" id="thinking" name="thinking" />
|
||
<span class="slider"></span>
|
||
<span class="switch-text">启用 thinking 模式</span>
|
||
</label>
|
||
<label class="inline">
|
||
<span>max_tokens_add</span>
|
||
<input type="number" id="max_tokens_add" name="max_tokens_add" value="0" min="0" step="1024" />
|
||
</label>
|
||
<label class="inline">
|
||
<span>thinking scale</span>
|
||
<input type="number" id="thinking_max_tokens_scale" name="thinking_max_tokens_scale" value="1.0" min="0.1" step="0.1" />
|
||
</label>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="block">
|
||
<h2>评测范围</h2>
|
||
<div class="mode-tabs" role="tablist">
|
||
<button type="button" class="tab active" data-mode="suite">按 Suite</button>
|
||
<button type="button" class="tab" data-mode="datasets">自选 Benchmark</button>
|
||
</div>
|
||
|
||
<div id="suitePane" class="pane">
|
||
<div id="suiteList" class="suite-list"></div>
|
||
<label class="mt">
|
||
<span>Exclude(逗号分隔,可选)</span>
|
||
<input id="exclude" name="exclude" placeholder="例如: tau2_bench,hle" />
|
||
</label>
|
||
</div>
|
||
|
||
<div id="datasetsPane" class="pane hidden">
|
||
<div class="bench-actions">
|
||
<button type="button" id="selectAllBtn" class="ghost">全选</button>
|
||
<button type="button" id="clearAllBtn" class="ghost">清空</button>
|
||
<span id="selectedCount" class="muted">已选 0</span>
|
||
</div>
|
||
<div id="benchmarkList" class="benchmark-list"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<details class="block advanced">
|
||
<summary>高级参数</summary>
|
||
<div class="grid-2 mt">
|
||
<label>
|
||
<span>Limit(none = 全量)</span>
|
||
<input id="limit" name="limit" placeholder="none" />
|
||
</label>
|
||
<label>
|
||
<span>Seed</span>
|
||
<input type="number" id="seed" name="seed" value="42" />
|
||
</label>
|
||
<label>
|
||
<span>Batch Size</span>
|
||
<input type="number" id="batch_size" name="batch_size" value="4" min="1" />
|
||
</label>
|
||
<label>
|
||
<span>Write Summary</span>
|
||
<select id="write_summary" name="write_summary">
|
||
<option value="true" selected>是</option>
|
||
<option value="false">否</option>
|
||
</select>
|
||
</label>
|
||
<label>
|
||
<span>Dataset Dir</span>
|
||
<input id="dataset_dir" name="dataset_dir" />
|
||
</label>
|
||
<label>
|
||
<span>Output Dir</span>
|
||
<input id="output_dir" name="output_dir" />
|
||
</label>
|
||
<label>
|
||
<span>Config YAML</span>
|
||
<input id="config" name="config" />
|
||
</label>
|
||
<label>
|
||
<span>Tokenizer Path</span>
|
||
<input id="tokenizer_path" name="tokenizer_path" />
|
||
</label>
|
||
<label>
|
||
<span>Judge Model</span>
|
||
<input id="judge_model" name="judge_model" />
|
||
</label>
|
||
<label>
|
||
<span>Judge API URL</span>
|
||
<input id="judge_api_url" name="judge_api_url" />
|
||
</label>
|
||
<label>
|
||
<span>Judge API Key</span>
|
||
<input id="judge_api_key" name="judge_api_key" type="password" />
|
||
</label>
|
||
<label>
|
||
<span>Judge Max Tokens</span>
|
||
<input type="number" id="judge_max_tokens" name="judge_max_tokens" />
|
||
</label>
|
||
</div>
|
||
</details>
|
||
|
||
<div class="actions">
|
||
<button type="submit" id="launchBtn" class="primary">启动评测</button>
|
||
<button type="button" id="stopBtn" class="danger" disabled>停止任务</button>
|
||
<span id="formMsg" class="msg"></span>
|
||
</div>
|
||
</form>
|
||
</section>
|
||
|
||
<section class="panel side-panel">
|
||
<div class="side-head">
|
||
<h2>运行状态</h2>
|
||
<button type="button" id="refreshJobsBtn" class="ghost">刷新</button>
|
||
</div>
|
||
|
||
<div id="activeCard" class="active-card idle">
|
||
<div class="active-title">
|
||
<span id="activeStatus" class="badge">idle</span>
|
||
<code id="activeJobId">—</code>
|
||
</div>
|
||
<pre id="activeCmd" class="cmd">尚未启动任务</pre>
|
||
</div>
|
||
|
||
<div class="log-head">
|
||
<h3>实时日志</h3>
|
||
<label class="check-inline">
|
||
<input type="checkbox" id="autoScroll" checked />
|
||
自动滚动
|
||
</label>
|
||
</div>
|
||
<pre id="logView" class="log-view"></pre>
|
||
|
||
<div class="jobs-head">
|
||
<h3>历史任务</h3>
|
||
</div>
|
||
<div id="jobList" class="job-list"></div>
|
||
</section>
|
||
</main>
|
||
</div>
|
||
<script src="/static/app.js"></script>
|
||
</body>
|
||
</html>
|