Merge branch '108' of https://github.com/HBAI-Ltd/Toonflow-app into 108
# Conflicts: # src/router.ts # src/types/database.d.ts
This commit is contained in:
commit
6faa5c93d3
@ -204,6 +204,7 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
|
|||||||
table.integer("projectId");
|
table.integer("projectId");
|
||||||
table.integer("eventState");
|
table.integer("eventState");
|
||||||
table.text("event");
|
table.text("event");
|
||||||
|
table.text("errorReason");
|
||||||
table.integer("createTime");
|
table.integer("createTime");
|
||||||
table.primary(["id"]);
|
table.primary(["id"]);
|
||||||
table.unique(["id"]);
|
table.unique(["id"]);
|
||||||
@ -447,6 +448,15 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
|
|||||||
table.unique(["storyboardId", "assetId"]);
|
table.unique(["storyboardId", "assetId"]);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "o_scriptAssets",
|
||||||
|
builder: (table) => {
|
||||||
|
table.integer("scriptId").notNullable();
|
||||||
|
table.integer("assetId").notNullable();
|
||||||
|
table.primary(["scriptId", "assetId"]);
|
||||||
|
table.unique(["scriptId", "assetId"]);
|
||||||
|
},
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
for (const t of tables) {
|
for (const t of tables) {
|
||||||
|
|||||||
128
src/router.ts
128
src/router.ts
@ -1,4 +1,4 @@
|
|||||||
// @routes-hash 0ea539b96a91286c69cc811893902704
|
// @routes-hash d482a1b197a774825d3bc1c4ca8b70c5
|
||||||
import { Express } from "express";
|
import { Express } from "express";
|
||||||
|
|
||||||
import route1 from "./routes/agents/clearMemory";
|
import route1 from "./routes/agents/clearMemory";
|
||||||
@ -49,37 +49,38 @@ import route45 from "./routes/production/saveFlowData";
|
|||||||
import route46 from "./routes/production/workbench/confirmSelection";
|
import route46 from "./routes/production/workbench/confirmSelection";
|
||||||
import route47 from "./routes/production/workbench/delVideo";
|
import route47 from "./routes/production/workbench/delVideo";
|
||||||
import route48 from "./routes/production/workbench/generateVideo";
|
import route48 from "./routes/production/workbench/generateVideo";
|
||||||
import route49 from "./routes/production/workbench/getVideoModelDetail";
|
import route49 from "./routes/production/workbench/getChatLines";
|
||||||
import route50 from "./routes/production/workbench/videoPolling";
|
import route50 from "./routes/production/workbench/getVideoModelDetail";
|
||||||
import route51 from "./routes/project/addProject";
|
import route51 from "./routes/production/workbench/videoPolling";
|
||||||
import route52 from "./routes/project/delProject";
|
import route52 from "./routes/project/addProject";
|
||||||
import route53 from "./routes/project/editProject";
|
import route53 from "./routes/project/delProject";
|
||||||
import route54 from "./routes/project/getProject";
|
import route54 from "./routes/project/editProject";
|
||||||
import route55 from "./routes/script/addScript";
|
import route55 from "./routes/project/getProject";
|
||||||
import route56 from "./routes/script/delScript";
|
import route56 from "./routes/script/addScript";
|
||||||
import route57 from "./routes/script/exportScript";
|
import route57 from "./routes/script/delScript";
|
||||||
import route58 from "./routes/script/getScrptApi";
|
import route58 from "./routes/script/exportScript";
|
||||||
import route59 from "./routes/script/updateScript";
|
import route59 from "./routes/script/getScrptApi";
|
||||||
import route60 from "./routes/scriptAgent/getPlanData";
|
import route60 from "./routes/script/updateScript";
|
||||||
import route61 from "./routes/scriptAgent/setPlanData";
|
import route61 from "./routes/scriptAgent/getPlanData";
|
||||||
import route62 from "./routes/setting/agentDeploy/deployAgentModel";
|
import route62 from "./routes/scriptAgent/setPlanData";
|
||||||
import route63 from "./routes/setting/agentDeploy/getAgentDeploy";
|
import route63 from "./routes/setting/agentDeploy/deployAgentModel";
|
||||||
import route64 from "./routes/setting/agentDeploy/updateKey";
|
import route64 from "./routes/setting/agentDeploy/getAgentDeploy";
|
||||||
import route65 from "./routes/setting/dbConfig/clearData";
|
import route65 from "./routes/setting/agentDeploy/updateKey";
|
||||||
import route66 from "./routes/setting/getTextModel";
|
import route66 from "./routes/setting/dbConfig/clearData";
|
||||||
import route67 from "./routes/setting/loginConfig/getUser";
|
import route67 from "./routes/setting/getTextModel";
|
||||||
import route68 from "./routes/setting/loginConfig/updateUserPwd";
|
import route68 from "./routes/setting/loginConfig/getUser";
|
||||||
import route69 from "./routes/setting/memoryConfig/getMemory";
|
import route69 from "./routes/setting/loginConfig/updateUserPwd";
|
||||||
import route70 from "./routes/setting/memoryConfig/sureMemory";
|
import route70 from "./routes/setting/memoryConfig/getMemory";
|
||||||
import route71 from "./routes/setting/vendorConfig/addVendor";
|
import route71 from "./routes/setting/memoryConfig/sureMemory";
|
||||||
import route72 from "./routes/setting/vendorConfig/deleteVendor";
|
import route72 from "./routes/setting/vendorConfig/addVendor";
|
||||||
import route73 from "./routes/setting/vendorConfig/getVendorList";
|
import route73 from "./routes/setting/vendorConfig/deleteVendor";
|
||||||
import route74 from "./routes/setting/vendorConfig/modelTest";
|
import route74 from "./routes/setting/vendorConfig/getVendorList";
|
||||||
import route75 from "./routes/setting/vendorConfig/updateVendor";
|
import route75 from "./routes/setting/vendorConfig/modelTest";
|
||||||
import route76 from "./routes/task/getTaskApi";
|
import route76 from "./routes/setting/vendorConfig/updateVendor";
|
||||||
import route77 from "./routes/task/getTaskCategories";
|
import route77 from "./routes/task/getTaskApi";
|
||||||
import route78 from "./routes/task/taskDetails";
|
import route78 from "./routes/task/getTaskCategories";
|
||||||
import route79 from "./routes/test/test";
|
import route79 from "./routes/task/taskDetails";
|
||||||
|
import route80 from "./routes/test/test";
|
||||||
|
|
||||||
export default async (app: Express) => {
|
export default async (app: Express) => {
|
||||||
app.use("/api/agents/clearMemory", route1);
|
app.use("/api/agents/clearMemory", route1);
|
||||||
@ -130,35 +131,36 @@ export default async (app: Express) => {
|
|||||||
app.use("/api/production/workbench/confirmSelection", route46);
|
app.use("/api/production/workbench/confirmSelection", route46);
|
||||||
app.use("/api/production/workbench/delVideo", route47);
|
app.use("/api/production/workbench/delVideo", route47);
|
||||||
app.use("/api/production/workbench/generateVideo", route48);
|
app.use("/api/production/workbench/generateVideo", route48);
|
||||||
app.use("/api/production/workbench/getVideoModelDetail", route49);
|
app.use("/api/production/workbench/getChatLines", route49);
|
||||||
app.use("/api/production/workbench/videoPolling", route50);
|
app.use("/api/production/workbench/getVideoModelDetail", route50);
|
||||||
app.use("/api/project/addProject", route51);
|
app.use("/api/production/workbench/videoPolling", route51);
|
||||||
app.use("/api/project/delProject", route52);
|
app.use("/api/project/addProject", route52);
|
||||||
app.use("/api/project/editProject", route53);
|
app.use("/api/project/delProject", route53);
|
||||||
app.use("/api/project/getProject", route54);
|
app.use("/api/project/editProject", route54);
|
||||||
app.use("/api/script/addScript", route55);
|
app.use("/api/project/getProject", route55);
|
||||||
app.use("/api/script/delScript", route56);
|
app.use("/api/script/addScript", route56);
|
||||||
app.use("/api/script/exportScript", route57);
|
app.use("/api/script/delScript", route57);
|
||||||
app.use("/api/script/getScrptApi", route58);
|
app.use("/api/script/exportScript", route58);
|
||||||
app.use("/api/script/updateScript", route59);
|
app.use("/api/script/getScrptApi", route59);
|
||||||
app.use("/api/scriptAgent/getPlanData", route60);
|
app.use("/api/script/updateScript", route60);
|
||||||
app.use("/api/scriptAgent/setPlanData", route61);
|
app.use("/api/scriptAgent/getPlanData", route61);
|
||||||
app.use("/api/setting/agentDeploy/deployAgentModel", route62);
|
app.use("/api/scriptAgent/setPlanData", route62);
|
||||||
app.use("/api/setting/agentDeploy/getAgentDeploy", route63);
|
app.use("/api/setting/agentDeploy/deployAgentModel", route63);
|
||||||
app.use("/api/setting/agentDeploy/updateKey", route64);
|
app.use("/api/setting/agentDeploy/getAgentDeploy", route64);
|
||||||
app.use("/api/setting/dbConfig/clearData", route65);
|
app.use("/api/setting/agentDeploy/updateKey", route65);
|
||||||
app.use("/api/setting/getTextModel", route66);
|
app.use("/api/setting/dbConfig/clearData", route66);
|
||||||
app.use("/api/setting/loginConfig/getUser", route67);
|
app.use("/api/setting/getTextModel", route67);
|
||||||
app.use("/api/setting/loginConfig/updateUserPwd", route68);
|
app.use("/api/setting/loginConfig/getUser", route68);
|
||||||
app.use("/api/setting/memoryConfig/getMemory", route69);
|
app.use("/api/setting/loginConfig/updateUserPwd", route69);
|
||||||
app.use("/api/setting/memoryConfig/sureMemory", route70);
|
app.use("/api/setting/memoryConfig/getMemory", route70);
|
||||||
app.use("/api/setting/vendorConfig/addVendor", route71);
|
app.use("/api/setting/memoryConfig/sureMemory", route71);
|
||||||
app.use("/api/setting/vendorConfig/deleteVendor", route72);
|
app.use("/api/setting/vendorConfig/addVendor", route72);
|
||||||
app.use("/api/setting/vendorConfig/getVendorList", route73);
|
app.use("/api/setting/vendorConfig/deleteVendor", route73);
|
||||||
app.use("/api/setting/vendorConfig/modelTest", route74);
|
app.use("/api/setting/vendorConfig/getVendorList", route74);
|
||||||
app.use("/api/setting/vendorConfig/updateVendor", route75);
|
app.use("/api/setting/vendorConfig/modelTest", route75);
|
||||||
app.use("/api/task/getTaskApi", route76);
|
app.use("/api/setting/vendorConfig/updateVendor", route76);
|
||||||
app.use("/api/task/getTaskCategories", route77);
|
app.use("/api/task/getTaskApi", route77);
|
||||||
app.use("/api/task/taskDetails", route78);
|
app.use("/api/task/getTaskCategories", route78);
|
||||||
app.use("/api/test/test", route79);
|
app.use("/api/task/taskDetails", route79);
|
||||||
|
app.use("/api/test/test", route80);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -40,7 +40,7 @@ export default router.post(
|
|||||||
await u
|
await u
|
||||||
.db("o_novel")
|
.db("o_novel")
|
||||||
.where("id", item.id)
|
.where("id", item.id)
|
||||||
.update({ event: item.event, eventState: item.event ? 1 : -1 });
|
.update({ event: item.event, eventState: item.event ? 1 : -1, errorReason: item?.errReason ?? null });
|
||||||
});
|
});
|
||||||
novelClass.start(chapterAllList, projectId);
|
novelClass.start(chapterAllList, projectId);
|
||||||
|
|
||||||
|
|||||||
@ -26,7 +26,7 @@ export default router.post(
|
|||||||
await u
|
await u
|
||||||
.db("o_novel")
|
.db("o_novel")
|
||||||
.where("id", item.id)
|
.where("id", item.id)
|
||||||
.update({ event: item.event, eventState: item.event ? 1 : -1 });
|
.update({ event: item.event, eventState: item.event ? 1 : -1, errorReason: item?.errorReason ?? null });
|
||||||
});
|
});
|
||||||
novel.start(allChapters, projectId);
|
novel.start(allChapters, projectId);
|
||||||
|
|
||||||
|
|||||||
@ -20,7 +20,7 @@ export default router.post(
|
|||||||
const data = await u
|
const data = await u
|
||||||
.db("o_novel")
|
.db("o_novel")
|
||||||
.where("projectId", projectId)
|
.where("projectId", projectId)
|
||||||
.select("id", "chapterIndex as index", "reel", "chapter", "chapterData", "event", "eventState")
|
.select("id", "chapterIndex as index", "reel", "chapter", "chapterData", "event", "eventState", "errorReason")
|
||||||
.andWhere((qb) => {
|
.andWhere((qb) => {
|
||||||
if (search) {
|
if (search) {
|
||||||
qb.where("chapter", "like", `%${search}%`);
|
qb.where("chapter", "like", `%${search}%`);
|
||||||
|
|||||||
49
src/routes/production/workbench/getChatLines.ts
Normal file
49
src/routes/production/workbench/getChatLines.ts
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
import express from "express";
|
||||||
|
import u from "@/utils";
|
||||||
|
import { z } from "zod";
|
||||||
|
import { v4 as uuidv4 } from "uuid";
|
||||||
|
import { success } from "@/lib/responseFormat";
|
||||||
|
import { validateFields } from "@/middleware/middleware";
|
||||||
|
import { Output } from "ai";
|
||||||
|
const router = express.Router();
|
||||||
|
|
||||||
|
export default router.post("/", validateFields({}), async (req, res) => {
|
||||||
|
const {} = req.body;
|
||||||
|
});
|
||||||
|
|
||||||
|
async function getLines() {
|
||||||
|
const resText = await u.Ai.Text("eventExtractAgent").invoke({
|
||||||
|
messages: [
|
||||||
|
{
|
||||||
|
role: "system",
|
||||||
|
content: `
|
||||||
|
你是一个专业的文本分析助手,请从以下文本中提取所有台词(对话内容)。
|
||||||
|
## 提取规则:
|
||||||
|
1. 提取所有人物说话的内容,包括:
|
||||||
|
- 引号内的对话("..."、'...'、「...」、『...』)
|
||||||
|
- 旁白式独白
|
||||||
|
2. 忽略说话者、叙述性文字、动作描写
|
||||||
|
3. 保留台词的原始语气和标点
|
||||||
|
4. 忽略非对话的叙述性文字
|
||||||
|
5. 直接以 JSON 数组格式输出,不要任何额外说明
|
||||||
|
示例输出格式:
|
||||||
|
["台词1", "台词2", "台词3"]
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
role: "user",
|
||||||
|
content: `
|
||||||
|
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
output: Output.array({
|
||||||
|
element: z.object({
|
||||||
|
lines: z.string().describe("台词内容"),
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
const parseLines = JSON.parse(resText.text);
|
||||||
|
const chatLines = parseLines.elements.map((i) => i.lines);
|
||||||
|
return chatLines;
|
||||||
|
}
|
||||||
@ -7,20 +7,35 @@ const router = express.Router();
|
|||||||
|
|
||||||
// 新增剧本
|
// 新增剧本
|
||||||
export default router.post(
|
export default router.post(
|
||||||
"/",
|
"/",
|
||||||
validateFields({
|
validateFields({
|
||||||
name: z.string(),
|
name: z.string(),
|
||||||
content: z.string(),
|
content: z.string(),
|
||||||
projectId: z.number(),
|
projectId: z.number(),
|
||||||
}),
|
assets: z.array(z.number()),
|
||||||
async (req, res) => {
|
}),
|
||||||
const { name, content, projectId } = req.body;
|
async (req, res) => {
|
||||||
await u.db("o_script").insert({
|
const { name, content, projectId, assets } = req.body;
|
||||||
name,
|
const [scriptId] = await u.db("o_script").insert({
|
||||||
content,
|
name,
|
||||||
projectId,
|
content,
|
||||||
createTime: Date.now(),
|
projectId,
|
||||||
|
createTime: Date.now(),
|
||||||
|
});
|
||||||
|
if (assets.length) {
|
||||||
|
const assetsData = await u.db("o_assets").whereIn("id", assets).select();
|
||||||
|
if (assetsData.length) {
|
||||||
|
const assetsIds = assetsData.map((item) => item.id);
|
||||||
|
const insertData = assetsIds.map((i) => {
|
||||||
|
return {
|
||||||
|
scriptId,
|
||||||
|
assetId: i,
|
||||||
|
};
|
||||||
});
|
});
|
||||||
res.status(200).send(success({ message: "添加剧本成功" }));
|
await u.db("o_scriptAssets").insert(insertData);
|
||||||
},
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
res.status(200).send(success({ message: "添加剧本成功" }));
|
||||||
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
@ -6,18 +6,43 @@ import { validateFields } from "@/middleware/middleware";
|
|||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
export default router.post(
|
export default router.post(
|
||||||
"/",
|
"/",
|
||||||
validateFields({
|
validateFields({
|
||||||
projectId: z.number(),
|
projectId: z.number(),
|
||||||
name: z.string().optional(),
|
name: z.string().optional(),
|
||||||
}),
|
}),
|
||||||
async (req, res) => {
|
async (req, res) => {
|
||||||
const { projectId, name } = req.body;
|
const { projectId, name } = req.body;
|
||||||
let query = u.db("o_script").where("projectId", projectId).select("*");
|
let query = u.db("o_script").where("projectId", projectId).select("*");
|
||||||
if (name) {
|
if (name) {
|
||||||
query = query.andWhere("name", "like", `%${name}%`);
|
query = query.andWhere("name", "like", `%${name}%`);
|
||||||
}
|
}
|
||||||
const data = await query;
|
|
||||||
res.status(200).send(success(data));
|
const data = await query;
|
||||||
},
|
const assetsData = await u
|
||||||
|
.db("o_assets")
|
||||||
|
.leftJoin("o_scriptAssets", "o_assets.id", "o_scriptAssets.assetId")
|
||||||
|
.whereIn(
|
||||||
|
"o_scriptAssets.scriptId",
|
||||||
|
data.map((i) => i.id),
|
||||||
|
)
|
||||||
|
.select("o_assets.id", "o_assets.name", "o_scriptAssets.scriptId");
|
||||||
|
console.log("%c Line:23 🍷 assetsData", "background:#ffdd4d", assetsData);
|
||||||
|
const scriptAssetsMap: Record<number, { id: number; name: string }[]> = {};
|
||||||
|
assetsData.forEach((i) => {
|
||||||
|
if (scriptAssetsMap[i.scriptId]) {
|
||||||
|
scriptAssetsMap[i.scriptId].push({ id: i.id, name: i.name });
|
||||||
|
} else {
|
||||||
|
scriptAssetsMap[i.scriptId] = [{ id: i.id, name: i.name }];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const returnData = data.map((i) => ({
|
||||||
|
id: i.id,
|
||||||
|
name: i.name,
|
||||||
|
content: i.content,
|
||||||
|
createTime: i.createTime,
|
||||||
|
assets: scriptAssetsMap[i.id!] || [],
|
||||||
|
}));
|
||||||
|
res.status(200).send(success(returnData));
|
||||||
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
@ -7,18 +7,33 @@ const router = express.Router();
|
|||||||
|
|
||||||
// 编辑剧本
|
// 编辑剧本
|
||||||
export default router.post(
|
export default router.post(
|
||||||
"/",
|
"/",
|
||||||
validateFields({
|
validateFields({
|
||||||
id: z.number(),
|
id: z.number(),
|
||||||
name: z.string(),
|
name: z.string(),
|
||||||
content: z.string(),
|
content: z.string(),
|
||||||
}),
|
assets: z.array(z.number()),
|
||||||
async (req, res) => {
|
}),
|
||||||
const { id, name, content } = req.body;
|
async (req, res) => {
|
||||||
await u.db("o_script").where({ id }).update({
|
const { id, name, content, assets } = req.body;
|
||||||
name,
|
await u.db("o_script").where({ id }).update({
|
||||||
content,
|
name,
|
||||||
|
content,
|
||||||
|
});
|
||||||
|
if (assets.length) {
|
||||||
|
const assetsData = await u.db("o_assets").whereIn("id", assets).select();
|
||||||
|
await u.db("o_scriptAssets").where({ scriptId: id }).delete();
|
||||||
|
if (assetsData.length) {
|
||||||
|
const insertData = assetsData.map((item) => {
|
||||||
|
return {
|
||||||
|
scriptId: id,
|
||||||
|
assetId: item.id,
|
||||||
|
};
|
||||||
});
|
});
|
||||||
res.status(200).send(success({ message: "编辑剧本成功" }));
|
await u.db("o_scriptAssets").insert(insertData);
|
||||||
},
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
res.status(200).send(success({ message: "编辑剧本成功" }));
|
||||||
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
7
src/types/database.d.ts
vendored
7
src/types/database.d.ts
vendored
@ -1,4 +1,4 @@
|
|||||||
// @db-hash f73a46df6ee14425a01df5c1ff88fcb2
|
// @db-hash b6146b9f91d8b9853e0f6fcb41c3145b
|
||||||
//该文件由脚本自动生成,请勿手动修改
|
//该文件由脚本自动生成,请勿手动修改
|
||||||
|
|
||||||
export interface memories {
|
export interface memories {
|
||||||
@ -123,6 +123,10 @@ export interface o_script {
|
|||||||
'name'?: string | null;
|
'name'?: string | null;
|
||||||
'projectId'?: number | null;
|
'projectId'?: number | null;
|
||||||
}
|
}
|
||||||
|
export interface o_scriptAssets {
|
||||||
|
'assetId'?: number;
|
||||||
|
'scriptId'?: number;
|
||||||
|
}
|
||||||
export interface o_setting {
|
export interface o_setting {
|
||||||
'key'?: string | null;
|
'key'?: string | null;
|
||||||
'value'?: string | null;
|
'value'?: string | null;
|
||||||
@ -215,6 +219,7 @@ export interface DB {
|
|||||||
"o_outlineNovel": o_outlineNovel;
|
"o_outlineNovel": o_outlineNovel;
|
||||||
"o_project": o_project;
|
"o_project": o_project;
|
||||||
"o_script": o_script;
|
"o_script": o_script;
|
||||||
|
"o_scriptAssets": o_scriptAssets;
|
||||||
"o_setting": o_setting;
|
"o_setting": o_setting;
|
||||||
"o_storyboard": o_storyboard;
|
"o_storyboard": o_storyboard;
|
||||||
"o_storyboardFlow": o_storyboardFlow;
|
"o_storyboardFlow": o_storyboardFlow;
|
||||||
|
|||||||
@ -60,7 +60,7 @@ class CleanNovel {
|
|||||||
this.emitter.emit("item", { id: novel.id, event: preData });
|
this.emitter.emit("item", { id: novel.id, event: preData });
|
||||||
totalEvent.push({ id: novel.id!, event: preData });
|
totalEvent.push({ id: novel.id!, event: preData });
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.emitter.emit("item", { id: novel.id, event: null });
|
this.emitter.emit("item", { id: novel.id, event: null, errorReason: u.error(e).message });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user