Initial commit of LLM speed test app

This commit is contained in:
2026-09-06 11:45:52 +08:00
commit 5544b5f9f9
38 changed files with 8587 additions and 0 deletions
+173
View File
@@ -0,0 +1,173 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>大模型速度测试助手</title>
<link rel="stylesheet" href="css/style.css">
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
</head>
<body>
<div class="app-container">
<!-- 左侧控制面板 -->
<aside class="sidebar">
<div class="sidebar-header">
<h1>大模型速度测试助手</h1>
<div class="version" id="versionLabel">v2.1</div>
</div>
<!-- 测试用例选择 -->
<div class="panel">
<div class="panel-title">测试用例选择</div>
<div class="quick-actions">
<button onclick="selectRecommended()">推荐组合</button>
<button onclick="selectAll()">全选</button>
<button onclick="clearAll()">清空</button>
</div>
<div id="testCaseList">
<!-- 从 /api/cases 动态加载 -->
</div>
</div>
<!-- 参数配置 -->
<div class="panel">
<div class="panel-title">参数配置</div>
<div class="config-group">
<label>模型</label>
<select id="modelSelect">
<option value="">加载中...</option>
</select>
</div>
<div class="config-group">
<label>重复次数</label>
<input type="number" id="repeatsInput" value="3" min="1" max="20">
</div>
<div class="config-group">
<label>运行模式</label>
<select id="runMode">
<option value="all">全部用例</option>
<option value="skip_heavy">跳过耗时用例</option>
</select>
</div>
</div>
<!-- 操作按钮 -->
<div class="panel">
<button class="btn btn-primary" id="startBtn" onclick="startTests()" disabled>
开始测试
</button>
<button class="btn btn-secondary" id="stopBtn" onclick="stopTests()" disabled>
停止测试
</button>
<button class="btn btn-secondary" id="loadHistoryBtn" onclick="loadHistory()">
加载历史对比
</button>
</div>
</aside>
<!-- 右侧主内容区 -->
<main class="main-content">
<!-- 运行状态面板 -->
<div class="status-panel" id="statusPanel">
<div class="status-header">
<div class="status-text running" id="statusText">准备中...</div>
<div id="progressPercent">0%</div>
</div>
<div class="progress-bar-container">
<div class="progress-bar" id="progressBar"></div>
</div>
<div id="currentCaseInfo" style="font-size:13px;margin-bottom:10px;color:#64748b;"></div>
<ul class="step-list" id="stepList"></ul>
</div>
<!-- 结果展示区 -->
<div class="results-area" id="resultsArea">
<!-- 推理指标概览 -->
<div class="report-card" id="inferenceCard" style="display:none;">
<h2>推理核心指标</h2>
<div class="metric-grid" id="inferenceMetricsGrid"></div>
<div class="metric-description">
<p><strong>TTFT(首 Token 延迟)</strong>:从请求到生成第一个 token 的时间,影响用户感知响应速度</p>
<p><strong>Prefill Time(预填充时间)</strong>:处理 prompt 的时间,与上下文长度正相关</p>
<p><strong>Decode Speed(解码速度)</strong>:tokens/s,衡量模型生成效率</p>
</div>
</div>
<!-- 并发压力摘要 -->
<div class="report-card" id="concurrencyCard" style="display:none;">
<h2>⚡ 并发压力测试摘要</h2>
<div class="metric-grid" id="concurrencyMetricsGrid"></div>
</div>
<!-- 概览卡片 -->
<div class="report-card" id="overviewCard" style="display:none;">
<h2>测试概览</h2>
<div class="metric-grid" id="metricGrid"></div>
</div>
<!-- 图表区 -->
<div class="report-card" id="chartCard" style="display:none;">
<h2>性能对比图表</h2>
<div class="chart-wrapper">
<canvas id="barChart"></canvas>
</div>
<div class="chart-wrapper">
<canvas id="p95Chart"></canvas>
</div>
</div>
<!-- 数据表 -->
<div class="report-card" id="tableCard" style="display:none;">
<h2>详细数据</h2>
<div style="overflow-x:auto;">
<table class="data-table" id="dataTable">
<thead>
<tr>
<th>用例名称</th>
<th>难度</th>
<th>状态</th>
<th>平均延迟 (ms)</th>
<th>标准差</th>
<th>最小</th>
<th>最大</th>
<th>P95</th>
</tr>
</thead>
<tbody id="dataTableBody"></tbody>
</table>
</div>
</div>
<!-- 操作按钮 -->
<div class="action-buttons" id="actionButtons" style="display:none;">
<button onclick="openReport()">打开完整报告</button>
<button onclick="exportCSV()">导出 CSV</button>
<button onclick="exportJSON()">导出 JSON</button>
<button class="primary" onclick="runNewTest()">新测试</button>
</div>
</div>
<!-- 初始欢迎状态 -->
<div class="report-card" id="welcomeCard">
<h2>欢迎使用大模型速度测试助手</h2>
<p style="color:#64748b;margin:15px 0;">
本工具用于测试大模型在不同场景下的响应速度
<span id="welcomeBackend">(Ollama 本地 / OpenAI 兼容服务)</span>。
<br>请在左侧面板选择测试用例和模型,然后点击"开始测试"。
</p>
<div style="margin-top:20px;">
<h3 style="font-size:14px;margin-bottom:10px;">快速开始:</h3>
<ol style="padding-left:20px;color:#64748b;font-size:13px;line-height:2;">
<li>左侧选择测试用例("推荐组合"快速勾选)</li>
<li>选择模型和重复次数</li>
<li>点击"开始测试",观察实时进度</li>
<li>完成后导出 CSV / JSON 或打开完整报告</li>
</ol>
</div>
</div>
</main>
</div>
<script src="js/app.js"></script>
</body>
</html>