@ainetwork/adk-provider-memory-mongodb 0.2.0 → 0.2.1

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.
@@ -11,6 +11,11 @@ var MessageContentObjectSchema = new Schema(
11
11
  );
12
12
  var MessageObjectSchema = new Schema(
13
13
  {
14
+ messageId: {
15
+ type: String,
16
+ required: true,
17
+ index: true
18
+ },
14
19
  threadId: {
15
20
  type: String,
16
21
  required: true,
@@ -47,4 +52,4 @@ export {
47
52
  MessageObjectSchema,
48
53
  MessageModel
49
54
  };
50
- //# sourceMappingURL=chunk-MLPXPX2L.js.map
55
+ //# sourceMappingURL=chunk-5CCEN7NK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../models/messages.model.ts"],"sourcesContent":["import { MessageRole } from \"@ainetwork/adk/types/memory\";\nimport { type Document, Schema } from \"mongoose\";\nimport mongoose from \"mongoose\";\n\n// MessageContentObject schema\nexport const MessageContentObjectSchema = 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// MessageObject schema - 개별 문서로 저장\nexport const MessageObjectSchema = new Schema(\n\t{\n\t\tmessageId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: 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\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: MessageContentObjectSchema,\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// Message Document interface\nexport interface MessageDocument extends Document {\n\tmessageId: string;\n\tthreadId: string;\n\tuserId: 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}\n\nexport const MessageModel = mongoose.model<MessageDocument>(\"Message\", MessageObjectSchema);"],"mappings":";AAAA,SAAS,mBAAmB;AAC5B,SAAwB,cAAc;AACtC,OAAO,cAAc;AAGd,IAAM,6BAA6B,IAAI;AAAA,EAC7C;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,sBAAsB,IAAI;AAAA,EACtC;AAAA,IACC,WAAW;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,IACR;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,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;AAgBO,IAAM,eAAe,SAAS,MAAuB,WAAW,mBAAmB;","names":[]}
package/dist/index.cjs CHANGED
@@ -35,9 +35,6 @@ __export(index_exports, {
35
35
  });
36
36
  module.exports = __toCommonJS(index_exports);
37
37
 
38
- // implements/thread.memory.ts
39
- var import_node_crypto = require("crypto");
40
-
41
38
  // implements/base.memory.ts
42
39
  var import_mongoose = __toESM(require("mongoose"), 1);
43
40
  var import_logger = require("@ainetwork/adk/utils/logger");
@@ -134,6 +131,11 @@ var MessageContentObjectSchema = new import_mongoose4.Schema(
134
131
  );
135
132
  var MessageObjectSchema = new import_mongoose4.Schema(
136
133
  {
134
+ messageId: {
135
+ type: String,
136
+ required: true,
137
+ index: true
138
+ },
137
139
  threadId: {
138
140
  type: String,
139
141
  required: true,
@@ -181,16 +183,16 @@ var MongoDBThread = class extends MongoDBMemory {
181
183
  const threadObject = {
182
184
  type: thread.type,
183
185
  title: thread.title || "New thread",
184
- messages: {}
186
+ messages: []
185
187
  };
186
188
  messages.forEach((message) => {
187
- const messageId = message._id?.toString() || message.id;
188
- threadObject.messages[messageId] = {
189
+ threadObject.messages.push({
190
+ messageId: message.messageId,
189
191
  role: message.role,
190
192
  content: message.content,
191
193
  timestamp: message.timestamp,
192
194
  metadata: message.metadata
193
- };
195
+ });
194
196
  });
195
197
  return threadObject;
196
198
  }
@@ -210,21 +212,17 @@ var MongoDBThread = class extends MongoDBMemory {
210
212
  await ThreadModel.updateOne({ threadId, userId }, {
211
213
  updated_at: Date.now()
212
214
  });
213
- const messageIds = [];
214
215
  for (const message of messages) {
215
- const newId = (0, import_node_crypto.randomUUID)();
216
216
  await MessageModel.create({
217
217
  threadId,
218
- messageId: newId,
218
+ messageId: message.messageId,
219
219
  userId,
220
220
  role: message.role,
221
221
  content: message.content,
222
222
  timestamp: message.timestamp,
223
223
  metadata: message.metadata
224
224
  });
225
- messageIds.push(newId);
226
225
  }
227
- return messageIds;
228
226
  }
229
227
  async deleteThread(userId, threadId) {
230
228
  const messages = await MessageModel.find({ userId, threadId }).sort({
@@ -1 +1 @@
1
- {"version":3,"sources":["../index.ts","../implements/thread.memory.ts","../implements/base.memory.ts","../models/threads.model.ts","../models/messages.model.ts","../models/intent.model.ts","../implements/intent.memory.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 { ThreadDocument, ThreadModel } from \"../models/threads.model\";\nimport { MessageDocument, MessageModel } from \"../models/messages.model\";\nimport { loggers } from \"@ainetwork/adk/utils/logger\";\n\nexport class MongoDBThread extends MongoDBMemory implements IThreadMemory {\n constructor(uri: string) {\n super(uri);\n }\n\n public async getThread(\n userId: string,\n threadId: string\n ): Promise<ThreadObject | undefined> {\n const thread = await ThreadModel.findOne({ threadId, userId });\n\t\tconst messages = await MessageModel.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 ${messages.length} messages for thread ${threadId}`);\n\n\t\tconst threadObject: ThreadObject = { \n type: thread.type as ThreadType,\n title: thread.title || \"New thread\",\n messages: {}\n };\n\t\tmessages.forEach((message: MessageDocument) => {\n\t\t\tconst messageId = message._id?.toString() || message.id;\n\t\t\tthreadObject.messages[messageId] = {\n\t\t\t\trole: message.role as MessageRole,\n\t\t\t\tcontent: message.content,\n\t\t\t\ttimestamp: message.timestamp,\n\t\t\t\tmetadata: message.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 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<string[]> {\n await ThreadModel.updateOne({ threadId, userId }, {\n updated_at: Date.now(),\n });\n const messageIds: string[] = [];\n for (const message of messages) {\n const newId = randomUUID();\n await MessageModel.create({\n threadId,\n messageId: newId,\n userId,\n role: message.role,\n content: message.content,\n timestamp: message.timestamp,\n metadata: message.metadata,\n });\n messageIds.push(newId);\n }\n return messageIds;\n };\n\n\tpublic async deleteThread(userId: string, threadId: string): Promise<void> {\n\t\tconst messages = await MessageModel.find({ userId, threadId }).sort({\n\t\t\ttimestamp: 1,\n\t\t});\n\n\t\tmessages?.forEach((message: MessageDocument) => {\n message.deleteOne();\n\t\t});\n \n const thread = await ThreadModel.findOne({ userId, threadId });\n thread?.deleteOne();\n };\n\n\tpublic async listThreads(userId: string): Promise<ThreadMetadata[]> {\n const threads = await 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 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\n constructor(uri: string) {\n this._uri = uri;\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 mongoose.connect(this._uri, {\n maxPoolSize: 1,\n serverSelectionTimeoutMS: 30000,\n socketTimeoutMS: 45000,\n connectTimeoutMS: 30000,\n bufferCommands: false,\n });\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 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 { ThreadType } from \"@ainetwork/adk/types/memory\";\nimport { type Document, Schema } from \"mongoose\";\nimport mongoose 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\nexport const ThreadModel = mongoose.model<ThreadDocument>(\"Thread\", ThreadObjectSchema);\n","import { MessageRole } from \"@ainetwork/adk/types/memory\";\nimport { type Document, Schema } from \"mongoose\";\nimport mongoose from \"mongoose\";\n\n// MessageContentObject schema\nexport const MessageContentObjectSchema = 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// MessageObject schema - 개별 문서로 저장\nexport const MessageObjectSchema = 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: MessageContentObjectSchema,\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// Message Document interface\nexport interface MessageDocument 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\nexport const MessageModel = mongoose.model<MessageDocument>(\"Message\", MessageObjectSchema);","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);","import type { Intent } from \"@ainetwork/adk/types/memory\";\nimport { IIntentMemory } from \"@ainetwork/adk/modules\";\nimport { MongoDBMemory } from \"./base.memory\";\nimport { IntentModel } from \"../models/intent.model\";\nimport { Types } from \"mongoose\";\n\nexport class MongoDBIntent extends MongoDBMemory implements IIntentMemory {\n public async getIntent(intentId: string): Promise<Intent | undefined> {\n const intent = await IntentModel.findById(new Types.ObjectId(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 getIntentByName(intentName: string): Promise<Intent | undefined> {\n\t\tconst intent = await IntentModel.findOne({ name: intentName });\n\t\tif (intent) {\n\t\t\treturn {\n\t\t\t\tname: intent.name,\n\t\t\t\tdescription: intent.description,\n\t\t\t\tprompt: intent.prompt,\n\t\t\t\tllm: intent.llm,\n\t\t\t} as Intent;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tpublic async saveIntent(intent: Intent): Promise<void> {\n // ObjectId automatically generated (MongoDB automatically generates)\n await IntentModel.create({\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: new Types.ObjectId(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: new Types.ObjectId(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":["mongoose","import_mongoose","mongoose","import_memory","import_mongoose","mongoose","import_logger","import_mongoose","mongoose","import_mongoose"]}
1
+ {"version":3,"sources":["../index.ts","../implements/base.memory.ts","../models/threads.model.ts","../models/messages.model.ts","../implements/thread.memory.ts","../models/intent.model.ts","../implements/intent.memory.ts"],"sourcesContent":["export { MongoDBThread } from \"./implements/thread.memory\";\nexport { MongoDBIntent } from \"./implements/intent.memory\";","import { IMemory } from \"node_modules/@ainetwork/adk/dist/esm/modules/memory/base.memory\";\nimport 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\n constructor(uri: string) {\n this._uri = uri;\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 mongoose.connect(this._uri, {\n maxPoolSize: 1,\n serverSelectionTimeoutMS: 30000,\n socketTimeoutMS: 45000,\n connectTimeoutMS: 30000,\n bufferCommands: false,\n });\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 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 { ThreadType } from \"@ainetwork/adk/types/memory\";\nimport { type Document, Schema } from \"mongoose\";\nimport mongoose 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\nexport const ThreadModel = mongoose.model<ThreadDocument>(\"Thread\", ThreadObjectSchema);\n","import { MessageRole } from \"@ainetwork/adk/types/memory\";\nimport { type Document, Schema } from \"mongoose\";\nimport mongoose from \"mongoose\";\n\n// MessageContentObject schema\nexport const MessageContentObjectSchema = 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// MessageObject schema - 개별 문서로 저장\nexport const MessageObjectSchema = new Schema(\n\t{\n\t\tmessageId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: 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\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: MessageContentObjectSchema,\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// Message Document interface\nexport interface MessageDocument extends Document {\n\tmessageId: string;\n\tthreadId: string;\n\tuserId: 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}\n\nexport const MessageModel = mongoose.model<MessageDocument>(\"Message\", MessageObjectSchema);","import 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 { ThreadDocument, ThreadModel } from \"../models/threads.model\";\nimport { MessageDocument, MessageModel } from \"../models/messages.model\";\nimport { loggers } from \"@ainetwork/adk/utils/logger\";\n\nexport class MongoDBThread extends MongoDBMemory implements IThreadMemory {\n constructor(uri: string) {\n super(uri);\n }\n\n public async getThread(\n userId: string,\n threadId: string\n ): Promise<ThreadObject | undefined> {\n const thread = await ThreadModel.findOne({ threadId, userId });\n\t\tconst messages = await MessageModel.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 ${messages.length} messages for thread ${threadId}`);\n\n\t\tconst threadObject: ThreadObject = { \n type: thread.type as ThreadType,\n title: thread.title || \"New thread\",\n messages: []\n };\n\t\tmessages.forEach((message: MessageDocument) => {\n\t\t\tthreadObject.messages.push({\n messageId: message.messageId,\n\t\t\t\trole: message.role as MessageRole,\n\t\t\t\tcontent: message.content,\n\t\t\t\ttimestamp: message.timestamp,\n\t\t\t\tmetadata: message.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 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 ThreadModel.updateOne({ threadId, userId }, {\n updated_at: Date.now(),\n });\n for (const message of messages) {\n await MessageModel.create({\n threadId,\n messageId: message.messageId,\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 messages = await MessageModel.find({ userId, threadId }).sort({\n\t\t\ttimestamp: 1,\n\t\t});\n\n\t\tmessages?.forEach((message: MessageDocument) => {\n message.deleteOne();\n\t\t});\n \n const thread = await ThreadModel.findOne({ userId, threadId });\n thread?.deleteOne();\n };\n\n\tpublic async listThreads(userId: string): Promise<ThreadMetadata[]> {\n const threads = await 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 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);","import type { Intent } from \"@ainetwork/adk/types/memory\";\nimport { IIntentMemory } from \"@ainetwork/adk/modules\";\nimport { MongoDBMemory } from \"./base.memory\";\nimport { IntentModel } from \"../models/intent.model\";\nimport { Types } from \"mongoose\";\n\nexport class MongoDBIntent extends MongoDBMemory implements IIntentMemory {\n public async getIntent(intentId: string): Promise<Intent | undefined> {\n const intent = await IntentModel.findById(new Types.ObjectId(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 getIntentByName(intentName: string): Promise<Intent | undefined> {\n\t\tconst intent = await IntentModel.findOne({ name: intentName });\n\t\tif (intent) {\n\t\t\treturn {\n\t\t\t\tname: intent.name,\n\t\t\t\tdescription: intent.description,\n\t\t\t\tprompt: intent.prompt,\n\t\t\t\tllm: intent.llm,\n\t\t\t} as Intent;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tpublic async saveIntent(intent: Intent): Promise<void> {\n // ObjectId automatically generated (MongoDB automatically generates)\n await IntentModel.create({\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: new Types.ObjectId(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: new Types.ObjectId(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":["mongoose","import_mongoose","mongoose","import_memory","import_mongoose","mongoose","import_logger","import_mongoose","mongoose","import_mongoose"]}
package/dist/index.d.cts CHANGED
@@ -15,7 +15,7 @@ declare class MongoDBThread extends MongoDBMemory implements IThreadMemory {
15
15
  constructor(uri: string);
16
16
  getThread(userId: string, threadId: string): Promise<ThreadObject | undefined>;
17
17
  createThread(type: ThreadType, userId: string, threadId: string, title: string): Promise<ThreadMetadata>;
18
- addMessagesToThread(userId: string, threadId: string, messages: MessageObject[]): Promise<string[]>;
18
+ addMessagesToThread(userId: string, threadId: string, messages: MessageObject[]): Promise<void>;
19
19
  deleteThread(userId: string, threadId: string): Promise<void>;
20
20
  listThreads(userId: string): Promise<ThreadMetadata[]>;
21
21
  }
package/dist/index.d.ts CHANGED
@@ -15,7 +15,7 @@ declare class MongoDBThread extends MongoDBMemory implements IThreadMemory {
15
15
  constructor(uri: string);
16
16
  getThread(userId: string, threadId: string): Promise<ThreadObject | undefined>;
17
17
  createThread(type: ThreadType, userId: string, threadId: string, title: string): Promise<ThreadMetadata>;
18
- addMessagesToThread(userId: string, threadId: string, messages: MessageObject[]): Promise<string[]>;
18
+ addMessagesToThread(userId: string, threadId: string, messages: MessageObject[]): Promise<void>;
19
19
  deleteThread(userId: string, threadId: string): Promise<void>;
20
20
  listThreads(userId: string): Promise<ThreadMetadata[]>;
21
21
  }
package/dist/index.js CHANGED
@@ -3,14 +3,11 @@ import {
3
3
  } from "./chunk-JCE5NAY5.js";
4
4
  import {
5
5
  MessageModel
6
- } from "./chunk-MLPXPX2L.js";
6
+ } from "./chunk-5CCEN7NK.js";
7
7
  import {
8
8
  ThreadModel
9
9
  } from "./chunk-GPOFS7ZT.js";
10
10
 
11
- // implements/thread.memory.ts
12
- import { randomUUID } from "crypto";
13
-
14
11
  // implements/base.memory.ts
15
12
  import mongoose from "mongoose";
16
13
  import { loggers } from "@ainetwork/adk/utils/logger";
@@ -73,16 +70,16 @@ var MongoDBThread = class extends MongoDBMemory {
73
70
  const threadObject = {
74
71
  type: thread.type,
75
72
  title: thread.title || "New thread",
76
- messages: {}
73
+ messages: []
77
74
  };
78
75
  messages.forEach((message) => {
79
- const messageId = message._id?.toString() || message.id;
80
- threadObject.messages[messageId] = {
76
+ threadObject.messages.push({
77
+ messageId: message.messageId,
81
78
  role: message.role,
82
79
  content: message.content,
83
80
  timestamp: message.timestamp,
84
81
  metadata: message.metadata
85
- };
82
+ });
86
83
  });
87
84
  return threadObject;
88
85
  }
@@ -102,21 +99,17 @@ var MongoDBThread = class extends MongoDBMemory {
102
99
  await ThreadModel.updateOne({ threadId, userId }, {
103
100
  updated_at: Date.now()
104
101
  });
105
- const messageIds = [];
106
102
  for (const message of messages) {
107
- const newId = randomUUID();
108
103
  await MessageModel.create({
109
104
  threadId,
110
- messageId: newId,
105
+ messageId: message.messageId,
111
106
  userId,
112
107
  role: message.role,
113
108
  content: message.content,
114
109
  timestamp: message.timestamp,
115
110
  metadata: message.metadata
116
111
  });
117
- messageIds.push(newId);
118
112
  }
119
- return messageIds;
120
113
  }
121
114
  async deleteThread(userId, threadId) {
122
115
  const messages = await MessageModel.find({ userId, threadId }).sort({
package/dist/index.js.map CHANGED
@@ -1 +1 @@
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 { ThreadDocument, ThreadModel } from \"../models/threads.model\";\nimport { MessageDocument, MessageModel } from \"../models/messages.model\";\nimport { loggers } from \"@ainetwork/adk/utils/logger\";\n\nexport class MongoDBThread extends MongoDBMemory implements IThreadMemory {\n constructor(uri: string) {\n super(uri);\n }\n\n public async getThread(\n userId: string,\n threadId: string\n ): Promise<ThreadObject | undefined> {\n const thread = await ThreadModel.findOne({ threadId, userId });\n\t\tconst messages = await MessageModel.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 ${messages.length} messages for thread ${threadId}`);\n\n\t\tconst threadObject: ThreadObject = { \n type: thread.type as ThreadType,\n title: thread.title || \"New thread\",\n messages: {}\n };\n\t\tmessages.forEach((message: MessageDocument) => {\n\t\t\tconst messageId = message._id?.toString() || message.id;\n\t\t\tthreadObject.messages[messageId] = {\n\t\t\t\trole: message.role as MessageRole,\n\t\t\t\tcontent: message.content,\n\t\t\t\ttimestamp: message.timestamp,\n\t\t\t\tmetadata: message.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 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<string[]> {\n await ThreadModel.updateOne({ threadId, userId }, {\n updated_at: Date.now(),\n });\n const messageIds: string[] = [];\n for (const message of messages) {\n const newId = randomUUID();\n await MessageModel.create({\n threadId,\n messageId: newId,\n userId,\n role: message.role,\n content: message.content,\n timestamp: message.timestamp,\n metadata: message.metadata,\n });\n messageIds.push(newId);\n }\n return messageIds;\n };\n\n\tpublic async deleteThread(userId: string, threadId: string): Promise<void> {\n\t\tconst messages = await MessageModel.find({ userId, threadId }).sort({\n\t\t\ttimestamp: 1,\n\t\t});\n\n\t\tmessages?.forEach((message: MessageDocument) => {\n message.deleteOne();\n\t\t});\n \n const thread = await ThreadModel.findOne({ userId, threadId });\n thread?.deleteOne();\n };\n\n\tpublic async listThreads(userId: string): Promise<ThreadMetadata[]> {\n const threads = await 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 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\n constructor(uri: string) {\n this._uri = uri;\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 mongoose.connect(this._uri, {\n maxPoolSize: 1,\n serverSelectionTimeoutMS: 30000,\n socketTimeoutMS: 45000,\n connectTimeoutMS: 30000,\n bufferCommands: false,\n });\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 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 { Intent } from \"@ainetwork/adk/types/memory\";\nimport { IIntentMemory } from \"@ainetwork/adk/modules\";\nimport { MongoDBMemory } from \"./base.memory\";\nimport { IntentModel } from \"../models/intent.model\";\nimport { Types } from \"mongoose\";\n\nexport class MongoDBIntent extends MongoDBMemory implements IIntentMemory {\n public async getIntent(intentId: string): Promise<Intent | undefined> {\n const intent = await IntentModel.findById(new Types.ObjectId(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 getIntentByName(intentName: string): Promise<Intent | undefined> {\n\t\tconst intent = await IntentModel.findOne({ name: intentName });\n\t\tif (intent) {\n\t\t\treturn {\n\t\t\t\tname: intent.name,\n\t\t\t\tdescription: intent.description,\n\t\t\t\tprompt: intent.prompt,\n\t\t\t\tllm: intent.llm,\n\t\t\t} as Intent;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tpublic async saveIntent(intent: Intent): Promise<void> {\n // ObjectId automatically generated (MongoDB automatically generates)\n await IntentModel.create({\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: new Types.ObjectId(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: new Types.ObjectId(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"]}
1
+ {"version":3,"sources":["../implements/base.memory.ts","../implements/thread.memory.ts","../implements/intent.memory.ts"],"sourcesContent":["import { IMemory } from \"node_modules/@ainetwork/adk/dist/esm/modules/memory/base.memory\";\nimport 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\n constructor(uri: string) {\n this._uri = uri;\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 mongoose.connect(this._uri, {\n maxPoolSize: 1,\n serverSelectionTimeoutMS: 30000,\n socketTimeoutMS: 45000,\n connectTimeoutMS: 30000,\n bufferCommands: false,\n });\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 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 { 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 { ThreadDocument, ThreadModel } from \"../models/threads.model\";\nimport { MessageDocument, MessageModel } from \"../models/messages.model\";\nimport { loggers } from \"@ainetwork/adk/utils/logger\";\n\nexport class MongoDBThread extends MongoDBMemory implements IThreadMemory {\n constructor(uri: string) {\n super(uri);\n }\n\n public async getThread(\n userId: string,\n threadId: string\n ): Promise<ThreadObject | undefined> {\n const thread = await ThreadModel.findOne({ threadId, userId });\n\t\tconst messages = await MessageModel.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 ${messages.length} messages for thread ${threadId}`);\n\n\t\tconst threadObject: ThreadObject = { \n type: thread.type as ThreadType,\n title: thread.title || \"New thread\",\n messages: []\n };\n\t\tmessages.forEach((message: MessageDocument) => {\n\t\t\tthreadObject.messages.push({\n messageId: message.messageId,\n\t\t\t\trole: message.role as MessageRole,\n\t\t\t\tcontent: message.content,\n\t\t\t\ttimestamp: message.timestamp,\n\t\t\t\tmetadata: message.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 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 ThreadModel.updateOne({ threadId, userId }, {\n updated_at: Date.now(),\n });\n for (const message of messages) {\n await MessageModel.create({\n threadId,\n messageId: message.messageId,\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 messages = await MessageModel.find({ userId, threadId }).sort({\n\t\t\ttimestamp: 1,\n\t\t});\n\n\t\tmessages?.forEach((message: MessageDocument) => {\n message.deleteOne();\n\t\t});\n \n const thread = await ThreadModel.findOne({ userId, threadId });\n thread?.deleteOne();\n };\n\n\tpublic async listThreads(userId: string): Promise<ThreadMetadata[]> {\n const threads = await 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 type { Intent } from \"@ainetwork/adk/types/memory\";\nimport { IIntentMemory } from \"@ainetwork/adk/modules\";\nimport { MongoDBMemory } from \"./base.memory\";\nimport { IntentModel } from \"../models/intent.model\";\nimport { Types } from \"mongoose\";\n\nexport class MongoDBIntent extends MongoDBMemory implements IIntentMemory {\n public async getIntent(intentId: string): Promise<Intent | undefined> {\n const intent = await IntentModel.findById(new Types.ObjectId(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 getIntentByName(intentName: string): Promise<Intent | undefined> {\n\t\tconst intent = await IntentModel.findOne({ name: intentName });\n\t\tif (intent) {\n\t\t\treturn {\n\t\t\t\tname: intent.name,\n\t\t\t\tdescription: intent.description,\n\t\t\t\tprompt: intent.prompt,\n\t\t\t\tllm: intent.llm,\n\t\t\t} as Intent;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tpublic async saveIntent(intent: Intent): Promise<void> {\n // ObjectId automatically generated (MongoDB automatically generates)\n await IntentModel.create({\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: new Types.ObjectId(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: new Types.ObjectId(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"]}
@@ -47,6 +47,11 @@ var MessageContentObjectSchema = new import_mongoose.Schema(
47
47
  );
48
48
  var MessageObjectSchema = new import_mongoose.Schema(
49
49
  {
50
+ messageId: {
51
+ type: String,
52
+ required: true,
53
+ index: true
54
+ },
50
55
  threadId: {
51
56
  type: String,
52
57
  required: true,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../models/messages.model.ts"],"sourcesContent":["import { MessageRole } from \"@ainetwork/adk/types/memory\";\nimport { type Document, Schema } from \"mongoose\";\nimport mongoose from \"mongoose\";\n\n// MessageContentObject schema\nexport const MessageContentObjectSchema = 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// MessageObject schema - 개별 문서로 저장\nexport const MessageObjectSchema = 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: MessageContentObjectSchema,\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// Message Document interface\nexport interface MessageDocument 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\nexport const MessageModel = mongoose.model<MessageDocument>(\"Message\", MessageObjectSchema);"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA4B;AAC5B,sBAAsC;AACtC,IAAAA,mBAAqB;AAGd,IAAM,6BAA6B,IAAI;AAAA,EAC7C;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,sBAAsB,IAAI;AAAA,EACtC;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;AAgBO,IAAM,eAAe,iBAAAC,QAAS,MAAuB,WAAW,mBAAmB;","names":["import_mongoose","mongoose"]}
1
+ {"version":3,"sources":["../../models/messages.model.ts"],"sourcesContent":["import { MessageRole } from \"@ainetwork/adk/types/memory\";\nimport { type Document, Schema } from \"mongoose\";\nimport mongoose from \"mongoose\";\n\n// MessageContentObject schema\nexport const MessageContentObjectSchema = 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// MessageObject schema - 개별 문서로 저장\nexport const MessageObjectSchema = new Schema(\n\t{\n\t\tmessageId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: 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\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: MessageContentObjectSchema,\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// Message Document interface\nexport interface MessageDocument extends Document {\n\tmessageId: string;\n\tthreadId: string;\n\tuserId: 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}\n\nexport const MessageModel = mongoose.model<MessageDocument>(\"Message\", MessageObjectSchema);"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA4B;AAC5B,sBAAsC;AACtC,IAAAA,mBAAqB;AAGd,IAAM,6BAA6B,IAAI;AAAA,EAC7C;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,sBAAsB,IAAI;AAAA,EACtC;AAAA,IACC,WAAW;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,IACR;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,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;AAgBO,IAAM,eAAe,iBAAAC,QAAS,MAAuB,WAAW,mBAAmB;","names":["import_mongoose","mongoose"]}
@@ -20,6 +20,7 @@ declare const MessageContentObjectSchema: Schema<any, mongoose.Model<any, any, a
20
20
  declare const MessageObjectSchema: Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, {
21
21
  threadId: string;
22
22
  userId: string;
23
+ messageId: string;
23
24
  role: MessageRole;
24
25
  content: {
25
26
  type: string;
@@ -30,6 +31,7 @@ declare const MessageObjectSchema: Schema<any, mongoose.Model<any, any, any, any
30
31
  }, Document<unknown, {}, mongoose.FlatRecord<{
31
32
  threadId: string;
32
33
  userId: string;
34
+ messageId: string;
33
35
  role: MessageRole;
34
36
  content: {
35
37
  type: string;
@@ -40,6 +42,7 @@ declare const MessageObjectSchema: Schema<any, mongoose.Model<any, any, any, any
40
42
  }>, {}> & mongoose.FlatRecord<{
41
43
  threadId: string;
42
44
  userId: string;
45
+ messageId: string;
43
46
  role: MessageRole;
44
47
  content: {
45
48
  type: string;
@@ -53,7 +56,9 @@ declare const MessageObjectSchema: Schema<any, mongoose.Model<any, any, any, any
53
56
  __v: number;
54
57
  }>;
55
58
  interface MessageDocument extends Document {
59
+ messageId: string;
56
60
  threadId: string;
61
+ userId: string;
57
62
  role: MessageRole;
58
63
  content: {
59
64
  type: string;
@@ -63,8 +68,6 @@ interface MessageDocument extends Document {
63
68
  metadata?: {
64
69
  [key: string]: unknown;
65
70
  };
66
- createdAt: Date;
67
- updatedAt: Date;
68
71
  }
69
72
  declare const MessageModel: mongoose.Model<MessageDocument, {}, {}, {}, Document<unknown, {}, MessageDocument, {}> & MessageDocument & Required<{
70
73
  _id: unknown;
@@ -20,6 +20,7 @@ declare const MessageContentObjectSchema: Schema<any, mongoose.Model<any, any, a
20
20
  declare const MessageObjectSchema: Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, {
21
21
  threadId: string;
22
22
  userId: string;
23
+ messageId: string;
23
24
  role: MessageRole;
24
25
  content: {
25
26
  type: string;
@@ -30,6 +31,7 @@ declare const MessageObjectSchema: Schema<any, mongoose.Model<any, any, any, any
30
31
  }, Document<unknown, {}, mongoose.FlatRecord<{
31
32
  threadId: string;
32
33
  userId: string;
34
+ messageId: string;
33
35
  role: MessageRole;
34
36
  content: {
35
37
  type: string;
@@ -40,6 +42,7 @@ declare const MessageObjectSchema: Schema<any, mongoose.Model<any, any, any, any
40
42
  }>, {}> & mongoose.FlatRecord<{
41
43
  threadId: string;
42
44
  userId: string;
45
+ messageId: string;
43
46
  role: MessageRole;
44
47
  content: {
45
48
  type: string;
@@ -53,7 +56,9 @@ declare const MessageObjectSchema: Schema<any, mongoose.Model<any, any, any, any
53
56
  __v: number;
54
57
  }>;
55
58
  interface MessageDocument extends Document {
59
+ messageId: string;
56
60
  threadId: string;
61
+ userId: string;
57
62
  role: MessageRole;
58
63
  content: {
59
64
  type: string;
@@ -63,8 +68,6 @@ interface MessageDocument extends Document {
63
68
  metadata?: {
64
69
  [key: string]: unknown;
65
70
  };
66
- createdAt: Date;
67
- updatedAt: Date;
68
71
  }
69
72
  declare const MessageModel: mongoose.Model<MessageDocument, {}, {}, {}, Document<unknown, {}, MessageDocument, {}> & MessageDocument & Required<{
70
73
  _id: unknown;
@@ -2,7 +2,7 @@ import {
2
2
  MessageContentObjectSchema,
3
3
  MessageModel,
4
4
  MessageObjectSchema
5
- } from "../chunk-MLPXPX2L.js";
5
+ } from "../chunk-5CCEN7NK.js";
6
6
  export {
7
7
  MessageContentObjectSchema,
8
8
  MessageModel,
@@ -1,4 +1,3 @@
1
- import { randomUUID } from "node:crypto";
2
1
  import type { MessageObject, ThreadMetadata, ThreadObject, ThreadType } from "@ainetwork/adk/types/memory";
3
2
  import { MessageRole } from "@ainetwork/adk/types/memory";
4
3
  import { IThreadMemory } from "@ainetwork/adk/modules";
@@ -28,16 +27,16 @@ export class MongoDBThread extends MongoDBMemory implements IThreadMemory {
28
27
  const threadObject: ThreadObject = {
29
28
  type: thread.type as ThreadType,
30
29
  title: thread.title || "New thread",
31
- messages: {}
30
+ messages: []
32
31
  };
33
32
  messages.forEach((message: MessageDocument) => {
34
- const messageId = message._id?.toString() || message.id;
35
- threadObject.messages[messageId] = {
33
+ threadObject.messages.push({
34
+ messageId: message.messageId,
36
35
  role: message.role as MessageRole,
37
36
  content: message.content,
38
37
  timestamp: message.timestamp,
39
38
  metadata: message.metadata,
40
- };
39
+ });
41
40
  });
42
41
 
43
42
  return threadObject;
@@ -66,25 +65,21 @@ export class MongoDBThread extends MongoDBMemory implements IThreadMemory {
66
65
  userId: string,
67
66
  threadId: string,
68
67
  messages: MessageObject[]
69
- ): Promise<string[]> {
68
+ ): Promise<void> {
70
69
  await ThreadModel.updateOne({ threadId, userId }, {
71
70
  updated_at: Date.now(),
72
71
  });
73
- const messageIds: string[] = [];
74
72
  for (const message of messages) {
75
- const newId = randomUUID();
76
73
  await MessageModel.create({
77
74
  threadId,
78
- messageId: newId,
75
+ messageId: message.messageId,
79
76
  userId,
80
77
  role: message.role,
81
78
  content: message.content,
82
79
  timestamp: message.timestamp,
83
80
  metadata: message.metadata,
84
81
  });
85
- messageIds.push(newId);
86
82
  }
87
- return messageIds;
88
83
  };
89
84
 
90
85
  public async deleteThread(userId: string, threadId: string): Promise<void> {
@@ -14,6 +14,11 @@ export const MessageContentObjectSchema = new Schema(
14
14
  // MessageObject schema - 개별 문서로 저장
15
15
  export const MessageObjectSchema = new Schema(
16
16
  {
17
+ messageId: {
18
+ type: String,
19
+ required: true,
20
+ index: true,
21
+ },
17
22
  threadId: {
18
23
  type: String,
19
24
  required: true,
@@ -46,7 +51,9 @@ export const MessageObjectSchema = new Schema(
46
51
 
47
52
  // Message Document interface
48
53
  export interface MessageDocument extends Document {
54
+ messageId: string;
49
55
  threadId: string;
56
+ userId: string;
50
57
  role: MessageRole;
51
58
  content: {
52
59
  type: string;
@@ -54,8 +61,6 @@ export interface MessageDocument extends Document {
54
61
  };
55
62
  timestamp: number;
56
63
  metadata?: { [key: string]: unknown };
57
- createdAt: Date;
58
- updatedAt: Date;
59
64
  }
60
65
 
61
66
  export const MessageModel = mongoose.model<MessageDocument>("Message", MessageObjectSchema);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ainetwork/adk-provider-memory-mongodb",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "author": "AI Network (https://ainetwork.ai)",
5
5
  "type": "module",
6
6
  "engines": {
@@ -28,7 +28,7 @@
28
28
  "clean": "rm -rf dist"
29
29
  },
30
30
  "dependencies": {
31
- "@ainetwork/adk": "^0.2.1",
31
+ "@ainetwork/adk": "^0.2.5",
32
32
  "mongoose": "^8.16.5"
33
33
  },
34
34
  "devDependencies": {
@@ -38,5 +38,5 @@
38
38
  "publishConfig": {
39
39
  "access": "public"
40
40
  },
41
- "gitHead": "caccd8175754d166971b8bd566644b3ac6598793"
41
+ "gitHead": "65f5c77dad2ba16ee695a88f9b1b3ca2a5a886a3"
42
42
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../models/messages.model.ts"],"sourcesContent":["import { MessageRole } from \"@ainetwork/adk/types/memory\";\nimport { type Document, Schema } from \"mongoose\";\nimport mongoose from \"mongoose\";\n\n// MessageContentObject schema\nexport const MessageContentObjectSchema = 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// MessageObject schema - 개별 문서로 저장\nexport const MessageObjectSchema = 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: MessageContentObjectSchema,\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// Message Document interface\nexport interface MessageDocument 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\nexport const MessageModel = mongoose.model<MessageDocument>(\"Message\", MessageObjectSchema);"],"mappings":";AAAA,SAAS,mBAAmB;AAC5B,SAAwB,cAAc;AACtC,OAAO,cAAc;AAGd,IAAM,6BAA6B,IAAI;AAAA,EAC7C;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,sBAAsB,IAAI;AAAA,EACtC;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;AAgBO,IAAM,eAAe,SAAS,MAAuB,WAAW,mBAAmB;","names":[]}