no message
This commit is contained in:
parent
b6694df5c8
commit
851fb6253d
6
data/vendor/grsai.ts
vendored
6
data/vendor/grsai.ts
vendored
@ -119,7 +119,7 @@ declare const createMinimax: any;
|
||||
declare const createGoogleGenerativeAI: any;
|
||||
declare const exports: {
|
||||
vendor: VendorConfig;
|
||||
textRequest: (m: TextModel) => any; //文本模型
|
||||
textRequest: (m: TextModel, t: boolean, tl: 0 | 1 | 2 | 3) => any; //文本模型
|
||||
imageRequest: (c: ImageConfig, m: ImageModel) => Promise<string>; //图片模型,返回有头base64字符串
|
||||
videoRequest: (c: VideoConfig, m: VideoModel) => Promise<string>; //视频模型,返回有头base64字符串
|
||||
ttsRequest: (c: TTSConfig, m: TTSModel) => Promise<string>; //(暂未开放)语音模型,返回有头base64字符串
|
||||
@ -133,7 +133,7 @@ declare const exports: {
|
||||
|
||||
const vendor: VendorConfig = {
|
||||
id: "grsai",
|
||||
version: "1.0",
|
||||
version: "2.0",
|
||||
author: "Toonflow",
|
||||
name: "Grsai",
|
||||
description: "Grsai AI平台适配,支持文生图、图生图、文生视频、Gemini兼容文本模型 \n [前往中转平台](https://tf.grsai.ai/zh)",
|
||||
@ -165,7 +165,7 @@ const getHeaders = () => {
|
||||
// 适配器函数
|
||||
// ============================================================
|
||||
|
||||
const textRequest = (model: TextModel) => {
|
||||
const textRequest = (model: TextModel, think: boolean, thinkLevel: 0 | 1 | 2 | 3) => {
|
||||
if (!vendor.inputValues.apiKey) throw new Error("缺少API Key");
|
||||
const apiKey = vendor.inputValues.apiKey.replace(/^Bearer\s+/i, "");
|
||||
return createGoogleGenerativeAI({
|
||||
|
||||
4
data/vendor/klingai.ts
vendored
4
data/vendor/klingai.ts
vendored
@ -119,7 +119,7 @@ declare const createMinimax: any;
|
||||
declare const createGoogleGenerativeAI: any;
|
||||
declare const exports: {
|
||||
vendor: VendorConfig;
|
||||
textRequest: (m: TextModel) => any;
|
||||
textRequest: (m: TextModel, t: boolean, tl: 0 | 1 | 2 | 3) => any;
|
||||
imageRequest: (c: ImageConfig, m: ImageModel) => Promise<string>;
|
||||
videoRequest: (c: VideoConfig, m: VideoModel) => Promise<string>;
|
||||
ttsRequest: (c: TTSConfig, m: TTSModel) => Promise<string>;
|
||||
@ -436,7 +436,7 @@ const submitAndPoll = async (submitUrl: string, queryUrlBase: string, requestBod
|
||||
// 适配器函数
|
||||
// ============================================================
|
||||
|
||||
const textRequest = (model: TextModel) => {
|
||||
const textRequest = (model: TextModel, think: boolean, thinkLevel: 0 | 1 | 2 | 3) => {
|
||||
throw new Error("可灵AI不支持文本模型");
|
||||
};
|
||||
|
||||
|
||||
4
data/vendor/minimax.ts
vendored
4
data/vendor/minimax.ts
vendored
@ -119,7 +119,7 @@ declare const createMinimax: any;
|
||||
declare const createGoogleGenerativeAI: any;
|
||||
declare const exports: {
|
||||
vendor: VendorConfig;
|
||||
textRequest: (m: TextModel) => any;
|
||||
textRequest: (m: TextModel, t: boolean, tl: 0 | 1 | 2 | 3) => any;
|
||||
uploadReference: (base64: string, fileType: "image" | "audio" | "video") => Promise<ReferenceList>;
|
||||
imageRequest: (c: ImageConfig, m: ImageModel) => Promise<string>;
|
||||
videoRequest: (c: VideoConfig, m: VideoModel) => Promise<string>;
|
||||
@ -225,7 +225,7 @@ const extractBase64WithHead = (ref: ReferenceList): string => {
|
||||
// 适配器函数
|
||||
// ============================================================
|
||||
|
||||
const textRequest = (model: TextModel) => {
|
||||
const textRequest = (model: TextModel, think: boolean, thinkLevel: 0 | 1 | 2 | 3) => {
|
||||
if (!vendor.inputValues.apiKey) throw new Error("缺少API Key");
|
||||
const apiKey = vendor.inputValues.apiKey.replace(/^Bearer\s+/i, "");
|
||||
const baseUrl = getBaseUrl();
|
||||
|
||||
8
data/vendor/null.ts
vendored
8
data/vendor/null.ts
vendored
@ -119,7 +119,7 @@ declare const createMinimax: any;
|
||||
declare const createGoogleGenerativeAI: any;
|
||||
declare const exports: {
|
||||
vendor: VendorConfig;
|
||||
textRequest: (m: TextModel) => any; //文本模型
|
||||
textRequest: (m: TextModel, t: boolean, tl: 0 | 1 | 2 | 3) => any; //文本模型
|
||||
imageRequest: (c: ImageConfig, m: ImageModel) => Promise<string>; //图片模型,返回有头base64字符串
|
||||
videoRequest: (c: VideoConfig, m: VideoModel) => Promise<string>; //视频模型,返回有头base64字符串
|
||||
ttsRequest: (c: TTSConfig, m: TTSModel) => Promise<string>; //(暂未开放)语音模型,返回有头base64字符串
|
||||
@ -132,11 +132,11 @@ declare const exports: {
|
||||
// ============================================================
|
||||
|
||||
const vendor: VendorConfig = {
|
||||
id: "bull",
|
||||
id: "null",
|
||||
version: "2.0",
|
||||
author: "Toonflow",
|
||||
name: "空模板",
|
||||
description: "## OpenAI标准格式接口,可修改请求地址并手动添加模型。",
|
||||
description: "## 开发模板,您可以使用此模板进行Vibe Coding",
|
||||
inputs: [
|
||||
{ key: "apiKey", label: "API密钥", type: "password", required: true },
|
||||
{ key: "baseUrl", label: "请求地址", type: "url", required: true, placeholder: "示例:https://api.openai.com/v1" },
|
||||
@ -149,7 +149,7 @@ const vendor: VendorConfig = {
|
||||
// 适配器函数
|
||||
// ============================================================
|
||||
|
||||
const textRequest = (model: TextModel) => {
|
||||
const textRequest = (model: TextModel, think: boolean, thinkLevel: 0 | 1 | 2 | 3) => {
|
||||
if (!vendor.inputValues.apiKey) throw new Error("缺少API Key");
|
||||
const apiKey = vendor.inputValues.apiKey.replace(/^Bearer\s+/i, "");
|
||||
return createOpenAI({ baseURL: vendor.inputValues.baseUrl, apiKey }).chat(model.modelName);
|
||||
|
||||
4
data/vendor/openai.ts
vendored
4
data/vendor/openai.ts
vendored
@ -100,7 +100,7 @@ declare const createMinimax: any;
|
||||
declare const createGoogleGenerativeAI: any;
|
||||
declare const exports: {
|
||||
vendor: VendorConfig;
|
||||
textRequest: (m: TextModel) => any;
|
||||
textRequest: (m: TextModel, t: boolean, tl: 0 | 1 | 2 | 3) => any;
|
||||
imageRequest: (c: ImageConfig, m: ImageModel) => Promise<string>;
|
||||
videoRequest: (c: VideoConfig, m: VideoModel) => Promise<string>;
|
||||
ttsRequest: (c: TTSConfig, m: TTSModel) => Promise<string>;
|
||||
@ -136,7 +136,7 @@ const vendor: VendorConfig = {
|
||||
// ============================================================
|
||||
// 适配器函数
|
||||
// ============================================================
|
||||
const textRequest = (model: TextModel) => {
|
||||
const textRequest = (model: TextModel, think: boolean, thinkLevel: 0 | 1 | 2 | 3) => {
|
||||
if (!vendor.inputValues.apiKey) throw new Error("缺少API Key");
|
||||
const apiKey = vendor.inputValues.apiKey.replace(/^Bearer\s+/i, "");
|
||||
return createOpenAI({ baseURL: vendor.inputValues.baseUrl, apiKey }).chat(model.modelName);
|
||||
|
||||
4
data/vendor/toonflow.ts
vendored
4
data/vendor/toonflow.ts
vendored
@ -119,7 +119,7 @@ declare const createMinimax: any;
|
||||
declare const createGoogleGenerativeAI: any;
|
||||
declare const exports: {
|
||||
vendor: VendorConfig;
|
||||
textRequest: (m: TextModel) => any;
|
||||
textRequest: (m: TextModel, t: boolean, tl: 0 | 1 | 2 | 3) => any;
|
||||
imageRequest: (c: ImageConfig, m: ImageModel) => Promise<string>;
|
||||
videoRequest: (c: VideoConfig, m: VideoModel) => Promise<string>;
|
||||
ttsRequest: (c: TTSConfig, m: TTSModel) => Promise<string>;
|
||||
@ -235,7 +235,7 @@ function extractFirstImageFromMd(content: string) {
|
||||
// 适配器函数
|
||||
// ============================================================
|
||||
|
||||
const textRequest = (model: TextModel) => {
|
||||
const textRequest = (model: TextModel, think: boolean, thinkLevel: 0 | 1 | 2 | 3) => {
|
||||
if (!vendor.inputValues.apiKey) throw new Error("缺少API Key");
|
||||
const apiKey = vendor.inputValues.apiKey.replace(/^Bearer\s+/i, "");
|
||||
return createOpenAI({ baseURL: vendor.inputValues.baseUrl, apiKey }).chat(model.modelName);
|
||||
|
||||
2
data/vendor/volcengine.ts
vendored
2
data/vendor/volcengine.ts
vendored
@ -119,7 +119,7 @@ declare const createMinimax: any;
|
||||
declare const createGoogleGenerativeAI: any;
|
||||
declare const exports: {
|
||||
vendor: VendorConfig;
|
||||
textRequest: (m: TextModel) => any;
|
||||
textRequest: (m: TextModel, t: boolean, tl: 0 | 1 | 2 | 3) => any;
|
||||
imageRequest: (c: ImageConfig, m: ImageModel) => Promise<string>;
|
||||
videoRequest: (c: VideoConfig, m: VideoModel) => Promise<string>;
|
||||
ttsRequest: (c: TTSConfig, m: TTSModel) => Promise<string>;
|
||||
|
||||
2863
data/web/index.html
2863
data/web/index.html
File diff suppressed because one or more lines are too long
@ -7,7 +7,7 @@ import Module from "module";
|
||||
app.commandLine.appendSwitch("disable-gpu-shader-disk-cache");
|
||||
app.commandLine.appendSwitch("disable-features", "CalculateNativeWinOcclusion");
|
||||
|
||||
const TARGET_ENTRIES = new Set(["assets", "models", "serve", "skills", "web"]);
|
||||
const TARGET_ENTRIES = new Set(["assets", "models", "serve", "skills", "web", "vendor"]);
|
||||
|
||||
function copyDir(src: string, dest: string): void {
|
||||
if (!fs.existsSync(src)) return;
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
304
src/router.ts
304
src/router.ts
@ -1,4 +1,4 @@
|
||||
// @routes-hash 04a067f990aac8e584acabe110983618
|
||||
// @routes-hash 62534cff632db5d31442f1bca1932925
|
||||
import { Express } from "express";
|
||||
|
||||
import route1 from "./routes/agents/clearMemory";
|
||||
@ -63,86 +63,87 @@ import route59 from "./routes/production/editImage/saveImageFlow";
|
||||
import route60 from "./routes/production/editImage/updateImageFlow";
|
||||
import route61 from "./routes/production/editImage/uploadImage";
|
||||
import route62 from "./routes/production/getFlowData";
|
||||
import route63 from "./routes/production/getProductionData";
|
||||
import route64 from "./routes/production/getStoryboardData";
|
||||
import route65 from "./routes/production/saveFlowData";
|
||||
import route66 from "./routes/production/storyboard/addStoryboard";
|
||||
import route67 from "./routes/production/storyboard/batchAddStoryboardInfo";
|
||||
import route68 from "./routes/production/storyboard/batchGenerateImage";
|
||||
import route69 from "./routes/production/storyboard/downPreviewImage";
|
||||
import route70 from "./routes/production/storyboard/editStoryboardInfo";
|
||||
import route71 from "./routes/production/storyboard/getStoryboardData";
|
||||
import route72 from "./routes/production/storyboard/pollingImage";
|
||||
import route73 from "./routes/production/storyboard/previewImage";
|
||||
import route74 from "./routes/production/storyboard/removeFrame";
|
||||
import route75 from "./routes/production/storyboard/updateStoryboardUrl";
|
||||
import route76 from "./routes/production/workbench/addTrack";
|
||||
import route77 from "./routes/production/workbench/deleteTrack";
|
||||
import route78 from "./routes/production/workbench/delVideo";
|
||||
import route79 from "./routes/production/workbench/generateVideo";
|
||||
import route80 from "./routes/production/workbench/generateVideoPrompt";
|
||||
import route81 from "./routes/production/workbench/getGenerateData";
|
||||
import route82 from "./routes/production/workbench/getVideoList";
|
||||
import route83 from "./routes/production/workbench/getVideoModelDetail";
|
||||
import route84 from "./routes/production/workbench/selectVideo";
|
||||
import route85 from "./routes/production/workbench/updateVideoPrompt";
|
||||
import route86 from "./routes/project/addDirectorManual";
|
||||
import route87 from "./routes/project/addProject";
|
||||
import route88 from "./routes/project/addVisualManual";
|
||||
import route89 from "./routes/project/deleteDirectorManual";
|
||||
import route90 from "./routes/project/deleteVisualManual";
|
||||
import route91 from "./routes/project/delProject";
|
||||
import route92 from "./routes/project/editDirectorlManual";
|
||||
import route93 from "./routes/project/editProject";
|
||||
import route94 from "./routes/project/editVisualManual";
|
||||
import route95 from "./routes/project/getProject";
|
||||
import route96 from "./routes/project/getVisualManual";
|
||||
import route97 from "./routes/project/queryDirectorManual";
|
||||
import route98 from "./routes/project/visualManual";
|
||||
import route99 from "./routes/script/addScript";
|
||||
import route100 from "./routes/script/batchAddScript";
|
||||
import route101 from "./routes/script/delScript";
|
||||
import route102 from "./routes/script/exportScript";
|
||||
import route103 from "./routes/script/extractAssets";
|
||||
import route104 from "./routes/script/getScrptApi";
|
||||
import route105 from "./routes/script/pollScriptAssets";
|
||||
import route106 from "./routes/script/updateScript";
|
||||
import route107 from "./routes/scriptAgent/getPlanData";
|
||||
import route108 from "./routes/scriptAgent/setPlanData";
|
||||
import route109 from "./routes/scriptAgent/updateData";
|
||||
import route110 from "./routes/setting/about/checkUpdate";
|
||||
import route111 from "./routes/setting/about/downloadApp";
|
||||
import route112 from "./routes/setting/agentDeploy/agentSetKey";
|
||||
import route113 from "./routes/setting/agentDeploy/deployAgentModel";
|
||||
import route114 from "./routes/setting/agentDeploy/getAgentDeploy";
|
||||
import route115 from "./routes/setting/dbConfig/clearData";
|
||||
import route116 from "./routes/setting/dev/getSwitchAiDevTool";
|
||||
import route117 from "./routes/setting/dev/updateSwitchAiDevTool";
|
||||
import route118 from "./routes/setting/fileManagement/openFolder";
|
||||
import route119 from "./routes/setting/getTextModel";
|
||||
import route120 from "./routes/setting/loginConfig/getUser";
|
||||
import route121 from "./routes/setting/loginConfig/updateUserPwd";
|
||||
import route122 from "./routes/setting/memoryConfig/delAllMemory";
|
||||
import route123 from "./routes/setting/memoryConfig/getMemory";
|
||||
import route124 from "./routes/setting/memoryConfig/sureMemory";
|
||||
import route125 from "./routes/setting/promptManage/getPrompt";
|
||||
import route126 from "./routes/setting/promptManage/updatePrompt";
|
||||
import route127 from "./routes/setting/skillManagement/getSkillContent";
|
||||
import route128 from "./routes/setting/skillManagement/getSkillList";
|
||||
import route129 from "./routes/setting/skillManagement/saveSkillContent";
|
||||
import route130 from "./routes/setting/vendorConfig/addVendor";
|
||||
import route131 from "./routes/setting/vendorConfig/deleteVendor";
|
||||
import route63 from "./routes/production/getStoryboardData";
|
||||
import route64 from "./routes/production/saveFlowData";
|
||||
import route65 from "./routes/production/storyboard/addStoryboard";
|
||||
import route66 from "./routes/production/storyboard/batchAddStoryboardInfo";
|
||||
import route67 from "./routes/production/storyboard/batchGenerateImage";
|
||||
import route68 from "./routes/production/storyboard/downPreviewImage";
|
||||
import route69 from "./routes/production/storyboard/editStoryboardInfo";
|
||||
import route70 from "./routes/production/storyboard/getStoryboardData";
|
||||
import route71 from "./routes/production/storyboard/pollingImage";
|
||||
import route72 from "./routes/production/storyboard/previewImage";
|
||||
import route73 from "./routes/production/storyboard/removeFrame";
|
||||
import route74 from "./routes/production/storyboard/updateStoryboardUrl";
|
||||
import route75 from "./routes/production/workbench/addTrack";
|
||||
import route76 from "./routes/production/workbench/deleteTrack";
|
||||
import route77 from "./routes/production/workbench/delVideo";
|
||||
import route78 from "./routes/production/workbench/generateVideo";
|
||||
import route79 from "./routes/production/workbench/generateVideoPrompt";
|
||||
import route80 from "./routes/production/workbench/getGenerateData";
|
||||
import route81 from "./routes/production/workbench/getVideoList";
|
||||
import route82 from "./routes/production/workbench/selectVideo";
|
||||
import route83 from "./routes/production/workbench/updateVideoPrompt";
|
||||
import route84 from "./routes/project/addDirectorManual";
|
||||
import route85 from "./routes/project/addProject";
|
||||
import route86 from "./routes/project/addVisualManual";
|
||||
import route87 from "./routes/project/deleteDirectorManual";
|
||||
import route88 from "./routes/project/deleteVisualManual";
|
||||
import route89 from "./routes/project/delProject";
|
||||
import route90 from "./routes/project/editDirectorlManual";
|
||||
import route91 from "./routes/project/editProject";
|
||||
import route92 from "./routes/project/editVisualManual";
|
||||
import route93 from "./routes/project/getProject";
|
||||
import route94 from "./routes/project/getVisualManual";
|
||||
import route95 from "./routes/project/queryDirectorManual";
|
||||
import route96 from "./routes/project/visualManual";
|
||||
import route97 from "./routes/script/addScript";
|
||||
import route98 from "./routes/script/batchAddScript";
|
||||
import route99 from "./routes/script/delScript";
|
||||
import route100 from "./routes/script/exportScript";
|
||||
import route101 from "./routes/script/extractAssets";
|
||||
import route102 from "./routes/script/getScrptApi";
|
||||
import route103 from "./routes/script/pollScriptAssets";
|
||||
import route104 from "./routes/script/updateScript";
|
||||
import route105 from "./routes/scriptAgent/getPlanData";
|
||||
import route106 from "./routes/scriptAgent/setPlanData";
|
||||
import route107 from "./routes/scriptAgent/updateData";
|
||||
import route108 from "./routes/setting/about/checkUpdate";
|
||||
import route109 from "./routes/setting/about/downloadApp";
|
||||
import route110 from "./routes/setting/agentDeploy/agentSetKey";
|
||||
import route111 from "./routes/setting/agentDeploy/deployAgentModel";
|
||||
import route112 from "./routes/setting/agentDeploy/getAgentDeploy";
|
||||
import route113 from "./routes/setting/dbConfig/clearData";
|
||||
import route114 from "./routes/setting/dev/getSwitchAiDevTool";
|
||||
import route115 from "./routes/setting/dev/updateSwitchAiDevTool";
|
||||
import route116 from "./routes/setting/fileManagement/openFolder";
|
||||
import route117 from "./routes/setting/getTextModel";
|
||||
import route118 from "./routes/setting/loginConfig/getUser";
|
||||
import route119 from "./routes/setting/loginConfig/updateUserPwd";
|
||||
import route120 from "./routes/setting/memoryConfig/delAllMemory";
|
||||
import route121 from "./routes/setting/memoryConfig/getMemory";
|
||||
import route122 from "./routes/setting/memoryConfig/sureMemory";
|
||||
import route123 from "./routes/setting/promptManage/getPrompt";
|
||||
import route124 from "./routes/setting/promptManage/updatePrompt";
|
||||
import route125 from "./routes/setting/skillManagement/getSkillContent";
|
||||
import route126 from "./routes/setting/skillManagement/getSkillList";
|
||||
import route127 from "./routes/setting/skillManagement/saveSkillContent";
|
||||
import route128 from "./routes/setting/vendorConfig/addVendor";
|
||||
import route129 from "./routes/setting/vendorConfig/addVendorModel";
|
||||
import route130 from "./routes/setting/vendorConfig/deleteVendor";
|
||||
import route131 from "./routes/setting/vendorConfig/delVendorModel";
|
||||
import route132 from "./routes/setting/vendorConfig/enableVendor";
|
||||
import route133 from "./routes/setting/vendorConfig/getCodeByLink";
|
||||
import route134 from "./routes/setting/vendorConfig/getVendorList";
|
||||
import route135 from "./routes/setting/vendorConfig/modelTest";
|
||||
import route136 from "./routes/setting/vendorConfig/updateCode";
|
||||
import route137 from "./routes/setting/vendorConfig/updateVendor";
|
||||
import route138 from "./routes/task/getProject";
|
||||
import route139 from "./routes/task/getTaskApi";
|
||||
import route140 from "./routes/task/getTaskCategories";
|
||||
import route141 from "./routes/task/taskDetails";
|
||||
import route142 from "./routes/test/test";
|
||||
import route137 from "./routes/setting/vendorConfig/updateVendorInputs";
|
||||
import route138 from "./routes/setting/vendorConfig/upVendorModel";
|
||||
import route139 from "./routes/task/getProject";
|
||||
import route140 from "./routes/task/getTaskApi";
|
||||
import route141 from "./routes/task/getTaskCategories";
|
||||
import route142 from "./routes/task/taskDetails";
|
||||
import route143 from "./routes/test/test";
|
||||
|
||||
export default async (app: Express) => {
|
||||
app.use("/api/agents/clearMemory", route1);
|
||||
@ -207,84 +208,85 @@ export default async (app: Express) => {
|
||||
app.use("/api/production/editImage/updateImageFlow", route60);
|
||||
app.use("/api/production/editImage/uploadImage", route61);
|
||||
app.use("/api/production/getFlowData", route62);
|
||||
app.use("/api/production/getProductionData", route63);
|
||||
app.use("/api/production/getStoryboardData", route64);
|
||||
app.use("/api/production/saveFlowData", route65);
|
||||
app.use("/api/production/storyboard/addStoryboard", route66);
|
||||
app.use("/api/production/storyboard/batchAddStoryboardInfo", route67);
|
||||
app.use("/api/production/storyboard/batchGenerateImage", route68);
|
||||
app.use("/api/production/storyboard/downPreviewImage", route69);
|
||||
app.use("/api/production/storyboard/editStoryboardInfo", route70);
|
||||
app.use("/api/production/storyboard/getStoryboardData", route71);
|
||||
app.use("/api/production/storyboard/pollingImage", route72);
|
||||
app.use("/api/production/storyboard/previewImage", route73);
|
||||
app.use("/api/production/storyboard/removeFrame", route74);
|
||||
app.use("/api/production/storyboard/updateStoryboardUrl", route75);
|
||||
app.use("/api/production/workbench/addTrack", route76);
|
||||
app.use("/api/production/workbench/deleteTrack", route77);
|
||||
app.use("/api/production/workbench/delVideo", route78);
|
||||
app.use("/api/production/workbench/generateVideo", route79);
|
||||
app.use("/api/production/workbench/generateVideoPrompt", route80);
|
||||
app.use("/api/production/workbench/getGenerateData", route81);
|
||||
app.use("/api/production/workbench/getVideoList", route82);
|
||||
app.use("/api/production/workbench/getVideoModelDetail", route83);
|
||||
app.use("/api/production/workbench/selectVideo", route84);
|
||||
app.use("/api/production/workbench/updateVideoPrompt", route85);
|
||||
app.use("/api/project/addDirectorManual", route86);
|
||||
app.use("/api/project/addProject", route87);
|
||||
app.use("/api/project/addVisualManual", route88);
|
||||
app.use("/api/project/deleteDirectorManual", route89);
|
||||
app.use("/api/project/deleteVisualManual", route90);
|
||||
app.use("/api/project/delProject", route91);
|
||||
app.use("/api/project/editDirectorlManual", route92);
|
||||
app.use("/api/project/editProject", route93);
|
||||
app.use("/api/project/editVisualManual", route94);
|
||||
app.use("/api/project/getProject", route95);
|
||||
app.use("/api/project/getVisualManual", route96);
|
||||
app.use("/api/project/queryDirectorManual", route97);
|
||||
app.use("/api/project/visualManual", route98);
|
||||
app.use("/api/script/addScript", route99);
|
||||
app.use("/api/script/batchAddScript", route100);
|
||||
app.use("/api/script/delScript", route101);
|
||||
app.use("/api/script/exportScript", route102);
|
||||
app.use("/api/script/extractAssets", route103);
|
||||
app.use("/api/script/getScrptApi", route104);
|
||||
app.use("/api/script/pollScriptAssets", route105);
|
||||
app.use("/api/script/updateScript", route106);
|
||||
app.use("/api/scriptAgent/getPlanData", route107);
|
||||
app.use("/api/scriptAgent/setPlanData", route108);
|
||||
app.use("/api/scriptAgent/updateData", route109);
|
||||
app.use("/api/setting/about/checkUpdate", route110);
|
||||
app.use("/api/setting/about/downloadApp", route111);
|
||||
app.use("/api/setting/agentDeploy/agentSetKey", route112);
|
||||
app.use("/api/setting/agentDeploy/deployAgentModel", route113);
|
||||
app.use("/api/setting/agentDeploy/getAgentDeploy", route114);
|
||||
app.use("/api/setting/dbConfig/clearData", route115);
|
||||
app.use("/api/setting/dev/getSwitchAiDevTool", route116);
|
||||
app.use("/api/setting/dev/updateSwitchAiDevTool", route117);
|
||||
app.use("/api/setting/fileManagement/openFolder", route118);
|
||||
app.use("/api/setting/getTextModel", route119);
|
||||
app.use("/api/setting/loginConfig/getUser", route120);
|
||||
app.use("/api/setting/loginConfig/updateUserPwd", route121);
|
||||
app.use("/api/setting/memoryConfig/delAllMemory", route122);
|
||||
app.use("/api/setting/memoryConfig/getMemory", route123);
|
||||
app.use("/api/setting/memoryConfig/sureMemory", route124);
|
||||
app.use("/api/setting/promptManage/getPrompt", route125);
|
||||
app.use("/api/setting/promptManage/updatePrompt", route126);
|
||||
app.use("/api/setting/skillManagement/getSkillContent", route127);
|
||||
app.use("/api/setting/skillManagement/getSkillList", route128);
|
||||
app.use("/api/setting/skillManagement/saveSkillContent", route129);
|
||||
app.use("/api/setting/vendorConfig/addVendor", route130);
|
||||
app.use("/api/setting/vendorConfig/deleteVendor", route131);
|
||||
app.use("/api/production/getStoryboardData", route63);
|
||||
app.use("/api/production/saveFlowData", route64);
|
||||
app.use("/api/production/storyboard/addStoryboard", route65);
|
||||
app.use("/api/production/storyboard/batchAddStoryboardInfo", route66);
|
||||
app.use("/api/production/storyboard/batchGenerateImage", route67);
|
||||
app.use("/api/production/storyboard/downPreviewImage", route68);
|
||||
app.use("/api/production/storyboard/editStoryboardInfo", route69);
|
||||
app.use("/api/production/storyboard/getStoryboardData", route70);
|
||||
app.use("/api/production/storyboard/pollingImage", route71);
|
||||
app.use("/api/production/storyboard/previewImage", route72);
|
||||
app.use("/api/production/storyboard/removeFrame", route73);
|
||||
app.use("/api/production/storyboard/updateStoryboardUrl", route74);
|
||||
app.use("/api/production/workbench/addTrack", route75);
|
||||
app.use("/api/production/workbench/deleteTrack", route76);
|
||||
app.use("/api/production/workbench/delVideo", route77);
|
||||
app.use("/api/production/workbench/generateVideo", route78);
|
||||
app.use("/api/production/workbench/generateVideoPrompt", route79);
|
||||
app.use("/api/production/workbench/getGenerateData", route80);
|
||||
app.use("/api/production/workbench/getVideoList", route81);
|
||||
app.use("/api/production/workbench/selectVideo", route82);
|
||||
app.use("/api/production/workbench/updateVideoPrompt", route83);
|
||||
app.use("/api/project/addDirectorManual", route84);
|
||||
app.use("/api/project/addProject", route85);
|
||||
app.use("/api/project/addVisualManual", route86);
|
||||
app.use("/api/project/deleteDirectorManual", route87);
|
||||
app.use("/api/project/deleteVisualManual", route88);
|
||||
app.use("/api/project/delProject", route89);
|
||||
app.use("/api/project/editDirectorlManual", route90);
|
||||
app.use("/api/project/editProject", route91);
|
||||
app.use("/api/project/editVisualManual", route92);
|
||||
app.use("/api/project/getProject", route93);
|
||||
app.use("/api/project/getVisualManual", route94);
|
||||
app.use("/api/project/queryDirectorManual", route95);
|
||||
app.use("/api/project/visualManual", route96);
|
||||
app.use("/api/script/addScript", route97);
|
||||
app.use("/api/script/batchAddScript", route98);
|
||||
app.use("/api/script/delScript", route99);
|
||||
app.use("/api/script/exportScript", route100);
|
||||
app.use("/api/script/extractAssets", route101);
|
||||
app.use("/api/script/getScrptApi", route102);
|
||||
app.use("/api/script/pollScriptAssets", route103);
|
||||
app.use("/api/script/updateScript", route104);
|
||||
app.use("/api/scriptAgent/getPlanData", route105);
|
||||
app.use("/api/scriptAgent/setPlanData", route106);
|
||||
app.use("/api/scriptAgent/updateData", route107);
|
||||
app.use("/api/setting/about/checkUpdate", route108);
|
||||
app.use("/api/setting/about/downloadApp", route109);
|
||||
app.use("/api/setting/agentDeploy/agentSetKey", route110);
|
||||
app.use("/api/setting/agentDeploy/deployAgentModel", route111);
|
||||
app.use("/api/setting/agentDeploy/getAgentDeploy", route112);
|
||||
app.use("/api/setting/dbConfig/clearData", route113);
|
||||
app.use("/api/setting/dev/getSwitchAiDevTool", route114);
|
||||
app.use("/api/setting/dev/updateSwitchAiDevTool", route115);
|
||||
app.use("/api/setting/fileManagement/openFolder", route116);
|
||||
app.use("/api/setting/getTextModel", route117);
|
||||
app.use("/api/setting/loginConfig/getUser", route118);
|
||||
app.use("/api/setting/loginConfig/updateUserPwd", route119);
|
||||
app.use("/api/setting/memoryConfig/delAllMemory", route120);
|
||||
app.use("/api/setting/memoryConfig/getMemory", route121);
|
||||
app.use("/api/setting/memoryConfig/sureMemory", route122);
|
||||
app.use("/api/setting/promptManage/getPrompt", route123);
|
||||
app.use("/api/setting/promptManage/updatePrompt", route124);
|
||||
app.use("/api/setting/skillManagement/getSkillContent", route125);
|
||||
app.use("/api/setting/skillManagement/getSkillList", route126);
|
||||
app.use("/api/setting/skillManagement/saveSkillContent", route127);
|
||||
app.use("/api/setting/vendorConfig/addVendor", route128);
|
||||
app.use("/api/setting/vendorConfig/addVendorModel", route129);
|
||||
app.use("/api/setting/vendorConfig/deleteVendor", route130);
|
||||
app.use("/api/setting/vendorConfig/delVendorModel", route131);
|
||||
app.use("/api/setting/vendorConfig/enableVendor", route132);
|
||||
app.use("/api/setting/vendorConfig/getCodeByLink", route133);
|
||||
app.use("/api/setting/vendorConfig/getVendorList", route134);
|
||||
app.use("/api/setting/vendorConfig/modelTest", route135);
|
||||
app.use("/api/setting/vendorConfig/updateCode", route136);
|
||||
app.use("/api/setting/vendorConfig/updateVendor", route137);
|
||||
app.use("/api/task/getProject", route138);
|
||||
app.use("/api/task/getTaskApi", route139);
|
||||
app.use("/api/task/getTaskCategories", route140);
|
||||
app.use("/api/task/taskDetails", route141);
|
||||
app.use("/api/test/test", route142);
|
||||
app.use("/api/setting/vendorConfig/updateVendorInputs", route137);
|
||||
app.use("/api/setting/vendorConfig/upVendorModel", route138);
|
||||
app.use("/api/task/getProject", route139);
|
||||
app.use("/api/task/getTaskApi", route140);
|
||||
app.use("/api/task/getTaskCategories", route141);
|
||||
app.use("/api/task/taskDetails", route142);
|
||||
app.use("/api/test/test", route143);
|
||||
}
|
||||
|
||||
@ -13,11 +13,7 @@ export default router.post(
|
||||
async (req, res) => {
|
||||
const { modelId } = req.body;
|
||||
const [id, name] = modelId.split(":");
|
||||
const data = await u.db("o_vendorConfig").where("id", id).andWhere("enable", 1).select("models").first();
|
||||
if (!data) {
|
||||
return res.status(404).send({ error: "模型未找到" });
|
||||
}
|
||||
const models = JSON.parse(data.models!);
|
||||
const models = await u.vendor.getModelList(id);
|
||||
const findData = models.find((i: any) => i.modelName == name);
|
||||
res.status(200).send(success(findData));
|
||||
},
|
||||
|
||||
@ -12,25 +12,28 @@ export default router.post(
|
||||
}),
|
||||
async (req, res) => {
|
||||
const { type } = req.body;
|
||||
const dataList = await u.db("o_vendorConfig").select("id", "models", "name").where("enable", 1);
|
||||
const dataList = await u.db("o_vendorConfig").select("id").where("enable", 1);
|
||||
if (!dataList || dataList.length === 0) {
|
||||
return res.status(404).send({ error: "模型未找到" });
|
||||
}
|
||||
const modelList = await Promise.all(dataList.map(i=> u.vendor.getModelList(i.id!)));
|
||||
const result = dataList.flatMap((data, index) => {
|
||||
const models = modelList[index];
|
||||
const filtered =
|
||||
type === "all"
|
||||
? models.filter((item: { type: string }) => item.type !== "video")
|
||||
: models.filter((item: { type: string }) => item.type === type);
|
||||
return filtered.map((item: { name: string; modelName: string; type: string }) => ({
|
||||
id: data.id,
|
||||
label: item.name,
|
||||
value: item.modelName,
|
||||
type: item.type,
|
||||
name: data.name,
|
||||
}));
|
||||
});
|
||||
res.status(200).send(success(result));
|
||||
const modelList = await Promise.all(dataList.map((i) => u.vendor.getModelList(i.id!)));
|
||||
const result = await Promise.all(
|
||||
dataList.map(async (data, index) => {
|
||||
const vendorData = await u.vendor.getVendor(data.id!);
|
||||
const models = modelList[index];
|
||||
const filtered =
|
||||
type === "all"
|
||||
? models.filter((item: { type: string }) => item.type !== "video")
|
||||
: models.filter((item: { type: string }) => item.type === type);
|
||||
return filtered.map((item: { name: string; modelName: string; type: string }) => ({
|
||||
id: data.id,
|
||||
label: item.name,
|
||||
value: item.modelName,
|
||||
type: item.type,
|
||||
name: vendorData.name,
|
||||
}));
|
||||
}),
|
||||
);
|
||||
res.status(200).send(success(result.flat()));
|
||||
},
|
||||
);
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import express from "express";
|
||||
import u from "@/utils";
|
||||
import { base64, z } from "zod";
|
||||
import { z } from "zod";
|
||||
import { success } from "@/lib/responseFormat";
|
||||
import { validateFields } from "@/middleware/middleware";
|
||||
import axios from "axios";
|
||||
@ -28,8 +28,13 @@ export default router.post(
|
||||
const imageClass = await u.Ai.Image(model).run(
|
||||
{
|
||||
prompt: prompt,
|
||||
referenceList:
|
||||
references && references.length ? await Promise.all(references.map((url: string) => ({ type: "image", base64: urlToBase64(url) }))) : [],
|
||||
referenceList: await (async () => {
|
||||
const list: { type: "image"; base64: string }[] = [];
|
||||
for (const url of references) {
|
||||
list.push({ type: "image" as const, base64: await urlToBase64(url) });
|
||||
}
|
||||
return list;
|
||||
})(),
|
||||
size: quality,
|
||||
aspectRatio: ratio,
|
||||
},
|
||||
|
||||
@ -1,74 +0,0 @@
|
||||
import express from "express";
|
||||
import u from "@/utils";
|
||||
import { z } from "zod";
|
||||
import { success } from "@/lib/responseFormat";
|
||||
import { validateFields } from "@/middleware/middleware";
|
||||
const router = express.Router();
|
||||
export default router.post(
|
||||
"/",
|
||||
validateFields({
|
||||
ids: z.array(z.number()),
|
||||
}),
|
||||
async (req, res) => {
|
||||
const { ids } = req.body;
|
||||
|
||||
//查询分镜配置
|
||||
const storyboardConfigs = await u.db("o_videoConfig").whereIn("storyboardId", ids).select("*");
|
||||
|
||||
//查询视频数据
|
||||
const videos = await u.db("o_video").whereIn("storyboardId", ids).select("*");
|
||||
|
||||
//组装数据
|
||||
const data = await Promise.all(
|
||||
ids.map(async (storyboardId: number) => {
|
||||
// 处理配置
|
||||
const configRow = storyboardConfigs.find((item) => item.storyboardId === storyboardId) || null;
|
||||
let config = null;
|
||||
if (configRow?.data) {
|
||||
const parsedData = JSON.parse(configRow.data);
|
||||
const dataWithFilePath = await Promise.all(
|
||||
parsedData.map(async (d: { type: string; id: number }) => {
|
||||
if (d.type === "assets" && d.id) {
|
||||
const row = await u
|
||||
.db("o_assets")
|
||||
.where("o_assets.id", d.id)
|
||||
.leftJoin("o_image", "o_assets.imageId", "o_image.id")
|
||||
.select("o_image.filePath as imageFilePath")
|
||||
.first();
|
||||
if (row?.imageFilePath) {
|
||||
return { id: d.id, type: "assets", url: await u.oss.getFileUrl(row.imageFilePath) };
|
||||
}
|
||||
return null;
|
||||
}
|
||||
if (d.type === "storyboard" && d.id) {
|
||||
const row = await u.db("o_storyboard").where("id", d.id).select("filePath").first();
|
||||
if (row?.filePath) {
|
||||
return { id: d.id, type: "storyboard", url: await u.oss.getFileUrl(row.filePath) };
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}),
|
||||
);
|
||||
config = { ...configRow, data: dataWithFilePath };
|
||||
}
|
||||
|
||||
// 处理视频
|
||||
const storyboardVideos = videos.filter((v) => v.storyboardId === storyboardId);
|
||||
const videosList = await Promise.all(
|
||||
storyboardVideos.map(async (item) => ({
|
||||
...item,
|
||||
filePath: item.filePath ? await u.oss.getFileUrl(item.filePath) : null,
|
||||
})),
|
||||
);
|
||||
|
||||
return {
|
||||
id: storyboardId,
|
||||
config,
|
||||
videos: videosList,
|
||||
};
|
||||
}),
|
||||
);
|
||||
return res.status(200).send(success(data));
|
||||
},
|
||||
);
|
||||
@ -42,8 +42,7 @@ export default router.post(
|
||||
return res.status(400).json(success("项目未配置视频模型"));
|
||||
}
|
||||
const [videoId, videoModelName] = projectData.videoModel.split(":");
|
||||
const vendorData = await u.db("o_vendorConfig").where("id", videoId).select("models").first();
|
||||
const models = JSON.parse(vendorData!.models!);
|
||||
const models = await u.vendor.getModelList(videoId);
|
||||
const findData = models.find((i: any) => i.modelName == videoModelName);
|
||||
const isRef = findData.mode.every((i: any) => Array.isArray(i));
|
||||
|
||||
|
||||
@ -1,17 +0,0 @@
|
||||
import express from "express";
|
||||
import u from "@/utils";
|
||||
const router = express.Router();
|
||||
|
||||
export default router.post("/", async (req, res) => {
|
||||
const { type } = req.body;
|
||||
const vendorData = await u.db("o_vendorConfig").select("id", "models", "name");
|
||||
if (!vendorData) {
|
||||
return res.status(404).send({ error: "模型未找到" });
|
||||
}
|
||||
for (const item of vendorData) {
|
||||
const modelsData = JSON.parse(item.models! ?? "[]");
|
||||
const filterData = modelsData.filter((item: { type: string }) => item.type === type);
|
||||
if (filterData.length > 0) {
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -4,6 +4,6 @@ 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");
|
||||
const data = await u.db("o_agentDeploy").leftJoin("o_vendorConfig", "o_vendorConfig.id", "o_agentDeploy.vendorId").select("o_agentDeploy.*");
|
||||
res.status(200).send(success(data));
|
||||
});
|
||||
|
||||
@ -80,7 +80,14 @@ export default router.post(
|
||||
let detail = issue.message;
|
||||
|
||||
if (issue.code === "invalid_union") {
|
||||
const unionDetails = [...new Set(issue.errors.flat().map((e) => e.message).filter(Boolean))];
|
||||
const unionDetails = [
|
||||
...new Set(
|
||||
issue.errors
|
||||
.flat()
|
||||
.map((e) => e.message)
|
||||
.filter(Boolean),
|
||||
),
|
||||
];
|
||||
if (unionDetails.length > 0) {
|
||||
detail = `${issue.message}(${unionDetails.join(";")})`;
|
||||
}
|
||||
@ -94,18 +101,13 @@ export default router.post(
|
||||
if ((vendor.id as string).includes(":")) return res.status(400).send(error("id不能包含英文冒号"));
|
||||
const data = await u.db("o_vendorConfig").where("id", vendor.id).first();
|
||||
if (data) return res.status(500).send(error("供应商id已存在"));
|
||||
await u.db("o_vendorConfig").insert({
|
||||
const [id] = await u.db("o_vendorConfig").insert({
|
||||
id: vendor.id,
|
||||
author: vendor.author,
|
||||
description: vendor.description || "",
|
||||
name: vendor.name,
|
||||
icon: vendor.icon || "",
|
||||
inputs: JSON.stringify(vendor.inputs ?? []),
|
||||
inputValues: JSON.stringify(vendor.inputValues ?? {}),
|
||||
models: JSON.stringify(vendor.models ?? []),
|
||||
createTime: Date.now(),
|
||||
models: JSON.stringify([]),
|
||||
enable: vendor.id == "toonflow" ? 1 : 0,
|
||||
});
|
||||
u.vendor.writeCode(vendor.id, tsCode);
|
||||
res.status(200).send(success(result.data));
|
||||
},
|
||||
);
|
||||
|
||||
61
src/routes/setting/vendorConfig/addVendorModel.ts
Normal file
61
src/routes/setting/vendorConfig/addVendorModel.ts
Normal file
@ -0,0 +1,61 @@
|
||||
import express from "express";
|
||||
import { success, error } from "@/lib/responseFormat";
|
||||
import { validateFields } from "@/middleware/middleware";
|
||||
import u from "@/utils";
|
||||
import { z } from "zod";
|
||||
const router = express.Router();
|
||||
|
||||
export default router.post(
|
||||
"/",
|
||||
validateFields({
|
||||
id: z.string(),
|
||||
model: z.discriminatedUnion("type", [
|
||||
z.object({
|
||||
name: z.string(),
|
||||
modelName: z.string(),
|
||||
type: z.literal("text"),
|
||||
think: 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.union([
|
||||
z.enum(["singleImage", "startEndRequired", "endFrameOptional", "startFrameOptional", "text", "audioReference", "videoReference"]),
|
||||
z.array(z.string().regex(/^(videoReference|imageReference|audioReference):\d+$/)),
|
||||
]),
|
||||
),
|
||||
audio: z.union([z.literal("optional"), z.boolean()]),
|
||||
durationResolutionMap: z.array(
|
||||
z.object({
|
||||
duration: z.array(z.number()),
|
||||
resolution: z.array(z.string()),
|
||||
}),
|
||||
),
|
||||
}),
|
||||
]),
|
||||
}),
|
||||
async (req, res) => {
|
||||
const { id, model } = req.body;
|
||||
|
||||
const models = await u.db("o_vendorConfig").where("id", id).first("models");
|
||||
if (models?.models) {
|
||||
const existingModels = JSON.parse(models.models);
|
||||
existingModels.push(model);
|
||||
await u
|
||||
.db("o_vendorConfig")
|
||||
.where("id", id)
|
||||
.update({
|
||||
models: JSON.stringify(existingModels),
|
||||
});
|
||||
}
|
||||
res.status(200).send(success("更新成功"));
|
||||
},
|
||||
);
|
||||
33
src/routes/setting/vendorConfig/delVendorModel.ts
Normal file
33
src/routes/setting/vendorConfig/delVendorModel.ts
Normal file
@ -0,0 +1,33 @@
|
||||
import express from "express";
|
||||
import { success, error } from "@/lib/responseFormat";
|
||||
import { validateFields } from "@/middleware/middleware";
|
||||
import u from "@/utils";
|
||||
import { z } from "zod";
|
||||
const router = express.Router();
|
||||
|
||||
export default router.post(
|
||||
"/",
|
||||
validateFields({
|
||||
id: z.string(),
|
||||
modelName: z.string(),
|
||||
}),
|
||||
async (req, res) => {
|
||||
const { id, modelName } = req.body;
|
||||
|
||||
const models = await u.db("o_vendorConfig").where("id", id).first("models");
|
||||
if (models?.models) {
|
||||
const existingModels = JSON.parse(models.models);
|
||||
if (!existingModels.some((model: any) => model.modelName === modelName)) {
|
||||
return res.status(400).send(error("基本模型不允许删除"));
|
||||
}
|
||||
const updatedModels = existingModels.filter((model: any) => model.modelName !== modelName);
|
||||
await u
|
||||
.db("o_vendorConfig")
|
||||
.where("id", id)
|
||||
.update({
|
||||
models: JSON.stringify(updatedModels),
|
||||
});
|
||||
}
|
||||
res.status(200).send(success("更新成功"));
|
||||
},
|
||||
);
|
||||
@ -12,9 +12,7 @@ export default router.post(
|
||||
}),
|
||||
async (req, res) => {
|
||||
const { id, enable } = req.body;
|
||||
await u.db("o_vendorConfig").where("id", id).update({
|
||||
enable,
|
||||
});
|
||||
await u.db("o_vendorConfig").where("id", id).update({ enable });
|
||||
res.status(200).send(success("更新成功"));
|
||||
},
|
||||
);
|
||||
|
||||
@ -7,17 +7,22 @@ export default router.post("/", async (req, res) => {
|
||||
const data = await u.db("o_vendorConfig").select("*");
|
||||
|
||||
const list = await Promise.all(
|
||||
data.map(async (item) => ({
|
||||
...item,
|
||||
inputValues: JSON.parse(item.inputValues ?? "{}"),
|
||||
models: await u.vendor.getModelList(item.id!),
|
||||
code: u.vendor.getCode(item.id!),
|
||||
description: u.vendor.getVendor(item.id!).description,
|
||||
inputs: u.vendor.getVendor(item.id!).inputs,
|
||||
author: u.vendor.getVendor(item.id!).author,
|
||||
name: u.vendor.getVendor(item.id!).name,
|
||||
})),
|
||||
data.map(async (item) => {
|
||||
const vendor = u.vendor.getVendor(item.id!);
|
||||
return {
|
||||
...item,
|
||||
inputValues: JSON.parse(item.inputValues ?? "{}"),
|
||||
models: await u.vendor.getModelList(item.id!),
|
||||
code: u.vendor.getCode(item.id!),
|
||||
description: vendor.description,
|
||||
inputs: vendor.inputs,
|
||||
author: vendor.author,
|
||||
name: vendor.name,
|
||||
version: vendor.version ?? "1.0",
|
||||
};
|
||||
}),
|
||||
);
|
||||
|
||||
list.sort((a, b) => (a.id === "toonflow" ? -1 : b.id === "toonflow" ? 1 : 0));
|
||||
res.status(200).send(success(list));
|
||||
});
|
||||
|
||||
@ -25,7 +25,7 @@ export default router.post(
|
||||
modelData: {
|
||||
prompt:
|
||||
"一张16:9比例的图片,完美等分为2x2四宫格布局,各区域无缝衔接:\n左上宫格:一只可爱的猫,毛发蓬松,眼睛明亮,姿态俏皮\n右上宫格:一只友善的狗,金毛犬,表情愉悦,摇着尾巴\n左下宫格:一头健壮的牛,田园背景,目光温和,皮毛光泽\n右下宫格:一匹骏马,姿态优雅,鬃毛飘逸,肌肉健美\n风格要求:四个宫格风格统一,色彩鲜艳饱和,高清画质,细节清晰锐利,专业插画风格,线条干净,统一的左上方光源,柔和阴影,和谐配色,卡通/半写实风格,宫格间用白色或浅灰细线分隔", //图片提示词
|
||||
imageBase64: [], //输入的图片提示词
|
||||
referenceList: [], //输入的图片提示词
|
||||
size: "1K", // 图片尺寸
|
||||
aspectRatio: "16:9",
|
||||
},
|
||||
@ -48,7 +48,7 @@ export default router.post(
|
||||
aspectRatio: "16:9",
|
||||
prompt:
|
||||
"A shirtless middle-aged man with a horse head is standing in a supermarket, carefully comparing two identical bottles of shampoo for 3 seconds, then suddenly bursts into tears, drops to his knees dramatically, a flock of pigeons explodes out of nowhere from behind him, the supermarket lights flicker, an old grandma nearby continues shopping completely unbothered, the horse head man instantly stops crying, puts both shampoo bottles back, and moonwalks away disappearing into the vegetable section. Security camera footage style, slightly grainy, 5 seconds.",
|
||||
imageBase64: [],
|
||||
referenceList: [],
|
||||
audio: false,
|
||||
mode: "text",
|
||||
};
|
||||
|
||||
66
src/routes/setting/vendorConfig/upVendorModel.ts
Normal file
66
src/routes/setting/vendorConfig/upVendorModel.ts
Normal file
@ -0,0 +1,66 @@
|
||||
import express from "express";
|
||||
import { success, error } from "@/lib/responseFormat";
|
||||
import { validateFields } from "@/middleware/middleware";
|
||||
import u from "@/utils";
|
||||
import { z } from "zod";
|
||||
const router = express.Router();
|
||||
|
||||
export default router.post(
|
||||
"/",
|
||||
validateFields({
|
||||
id: z.string(),
|
||||
modelName: z.string(),
|
||||
model: z.discriminatedUnion("type", [
|
||||
z.object({
|
||||
name: z.string(),
|
||||
modelName: z.string(),
|
||||
type: z.literal("text"),
|
||||
think: 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.union([
|
||||
z.enum(["singleImage", "startEndRequired", "endFrameOptional", "startFrameOptional", "text", "audioReference", "videoReference"]),
|
||||
z.array(z.string().regex(/^(videoReference|imageReference|audioReference):\d+$/)),
|
||||
]),
|
||||
),
|
||||
audio: z.union([z.literal("optional"), z.boolean()]),
|
||||
durationResolutionMap: z.array(
|
||||
z.object({
|
||||
duration: z.array(z.number()),
|
||||
resolution: z.array(z.string()),
|
||||
}),
|
||||
),
|
||||
}),
|
||||
]),
|
||||
}),
|
||||
async (req, res) => {
|
||||
const { id, modelName, model } = req.body;
|
||||
|
||||
const models = await u.db("o_vendorConfig").where("id", id).first("models");
|
||||
if (models?.models) {
|
||||
const existingModels = JSON.parse(models.models);
|
||||
const modelIndex = existingModels.findIndex((m: any) => m.modelName !== modelName);
|
||||
if (modelIndex === -1) {
|
||||
existingModels.push(model);
|
||||
}
|
||||
existingModels[modelIndex] = model;
|
||||
await u
|
||||
.db("o_vendorConfig")
|
||||
.where("id", id)
|
||||
.update({
|
||||
models: JSON.stringify(existingModels),
|
||||
});
|
||||
}
|
||||
res.status(200).send(success("更新成功"));
|
||||
},
|
||||
);
|
||||
@ -85,16 +85,10 @@ export default router.post(
|
||||
.db("o_vendorConfig")
|
||||
.where("id", id)
|
||||
.update({
|
||||
author: vendor.author,
|
||||
description: vendor.description || "",
|
||||
name: vendor.name,
|
||||
icon: vendor.icon || "",
|
||||
inputs: JSON.stringify(vendor.inputs ?? []),
|
||||
inputValues: JSON.stringify(vendor.inputValues ?? {}),
|
||||
models: JSON.stringify(vendor.models ?? []),
|
||||
createTime: Date.now(),
|
||||
});
|
||||
u.vendor.upCode(id, tsCode);
|
||||
u.vendor.writeCode(id, tsCode);
|
||||
|
||||
res.status(200).send(success(result.data));
|
||||
} catch (err) {
|
||||
|
||||
@ -1,71 +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();
|
||||
|
||||
export default router.post(
|
||||
"/",
|
||||
validateFields({
|
||||
id: z.string(),
|
||||
inputValues: z.record(z.string(), 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(),
|
||||
}),
|
||||
),
|
||||
models: z.array(
|
||||
z.discriminatedUnion("type", [
|
||||
z.object({
|
||||
name: z.string(),
|
||||
modelName: z.string(),
|
||||
type: z.literal("text"),
|
||||
think: 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.union([
|
||||
z.enum(["singleImage", "startEndRequired", "endFrameOptional", "startFrameOptional", "text"]),
|
||||
z.array(z.string().regex(/^(videoReference|imageReference|audioReference):\d+$/)),
|
||||
]),
|
||||
),
|
||||
audio: z.union([z.literal("optional"), z.boolean()]),
|
||||
durationResolutionMap: z.array(
|
||||
z.object({
|
||||
duration: z.array(z.number()),
|
||||
resolution: z.array(z.string()),
|
||||
}),
|
||||
),
|
||||
}),
|
||||
]),
|
||||
),
|
||||
}),
|
||||
async (req, res) => {
|
||||
const { id, models, inputs, inputValues } = req.body;
|
||||
|
||||
await u
|
||||
.db("o_vendorConfig")
|
||||
.where("id", id)
|
||||
.update({
|
||||
inputs: JSON.stringify(inputs),
|
||||
inputValues: JSON.stringify(inputValues),
|
||||
models: JSON.stringify(models),
|
||||
});
|
||||
res.status(200).send(success("更新成功"));
|
||||
},
|
||||
);
|
||||
26
src/routes/setting/vendorConfig/updateVendorInputs.ts
Normal file
26
src/routes/setting/vendorConfig/updateVendorInputs.ts
Normal file
@ -0,0 +1,26 @@
|
||||
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();
|
||||
|
||||
export default router.post(
|
||||
"/",
|
||||
validateFields({
|
||||
id: z.string(),
|
||||
inputValues: z.record(z.string(), z.string()),
|
||||
}),
|
||||
async (req, res) => {
|
||||
const { id, inputValues } = req.body;
|
||||
|
||||
await u
|
||||
.db("o_vendorConfig")
|
||||
.where("id", id)
|
||||
.update({
|
||||
inputValues: JSON.stringify(inputValues),
|
||||
});
|
||||
res.status(200).send(success("更新成功"));
|
||||
},
|
||||
);
|
||||
9
src/types/database.d.ts
vendored
9
src/types/database.d.ts
vendored
@ -1,4 +1,4 @@
|
||||
// @db-hash 71e339c0a728c10bedb294a93976dcd8
|
||||
// @db-hash 9248d7bcfe0a1bc57e5b9bc33d8c7d83
|
||||
//该文件由脚本自动生成,请勿手动修改
|
||||
|
||||
export interface memories {
|
||||
@ -201,17 +201,10 @@ export interface o_user {
|
||||
'password'?: string | null;
|
||||
}
|
||||
export interface o_vendorConfig {
|
||||
'author'?: string | null;
|
||||
'code'?: string | null;
|
||||
'createTime'?: number | null;
|
||||
'description'?: string | null;
|
||||
'enable'?: number | null;
|
||||
'icon'?: string | null;
|
||||
'id'?: string;
|
||||
'inputs'?: string | null;
|
||||
'inputValues'?: string | null;
|
||||
'models'?: string | null;
|
||||
'name'?: string | null;
|
||||
}
|
||||
export interface o_video {
|
||||
'errorReason'?: string | null;
|
||||
|
||||
@ -133,6 +133,15 @@ class AiText {
|
||||
}
|
||||
}
|
||||
|
||||
function referenceList2imageBase642(id: string, input: any) {
|
||||
const version = u.vendor.getVendor(id).version;
|
||||
if (!version || isNaN(parseFloat(version)) || parseFloat(version) < 2.0) {
|
||||
input.imageBase64 = input.referenceList.map((item: any) => item.base64);
|
||||
return input;
|
||||
}
|
||||
return input;
|
||||
}
|
||||
|
||||
type ReferenceList = { type: "image"; base64: string } | { type: "audio"; base64: string } | { type: "video"; base64: string };
|
||||
|
||||
interface ImageConfig {
|
||||
@ -159,6 +168,7 @@ class AiImage {
|
||||
const modelName = await resolveModelName(this.key);
|
||||
const exec = async (mn: `${string}:${string}`) => {
|
||||
const fn = await getVendorTemplateFn("imageRequest", mn);
|
||||
await referenceList2imageBase642(mn.split(":")[0], input);
|
||||
this.result = await fn(input);
|
||||
if (this.result.startsWith("http")) this.result = await urlToBase64(this.result);
|
||||
return this;
|
||||
@ -202,6 +212,7 @@ class AiVideo {
|
||||
const modelName = await resolveModelName(this.key);
|
||||
const exec = async (mn: `${string}:${string}`) => {
|
||||
const fn = await getVendorTemplateFn("videoRequest", mn);
|
||||
await referenceList2imageBase642(mn.split(":")[0], input);
|
||||
this.result = await fn(input);
|
||||
if (this.result.startsWith("http")) this.result = await urlToBase64(this.result);
|
||||
return this;
|
||||
@ -226,6 +237,7 @@ class AiAudio {
|
||||
const modelName = await resolveModelName(this.key);
|
||||
const exec = async (mn: `${string}:${string}`) => {
|
||||
const fn = await getVendorTemplateFn("ttsRequest", mn);
|
||||
await referenceList2imageBase642(mn.split(":")[0], input);
|
||||
this.result = await fn(input);
|
||||
if (this.result.startsWith("http")) this.result = await urlToBase64(this.result);
|
||||
return this;
|
||||
|
||||
@ -3,19 +3,18 @@ import fs from "fs";
|
||||
import path from "path";
|
||||
import u from "@/utils";
|
||||
|
||||
export function upCode(id: string, tsCode: string) {
|
||||
const rootDir = u.getPath();
|
||||
const vendor = u.vendor.getVendor(id);
|
||||
if (!vendor) throw new Error("供应商不存在");
|
||||
if (fs.existsSync(path.join(rootDir, "vendor", `${id}.ts`))) {
|
||||
fs.writeFileSync(path.join(rootDir, "vendor", `${id}.ts`), tsCode);
|
||||
export function writeCode(id: string | number, tsCode: string) {
|
||||
const rootDir = u.getPath("vendor")
|
||||
fs.mkdirSync(rootDir, { recursive: true })
|
||||
if (fs.existsSync(path.join(rootDir, `${id}.ts`))) {
|
||||
fs.writeFileSync(path.join(rootDir, `${id}.ts`), tsCode);
|
||||
}
|
||||
fs.writeFileSync(path.join(rootDir, "vendor", `${id}.ts`), tsCode);
|
||||
fs.writeFileSync(path.join(rootDir, `${id}.ts`), tsCode);
|
||||
}
|
||||
|
||||
export function getCode(id: string): string {
|
||||
const rootDir = u.getPath();
|
||||
const targetFile = path.join(rootDir, "vendor", `${id}.ts`);
|
||||
const rootDir = u.getPath("vendor");
|
||||
const targetFile = path.join(rootDir, `${id}.ts`);
|
||||
if (!fs.existsSync(targetFile)) return "";
|
||||
return fs.readFileSync(targetFile, "utf-8");
|
||||
}
|
||||
@ -26,7 +25,7 @@ export async function getModelList(id: string): Promise<Array<any>> {
|
||||
const code = getCode(id);
|
||||
const jsCode = transform(code, { transforms: ["typescript"] }).code;
|
||||
const vendorData = u.vm(jsCode);
|
||||
const combined = [...vendorData.vendor.models, ...JSON.parse(models?.models ?? "[]")];
|
||||
const combined = [...JSON.parse(JSON.stringify(vendorData.vendor.models)), ...JSON.parse(models?.models ?? "[]")];
|
||||
const map = new Map<string, any>();
|
||||
for (const m of combined) {
|
||||
map.set(m.modelName, m);
|
||||
|
||||
@ -26,6 +26,8 @@
|
||||
},
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"data/**/*.ts"
|
||||
"data/**/*.ts",
|
||||
"dist",
|
||||
"build"
|
||||
]
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user