@t0ken.ai/memoryx-sdk 1.0.0

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.
@@ -0,0 +1,33 @@
1
+ import { FlushStrategy, QueueStats } from "./types";
2
+ import { APIClient } from "./client";
3
+ export declare function setDebug(enabled: boolean): void;
4
+ export declare function countTokens(text: string): number;
5
+ export declare class QueueManager {
6
+ private strategy;
7
+ private client;
8
+ private flushTimer;
9
+ private isFlushing;
10
+ private maxRetry;
11
+ private baseRetryDelayMs;
12
+ private getRetryDelay;
13
+ private currentConversationId;
14
+ private conversationCreatedAt;
15
+ private lastActivityAt;
16
+ constructor(client: APIClient, strategy?: FlushStrategy);
17
+ private generateConversationId;
18
+ getStrategy(): FlushStrategy;
19
+ setStrategy(strategy: FlushStrategy): void;
20
+ startTimers(): void;
21
+ stopTimers(): void;
22
+ addMemory(content: string, metadata?: Record<string, any>): Promise<number>;
23
+ addMessage(role: 'user' | 'assistant', content: string): Promise<number>;
24
+ startNewConversation(): void;
25
+ getQueueStats(): Promise<QueueStats>;
26
+ shouldFlush(stats: QueueStats): boolean;
27
+ flush(): Promise<void>;
28
+ private flushMemoryQueue;
29
+ private flushConversationQueue;
30
+ getMemoryQueueLength(): Promise<number>;
31
+ getConversationQueueLength(): Promise<number>;
32
+ }
33
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAA4B,MAAM,SAAS,CAAC;AAE9E,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAMrC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAE/C;AAsBD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMhD;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,gBAAgB,CAAgB;IAGxC,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,qBAAqB,CAAc;IAC3C,OAAO,CAAC,qBAAqB,CAAa;IAC1C,OAAO,CAAC,cAAc,CAAa;gBAEvB,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAE,aAAkB;IAU3D,OAAO,CAAC,sBAAsB;IAI9B,WAAW,IAAI,aAAa;IAI5B,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAK1C,WAAW,IAAI,IAAI;IAkCnB,UAAU,IAAI,IAAI;IAQZ,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAe/E,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmC9E,oBAAoB,IAAI,IAAI;IAYtB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAyB1C,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IA2BjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAwBd,gBAAgB;YAsChB,sBAAsB;IAwD9B,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIvC,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC;CAGpD"}
package/dist/queue.js ADDED
@@ -0,0 +1,309 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QueueManager = void 0;
4
+ exports.setDebug = setDebug;
5
+ exports.countTokens = countTokens;
6
+ const storage_1 = require("./storage");
7
+ const js_tiktoken_1 = require("js-tiktoken");
8
+ let tokenizer = null;
9
+ let DEBUG = false;
10
+ function setDebug(enabled) {
11
+ DEBUG = enabled;
12
+ }
13
+ function log(level, message, data) {
14
+ const timestamp = new Date().toISOString();
15
+ const prefix = `[${timestamp}] [MemoryX:${level}]`;
16
+ if (level === 'DEBUG' && !DEBUG)
17
+ return;
18
+ if (data !== undefined) {
19
+ console.log(prefix, message, typeof data === 'object' ? JSON.stringify(data, null, 2) : data);
20
+ }
21
+ else {
22
+ console.log(prefix, message);
23
+ }
24
+ }
25
+ function getTokenizer() {
26
+ if (!tokenizer) {
27
+ tokenizer = (0, js_tiktoken_1.getEncoding)("cl100k_base");
28
+ }
29
+ return tokenizer;
30
+ }
31
+ function countTokens(text) {
32
+ try {
33
+ return getTokenizer().encode(text).length;
34
+ }
35
+ catch {
36
+ return Math.ceil(text.length / 4);
37
+ }
38
+ }
39
+ class QueueManager {
40
+ // 计算指数退避延迟
41
+ getRetryDelay(retryCount) {
42
+ // 指数退避: 1s, 2s, 4s, 8s, 16s,最大 60s
43
+ const delay = Math.min(this.baseRetryDelayMs * Math.pow(2, retryCount), 60000);
44
+ // 添加随机抖动 (±20%)
45
+ const jitter = delay * 0.2 * (Math.random() - 0.5);
46
+ return Math.floor(delay + jitter);
47
+ }
48
+ constructor(client, strategy = {}) {
49
+ this.flushTimer = null;
50
+ this.isFlushing = false;
51
+ this.maxRetry = 5;
52
+ this.baseRetryDelayMs = 1000; // 1秒基础延迟
53
+ this.currentConversationId = "";
54
+ this.conversationCreatedAt = 0;
55
+ this.lastActivityAt = 0;
56
+ this.client = client;
57
+ this.strategy = strategy;
58
+ this.currentConversationId = this.generateConversationId();
59
+ this.conversationCreatedAt = Math.floor(Date.now() / 1000);
60
+ this.lastActivityAt = Date.now();
61
+ log('INFO', 'QueueManager initialized', { strategy });
62
+ }
63
+ generateConversationId() {
64
+ return `conv_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
65
+ }
66
+ getStrategy() {
67
+ return this.strategy;
68
+ }
69
+ setStrategy(strategy) {
70
+ log('INFO', 'Strategy updated', strategy);
71
+ this.strategy = strategy;
72
+ }
73
+ startTimers() {
74
+ if (this.flushTimer) {
75
+ clearInterval(this.flushTimer);
76
+ }
77
+ const idleTimeout = this.strategy.intervalMs || 5 * 60 * 1000;
78
+ const checkInterval = Math.min(idleTimeout / 10, 30000);
79
+ log('INFO', `Starting idle check timer`, {
80
+ idleTimeout,
81
+ checkInterval,
82
+ maxTokens: this.strategy.maxTokens
83
+ });
84
+ this.flushTimer = setInterval(async () => {
85
+ if (this.lastActivityAt === 0)
86
+ return;
87
+ const idleTime = Date.now() - this.lastActivityAt;
88
+ if (idleTime >= idleTimeout) {
89
+ const stats = await this.getQueueStats();
90
+ if (stats.messageCount > 0) {
91
+ log('INFO', `Idle timeout reached, triggering flush`, {
92
+ idleTime: Math.floor(idleTime / 1000) + 's',
93
+ messageCount: stats.messageCount,
94
+ totalTokens: stats.totalTokens
95
+ });
96
+ this.startNewConversation();
97
+ this.flush().catch(() => { });
98
+ }
99
+ }
100
+ }, checkInterval);
101
+ }
102
+ stopTimers() {
103
+ if (this.flushTimer) {
104
+ log('INFO', 'Stopping flush timer');
105
+ clearInterval(this.flushTimer);
106
+ this.flushTimer = null;
107
+ }
108
+ }
109
+ async addMemory(content, metadata = {}) {
110
+ log('DEBUG', 'Adding memory', { content: content.substring(0, 50) + '...', metadata });
111
+ const id = await storage_1.SQLiteStorage.addToMemoryQueue(content, metadata);
112
+ log('INFO', `Memory added to queue`, { id, content: content.substring(0, 30) + '...' });
113
+ const queueLength = await storage_1.SQLiteStorage.getMemoryQueueLength();
114
+ if (this.strategy.batchSize && queueLength >= this.strategy.batchSize) {
115
+ log('INFO', `Batch size reached (${queueLength}/${this.strategy.batchSize}), triggering flush`);
116
+ setImmediate(() => this.flush().catch(() => { }));
117
+ }
118
+ return id;
119
+ }
120
+ async addMessage(role, content) {
121
+ log('DEBUG', 'Adding message', { role, conversationId: this.currentConversationId, content: content.substring(0, 50) + '...' });
122
+ const id = await storage_1.SQLiteStorage.addToConversationQueue(this.currentConversationId, this.conversationCreatedAt, role, content);
123
+ this.lastActivityAt = Date.now();
124
+ const stats = await this.getQueueStats();
125
+ log('INFO', `Message added`, {
126
+ id,
127
+ role,
128
+ conversationId: this.currentConversationId,
129
+ messageCount: stats.messageCount,
130
+ rounds: stats.rounds,
131
+ totalTokens: stats.totalTokens
132
+ });
133
+ if (this.shouldFlush(stats)) {
134
+ log('INFO', `Flush triggered by strategy`, {
135
+ rounds: stats.rounds,
136
+ messageCount: stats.messageCount,
137
+ strategy: this.strategy
138
+ });
139
+ this.startNewConversation();
140
+ setImmediate(() => this.flush().catch(() => { }));
141
+ }
142
+ return id;
143
+ }
144
+ startNewConversation() {
145
+ const oldId = this.currentConversationId;
146
+ this.currentConversationId = this.generateConversationId();
147
+ this.conversationCreatedAt = Math.floor(Date.now() / 1000);
148
+ this.lastActivityAt = Date.now();
149
+ log('INFO', `Started new conversation`, {
150
+ oldConversationId: oldId,
151
+ newConversationId: this.currentConversationId
152
+ });
153
+ }
154
+ async getQueueStats() {
155
+ const stats = await storage_1.SQLiteStorage.getConversationStats(this.currentConversationId);
156
+ const db = await (0, storage_1.getDb)();
157
+ const rows = db.prepare(`
158
+ SELECT content FROM conversation_queue
159
+ WHERE conversation_id = ?
160
+ `).all(this.currentConversationId);
161
+ let totalTokens = 0;
162
+ for (const row of rows) {
163
+ totalTokens += countTokens(row.content);
164
+ }
165
+ const idleTime = this.lastActivityAt > 0 ? Date.now() - this.lastActivityAt : 0;
166
+ return {
167
+ messageCount: stats.count,
168
+ rounds: stats.rounds,
169
+ totalTokens,
170
+ oldestMessageAge: idleTime,
171
+ conversationId: this.currentConversationId
172
+ };
173
+ }
174
+ shouldFlush(stats) {
175
+ if (this.strategy.customTrigger) {
176
+ const result = this.strategy.customTrigger(stats);
177
+ if (result) {
178
+ log('DEBUG', 'Custom trigger returned true', stats);
179
+ }
180
+ return result;
181
+ }
182
+ if (this.strategy.rounds && stats.rounds >= this.strategy.rounds) {
183
+ log('DEBUG', `Rounds threshold reached: ${stats.rounds}/${this.strategy.rounds}`);
184
+ return true;
185
+ }
186
+ if (this.strategy.batchSize && stats.messageCount >= this.strategy.batchSize) {
187
+ log('DEBUG', `Batch size reached: ${stats.messageCount}/${this.strategy.batchSize}`);
188
+ return true;
189
+ }
190
+ if (this.strategy.maxTokens && stats.totalTokens >= this.strategy.maxTokens) {
191
+ log('DEBUG', `Max tokens reached: ${stats.totalTokens}/${this.strategy.maxTokens}`);
192
+ return true;
193
+ }
194
+ return false;
195
+ }
196
+ async flush() {
197
+ if (this.isFlushing) {
198
+ log('DEBUG', 'Flush already in progress, skipping');
199
+ return;
200
+ }
201
+ if (!this.client.getApiKey()) {
202
+ log('DEBUG', 'No API key, skipping flush');
203
+ return;
204
+ }
205
+ this.isFlushing = true;
206
+ log('INFO', 'Starting flush');
207
+ try {
208
+ await this.flushMemoryQueue();
209
+ await this.flushConversationQueue();
210
+ log('INFO', 'Flush completed successfully');
211
+ }
212
+ catch (e) {
213
+ log('ERROR', 'Flush failed', e.message);
214
+ }
215
+ finally {
216
+ this.isFlushing = false;
217
+ }
218
+ }
219
+ async flushMemoryQueue() {
220
+ // 先将超重试次数的数据移到死信队列
221
+ const itemsToMove = await storage_1.SQLiteStorage.getMemoryQueueItemsExceedingRetry(this.maxRetry);
222
+ for (const item of itemsToMove) {
223
+ log('ERROR', `Memory item ${item.id} exceeded max retry (${item.retry_count}), moving to dead letter queue`);
224
+ await storage_1.SQLiteStorage.moveMemoryToDeadLetterQueue(item.id, 'memory');
225
+ }
226
+ await storage_1.SQLiteStorage.deleteOldMemoryRetries(this.maxRetry);
227
+ const items = await storage_1.SQLiteStorage.getMemoryQueueItems(100);
228
+ if (items.length === 0) {
229
+ log('DEBUG', 'Memory queue is empty');
230
+ return;
231
+ }
232
+ log('INFO', `Flushing ${items.length} memory items`);
233
+ const memories = items.map(item => ({
234
+ content: item.content,
235
+ metadata: JSON.parse(item.metadata)
236
+ }));
237
+ const ids = items.map(item => item.id);
238
+ try {
239
+ await this.client.sendMemories(memories);
240
+ await storage_1.SQLiteStorage.deleteMemoryItems(ids);
241
+ log('INFO', `Successfully sent ${memories.length} memories`);
242
+ }
243
+ catch (e) {
244
+ await storage_1.SQLiteStorage.incrementMemoryRetry(ids);
245
+ log('WARN', `Failed to send memories, incremented retry count for ${ids.length} items`, {
246
+ error: e.message,
247
+ retryCounts: items.map(i => ({ id: i.id, retry: i.retry_count + 1 }))
248
+ });
249
+ throw e;
250
+ }
251
+ }
252
+ async flushConversationQueue() {
253
+ await storage_1.SQLiteStorage.clearOldConversations();
254
+ const nextConv = await storage_1.SQLiteStorage.getNextConversation();
255
+ if (!nextConv) {
256
+ log('DEBUG', 'No conversations to flush');
257
+ return;
258
+ }
259
+ const { conversationId } = nextConv;
260
+ const maxRetry = await storage_1.SQLiteStorage.getConversationMaxRetry(conversationId);
261
+ if (maxRetry >= this.maxRetry) {
262
+ log('ERROR', `Conversation ${conversationId} exceeded max retry (${maxRetry}), moving to dead letter queue`);
263
+ await storage_1.SQLiteStorage.moveToDeadLetterQueue(conversationId, 'conversation');
264
+ await storage_1.SQLiteStorage.deleteConversation(conversationId);
265
+ return;
266
+ }
267
+ const messages = await storage_1.SQLiteStorage.getConversationMessages(conversationId);
268
+ if (messages.length === 0) {
269
+ log('DEBUG', `Conversation ${conversationId} has no messages, deleting`);
270
+ await storage_1.SQLiteStorage.deleteConversation(conversationId);
271
+ return;
272
+ }
273
+ log('INFO', `Flushing conversation ${conversationId}`, {
274
+ messageCount: messages.length,
275
+ maxRetry,
276
+ messages: messages.map(m => ({ role: m.role, content: m.content.substring(0, 20) + '...' }))
277
+ });
278
+ const formattedMessages = messages.map(m => ({
279
+ role: m.role,
280
+ content: m.content,
281
+ timestamp: m.timestamp,
282
+ tokens: countTokens(m.content)
283
+ }));
284
+ try {
285
+ await this.client.sendConversation(conversationId, formattedMessages);
286
+ await storage_1.SQLiteStorage.deleteConversation(conversationId);
287
+ log('INFO', `Successfully sent conversation ${conversationId} with ${messages.length} messages`);
288
+ }
289
+ catch (e) {
290
+ await storage_1.SQLiteStorage.incrementConversationRetry(conversationId);
291
+ const newRetryCount = maxRetry + 1;
292
+ const delayMs = this.getRetryDelay(newRetryCount);
293
+ log('WARN', `Failed to send conversation ${conversationId}, retry ${newRetryCount}`, {
294
+ error: e.message,
295
+ nextRetryDelayMs: delayMs
296
+ });
297
+ // 不立即抛出异常,让下次 flush 在延迟后重试
298
+ // throw e; // 移除立即抛出,让队列继续处理其他会话
299
+ }
300
+ }
301
+ async getMemoryQueueLength() {
302
+ return storage_1.SQLiteStorage.getMemoryQueueLength();
303
+ }
304
+ async getConversationQueueLength() {
305
+ return storage_1.SQLiteStorage.getConversationQueueLength();
306
+ }
307
+ }
308
+ exports.QueueManager = QueueManager;
309
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ export declare function setStorageDir(dir: string): void;
2
+ export declare function getStorageDir(): string;
3
+ export declare function getDb(): Promise<any>;
4
+ export declare class SQLiteStorage {
5
+ static loadConfig(): Promise<Record<string, any> | null>;
6
+ static saveConfig(config: Record<string, any>): Promise<void>;
7
+ static addToMemoryQueue(content: string, metadata?: Record<string, any>): Promise<number>;
8
+ static getMemoryQueueItems(limit?: number): Promise<Array<{
9
+ id: number;
10
+ content: string;
11
+ metadata: string;
12
+ timestamp: number;
13
+ retry_count: number;
14
+ }>>;
15
+ static deleteMemoryItems(ids: number[]): Promise<void>;
16
+ static incrementMemoryRetry(ids: number[]): Promise<void>;
17
+ static deleteOldMemoryRetries(maxRetry?: number, maxAgeSeconds?: number): Promise<void>;
18
+ static getMemoryQueueLength(): Promise<number>;
19
+ static getMemoryQueueItemsExceedingRetry(maxRetry: number): Promise<Array<{
20
+ id: number;
21
+ content: string;
22
+ metadata: string;
23
+ retry_count: number;
24
+ }>>;
25
+ static moveMemoryToDeadLetterQueue(id: number, queueType?: string, errorMessage?: string): Promise<void>;
26
+ static addToConversationQueue(conversationId: string, conversationCreatedAt: number, role: string, content: string): Promise<number>;
27
+ static getConversationStats(conversationId: string): Promise<{
28
+ count: number;
29
+ rounds: number;
30
+ }>;
31
+ static getConversationMessages(conversationId: string): Promise<Array<{
32
+ id: number;
33
+ role: string;
34
+ content: string;
35
+ timestamp: number;
36
+ retry_count: number;
37
+ }>>;
38
+ static getNextConversation(): Promise<{
39
+ conversationId: string;
40
+ conversationCreatedAt: number;
41
+ } | null>;
42
+ static deleteConversation(conversationId: string): Promise<void>;
43
+ static incrementConversationRetry(conversationId: string): Promise<void>;
44
+ static getConversationMaxRetry(conversationId: string): Promise<number>;
45
+ static clearOldConversations(maxAgeSeconds?: number): Promise<void>;
46
+ static getConversationQueueLength(): Promise<number>;
47
+ static getOldestMessageAge(conversationId: string): Promise<number>;
48
+ static moveToDeadLetterQueue(conversationId: string, queueType?: string, errorMessage?: string): Promise<void>;
49
+ static getDeadLetterQueueItems(limit?: number): Promise<Array<{
50
+ id: number;
51
+ queue_type: string;
52
+ conversation_id: string;
53
+ data: string;
54
+ retry_count: number;
55
+ error_message: string;
56
+ created_at: number;
57
+ }>>;
58
+ static getDeadLetterQueueCount(): Promise<number>;
59
+ static deleteDeadLetterItem(id: number): Promise<void>;
60
+ static clearDeadLetterQueue(maxAgeSeconds?: number): Promise<void>;
61
+ }
62
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}