@ainetwork/adk-provider-memory-mongodb 0.1.5 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-N5FAVJ4Z.js → chunk-S537KQMN.js} +12 -13
- package/dist/chunk-S537KQMN.js.map +1 -0
- package/dist/index.cjs +59 -51
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -10
- package/dist/index.d.ts +10 -10
- package/dist/index.js +50 -42
- package/dist/index.js.map +1 -1
- package/dist/models/chats.model.cjs +12 -14
- package/dist/models/chats.model.cjs.map +1 -1
- package/dist/models/chats.model.d.cts +21 -21
- package/dist/models/chats.model.d.ts +21 -21
- package/dist/models/chats.model.js +3 -5
- package/implements/thread.memory.ts +126 -0
- package/index.ts +1 -1
- package/models/chats.model.ts +16 -16
- package/package.json +7 -5
- package/dist/chunk-N5FAVJ4Z.js.map +0 -1
- package/implements/session.memory.ts +0 -104
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// models/chats.model.ts
|
|
2
|
+
import { MessageRole, ThreadType } from "@ainetwork/adk/types/memory";
|
|
2
3
|
import { Schema } from "mongoose";
|
|
3
|
-
var
|
|
4
|
-
ChatRole2["USER"] = "USER";
|
|
5
|
-
ChatRole2["SYSTEM"] = "SYSTEM";
|
|
6
|
-
ChatRole2["MODEL"] = "MODEL";
|
|
7
|
-
return ChatRole2;
|
|
8
|
-
})(ChatRole || {});
|
|
9
|
-
var SessionObjectSchema = new Schema(
|
|
4
|
+
var ThreadObjectSchema = new Schema(
|
|
10
5
|
{
|
|
11
|
-
|
|
6
|
+
type: {
|
|
7
|
+
type: String,
|
|
8
|
+
enum: Object.values(ThreadType),
|
|
9
|
+
required: true
|
|
10
|
+
},
|
|
11
|
+
threadId: {
|
|
12
12
|
type: String,
|
|
13
13
|
required: true,
|
|
14
14
|
index: true
|
|
@@ -41,7 +41,7 @@ var ChatContentObjectSchema = new Schema(
|
|
|
41
41
|
);
|
|
42
42
|
var ChatObjectSchema = new Schema(
|
|
43
43
|
{
|
|
44
|
-
|
|
44
|
+
threadId: {
|
|
45
45
|
type: String,
|
|
46
46
|
required: true,
|
|
47
47
|
index: true
|
|
@@ -53,7 +53,7 @@ var ChatObjectSchema = new Schema(
|
|
|
53
53
|
},
|
|
54
54
|
role: {
|
|
55
55
|
type: String,
|
|
56
|
-
enum: Object.values(
|
|
56
|
+
enum: Object.values(MessageRole),
|
|
57
57
|
required: true
|
|
58
58
|
},
|
|
59
59
|
content: {
|
|
@@ -72,9 +72,8 @@ var ChatObjectSchema = new Schema(
|
|
|
72
72
|
);
|
|
73
73
|
|
|
74
74
|
export {
|
|
75
|
-
|
|
76
|
-
SessionObjectSchema,
|
|
75
|
+
ThreadObjectSchema,
|
|
77
76
|
ChatContentObjectSchema,
|
|
78
77
|
ChatObjectSchema
|
|
79
78
|
};
|
|
80
|
-
//# sourceMappingURL=chunk-
|
|
79
|
+
//# sourceMappingURL=chunk-S537KQMN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../models/chats.model.ts"],"sourcesContent":["import { MessageRole, ThreadType } from \"@ainetwork/adk/types/memory\";\nimport { type Document, Schema } from \"mongoose\";\n\nexport const ThreadObjectSchema = new Schema(\n\t{\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tenum: Object.values(ThreadType),\n\t\t\trequired: true,\n\t\t},\n\t\tthreadId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tuserId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t},\n\t\tcreated_at: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tupdated_at: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t}\n\t},\n);\n\nexport interface ThreadDocument extends Document {\n\ttype: ThreadType;\n\tthreadId: string;\n\tuserId: string;\n\ttitle: string;\n\tcreated_at: number;\n\tupdated_at: number;\n}\n\n// ChatContentObject schema\nexport const ChatContentObjectSchema = new Schema(\n\t{\n\t\ttype: { type: String, required: true },\n\t\tparts: { type: [Schema.Types.Mixed], required: true },\n\t},\n\t{ _id: false },\n);\n\n// ChatObject schema - 개별 문서로 저장\nexport const ChatObjectSchema = new Schema(\n\t{\n\t\tthreadId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tuserId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\trole: {\n\t\t\ttype: String,\n\t\t\tenum: Object.values(MessageRole),\n\t\t\trequired: true,\n\t\t},\n\t\tcontent: {\n\t\t\ttype: ChatContentObjectSchema,\n\t\t\trequired: true,\n\t\t},\n\t\ttimestamp: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tmetadata: {\n\t\t\ttype: Schema.Types.Mixed,\n\t\t\tdefault: {},\n\t\t},\n\t},\n);\n\n// Chat Document interface\nexport interface ChatDocument extends Document {\n\tthreadId: string;\n\trole: MessageRole;\n\tcontent: {\n\t\ttype: string;\n\t\tparts: any[];\n\t};\n\ttimestamp: number;\n\tmetadata?: { [key: string]: unknown };\n\tcreatedAt: Date;\n\tupdatedAt: Date;\n}\n"],"mappings":";AAAA,SAAS,aAAa,kBAAkB;AACxC,SAAwB,cAAc;AAE/B,IAAM,qBAAqB,IAAI;AAAA,EACrC;AAAA,IACC,MAAM;AAAA,MACL,MAAM;AAAA,MACN,MAAM,OAAO,OAAO,UAAU;AAAA,MAC9B,UAAU;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACA,OAAO;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,YAAY;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,YAAY;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,EACD;AACD;AAYO,IAAM,0BAA0B,IAAI;AAAA,EAC1C;AAAA,IACC,MAAM,EAAE,MAAM,QAAQ,UAAU,KAAK;AAAA,IACrC,OAAO,EAAE,MAAM,CAAC,OAAO,MAAM,KAAK,GAAG,UAAU,KAAK;AAAA,EACrD;AAAA,EACA,EAAE,KAAK,MAAM;AACd;AAGO,IAAM,mBAAmB,IAAI;AAAA,EACnC;AAAA,IACC,UAAU;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACA,MAAM;AAAA,MACL,MAAM;AAAA,MACN,MAAM,OAAO,OAAO,WAAW;AAAA,MAC/B,UAAU;AAAA,IACX;AAAA,IACA,SAAS;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,WAAW;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACT,MAAM,OAAO,MAAM;AAAA,MACnB,SAAS,CAAC;AAAA,IACX;AAAA,EACD;AACD;","names":[]}
|
package/dist/index.cjs
CHANGED
|
@@ -31,11 +31,11 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
31
31
|
var index_exports = {};
|
|
32
32
|
__export(index_exports, {
|
|
33
33
|
MongoDBIntent: () => MongoDBIntent,
|
|
34
|
-
|
|
34
|
+
MongoDBThread: () => MongoDBThread
|
|
35
35
|
});
|
|
36
36
|
module.exports = __toCommonJS(index_exports);
|
|
37
37
|
|
|
38
|
-
// implements/
|
|
38
|
+
// implements/thread.memory.ts
|
|
39
39
|
var import_node_crypto = require("crypto");
|
|
40
40
|
|
|
41
41
|
// implements/base.memory.ts
|
|
@@ -84,16 +84,16 @@ var MongoDBMemory = class {
|
|
|
84
84
|
};
|
|
85
85
|
|
|
86
86
|
// models/chats.model.ts
|
|
87
|
+
var import_memory = require("@ainetwork/adk/types/memory");
|
|
87
88
|
var import_mongoose2 = require("mongoose");
|
|
88
|
-
var
|
|
89
|
-
ChatRole3["USER"] = "USER";
|
|
90
|
-
ChatRole3["SYSTEM"] = "SYSTEM";
|
|
91
|
-
ChatRole3["MODEL"] = "MODEL";
|
|
92
|
-
return ChatRole3;
|
|
93
|
-
})(ChatRole || {});
|
|
94
|
-
var SessionObjectSchema = new import_mongoose2.Schema(
|
|
89
|
+
var ThreadObjectSchema = new import_mongoose2.Schema(
|
|
95
90
|
{
|
|
96
|
-
|
|
91
|
+
type: {
|
|
92
|
+
type: String,
|
|
93
|
+
enum: Object.values(import_memory.ThreadType),
|
|
94
|
+
required: true
|
|
95
|
+
},
|
|
96
|
+
threadId: {
|
|
97
97
|
type: String,
|
|
98
98
|
required: true,
|
|
99
99
|
index: true
|
|
@@ -126,7 +126,7 @@ var ChatContentObjectSchema = new import_mongoose2.Schema(
|
|
|
126
126
|
);
|
|
127
127
|
var ChatObjectSchema = new import_mongoose2.Schema(
|
|
128
128
|
{
|
|
129
|
-
|
|
129
|
+
threadId: {
|
|
130
130
|
type: String,
|
|
131
131
|
required: true,
|
|
132
132
|
index: true
|
|
@@ -138,7 +138,7 @@ var ChatObjectSchema = new import_mongoose2.Schema(
|
|
|
138
138
|
},
|
|
139
139
|
role: {
|
|
140
140
|
type: String,
|
|
141
|
-
enum: Object.values(
|
|
141
|
+
enum: Object.values(import_memory.MessageRole),
|
|
142
142
|
required: true
|
|
143
143
|
},
|
|
144
144
|
content: {
|
|
@@ -156,81 +156,89 @@ var ChatObjectSchema = new import_mongoose2.Schema(
|
|
|
156
156
|
}
|
|
157
157
|
);
|
|
158
158
|
|
|
159
|
-
// implements/
|
|
159
|
+
// implements/thread.memory.ts
|
|
160
160
|
var import_logger2 = require("@ainetwork/adk/utils/logger");
|
|
161
|
-
var
|
|
161
|
+
var MongoDBThread = class extends MongoDBMemory {
|
|
162
162
|
chatModel;
|
|
163
|
-
|
|
163
|
+
threadModel;
|
|
164
164
|
constructor(uri) {
|
|
165
165
|
super(uri);
|
|
166
166
|
const _mongoose = super.getInstance();
|
|
167
167
|
this.chatModel = _mongoose.model("Chat", ChatObjectSchema);
|
|
168
|
-
this.
|
|
168
|
+
this.threadModel = _mongoose.model("Thread", ThreadObjectSchema);
|
|
169
169
|
}
|
|
170
|
-
async
|
|
171
|
-
const
|
|
170
|
+
async getThread(type, userId, threadId) {
|
|
171
|
+
const thread = await this.threadModel.findOne({ type, threadId, userId });
|
|
172
|
+
const chats = await this.chatModel.find({ threadId, userId }).sort({
|
|
172
173
|
timestamp: 1
|
|
173
174
|
});
|
|
174
|
-
|
|
175
|
-
import_logger2.loggers.agent.debug(`Found ${chats.length} chats for
|
|
176
|
-
const
|
|
177
|
-
|
|
175
|
+
if (!thread) return void 0;
|
|
176
|
+
import_logger2.loggers.agent.debug(`Found ${chats.length} chats for thread ${threadId}`);
|
|
177
|
+
const threadObject = {
|
|
178
|
+
type: thread.type,
|
|
179
|
+
title: thread.title || "New chats",
|
|
180
|
+
messages: {}
|
|
181
|
+
};
|
|
178
182
|
chats.forEach((chat) => {
|
|
179
183
|
const chatId = chat._id?.toString() || chat.id;
|
|
180
|
-
|
|
184
|
+
threadObject.messages[chatId] = {
|
|
181
185
|
role: chat.role,
|
|
182
186
|
content: chat.content,
|
|
183
187
|
timestamp: chat.timestamp,
|
|
184
188
|
metadata: chat.metadata
|
|
185
189
|
};
|
|
186
190
|
});
|
|
187
|
-
return
|
|
191
|
+
return threadObject;
|
|
188
192
|
}
|
|
189
|
-
async
|
|
193
|
+
async createThread(type, userId, threadId, title) {
|
|
190
194
|
const now = Date.now();
|
|
191
|
-
await this.
|
|
192
|
-
|
|
195
|
+
await this.threadModel.create({
|
|
196
|
+
type,
|
|
193
197
|
userId,
|
|
198
|
+
threadId,
|
|
194
199
|
title,
|
|
195
200
|
updated_at: now,
|
|
196
201
|
created_at: now
|
|
197
202
|
});
|
|
198
|
-
return {
|
|
203
|
+
return { type, threadId, title, updatedAt: now };
|
|
199
204
|
}
|
|
200
|
-
async
|
|
201
|
-
|
|
202
|
-
await this.sessionModel.updateOne({ sessionId, userId }, {
|
|
205
|
+
async addMessagesToThread(userId, threadId, messages) {
|
|
206
|
+
await this.threadModel.updateOne({ threadId, userId }, {
|
|
203
207
|
updated_at: Date.now()
|
|
204
208
|
});
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
209
|
+
for (const message of messages) {
|
|
210
|
+
const newId = (0, import_node_crypto.randomUUID)();
|
|
211
|
+
await this.chatModel.create({
|
|
212
|
+
threadId,
|
|
213
|
+
chatId: newId,
|
|
214
|
+
userId,
|
|
215
|
+
role: message.role,
|
|
216
|
+
content: message.content,
|
|
217
|
+
timestamp: message.timestamp,
|
|
218
|
+
metadata: message.metadata
|
|
219
|
+
});
|
|
220
|
+
}
|
|
214
221
|
}
|
|
215
|
-
async
|
|
216
|
-
const chats = await this.chatModel.find({ userId,
|
|
222
|
+
async deleteThread(userId, threadId) {
|
|
223
|
+
const chats = await this.chatModel.find({ userId, threadId }).sort({
|
|
217
224
|
timestamp: 1
|
|
218
225
|
});
|
|
219
226
|
chats?.forEach((chat) => {
|
|
220
227
|
chat.deleteOne();
|
|
221
228
|
});
|
|
222
|
-
const
|
|
223
|
-
|
|
229
|
+
const thread = await this.threadModel.findOne({ userId, threadId });
|
|
230
|
+
thread?.deleteOne();
|
|
224
231
|
}
|
|
225
|
-
async
|
|
226
|
-
const
|
|
232
|
+
async listThreads(userId) {
|
|
233
|
+
const threads = await this.threadModel.find({ userId }).sort({
|
|
227
234
|
updated_at: -1
|
|
228
235
|
});
|
|
229
|
-
const data =
|
|
236
|
+
const data = threads.map((thread) => {
|
|
230
237
|
return {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
238
|
+
type: thread.type,
|
|
239
|
+
threadId: thread.threadId,
|
|
240
|
+
title: thread.title,
|
|
241
|
+
updatedAt: thread.updated_at
|
|
234
242
|
};
|
|
235
243
|
});
|
|
236
244
|
return data;
|
|
@@ -315,6 +323,6 @@ var MongoDBIntent = class extends MongoDBMemory {
|
|
|
315
323
|
// Annotate the CommonJS export names for ESM import in node:
|
|
316
324
|
0 && (module.exports = {
|
|
317
325
|
MongoDBIntent,
|
|
318
|
-
|
|
326
|
+
MongoDBThread
|
|
319
327
|
});
|
|
320
328
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../index.ts","../implements/session.memory.ts","../implements/base.memory.ts","../models/chats.model.ts","../implements/intent.memory.ts","../models/intent.model.ts"],"sourcesContent":["export { MongoDBSession } from \"./implements/session.memory\";\nexport { MongoDBIntent } from \"./implements/intent.memory\";","import { randomUUID } from \"node:crypto\";\nimport type { ChatObject, SessionMetadata, SessionObject } from \"@ainetwork/adk/types/memory\";\nimport { ISessionMemory } from \"@ainetwork/adk/modules\";\nimport { MongoDBMemory } from \"./base.memory\";\nimport {\n\tChatDocument,\n\tChatRole,\n ChatObjectSchema,\n SessionObjectSchema,\n SessionDocument\n} from \"../models/chats.model\";\nimport { loggers } from \"@ainetwork/adk/utils/logger\";\nimport { Model } from \"mongoose\";\n\nexport class MongoDBSession extends MongoDBMemory implements ISessionMemory {\n private chatModel: Model<ChatDocument>;\n private sessionModel: Model<SessionDocument>;\n\n constructor(uri: string) {\n super(uri);\n const _mongoose = super.getInstance();\n this.chatModel = _mongoose.model<ChatDocument>(\"Chat\", ChatObjectSchema);\n this.sessionModel = _mongoose.model<SessionDocument>(\"Session\", SessionObjectSchema);\n }\n\n public async getSession(sessionId: string, userId?: string): Promise<SessionObject | undefined> {\n\t\tconst chats = await this.chatModel.find({ sessionId, userId }).sort({\n\t\t\ttimestamp: 1,\n\t\t});\n const session = await this.sessionModel.findOne({ sessionId, userId });\n\n\t\tloggers.agent.debug(`Found ${chats.length} chats for session ${sessionId}`);\n\n\t\tconst sessionObject: SessionObject = { chats: {} };\n sessionObject.title = session?.title;\n\t\tchats.forEach((chat: ChatDocument) => {\n\t\t\tconst chatId = chat._id?.toString() || chat.id;\n\t\t\tsessionObject.chats[chatId] = {\n\t\t\t\trole: chat.role as ChatRole,\n\t\t\t\tcontent: chat.content,\n\t\t\t\ttimestamp: chat.timestamp,\n\t\t\t\tmetadata: chat.metadata,\n\t\t\t};\n\t\t});\n\n\t\treturn sessionObject;\n };\n\n\tpublic async createSession(userId: string, sessionId: string, title: string): Promise<SessionMetadata> {\n const now = Date.now();\n await this.sessionModel.create({\n sessionId,\n userId,\n title,\n updated_at: now,\n created_at: now,\n });\n\n return { title, sessionId, updatedAt: now };\n };\n\n\tpublic async addChatToSession(userId: string, sessionId: string, chat: ChatObject): Promise<void> {\n const newId = randomUUID();\n await this.sessionModel.updateOne({ sessionId, userId }, {\n updated_at: Date.now(),\n });\n\t\tawait this.chatModel.create({\n\t\t\tsessionId,\n chatId: newId,\n userId,\n\t\t\trole: chat.role,\n\t\t\tcontent: chat.content,\n\t\t\ttimestamp: chat.timestamp,\n\t\t\tmetadata: chat.metadata,\n\t\t});\n };\n\n\tpublic async deleteSession(userId: string, sessionId: string): Promise<void> {\n\t\tconst chats = await this.chatModel.find({ userId, sessionId }).sort({\n\t\t\ttimestamp: 1,\n\t\t});\n\n\t\tchats?.forEach((chat: ChatDocument) => {\n chat.deleteOne();\n\t\t});\n \n const session = await this.sessionModel.findOne({ sessionId, userId });\n session?.deleteOne();\n };\n\n\tpublic async listSessions(userId: string): Promise<SessionMetadata[]> {\n const sessions = await this.sessionModel.find({ userId }).sort({\n updated_at: -1,\n });\n const data: SessionMetadata[] = sessions.map((session: SessionDocument) => {\n return {\n sessionId: session.sessionId,\n title: session.title,\n updatedAt: session.updated_at\n } as SessionMetadata;\n })\n return data;\n };\n}","import { IMemory } from \"node_modules/@ainetwork/adk/dist/esm/modules/memory/base.memory\";\nimport mongoose, { Mongoose } from \"mongoose\";\nimport { loggers } from \"@ainetwork/adk/utils/logger\";\n\nexport class MongoDBMemory implements IMemory {\n private _isConnected: boolean = false;\n private _uri: string;\n private _mongoose: Mongoose;\n\n constructor(uri: string) {\n this._uri = uri;\n this._mongoose = new Mongoose();\n }\n\n public getInstance(): Mongoose {\n return this._mongoose;\n }\n\n public async connect(): Promise<void> {\n\t\tif (this._isConnected) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n await this._mongoose.connect(this._uri);\n\t\t\tthis._isConnected = true;\n\t\t\tloggers.agent.info(\"MongoDB connected successfully\");\n\t\t} catch (error) {\n\t\t\tloggers.agent.error(\"Failed to connect to MongoDB:\", error);\n\t\t\tthrow error;\n\t\t}\n }\n\n public async disconnect(): Promise<void> {\n\t\tif (!this.isConnected) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait this._mongoose?.disconnect();\n\t\t\tthis._isConnected = false;\n\t\t\tloggers.agent.info(\"MongoDB disconnected successfully\");\n\t\t} catch (error) {\n\t\t\tloggers.agent.error(\"Failed to disconnect from MongoDB:\", error);\n\t\t\tthrow error;\n\t\t}\n }\n\n public isConnected(): boolean {\n return this._isConnected;\n }\n}","import { type Document, Schema } from \"mongoose\";\n\n// ChatRole enum\nexport enum ChatRole {\n\tUSER = \"USER\",\n\tSYSTEM = \"SYSTEM\",\n\tMODEL = \"MODEL\",\n}\n\nexport const SessionObjectSchema = new Schema(\n\t{\n\t\tsessionId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tuserId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t},\n\t\tcreated_at: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tupdated_at: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t}\n\t},\n);\n\nexport interface SessionDocument extends Document {\n\tsessionId: string;\n\tuserId: string;\n\ttitle?: string;\n\tcreated_at: number;\n\tupdated_at: number;\n}\n\n// ChatContentObject schema\nexport const ChatContentObjectSchema = new Schema(\n\t{\n\t\ttype: { type: String, required: true },\n\t\tparts: { type: [Schema.Types.Mixed], required: true },\n\t},\n\t{ _id: false },\n);\n\n// ChatObject schema - 개별 문서로 저장\nexport const ChatObjectSchema = new Schema(\n\t{\n\t\tsessionId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tuserId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\trole: {\n\t\t\ttype: String,\n\t\t\tenum: Object.values(ChatRole),\n\t\t\trequired: true,\n\t\t},\n\t\tcontent: {\n\t\t\ttype: ChatContentObjectSchema,\n\t\t\trequired: true,\n\t\t},\n\t\ttimestamp: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tmetadata: {\n\t\t\ttype: Schema.Types.Mixed,\n\t\t\tdefault: {},\n\t\t},\n\t},\n);\n\n// Chat Document interface\nexport interface ChatDocument extends Document {\n\tsessionId: string;\n\trole: ChatRole;\n\tcontent: {\n\t\ttype: string;\n\t\tparts: any[];\n\t};\n\ttimestamp: number;\n\tmetadata?: { [key: string]: unknown };\n\tcreatedAt: Date;\n\tupdatedAt: Date;\n}\n","import { randomUUID } from \"node:crypto\";\nimport type { Intent } from \"@ainetwork/adk/types/memory\";\nimport { IIntentMemory } from \"@ainetwork/adk/modules\";\nimport { MongoDBMemory } from \"./base.memory\";\nimport { IntentModel } from \"../models/intent.model\";\n\nexport class MongoDBIntent extends MongoDBMemory implements IIntentMemory {\n public async getIntent(intentId: string): Promise<Intent | undefined> {\n const intent = await IntentModel.findById(intentId);\n if (intent) {\n return {\n name: intent.name,\n description: intent.description,\n prompt: intent.prompt,\n llm: intent.llm,\n } as Intent;\n }\n return undefined;\n };\n\n\tpublic async saveIntent(intent: Intent): Promise<void> {\n const newId = randomUUID();\n await IntentModel.create({\n _id: newId,\n name: intent.name,\n description: intent.description,\n prompt: intent.prompt,\n llm: intent.llm,\n });\n };\n\n\tpublic async updateIntent(intentId: string, intent: Intent): Promise<void> {\n await IntentModel.updateOne({\n _id: intentId,\n },{\n name: intent.name,\n description: intent.description,\n prompt: intent.prompt,\n llm: intent.llm,\n });\n };\n\n\tpublic async deleteIntent(intentId: string): Promise<void> {\n await IntentModel.deleteOne({ _id: intentId });\n };\n\n\tpublic async listIntents(): Promise<Intent[]> {\n const intents = await IntentModel.find();\n return intents.map(intent => ({\n name: intent.name,\n description: intent.description,\n prompt: intent.prompt,\n llm: intent.llm,\n } as Intent));\n };\n}","import mongoose, { type Document, Schema } from \"mongoose\";\n\nconst IntentObjectSchema = new Schema(\n\t{\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tprompt: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t},\n\t\tllm: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t},\n\t}\n);\n\nexport interface IntentDocument extends Document {\n\tname: string;\n\tdescription: string;\n\tprompt?: string;\n\tllm?: string;\n}\n\nexport const IntentModel = mongoose.model<IntentDocument>(\"Intent\", IntentObjectSchema);"],"mappings":"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","names":["import_mongoose","ChatRole","import_logger","import_node_crypto","import_mongoose","mongoose"]}
|
|
1
|
+
{"version":3,"sources":["../index.ts","../implements/thread.memory.ts","../implements/base.memory.ts","../models/chats.model.ts","../implements/intent.memory.ts","../models/intent.model.ts"],"sourcesContent":["export { MongoDBThread } from \"./implements/thread.memory\";\nexport { MongoDBIntent } from \"./implements/intent.memory\";","import { randomUUID } from \"node:crypto\";\nimport type { MessageObject, ThreadMetadata, ThreadObject, ThreadType } from \"@ainetwork/adk/types/memory\";\nimport { MessageRole } from \"@ainetwork/adk/types/memory\";\nimport { IThreadMemory } from \"@ainetwork/adk/modules\";\nimport { MongoDBMemory } from \"./base.memory\";\nimport {\n\tChatDocument,\n ChatObjectSchema,\n ThreadObjectSchema,\n ThreadDocument\n} from \"../models/chats.model\";\nimport { loggers } from \"@ainetwork/adk/utils/logger\";\nimport { Model } from \"mongoose\";\n\nexport class MongoDBThread extends MongoDBMemory implements IThreadMemory {\n private chatModel: Model<ChatDocument>;\n private threadModel: Model<ThreadDocument>;\n\n constructor(uri: string) {\n super(uri);\n const _mongoose = super.getInstance();\n this.chatModel = _mongoose.model<ChatDocument>(\"Chat\", ChatObjectSchema);\n this.threadModel = _mongoose.model<ThreadDocument>(\"Thread\", ThreadObjectSchema);\n }\n\n public async getThread(\n type: ThreadType,\n userId: string,\n threadId: string\n ): Promise<ThreadObject | undefined> {\n const thread = await this.threadModel.findOne({ type, threadId, userId });\n\t\tconst chats = await this.chatModel.find({ threadId, userId }).sort({\n\t\t\ttimestamp: 1,\n\t\t});\n\n if (!thread) return undefined;\n\n\t\tloggers.agent.debug(`Found ${chats.length} chats for thread ${threadId}`);\n\n\t\tconst threadObject: ThreadObject = { \n type: thread.type as ThreadType,\n title: thread.title || \"New chats\",\n messages: {}\n };\n\t\tchats.forEach((chat: ChatDocument) => {\n\t\t\tconst chatId = chat._id?.toString() || chat.id;\n\t\t\tthreadObject.messages[chatId] = {\n\t\t\t\trole: chat.role as MessageRole,\n\t\t\t\tcontent: chat.content,\n\t\t\t\ttimestamp: chat.timestamp,\n\t\t\t\tmetadata: chat.metadata,\n\t\t\t};\n\t\t});\n\n\t\treturn threadObject;\n };\n\n\tpublic async createThread(\n\t\ttype: ThreadType,\n\t\tuserId: string,\n\t\tthreadId: string,\n\t\ttitle: string,\n ): Promise<ThreadMetadata> {\n const now = Date.now();\n await this.threadModel.create({\n type,\n userId,\n threadId,\n title,\n updated_at: now,\n created_at: now,\n });\n\n return { type, threadId, title, updatedAt: now };\n };\n\n\tpublic async addMessagesToThread(\n userId: string,\n threadId: string,\n messages: MessageObject[]\n ): Promise<void> {\n await this.threadModel.updateOne({ threadId, userId }, {\n updated_at: Date.now(),\n });\n for (const message of messages) {\n const newId = randomUUID();\n await this.chatModel.create({\n threadId,\n chatId: newId,\n userId,\n role: message.role,\n content: message.content,\n timestamp: message.timestamp,\n metadata: message.metadata,\n });\n }\n };\n\n\tpublic async deleteThread(userId: string, threadId: string): Promise<void> {\n\t\tconst chats = await this.chatModel.find({ userId, threadId }).sort({\n\t\t\ttimestamp: 1,\n\t\t});\n\n\t\tchats?.forEach((chat: ChatDocument) => {\n chat.deleteOne();\n\t\t});\n \n const thread = await this.threadModel.findOne({ userId, threadId });\n thread?.deleteOne();\n };\n\n\tpublic async listThreads(userId: string): Promise<ThreadMetadata[]> {\n const threads = await this.threadModel.find({ userId }).sort({\n updated_at: -1,\n });\n const data: ThreadMetadata[] = threads.map((thread: ThreadDocument) => {\n return {\n type: thread.type,\n threadId: thread.threadId,\n title: thread.title,\n updatedAt: thread.updated_at\n } as ThreadMetadata;\n })\n return data;\n };\n}","import { IMemory } from \"node_modules/@ainetwork/adk/dist/esm/modules/memory/base.memory\";\nimport mongoose, { Mongoose } from \"mongoose\";\nimport { loggers } from \"@ainetwork/adk/utils/logger\";\n\nexport class MongoDBMemory implements IMemory {\n private _isConnected: boolean = false;\n private _uri: string;\n private _mongoose: Mongoose;\n\n constructor(uri: string) {\n this._uri = uri;\n this._mongoose = new Mongoose();\n }\n\n public getInstance(): Mongoose {\n return this._mongoose;\n }\n\n public async connect(): Promise<void> {\n\t\tif (this._isConnected) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n await this._mongoose.connect(this._uri);\n\t\t\tthis._isConnected = true;\n\t\t\tloggers.agent.info(\"MongoDB connected successfully\");\n\t\t} catch (error) {\n\t\t\tloggers.agent.error(\"Failed to connect to MongoDB:\", error);\n\t\t\tthrow error;\n\t\t}\n }\n\n public async disconnect(): Promise<void> {\n\t\tif (!this.isConnected) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait this._mongoose?.disconnect();\n\t\t\tthis._isConnected = false;\n\t\t\tloggers.agent.info(\"MongoDB disconnected successfully\");\n\t\t} catch (error) {\n\t\t\tloggers.agent.error(\"Failed to disconnect from MongoDB:\", error);\n\t\t\tthrow error;\n\t\t}\n }\n\n public isConnected(): boolean {\n return this._isConnected;\n }\n}","import { MessageRole, ThreadType } from \"@ainetwork/adk/types/memory\";\nimport { type Document, Schema } from \"mongoose\";\n\nexport const ThreadObjectSchema = new Schema(\n\t{\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tenum: Object.values(ThreadType),\n\t\t\trequired: true,\n\t\t},\n\t\tthreadId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tuserId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t},\n\t\tcreated_at: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tupdated_at: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t}\n\t},\n);\n\nexport interface ThreadDocument extends Document {\n\ttype: ThreadType;\n\tthreadId: string;\n\tuserId: string;\n\ttitle: string;\n\tcreated_at: number;\n\tupdated_at: number;\n}\n\n// ChatContentObject schema\nexport const ChatContentObjectSchema = new Schema(\n\t{\n\t\ttype: { type: String, required: true },\n\t\tparts: { type: [Schema.Types.Mixed], required: true },\n\t},\n\t{ _id: false },\n);\n\n// ChatObject schema - 개별 문서로 저장\nexport const ChatObjectSchema = new Schema(\n\t{\n\t\tthreadId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tuserId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\trole: {\n\t\t\ttype: String,\n\t\t\tenum: Object.values(MessageRole),\n\t\t\trequired: true,\n\t\t},\n\t\tcontent: {\n\t\t\ttype: ChatContentObjectSchema,\n\t\t\trequired: true,\n\t\t},\n\t\ttimestamp: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tmetadata: {\n\t\t\ttype: Schema.Types.Mixed,\n\t\t\tdefault: {},\n\t\t},\n\t},\n);\n\n// Chat Document interface\nexport interface ChatDocument extends Document {\n\tthreadId: string;\n\trole: MessageRole;\n\tcontent: {\n\t\ttype: string;\n\t\tparts: any[];\n\t};\n\ttimestamp: number;\n\tmetadata?: { [key: string]: unknown };\n\tcreatedAt: Date;\n\tupdatedAt: Date;\n}\n","import { randomUUID } from \"node:crypto\";\nimport type { Intent } from \"@ainetwork/adk/types/memory\";\nimport { IIntentMemory } from \"@ainetwork/adk/modules\";\nimport { MongoDBMemory } from \"./base.memory\";\nimport { IntentModel } from \"../models/intent.model\";\n\nexport class MongoDBIntent extends MongoDBMemory implements IIntentMemory {\n public async getIntent(intentId: string): Promise<Intent | undefined> {\n const intent = await IntentModel.findById(intentId);\n if (intent) {\n return {\n name: intent.name,\n description: intent.description,\n prompt: intent.prompt,\n llm: intent.llm,\n } as Intent;\n }\n return undefined;\n };\n\n\tpublic async saveIntent(intent: Intent): Promise<void> {\n const newId = randomUUID();\n await IntentModel.create({\n _id: newId,\n name: intent.name,\n description: intent.description,\n prompt: intent.prompt,\n llm: intent.llm,\n });\n };\n\n\tpublic async updateIntent(intentId: string, intent: Intent): Promise<void> {\n await IntentModel.updateOne({\n _id: intentId,\n },{\n name: intent.name,\n description: intent.description,\n prompt: intent.prompt,\n llm: intent.llm,\n });\n };\n\n\tpublic async deleteIntent(intentId: string): Promise<void> {\n await IntentModel.deleteOne({ _id: intentId });\n };\n\n\tpublic async listIntents(): Promise<Intent[]> {\n const intents = await IntentModel.find();\n return intents.map(intent => ({\n name: intent.name,\n description: intent.description,\n prompt: intent.prompt,\n llm: intent.llm,\n } as Intent));\n };\n}","import mongoose, { type Document, Schema } from \"mongoose\";\n\nconst IntentObjectSchema = new Schema(\n\t{\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tprompt: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t},\n\t\tllm: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t},\n\t}\n);\n\nexport interface IntentDocument extends Document {\n\tname: string;\n\tdescription: string;\n\tprompt?: string;\n\tllm?: string;\n}\n\nexport const IntentModel = mongoose.model<IntentDocument>(\"Intent\", IntentObjectSchema);"],"mappings":"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","names":["import_mongoose","import_logger","import_node_crypto","import_mongoose","mongoose"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { ThreadType, ThreadObject, ThreadMetadata, MessageObject, Intent } from '@ainetwork/adk/types/memory';
|
|
2
|
+
import { IThreadMemory, IIntentMemory } from '@ainetwork/adk/modules';
|
|
3
3
|
import { IMemory } from 'node_modules/@ainetwork/adk/dist/esm/modules/memory/base.memory';
|
|
4
4
|
import { Mongoose } from 'mongoose';
|
|
5
5
|
|
|
@@ -14,15 +14,15 @@ declare class MongoDBMemory implements IMemory {
|
|
|
14
14
|
isConnected(): boolean;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
declare class
|
|
17
|
+
declare class MongoDBThread extends MongoDBMemory implements IThreadMemory {
|
|
18
18
|
private chatModel;
|
|
19
|
-
private
|
|
19
|
+
private threadModel;
|
|
20
20
|
constructor(uri: string);
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
getThread(type: ThreadType, userId: string, threadId: string): Promise<ThreadObject | undefined>;
|
|
22
|
+
createThread(type: ThreadType, userId: string, threadId: string, title: string): Promise<ThreadMetadata>;
|
|
23
|
+
addMessagesToThread(userId: string, threadId: string, messages: MessageObject[]): Promise<void>;
|
|
24
|
+
deleteThread(userId: string, threadId: string): Promise<void>;
|
|
25
|
+
listThreads(userId: string): Promise<ThreadMetadata[]>;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
declare class MongoDBIntent extends MongoDBMemory implements IIntentMemory {
|
|
@@ -33,4 +33,4 @@ declare class MongoDBIntent extends MongoDBMemory implements IIntentMemory {
|
|
|
33
33
|
listIntents(): Promise<Intent[]>;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
export { MongoDBIntent,
|
|
36
|
+
export { MongoDBIntent, MongoDBThread };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { ThreadType, ThreadObject, ThreadMetadata, MessageObject, Intent } from '@ainetwork/adk/types/memory';
|
|
2
|
+
import { IThreadMemory, IIntentMemory } from '@ainetwork/adk/modules';
|
|
3
3
|
import { IMemory } from 'node_modules/@ainetwork/adk/dist/esm/modules/memory/base.memory';
|
|
4
4
|
import { Mongoose } from 'mongoose';
|
|
5
5
|
|
|
@@ -14,15 +14,15 @@ declare class MongoDBMemory implements IMemory {
|
|
|
14
14
|
isConnected(): boolean;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
declare class
|
|
17
|
+
declare class MongoDBThread extends MongoDBMemory implements IThreadMemory {
|
|
18
18
|
private chatModel;
|
|
19
|
-
private
|
|
19
|
+
private threadModel;
|
|
20
20
|
constructor(uri: string);
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
getThread(type: ThreadType, userId: string, threadId: string): Promise<ThreadObject | undefined>;
|
|
22
|
+
createThread(type: ThreadType, userId: string, threadId: string, title: string): Promise<ThreadMetadata>;
|
|
23
|
+
addMessagesToThread(userId: string, threadId: string, messages: MessageObject[]): Promise<void>;
|
|
24
|
+
deleteThread(userId: string, threadId: string): Promise<void>;
|
|
25
|
+
listThreads(userId: string): Promise<ThreadMetadata[]>;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
declare class MongoDBIntent extends MongoDBMemory implements IIntentMemory {
|
|
@@ -33,4 +33,4 @@ declare class MongoDBIntent extends MongoDBMemory implements IIntentMemory {
|
|
|
33
33
|
listIntents(): Promise<Intent[]>;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
export { MongoDBIntent,
|
|
36
|
+
export { MongoDBIntent, MongoDBThread };
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ChatObjectSchema,
|
|
3
|
-
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
ThreadObjectSchema
|
|
4
|
+
} from "./chunk-S537KQMN.js";
|
|
5
5
|
import {
|
|
6
6
|
IntentModel
|
|
7
7
|
} from "./chunk-JCE5NAY5.js";
|
|
8
8
|
|
|
9
|
-
// implements/
|
|
9
|
+
// implements/thread.memory.ts
|
|
10
10
|
import { randomUUID } from "crypto";
|
|
11
11
|
|
|
12
12
|
// implements/base.memory.ts
|
|
@@ -54,81 +54,89 @@ var MongoDBMemory = class {
|
|
|
54
54
|
}
|
|
55
55
|
};
|
|
56
56
|
|
|
57
|
-
// implements/
|
|
57
|
+
// implements/thread.memory.ts
|
|
58
58
|
import { loggers as loggers2 } from "@ainetwork/adk/utils/logger";
|
|
59
|
-
var
|
|
59
|
+
var MongoDBThread = class extends MongoDBMemory {
|
|
60
60
|
chatModel;
|
|
61
|
-
|
|
61
|
+
threadModel;
|
|
62
62
|
constructor(uri) {
|
|
63
63
|
super(uri);
|
|
64
64
|
const _mongoose = super.getInstance();
|
|
65
65
|
this.chatModel = _mongoose.model("Chat", ChatObjectSchema);
|
|
66
|
-
this.
|
|
66
|
+
this.threadModel = _mongoose.model("Thread", ThreadObjectSchema);
|
|
67
67
|
}
|
|
68
|
-
async
|
|
69
|
-
const
|
|
68
|
+
async getThread(type, userId, threadId) {
|
|
69
|
+
const thread = await this.threadModel.findOne({ type, threadId, userId });
|
|
70
|
+
const chats = await this.chatModel.find({ threadId, userId }).sort({
|
|
70
71
|
timestamp: 1
|
|
71
72
|
});
|
|
72
|
-
|
|
73
|
-
loggers2.agent.debug(`Found ${chats.length} chats for
|
|
74
|
-
const
|
|
75
|
-
|
|
73
|
+
if (!thread) return void 0;
|
|
74
|
+
loggers2.agent.debug(`Found ${chats.length} chats for thread ${threadId}`);
|
|
75
|
+
const threadObject = {
|
|
76
|
+
type: thread.type,
|
|
77
|
+
title: thread.title || "New chats",
|
|
78
|
+
messages: {}
|
|
79
|
+
};
|
|
76
80
|
chats.forEach((chat) => {
|
|
77
81
|
const chatId = chat._id?.toString() || chat.id;
|
|
78
|
-
|
|
82
|
+
threadObject.messages[chatId] = {
|
|
79
83
|
role: chat.role,
|
|
80
84
|
content: chat.content,
|
|
81
85
|
timestamp: chat.timestamp,
|
|
82
86
|
metadata: chat.metadata
|
|
83
87
|
};
|
|
84
88
|
});
|
|
85
|
-
return
|
|
89
|
+
return threadObject;
|
|
86
90
|
}
|
|
87
|
-
async
|
|
91
|
+
async createThread(type, userId, threadId, title) {
|
|
88
92
|
const now = Date.now();
|
|
89
|
-
await this.
|
|
90
|
-
|
|
93
|
+
await this.threadModel.create({
|
|
94
|
+
type,
|
|
91
95
|
userId,
|
|
96
|
+
threadId,
|
|
92
97
|
title,
|
|
93
98
|
updated_at: now,
|
|
94
99
|
created_at: now
|
|
95
100
|
});
|
|
96
|
-
return {
|
|
101
|
+
return { type, threadId, title, updatedAt: now };
|
|
97
102
|
}
|
|
98
|
-
async
|
|
99
|
-
|
|
100
|
-
await this.sessionModel.updateOne({ sessionId, userId }, {
|
|
103
|
+
async addMessagesToThread(userId, threadId, messages) {
|
|
104
|
+
await this.threadModel.updateOne({ threadId, userId }, {
|
|
101
105
|
updated_at: Date.now()
|
|
102
106
|
});
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
107
|
+
for (const message of messages) {
|
|
108
|
+
const newId = randomUUID();
|
|
109
|
+
await this.chatModel.create({
|
|
110
|
+
threadId,
|
|
111
|
+
chatId: newId,
|
|
112
|
+
userId,
|
|
113
|
+
role: message.role,
|
|
114
|
+
content: message.content,
|
|
115
|
+
timestamp: message.timestamp,
|
|
116
|
+
metadata: message.metadata
|
|
117
|
+
});
|
|
118
|
+
}
|
|
112
119
|
}
|
|
113
|
-
async
|
|
114
|
-
const chats = await this.chatModel.find({ userId,
|
|
120
|
+
async deleteThread(userId, threadId) {
|
|
121
|
+
const chats = await this.chatModel.find({ userId, threadId }).sort({
|
|
115
122
|
timestamp: 1
|
|
116
123
|
});
|
|
117
124
|
chats?.forEach((chat) => {
|
|
118
125
|
chat.deleteOne();
|
|
119
126
|
});
|
|
120
|
-
const
|
|
121
|
-
|
|
127
|
+
const thread = await this.threadModel.findOne({ userId, threadId });
|
|
128
|
+
thread?.deleteOne();
|
|
122
129
|
}
|
|
123
|
-
async
|
|
124
|
-
const
|
|
130
|
+
async listThreads(userId) {
|
|
131
|
+
const threads = await this.threadModel.find({ userId }).sort({
|
|
125
132
|
updated_at: -1
|
|
126
133
|
});
|
|
127
|
-
const data =
|
|
134
|
+
const data = threads.map((thread) => {
|
|
128
135
|
return {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
136
|
+
type: thread.type,
|
|
137
|
+
threadId: thread.threadId,
|
|
138
|
+
title: thread.title,
|
|
139
|
+
updatedAt: thread.updated_at
|
|
132
140
|
};
|
|
133
141
|
});
|
|
134
142
|
return data;
|
|
@@ -185,6 +193,6 @@ var MongoDBIntent = class extends MongoDBMemory {
|
|
|
185
193
|
};
|
|
186
194
|
export {
|
|
187
195
|
MongoDBIntent,
|
|
188
|
-
|
|
196
|
+
MongoDBThread
|
|
189
197
|
};
|
|
190
198
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../implements/session.memory.ts","../implements/base.memory.ts","../implements/intent.memory.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { ChatObject, SessionMetadata, SessionObject } from \"@ainetwork/adk/types/memory\";\nimport { ISessionMemory } from \"@ainetwork/adk/modules\";\nimport { MongoDBMemory } from \"./base.memory\";\nimport {\n\tChatDocument,\n\tChatRole,\n ChatObjectSchema,\n SessionObjectSchema,\n SessionDocument\n} from \"../models/chats.model\";\nimport { loggers } from \"@ainetwork/adk/utils/logger\";\nimport { Model } from \"mongoose\";\n\nexport class MongoDBSession extends MongoDBMemory implements ISessionMemory {\n private chatModel: Model<ChatDocument>;\n private sessionModel: Model<SessionDocument>;\n\n constructor(uri: string) {\n super(uri);\n const _mongoose = super.getInstance();\n this.chatModel = _mongoose.model<ChatDocument>(\"Chat\", ChatObjectSchema);\n this.sessionModel = _mongoose.model<SessionDocument>(\"Session\", SessionObjectSchema);\n }\n\n public async getSession(sessionId: string, userId?: string): Promise<SessionObject | undefined> {\n\t\tconst chats = await this.chatModel.find({ sessionId, userId }).sort({\n\t\t\ttimestamp: 1,\n\t\t});\n const session = await this.sessionModel.findOne({ sessionId, userId });\n\n\t\tloggers.agent.debug(`Found ${chats.length} chats for session ${sessionId}`);\n\n\t\tconst sessionObject: SessionObject = { chats: {} };\n sessionObject.title = session?.title;\n\t\tchats.forEach((chat: ChatDocument) => {\n\t\t\tconst chatId = chat._id?.toString() || chat.id;\n\t\t\tsessionObject.chats[chatId] = {\n\t\t\t\trole: chat.role as ChatRole,\n\t\t\t\tcontent: chat.content,\n\t\t\t\ttimestamp: chat.timestamp,\n\t\t\t\tmetadata: chat.metadata,\n\t\t\t};\n\t\t});\n\n\t\treturn sessionObject;\n };\n\n\tpublic async createSession(userId: string, sessionId: string, title: string): Promise<SessionMetadata> {\n const now = Date.now();\n await this.sessionModel.create({\n sessionId,\n userId,\n title,\n updated_at: now,\n created_at: now,\n });\n\n return { title, sessionId, updatedAt: now };\n };\n\n\tpublic async addChatToSession(userId: string, sessionId: string, chat: ChatObject): Promise<void> {\n const newId = randomUUID();\n await this.sessionModel.updateOne({ sessionId, userId }, {\n updated_at: Date.now(),\n });\n\t\tawait this.chatModel.create({\n\t\t\tsessionId,\n chatId: newId,\n userId,\n\t\t\trole: chat.role,\n\t\t\tcontent: chat.content,\n\t\t\ttimestamp: chat.timestamp,\n\t\t\tmetadata: chat.metadata,\n\t\t});\n };\n\n\tpublic async deleteSession(userId: string, sessionId: string): Promise<void> {\n\t\tconst chats = await this.chatModel.find({ userId, sessionId }).sort({\n\t\t\ttimestamp: 1,\n\t\t});\n\n\t\tchats?.forEach((chat: ChatDocument) => {\n chat.deleteOne();\n\t\t});\n \n const session = await this.sessionModel.findOne({ sessionId, userId });\n session?.deleteOne();\n };\n\n\tpublic async listSessions(userId: string): Promise<SessionMetadata[]> {\n const sessions = await this.sessionModel.find({ userId }).sort({\n updated_at: -1,\n });\n const data: SessionMetadata[] = sessions.map((session: SessionDocument) => {\n return {\n sessionId: session.sessionId,\n title: session.title,\n updatedAt: session.updated_at\n } as SessionMetadata;\n })\n return data;\n };\n}","import { IMemory } from \"node_modules/@ainetwork/adk/dist/esm/modules/memory/base.memory\";\nimport mongoose, { Mongoose } from \"mongoose\";\nimport { loggers } from \"@ainetwork/adk/utils/logger\";\n\nexport class MongoDBMemory implements IMemory {\n private _isConnected: boolean = false;\n private _uri: string;\n private _mongoose: Mongoose;\n\n constructor(uri: string) {\n this._uri = uri;\n this._mongoose = new Mongoose();\n }\n\n public getInstance(): Mongoose {\n return this._mongoose;\n }\n\n public async connect(): Promise<void> {\n\t\tif (this._isConnected) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n await this._mongoose.connect(this._uri);\n\t\t\tthis._isConnected = true;\n\t\t\tloggers.agent.info(\"MongoDB connected successfully\");\n\t\t} catch (error) {\n\t\t\tloggers.agent.error(\"Failed to connect to MongoDB:\", error);\n\t\t\tthrow error;\n\t\t}\n }\n\n public async disconnect(): Promise<void> {\n\t\tif (!this.isConnected) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait this._mongoose?.disconnect();\n\t\t\tthis._isConnected = false;\n\t\t\tloggers.agent.info(\"MongoDB disconnected successfully\");\n\t\t} catch (error) {\n\t\t\tloggers.agent.error(\"Failed to disconnect from MongoDB:\", error);\n\t\t\tthrow error;\n\t\t}\n }\n\n public isConnected(): boolean {\n return this._isConnected;\n }\n}","import { randomUUID } from \"node:crypto\";\nimport type { Intent } from \"@ainetwork/adk/types/memory\";\nimport { IIntentMemory } from \"@ainetwork/adk/modules\";\nimport { MongoDBMemory } from \"./base.memory\";\nimport { IntentModel } from \"../models/intent.model\";\n\nexport class MongoDBIntent extends MongoDBMemory implements IIntentMemory {\n public async getIntent(intentId: string): Promise<Intent | undefined> {\n const intent = await IntentModel.findById(intentId);\n if (intent) {\n return {\n name: intent.name,\n description: intent.description,\n prompt: intent.prompt,\n llm: intent.llm,\n } as Intent;\n }\n return undefined;\n };\n\n\tpublic async saveIntent(intent: Intent): Promise<void> {\n const newId = randomUUID();\n await IntentModel.create({\n _id: newId,\n name: intent.name,\n description: intent.description,\n prompt: intent.prompt,\n llm: intent.llm,\n });\n };\n\n\tpublic async updateIntent(intentId: string, intent: Intent): Promise<void> {\n await IntentModel.updateOne({\n _id: intentId,\n },{\n name: intent.name,\n description: intent.description,\n prompt: intent.prompt,\n llm: intent.llm,\n });\n };\n\n\tpublic async deleteIntent(intentId: string): Promise<void> {\n await IntentModel.deleteOne({ _id: intentId });\n };\n\n\tpublic async listIntents(): Promise<Intent[]> {\n const intents = await IntentModel.find();\n return intents.map(intent => ({\n name: intent.name,\n description: intent.description,\n prompt: intent.prompt,\n llm: intent.llm,\n } as Intent));\n };\n}"],"mappings":"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","names":["loggers","randomUUID","randomUUID"]}
|
|
1
|
+
{"version":3,"sources":["../implements/thread.memory.ts","../implements/base.memory.ts","../implements/intent.memory.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { MessageObject, ThreadMetadata, ThreadObject, ThreadType } from \"@ainetwork/adk/types/memory\";\nimport { MessageRole } from \"@ainetwork/adk/types/memory\";\nimport { IThreadMemory } from \"@ainetwork/adk/modules\";\nimport { MongoDBMemory } from \"./base.memory\";\nimport {\n\tChatDocument,\n ChatObjectSchema,\n ThreadObjectSchema,\n ThreadDocument\n} from \"../models/chats.model\";\nimport { loggers } from \"@ainetwork/adk/utils/logger\";\nimport { Model } from \"mongoose\";\n\nexport class MongoDBThread extends MongoDBMemory implements IThreadMemory {\n private chatModel: Model<ChatDocument>;\n private threadModel: Model<ThreadDocument>;\n\n constructor(uri: string) {\n super(uri);\n const _mongoose = super.getInstance();\n this.chatModel = _mongoose.model<ChatDocument>(\"Chat\", ChatObjectSchema);\n this.threadModel = _mongoose.model<ThreadDocument>(\"Thread\", ThreadObjectSchema);\n }\n\n public async getThread(\n type: ThreadType,\n userId: string,\n threadId: string\n ): Promise<ThreadObject | undefined> {\n const thread = await this.threadModel.findOne({ type, threadId, userId });\n\t\tconst chats = await this.chatModel.find({ threadId, userId }).sort({\n\t\t\ttimestamp: 1,\n\t\t});\n\n if (!thread) return undefined;\n\n\t\tloggers.agent.debug(`Found ${chats.length} chats for thread ${threadId}`);\n\n\t\tconst threadObject: ThreadObject = { \n type: thread.type as ThreadType,\n title: thread.title || \"New chats\",\n messages: {}\n };\n\t\tchats.forEach((chat: ChatDocument) => {\n\t\t\tconst chatId = chat._id?.toString() || chat.id;\n\t\t\tthreadObject.messages[chatId] = {\n\t\t\t\trole: chat.role as MessageRole,\n\t\t\t\tcontent: chat.content,\n\t\t\t\ttimestamp: chat.timestamp,\n\t\t\t\tmetadata: chat.metadata,\n\t\t\t};\n\t\t});\n\n\t\treturn threadObject;\n };\n\n\tpublic async createThread(\n\t\ttype: ThreadType,\n\t\tuserId: string,\n\t\tthreadId: string,\n\t\ttitle: string,\n ): Promise<ThreadMetadata> {\n const now = Date.now();\n await this.threadModel.create({\n type,\n userId,\n threadId,\n title,\n updated_at: now,\n created_at: now,\n });\n\n return { type, threadId, title, updatedAt: now };\n };\n\n\tpublic async addMessagesToThread(\n userId: string,\n threadId: string,\n messages: MessageObject[]\n ): Promise<void> {\n await this.threadModel.updateOne({ threadId, userId }, {\n updated_at: Date.now(),\n });\n for (const message of messages) {\n const newId = randomUUID();\n await this.chatModel.create({\n threadId,\n chatId: newId,\n userId,\n role: message.role,\n content: message.content,\n timestamp: message.timestamp,\n metadata: message.metadata,\n });\n }\n };\n\n\tpublic async deleteThread(userId: string, threadId: string): Promise<void> {\n\t\tconst chats = await this.chatModel.find({ userId, threadId }).sort({\n\t\t\ttimestamp: 1,\n\t\t});\n\n\t\tchats?.forEach((chat: ChatDocument) => {\n chat.deleteOne();\n\t\t});\n \n const thread = await this.threadModel.findOne({ userId, threadId });\n thread?.deleteOne();\n };\n\n\tpublic async listThreads(userId: string): Promise<ThreadMetadata[]> {\n const threads = await this.threadModel.find({ userId }).sort({\n updated_at: -1,\n });\n const data: ThreadMetadata[] = threads.map((thread: ThreadDocument) => {\n return {\n type: thread.type,\n threadId: thread.threadId,\n title: thread.title,\n updatedAt: thread.updated_at\n } as ThreadMetadata;\n })\n return data;\n };\n}","import { IMemory } from \"node_modules/@ainetwork/adk/dist/esm/modules/memory/base.memory\";\nimport mongoose, { Mongoose } from \"mongoose\";\nimport { loggers } from \"@ainetwork/adk/utils/logger\";\n\nexport class MongoDBMemory implements IMemory {\n private _isConnected: boolean = false;\n private _uri: string;\n private _mongoose: Mongoose;\n\n constructor(uri: string) {\n this._uri = uri;\n this._mongoose = new Mongoose();\n }\n\n public getInstance(): Mongoose {\n return this._mongoose;\n }\n\n public async connect(): Promise<void> {\n\t\tif (this._isConnected) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n await this._mongoose.connect(this._uri);\n\t\t\tthis._isConnected = true;\n\t\t\tloggers.agent.info(\"MongoDB connected successfully\");\n\t\t} catch (error) {\n\t\t\tloggers.agent.error(\"Failed to connect to MongoDB:\", error);\n\t\t\tthrow error;\n\t\t}\n }\n\n public async disconnect(): Promise<void> {\n\t\tif (!this.isConnected) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait this._mongoose?.disconnect();\n\t\t\tthis._isConnected = false;\n\t\t\tloggers.agent.info(\"MongoDB disconnected successfully\");\n\t\t} catch (error) {\n\t\t\tloggers.agent.error(\"Failed to disconnect from MongoDB:\", error);\n\t\t\tthrow error;\n\t\t}\n }\n\n public isConnected(): boolean {\n return this._isConnected;\n }\n}","import { randomUUID } from \"node:crypto\";\nimport type { Intent } from \"@ainetwork/adk/types/memory\";\nimport { IIntentMemory } from \"@ainetwork/adk/modules\";\nimport { MongoDBMemory } from \"./base.memory\";\nimport { IntentModel } from \"../models/intent.model\";\n\nexport class MongoDBIntent extends MongoDBMemory implements IIntentMemory {\n public async getIntent(intentId: string): Promise<Intent | undefined> {\n const intent = await IntentModel.findById(intentId);\n if (intent) {\n return {\n name: intent.name,\n description: intent.description,\n prompt: intent.prompt,\n llm: intent.llm,\n } as Intent;\n }\n return undefined;\n };\n\n\tpublic async saveIntent(intent: Intent): Promise<void> {\n const newId = randomUUID();\n await IntentModel.create({\n _id: newId,\n name: intent.name,\n description: intent.description,\n prompt: intent.prompt,\n llm: intent.llm,\n });\n };\n\n\tpublic async updateIntent(intentId: string, intent: Intent): Promise<void> {\n await IntentModel.updateOne({\n _id: intentId,\n },{\n name: intent.name,\n description: intent.description,\n prompt: intent.prompt,\n llm: intent.llm,\n });\n };\n\n\tpublic async deleteIntent(intentId: string): Promise<void> {\n await IntentModel.deleteOne({ _id: intentId });\n };\n\n\tpublic async listIntents(): Promise<Intent[]> {\n const intents = await IntentModel.find();\n return intents.map(intent => ({\n name: intent.name,\n description: intent.description,\n prompt: intent.prompt,\n llm: intent.llm,\n } as Intent));\n };\n}"],"mappings":"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","names":["loggers","randomUUID","randomUUID"]}
|
|
@@ -22,20 +22,19 @@ var chats_model_exports = {};
|
|
|
22
22
|
__export(chats_model_exports, {
|
|
23
23
|
ChatContentObjectSchema: () => ChatContentObjectSchema,
|
|
24
24
|
ChatObjectSchema: () => ChatObjectSchema,
|
|
25
|
-
|
|
26
|
-
SessionObjectSchema: () => SessionObjectSchema
|
|
25
|
+
ThreadObjectSchema: () => ThreadObjectSchema
|
|
27
26
|
});
|
|
28
27
|
module.exports = __toCommonJS(chats_model_exports);
|
|
28
|
+
var import_memory = require("@ainetwork/adk/types/memory");
|
|
29
29
|
var import_mongoose = require("mongoose");
|
|
30
|
-
var
|
|
31
|
-
ChatRole2["USER"] = "USER";
|
|
32
|
-
ChatRole2["SYSTEM"] = "SYSTEM";
|
|
33
|
-
ChatRole2["MODEL"] = "MODEL";
|
|
34
|
-
return ChatRole2;
|
|
35
|
-
})(ChatRole || {});
|
|
36
|
-
var SessionObjectSchema = new import_mongoose.Schema(
|
|
30
|
+
var ThreadObjectSchema = new import_mongoose.Schema(
|
|
37
31
|
{
|
|
38
|
-
|
|
32
|
+
type: {
|
|
33
|
+
type: String,
|
|
34
|
+
enum: Object.values(import_memory.ThreadType),
|
|
35
|
+
required: true
|
|
36
|
+
},
|
|
37
|
+
threadId: {
|
|
39
38
|
type: String,
|
|
40
39
|
required: true,
|
|
41
40
|
index: true
|
|
@@ -68,7 +67,7 @@ var ChatContentObjectSchema = new import_mongoose.Schema(
|
|
|
68
67
|
);
|
|
69
68
|
var ChatObjectSchema = new import_mongoose.Schema(
|
|
70
69
|
{
|
|
71
|
-
|
|
70
|
+
threadId: {
|
|
72
71
|
type: String,
|
|
73
72
|
required: true,
|
|
74
73
|
index: true
|
|
@@ -80,7 +79,7 @@ var ChatObjectSchema = new import_mongoose.Schema(
|
|
|
80
79
|
},
|
|
81
80
|
role: {
|
|
82
81
|
type: String,
|
|
83
|
-
enum: Object.values(
|
|
82
|
+
enum: Object.values(import_memory.MessageRole),
|
|
84
83
|
required: true
|
|
85
84
|
},
|
|
86
85
|
content: {
|
|
@@ -101,7 +100,6 @@ var ChatObjectSchema = new import_mongoose.Schema(
|
|
|
101
100
|
0 && (module.exports = {
|
|
102
101
|
ChatContentObjectSchema,
|
|
103
102
|
ChatObjectSchema,
|
|
104
|
-
|
|
105
|
-
SessionObjectSchema
|
|
103
|
+
ThreadObjectSchema
|
|
106
104
|
});
|
|
107
105
|
//# sourceMappingURL=chats.model.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../models/chats.model.ts"],"sourcesContent":["import { type Document, Schema } from \"mongoose\";\n\
|
|
1
|
+
{"version":3,"sources":["../../models/chats.model.ts"],"sourcesContent":["import { MessageRole, ThreadType } from \"@ainetwork/adk/types/memory\";\nimport { type Document, Schema } from \"mongoose\";\n\nexport const ThreadObjectSchema = new Schema(\n\t{\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tenum: Object.values(ThreadType),\n\t\t\trequired: true,\n\t\t},\n\t\tthreadId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tuserId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t},\n\t\tcreated_at: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tupdated_at: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t}\n\t},\n);\n\nexport interface ThreadDocument extends Document {\n\ttype: ThreadType;\n\tthreadId: string;\n\tuserId: string;\n\ttitle: string;\n\tcreated_at: number;\n\tupdated_at: number;\n}\n\n// ChatContentObject schema\nexport const ChatContentObjectSchema = new Schema(\n\t{\n\t\ttype: { type: String, required: true },\n\t\tparts: { type: [Schema.Types.Mixed], required: true },\n\t},\n\t{ _id: false },\n);\n\n// ChatObject schema - 개별 문서로 저장\nexport const ChatObjectSchema = new Schema(\n\t{\n\t\tthreadId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tuserId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\trole: {\n\t\t\ttype: String,\n\t\t\tenum: Object.values(MessageRole),\n\t\t\trequired: true,\n\t\t},\n\t\tcontent: {\n\t\t\ttype: ChatContentObjectSchema,\n\t\t\trequired: true,\n\t\t},\n\t\ttimestamp: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tmetadata: {\n\t\t\ttype: Schema.Types.Mixed,\n\t\t\tdefault: {},\n\t\t},\n\t},\n);\n\n// Chat Document interface\nexport interface ChatDocument extends Document {\n\tthreadId: string;\n\trole: MessageRole;\n\tcontent: {\n\t\ttype: string;\n\t\tparts: any[];\n\t};\n\ttimestamp: number;\n\tmetadata?: { [key: string]: unknown };\n\tcreatedAt: Date;\n\tupdatedAt: Date;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAwC;AACxC,sBAAsC;AAE/B,IAAM,qBAAqB,IAAI;AAAA,EACrC;AAAA,IACC,MAAM;AAAA,MACL,MAAM;AAAA,MACN,MAAM,OAAO,OAAO,wBAAU;AAAA,MAC9B,UAAU;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACA,OAAO;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,YAAY;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,YAAY;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,EACD;AACD;AAYO,IAAM,0BAA0B,IAAI;AAAA,EAC1C;AAAA,IACC,MAAM,EAAE,MAAM,QAAQ,UAAU,KAAK;AAAA,IACrC,OAAO,EAAE,MAAM,CAAC,uBAAO,MAAM,KAAK,GAAG,UAAU,KAAK;AAAA,EACrD;AAAA,EACA,EAAE,KAAK,MAAM;AACd;AAGO,IAAM,mBAAmB,IAAI;AAAA,EACnC;AAAA,IACC,UAAU;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACA,MAAM;AAAA,MACL,MAAM;AAAA,MACN,MAAM,OAAO,OAAO,yBAAW;AAAA,MAC/B,UAAU;AAAA,IACX;AAAA,IACA,SAAS;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,WAAW;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACT,MAAM,uBAAO,MAAM;AAAA,MACnB,SAAS,CAAC;AAAA,IACX;AAAA,EACD;AACD;","names":[]}
|
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
import * as mongoose from 'mongoose';
|
|
2
2
|
import { Schema, Document } from 'mongoose';
|
|
3
|
+
import { ThreadType, MessageRole } from '@ainetwork/adk/types/memory';
|
|
3
4
|
|
|
4
|
-
declare
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
MODEL = "MODEL"
|
|
8
|
-
}
|
|
9
|
-
declare const SessionObjectSchema: Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, {
|
|
10
|
-
sessionId: string;
|
|
5
|
+
declare const ThreadObjectSchema: Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, {
|
|
6
|
+
type: ThreadType;
|
|
7
|
+
threadId: string;
|
|
11
8
|
userId: string;
|
|
12
9
|
created_at: number;
|
|
13
10
|
updated_at: number;
|
|
14
11
|
title?: string | null | undefined;
|
|
15
12
|
}, Document<unknown, {}, mongoose.FlatRecord<{
|
|
16
|
-
|
|
13
|
+
type: ThreadType;
|
|
14
|
+
threadId: string;
|
|
17
15
|
userId: string;
|
|
18
16
|
created_at: number;
|
|
19
17
|
updated_at: number;
|
|
20
18
|
title?: string | null | undefined;
|
|
21
19
|
}>, {}> & mongoose.FlatRecord<{
|
|
22
|
-
|
|
20
|
+
type: ThreadType;
|
|
21
|
+
threadId: string;
|
|
23
22
|
userId: string;
|
|
24
23
|
created_at: number;
|
|
25
24
|
updated_at: number;
|
|
@@ -29,10 +28,11 @@ declare const SessionObjectSchema: Schema<any, mongoose.Model<any, any, any, any
|
|
|
29
28
|
} & {
|
|
30
29
|
__v: number;
|
|
31
30
|
}>;
|
|
32
|
-
interface
|
|
33
|
-
|
|
31
|
+
interface ThreadDocument extends Document {
|
|
32
|
+
type: ThreadType;
|
|
33
|
+
threadId: string;
|
|
34
34
|
userId: string;
|
|
35
|
-
title
|
|
35
|
+
title: string;
|
|
36
36
|
created_at: number;
|
|
37
37
|
updated_at: number;
|
|
38
38
|
}
|
|
@@ -53,9 +53,9 @@ declare const ChatContentObjectSchema: Schema<any, mongoose.Model<any, any, any,
|
|
|
53
53
|
__v: number;
|
|
54
54
|
}>;
|
|
55
55
|
declare const ChatObjectSchema: Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, {
|
|
56
|
-
|
|
56
|
+
threadId: string;
|
|
57
57
|
userId: string;
|
|
58
|
-
role:
|
|
58
|
+
role: MessageRole;
|
|
59
59
|
content: {
|
|
60
60
|
type: string;
|
|
61
61
|
parts: any[];
|
|
@@ -63,9 +63,9 @@ declare const ChatObjectSchema: Schema<any, mongoose.Model<any, any, any, any, a
|
|
|
63
63
|
timestamp: number;
|
|
64
64
|
metadata: any;
|
|
65
65
|
}, Document<unknown, {}, mongoose.FlatRecord<{
|
|
66
|
-
|
|
66
|
+
threadId: string;
|
|
67
67
|
userId: string;
|
|
68
|
-
role:
|
|
68
|
+
role: MessageRole;
|
|
69
69
|
content: {
|
|
70
70
|
type: string;
|
|
71
71
|
parts: any[];
|
|
@@ -73,9 +73,9 @@ declare const ChatObjectSchema: Schema<any, mongoose.Model<any, any, any, any, a
|
|
|
73
73
|
timestamp: number;
|
|
74
74
|
metadata: any;
|
|
75
75
|
}>, {}> & mongoose.FlatRecord<{
|
|
76
|
-
|
|
76
|
+
threadId: string;
|
|
77
77
|
userId: string;
|
|
78
|
-
role:
|
|
78
|
+
role: MessageRole;
|
|
79
79
|
content: {
|
|
80
80
|
type: string;
|
|
81
81
|
parts: any[];
|
|
@@ -88,8 +88,8 @@ declare const ChatObjectSchema: Schema<any, mongoose.Model<any, any, any, any, a
|
|
|
88
88
|
__v: number;
|
|
89
89
|
}>;
|
|
90
90
|
interface ChatDocument extends Document {
|
|
91
|
-
|
|
92
|
-
role:
|
|
91
|
+
threadId: string;
|
|
92
|
+
role: MessageRole;
|
|
93
93
|
content: {
|
|
94
94
|
type: string;
|
|
95
95
|
parts: any[];
|
|
@@ -102,4 +102,4 @@ interface ChatDocument extends Document {
|
|
|
102
102
|
updatedAt: Date;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
export { ChatContentObjectSchema, type ChatDocument, ChatObjectSchema,
|
|
105
|
+
export { ChatContentObjectSchema, type ChatDocument, ChatObjectSchema, type ThreadDocument, ThreadObjectSchema };
|
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
import * as mongoose from 'mongoose';
|
|
2
2
|
import { Schema, Document } from 'mongoose';
|
|
3
|
+
import { ThreadType, MessageRole } from '@ainetwork/adk/types/memory';
|
|
3
4
|
|
|
4
|
-
declare
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
MODEL = "MODEL"
|
|
8
|
-
}
|
|
9
|
-
declare const SessionObjectSchema: Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, {
|
|
10
|
-
sessionId: string;
|
|
5
|
+
declare const ThreadObjectSchema: Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, {
|
|
6
|
+
type: ThreadType;
|
|
7
|
+
threadId: string;
|
|
11
8
|
userId: string;
|
|
12
9
|
created_at: number;
|
|
13
10
|
updated_at: number;
|
|
14
11
|
title?: string | null | undefined;
|
|
15
12
|
}, Document<unknown, {}, mongoose.FlatRecord<{
|
|
16
|
-
|
|
13
|
+
type: ThreadType;
|
|
14
|
+
threadId: string;
|
|
17
15
|
userId: string;
|
|
18
16
|
created_at: number;
|
|
19
17
|
updated_at: number;
|
|
20
18
|
title?: string | null | undefined;
|
|
21
19
|
}>, {}> & mongoose.FlatRecord<{
|
|
22
|
-
|
|
20
|
+
type: ThreadType;
|
|
21
|
+
threadId: string;
|
|
23
22
|
userId: string;
|
|
24
23
|
created_at: number;
|
|
25
24
|
updated_at: number;
|
|
@@ -29,10 +28,11 @@ declare const SessionObjectSchema: Schema<any, mongoose.Model<any, any, any, any
|
|
|
29
28
|
} & {
|
|
30
29
|
__v: number;
|
|
31
30
|
}>;
|
|
32
|
-
interface
|
|
33
|
-
|
|
31
|
+
interface ThreadDocument extends Document {
|
|
32
|
+
type: ThreadType;
|
|
33
|
+
threadId: string;
|
|
34
34
|
userId: string;
|
|
35
|
-
title
|
|
35
|
+
title: string;
|
|
36
36
|
created_at: number;
|
|
37
37
|
updated_at: number;
|
|
38
38
|
}
|
|
@@ -53,9 +53,9 @@ declare const ChatContentObjectSchema: Schema<any, mongoose.Model<any, any, any,
|
|
|
53
53
|
__v: number;
|
|
54
54
|
}>;
|
|
55
55
|
declare const ChatObjectSchema: Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, {
|
|
56
|
-
|
|
56
|
+
threadId: string;
|
|
57
57
|
userId: string;
|
|
58
|
-
role:
|
|
58
|
+
role: MessageRole;
|
|
59
59
|
content: {
|
|
60
60
|
type: string;
|
|
61
61
|
parts: any[];
|
|
@@ -63,9 +63,9 @@ declare const ChatObjectSchema: Schema<any, mongoose.Model<any, any, any, any, a
|
|
|
63
63
|
timestamp: number;
|
|
64
64
|
metadata: any;
|
|
65
65
|
}, Document<unknown, {}, mongoose.FlatRecord<{
|
|
66
|
-
|
|
66
|
+
threadId: string;
|
|
67
67
|
userId: string;
|
|
68
|
-
role:
|
|
68
|
+
role: MessageRole;
|
|
69
69
|
content: {
|
|
70
70
|
type: string;
|
|
71
71
|
parts: any[];
|
|
@@ -73,9 +73,9 @@ declare const ChatObjectSchema: Schema<any, mongoose.Model<any, any, any, any, a
|
|
|
73
73
|
timestamp: number;
|
|
74
74
|
metadata: any;
|
|
75
75
|
}>, {}> & mongoose.FlatRecord<{
|
|
76
|
-
|
|
76
|
+
threadId: string;
|
|
77
77
|
userId: string;
|
|
78
|
-
role:
|
|
78
|
+
role: MessageRole;
|
|
79
79
|
content: {
|
|
80
80
|
type: string;
|
|
81
81
|
parts: any[];
|
|
@@ -88,8 +88,8 @@ declare const ChatObjectSchema: Schema<any, mongoose.Model<any, any, any, any, a
|
|
|
88
88
|
__v: number;
|
|
89
89
|
}>;
|
|
90
90
|
interface ChatDocument extends Document {
|
|
91
|
-
|
|
92
|
-
role:
|
|
91
|
+
threadId: string;
|
|
92
|
+
role: MessageRole;
|
|
93
93
|
content: {
|
|
94
94
|
type: string;
|
|
95
95
|
parts: any[];
|
|
@@ -102,4 +102,4 @@ interface ChatDocument extends Document {
|
|
|
102
102
|
updatedAt: Date;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
export { ChatContentObjectSchema, type ChatDocument, ChatObjectSchema,
|
|
105
|
+
export { ChatContentObjectSchema, type ChatDocument, ChatObjectSchema, type ThreadDocument, ThreadObjectSchema };
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ChatContentObjectSchema,
|
|
3
3
|
ChatObjectSchema,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
} from "../chunk-N5FAVJ4Z.js";
|
|
4
|
+
ThreadObjectSchema
|
|
5
|
+
} from "../chunk-S537KQMN.js";
|
|
7
6
|
export {
|
|
8
7
|
ChatContentObjectSchema,
|
|
9
8
|
ChatObjectSchema,
|
|
10
|
-
|
|
11
|
-
SessionObjectSchema
|
|
9
|
+
ThreadObjectSchema
|
|
12
10
|
};
|
|
13
11
|
//# sourceMappingURL=chats.model.js.map
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import type { MessageObject, ThreadMetadata, ThreadObject, ThreadType } from "@ainetwork/adk/types/memory";
|
|
3
|
+
import { MessageRole } from "@ainetwork/adk/types/memory";
|
|
4
|
+
import { IThreadMemory } from "@ainetwork/adk/modules";
|
|
5
|
+
import { MongoDBMemory } from "./base.memory";
|
|
6
|
+
import {
|
|
7
|
+
ChatDocument,
|
|
8
|
+
ChatObjectSchema,
|
|
9
|
+
ThreadObjectSchema,
|
|
10
|
+
ThreadDocument
|
|
11
|
+
} from "../models/chats.model";
|
|
12
|
+
import { loggers } from "@ainetwork/adk/utils/logger";
|
|
13
|
+
import { Model } from "mongoose";
|
|
14
|
+
|
|
15
|
+
export class MongoDBThread extends MongoDBMemory implements IThreadMemory {
|
|
16
|
+
private chatModel: Model<ChatDocument>;
|
|
17
|
+
private threadModel: Model<ThreadDocument>;
|
|
18
|
+
|
|
19
|
+
constructor(uri: string) {
|
|
20
|
+
super(uri);
|
|
21
|
+
const _mongoose = super.getInstance();
|
|
22
|
+
this.chatModel = _mongoose.model<ChatDocument>("Chat", ChatObjectSchema);
|
|
23
|
+
this.threadModel = _mongoose.model<ThreadDocument>("Thread", ThreadObjectSchema);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public async getThread(
|
|
27
|
+
type: ThreadType,
|
|
28
|
+
userId: string,
|
|
29
|
+
threadId: string
|
|
30
|
+
): Promise<ThreadObject | undefined> {
|
|
31
|
+
const thread = await this.threadModel.findOne({ type, threadId, userId });
|
|
32
|
+
const chats = await this.chatModel.find({ threadId, userId }).sort({
|
|
33
|
+
timestamp: 1,
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
if (!thread) return undefined;
|
|
37
|
+
|
|
38
|
+
loggers.agent.debug(`Found ${chats.length} chats for thread ${threadId}`);
|
|
39
|
+
|
|
40
|
+
const threadObject: ThreadObject = {
|
|
41
|
+
type: thread.type as ThreadType,
|
|
42
|
+
title: thread.title || "New chats",
|
|
43
|
+
messages: {}
|
|
44
|
+
};
|
|
45
|
+
chats.forEach((chat: ChatDocument) => {
|
|
46
|
+
const chatId = chat._id?.toString() || chat.id;
|
|
47
|
+
threadObject.messages[chatId] = {
|
|
48
|
+
role: chat.role as MessageRole,
|
|
49
|
+
content: chat.content,
|
|
50
|
+
timestamp: chat.timestamp,
|
|
51
|
+
metadata: chat.metadata,
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
return threadObject;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
public async createThread(
|
|
59
|
+
type: ThreadType,
|
|
60
|
+
userId: string,
|
|
61
|
+
threadId: string,
|
|
62
|
+
title: string,
|
|
63
|
+
): Promise<ThreadMetadata> {
|
|
64
|
+
const now = Date.now();
|
|
65
|
+
await this.threadModel.create({
|
|
66
|
+
type,
|
|
67
|
+
userId,
|
|
68
|
+
threadId,
|
|
69
|
+
title,
|
|
70
|
+
updated_at: now,
|
|
71
|
+
created_at: now,
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
return { type, threadId, title, updatedAt: now };
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
public async addMessagesToThread(
|
|
78
|
+
userId: string,
|
|
79
|
+
threadId: string,
|
|
80
|
+
messages: MessageObject[]
|
|
81
|
+
): Promise<void> {
|
|
82
|
+
await this.threadModel.updateOne({ threadId, userId }, {
|
|
83
|
+
updated_at: Date.now(),
|
|
84
|
+
});
|
|
85
|
+
for (const message of messages) {
|
|
86
|
+
const newId = randomUUID();
|
|
87
|
+
await this.chatModel.create({
|
|
88
|
+
threadId,
|
|
89
|
+
chatId: newId,
|
|
90
|
+
userId,
|
|
91
|
+
role: message.role,
|
|
92
|
+
content: message.content,
|
|
93
|
+
timestamp: message.timestamp,
|
|
94
|
+
metadata: message.metadata,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
public async deleteThread(userId: string, threadId: string): Promise<void> {
|
|
100
|
+
const chats = await this.chatModel.find({ userId, threadId }).sort({
|
|
101
|
+
timestamp: 1,
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
chats?.forEach((chat: ChatDocument) => {
|
|
105
|
+
chat.deleteOne();
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
const thread = await this.threadModel.findOne({ userId, threadId });
|
|
109
|
+
thread?.deleteOne();
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
public async listThreads(userId: string): Promise<ThreadMetadata[]> {
|
|
113
|
+
const threads = await this.threadModel.find({ userId }).sort({
|
|
114
|
+
updated_at: -1,
|
|
115
|
+
});
|
|
116
|
+
const data: ThreadMetadata[] = threads.map((thread: ThreadDocument) => {
|
|
117
|
+
return {
|
|
118
|
+
type: thread.type,
|
|
119
|
+
threadId: thread.threadId,
|
|
120
|
+
title: thread.title,
|
|
121
|
+
updatedAt: thread.updated_at
|
|
122
|
+
} as ThreadMetadata;
|
|
123
|
+
})
|
|
124
|
+
return data;
|
|
125
|
+
};
|
|
126
|
+
}
|
package/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { MongoDBThread } from "./implements/thread.memory";
|
|
2
2
|
export { MongoDBIntent } from "./implements/intent.memory";
|
package/models/chats.model.ts
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
|
+
import { MessageRole, ThreadType } from "@ainetwork/adk/types/memory";
|
|
1
2
|
import { type Document, Schema } from "mongoose";
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
export enum ChatRole {
|
|
5
|
-
USER = "USER",
|
|
6
|
-
SYSTEM = "SYSTEM",
|
|
7
|
-
MODEL = "MODEL",
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export const SessionObjectSchema = new Schema(
|
|
4
|
+
export const ThreadObjectSchema = new Schema(
|
|
11
5
|
{
|
|
12
|
-
|
|
6
|
+
type: {
|
|
7
|
+
type: String,
|
|
8
|
+
enum: Object.values(ThreadType),
|
|
9
|
+
required: true,
|
|
10
|
+
},
|
|
11
|
+
threadId: {
|
|
13
12
|
type: String,
|
|
14
13
|
required: true,
|
|
15
14
|
index: true,
|
|
@@ -34,10 +33,11 @@ export const SessionObjectSchema = new Schema(
|
|
|
34
33
|
},
|
|
35
34
|
);
|
|
36
35
|
|
|
37
|
-
export interface
|
|
38
|
-
|
|
36
|
+
export interface ThreadDocument extends Document {
|
|
37
|
+
type: ThreadType;
|
|
38
|
+
threadId: string;
|
|
39
39
|
userId: string;
|
|
40
|
-
title
|
|
40
|
+
title: string;
|
|
41
41
|
created_at: number;
|
|
42
42
|
updated_at: number;
|
|
43
43
|
}
|
|
@@ -54,7 +54,7 @@ export const ChatContentObjectSchema = new Schema(
|
|
|
54
54
|
// ChatObject schema - 개별 문서로 저장
|
|
55
55
|
export const ChatObjectSchema = new Schema(
|
|
56
56
|
{
|
|
57
|
-
|
|
57
|
+
threadId: {
|
|
58
58
|
type: String,
|
|
59
59
|
required: true,
|
|
60
60
|
index: true,
|
|
@@ -66,7 +66,7 @@ export const ChatObjectSchema = new Schema(
|
|
|
66
66
|
},
|
|
67
67
|
role: {
|
|
68
68
|
type: String,
|
|
69
|
-
enum: Object.values(
|
|
69
|
+
enum: Object.values(MessageRole),
|
|
70
70
|
required: true,
|
|
71
71
|
},
|
|
72
72
|
content: {
|
|
@@ -86,8 +86,8 @@ export const ChatObjectSchema = new Schema(
|
|
|
86
86
|
|
|
87
87
|
// Chat Document interface
|
|
88
88
|
export interface ChatDocument extends Document {
|
|
89
|
-
|
|
90
|
-
role:
|
|
89
|
+
threadId: string;
|
|
90
|
+
role: MessageRole;
|
|
91
91
|
content: {
|
|
92
92
|
type: string;
|
|
93
93
|
parts: any[];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ainetwork/adk-provider-memory-mongodb",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"author": "AI Network (https://ainetwork.ai)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -13,12 +13,14 @@
|
|
|
13
13
|
".": {
|
|
14
14
|
"types": "./dist/index.d.ts",
|
|
15
15
|
"import": "./dist/index.js",
|
|
16
|
-
"require": "./dist/index.cjs"
|
|
16
|
+
"require": "./dist/index.cjs",
|
|
17
|
+
"default": "./dist/index.js"
|
|
17
18
|
},
|
|
18
19
|
"./models/*": {
|
|
19
20
|
"types": "./dist/models/*.d.ts",
|
|
20
21
|
"import": "./dist/models/*.js",
|
|
21
|
-
"require": "./dist/models/*.cjs"
|
|
22
|
+
"require": "./dist/models/*.cjs",
|
|
23
|
+
"default": "./dist/models/*.js"
|
|
22
24
|
}
|
|
23
25
|
},
|
|
24
26
|
"scripts": {
|
|
@@ -26,7 +28,7 @@
|
|
|
26
28
|
"clean": "rm -rf dist"
|
|
27
29
|
},
|
|
28
30
|
"dependencies": {
|
|
29
|
-
"@ainetwork/adk": "^0.1.
|
|
31
|
+
"@ainetwork/adk": "^0.1.13",
|
|
30
32
|
"mongoose": "^8.16.5"
|
|
31
33
|
},
|
|
32
34
|
"devDependencies": {
|
|
@@ -36,5 +38,5 @@
|
|
|
36
38
|
"publishConfig": {
|
|
37
39
|
"access": "public"
|
|
38
40
|
},
|
|
39
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "d27f9542cbc4049593be4015b78e607e19ac22e6"
|
|
40
42
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../models/chats.model.ts"],"sourcesContent":["import { type Document, Schema } from \"mongoose\";\n\n// ChatRole enum\nexport enum ChatRole {\n\tUSER = \"USER\",\n\tSYSTEM = \"SYSTEM\",\n\tMODEL = \"MODEL\",\n}\n\nexport const SessionObjectSchema = new Schema(\n\t{\n\t\tsessionId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tuserId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t},\n\t\tcreated_at: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tupdated_at: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t}\n\t},\n);\n\nexport interface SessionDocument extends Document {\n\tsessionId: string;\n\tuserId: string;\n\ttitle?: string;\n\tcreated_at: number;\n\tupdated_at: number;\n}\n\n// ChatContentObject schema\nexport const ChatContentObjectSchema = new Schema(\n\t{\n\t\ttype: { type: String, required: true },\n\t\tparts: { type: [Schema.Types.Mixed], required: true },\n\t},\n\t{ _id: false },\n);\n\n// ChatObject schema - 개별 문서로 저장\nexport const ChatObjectSchema = new Schema(\n\t{\n\t\tsessionId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tuserId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\trole: {\n\t\t\ttype: String,\n\t\t\tenum: Object.values(ChatRole),\n\t\t\trequired: true,\n\t\t},\n\t\tcontent: {\n\t\t\ttype: ChatContentObjectSchema,\n\t\t\trequired: true,\n\t\t},\n\t\ttimestamp: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tmetadata: {\n\t\t\ttype: Schema.Types.Mixed,\n\t\t\tdefault: {},\n\t\t},\n\t},\n);\n\n// Chat Document interface\nexport interface ChatDocument extends Document {\n\tsessionId: string;\n\trole: ChatRole;\n\tcontent: {\n\t\ttype: string;\n\t\tparts: any[];\n\t};\n\ttimestamp: number;\n\tmetadata?: { [key: string]: unknown };\n\tcreatedAt: Date;\n\tupdatedAt: Date;\n}\n"],"mappings":";AAAA,SAAwB,cAAc;AAG/B,IAAK,WAAL,kBAAKA,cAAL;AACN,EAAAA,UAAA,UAAO;AACP,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,WAAQ;AAHG,SAAAA;AAAA,GAAA;AAML,IAAM,sBAAsB,IAAI;AAAA,EACtC;AAAA,IACC,WAAW;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACA,OAAO;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,YAAY;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,YAAY;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,EACD;AACD;AAWO,IAAM,0BAA0B,IAAI;AAAA,EAC1C;AAAA,IACC,MAAM,EAAE,MAAM,QAAQ,UAAU,KAAK;AAAA,IACrC,OAAO,EAAE,MAAM,CAAC,OAAO,MAAM,KAAK,GAAG,UAAU,KAAK;AAAA,EACrD;AAAA,EACA,EAAE,KAAK,MAAM;AACd;AAGO,IAAM,mBAAmB,IAAI;AAAA,EACnC;AAAA,IACC,WAAW;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACA,MAAM;AAAA,MACL,MAAM;AAAA,MACN,MAAM,OAAO,OAAO,QAAQ;AAAA,MAC5B,UAAU;AAAA,IACX;AAAA,IACA,SAAS;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,WAAW;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACT,MAAM,OAAO,MAAM;AAAA,MACnB,SAAS,CAAC;AAAA,IACX;AAAA,EACD;AACD;","names":["ChatRole"]}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
2
|
-
import type { ChatObject, SessionMetadata, SessionObject } from "@ainetwork/adk/types/memory";
|
|
3
|
-
import { ISessionMemory } from "@ainetwork/adk/modules";
|
|
4
|
-
import { MongoDBMemory } from "./base.memory";
|
|
5
|
-
import {
|
|
6
|
-
ChatDocument,
|
|
7
|
-
ChatRole,
|
|
8
|
-
ChatObjectSchema,
|
|
9
|
-
SessionObjectSchema,
|
|
10
|
-
SessionDocument
|
|
11
|
-
} from "../models/chats.model";
|
|
12
|
-
import { loggers } from "@ainetwork/adk/utils/logger";
|
|
13
|
-
import { Model } from "mongoose";
|
|
14
|
-
|
|
15
|
-
export class MongoDBSession extends MongoDBMemory implements ISessionMemory {
|
|
16
|
-
private chatModel: Model<ChatDocument>;
|
|
17
|
-
private sessionModel: Model<SessionDocument>;
|
|
18
|
-
|
|
19
|
-
constructor(uri: string) {
|
|
20
|
-
super(uri);
|
|
21
|
-
const _mongoose = super.getInstance();
|
|
22
|
-
this.chatModel = _mongoose.model<ChatDocument>("Chat", ChatObjectSchema);
|
|
23
|
-
this.sessionModel = _mongoose.model<SessionDocument>("Session", SessionObjectSchema);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
public async getSession(sessionId: string, userId?: string): Promise<SessionObject | undefined> {
|
|
27
|
-
const chats = await this.chatModel.find({ sessionId, userId }).sort({
|
|
28
|
-
timestamp: 1,
|
|
29
|
-
});
|
|
30
|
-
const session = await this.sessionModel.findOne({ sessionId, userId });
|
|
31
|
-
|
|
32
|
-
loggers.agent.debug(`Found ${chats.length} chats for session ${sessionId}`);
|
|
33
|
-
|
|
34
|
-
const sessionObject: SessionObject = { chats: {} };
|
|
35
|
-
sessionObject.title = session?.title;
|
|
36
|
-
chats.forEach((chat: ChatDocument) => {
|
|
37
|
-
const chatId = chat._id?.toString() || chat.id;
|
|
38
|
-
sessionObject.chats[chatId] = {
|
|
39
|
-
role: chat.role as ChatRole,
|
|
40
|
-
content: chat.content,
|
|
41
|
-
timestamp: chat.timestamp,
|
|
42
|
-
metadata: chat.metadata,
|
|
43
|
-
};
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
return sessionObject;
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
public async createSession(userId: string, sessionId: string, title: string): Promise<SessionMetadata> {
|
|
50
|
-
const now = Date.now();
|
|
51
|
-
await this.sessionModel.create({
|
|
52
|
-
sessionId,
|
|
53
|
-
userId,
|
|
54
|
-
title,
|
|
55
|
-
updated_at: now,
|
|
56
|
-
created_at: now,
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
return { title, sessionId, updatedAt: now };
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
public async addChatToSession(userId: string, sessionId: string, chat: ChatObject): Promise<void> {
|
|
63
|
-
const newId = randomUUID();
|
|
64
|
-
await this.sessionModel.updateOne({ sessionId, userId }, {
|
|
65
|
-
updated_at: Date.now(),
|
|
66
|
-
});
|
|
67
|
-
await this.chatModel.create({
|
|
68
|
-
sessionId,
|
|
69
|
-
chatId: newId,
|
|
70
|
-
userId,
|
|
71
|
-
role: chat.role,
|
|
72
|
-
content: chat.content,
|
|
73
|
-
timestamp: chat.timestamp,
|
|
74
|
-
metadata: chat.metadata,
|
|
75
|
-
});
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
public async deleteSession(userId: string, sessionId: string): Promise<void> {
|
|
79
|
-
const chats = await this.chatModel.find({ userId, sessionId }).sort({
|
|
80
|
-
timestamp: 1,
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
chats?.forEach((chat: ChatDocument) => {
|
|
84
|
-
chat.deleteOne();
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
const session = await this.sessionModel.findOne({ sessionId, userId });
|
|
88
|
-
session?.deleteOne();
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
public async listSessions(userId: string): Promise<SessionMetadata[]> {
|
|
92
|
-
const sessions = await this.sessionModel.find({ userId }).sort({
|
|
93
|
-
updated_at: -1,
|
|
94
|
-
});
|
|
95
|
-
const data: SessionMetadata[] = sessions.map((session: SessionDocument) => {
|
|
96
|
-
return {
|
|
97
|
-
sessionId: session.sessionId,
|
|
98
|
-
title: session.title,
|
|
99
|
-
updatedAt: session.updated_at
|
|
100
|
-
} as SessionMetadata;
|
|
101
|
-
})
|
|
102
|
-
return data;
|
|
103
|
-
};
|
|
104
|
-
}
|