@cogitator-ai/openai-compat 9.0.0 → 10.0.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.
@@ -0,0 +1,370 @@
1
+ /**
2
+ * In-memory storage implementation (default, non-persistent).
3
+ *
4
+ * Data is lost when the process restarts.
5
+ */
6
+ export class InMemoryThreadStorage {
7
+ threads = new Map();
8
+ assistants = new Map();
9
+ files = new Map();
10
+ async saveThread(id, thread) {
11
+ this.threads.set(id, thread);
12
+ }
13
+ async loadThread(id) {
14
+ return this.threads.get(id) ?? null;
15
+ }
16
+ async deleteThread(id) {
17
+ return this.threads.delete(id);
18
+ }
19
+ async listThreads() {
20
+ return Array.from(this.threads.values());
21
+ }
22
+ async saveAssistant(id, assistant) {
23
+ this.assistants.set(id, assistant);
24
+ }
25
+ async loadAssistant(id) {
26
+ return this.assistants.get(id) ?? null;
27
+ }
28
+ async deleteAssistant(id) {
29
+ return this.assistants.delete(id);
30
+ }
31
+ async listAssistants() {
32
+ return Array.from(this.assistants.values());
33
+ }
34
+ async saveFile(id, file) {
35
+ this.files.set(id, file);
36
+ }
37
+ async loadFile(id) {
38
+ return this.files.get(id) ?? null;
39
+ }
40
+ async deleteFile(id) {
41
+ return this.files.delete(id);
42
+ }
43
+ async listFiles() {
44
+ return Array.from(this.files.values());
45
+ }
46
+ }
47
+ /**
48
+ * Redis storage implementation for ThreadManager.
49
+ *
50
+ * Requires ioredis to be installed as a peer dependency.
51
+ *
52
+ * @example
53
+ * ```ts
54
+ * const storage = new RedisThreadStorage({
55
+ * url: 'redis://localhost:6379',
56
+ * keyPrefix: 'openai:',
57
+ * ttl: 86400,
58
+ * });
59
+ * await storage.connect();
60
+ *
61
+ * const manager = new ThreadManager(storage);
62
+ * ```
63
+ */
64
+ export class RedisThreadStorage {
65
+ client = null;
66
+ config;
67
+ keyPrefix;
68
+ ttl;
69
+ constructor(config = {}) {
70
+ this.config = config;
71
+ this.keyPrefix = config.keyPrefix ?? 'cogitator:openai:';
72
+ this.ttl = config.ttl ?? 86400;
73
+ }
74
+ async connect() {
75
+ try {
76
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
77
+ const Redis = require('ioredis');
78
+ this.client = new Redis(this.config.url ?? {
79
+ host: this.config.host ?? 'localhost',
80
+ port: this.config.port ?? 6379,
81
+ });
82
+ }
83
+ catch {
84
+ throw new Error('ioredis is required for RedisThreadStorage. Install it with: npm install ioredis');
85
+ }
86
+ }
87
+ async disconnect() {
88
+ await this.client?.quit();
89
+ this.client = null;
90
+ }
91
+ ensureClient() {
92
+ if (!this.client) {
93
+ throw new Error('RedisThreadStorage not connected. Call connect() first.');
94
+ }
95
+ return this.client;
96
+ }
97
+ key(type, id) {
98
+ return `${this.keyPrefix}${type}:${id}`;
99
+ }
100
+ async saveThread(id, thread) {
101
+ const client = this.ensureClient();
102
+ await client.set(this.key('thread', id), JSON.stringify(thread), 'EX', this.ttl);
103
+ }
104
+ async loadThread(id) {
105
+ const client = this.ensureClient();
106
+ const data = await client.get(this.key('thread', id));
107
+ return data ? JSON.parse(data) : null;
108
+ }
109
+ async deleteThread(id) {
110
+ const client = this.ensureClient();
111
+ const deleted = await client.del(this.key('thread', id));
112
+ return deleted > 0;
113
+ }
114
+ async listThreads() {
115
+ const client = this.ensureClient();
116
+ const keys = await client.keys(`${this.keyPrefix}thread:*`);
117
+ const threads = [];
118
+ for (const key of keys) {
119
+ const data = await client.get(key);
120
+ if (data)
121
+ threads.push(JSON.parse(data));
122
+ }
123
+ return threads;
124
+ }
125
+ async saveAssistant(id, assistant) {
126
+ const client = this.ensureClient();
127
+ await client.set(this.key('assistant', id), JSON.stringify(assistant), 'EX', this.ttl);
128
+ }
129
+ async loadAssistant(id) {
130
+ const client = this.ensureClient();
131
+ const data = await client.get(this.key('assistant', id));
132
+ return data ? JSON.parse(data) : null;
133
+ }
134
+ async deleteAssistant(id) {
135
+ const client = this.ensureClient();
136
+ const deleted = await client.del(this.key('assistant', id));
137
+ return deleted > 0;
138
+ }
139
+ async listAssistants() {
140
+ const client = this.ensureClient();
141
+ const keys = await client.keys(`${this.keyPrefix}assistant:*`);
142
+ const assistants = [];
143
+ for (const key of keys) {
144
+ const data = await client.get(key);
145
+ if (data)
146
+ assistants.push(JSON.parse(data));
147
+ }
148
+ return assistants;
149
+ }
150
+ async saveFile(id, file) {
151
+ const client = this.ensureClient();
152
+ const serialized = {
153
+ ...file,
154
+ content: file.content.toString('base64'),
155
+ };
156
+ await client.set(this.key('file', id), JSON.stringify(serialized), 'EX', this.ttl);
157
+ }
158
+ async loadFile(id) {
159
+ const client = this.ensureClient();
160
+ const data = await client.get(this.key('file', id));
161
+ if (!data)
162
+ return null;
163
+ const parsed = JSON.parse(data);
164
+ return {
165
+ ...parsed,
166
+ content: Buffer.from(parsed.content, 'base64'),
167
+ };
168
+ }
169
+ async deleteFile(id) {
170
+ const client = this.ensureClient();
171
+ const deleted = await client.del(this.key('file', id));
172
+ return deleted > 0;
173
+ }
174
+ async listFiles() {
175
+ const client = this.ensureClient();
176
+ const keys = await client.keys(`${this.keyPrefix}file:*`);
177
+ const files = [];
178
+ for (const key of keys) {
179
+ const data = await client.get(key);
180
+ if (data) {
181
+ const parsed = JSON.parse(data);
182
+ files.push({
183
+ ...parsed,
184
+ content: Buffer.from(parsed.content, 'base64'),
185
+ });
186
+ }
187
+ }
188
+ return files;
189
+ }
190
+ }
191
+ /**
192
+ * PostgreSQL storage implementation for ThreadManager.
193
+ *
194
+ * Requires pg to be installed as a peer dependency.
195
+ * Automatically creates required tables on first connect.
196
+ *
197
+ * @example
198
+ * ```ts
199
+ * const storage = new PostgresThreadStorage({
200
+ * connectionString: 'postgresql://user:pass@localhost/db',
201
+ * tableName: 'openai_threads',
202
+ * });
203
+ * await storage.connect();
204
+ *
205
+ * const manager = new ThreadManager(storage);
206
+ * ```
207
+ */
208
+ export class PostgresThreadStorage {
209
+ pool = null;
210
+ config;
211
+ schema;
212
+ tableName;
213
+ constructor(config) {
214
+ this.config = config;
215
+ this.schema = config.schema ?? 'public';
216
+ this.tableName = config.tableName ?? 'openai_compat_data';
217
+ }
218
+ async connect() {
219
+ try {
220
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
221
+ const { Pool } = require('pg');
222
+ this.pool = new Pool({ connectionString: this.config.connectionString });
223
+ await this.pool.query(`
224
+ CREATE TABLE IF NOT EXISTS ${this.schema}.${this.tableName} (
225
+ type TEXT NOT NULL,
226
+ id TEXT NOT NULL,
227
+ data JSONB NOT NULL,
228
+ created_at TIMESTAMPTZ DEFAULT NOW(),
229
+ updated_at TIMESTAMPTZ DEFAULT NOW(),
230
+ PRIMARY KEY (type, id)
231
+ )
232
+ `);
233
+ await this.pool.query(`
234
+ CREATE INDEX IF NOT EXISTS idx_${this.tableName}_type
235
+ ON ${this.schema}.${this.tableName}(type)
236
+ `);
237
+ }
238
+ catch (err) {
239
+ if (err instanceof Error && err.message.includes('Cannot find module')) {
240
+ throw new Error('pg is required for PostgresThreadStorage. Install it with: npm install pg');
241
+ }
242
+ throw err;
243
+ }
244
+ }
245
+ async disconnect() {
246
+ await this.pool?.end();
247
+ this.pool = null;
248
+ }
249
+ ensurePool() {
250
+ if (!this.pool) {
251
+ throw new Error('PostgresThreadStorage not connected. Call connect() first.');
252
+ }
253
+ return this.pool;
254
+ }
255
+ async saveThread(id, thread) {
256
+ const pool = this.ensurePool();
257
+ await pool.query(`INSERT INTO ${this.schema}.${this.tableName} (type, id, data)
258
+ VALUES ('thread', $1, $2)
259
+ ON CONFLICT (type, id) DO UPDATE SET data = $2, updated_at = NOW()`, [id, JSON.stringify(thread)]);
260
+ }
261
+ async loadThread(id) {
262
+ const pool = this.ensurePool();
263
+ const result = await pool.query(`SELECT data FROM ${this.schema}.${this.tableName} WHERE type = 'thread' AND id = $1`, [id]);
264
+ return result.rows[0]?.data ?? null;
265
+ }
266
+ async deleteThread(id) {
267
+ const pool = this.ensurePool();
268
+ const result = await pool.query(`DELETE FROM ${this.schema}.${this.tableName} WHERE type = 'thread' AND id = $1`, [id]);
269
+ return result.rowCount > 0;
270
+ }
271
+ async listThreads() {
272
+ const pool = this.ensurePool();
273
+ const result = await pool.query(`SELECT data FROM ${this.schema}.${this.tableName} WHERE type = 'thread'`);
274
+ return result.rows.map((r) => r.data);
275
+ }
276
+ async saveAssistant(id, assistant) {
277
+ const pool = this.ensurePool();
278
+ await pool.query(`INSERT INTO ${this.schema}.${this.tableName} (type, id, data)
279
+ VALUES ('assistant', $1, $2)
280
+ ON CONFLICT (type, id) DO UPDATE SET data = $2, updated_at = NOW()`, [id, JSON.stringify(assistant)]);
281
+ }
282
+ async loadAssistant(id) {
283
+ const pool = this.ensurePool();
284
+ const result = await pool.query(`SELECT data FROM ${this.schema}.${this.tableName} WHERE type = 'assistant' AND id = $1`, [id]);
285
+ return result.rows[0]?.data ?? null;
286
+ }
287
+ async deleteAssistant(id) {
288
+ const pool = this.ensurePool();
289
+ const result = await pool.query(`DELETE FROM ${this.schema}.${this.tableName} WHERE type = 'assistant' AND id = $1`, [id]);
290
+ return result.rowCount > 0;
291
+ }
292
+ async listAssistants() {
293
+ const pool = this.ensurePool();
294
+ const result = await pool.query(`SELECT data FROM ${this.schema}.${this.tableName} WHERE type = 'assistant'`);
295
+ return result.rows.map((r) => r.data);
296
+ }
297
+ async saveFile(id, file) {
298
+ const pool = this.ensurePool();
299
+ const serialized = {
300
+ ...file,
301
+ content: file.content.toString('base64'),
302
+ };
303
+ await pool.query(`INSERT INTO ${this.schema}.${this.tableName} (type, id, data)
304
+ VALUES ('file', $1, $2)
305
+ ON CONFLICT (type, id) DO UPDATE SET data = $2, updated_at = NOW()`, [id, JSON.stringify(serialized)]);
306
+ }
307
+ async loadFile(id) {
308
+ const pool = this.ensurePool();
309
+ const result = await pool.query(`SELECT data FROM ${this.schema}.${this.tableName} WHERE type = 'file' AND id = $1`, [id]);
310
+ if (!result.rows[0])
311
+ return null;
312
+ const parsed = result.rows[0].data;
313
+ return {
314
+ ...parsed,
315
+ content: Buffer.from(parsed.content, 'base64'),
316
+ };
317
+ }
318
+ async deleteFile(id) {
319
+ const pool = this.ensurePool();
320
+ const result = await pool.query(`DELETE FROM ${this.schema}.${this.tableName} WHERE type = 'file' AND id = $1`, [id]);
321
+ return result.rowCount > 0;
322
+ }
323
+ async listFiles() {
324
+ const pool = this.ensurePool();
325
+ const result = await pool.query(`SELECT data FROM ${this.schema}.${this.tableName} WHERE type = 'file'`);
326
+ return result.rows.map((r) => ({
327
+ ...r.data,
328
+ content: Buffer.from(r.data.content, 'base64'),
329
+ }));
330
+ }
331
+ }
332
+ /**
333
+ * Create a thread storage based on configuration.
334
+ *
335
+ * @param config - Storage configuration
336
+ * @returns Configured storage instance (not connected - call connect() if needed)
337
+ *
338
+ * @example
339
+ * ```ts
340
+ * // In-memory (default)
341
+ * const storage = createThreadStorage();
342
+ *
343
+ * // Redis
344
+ * const storage = createThreadStorage({
345
+ * type: 'redis',
346
+ * url: 'redis://localhost:6379',
347
+ * });
348
+ * await storage.connect();
349
+ *
350
+ * // PostgreSQL
351
+ * const storage = createThreadStorage({
352
+ * type: 'postgres',
353
+ * connectionString: 'postgresql://...',
354
+ * });
355
+ * await storage.connect();
356
+ * ```
357
+ */
358
+ export function createThreadStorage(config) {
359
+ if (!config || config.type === 'memory') {
360
+ return new InMemoryThreadStorage();
361
+ }
362
+ if (config.type === 'redis') {
363
+ return new RedisThreadStorage(config);
364
+ }
365
+ if (config.type === 'postgres') {
366
+ return new PostgresThreadStorage(config);
367
+ }
368
+ return new InMemoryThreadStorage();
369
+ }
370
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/client/storage.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,5 @@
1
- /**
2
- * Thread Manager
3
- *
4
- * Manages the mapping between OpenAI threads and Cogitator internal state.
5
- */
6
1
  import type { Thread, Message, CreateMessageRequest, AssistantTool } from '../types/openai-types';
2
+ import { type ThreadStorage } from './storage';
7
3
  export interface StoredThread {
8
4
  thread: Thread;
9
5
  messages: Message[];
@@ -19,14 +15,41 @@ export interface StoredAssistant {
19
15
  created_at: number;
20
16
  }
21
17
  /**
22
- * Manages threads, messages, and assistants in memory
18
+ * Manages threads, messages, and assistants with pluggable storage.
19
+ *
20
+ * By default uses in-memory storage. For production, use Redis or PostgreSQL.
21
+ *
22
+ * @example In-memory (default)
23
+ * ```ts
24
+ * const manager = new ThreadManager();
25
+ * ```
26
+ *
27
+ * @example Redis persistence
28
+ * ```ts
29
+ * import { RedisThreadStorage, ThreadManager } from '@cogitator-ai/openai-compat';
30
+ *
31
+ * const storage = new RedisThreadStorage({ url: 'redis://localhost:6379' });
32
+ * await storage.connect();
33
+ *
34
+ * const manager = new ThreadManager(storage);
35
+ * ```
36
+ *
37
+ * @example PostgreSQL persistence
38
+ * ```ts
39
+ * import { PostgresThreadStorage, ThreadManager } from '@cogitator-ai/openai-compat';
40
+ *
41
+ * const storage = new PostgresThreadStorage({
42
+ * connectionString: 'postgresql://user:pass@localhost/db',
43
+ * });
44
+ * await storage.connect();
23
45
  *
24
- * In production, this should be backed by a database
46
+ * const manager = new ThreadManager(storage);
47
+ * ```
25
48
  */
26
49
  export declare class ThreadManager {
27
- private threads;
28
- private assistants;
29
- private files;
50
+ private storage;
51
+ private cache;
52
+ constructor(storage?: ThreadStorage);
30
53
  createAssistant(params: {
31
54
  model: string;
32
55
  name?: string;
@@ -34,52 +57,53 @@ export declare class ThreadManager {
34
57
  tools?: AssistantTool[];
35
58
  metadata?: Record<string, string>;
36
59
  temperature?: number;
37
- }): StoredAssistant;
38
- getAssistant(id: string): StoredAssistant | undefined;
39
- updateAssistant(id: string, updates: Partial<Omit<StoredAssistant, 'id' | 'created_at'>>): StoredAssistant | undefined;
40
- deleteAssistant(id: string): boolean;
41
- listAssistants(): StoredAssistant[];
42
- createThread(metadata?: Record<string, string>): Thread;
43
- getThread(id: string): Thread | undefined;
44
- deleteThread(id: string): boolean;
45
- addMessage(threadId: string, request: CreateMessageRequest): Message | undefined;
46
- getMessage(threadId: string, messageId: string): Message | undefined;
60
+ }): Promise<StoredAssistant>;
61
+ getAssistant(id: string): Promise<StoredAssistant | undefined>;
62
+ updateAssistant(id: string, updates: Partial<Omit<StoredAssistant, 'id' | 'created_at'>>): Promise<StoredAssistant | undefined>;
63
+ deleteAssistant(id: string): Promise<boolean>;
64
+ listAssistants(): Promise<StoredAssistant[]>;
65
+ createThread(metadata?: Record<string, string>): Promise<Thread>;
66
+ getThread(id: string): Promise<Thread | undefined>;
67
+ private getStoredThread;
68
+ deleteThread(id: string): Promise<boolean>;
69
+ addMessage(threadId: string, request: CreateMessageRequest): Promise<Message | undefined>;
70
+ getMessage(threadId: string, messageId: string): Promise<Message | undefined>;
47
71
  listMessages(threadId: string, options?: {
48
72
  limit?: number;
49
73
  order?: 'asc' | 'desc';
50
74
  after?: string;
51
75
  before?: string;
52
76
  run_id?: string;
53
- }): Message[];
77
+ }): Promise<Message[]>;
54
78
  /**
55
79
  * Get messages in Cogitator format for LLM calls
56
80
  */
57
- getMessagesForLLM(threadId: string): {
81
+ getMessagesForLLM(threadId: string): Promise<{
58
82
  role: 'user' | 'assistant';
59
83
  content: string;
60
- }[];
84
+ }[]>;
61
85
  /**
62
86
  * Add an assistant message (from LLM response)
63
87
  */
64
- addAssistantMessage(threadId: string, content: string, assistantId: string, runId: string): Message | undefined;
65
- addFile(content: Buffer, filename: string): {
88
+ addAssistantMessage(threadId: string, content: string, assistantId: string, runId: string): Promise<Message | undefined>;
89
+ addFile(content: Buffer, filename: string): Promise<{
66
90
  id: string;
67
91
  filename: string;
68
92
  created_at: number;
69
- };
70
- getFile(id: string): {
93
+ }>;
94
+ getFile(id: string): Promise<{
71
95
  id: string;
72
96
  content: Buffer;
73
97
  filename: string;
74
98
  created_at: number;
75
- } | undefined;
76
- deleteFile(id: string): boolean;
77
- listFiles(): {
99
+ } | undefined>;
100
+ deleteFile(id: string): Promise<boolean>;
101
+ listFiles(): Promise<{
78
102
  id: string;
79
103
  content: Buffer;
80
104
  filename: string;
81
105
  created_at: number;
82
- }[];
106
+ }[]>;
83
107
  private normalizeContent;
84
108
  private extractTextContent;
85
109
  }
@@ -1 +1 @@
1
- {"version":3,"file":"thread-manager.d.ts","sourceRoot":"","sources":["../../src/client/thread-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"thread-manager.d.ts","sourceRoot":"","sources":["../../src/client/thread-manager.ts"],"names":[],"mappings":"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"}