Files
llama-cmd-gen/static/index.html
T
hz4th_coder a407032b4d feat: llama.cpp 命令生成器 v1.0.0
- 支持多版本 llama.cpp 参数 (b6310, b10068)
- GPU 模式 / GPU+CPU 模式
- 多 GPU 支持 (最多4张)
- 实时显存/内存估算
- 自然语言解析生成命令
- 参数分级显示 (重要/隐藏)
- 仅输出非默认值参数
- 后台管理 (GPU/版本/参数 CRUD)
- 模型预设 (7B-70B)
2026-07-19 18:08:36 +08:00

157 lines
7.0 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>llama.cpp 命令生成器</title>
<link rel="stylesheet" href="/css/style.css">
</head>
<body>
<div id="app">
<header>
<h1>🦙 llama.cpp 命令生成器</h1>
<div class="header-right">
<a href="/admin" class="admin-link">⚙️ 后台管理</a>
</div>
</header>
<!-- Version & Mode Selection -->
<section class="top-controls">
<div class="control-group">
<label>llama.cpp 版本</label>
<select id="version-select" onchange="onVersionChange()"></select>
</div>
<div class="control-group">
<label>运行模式</label>
<div class="mode-switch">
<button class="mode-btn active" data-mode="gpu" onclick="switchMode('gpu')">🎮 GPU 模式</button>
<button class="mode-btn" data-mode="gpu_cpu" onclick="switchMode('gpu_cpu')">🎮+💻 GPU+CPU 模式</button>
</div>
</div>
<div class="control-group">
<label>二进制程序</label>
<select id="binary-select">
<option value="llama-server">llama-server</option>
<option value="llama-cli">llama-cli</option>
</select>
</div>
</section>
<!-- GPU Configuration -->
<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>
<div class="vram-label" id="vram-label">VRAM: 等待配置...</div>
</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>
</div>
<div class="vram-breakdown" id="ram-breakdown"></div>
</div>
</section>
<!-- Model Info -->
<section class="panel">
<h2>📦 模型信息 (用于显存估算)</h2>
<div class="model-info-grid">
<div class="control-group">
<label>模型大小 (GB)</label>
<input type="number" id="model-size-gb" value="0" min="0" step="0.1" onchange="updateEstimate()">
</div>
<div class="control-group">
<label>模型层数</label>
<input type="number" id="model-layers" value="0" min="0" step="1" onchange="updateEstimate()">
</div>
<div class="control-group">
<label>嵌入维度 (n_embd)</label>
<input type="number" id="model-embd" value="0" min="0" step="1" onchange="updateEstimate()">
</div>
<div class="control-group">
<label>KV Heads</label>
<input type="number" id="model-kv-heads" value="0" min="0" step="1" onchange="updateEstimate()">
</div>
<div class="control-group">
<label>Head Dim</label>
<input type="number" id="model-head-dim" value="0" min="0" step="1" onchange="updateEstimate()">
</div>
<div class="control-group">
<label>Attention Heads</label>
<input type="number" id="model-heads" value="0" min="0" step="1" onchange="updateEstimate()">
</div>
</div>
<div class="model-presets">
<span class="preset-label">快速预设:</span>
<button class="preset-btn" onclick="setModelPreset('7b')">7B (Q4)</button>
<button class="preset-btn" onclick="setModelPreset('13b')">13B (Q4)</button>
<button class="preset-btn" onclick="setModelPreset('34b')">34B (Q4)</button>
<button class="preset-btn" onclick="setModelPreset('70b')">70B (Q4)</button>
<button class="preset-btn" onclick="setModelPreset('70b-q8')">70B (Q8)</button>
<button class="preset-btn" onclick="setModelPreset('70b-fp16')">70B (FP16)</button>
</div>
</section>
<!-- Natural Language Input -->
<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" />
<button onclick="parseNaturalLanguage()">解析</button>
</div>
<div id="nl-result" class="nl-result"></div>
</section>
<!-- Parameters -->
<section class="panel">
<h2>⚙️ 参数配置</h2>
<div class="param-tabs">
<button class="tab-btn active" data-cat="common" onclick="switchTab('common')">通用参数</button>
<button class="tab-btn" data-cat="sampling" onclick="switchTab('sampling')">采样参数</button>
<button class="tab-btn" data-cat="server" onclick="switchTab('server')">服务器参数</button>
<button class="tab-btn" data-cat="model_source" onclick="switchTab('model_source')">模型来源</button>
<button class="tab-btn" data-cat="lora" onclick="switchTab('lora')">LoRA</button>
<button class="tab-btn" data-cat="logging" onclick="switchTab('logging')">日志</button>
<button class="tab-btn" data-cat="advanced" onclick="switchTab('advanced')">高级</button>
</div>
<div id="param-container"></div>
<button class="btn-toggle-advanced" onclick="toggleHiddenParams()" id="toggle-advanced-btn">▼ 显示更多参数</button>
</section>
<!-- Generated Command -->
<section class="panel command-panel">
<h2>📋 生成命令</h2>
<div class="command-output" id="command-output">请在上方配置参数...</div>
<div class="command-actions">
<button onclick="copyCommand()" class="btn-copy">📋 复制命令</button>
<button onclick="generateCommand()" class="btn-gen">🔄 重新生成</button>
</div>
</section>
</div>
<script src="/js/main.js"></script>
</body>
</html>