From 935abf189aa35a06aa661f53934500a1809febb7 Mon Sep 17 00:00:00 2001 From: zhishi <1951671751@qq.com> Date: Thu, 19 Mar 2026 23:08:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E6=8F=90=E5=8F=96=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0scema?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router.ts | 160 ++++++++++++++++++++-------------------- src/types/database.d.ts | 76 +++++++++++++++++-- src/utils/ai.ts | 4 +- src/utils/cleanNovel.ts | 37 +++++----- 4 files changed, 174 insertions(+), 103 deletions(-) diff --git a/src/router.ts b/src/router.ts index 9b771c2..7fe2681 100644 --- a/src/router.ts +++ b/src/router.ts @@ -1,4 +1,4 @@ -// @routes-hash 3aef51df31467bb6ff0ed05b9520c86e +// @routes-hash dbac61c96fe5d9d9a361d24721d77197 import { Express } from "express"; import route1 from "./routes/agents/clearMemory"; @@ -22,45 +22,46 @@ import route18 from "./routes/general/getSingleProject"; import route19 from "./routes/general/updateProject"; import route20 from "./routes/login/login"; import route21 from "./routes/migrate/migrateData"; -import route22 from "./routes/modelSelect/getModelList"; -import route23 from "./routes/novel/addNovel"; -import route24 from "./routes/novel/batchDeleteNovel"; -import route25 from "./routes/novel/delNovel"; -import route26 from "./routes/novel/event/batchDeleteEvent"; -import route27 from "./routes/novel/event/deletEvent"; -import route28 from "./routes/novel/event/generateEvents"; -import route29 from "./routes/novel/event/getEvent"; -import route30 from "./routes/novel/getNovel"; -import route31 from "./routes/novel/updateNovel"; -import route32 from "./routes/other/deleteAllData"; -import route33 from "./routes/other/getCaptcha"; -import route34 from "./routes/production/getProductionData"; -import route35 from "./routes/project/addProject"; -import route36 from "./routes/project/delProject"; -import route37 from "./routes/project/editProject"; -import route38 from "./routes/project/getProject"; -import route39 from "./routes/script/addScript"; -import route40 from "./routes/script/delScript"; -import route41 from "./routes/script/getScrptApi"; -import route42 from "./routes/script/updateScript"; -import route43 from "./routes/setting/agentDeploy/deployAgentModel"; -import route44 from "./routes/setting/agentDeploy/getAgentDeploy"; -import route45 from "./routes/setting/agentDeploy/updateKey"; -import route46 from "./routes/setting/dbConfig/clearData"; -import route47 from "./routes/setting/getTextModel"; -import route48 from "./routes/setting/loginConfig/getUser"; -import route49 from "./routes/setting/loginConfig/updateUserPwd"; -import route50 from "./routes/setting/memoryConfig/getMemory"; -import route51 from "./routes/setting/memoryConfig/sureMemory"; -import route52 from "./routes/setting/vendorConfig/addVendor"; -import route53 from "./routes/setting/vendorConfig/deleteVendor"; -import route54 from "./routes/setting/vendorConfig/getVendorList"; -import route55 from "./routes/setting/vendorConfig/modelTest"; -import route56 from "./routes/setting/vendorConfig/updateVendor"; -import route57 from "./routes/task/getMyTaskApi"; -import route58 from "./routes/task/getTaskCategories"; -import route59 from "./routes/task/taskDetails"; -import route60 from "./routes/test/test"; +import route22 from "./routes/modelSelect/getModelDetail"; +import route23 from "./routes/modelSelect/getModelList"; +import route24 from "./routes/novel/addNovel"; +import route25 from "./routes/novel/batchDeleteNovel"; +import route26 from "./routes/novel/delNovel"; +import route27 from "./routes/novel/event/batchDeleteEvent"; +import route28 from "./routes/novel/event/deletEvent"; +import route29 from "./routes/novel/event/generateEvents"; +import route30 from "./routes/novel/event/getEvent"; +import route31 from "./routes/novel/getNovel"; +import route32 from "./routes/novel/updateNovel"; +import route33 from "./routes/other/deleteAllData"; +import route34 from "./routes/other/getCaptcha"; +import route35 from "./routes/production/getProductionData"; +import route36 from "./routes/project/addProject"; +import route37 from "./routes/project/delProject"; +import route38 from "./routes/project/editProject"; +import route39 from "./routes/project/getProject"; +import route40 from "./routes/script/addScript"; +import route41 from "./routes/script/delScript"; +import route42 from "./routes/script/getScrptApi"; +import route43 from "./routes/script/updateScript"; +import route44 from "./routes/setting/agentDeploy/deployAgentModel"; +import route45 from "./routes/setting/agentDeploy/getAgentDeploy"; +import route46 from "./routes/setting/agentDeploy/updateKey"; +import route47 from "./routes/setting/dbConfig/clearData"; +import route48 from "./routes/setting/getTextModel"; +import route49 from "./routes/setting/loginConfig/getUser"; +import route50 from "./routes/setting/loginConfig/updateUserPwd"; +import route51 from "./routes/setting/memoryConfig/getMemory"; +import route52 from "./routes/setting/memoryConfig/sureMemory"; +import route53 from "./routes/setting/vendorConfig/addVendor"; +import route54 from "./routes/setting/vendorConfig/deleteVendor"; +import route55 from "./routes/setting/vendorConfig/getVendorList"; +import route56 from "./routes/setting/vendorConfig/modelTest"; +import route57 from "./routes/setting/vendorConfig/updateVendor"; +import route58 from "./routes/task/getMyTaskApi"; +import route59 from "./routes/task/getTaskCategories"; +import route60 from "./routes/task/taskDetails"; +import route61 from "./routes/test/test"; export default async (app: Express) => { app.use("/api/agents/clearMemory", route1); @@ -84,43 +85,44 @@ export default async (app: Express) => { app.use("/api/general/updateProject", route19); app.use("/api/login/login", route20); app.use("/api/migrate/migrateData", route21); - app.use("/api/modelSelect/getModelList", route22); - app.use("/api/novel/addNovel", route23); - app.use("/api/novel/batchDeleteNovel", route24); - app.use("/api/novel/delNovel", route25); - app.use("/api/novel/event/batchDeleteEvent", route26); - app.use("/api/novel/event/deletEvent", route27); - app.use("/api/novel/event/generateEvents", route28); - app.use("/api/novel/event/getEvent", route29); - app.use("/api/novel/getNovel", route30); - app.use("/api/novel/updateNovel", route31); - app.use("/api/other/deleteAllData", route32); - app.use("/api/other/getCaptcha", route33); - app.use("/api/production/getProductionData", route34); - app.use("/api/project/addProject", route35); - app.use("/api/project/delProject", route36); - app.use("/api/project/editProject", route37); - app.use("/api/project/getProject", route38); - app.use("/api/script/addScript", route39); - app.use("/api/script/delScript", route40); - app.use("/api/script/getScrptApi", route41); - app.use("/api/script/updateScript", route42); - app.use("/api/setting/agentDeploy/deployAgentModel", route43); - app.use("/api/setting/agentDeploy/getAgentDeploy", route44); - app.use("/api/setting/agentDeploy/updateKey", route45); - app.use("/api/setting/dbConfig/clearData", route46); - app.use("/api/setting/getTextModel", route47); - app.use("/api/setting/loginConfig/getUser", route48); - app.use("/api/setting/loginConfig/updateUserPwd", route49); - app.use("/api/setting/memoryConfig/getMemory", route50); - app.use("/api/setting/memoryConfig/sureMemory", route51); - app.use("/api/setting/vendorConfig/addVendor", route52); - app.use("/api/setting/vendorConfig/deleteVendor", route53); - app.use("/api/setting/vendorConfig/getVendorList", route54); - app.use("/api/setting/vendorConfig/modelTest", route55); - app.use("/api/setting/vendorConfig/updateVendor", route56); - app.use("/api/task/getMyTaskApi", route57); - app.use("/api/task/getTaskCategories", route58); - app.use("/api/task/taskDetails", route59); - app.use("/api/test/test", route60); + app.use("/api/modelSelect/getModelDetail", route22); + app.use("/api/modelSelect/getModelList", route23); + app.use("/api/novel/addNovel", route24); + app.use("/api/novel/batchDeleteNovel", route25); + app.use("/api/novel/delNovel", route26); + app.use("/api/novel/event/batchDeleteEvent", route27); + app.use("/api/novel/event/deletEvent", route28); + app.use("/api/novel/event/generateEvents", route29); + app.use("/api/novel/event/getEvent", route30); + app.use("/api/novel/getNovel", route31); + app.use("/api/novel/updateNovel", route32); + app.use("/api/other/deleteAllData", route33); + app.use("/api/other/getCaptcha", route34); + app.use("/api/production/getProductionData", route35); + app.use("/api/project/addProject", route36); + app.use("/api/project/delProject", route37); + app.use("/api/project/editProject", route38); + app.use("/api/project/getProject", route39); + app.use("/api/script/addScript", route40); + app.use("/api/script/delScript", route41); + app.use("/api/script/getScrptApi", route42); + app.use("/api/script/updateScript", route43); + app.use("/api/setting/agentDeploy/deployAgentModel", route44); + app.use("/api/setting/agentDeploy/getAgentDeploy", route45); + app.use("/api/setting/agentDeploy/updateKey", route46); + app.use("/api/setting/dbConfig/clearData", route47); + app.use("/api/setting/getTextModel", route48); + app.use("/api/setting/loginConfig/getUser", route49); + app.use("/api/setting/loginConfig/updateUserPwd", route50); + app.use("/api/setting/memoryConfig/getMemory", route51); + app.use("/api/setting/memoryConfig/sureMemory", route52); + app.use("/api/setting/vendorConfig/addVendor", route53); + app.use("/api/setting/vendorConfig/deleteVendor", route54); + app.use("/api/setting/vendorConfig/getVendorList", route55); + app.use("/api/setting/vendorConfig/modelTest", route56); + app.use("/api/setting/vendorConfig/updateVendor", route57); + app.use("/api/task/getMyTaskApi", route58); + app.use("/api/task/getTaskCategories", route59); + app.use("/api/task/taskDetails", route60); + app.use("/api/test/test", route61); } diff --git a/src/types/database.d.ts b/src/types/database.d.ts index e3a7e5f..ffaa589 100644 --- a/src/types/database.d.ts +++ b/src/types/database.d.ts @@ -1,9 +1,9 @@ -// @db-hash 04e1150a9773602183de5f660a52b092 +// @db-hash 2f9e6a9e9145cead00652858cafb9159 //该文件由脚本自动生成,请勿手动修改 export interface memories { 'content': string; - 'createTime': number; + 'createdAt': number; 'embedding'?: string | null; 'id'?: string; 'isolationKey': string; @@ -35,12 +35,18 @@ export interface o_assets { 'projectId'?: number | null; 'prompt'?: string | null; 'remark'?: string | null; - 'scriptId'?: number | null; 'sonId'?: number | null; 'startTime'?: number | null; 'state'?: string | null; 'type'?: string | null; } +export interface o_chatHistory { + 'data'?: string | null; + 'id'?: number; + 'novel'?: string | null; + 'projectId'?: number | null; + 'type'?: string | null; +} export interface o_event { 'createTime'?: number | null; 'detail'?: string | null; @@ -61,10 +67,33 @@ export interface o_image { 'assetsId'?: number | null; 'filePath'?: string | null; 'id'?: number; - 'model'?: string | null; - 'resolution'?: string | null; + 'projectId'?: number | null; + 'scriptId'?: number | null; 'state'?: string | null; 'type'?: string | null; + 'videoId'?: number | null; +} +export interface o_model { + 'apiKey'?: string | null; + 'baseUrl'?: string | null; + 'createTime'?: number | null; + 'id'?: number; + 'index'?: number | null; + 'manufacturer'?: string | null; + 'model'?: string | null; + 'modelType'?: string | null; + 'type'?: string | null; +} +export interface o_myTasks { + 'describe'?: string | null; + 'id'?: number; + 'model'?: string | null; + 'projectId'?: number | null; + 'reason'?: string | null; + 'relatedObjects'?: string | null; + 'startTime'?: number | null; + 'state'?: string | null; + 'taskClass'?: string | null; } export interface o_novel { 'chapter'?: string | null; @@ -97,6 +126,15 @@ export interface o_project { 'userId'?: number | null; 'videoRatio'?: string | null; } +export interface o_prompts { + 'code'?: string | null; + 'customValue'?: string | null; + 'defaultValue'?: string | null; + 'id'?: number; + 'name'?: string | null; + 'parentCode'?: string | null; + 'type'?: string | null; +} export interface o_script { 'content'?: string | null; 'createTime'?: number | null; @@ -104,15 +142,35 @@ export interface o_script { 'name'?: string | null; 'projectId'?: number | null; } +export interface o_scriptAssets { + 'assetsId'?: number | null; + 'id'?: number; + 'scriptId'?: number | null; +} +export interface o_scriptOutline { + 'id'?: number; + 'outlineId'?: number | null; + 'scriptId'?: number | null; +} export interface o_setting { 'key'?: string | null; 'value'?: string | null; } +export interface o_skills { + 'id'?: number; + 'name'?: string | null; + 'startTime'?: number | null; +} export interface o_storyboard { 'createTime'?: number | null; 'id'?: number; 'name'?: string | null; } +export interface o_storyboardScript { + 'id'?: number; + 'scriptId'?: number | null; + 'storyboardId'?: number | null; +} export interface o_tasks { 'describe'?: string | null; 'id'?: number; @@ -178,17 +236,25 @@ export interface DB { "o_agentDeploy": o_agentDeploy; "o_artStyle": o_artStyle; "o_assets": o_assets; + "o_chatHistory": o_chatHistory; "o_event": o_event; "o_eventChapter": o_eventChapter; "o_flowData": o_flowData; "o_image": o_image; + "o_model": o_model; + "o_myTasks": o_myTasks; "o_novel": o_novel; "o_outline": o_outline; "o_outlineNovel": o_outlineNovel; "o_project": o_project; + "o_prompts": o_prompts; "o_script": o_script; + "o_scriptAssets": o_scriptAssets; + "o_scriptOutline": o_scriptOutline; "o_setting": o_setting; + "o_skills": o_skills; "o_storyboard": o_storyboard; + "o_storyboardScript": o_storyboardScript; "o_tasks": o_tasks; "o_user": o_user; "o_vendorConfig": o_vendorConfig; diff --git a/src/utils/ai.ts b/src/utils/ai.ts index 818d4aa..87db692 100644 --- a/src/utils/ai.ts +++ b/src/utils/ai.ts @@ -4,10 +4,10 @@ import axios from "axios"; import { transform } from "sucrase"; import u from "@/utils"; -type AiType = "scriptAgent" | "productionAgent" | "assetsAi" | "polishingAi" | "ttsDubbing" | "test"; +type AiType = "scriptAgent" | "productionAgent" | "assetsAi" | "polishingAi" | "ttsDubbing" | "eventExtractAi"; type FnName = "textRequest" | "imageRequest" | "videoRequest" | "ttsRequest"; -const AiTypeValues: AiType[] = ["scriptAgent", "productionAgent", "assetsAi", "polishingAi", "ttsDubbing"]; +const AiTypeValues: AiType[] = ["scriptAgent", "productionAgent", "assetsAi", "polishingAi", "ttsDubbing", "eventExtractAi"]; async function getVendorTemplateFn(fnName: FnName, value: AiType | `${number}:${string}`) { let id, modelName; const isAgent = AiTypeValues.includes(value as AiType); diff --git a/src/utils/cleanNovel.ts b/src/utils/cleanNovel.ts index 32183fe..64080d2 100644 --- a/src/utils/cleanNovel.ts +++ b/src/utils/cleanNovel.ts @@ -1,5 +1,6 @@ import * as z from "zod"; -import { ModelMessage } from "ai"; +import { ModelMessage, Output } from "ai"; + import { o_novel } from "@/types/database"; import ai from "@/utils/ai"; import u from "@/utils"; @@ -118,21 +119,23 @@ class CleanNovel { }, ...cleanText, ], - // output: { - // event: z.array( - // z - // .object({ - // chapter: z - // .string() - // .describe( - // "事件覆盖的章节(如1-3章、4-6章),章节划分必须连续,每个章节范围只能属于一个事件。事件分割不可过细——避免只描述琐碎、日常细节的微小事件。", - // ), - // name: z.string().describe("事件名称"), - // detail: z.string().describe("事件过程详情(包括起因、经过、结果、场景、人物等)"), - // }) - // .describe("事件必须在100-200字说明起因经过结果,不可将单一章节或细小场景独立成事件,"), - // ), - // }, + output: Output.object({ + schema: z.object({ + event: z.array( + z + .object({ + chapter: z + .string() + .describe( + "事件覆盖的章节(如1-3章、4-6章),章节划分必须连续,每个章节范围只能属于一个事件。事件分割不可过细——避免只描述琐碎、日常细节的微小事件。", + ), + name: z.string().describe("事件名称"), + detail: z.string().describe("事件过程详情(包括起因、经过、结果、场景、人物等)"), + }) + .describe("事件必须在100-200字说明起因经过结果,不可将单一章节或细小场景独立成事件,"), + ), + }), + }), }); } catch (e) { taskRecord(-1, u.error(e).message); @@ -140,7 +143,7 @@ class CleanNovel { } taskRecord(1); - preData = resData.text as Novel; + preData = JSON.parse(resData.text); const newEvents = preData?.event || []; newEvents.forEach((newItem) => {