1. 新增图像AI测试功能

This commit is contained in:
ACT丶流星雨 2026-01-30 23:55:07 +08:00
parent 13fa6e0723
commit 1c45ca0331
7 changed files with 278 additions and 188 deletions

File diff suppressed because one or more lines are too long

View File

@ -46,7 +46,7 @@ export default async function startServe() {
const { tokenKey } = setting;
// 从 header 或 query 参数获取 token
const rawToken = req.headers.authorization || (req.query.token as string) || "";
const token = rawToken.replace("Bearer ", "");
const token = rawToken.replace("Bearer ", "");
// 白名单路径
if (req.path === "/other/login") return next();

View File

@ -1,4 +1,4 @@
// @routes-hash 7f65684b8af5d021b07d338de1dc06a8
// @routes-hash 4c67f0d89475e1a882416d9f6ab1687d
import { Express } from "express";
import route1 from "./routes/assets/addAssets";
@ -20,55 +20,57 @@ import route16 from "./routes/other/deleteAllData";
import route17 from "./routes/other/getCaptcha";
import route18 from "./routes/other/login";
import route19 from "./routes/other/testAI";
import route20 from "./routes/outline/addOutline";
import route21 from "./routes/outline/agentsOutline";
import route22 from "./routes/outline/delOutline";
import route23 from "./routes/outline/getHistory";
import route24 from "./routes/outline/getOutline";
import route25 from "./routes/outline/getPartScript";
import route26 from "./routes/outline/getStoryline";
import route27 from "./routes/outline/setHistory";
import route28 from "./routes/outline/updateOutline";
import route29 from "./routes/outline/updateScript";
import route30 from "./routes/outline/updateStoryline";
import route31 from "./routes/project/addProject";
import route32 from "./routes/project/delProject";
import route33 from "./routes/project/getProject";
import route34 from "./routes/project/getProjectCount";
import route35 from "./routes/project/getSingleProject";
import route36 from "./routes/project/updateProject";
import route37 from "./routes/prompt/getPrompts";
import route38 from "./routes/prompt/updatePrompt";
import route39 from "./routes/script/generateScriptApi";
import route40 from "./routes/script/generateScriptSave";
import route41 from "./routes/script/geScriptApi";
import route42 from "./routes/setting/getSetting";
import route43 from "./routes/setting/updateSetting";
import route44 from "./routes/storyboard/batchSuperScoreImage";
import route45 from "./routes/storyboard/chatStoryboard";
import route46 from "./routes/storyboard/generateShotImage";
import route47 from "./routes/storyboard/generateStoryboardApi";
import route48 from "./routes/storyboard/generateVideoPrompt";
import route49 from "./routes/storyboard/getStoryboard";
import route50 from "./routes/storyboard/keepStoryboard";
import route51 from "./routes/storyboard/saveStoryboard";
import route52 from "./routes/storyboard/uploadImage";
import route53 from "./routes/task/getTaskApi";
import route54 from "./routes/task/taskDetails";
import route55 from "./routes/user/getUser";
import route56 from "./routes/video/addVideo";
import route57 from "./routes/video/addVideoConfig";
import route58 from "./routes/video/deleteVideoConfig";
import route59 from "./routes/video/generatePrompt";
import route60 from "./routes/video/generateVideo";
import route61 from "./routes/video/getManufacturer";
import route62 from "./routes/video/getVideo";
import route63 from "./routes/video/getVideoConfigs";
import route64 from "./routes/video/getVideoModel";
import route65 from "./routes/video/getVideoStoryboards";
import route66 from "./routes/video/reviseVideoStoryboards";
import route67 from "./routes/video/saveVideo";
import route68 from "./routes/video/upDateVideoConfig";
import route20 from "./routes/other/testImage";
import route21 from "./routes/other/testVideo";
import route22 from "./routes/outline/addOutline";
import route23 from "./routes/outline/agentsOutline";
import route24 from "./routes/outline/delOutline";
import route25 from "./routes/outline/getHistory";
import route26 from "./routes/outline/getOutline";
import route27 from "./routes/outline/getPartScript";
import route28 from "./routes/outline/getStoryline";
import route29 from "./routes/outline/setHistory";
import route30 from "./routes/outline/updateOutline";
import route31 from "./routes/outline/updateScript";
import route32 from "./routes/outline/updateStoryline";
import route33 from "./routes/project/addProject";
import route34 from "./routes/project/delProject";
import route35 from "./routes/project/getProject";
import route36 from "./routes/project/getProjectCount";
import route37 from "./routes/project/getSingleProject";
import route38 from "./routes/project/updateProject";
import route39 from "./routes/prompt/getPrompts";
import route40 from "./routes/prompt/updatePrompt";
import route41 from "./routes/script/generateScriptApi";
import route42 from "./routes/script/generateScriptSave";
import route43 from "./routes/script/geScriptApi";
import route44 from "./routes/setting/getSetting";
import route45 from "./routes/setting/updateSetting";
import route46 from "./routes/storyboard/batchSuperScoreImage";
import route47 from "./routes/storyboard/chatStoryboard";
import route48 from "./routes/storyboard/generateShotImage";
import route49 from "./routes/storyboard/generateStoryboardApi";
import route50 from "./routes/storyboard/generateVideoPrompt";
import route51 from "./routes/storyboard/getStoryboard";
import route52 from "./routes/storyboard/keepStoryboard";
import route53 from "./routes/storyboard/saveStoryboard";
import route54 from "./routes/storyboard/uploadImage";
import route55 from "./routes/task/getTaskApi";
import route56 from "./routes/task/taskDetails";
import route57 from "./routes/user/getUser";
import route58 from "./routes/video/addVideo";
import route59 from "./routes/video/addVideoConfig";
import route60 from "./routes/video/deleteVideoConfig";
import route61 from "./routes/video/generatePrompt";
import route62 from "./routes/video/generateVideo";
import route63 from "./routes/video/getManufacturer";
import route64 from "./routes/video/getVideo";
import route65 from "./routes/video/getVideoConfigs";
import route66 from "./routes/video/getVideoModel";
import route67 from "./routes/video/getVideoStoryboards";
import route68 from "./routes/video/reviseVideoStoryboards";
import route69 from "./routes/video/saveVideo";
import route70 from "./routes/video/upDateVideoConfig";
export default async (app: Express) => {
app.use("/assets/addAssets", route1);
@ -90,53 +92,55 @@ export default async (app: Express) => {
app.use("/other/getCaptcha", route17);
app.use("/other/login", route18);
app.use("/other/testAI", route19);
app.use("/outline/addOutline", route20);
app.use("/outline/agentsOutline", route21);
app.use("/outline/delOutline", route22);
app.use("/outline/getHistory", route23);
app.use("/outline/getOutline", route24);
app.use("/outline/getPartScript", route25);
app.use("/outline/getStoryline", route26);
app.use("/outline/setHistory", route27);
app.use("/outline/updateOutline", route28);
app.use("/outline/updateScript", route29);
app.use("/outline/updateStoryline", route30);
app.use("/project/addProject", route31);
app.use("/project/delProject", route32);
app.use("/project/getProject", route33);
app.use("/project/getProjectCount", route34);
app.use("/project/getSingleProject", route35);
app.use("/project/updateProject", route36);
app.use("/prompt/getPrompts", route37);
app.use("/prompt/updatePrompt", route38);
app.use("/script/generateScriptApi", route39);
app.use("/script/generateScriptSave", route40);
app.use("/script/geScriptApi", route41);
app.use("/setting/getSetting", route42);
app.use("/setting/updateSetting", route43);
app.use("/storyboard/batchSuperScoreImage", route44);
app.use("/storyboard/chatStoryboard", route45);
app.use("/storyboard/generateShotImage", route46);
app.use("/storyboard/generateStoryboardApi", route47);
app.use("/storyboard/generateVideoPrompt", route48);
app.use("/storyboard/getStoryboard", route49);
app.use("/storyboard/keepStoryboard", route50);
app.use("/storyboard/saveStoryboard", route51);
app.use("/storyboard/uploadImage", route52);
app.use("/task/getTaskApi", route53);
app.use("/task/taskDetails", route54);
app.use("/user/getUser", route55);
app.use("/video/addVideo", route56);
app.use("/video/addVideoConfig", route57);
app.use("/video/deleteVideoConfig", route58);
app.use("/video/generatePrompt", route59);
app.use("/video/generateVideo", route60);
app.use("/video/getManufacturer", route61);
app.use("/video/getVideo", route62);
app.use("/video/getVideoConfigs", route63);
app.use("/video/getVideoModel", route64);
app.use("/video/getVideoStoryboards", route65);
app.use("/video/reviseVideoStoryboards", route66);
app.use("/video/saveVideo", route67);
app.use("/video/upDateVideoConfig", route68);
app.use("/other/testImage", route20);
app.use("/other/testVideo", route21);
app.use("/outline/addOutline", route22);
app.use("/outline/agentsOutline", route23);
app.use("/outline/delOutline", route24);
app.use("/outline/getHistory", route25);
app.use("/outline/getOutline", route26);
app.use("/outline/getPartScript", route27);
app.use("/outline/getStoryline", route28);
app.use("/outline/setHistory", route29);
app.use("/outline/updateOutline", route30);
app.use("/outline/updateScript", route31);
app.use("/outline/updateStoryline", route32);
app.use("/project/addProject", route33);
app.use("/project/delProject", route34);
app.use("/project/getProject", route35);
app.use("/project/getProjectCount", route36);
app.use("/project/getSingleProject", route37);
app.use("/project/updateProject", route38);
app.use("/prompt/getPrompts", route39);
app.use("/prompt/updatePrompt", route40);
app.use("/script/generateScriptApi", route41);
app.use("/script/generateScriptSave", route42);
app.use("/script/geScriptApi", route43);
app.use("/setting/getSetting", route44);
app.use("/setting/updateSetting", route45);
app.use("/storyboard/batchSuperScoreImage", route46);
app.use("/storyboard/chatStoryboard", route47);
app.use("/storyboard/generateShotImage", route48);
app.use("/storyboard/generateStoryboardApi", route49);
app.use("/storyboard/generateVideoPrompt", route50);
app.use("/storyboard/getStoryboard", route51);
app.use("/storyboard/keepStoryboard", route52);
app.use("/storyboard/saveStoryboard", route53);
app.use("/storyboard/uploadImage", route54);
app.use("/task/getTaskApi", route55);
app.use("/task/taskDetails", route56);
app.use("/user/getUser", route57);
app.use("/video/addVideo", route58);
app.use("/video/addVideoConfig", route59);
app.use("/video/deleteVideoConfig", route60);
app.use("/video/generatePrompt", route61);
app.use("/video/generateVideo", route62);
app.use("/video/getManufacturer", route63);
app.use("/video/getVideo", route64);
app.use("/video/getVideoConfigs", route65);
app.use("/video/getVideoModel", route66);
app.use("/video/getVideoStoryboards", route67);
app.use("/video/reviseVideoStoryboards", route68);
app.use("/video/saveVideo", route69);
app.use("/video/upDateVideoConfig", route70);
}

View File

@ -0,0 +1,42 @@
import express from "express";
import { success, error } from "@/lib/responseFormat";
import u from "@/utils";
import { createAgent } from "langchain";
import { openAI } from "@/agents/models";
import { OpenAIChatModel, type OpenAIChatModelOptions } from "@aigne/openai";
import { validateFields } from "@/middleware/middleware";
import { z } from "zod";
const router = express.Router();
// 检查语言模型
export default router.post(
"/",
validateFields({
modelName: z.string().optional(),
apiKey: z.string(),
baseURL: z.string().optional(),
manufacturer: z.string(),
}),
async (req, res) => {
const { modelName, apiKey, baseURL, manufacturer } = req.body;
try {
const contentStr = await u.ai.generateImage(
{
prompt: "2D cat",
imageBase64: [],
aspectRatio: "16:9",
size: "1K",
},
{
model: modelName,
apiKey,
baseURL,
manufacturer,
},
);
res.status(200).send(success(contentStr));
} catch (err: any) {
res.status(500).send(error(err.error.message || "模型调用失败"));
}
},
);

View File

@ -0,0 +1,39 @@
import express from "express";
import { success, error } from "@/lib/responseFormat";
import u from "@/utils";
import { createAgent } from "langchain";
import { openAI } from "@/agents/models";
import { OpenAIChatModel, type OpenAIChatModelOptions } from "@aigne/openai";
import { validateFields } from "@/middleware/middleware";
import { z } from "zod";
const router = express.Router();
// 检查语言模型
export default router.post(
"/",
validateFields({
modelName: z.string().optional(),
apiKey: z.string(),
baseURL: z.string().optional(),
manufacturer: z.enum(["runninghub", "volcengine", "apimart", "gemini", "openAi"]),
}),
async (req, res) => {
const { modelName, apiKey, baseURL, manufacturer } = req.body;
try {
const videoPath = await u.ai.generateVideo(
{
imageBase64: [],
savePath: "",
prompt: "stickman Dances",
duration: 10 as any,
aspectRatio: "16:9" as any,
},
manufacturer,
);
const url = await u.oss.getFileUrl(videoPath);
res.status(200).send(success(url));
} catch (err: any) {
res.status(500).send(error(err.error.message || "模型调用失败"));
}
},
);

View File

@ -1,4 +1,4 @@
// @db-hash b6b4d8cdc25a2f4d60f1c239cd7e7060
// @db-hash f95df46ccfda3c7f0b2a9cefdc399035
//该文件由脚本自动生成,请勿手动修改
export interface t_assets {
@ -128,7 +128,6 @@ export interface t_video {
'scriptId'?: number | null;
'state'?: number | null;
'storyboardImgs'?: string | null;
'time'?: number | null;
}
export interface t_videoConfig {
'createTime'?: number | null;

View File

@ -182,8 +182,14 @@ const generators = {
},
};
export const generateImage = async (config: ImageConfig): Promise<string> => {
const { model, apiKey, baseURL, manufacturer } = await u.getConfig("image");
export const generateImage = async (config: ImageConfig, replaceConfig?: Awaited<ReturnType<typeof u.getConfig<"image">>>): Promise<string> => {
let { model, apiKey, baseURL, manufacturer } = await u.getConfig("image");
if (replaceConfig) {
model = replaceConfig.model || model;
apiKey = replaceConfig.apiKey || apiKey;
baseURL = replaceConfig.baseURL || baseURL;
manufacturer = replaceConfig.manufacturer || manufacturer;
}
const generator = generators[manufacturer as keyof typeof generators];
if (!generator) throw new Error(`不支持的厂商: ${manufacturer}`);