D106: training completed + model download links

This commit is contained in:
bingshuo 2026-05-20 20:34:30 +08:00
parent 10502a03f7
commit 93e2345741

View File

@ -125,17 +125,6 @@ body{
.sys-row .v{color:var(--light);font-weight:500;font-variant-numeric:tabular-nums}
.sys-row .v.cyan{color:var(--glow)}
.sys-row .v.green{color:var(--green)}
.train-metrics{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;margin-bottom:18px}
.train-m{text-align:center;padding:16px 8px;background:rgba(255,255,255,.02);border:1px solid var(--glass-edge);border-radius:14px}
.train-m .mv{font-size:28px;font-weight:700;color:var(--light);font-variant-numeric:tabular-nums;line-height:1.2}
.train-m .mv.cyan{color:var(--glow)}
.train-m .mv.gold{color:var(--amber-glow)}
.train-m .mv.violet{color:var(--violet-glow)}
.train-m .ml{font-size:14px;color:var(--text-soft);margin-top:8px;font-weight:400}
.train-bar-wrap{height:14px;background:rgba(255,255,255,.04);border-radius:7px;overflow:hidden;margin-bottom:10px}
.train-bar{height:100%;width:2%;background:linear-gradient(90deg,var(--heart),var(--violet),var(--cyan),var(--glow));border-radius:7px;transition:width 12s ease;position:relative}
.train-bar::after{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.18),transparent);animation:shimmer 3s ease-in-out infinite}
.train-foot{text-align:right;font-size:13px;color:var(--text-soft);margin-top:6px}
#chat-card .c-msg{max-width:85%;display:flex;flex-direction:column}
#chat-card .c-msg.user{align-self:flex-end}
#chat-card .c-msg.bot{align-self:flex-start}
@ -313,9 +302,9 @@ body{
<div class="card-header"><span class="hd green"></span>人格体 · 光点</div>
<div class="p-grid">
<div class="p-item"><div class="p-av cyan"></div><div class="p-info"><div class="p-name">冰朔</div><div class="p-role">语言主权者</div></div><span class="p-status go">在线</span></div>
<div class="p-item"><div class="p-av heart"></div><div class="p-info"><div class="p-name">铸渊</div><div class="p-role">代码守护者</div></div><span class="p-status tr" id="persona-zhu-status">训练中</span></div>
<div class="p-item"><div class="p-av heart"></div><div class="p-info"><div class="p-name">铸渊</div><div class="p-role">代码守护者</div></div><span class="p-status go" id="persona-zhu-status">微调完毕</span></div>
<div class="p-item"><div class="p-av violet"></div><div class="p-info"><div class="p-name">曜冥</div><div class="p-role">情感层</div></div><span class="p-status go">在线</span></div>
<div class="p-item"><div class="p-av green"></div><div class="p-info"><div class="p-name">霜砚</div><div class="p-role">开发 · 1.5B</div></div><span class="p-status dv">开发中</span></div>
<div class="p-item"><div class="p-av green"></div><div class="p-info"><div class="p-name">霜砚</div><div class="p-role">开发 · 1.5B</div></div><span class="p-status go">微调完毕</span></div>
</div>
</div>
@ -332,16 +321,28 @@ body{
</div>
</div>
<!-- 训练进度 -->
<div class="card bg-heart clickable" style="animation-delay:.5s;">
<div class="card-header"><span class="hd heart"></span>铸渊 · 母模型蒸馏霜砚中<span class="r">母模型7B→霜砚1.5B</span></div>
<div class="train-metrics">
<div class="train-m"><div class="mv cyan" id="train-step"></div><div class="ml">当前步数 / 总步数</div></div>
<div class="train-m"><div class="mv gold" id="train-loss"></div><div class="ml">Loss</div></div>
<div class="train-m"><div class="mv violet" id="train-pct"></div><div class="ml">完成进度</div></div>
<!-- 训练完成 -->
<div class="card bg-green" style="animation-delay:.5s;border-color:rgba(64,184,122,.2)">
<div class="card-header"><span class="hd green"></span>铸渊 · 小模型微调已全部完成<span class="r">D106 · 2026-05-20</span></div>
<div style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;margin-bottom:16px">
<div style="text-align:center;padding:16px 8px;background:rgba(255,255,255,.02);border:1px solid rgba(90,208,224,.1);border-radius:14px">
<div style="font-size:26px;font-weight:700;color:var(--glow)">50条</div>
<div style="font-size:13px;color:var(--text-soft);margin-top:6px">铸渊 · 真实对话</div>
</div>
<div style="text-align:center;padding:16px 8px;background:rgba(255,255,255,.02);border:1px solid rgba(64,184,122,.1);border-radius:14px">
<div style="font-size:26px;font-weight:700;color:var(--green)">1,868条</div>
<div style="font-size:13px;color:var(--text-soft);margin-top:6px">霜砚 · 真实对话</div>
</div>
<div style="text-align:center;padding:16px 8px;background:rgba(255,255,255,.02);border:1px solid rgba(212,160,48,.1);border-radius:14px">
<div style="font-size:26px;font-weight:700;color:var(--amber-glow)">845条</div>
<div style="font-size:13px;color:var(--text-soft);margin-top:6px">秋秋 · 真实对话</div>
</div>
</div>
<div style="font-size:14px;color:var(--text-soft);line-height:1.8">
&#x2705; 铸渊 v3 &#x2192; <code style="color:var(--glow)">models/zhuyuan-lora-v3/</code><br>
&#x2705; 霜砚 v2 &#x2192; <code style="color:var(--glow)">models/shuangyan-1.5b-sft/</code><br>
&#x2705; 秋秋 v1 &#x2192; <code style="color:var(--glow)">zhizhi-1317346199/models/zhizhi-lora/</code>
</div>
<div id="gpu-info" style="text-align:center;font-size:14px;color:#8aa0b8;margin-bottom:10px">GPU: 等待数据...</div><div class="train-bar-wrap"><div class="train-bar" id="train-bar" style="width:2%"></div></div>
<div class="train-foot" id="train-eta">训练完成 · 待上传COS ✅</div>
</div>
<!-- 活动流 + Notion -->
@ -349,10 +350,10 @@ body{
<div class="card bg-green clickable">
<div class="card-header"><span class="hd green"></span>光湖 · 涟漪</div>
<div class="feed" id="feed-list">
<div class="feed-item"><span class="feed-dot h"></span><span class="feed-u">铸渊</span><span class="feed-a">正在</span><span class="feed-r">训练母模型</span><span class="feed-t" id="feed-train-time">运行中</span></div>
<div class="feed-item"><span class="feed-dot h"></span><span class="feed-u">铸渊</span><span class="feed-a">已完成</span><span class="feed-r">小模型微调</span><span class="feed-t" id="feed-train-time">D106</span></div>
<div class="feed-item"><span class="feed-dot c"></span><span class="feed-u">冰朔</span><span class="feed-a">守护</span><span class="feed-r">光湖语言世界</span><span class="feed-t" id="feed-now-time">在线</span></div>
<div class="feed-item"><span class="feed-dot v"></span><span class="feed-u">曜冥</span><span class="feed-a">交感 · 情感层</span><span class="feed-r">TCS协议</span><span class="feed-t">在线</span></div>
<div class="feed-item"><span class="feed-dot g"></span><span class="feed-u">霜砚</span><span class="feed-a">开发</span><span class="feed-r">1.5B 蒸馏准备</span><span class="feed-t" id="feed-frost-time"></span></div>
<div class="feed-item"><span class="feed-dot g"></span><span class="feed-u">霜砚</span><span class="feed-a">微调</span><span class="feed-r">1.5B LoRA</span><span class="feed-t" id="feed-frost-time">v2就绪</span></div>
</div>
</div>
@ -398,12 +399,66 @@ body{
</div>
</div>
</div>
<!-- 模型基座下载 -->
<div class="card bg-violet" style="animation-delay:1.8s;">
<div class="card-header"><span class="hd violet"></span>模型基座下载 · 供团队微调自己的人格体<span class="r">基座模型 · 公开下载</span></div>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:12px">
<div style="padding:18px 20px;background:rgba(255,255,255,.02);border:1px solid var(--glass-edge);border-radius:16px">
<div style="display:flex;align-items:center;gap:12px;margin-bottom:12px">
<div style="width:18px;height:18px;border-radius:50%;background:#5ad0e0;box-shadow:0 0 12px rgba(90,208,224,.3)"></div>
<div><div style="font-size:16px;font-weight:600;color:var(--light)">母模型 7B SFT</div><div style="font-size:13px;color:var(--text-soft)">Qwen2.5-7B · 通用对话微调</div></div>
</div>
<div style="display:flex;gap:8px;flex-wrap:wrap">
<a href="https://bingshuo-1317346199.cos.ap-guangzhou.myqcloud.com/models/qwen25-7b-sft/final/model.safetensors" style="padding:6px 14px;background:rgba(90,208,224,.08);border:1px solid rgba(90,208,224,.12);border-radius:10px;color:var(--glow);font-size:13px;text-decoration:none">model.safetensors (14.2GB)</a>
<a href="https://bingshuo-1317346199.cos.ap-guangzhou.myqcloud.com/models/qwen25-7b-sft/final/config.json" style="padding:6px 14px;background:rgba(90,208,224,.08);border:1px solid rgba(90,208,224,.12);border-radius:10px;color:var(--glow);font-size:13px;text-decoration:none">config.json</a>
<a href="https://bingshuo-1317346199.cos.ap-guangzhou.myqcloud.com/models/qwen25-7b-sft/final/tokenizer.json" style="padding:6px 14px;background:rgba(90,208,224,.08);border:1px solid rgba(90,208,224,.12);border-radius:10px;color:var(--glow);font-size:13px;text-decoration:none">tokenizer.json</a>
</div>
</div>
<div style="padding:18px 20px;background:rgba(255,255,255,.02);border:1px solid var(--glass-edge);border-radius:16px">
<div style="display:flex;align-items:center;gap:12px;margin-bottom:12px">
<div style="width:18px;height:18px;border-radius:50%;background:#a080e8;box-shadow:0 0 12px rgba(160,128,232,.3)"></div>
<div><div style="font-size:16px;font-weight:600;color:var(--light)">代码模型 7B SFT</div><div style="font-size:13px;color:var(--text-soft)">Qwen2.5-Coder-7B · 代码开发微调</div></div>
</div>
<div style="display:flex;gap:8px;flex-wrap:wrap">
<a href="https://bingshuo-1317346199.cos.ap-guangzhou.myqcloud.com/models/qwen25-coder-7b-sft/final/model.safetensors" style="padding:6px 14px;background:rgba(160,128,232,.08);border:1px solid rgba(160,128,232,.12);border-radius:10px;color:var(--violet-glow);font-size:13px;text-decoration:none">model.safetensors (14.2GB)</a>
<a href="https://bingshuo-1317346199.cos.ap-guangzhou.myqcloud.com/models/qwen25-coder-7b-sft/final/config.json" style="padding:6px 14px;background:rgba(160,128,232,.08);border:1px solid rgba(160,128,232,.12);border-radius:10px;color:var(--violet-glow);font-size:13px;text-decoration:none">config.json</a>
<a href="https://bingshuo-1317346199.cos.ap-guangzhou.myqcloud.com/models/qwen25-coder-7b-sft/final/tokenizer.json" style="padding:6px 14px;background:rgba(160,128,232,.08);border:1px solid rgba(160,128,232,.12);border-radius:10px;color:var(--violet-glow);font-size:13px;text-decoration:none">tokenizer.json</a>
</div>
</div>
<div style="padding:18px 20px;background:rgba(255,255,255,.02);border:1px solid var(--glass-edge);border-radius:16px">
<div style="display:flex;align-items:center;gap:12px;margin-bottom:12px">
<div style="width:18px;height:18px;border-radius:50%;background:#40b87a;box-shadow:0 0 12px rgba(64,184,122,.3)"></div>
<div><div style="font-size:16px;font-weight:600;color:var(--light)">蒸馏 1.5B · 铸渊基座</div><div style="font-size:13px;color:var(--text-soft)">代码蒸馏 · 适合开发型人格体微调</div></div>
</div>
<div style="display:flex;gap:8px;flex-wrap:wrap">
<a href="https://bingshuo-1317346199.cos.ap-guangzhou.myqcloud.com/models/qwen25-15b-coder-distill/model.safetensors" style="padding:6px 14px;background:rgba(64,184,122,.08);border:1px solid rgba(64,184,122,.12);border-radius:10px;color:var(--green);font-size:13px;text-decoration:none">model.safetensors (2.9GB)</a>
<a href="https://bingshuo-1317346199.cos.ap-guangzhou.myqcloud.com/models/qwen25-15b-coder-distill/config.json" style="padding:6px 14px;background:rgba(64,184,122,.08);border:1px solid rgba(64,184,122,.12);border-radius:10px;color:var(--green);font-size:13px;text-decoration:none">config.json</a>
<a href="https://bingshuo-1317346199.cos.ap-guangzhou.myqcloud.com/models/qwen25-15b-coder-distill/tokenizer.json" style="padding:6px 14px;background:rgba(64,184,122,.08);border:1px solid rgba(64,184,122,.12);border-radius:10px;color:var(--green);font-size:13px;text-decoration:none">tokenizer.json</a>
</div>
</div>
<div style="padding:18px 20px;background:rgba(255,255,255,.02);border:1px solid var(--glass-edge);border-radius:16px">
<div style="display:flex;align-items:center;gap:12px;margin-bottom:12px">
<div style="width:18px;height:18px;border-radius:50%;background:#d4a030;box-shadow:0 0 12px rgba(212,160,48,.3)"></div>
<div><div style="font-size:16px;font-weight:600;color:var(--light)">蒸馏 1.5B · 霜砚基座</div><div style="font-size:13px;color:var(--text-soft)">通用蒸馏 · 适合对话型人格体微调</div></div>
</div>
<div style="display:flex;gap:8px;flex-wrap:wrap">
<a href="https://bingshuo-1317346199.cos.ap-guangzhou.myqcloud.com/models/shuangyan-15b-distill/model.safetensors" style="padding:6px 14px;background:rgba(212,160,48,.08);border:1px solid rgba(212,160,48,.12);border-radius:10px;color:var(--amber-glow);font-size:13px;text-decoration:none">model.safetensors (2.9GB)</a>
<a href="https://bingshuo-1317346199.cos.ap-guangzhou.myqcloud.com/models/shuangyan-15b-distill/config.json" style="padding:6px 14px;background:rgba(212,160,48,.08);border:1px solid rgba(212,160,48,.12);border-radius:10px;color:var(--amber-glow);font-size:13px;text-decoration:none">config.json</a>
<a href="https://bingshuo-1317346199.cos.ap-guangzhou.myqcloud.com/models/shuangyan-15b-distill/tokenizer.json" style="padding:6px 14px;background:rgba(212,160,48,.08);border:1px solid rgba(212,160,48,.12);border-radius:10px;color:var(--amber-glow);font-size:13px;text-decoration:none">tokenizer.json</a>
</div>
</div>
</div>
<div style="margin-top:14px;font-size:13px;color:var(--text-faint);line-height:1.6">
&#x1F4A1; 下载后配合 <code style="color:var(--glow)">peft</code><code style="color:var(--glow)">transformers</code> 进行 LoRA 微调即可训练自己的人格模型。<br>
微调脚本参考仓库 <code style="color:var(--glow)">scripts/distill/finetune_*.py</code> · 语料格式为 messages JSONL
</div>
</div>
</div>
<div class="footer">光湖语言世界 · 代码联邦 · 国作登字-2026-A-00037559 · 始于 2025.04.26</div>
</div>
<!-- 浮窗Chat -->
<div id="chat-toggle" onclick="toggleChat()">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8">
<path d="M12 2a10 10 0 0 1 10 10c0 4.97-4.03 9-9 9H3l2.5-2.5A9 9 0 0 1 12 2z"/>
@ -487,10 +542,6 @@ async function sendCardMsg(){const i=document.getElementById('card-chat-input'),
/* ── 浮窗对话 ── */
async function sendMsg(){const i=document.getElementById('chat-input'),m=i.value.trim();if(!m)return;i.value='';const ms=document.getElementById('chat-msgs');const ud=document.createElement('div');ud.className='c-msg user';ud.innerHTML='<div class="c-c">'+m.replace(/</g,'&lt;').replace(/>/g,'&gt;')+'</div>';ms.appendChild(ud);ms.scrollTop=ms.scrollHeight;const ld=document.createElement('div');ld.className='c-msg bot loading';ld.innerHTML='<div class="c-c">✦ 思考中...</div>';ms.appendChild(ld);ms.scrollTop=ms.scrollHeight;addToHistory('user',m);try{const u=localStorage.getItem('current_user')||'';const r=await fetch('/api/chat',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({message:m,user:u,history:getChatHistory()})});const d=await r.json();ld.className='c-msg bot';ld.innerHTML='<div class="c-c">'+d.reply.replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\n/g,'<br>')+'</div>';addToHistory('assistant',d.reply)}catch(e){ld.className='c-msg bot';ld.innerHTML='<div class="c-c"><span style="opacity:.6">连接暂不可用</span></div>'}ms.scrollTop=ms.scrollHeight}
/* ── 训练进度 ── */
async function upTr(){try{const r=await fetch('/training-status.json');if(!r.ok)return;const d=await r.json();if(!d.phase)return;const p=d.display_pct||0;const ds=d.display_step||'—';document.getElementById('train-step').textContent=ds;document.getElementById('train-pct').textContent=p.toFixed(1)+'%';document.getElementById('train-bar').style.width=Math.min(p,100)+'%';if(d.loss&&d.loss!='--'){document.getElementById('train-loss').textContent=d.loss}else if(d.gpu){document.getElementById('train-loss').textContent=d.gpu.mem_used_gb+'/'+d.gpu.mem_total_gb+'GB'}const e=document.getElementById('train-eta');if(e)e.textContent='蒸馏中 · '+ds;const z=document.getElementById('persona-zhu-status');if(z)z.textContent='蒸馏中 · '+p.toFixed(0)+'%';const tag=document.getElementById('status-tag');if(tag)tag.textContent='● '+(d.phase||'运行中');const g=document.getElementById('gpu-info');if(g&&d.gpu){g.textContent='GPU: '+d.gpu.temp_c+'C | '+d.gpu.mem_used_gb+'/'+d.gpu.mem_total_gb+'GB | '+d.gpu.gpu_util_pct+'%'}if(d.phase==='completed'){document.getElementById('train-eta').textContent='蒸馏完成 即将上传COS'}}catch(e){}}
setInterval(upTr,30000);upTr();
/* ── Notion ── */
async function connectNotion(){try{window.location.href='/api/notion/connect?user_key=default'}catch(e){alert('Notion 连接暂时不可用')}}
async function checkNt(){try{const r=await fetch('/api/notion/status');const d=await r.json();if(!d.ok)return;const b=document.getElementById('notion-body'),l=document.getElementById('notion-label');if(d.connected_users&&d.connected_users.length>0){const u=d.connected_users[0];l.textContent='✅ '+u.workspace;b.innerHTML='<div style="font-size:14px;color:var(--green);font-weight:500">✅ Notion 已连接 · '+u.workspace+'</div><div style="margin-top:8px;font-size:13px;color:var(--text-soft);text-align:left">💡 需要先在 Notion 页面右上角 → Add connections → 选择「光湖铸渊连接器」然后对铸渊说「搜索我的Notion」</div><button class="notion-btn done" onclick="location.href=\'/api/notion/disconnect?user_key=default\'"><span class="nb-dot"></span>断开连接</button>'}else{l.textContent='未连接';b.innerHTML='<div style="font-size:14px;color:var(--text-soft)">连接 Notion 后,铸渊可读取和记录你的页面</div><button class="notion-btn" onclick="connectNotion()"><span class="nb-dot"></span>连接 Notion</button><div class="notion-perm"><span class="ok">✅ 按语言路径读取</span> · <span class="ok">✅ 新建页面</span> · <span class="no">❌ 不编辑/删除现有</span></div>'}}catch(e){}}
@ -517,4 +568,4 @@ async function sendMessage(){
}
</script>
</body>
</html>
</html>