guanghulab/server/portal/routes/active-model.js

44 lines
1.4 KiB
JavaScript
Raw Permalink Normal View History

/*
* /api/active-model (mother | coder)
* 守护: 铸渊 · ICE-GL-ZY001
*
* GET / 当前
* POST / {name} 切换 (本地状态 + 转发推理端)
*
* 注意: 推理端 switch-model 失败时, 本地状态不回滚.
* 原因: 推理端可能没起 (AutoDL 关机 / 还没 refresh-endpoint), 但用户在前端
* tab 应该立即生效, 等推理端起来再连. 这跟 cc-004 "不让用户做无用功"
* 一致. 如果回滚, 用户每次切 tab 都失败, 体验崩.
*/
"use strict";
const express = require("express");
const router = express.Router();
router.get("/", (req, res) => {
res.json({
name: req.ctx.inference.getActiveModel()
});
});
router.post("/", async (req, res) => {
const body = req.body || {};
const name = body.name;
if (name !== "mother" && name !== "coder") {
return res.status(400).json({ error: true, code: "bad_name", message: "name 只允许 mother 或 coder" });
}
// 本地立即生效
req.ctx.inference.setActiveModel(name);
// 异步通知推理端 (失败不挡前端)
let upstream = { ok: false, message: "推理端尚未联通, 切换稍后生效" };
try {
const r = await req.ctx.inference.switchUpstreamModel(name);
upstream = { ok: true, ...r };
} catch (e) {
upstream = { ok: false, message: e.message };
}
res.json({ name, upstream });
});
module.exports = router;