feat: v1.3.0 - 五项优化

1. 显存/内存进度条置顶显示 (sticky)
   - 滚动页面时始终可见 VRAM 和内存占用情况
   - GPU+CPU 模式时内存条也同步显示在 sticky 区域

2. 系统内存配置合并到 GPU 配置区域内
   - GPU+CPU 模式时无缝衔接在显存占用下方
   - 去掉单独面板,去掉单位选择,固定为 GB
   - 填入 >0 即为有限制,0 为无限制

3. 参数同时显示简写和完整标志
   - 如 -ngl / --n-gpu-layers

4. 生成命令区域增加智能提示
   - 显存不足时提示调整参数或切换模式
   - 内存不足时提示增加上限或减少 GPU 层
   - 显存充足时显示确认信息
   - 未选模型/GPU 时给出引导提示

5. 自然语言输入改为多行 textarea
   - 支持多行输入
   - placeholder 说明可以自然对话描述需求
This commit is contained in:
2026-07-19 23:35:20 +08:00
parent 6691f37e45
commit 3c27a205e5
3 changed files with 243 additions and 54 deletions
+36 -23
View File
@@ -12,6 +12,24 @@
<h1>🦙 llama.cpp 命令生成器</h1>
</header>
<!-- Sticky memory bar (always visible on top) -->
<div id="sticky-mem-bar" class="sticky-mem-bar">
<div class="sticky-vram-row" id="sticky-vram-row">
<span class="sticky-label">🎮 VRAM</span>
<div class="sticky-bar-container">
<div class="sticky-bar" id="sticky-vram-bar"></div>
<span class="sticky-bar-text" id="sticky-vram-text">等待配置...</span>
</div>
</div>
<div class="sticky-ram-row hidden" id="sticky-ram-row">
<span class="sticky-label">💾 内存</span>
<div class="sticky-bar-container">
<div class="sticky-bar ram-sticky-bar" id="sticky-ram-bar"></div>
<span class="sticky-bar-text" id="sticky-ram-text">等待配置...</span>
</div>
</div>
</div>
<!-- Version & Mode Selection -->
<section class="top-controls">
<div class="control-group">
@@ -34,11 +52,13 @@
</div>
</section>
<!-- GPU Configuration -->
<!-- GPU Configuration + System Memory (merged) -->
<section class="panel" id="gpu-panel">
<h2>🖥️ GPU 配置</h2>
<div id="gpu-slots"></div>
<button class="btn-add" id="btn-add-gpu" onclick="addGpuSlot()">+ 添加显卡</button>
<!-- VRAM Display -->
<div class="vram-display" id="vram-display">
<div class="vram-bar-container">
<div class="vram-bar" id="vram-bar"></div>
@@ -46,33 +66,27 @@
</div>
<div class="vram-breakdown" id="vram-breakdown"></div>
</div>
</section>
<!-- System Memory (for GPU+CPU mode) -->
<section class="panel hidden" id="memory-panel">
<h2>💾 系统内存配置</h2>
<div class="control-group">
<label>系统内存上限</label>
<input type="number" id="sys-memory" value="0" min="0" step="1" onchange="updateEstimate()">
<select id="sys-memory-unit" onchange="updateEstimate()">
<option value="0">无限制</option>
<option value="1">GB</option>
<option value="2">MB</option>
</select>
</div>
<div class="vram-display" id="ram-display">
<div class="vram-bar-container">
<div class="vram-bar ram-bar" id="ram-bar"></div>
<div class="vram-label" id="ram-label">内存: 等待配置...</div>
<!-- System Memory (inline, only for GPU+CPU mode) -->
<div class="inline-memory-config hidden" id="inline-memory-config">
<div class="memory-input-row">
<label>系统内存上限</label>
<input type="number" id="sys-memory" value="0" min="0" step="1" onchange="updateEstimate()" placeholder="0 = 无限制">
<span class="memory-unit">GB</span>
</div>
<div class="vram-display" id="ram-display">
<div class="vram-bar-container">
<div class="vram-bar ram-bar" id="ram-bar"></div>
<div class="vram-label" id="ram-label">内存: 等待配置...</div>
</div>
<div class="vram-breakdown" id="ram-breakdown"></div>
</div>
<div class="vram-breakdown" id="ram-breakdown"></div>
</div>
</section>
<!-- Model Selection (two-step) -->
<section class="panel">
<h2>📦 选择模型</h2>
<!-- Step 1: Select base model -->
<div class="model-step">
<label class="model-step-label">第1步:选择模型</label>
<div class="model-select-container">
@@ -80,12 +94,10 @@
<div class="model-dropdown" id="model-dropdown"></div>
</div>
</div>
<!-- Step 2: Select quant -->
<div class="model-step hidden" id="quant-step">
<label class="model-step-label">第2步:选择量化版本</label>
<div id="quant-options"></div>
</div>
<!-- Selected model info -->
<div id="model-selected-info" class="model-selected-info"></div>
</section>
@@ -93,7 +105,7 @@
<section class="panel">
<h2>💬 自然语言生成</h2>
<div class="nl-input-container">
<input type="text" id="nl-input" placeholder="例如: 用RTX 4090跑70B模型, 上下文8192, 温度0.7, flash attention" />
<textarea id="nl-input" rows="3" placeholder="用自然语言描述你想要的配置,支持多行输入。&#10;例如:&#10;用RTX 4090跑Llama-3-70B上下文8192&#10;温度0.7,开启flash attention&#10;端口设为8080"></textarea>
<button onclick="parseNaturalLanguage()">解析</button>
</div>
<div id="nl-result" class="nl-result"></div>
@@ -123,6 +135,7 @@
<section class="panel command-panel">
<h2>📋 生成命令</h2>
<div class="command-output" id="command-output">请在上方配置参数...</div>
<div class="command-hint" id="command-hint"></div>
<div class="command-actions">
<button onclick="copyCommand()" class="btn-copy">📋 复制命令</button>
<button onclick="generateCommand()" class="btn-gen">🔄 重新生成</button>