@cogitator-ai/openai-compat 9.0.0 → 10.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.
- package/README.md +333 -30
- package/dist/client/openai-adapter.d.ts +23 -12
- package/dist/client/openai-adapter.d.ts.map +1 -1
- package/dist/client/openai-adapter.js +93 -24
- package/dist/client/openai-adapter.js.map +1 -1
- package/dist/client/storage.d.ts +175 -0
- package/dist/client/storage.d.ts.map +1 -0
- package/dist/client/storage.js +370 -0
- package/dist/client/storage.js.map +1 -0
- package/dist/client/thread-manager.d.ts +55 -31
- package/dist/client/thread-manager.d.ts.map +1 -1
- package/dist/client/thread-manager.js +109 -44
- package/dist/client/thread-manager.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/server/routes/assistants.js +5 -5
- package/dist/server/routes/assistants.js.map +1 -1
- package/dist/server/routes/files.js +5 -5
- package/dist/server/routes/files.js.map +1 -1
- package/dist/server/routes/runs.js +30 -30
- package/dist/server/routes/runs.js.map +1 -1
- package/dist/server/routes/threads.js +11 -11
- package/dist/server/routes/threads.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -13,6 +13,8 @@ pnpm add @cogitator-ai/openai-compat
|
|
|
13
13
|
- **OpenAI Server** - Expose Cogitator as OpenAI-compatible REST API
|
|
14
14
|
- **OpenAI Adapter** - In-process adapter for programmatic access
|
|
15
15
|
- **Thread Manager** - Manage conversations, messages, and assistants
|
|
16
|
+
- **Persistent Storage** - Pluggable backends: In-memory, Redis, PostgreSQL
|
|
17
|
+
- **SSE Streaming** - Real-time token streaming with OpenAI-compatible events
|
|
16
18
|
- **File Operations** - Upload and manage files for assistants
|
|
17
19
|
- **Full Assistants API** - Create, update, delete assistants
|
|
18
20
|
- **Run Management** - Execute runs with tool support
|
|
@@ -173,7 +175,7 @@ const adapter = createOpenAIAdapter(cogitator, {
|
|
|
173
175
|
### Assistant Management
|
|
174
176
|
|
|
175
177
|
```typescript
|
|
176
|
-
const assistant = adapter.createAssistant({
|
|
178
|
+
const assistant = await adapter.createAssistant({
|
|
177
179
|
model: 'openai/gpt-4o',
|
|
178
180
|
name: 'Code Helper',
|
|
179
181
|
instructions: 'You help write code',
|
|
@@ -182,32 +184,32 @@ const assistant = adapter.createAssistant({
|
|
|
182
184
|
metadata: { category: 'development' },
|
|
183
185
|
});
|
|
184
186
|
|
|
185
|
-
const fetched = adapter.getAssistant(assistant.id);
|
|
187
|
+
const fetched = await adapter.getAssistant(assistant.id);
|
|
186
188
|
|
|
187
|
-
const updated = adapter.updateAssistant(assistant.id, {
|
|
189
|
+
const updated = await adapter.updateAssistant(assistant.id, {
|
|
188
190
|
name: 'Code Expert',
|
|
189
191
|
temperature: 0.5,
|
|
190
192
|
});
|
|
191
193
|
|
|
192
|
-
const all = adapter.listAssistants();
|
|
194
|
+
const all = await adapter.listAssistants();
|
|
193
195
|
|
|
194
|
-
const deleted = adapter.deleteAssistant(assistant.id);
|
|
196
|
+
const deleted = await adapter.deleteAssistant(assistant.id);
|
|
195
197
|
```
|
|
196
198
|
|
|
197
199
|
### Thread Operations
|
|
198
200
|
|
|
199
201
|
```typescript
|
|
200
|
-
const thread = adapter.createThread({ project: 'demo' });
|
|
202
|
+
const thread = await adapter.createThread({ project: 'demo' });
|
|
201
203
|
|
|
202
|
-
const fetched = adapter.getThread(thread.id);
|
|
204
|
+
const fetched = await adapter.getThread(thread.id);
|
|
203
205
|
|
|
204
|
-
const message = adapter.addMessage(thread.id, {
|
|
206
|
+
const message = await adapter.addMessage(thread.id, {
|
|
205
207
|
role: 'user',
|
|
206
208
|
content: 'Hello, how are you?',
|
|
207
209
|
metadata: { source: 'web' },
|
|
208
210
|
});
|
|
209
211
|
|
|
210
|
-
const messages = adapter.listMessages(thread.id, {
|
|
212
|
+
const messages = await adapter.listMessages(thread.id, {
|
|
211
213
|
limit: 20,
|
|
212
214
|
order: 'asc',
|
|
213
215
|
after: 'msg_abc123',
|
|
@@ -215,9 +217,9 @@ const messages = adapter.listMessages(thread.id, {
|
|
|
215
217
|
run_id: 'run_123',
|
|
216
218
|
});
|
|
217
219
|
|
|
218
|
-
const msg = adapter.getMessage(thread.id, 'msg_abc123');
|
|
220
|
+
const msg = await adapter.getMessage(thread.id, 'msg_abc123');
|
|
219
221
|
|
|
220
|
-
adapter.deleteThread(thread.id);
|
|
222
|
+
await adapter.deleteThread(thread.id);
|
|
221
223
|
```
|
|
222
224
|
|
|
223
225
|
### Run Execution
|
|
@@ -284,54 +286,235 @@ interface StoredAssistant {
|
|
|
284
286
|
created_at: number;
|
|
285
287
|
}
|
|
286
288
|
|
|
287
|
-
const assistant = manager.createAssistant({
|
|
289
|
+
const assistant = await manager.createAssistant({
|
|
288
290
|
model: 'gpt-4o',
|
|
289
291
|
name: 'Helper',
|
|
290
292
|
instructions: 'Be helpful',
|
|
291
293
|
});
|
|
292
294
|
|
|
293
|
-
const fetched = manager.getAssistant(assistant.id);
|
|
294
|
-
const updated = manager.updateAssistant(assistant.id, { name: 'Expert' });
|
|
295
|
-
const all = manager.listAssistants();
|
|
296
|
-
manager.deleteAssistant(assistant.id);
|
|
295
|
+
const fetched = await manager.getAssistant(assistant.id);
|
|
296
|
+
const updated = await manager.updateAssistant(assistant.id, { name: 'Expert' });
|
|
297
|
+
const all = await manager.listAssistants();
|
|
298
|
+
await manager.deleteAssistant(assistant.id);
|
|
297
299
|
```
|
|
298
300
|
|
|
299
301
|
### Thread Storage
|
|
300
302
|
|
|
301
303
|
```typescript
|
|
302
|
-
const thread = manager.createThread({ key: 'value' });
|
|
303
|
-
const fetched = manager.getThread(thread.id);
|
|
304
|
-
manager.deleteThread(thread.id);
|
|
304
|
+
const thread = await manager.createThread({ key: 'value' });
|
|
305
|
+
const fetched = await manager.getThread(thread.id);
|
|
306
|
+
await manager.deleteThread(thread.id);
|
|
305
307
|
```
|
|
306
308
|
|
|
307
309
|
### Message Operations
|
|
308
310
|
|
|
309
311
|
```typescript
|
|
310
|
-
const message = manager.addMessage(thread.id, {
|
|
312
|
+
const message = await manager.addMessage(thread.id, {
|
|
311
313
|
role: 'user',
|
|
312
314
|
content: 'Hello!',
|
|
313
315
|
});
|
|
314
316
|
|
|
315
|
-
const assistantMsg = manager.addAssistantMessage(
|
|
317
|
+
const assistantMsg = await manager.addAssistantMessage(
|
|
318
|
+
thread.id,
|
|
319
|
+
'Hi there!',
|
|
320
|
+
assistant.id,
|
|
321
|
+
run.id
|
|
322
|
+
);
|
|
316
323
|
|
|
317
|
-
const messages = manager.listMessages(thread.id, {
|
|
324
|
+
const messages = await manager.listMessages(thread.id, {
|
|
318
325
|
limit: 50,
|
|
319
326
|
order: 'desc',
|
|
320
327
|
});
|
|
321
328
|
|
|
322
|
-
const llmMessages = manager.getMessagesForLLM(thread.id);
|
|
329
|
+
const llmMessages = await manager.getMessagesForLLM(thread.id);
|
|
323
330
|
```
|
|
324
331
|
|
|
325
332
|
### File Management
|
|
326
333
|
|
|
327
334
|
```typescript
|
|
328
|
-
const file = manager.addFile(Buffer.from('file content'), 'document.txt');
|
|
335
|
+
const file = await manager.addFile(Buffer.from('file content'), 'document.txt');
|
|
329
336
|
|
|
330
|
-
const fetched = manager.getFile(file.id);
|
|
337
|
+
const fetched = await manager.getFile(file.id);
|
|
331
338
|
|
|
332
|
-
const all = manager.listFiles();
|
|
339
|
+
const all = await manager.listFiles();
|
|
333
340
|
|
|
334
|
-
manager.deleteFile(file.id);
|
|
341
|
+
await manager.deleteFile(file.id);
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
## Persistent Storage
|
|
347
|
+
|
|
348
|
+
By default, ThreadManager uses in-memory storage. For production, use Redis or PostgreSQL backends.
|
|
349
|
+
|
|
350
|
+
### Storage Backends
|
|
351
|
+
|
|
352
|
+
```typescript
|
|
353
|
+
import {
|
|
354
|
+
ThreadManager,
|
|
355
|
+
InMemoryThreadStorage,
|
|
356
|
+
RedisThreadStorage,
|
|
357
|
+
PostgresThreadStorage,
|
|
358
|
+
createThreadStorage,
|
|
359
|
+
} from '@cogitator-ai/openai-compat';
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
### In-Memory (Default)
|
|
363
|
+
|
|
364
|
+
```typescript
|
|
365
|
+
const manager = new ThreadManager();
|
|
366
|
+
// or explicitly:
|
|
367
|
+
const manager = new ThreadManager(new InMemoryThreadStorage());
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### Redis Storage
|
|
371
|
+
|
|
372
|
+
Requires `ioredis` peer dependency:
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
pnpm add ioredis
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
```typescript
|
|
379
|
+
const storage = new RedisThreadStorage({
|
|
380
|
+
host: 'localhost',
|
|
381
|
+
port: 6379,
|
|
382
|
+
prefix: 'cogitator:', // optional, default: 'cogitator:'
|
|
383
|
+
});
|
|
384
|
+
await storage.connect();
|
|
385
|
+
|
|
386
|
+
const manager = new ThreadManager(storage);
|
|
387
|
+
|
|
388
|
+
// When done:
|
|
389
|
+
await storage.disconnect();
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
With connection URL:
|
|
393
|
+
|
|
394
|
+
```typescript
|
|
395
|
+
const storage = new RedisThreadStorage({
|
|
396
|
+
url: 'redis://user:pass@localhost:6379/0',
|
|
397
|
+
});
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
### PostgreSQL Storage
|
|
401
|
+
|
|
402
|
+
Requires `pg` peer dependency:
|
|
403
|
+
|
|
404
|
+
```bash
|
|
405
|
+
pnpm add pg
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
```typescript
|
|
409
|
+
const storage = new PostgresThreadStorage({
|
|
410
|
+
host: 'localhost',
|
|
411
|
+
port: 5432,
|
|
412
|
+
database: 'cogitator',
|
|
413
|
+
user: 'postgres',
|
|
414
|
+
password: 'secret',
|
|
415
|
+
tableName: 'cogitator_storage', // optional
|
|
416
|
+
});
|
|
417
|
+
await storage.connect();
|
|
418
|
+
|
|
419
|
+
const manager = new ThreadManager(storage);
|
|
420
|
+
|
|
421
|
+
// When done:
|
|
422
|
+
await storage.disconnect();
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
With connection string:
|
|
426
|
+
|
|
427
|
+
```typescript
|
|
428
|
+
const storage = new PostgresThreadStorage({
|
|
429
|
+
connectionString: 'postgresql://user:pass@localhost:5432/db',
|
|
430
|
+
});
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
### Factory Function
|
|
434
|
+
|
|
435
|
+
```typescript
|
|
436
|
+
// In-memory
|
|
437
|
+
const storage = createThreadStorage('memory');
|
|
438
|
+
|
|
439
|
+
// Redis
|
|
440
|
+
const storage = createThreadStorage('redis', {
|
|
441
|
+
host: 'localhost',
|
|
442
|
+
port: 6379,
|
|
443
|
+
});
|
|
444
|
+
|
|
445
|
+
// PostgreSQL
|
|
446
|
+
const storage = createThreadStorage('postgres', {
|
|
447
|
+
connectionString: 'postgresql://localhost/db',
|
|
448
|
+
});
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
### Using with OpenAI Server
|
|
452
|
+
|
|
453
|
+
```typescript
|
|
454
|
+
import { OpenAIServer, RedisThreadStorage } from '@cogitator-ai/openai-compat';
|
|
455
|
+
import { Cogitator } from '@cogitator-ai/core';
|
|
456
|
+
|
|
457
|
+
const storage = new RedisThreadStorage({ host: 'localhost' });
|
|
458
|
+
await storage.connect();
|
|
459
|
+
|
|
460
|
+
const cogitator = new Cogitator({ defaultModel: 'openai/gpt-4o' });
|
|
461
|
+
|
|
462
|
+
// Create adapter with custom storage
|
|
463
|
+
const adapter = new OpenAIAdapter(cogitator, { tools: [] });
|
|
464
|
+
// Note: To use custom storage, create ThreadManager separately:
|
|
465
|
+
const manager = new ThreadManager(storage);
|
|
466
|
+
|
|
467
|
+
const server = new OpenAIServer(cogitator, {
|
|
468
|
+
port: 8080,
|
|
469
|
+
adapter, // pass custom adapter
|
|
470
|
+
});
|
|
471
|
+
|
|
472
|
+
await server.start();
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
### ThreadStorage Interface
|
|
476
|
+
|
|
477
|
+
All storage backends implement this interface:
|
|
478
|
+
|
|
479
|
+
```typescript
|
|
480
|
+
interface ThreadStorage {
|
|
481
|
+
// Threads
|
|
482
|
+
saveThread(id: string, thread: StoredThread): Promise<void>;
|
|
483
|
+
loadThread(id: string): Promise<StoredThread | null>;
|
|
484
|
+
deleteThread(id: string): Promise<boolean>;
|
|
485
|
+
listThreads(): Promise<StoredThread[]>;
|
|
486
|
+
|
|
487
|
+
// Assistants
|
|
488
|
+
saveAssistant(id: string, assistant: StoredAssistant): Promise<void>;
|
|
489
|
+
loadAssistant(id: string): Promise<StoredAssistant | null>;
|
|
490
|
+
deleteAssistant(id: string): Promise<boolean>;
|
|
491
|
+
listAssistants(): Promise<StoredAssistant[]>;
|
|
492
|
+
|
|
493
|
+
// Files
|
|
494
|
+
saveFile(id: string, file: StoredFile): Promise<void>;
|
|
495
|
+
loadFile(id: string): Promise<StoredFile | null>;
|
|
496
|
+
deleteFile(id: string): Promise<boolean>;
|
|
497
|
+
listFiles(): Promise<StoredFile[]>;
|
|
498
|
+
|
|
499
|
+
// Lifecycle (optional)
|
|
500
|
+
connect?(): Promise<void>;
|
|
501
|
+
disconnect?(): Promise<void>;
|
|
502
|
+
}
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
### Custom Storage Implementation
|
|
506
|
+
|
|
507
|
+
```typescript
|
|
508
|
+
import type { ThreadStorage } from '@cogitator-ai/openai-compat';
|
|
509
|
+
|
|
510
|
+
class MyCustomStorage implements ThreadStorage {
|
|
511
|
+
async saveThread(id: string, thread: StoredThread): Promise<void> {
|
|
512
|
+
// Your implementation
|
|
513
|
+
}
|
|
514
|
+
// ... implement all methods
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
const manager = new ThreadManager(new MyCustomStorage());
|
|
335
518
|
```
|
|
336
519
|
|
|
337
520
|
---
|
|
@@ -484,13 +667,54 @@ async function waitForRun(openai: OpenAI, threadId: string, runId: string): Prom
|
|
|
484
667
|
|
|
485
668
|
---
|
|
486
669
|
|
|
487
|
-
##
|
|
670
|
+
## SSE Streaming
|
|
671
|
+
|
|
672
|
+
Real-time streaming support with Server-Sent Events (SSE). Streams tokens as they are generated for immediate feedback.
|
|
673
|
+
|
|
674
|
+
### Streaming with OpenAI SDK
|
|
675
|
+
|
|
676
|
+
```typescript
|
|
677
|
+
const run = await openai.beta.threads.runs.create(threadId, {
|
|
678
|
+
assistant_id: assistant.id,
|
|
679
|
+
stream: true, // Enable streaming
|
|
680
|
+
});
|
|
681
|
+
|
|
682
|
+
// Handle streaming events
|
|
683
|
+
for await (const event of run) {
|
|
684
|
+
if (event.event === 'thread.message.delta') {
|
|
685
|
+
const delta = event.data.delta;
|
|
686
|
+
if (delta.content) {
|
|
687
|
+
for (const content of delta.content) {
|
|
688
|
+
if (content.type === 'text' && content.text?.value) {
|
|
689
|
+
process.stdout.write(content.text.value);
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
```
|
|
696
|
+
|
|
697
|
+
### Create Thread and Run with Streaming
|
|
698
|
+
|
|
699
|
+
```typescript
|
|
700
|
+
const run = await openai.beta.threads.createAndRun({
|
|
701
|
+
assistant_id: assistant.id,
|
|
702
|
+
thread: {
|
|
703
|
+
messages: [{ role: 'user', content: 'Hello!' }],
|
|
704
|
+
},
|
|
705
|
+
stream: true,
|
|
706
|
+
});
|
|
707
|
+
|
|
708
|
+
// Process stream
|
|
709
|
+
for await (const event of run) {
|
|
710
|
+
console.log(event.event, event.data);
|
|
711
|
+
}
|
|
712
|
+
```
|
|
488
713
|
|
|
489
|
-
|
|
714
|
+
### Stream Events
|
|
490
715
|
|
|
491
716
|
```typescript
|
|
492
717
|
type StreamEvent =
|
|
493
|
-
| { event: 'thread.created'; data: Thread }
|
|
494
718
|
| { event: 'thread.run.created'; data: Run }
|
|
495
719
|
| { event: 'thread.run.queued'; data: Run }
|
|
496
720
|
| { event: 'thread.run.in_progress'; data: Run }
|
|
@@ -499,11 +723,70 @@ type StreamEvent =
|
|
|
499
723
|
| { event: 'thread.run.failed'; data: Run }
|
|
500
724
|
| { event: 'thread.run.cancelled'; data: Run }
|
|
501
725
|
| { event: 'thread.message.created'; data: Message }
|
|
726
|
+
| { event: 'thread.message.in_progress'; data: Message }
|
|
502
727
|
| { event: 'thread.message.delta'; data: MessageDelta }
|
|
503
728
|
| { event: 'thread.message.completed'; data: Message }
|
|
504
729
|
| { event: 'done'; data: '[DONE]' };
|
|
505
730
|
```
|
|
506
731
|
|
|
732
|
+
### Message Delta Format
|
|
733
|
+
|
|
734
|
+
```typescript
|
|
735
|
+
interface MessageDelta {
|
|
736
|
+
id: string;
|
|
737
|
+
object: 'thread.message.delta';
|
|
738
|
+
delta: {
|
|
739
|
+
content?: {
|
|
740
|
+
index: number;
|
|
741
|
+
type: 'text';
|
|
742
|
+
text?: { value?: string };
|
|
743
|
+
}[];
|
|
744
|
+
};
|
|
745
|
+
}
|
|
746
|
+
```
|
|
747
|
+
|
|
748
|
+
### Raw SSE Endpoint
|
|
749
|
+
|
|
750
|
+
For non-SDK usage, the SSE stream is available at:
|
|
751
|
+
|
|
752
|
+
```
|
|
753
|
+
POST /v1/threads/{thread_id}/runs
|
|
754
|
+
Content-Type: application/json
|
|
755
|
+
|
|
756
|
+
{
|
|
757
|
+
"assistant_id": "asst_xxx",
|
|
758
|
+
"stream": true
|
|
759
|
+
}
|
|
760
|
+
```
|
|
761
|
+
|
|
762
|
+
Response format (Server-Sent Events):
|
|
763
|
+
|
|
764
|
+
```
|
|
765
|
+
event: thread.run.created
|
|
766
|
+
data: {"id":"run_xxx","status":"queued",...}
|
|
767
|
+
|
|
768
|
+
event: thread.run.in_progress
|
|
769
|
+
data: {"id":"run_xxx","status":"in_progress",...}
|
|
770
|
+
|
|
771
|
+
event: thread.message.created
|
|
772
|
+
data: {"id":"msg_xxx","status":"in_progress",...}
|
|
773
|
+
|
|
774
|
+
event: thread.message.delta
|
|
775
|
+
data: {"id":"msg_xxx","delta":{"content":[{"index":0,"type":"text","text":{"value":"Hello"}}]}}
|
|
776
|
+
|
|
777
|
+
event: thread.message.delta
|
|
778
|
+
data: {"id":"msg_xxx","delta":{"content":[{"index":1,"type":"text","text":{"value":" world"}}]}}
|
|
779
|
+
|
|
780
|
+
event: thread.message.completed
|
|
781
|
+
data: {"id":"msg_xxx","status":"completed",...}
|
|
782
|
+
|
|
783
|
+
event: thread.run.completed
|
|
784
|
+
data: {"id":"run_xxx","status":"completed",...}
|
|
785
|
+
|
|
786
|
+
event: done
|
|
787
|
+
data: [DONE]
|
|
788
|
+
```
|
|
789
|
+
|
|
507
790
|
---
|
|
508
791
|
|
|
509
792
|
## Type Reference
|
|
@@ -579,6 +862,26 @@ import type { FileObject, FilePurpose, UploadFileRequest } from '@cogitator-ai/o
|
|
|
579
862
|
import type { StreamEvent, MessageDelta, RunStepDelta } from '@cogitator-ai/openai-compat';
|
|
580
863
|
```
|
|
581
864
|
|
|
865
|
+
### Storage Types
|
|
866
|
+
|
|
867
|
+
```typescript
|
|
868
|
+
import type {
|
|
869
|
+
ThreadStorage,
|
|
870
|
+
StoredThread,
|
|
871
|
+
StoredAssistant,
|
|
872
|
+
StoredFile,
|
|
873
|
+
RedisThreadStorageConfig,
|
|
874
|
+
PostgresThreadStorageConfig,
|
|
875
|
+
} from '@cogitator-ai/openai-compat';
|
|
876
|
+
|
|
877
|
+
import {
|
|
878
|
+
InMemoryThreadStorage,
|
|
879
|
+
RedisThreadStorage,
|
|
880
|
+
PostgresThreadStorage,
|
|
881
|
+
createThreadStorage,
|
|
882
|
+
} from '@cogitator-ai/openai-compat';
|
|
883
|
+
```
|
|
884
|
+
|
|
582
885
|
---
|
|
583
886
|
|
|
584
887
|
## Examples
|
|
@@ -6,8 +6,15 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { type Cogitator } from '@cogitator-ai/core';
|
|
8
8
|
import type { Tool } from '@cogitator-ai/types';
|
|
9
|
+
import { EventEmitter } from 'events';
|
|
9
10
|
import { ThreadManager } from './thread-manager';
|
|
10
|
-
import type { Assistant, AssistantTool, Run, CreateRunRequest, SubmitToolOutputsRequest } from '../types/openai-types';
|
|
11
|
+
import type { Assistant, AssistantTool, Run, RunStep, Message, MessageDelta, CreateRunRequest, SubmitToolOutputsRequest } from '../types/openai-types';
|
|
12
|
+
export type StreamEventType = 'thread.run.created' | 'thread.run.queued' | 'thread.run.in_progress' | 'thread.run.completed' | 'thread.run.failed' | 'thread.run.cancelled' | 'thread.run.step.created' | 'thread.run.step.in_progress' | 'thread.run.step.completed' | 'thread.message.created' | 'thread.message.in_progress' | 'thread.message.delta' | 'thread.message.completed' | 'done' | 'error';
|
|
13
|
+
export interface StreamEmitterEvents {
|
|
14
|
+
event: [type: StreamEventType, data: Run | RunStep | Message | MessageDelta | string];
|
|
15
|
+
error: [error: Error];
|
|
16
|
+
end: [];
|
|
17
|
+
}
|
|
11
18
|
/**
|
|
12
19
|
* OpenAI SDK Adapter
|
|
13
20
|
*
|
|
@@ -51,8 +58,8 @@ export declare class OpenAIAdapter {
|
|
|
51
58
|
tools?: AssistantTool[];
|
|
52
59
|
metadata?: Record<string, string>;
|
|
53
60
|
temperature?: number;
|
|
54
|
-
}): Assistant
|
|
55
|
-
getAssistant(id: string): Assistant | undefined
|
|
61
|
+
}): Promise<Assistant>;
|
|
62
|
+
getAssistant(id: string): Promise<Assistant | undefined>;
|
|
56
63
|
updateAssistant(id: string, updates: Partial<{
|
|
57
64
|
model: string;
|
|
58
65
|
name: string;
|
|
@@ -60,26 +67,26 @@ export declare class OpenAIAdapter {
|
|
|
60
67
|
tools: AssistantTool[];
|
|
61
68
|
metadata: Record<string, string>;
|
|
62
69
|
temperature: number;
|
|
63
|
-
}>): Assistant | undefined
|
|
64
|
-
deleteAssistant(id: string): boolean
|
|
65
|
-
listAssistants(): Assistant[]
|
|
70
|
+
}>): Promise<Assistant | undefined>;
|
|
71
|
+
deleteAssistant(id: string): Promise<boolean>;
|
|
72
|
+
listAssistants(): Promise<Assistant[]>;
|
|
66
73
|
private toAssistant;
|
|
67
|
-
createThread(metadata?: Record<string, string>): import("..").Thread
|
|
68
|
-
getThread(id: string): import("..").Thread | undefined
|
|
69
|
-
deleteThread(id: string): boolean
|
|
74
|
+
createThread(metadata?: Record<string, string>): Promise<import("..").Thread>;
|
|
75
|
+
getThread(id: string): Promise<import("..").Thread | undefined>;
|
|
76
|
+
deleteThread(id: string): Promise<boolean>;
|
|
70
77
|
addMessage(threadId: string, params: {
|
|
71
78
|
role: 'user' | 'assistant';
|
|
72
79
|
content: string;
|
|
73
80
|
metadata?: Record<string, string>;
|
|
74
|
-
}):
|
|
75
|
-
getMessage(threadId: string, messageId: string):
|
|
81
|
+
}): Promise<Message | undefined>;
|
|
82
|
+
getMessage(threadId: string, messageId: string): Promise<Message | undefined>;
|
|
76
83
|
listMessages(threadId: string, options?: {
|
|
77
84
|
limit?: number;
|
|
78
85
|
order?: 'asc' | 'desc';
|
|
79
86
|
after?: string;
|
|
80
87
|
before?: string;
|
|
81
88
|
run_id?: string;
|
|
82
|
-
}):
|
|
89
|
+
}): Promise<Message[]>;
|
|
83
90
|
/**
|
|
84
91
|
* Create and execute a run
|
|
85
92
|
*/
|
|
@@ -96,6 +103,10 @@ export declare class OpenAIAdapter {
|
|
|
96
103
|
* Submit tool outputs for a run that requires action
|
|
97
104
|
*/
|
|
98
105
|
submitToolOutputs(threadId: string, runId: string, request: SubmitToolOutputsRequest): Promise<Run | undefined>;
|
|
106
|
+
/**
|
|
107
|
+
* Get the stream emitter for a streaming run
|
|
108
|
+
*/
|
|
109
|
+
getStreamEmitter(runId: string): EventEmitter<StreamEmitterEvents> | undefined;
|
|
99
110
|
private executeRun;
|
|
100
111
|
}
|
|
101
112
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-adapter.d.ts","sourceRoot":"","sources":["../../src/client/openai-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAS,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAwB,MAAM,kBAAkB,CAAC;AAEvE,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACb,GAAG,EACH,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"openai-adapter.d.ts","sourceRoot":"","sources":["../../src/client/openai-adapter.ts"],"names":[],"mappings":"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"}
|