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; const { tokenKey } = setting;
// 从 header 或 query 参数获取 token // 从 header 或 query 参数获取 token
const rawToken = req.headers.authorization || (req.query.token as string) || ""; 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(); if (req.path === "/other/login") return next();

View File

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

View File

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