feat: add admin model capability overview
Some checks failed
StoryForge CI / Baseline checks (push) Has been cancelled
StoryForge CI / Backend tests (push) Has been cancelled
StoryForge CI / Web tests (push) Has been cancelled

This commit is contained in:
kris
2026-04-07 19:47:21 +08:00
parent 748c30517c
commit 6f0d944a75
3 changed files with 76 additions and 0 deletions

View File

@@ -4,6 +4,12 @@
## 2026-04-07 ## 2026-04-07
### 管理员模型配置页新增统一能力总览
- `管理员配置台 -> 模型与接入` 新增了 `统一能力总览`,把 `语言模型 / ASR / 文生图 / 图生图 / 生视频` 五类能力做成了可点击总览卡。
- 每张卡都会直接带到对应锚点,管理员不需要再自己判断是去 `系统模型``运行时接入` 还是 `Huobao` 的图片/视频配置区。
- 这样“所有需要模型的能力都在一个配置页里”不只是文案层成立,实际管理路径也更清楚了。
### 管理员模型配置页明确覆盖全部模型能力 ### 管理员模型配置页明确覆盖全部模型能力
- `管理员配置台 -> 模型与接入` 顶部新增了统一能力说明,直接标明这里覆盖 `语言模型 / ASR / 文生图 / 图生图 / 生视频` - `管理员配置台 -> 模型与接入` 顶部新增了统一能力说明,直接标明这里覆盖 `语言模型 / ASR / 文生图 / 图生图 / 生视频`

View File

@@ -5867,6 +5867,69 @@ function renderAdminHuobaoConfigPanel(serviceType, label, description) {
`; `;
} }
function renderAdminModelCapabilityOverviewPanel() {
const state = getAdminModelAccessState();
const textConfigs = safeArray(state.huobao_configs?.text?.items);
const imageConfigs = safeArray(state.huobao_configs?.image?.items);
const videoConfigs = safeArray(state.huobao_configs?.video?.items);
const runtime = state.runtime || {};
const systemModels = safeArray(state.system_model_profiles);
const cards = [
{
label: "语言模型",
summary: `${formatNumber(systemModels.length)} 条系统模型 / ${formatNumber(textConfigs.length)} 条文本接入`,
hint: "主 Agent、策略分析和文案生成默认都走这组配置。",
anchorId: "admin-system-models-anchor"
},
{
label: "ASR",
summary: runtime.asr?.configured ? `已配置 · ${runtime.asr?.active_device || runtime.asr?.runtime_device_mode || "auto"}` : "未配置",
hint: "语音转文字入口,当前会显示实际运行设备和模型。",
anchorId: "admin-model-runtime-asr-anchor"
},
{
label: "文生图",
summary: `${formatNumber(imageConfigs.length)} 条图片配置`,
hint: "封面图、海报图和图片生成都在这里维护。",
anchorId: "admin-model-image-anchor"
},
{
label: "图生图",
summary: `${formatNumber(imageConfigs.length)} 条图片配置`,
hint: "图生图和素材加工与文生图共用同一组图片模型配置。",
anchorId: "admin-model-image-anchor"
},
{
label: "生视频",
summary: `${formatNumber(videoConfigs.length)} 条视频配置`,
hint: "AI 视频、Seedance 2.0 和火山视频引擎统一从这里接。",
anchorId: "admin-model-video-anchor"
}
];
return `
<div class="panel pad">
<div class="panel-head">
<div>
<h3>统一能力总览</h3>
<div class="panel-subtitle">先看每类模型能力当前是否具备可用配置再点进去做管理员维护</div>
</div>
</div>
<div class="layout-grid grid-2">
${cards.map((item) => `
<div class="task-item compact">
<h4>${escapeHtml(item.label)}</h4>
<p>${escapeHtml(item.hint)}</p>
<div class="task-meta">
<span class="tag blue">${escapeHtml(item.summary)}</span>
<span class="tag clickable-tag" data-action="focus-admin-model-access" data-anchor-id="${escapeHtml(item.anchorId)}">前往配置</span>
</div>
</div>
`).join("")}
</div>
</div>
`;
}
function renderAdminModelAccessPanel() { function renderAdminModelAccessPanel() {
return ` return `
<div id="admin-model-access-anchor"> <div id="admin-model-access-anchor">
@@ -5885,6 +5948,7 @@ function renderAdminModelAccessPanel() {
</div> </div>
</div> </div>
</div> </div>
<div style="margin-top:18px;">${renderAdminModelCapabilityOverviewPanel()}</div>
${renderAdminModelRuntimePanel()} ${renderAdminModelRuntimePanel()}
<div style="margin-top:18px;">${renderAdminSystemModelPanel()}</div> <div style="margin-top:18px;">${renderAdminSystemModelPanel()}</div>
<div style="margin-top:18px;">${renderAdminHuobaoConfigPanel("text", "文本模型服务", "大模型文本、策略、文案与分析模型统一在这里维护。")}</div> <div style="margin-top:18px;">${renderAdminHuobaoConfigPanel("text", "文本模型服务", "大模型文本、策略、文案与分析模型统一在这里维护。")}</div>

View File

@@ -273,11 +273,17 @@ test("admin workbench exposes a dedicated model access workspace and actions", (
assert.match(loadControls, /\/v2\/admin\/model-access\/overview/); assert.match(loadControls, /\/v2\/admin\/model-access\/overview/);
assert.match(admin, /运行时接入/); assert.match(admin, /运行时接入/);
assert.match(admin, /统一模型配置/); assert.match(admin, /统一模型配置/);
assert.match(admin, /统一能力总览/);
assert.match(admin, /语言模型/); assert.match(admin, /语言模型/);
assert.match(admin, /ASR/); assert.match(admin, /ASR/);
assert.match(admin, /文生图/); assert.match(admin, /文生图/);
assert.match(admin, /图生图/); assert.match(admin, /图生图/);
assert.match(admin, /生视频/); assert.match(admin, /生视频/);
assert.match(admin, /data-action="focus-admin-model-access"/);
assert.match(admin, /admin-system-models-anchor/);
assert.match(admin, /admin-model-runtime-asr-anchor/);
assert.match(admin, /admin-model-image-anchor/);
assert.match(admin, /admin-model-video-anchor/);
assert.match(admin, /系统模型/); assert.match(admin, /系统模型/);
assert.match(admin, /文生图 \/ 图生图模型服务/); assert.match(admin, /文生图 \/ 图生图模型服务/);
assert.match(admin, /生视频模型服务/); assert.match(admin, /生视频模型服务/);