You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.9 KiB
74 lines
2.9 KiB
import { sqliteTable, text, integer, index, uniqueIndex } from "drizzle-orm/sqlite-core";
|
|
import { users } from "./auth";
|
|
|
|
// ============ AgentSession(agent 会话表)============
|
|
export const agentSessions = sqliteTable(
|
|
"agent_sessions",
|
|
{
|
|
id: text("id").primaryKey(),
|
|
userId: integer("user_id").references(() => users.id, { onDelete: "cascade" }),
|
|
tempToken: text("temp_token", { length: 64 }),
|
|
title: text("title", { length: 100 }).notNull().default("新对话"),
|
|
modelId: integer("model_id"),
|
|
enableThinking: integer("enable_thinking").default(1).notNull(),
|
|
enableTools: integer("enable_tools").default(1).notNull(),
|
|
lastActiveAt: integer("last_active_at", { mode: "timestamp_ms" }).defaultNow().notNull(),
|
|
expiresAt: integer("expires_at", { mode: "timestamp_ms" }),
|
|
deletedAt: integer("deleted_at", { mode: "timestamp_ms" }),
|
|
createdAt: integer("created_at", { mode: "timestamp_ms" }).defaultNow().notNull(),
|
|
updatedAt: integer("updated_at", { mode: "timestamp_ms" })
|
|
.defaultNow()
|
|
.$onUpdate(() => new Date())
|
|
.notNull(),
|
|
},
|
|
(table) => [
|
|
index("idx_agent_sessions_user_deleted").on(table.userId, table.deletedAt),
|
|
index("idx_agent_sessions_temp_token").on(table.tempToken),
|
|
],
|
|
);
|
|
|
|
// ============ AgentMessage(agent 消息表)============
|
|
export const agentMessages = sqliteTable(
|
|
"agent_messages",
|
|
{
|
|
id: text("id").primaryKey(),
|
|
sessionId: text("session_id")
|
|
.notNull()
|
|
.references(() => agentSessions.id, { onDelete: "cascade" }),
|
|
role: text("role", { length: 20 }).notNull(),
|
|
content: text("content").notNull().default(""),
|
|
parts: text("parts"),
|
|
modelId: integer("model_id"),
|
|
inputTokens: integer("input_tokens"),
|
|
outputTokens: integer("output_tokens"),
|
|
sortOrder: integer("sort_order").notNull(),
|
|
createdAt: integer("created_at", { mode: "timestamp_ms" }).defaultNow().notNull(),
|
|
},
|
|
(table) => [
|
|
index("idx_agent_messages_session_sort").on(table.sessionId, table.sortOrder),
|
|
],
|
|
);
|
|
|
|
// ============ AgentMessageFeedback(agent 消息反馈表)============
|
|
export const agentMessageFeedback = sqliteTable(
|
|
"agent_message_feedback",
|
|
{
|
|
id: integer("id").primaryKey({ autoIncrement: true }),
|
|
messageId: text("message_id")
|
|
.notNull()
|
|
.references(() => agentMessages.id, { onDelete: "cascade" }),
|
|
userId: integer("user_id")
|
|
.notNull()
|
|
.references(() => users.id, { onDelete: "cascade" }),
|
|
feedback: text("feedback", { length: 10 }).notNull(),
|
|
comment: text("comment"),
|
|
createdAt: integer("created_at", { mode: "timestamp_ms" }).defaultNow().notNull(),
|
|
updatedAt: integer("updated_at", { mode: "timestamp_ms" })
|
|
.defaultNow()
|
|
.$onUpdate(() => new Date())
|
|
.notNull(),
|
|
},
|
|
(table) => [
|
|
uniqueIndex("idx_agent_feedback_message_user").on(table.messageId, table.userId),
|
|
],
|
|
);
|
|
|