一键填入key
This commit is contained in:
parent
f69766a1d4
commit
c55bd56f58
@ -1,4 +1,4 @@
|
|||||||
// @routes-hash d482a1b197a774825d3bc1c4ca8b70c5
|
// @routes-hash 060ac05250962088b128ef8200ab0471
|
||||||
import { Express } from "express";
|
import { Express } from "express";
|
||||||
|
|
||||||
import route1 from "./routes/agents/clearMemory";
|
import route1 from "./routes/agents/clearMemory";
|
||||||
@ -65,7 +65,7 @@ import route61 from "./routes/scriptAgent/getPlanData";
|
|||||||
import route62 from "./routes/scriptAgent/setPlanData";
|
import route62 from "./routes/scriptAgent/setPlanData";
|
||||||
import route63 from "./routes/setting/agentDeploy/deployAgentModel";
|
import route63 from "./routes/setting/agentDeploy/deployAgentModel";
|
||||||
import route64 from "./routes/setting/agentDeploy/getAgentDeploy";
|
import route64 from "./routes/setting/agentDeploy/getAgentDeploy";
|
||||||
import route65 from "./routes/setting/agentDeploy/updateKey";
|
import route65 from "./routes/setting/agentDeploy/oneClickToFillIn";
|
||||||
import route66 from "./routes/setting/dbConfig/clearData";
|
import route66 from "./routes/setting/dbConfig/clearData";
|
||||||
import route67 from "./routes/setting/getTextModel";
|
import route67 from "./routes/setting/getTextModel";
|
||||||
import route68 from "./routes/setting/loginConfig/getUser";
|
import route68 from "./routes/setting/loginConfig/getUser";
|
||||||
@ -147,7 +147,7 @@ export default async (app: Express) => {
|
|||||||
app.use("/api/scriptAgent/setPlanData", route62);
|
app.use("/api/scriptAgent/setPlanData", route62);
|
||||||
app.use("/api/setting/agentDeploy/deployAgentModel", route63);
|
app.use("/api/setting/agentDeploy/deployAgentModel", route63);
|
||||||
app.use("/api/setting/agentDeploy/getAgentDeploy", route64);
|
app.use("/api/setting/agentDeploy/getAgentDeploy", route64);
|
||||||
app.use("/api/setting/agentDeploy/updateKey", route65);
|
app.use("/api/setting/agentDeploy/oneClickToFillIn", route65);
|
||||||
app.use("/api/setting/dbConfig/clearData", route66);
|
app.use("/api/setting/dbConfig/clearData", route66);
|
||||||
app.use("/api/setting/getTextModel", route67);
|
app.use("/api/setting/getTextModel", route67);
|
||||||
app.use("/api/setting/loginConfig/getUser", route68);
|
app.use("/api/setting/loginConfig/getUser", route68);
|
||||||
|
|||||||
@ -5,15 +5,18 @@ import { z } from "zod";
|
|||||||
import { validateFields } from "@/middleware/middleware";
|
import { validateFields } from "@/middleware/middleware";
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
export default router.post("/", validateFields({
|
export default router.post(
|
||||||
id: z.number(),
|
"/",
|
||||||
name: z.string(),
|
validateFields({
|
||||||
model: z.string(),
|
id: z.array(z.number()),
|
||||||
modelName: z.string(),
|
}),
|
||||||
vendorId: z.number().nullable(),
|
async (req, res) => {
|
||||||
desc: z.string(),
|
const { id } = req.body;
|
||||||
}), async (req, res) => {
|
await u.db("o_agentDeploy").whereIn("id", id).where("disabled", "<>", 1).update({
|
||||||
const { id, name, model, modelName, vendorId, desc } = req.body;
|
model: "gpt-4.1",
|
||||||
await u.db("o_agentDeploy").where({ id }).update({ id, name, model, modelName, vendorId, desc });
|
modelName: "1:gpt-4.1",
|
||||||
|
vendorId: 1,
|
||||||
|
});
|
||||||
res.status(200).send(success("配置成功"));
|
res.status(200).send(success("配置成功"));
|
||||||
});
|
},
|
||||||
|
);
|
||||||
|
|||||||
9
src/routes/setting/agentDeploy/oneClickToFillIn.ts
Normal file
9
src/routes/setting/agentDeploy/oneClickToFillIn.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import express from "express";
|
||||||
|
import { success } from "@/lib/responseFormat";
|
||||||
|
import u from "@/utils";
|
||||||
|
const router = express.Router();
|
||||||
|
|
||||||
|
export default router.post("/", async (req, res) => {
|
||||||
|
const data = await u.db("o_agentDeploy").leftJoin("o_vendorConfig", "o_vendorConfig.id", "o_agentDeploy.vendorId").select("o_agentDeploy.*", "o_vendorConfig.icon");
|
||||||
|
res.status(200).send(success(data));
|
||||||
|
});
|
||||||
@ -1,116 +0,0 @@
|
|||||||
import express from "express";
|
|
||||||
import { success, error } from "@/lib/responseFormat";
|
|
||||||
import { validateFields } from "@/middleware/middleware";
|
|
||||||
import u from "@/utils";
|
|
||||||
import { z } from "zod";
|
|
||||||
import { transform } from "sucrase";
|
|
||||||
const router = express.Router();
|
|
||||||
const vendorConfigSchema = z.object({
|
|
||||||
version: z.number(),
|
|
||||||
icon: z.string().optional(),
|
|
||||||
name: z.string(),
|
|
||||||
inputs: z.array(
|
|
||||||
z.object({
|
|
||||||
key: z.string(),
|
|
||||||
label: z.string(),
|
|
||||||
type: z.enum(["text", "password", "url"]),
|
|
||||||
required: z.boolean(),
|
|
||||||
placeholder: z.string().optional(),
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
inputValues: z.record(z.string(), z.string()),
|
|
||||||
models: z.array(
|
|
||||||
z.discriminatedUnion("type", [
|
|
||||||
z.object({
|
|
||||||
name: z.string(),
|
|
||||||
modelName: z.string(),
|
|
||||||
type: z.literal("text"),
|
|
||||||
multimodal: z.boolean(),
|
|
||||||
tool: z.boolean(),
|
|
||||||
}),
|
|
||||||
z.object({
|
|
||||||
name: z.string(),
|
|
||||||
modelName: z.string(),
|
|
||||||
type: z.literal("image"),
|
|
||||||
mode: z.array(z.enum(["text", "singleImage", "multiReference"])),
|
|
||||||
}),
|
|
||||||
z.object({
|
|
||||||
name: z.string(),
|
|
||||||
modelName: z.string(),
|
|
||||||
type: z.literal("video"),
|
|
||||||
mode: z.array(
|
|
||||||
z.enum([
|
|
||||||
"singleImage",
|
|
||||||
"multiImage",
|
|
||||||
"gridImage",
|
|
||||||
"startEndRequired",
|
|
||||||
"endFrameOptional",
|
|
||||||
"startFrameOptional",
|
|
||||||
"text",
|
|
||||||
"audioReference",
|
|
||||||
"videoReference",
|
|
||||||
]),
|
|
||||||
),
|
|
||||||
audio: z.union([z.literal("optional"), z.boolean()]),
|
|
||||||
durationResolutionMap: z.array(
|
|
||||||
z.object({
|
|
||||||
duration: z.array(z.number()),
|
|
||||||
resolution: z.array(z.string()),
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
}),
|
|
||||||
]),
|
|
||||||
),
|
|
||||||
});
|
|
||||||
export default router.post("/",
|
|
||||||
validateFields({
|
|
||||||
id: z.number(),
|
|
||||||
key: z.string(),
|
|
||||||
}),
|
|
||||||
async (req, res) => {
|
|
||||||
const { id, key } = req.body;
|
|
||||||
const data = await u.db("o_vendorConfig").where("id", id).select("code", "inputValues").first();
|
|
||||||
let inputValues = JSON.parse(data?.inputValues || "{}");
|
|
||||||
inputValues.apiKey = key;
|
|
||||||
const jsCode = transform(data?.code!, { transforms: ["typescript"] }).code;
|
|
||||||
const exports = u.vm(jsCode);
|
|
||||||
if (!exports) return res.status(400).send(success("脚本文件必须导出对象"));
|
|
||||||
if (!exports.textRequest) return res.status(400).send(success("脚本文件必须导出文本请求对象"));
|
|
||||||
if (!exports.imageRequest) return res.status(400).send(success("脚本文件必须导出图像请求对象"));
|
|
||||||
if (!exports.videoRequest) return res.status(400).send(success("脚本文件必须导出视频请求对象"));
|
|
||||||
if (!exports.vendor) return res.status(400).send(success("脚本文件必须导出vendor对象"));
|
|
||||||
const vendor = exports.vendor;
|
|
||||||
const result = vendorConfigSchema.safeParse(vendor);
|
|
||||||
if (!result.success) {
|
|
||||||
const errorMsg = result.error.issues.map((e) => `${e.path.join(".")}: ${e.message}`).join("; ");
|
|
||||||
return res.status(400).send(error(`vendor配置校验失败: ${errorMsg}`));
|
|
||||||
}
|
|
||||||
const replaceBlockValue = (code: string, key: string, newValue: string): string => {
|
|
||||||
const open = newValue.trimStart()[0] as "[" | "{";
|
|
||||||
const close = open === "[" ? "]" : "}";
|
|
||||||
const keyMatch = code.match(new RegExp(`\\b${key}\\s*:\\s*[\\[{]`));
|
|
||||||
if (!keyMatch || keyMatch.index === undefined) return code;
|
|
||||||
const valueStart = keyMatch.index + keyMatch[0].length - 1;
|
|
||||||
let depth = 0;
|
|
||||||
let valueEnd = -1;
|
|
||||||
for (let i = valueStart; i < code.length; i++) {
|
|
||||||
if (code[i] === open) depth++;
|
|
||||||
else if (code[i] === close) {
|
|
||||||
depth--;
|
|
||||||
if (depth === 0) {
|
|
||||||
valueEnd = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (valueEnd === -1) return code;
|
|
||||||
return code.slice(0, valueStart) + newValue + code.slice(valueEnd + 1);
|
|
||||||
};
|
|
||||||
let updatedTsCode = data?.code!;
|
|
||||||
updatedTsCode = replaceBlockValue(updatedTsCode, "inputValues", JSON.stringify(inputValues ?? vendor.inputValues, null, 2));
|
|
||||||
await u.db("o_vendorConfig").where("id", id).update({
|
|
||||||
inputValues: inputValues ? JSON.stringify(inputValues) : JSON.stringify(vendor.inputValues),
|
|
||||||
code: updatedTsCode,
|
|
||||||
});
|
|
||||||
res.status(200).send(success("保存成功"));
|
|
||||||
});
|
|
||||||
15
src/types/database.d.ts
vendored
15
src/types/database.d.ts
vendored
@ -1,4 +1,4 @@
|
|||||||
// @db-hash 5ea1f1cf9926d08390093d10da66e6ae
|
// @db-hash c57fab383d85c473ba9ca06566b33680
|
||||||
//该文件由脚本自动生成,请勿手动修改
|
//该文件由脚本自动生成,请勿手动修改
|
||||||
|
|
||||||
export interface memories {
|
export interface memories {
|
||||||
@ -65,15 +65,6 @@ export interface o_eventChapter {
|
|||||||
'id'?: number;
|
'id'?: number;
|
||||||
'novelId'?: number | null;
|
'novelId'?: number | null;
|
||||||
}
|
}
|
||||||
export interface o_flowData {
|
|
||||||
'createTime'?: number | null;
|
|
||||||
'data'?: string | null;
|
|
||||||
'espisodeId'?: number | null;
|
|
||||||
'id'?: number;
|
|
||||||
'key'?: string | null;
|
|
||||||
'projectId'?: number | null;
|
|
||||||
'updateTime'?: number | null;
|
|
||||||
}
|
|
||||||
export interface o_image {
|
export interface o_image {
|
||||||
'assetsId'?: number | null;
|
'assetsId'?: number | null;
|
||||||
'filePath'?: string | null;
|
'filePath'?: string | null;
|
||||||
@ -88,6 +79,9 @@ export interface o_novel {
|
|||||||
'chapterData'?: string | null;
|
'chapterData'?: string | null;
|
||||||
'chapterIndex'?: number | null;
|
'chapterIndex'?: number | null;
|
||||||
'createTime'?: number | null;
|
'createTime'?: number | null;
|
||||||
|
'errorReason'?: string | null;
|
||||||
|
'event'?: string | null;
|
||||||
|
'eventState'?: number | null;
|
||||||
'id'?: number;
|
'id'?: number;
|
||||||
'projectId'?: number | null;
|
'projectId'?: number | null;
|
||||||
'reel'?: string | null;
|
'reel'?: string | null;
|
||||||
@ -210,7 +204,6 @@ export interface DB {
|
|||||||
"o_assets2Storyboard": o_assets2Storyboard;
|
"o_assets2Storyboard": o_assets2Storyboard;
|
||||||
"o_event": o_event;
|
"o_event": o_event;
|
||||||
"o_eventChapter": o_eventChapter;
|
"o_eventChapter": o_eventChapter;
|
||||||
"o_flowData": o_flowData;
|
|
||||||
"o_image": o_image;
|
"o_image": o_image;
|
||||||
"o_novel": o_novel;
|
"o_novel": o_novel;
|
||||||
"o_outline": o_outline;
|
"o_outline": o_outline;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user