修正表名,去掉冗余表
This commit is contained in:
parent
25c3194e5e
commit
1f6c000664
@ -48,20 +48,7 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
|
||||
table.primary(["id"]);
|
||||
table.unique(["id"]);
|
||||
},
|
||||
initData: async (knex) => {
|
||||
},
|
||||
},
|
||||
//技能表
|
||||
{
|
||||
name: "o_skills",
|
||||
builder: (table) => {
|
||||
table.integer("id").notNullable();
|
||||
table.string("name");
|
||||
table.integer("startTime");
|
||||
table.primary(["id"]);
|
||||
table.unique(["id"]);
|
||||
},
|
||||
initData: async (knex) => { },
|
||||
initData: async (knex) => {},
|
||||
},
|
||||
//Agent配置表
|
||||
{
|
||||
@ -167,64 +154,9 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
|
||||
]);
|
||||
},
|
||||
},
|
||||
//模型表
|
||||
{
|
||||
name: "o_model",
|
||||
builder: (table) => {
|
||||
table.integer("id").notNullable();
|
||||
table.text("type");
|
||||
table.text("model");
|
||||
table.text("modelType");
|
||||
table.text("apiKey");
|
||||
table.text("baseUrl");
|
||||
table.text("manufacturer");
|
||||
table.integer("createTime");
|
||||
table.integer("index");
|
||||
table.primary(["id"]);
|
||||
table.unique(["id"]);
|
||||
},
|
||||
initData: async (knex) => { },
|
||||
},
|
||||
//提示词表
|
||||
{
|
||||
name: "o_prompts",
|
||||
builder: (table) => {
|
||||
table.integer("id").notNullable();
|
||||
table.text("code"); // 代号,唯一标识
|
||||
table.text("name"); // 名称/描述
|
||||
table.text("type"); // 类型:mainAgent/subAgent/system
|
||||
table.text("parentCode"); // 父级代号(subAgent关联主agent)
|
||||
table.text("defaultValue"); // 默认提示词
|
||||
table.text("customValue"); // 自定义修改值
|
||||
table.primary(["id"]);
|
||||
table.unique(["id"]);
|
||||
table.unique(["code"]); // 代号唯一
|
||||
},
|
||||
initData: async (knex) => { },
|
||||
},
|
||||
//资产表
|
||||
{
|
||||
name: "o_assets",
|
||||
builder: (table) => {
|
||||
table.integer("id").notNullable();
|
||||
table.text("name");
|
||||
table.text("prompt");
|
||||
table.text("remark");
|
||||
table.text("type");
|
||||
table.text("describe");
|
||||
table.integer("imageId").unsigned().references("id").inTable("o_image");
|
||||
table.integer("sonId");
|
||||
table.integer("projectId");
|
||||
table.integer("startTime");
|
||||
table.text("state");
|
||||
table.primary(["id"]);
|
||||
table.unique(["id"]);
|
||||
},
|
||||
initData: async (knex) => { },
|
||||
},
|
||||
//任务中心表
|
||||
{
|
||||
name: "o_myTasks",
|
||||
name: "o_tasks",
|
||||
builder: (table) => {
|
||||
table.integer("id").notNullable();
|
||||
table.integer("projectId");
|
||||
@ -238,7 +170,7 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
|
||||
table.primary(["id"]);
|
||||
table.unique(["id"]);
|
||||
},
|
||||
initData: async (knex) => { },
|
||||
initData: async (knex) => {},
|
||||
},
|
||||
//小说原文表
|
||||
{
|
||||
@ -314,24 +246,38 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
|
||||
table.unique(["id"]);
|
||||
},
|
||||
},
|
||||
//剧本-大纲
|
||||
//资产表
|
||||
{
|
||||
name: "o_scriptOutline",
|
||||
name: "o_assets",
|
||||
builder: (table) => {
|
||||
table.integer("id").notNullable();
|
||||
table.integer("scriptId").unsigned().references("id").inTable("o_script");
|
||||
table.integer("outlineId").unsigned().references("id").inTable("o_outline");
|
||||
table.text("name");
|
||||
table.text("prompt");
|
||||
table.text("remark");
|
||||
table.text("type");
|
||||
table.text("describe");
|
||||
table.integer("imageId").unsigned().references("id").inTable("o_image");
|
||||
table.integer("sonId");
|
||||
table.integer("projectId");
|
||||
table.integer("startTime");
|
||||
table.text("state");
|
||||
table.primary(["id"]);
|
||||
table.unique(["id"]);
|
||||
},
|
||||
initData: async (knex) => {},
|
||||
},
|
||||
//剧本-资产
|
||||
//生成图片表
|
||||
{
|
||||
name: "o_scriptAssets",
|
||||
name: "o_image",
|
||||
builder: (table) => {
|
||||
table.integer("id").notNullable();
|
||||
table.integer("assetsId").unsigned().references("id").inTable("o_assets");
|
||||
table.integer("scriptId").unsigned().references("id").inTable("o_script");
|
||||
table.text("filePath");
|
||||
table.text("type");
|
||||
table.integer("assetsId");
|
||||
table.integer("scriptId");
|
||||
table.integer("projectId");
|
||||
table.integer("videoId");
|
||||
table.text("state");
|
||||
table.primary(["id"]);
|
||||
table.unique(["id"]);
|
||||
},
|
||||
@ -347,13 +293,13 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
|
||||
table.unique(["id"]);
|
||||
},
|
||||
},
|
||||
//分镜-剧本
|
||||
//flowData-剧本
|
||||
{
|
||||
name: "o_storyboardScript",
|
||||
name: "o_flowData",
|
||||
builder: (table) => {
|
||||
table.integer("id").notNullable();
|
||||
table.integer("storyboardId").unsigned().references("id").inTable("o_storyboard");
|
||||
table.integer("scriptId").unsigned().references("id").inTable("o_script");
|
||||
table.string("name");
|
||||
table.integer("createTime");
|
||||
table.primary(["id"]);
|
||||
table.unique(["id"]);
|
||||
},
|
||||
@ -378,19 +324,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
|
||||
table.unique(["id"]);
|
||||
},
|
||||
},
|
||||
//聊天记录
|
||||
{
|
||||
name: "o_chatHistory",
|
||||
builder: (table) => {
|
||||
table.integer("id").notNullable();
|
||||
table.text("type");
|
||||
table.text("data");
|
||||
table.text("novel");
|
||||
table.integer("projectId");
|
||||
table.primary(["id"]);
|
||||
table.unique(["id"]);
|
||||
},
|
||||
},
|
||||
//视频配置
|
||||
{
|
||||
name: "o_videoConfig",
|
||||
@ -415,18 +348,19 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
|
||||
table.unique(["id"]);
|
||||
},
|
||||
},
|
||||
//生成图片表
|
||||
//供应商配置表
|
||||
{
|
||||
name: "o_image",
|
||||
name: "o_vendorConfig",
|
||||
builder: (table) => {
|
||||
table.integer("id").notNullable();
|
||||
table.text("filePath");
|
||||
table.text("type");
|
||||
table.integer("assetsId");
|
||||
table.integer("scriptId");
|
||||
table.integer("projectId");
|
||||
table.integer("videoId");
|
||||
table.text("state");
|
||||
table.text("name");
|
||||
table.text("version");
|
||||
table.text("icon");
|
||||
table.text("inputs"); // 输入项配置 JSON
|
||||
table.text("inputValues"); // 输入项值 JSON
|
||||
table.text("models"); // 模型配置 JSON
|
||||
table.text("code"); // 模型配置 JSON
|
||||
table.integer("createTime");
|
||||
table.primary(["id"]);
|
||||
table.unique(["id"]);
|
||||
},
|
||||
@ -460,7 +394,7 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
|
||||
table.text("embedding"); // 向量嵌入 JSON
|
||||
table.text("relatedMessageIds"); // summary关联的message id列表 JSON
|
||||
table.integer("summarized").defaultTo(0); // message是否已被总结 0/1
|
||||
table.integer("createdAt").notNullable();
|
||||
table.integer("createTime").notNullable();
|
||||
table.primary(["id"]);
|
||||
table.index(["isolationKey", "type"]);
|
||||
table.index(["isolationKey", "summarized"]);
|
||||
|
||||
@ -18,14 +18,14 @@ export default router.post(
|
||||
const rows = await u
|
||||
.db("memories")
|
||||
.where({ isolationKey, type: "message" })
|
||||
.orderBy("createdAt", "asc")
|
||||
.select("id", "content", "createdAt");
|
||||
.orderBy("createTime", "asc")
|
||||
.select("id", "content", "createTime");
|
||||
|
||||
const history = rows.map((row) => ({
|
||||
id: row.id,
|
||||
role: "user",
|
||||
content: [{ type: "text", status: "complete", data: row.content }],
|
||||
createdAt: row.createdAt,
|
||||
createTime: row.createTime,
|
||||
}));
|
||||
|
||||
res.status(200).send(success({ history }));
|
||||
|
||||
@ -26,7 +26,7 @@ export default router.post(
|
||||
await u.db("o_project").where("id", id).delete();
|
||||
await u.db("o_novel").where("projectId", id).delete();
|
||||
await u.db("o_outline").where("projectId", id).delete();
|
||||
await u.db("o_myTasks").where("projectId", id).delete();
|
||||
await u.db("o_tasks").where("projectId", id).delete();
|
||||
|
||||
await u.db("o_script").where("projectId", id).delete();
|
||||
await u.db("o_assets").where("projectId", id).delete();
|
||||
@ -45,8 +45,6 @@ export default router.post(
|
||||
|
||||
await u.db("o_video").whereIn("scriptId", scriptIds).delete();
|
||||
|
||||
await u.db("o_chatHistory").where("projectId", id).delete();
|
||||
|
||||
try {
|
||||
await u.oss.deleteDirectory(`${id}/`);
|
||||
console.log(`项目 ${id} 的OSS文件夹删除成功`);
|
||||
|
||||
@ -16,27 +16,27 @@ export default router.post(
|
||||
const { taskClass, state, page = 1, limit = 10 }: any = req.body;
|
||||
const offset = (page - 1) * limit;
|
||||
const data = await u
|
||||
.db("o_myTasks")
|
||||
.leftJoin("o_project", "o_project.id", "o_myTasks.projectId")
|
||||
.db("o_tasks")
|
||||
.leftJoin("o_project", "o_project.id", "o_tasks.projectId")
|
||||
.andWhere((qb) => {
|
||||
if (taskClass) {
|
||||
qb.andWhere("o_myTasks.taskClass", taskClass);
|
||||
qb.andWhere("o_tasks.taskClass", taskClass);
|
||||
}
|
||||
if (state) {
|
||||
qb.andWhere("o_myTasks.state", state);
|
||||
qb.andWhere("o_tasks.state", state);
|
||||
}
|
||||
})
|
||||
.select("o_myTasks.*", "o_project.* ")
|
||||
.select("o_tasks.*", "o_project.* ")
|
||||
.offset(offset)
|
||||
.limit(limit);
|
||||
const totalQuery = (await u
|
||||
.db("o_myTasks")
|
||||
.db("o_tasks")
|
||||
.andWhere((qb) => {
|
||||
if (taskClass) {
|
||||
qb.andWhere("o_myTasks.taskClass", taskClass);
|
||||
qb.andWhere("o_tasks.taskClass", taskClass);
|
||||
}
|
||||
if (state) {
|
||||
qb.andWhere("o_myTasks.state", state);
|
||||
qb.andWhere("o_tasks.state", state);
|
||||
}
|
||||
})
|
||||
.count("* as total")
|
||||
|
||||
@ -11,7 +11,7 @@ export default router.post(
|
||||
projectId: z.number(),
|
||||
}),
|
||||
async (req, res) => {
|
||||
const data = await u.db("o_myTasks").where("projectId", req.body.projectId).select("taskClass").groupBy("taskClass");
|
||||
const data = await u.db("o_tasks").where("projectId", req.body.projectId).select("taskClass").groupBy("taskClass");
|
||||
res.status(200).send(success(data));
|
||||
},
|
||||
);
|
||||
|
||||
@ -12,7 +12,7 @@ export default router.post(
|
||||
}),
|
||||
async (req, res) => {
|
||||
const { taskId } = req.body;
|
||||
const data = await u.db("o_myTasks").where("id", taskId).select("*").first();
|
||||
const data = await u.db("o_tasks").where("id", taskId).select("*").first();
|
||||
res.status(200).send(success(data));
|
||||
}
|
||||
);
|
||||
|
||||
20
src/types/database.d.ts
vendored
20
src/types/database.d.ts
vendored
@ -1,4 +1,4 @@
|
||||
// @db-hash ad26ece2cf8002d48518ba2b8cd908f8
|
||||
// @db-hash 2f9e6a9e9145cead00652858cafb9159
|
||||
//该文件由脚本自动生成,请勿手动修改
|
||||
|
||||
export interface memories {
|
||||
@ -58,6 +58,11 @@ export interface o_eventChapter {
|
||||
'id'?: number;
|
||||
'novelId'?: number | null;
|
||||
}
|
||||
export interface o_flowData {
|
||||
'createTime'?: number | null;
|
||||
'id'?: number;
|
||||
'name'?: string | null;
|
||||
}
|
||||
export interface o_image {
|
||||
'assetsId'?: number | null;
|
||||
'filePath'?: string | null;
|
||||
@ -166,6 +171,17 @@ export interface o_storyboardScript {
|
||||
'scriptId'?: number | null;
|
||||
'storyboardId'?: number | null;
|
||||
}
|
||||
export interface o_tasks {
|
||||
'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_user {
|
||||
'id'?: number;
|
||||
'name'?: string | null;
|
||||
@ -223,6 +239,7 @@ export interface DB {
|
||||
"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;
|
||||
@ -238,6 +255,7 @@ export interface DB {
|
||||
"o_skills": o_skills;
|
||||
"o_storyboard": o_storyboard;
|
||||
"o_storyboardScript": o_storyboardScript;
|
||||
"o_tasks": o_tasks;
|
||||
"o_user": o_user;
|
||||
"o_vendorConfig": o_vendorConfig;
|
||||
"o_video": o_video;
|
||||
|
||||
@ -58,7 +58,6 @@ class Memory {
|
||||
async add( role: string = "user",content: string) {
|
||||
const id = uuidv4();
|
||||
const embedding = await getEmbedding(content);
|
||||
const now = Date.now();
|
||||
const isolationKey = this.isolationKey;
|
||||
|
||||
await u.db("memories").insert({
|
||||
@ -70,11 +69,11 @@ class Memory {
|
||||
embedding: JSON.stringify(embedding),
|
||||
relatedMessageIds: null,
|
||||
summarized: 0,
|
||||
createdAt: now,
|
||||
createTime: Date.now(),
|
||||
} as any);
|
||||
|
||||
// 检查未总结消息数量
|
||||
const unsummarized = await u.db("memories").where({ isolationKey, type: "message", summarized: 0 }).orderBy("createdAt", "asc");
|
||||
const unsummarized = await u.db("memories").where({ isolationKey, type: "message", summarized: 0 }).orderBy("createTime", "asc");
|
||||
|
||||
if (unsummarized.length >= messagesPerSummary) {
|
||||
const batch = unsummarized.slice(0, messagesPerSummary);
|
||||
@ -93,7 +92,7 @@ class Memory {
|
||||
embedding: JSON.stringify(summaryEmbedding),
|
||||
relatedMessageIds: JSON.stringify(batchIds),
|
||||
summarized: 0,
|
||||
createdAt: Date.now(),
|
||||
createTime: Date.now(),
|
||||
});
|
||||
|
||||
// 标记已总结
|
||||
@ -107,12 +106,12 @@ class Memory {
|
||||
const shortTerm = await u
|
||||
.db("memories")
|
||||
.where({ isolationKey, type: "message", summarized: 0 })
|
||||
.orderBy("createdAt", "desc")
|
||||
.orderBy("createTime", "desc")
|
||||
.limit(shortTermLimit);
|
||||
shortTerm.reverse(); // 最旧在前
|
||||
|
||||
// summaries: 最近的 summary
|
||||
const summaries = await u.db("memories").where({ isolationKey, type: "summary" }).orderBy("createdAt", "desc").limit(summaryLimit);
|
||||
const summaries = await u.db("memories").where({ isolationKey, type: "summary" }).orderBy("createTime", "desc").limit(summaryLimit);
|
||||
summaries.reverse();
|
||||
|
||||
// rag: 向量搜索所有 messages
|
||||
@ -121,12 +120,12 @@ class Memory {
|
||||
const ragResults = vectorSearch(allMessages, queryEmbedding, ragLimit);
|
||||
|
||||
return {
|
||||
shortTerm: shortTerm.map((m: any) => ({ id: m.id, role: m.role, content: m.content, createdAt: m.createdAt })),
|
||||
shortTerm: shortTerm.map((m: any) => ({ id: m.id, role: m.role, content: m.content, createTime: m.createTime })),
|
||||
summaries: summaries.map((s) => ({
|
||||
id: s.id,
|
||||
content: s.content,
|
||||
relatedMessageIds: JSON.parse(s.relatedMessageIds || "[]"),
|
||||
createdAt: s.createdAt,
|
||||
createTime: s.createTime,
|
||||
})),
|
||||
rag: ragResults.map((r) => ({ id: r.id, content: r.content, similarity: r.similarity })),
|
||||
};
|
||||
@ -155,9 +154,9 @@ class Memory {
|
||||
|
||||
if (messageIds.length === 0) return [];
|
||||
|
||||
const messages = await u.db("memories").whereIn("id", messageIds).orderBy("createdAt", "asc");
|
||||
const messages = await u.db("memories").whereIn("id", messageIds).orderBy("createTime", "asc");
|
||||
|
||||
return messages.map((m) => ({ id: m.id, content: m.content, createdAt: m.createdAt }));
|
||||
return messages.map((m) => ({ id: m.id, content: m.content, createTime: m.createTime }));
|
||||
}
|
||||
|
||||
getTools() {
|
||||
|
||||
@ -38,7 +38,7 @@ export default async function taskRecord(
|
||||
}
|
||||
}
|
||||
|
||||
const [id] = await db("o_myTasks").insert({
|
||||
const [id] = await db("o_tasks").insert({
|
||||
projectId,
|
||||
taskClass,
|
||||
relatedObjects: opteorContent,
|
||||
@ -50,7 +50,7 @@ export default async function taskRecord(
|
||||
|
||||
/** 任务成功时调用 done(1),失败时调用 done(-1, '原因') */
|
||||
return async function done(state: 1 | -1, reason?: string) {
|
||||
await db("o_myTasks")
|
||||
await db("o_tasks")
|
||||
.where("id", id)
|
||||
.update({
|
||||
state: taskStateMap[state],
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user