@cogitator-ai/openai-compat 19.0.17 → 21.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.
Files changed (45) hide show
  1. package/README.md +79 -55
  2. package/dist/client/openai-adapter.d.ts +74 -37
  3. package/dist/client/openai-adapter.d.ts.map +1 -1
  4. package/dist/client/openai-adapter.js +416 -137
  5. package/dist/client/openai-adapter.js.map +1 -1
  6. package/dist/client/storage.d.ts +4 -0
  7. package/dist/client/storage.d.ts.map +1 -1
  8. package/dist/client/storage.js +80 -60
  9. package/dist/client/storage.js.map +1 -1
  10. package/dist/client/thread-manager.d.ts +45 -31
  11. package/dist/client/thread-manager.d.ts.map +1 -1
  12. package/dist/client/thread-manager.js +157 -115
  13. package/dist/client/thread-manager.js.map +1 -1
  14. package/dist/index.d.ts +3 -3
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +1 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/server/api-server.d.ts +23 -1
  19. package/dist/server/api-server.d.ts.map +1 -1
  20. package/dist/server/api-server.js +42 -23
  21. package/dist/server/api-server.js.map +1 -1
  22. package/dist/server/middleware/auth.d.ts +2 -0
  23. package/dist/server/middleware/auth.d.ts.map +1 -1
  24. package/dist/server/middleware/auth.js +25 -2
  25. package/dist/server/middleware/auth.js.map +1 -1
  26. package/dist/server/middleware/error-handler.d.ts +2 -2
  27. package/dist/server/middleware/error-handler.d.ts.map +1 -1
  28. package/dist/server/routes/assistants.d.ts.map +1 -1
  29. package/dist/server/routes/assistants.js +16 -26
  30. package/dist/server/routes/assistants.js.map +1 -1
  31. package/dist/server/routes/files.d.ts.map +1 -1
  32. package/dist/server/routes/files.js +60 -56
  33. package/dist/server/routes/files.js.map +1 -1
  34. package/dist/server/routes/runs.d.ts.map +1 -1
  35. package/dist/server/routes/runs.js +102 -105
  36. package/dist/server/routes/runs.js.map +1 -1
  37. package/dist/server/routes/shared.d.ts +27 -0
  38. package/dist/server/routes/shared.d.ts.map +1 -0
  39. package/dist/server/routes/shared.js +54 -0
  40. package/dist/server/routes/shared.js.map +1 -0
  41. package/dist/server/routes/threads.d.ts.map +1 -1
  42. package/dist/server/routes/threads.js +29 -16
  43. package/dist/server/routes/threads.js.map +1 -1
  44. package/dist/types/openai-types.d.ts.map +1 -1
  45. package/package.json +27 -16
@@ -1,5 +1,23 @@
1
1
  import { nanoid } from 'nanoid';
2
2
  import { InMemoryThreadStorage } from './storage.js';
3
+ const IMAGE_MIME_BY_EXTENSION = {
4
+ png: 'image/png',
5
+ jpg: 'image/jpeg',
6
+ jpeg: 'image/jpeg',
7
+ gif: 'image/gif',
8
+ webp: 'image/webp',
9
+ };
10
+ const ASSISTANT_UPDATABLE_FIELDS = [
11
+ 'model',
12
+ 'name',
13
+ 'description',
14
+ 'instructions',
15
+ 'tools',
16
+ 'metadata',
17
+ 'temperature',
18
+ 'top_p',
19
+ 'response_format',
20
+ ];
3
21
  /**
4
22
  * Manages threads, messages, and assistants with pluggable storage.
5
23
  *
@@ -34,50 +52,73 @@ import { InMemoryThreadStorage } from './storage.js';
34
52
  */
35
53
  export class ThreadManager {
36
54
  storage;
37
- cache = {
38
- threads: new Map(),
39
- assistants: new Map(),
40
- files: new Map(),
41
- };
55
+ locks = new Map();
56
+ /**
57
+ * Storage is the single source of truth (no in-process cache), so several
58
+ * server instances can share Redis/PostgreSQL storage without serving stale
59
+ * data. Read-modify-write operations on one thread are serialized per process.
60
+ */
42
61
  constructor(storage) {
43
62
  this.storage = storage ?? new InMemoryThreadStorage();
44
63
  }
64
+ async withLock(key, fn) {
65
+ const previous = this.locks.get(key) ?? Promise.resolve();
66
+ let release;
67
+ const current = new Promise((resolve) => {
68
+ release = resolve;
69
+ });
70
+ const chained = previous.then(() => current);
71
+ this.locks.set(key, chained);
72
+ try {
73
+ await previous;
74
+ return await fn();
75
+ }
76
+ finally {
77
+ release();
78
+ if (this.locks.get(key) === chained) {
79
+ this.locks.delete(key);
80
+ }
81
+ }
82
+ }
45
83
  async createAssistant(params) {
46
84
  const id = `asst_${nanoid()}`;
47
85
  const assistant = {
48
86
  id,
49
87
  name: params.name ?? null,
88
+ description: params.description ?? null,
50
89
  model: params.model,
51
90
  instructions: params.instructions ?? null,
52
91
  tools: params.tools ?? [],
53
92
  metadata: params.metadata ?? {},
54
93
  temperature: params.temperature,
94
+ top_p: params.top_p,
95
+ response_format: params.response_format,
55
96
  created_at: Math.floor(Date.now() / 1000),
56
97
  };
57
98
  await this.storage.saveAssistant(id, assistant);
58
- this.cache.assistants.set(id, assistant);
59
99
  return assistant;
60
100
  }
61
101
  async getAssistant(id) {
62
- if (this.cache.assistants.has(id)) {
63
- return this.cache.assistants.get(id);
64
- }
65
102
  const assistant = await this.storage.loadAssistant(id);
66
- if (assistant) {
67
- this.cache.assistants.set(id, assistant);
68
- }
69
103
  return assistant ?? undefined;
70
104
  }
71
105
  async updateAssistant(id, updates) {
72
- const assistant = await this.getAssistant(id);
73
- if (!assistant)
74
- return undefined;
75
- Object.assign(assistant, updates);
76
- await this.storage.saveAssistant(id, assistant);
77
- return assistant;
106
+ return this.withLock(`assistant:${id}`, async () => {
107
+ const assistant = await this.getAssistant(id);
108
+ if (!assistant)
109
+ return undefined;
110
+ const target = assistant;
111
+ const source = updates;
112
+ for (const field of ASSISTANT_UPDATABLE_FIELDS) {
113
+ if (source[field] !== undefined) {
114
+ target[field] = source[field];
115
+ }
116
+ }
117
+ await this.storage.saveAssistant(id, assistant);
118
+ return assistant;
119
+ });
78
120
  }
79
121
  async deleteAssistant(id) {
80
- this.cache.assistants.delete(id);
81
122
  return this.storage.deleteAssistant(id);
82
123
  }
83
124
  async listAssistants() {
@@ -93,7 +134,6 @@ export class ThreadManager {
93
134
  };
94
135
  const stored = { thread, messages: [] };
95
136
  await this.storage.saveThread(id, stored);
96
- this.cache.threads.set(id, stored);
97
137
  return thread;
98
138
  }
99
139
  async getThread(id) {
@@ -101,54 +141,49 @@ export class ThreadManager {
101
141
  return stored?.thread;
102
142
  }
103
143
  async getStoredThread(id) {
104
- if (this.cache.threads.has(id)) {
105
- return this.cache.threads.get(id);
106
- }
107
144
  const stored = await this.storage.loadThread(id);
108
- if (stored) {
109
- this.cache.threads.set(id, stored);
110
- }
111
145
  return stored ?? undefined;
112
146
  }
113
147
  async updateThread(id, updates) {
114
- const stored = await this.getStoredThread(id);
115
- if (!stored)
116
- return undefined;
117
- if (updates.metadata) {
118
- Object.assign(stored.thread.metadata, updates.metadata);
119
- }
120
- await this.storage.saveThread(id, stored);
121
- return stored.thread;
148
+ return this.withLock(`thread:${id}`, async () => {
149
+ const stored = await this.getStoredThread(id);
150
+ if (!stored)
151
+ return undefined;
152
+ if (updates.metadata) {
153
+ stored.thread.metadata = { ...stored.thread.metadata, ...updates.metadata };
154
+ }
155
+ await this.storage.saveThread(id, stored);
156
+ return stored.thread;
157
+ });
122
158
  }
123
159
  async deleteThread(id) {
124
- this.cache.threads.delete(id);
125
- return this.storage.deleteThread(id);
160
+ return this.withLock(`thread:${id}`, () => this.storage.deleteThread(id));
126
161
  }
127
162
  async addMessage(threadId, request) {
128
- const stored = await this.getStoredThread(threadId);
129
- if (!stored)
130
- return undefined;
131
- const id = `msg_${nanoid()}`;
132
- const now = Math.floor(Date.now() / 1000);
133
- const content = this.normalizeContent(request.content);
134
- const message = {
135
- id,
136
- object: 'thread.message',
137
- created_at: now,
138
- thread_id: threadId,
139
- status: 'completed',
140
- completed_at: now,
141
- incomplete_at: null,
142
- role: request.role,
143
- content,
144
- assistant_id: null,
145
- run_id: null,
146
- attachments: request.attachments ?? null,
147
- metadata: request.metadata ?? {},
148
- };
149
- stored.messages.push(message);
150
- await this.storage.saveThread(threadId, stored);
151
- return message;
163
+ return this.withLock(`thread:${threadId}`, async () => {
164
+ const stored = await this.getStoredThread(threadId);
165
+ if (!stored)
166
+ return undefined;
167
+ const now = Math.floor(Date.now() / 1000);
168
+ const message = {
169
+ id: `msg_${nanoid()}`,
170
+ object: 'thread.message',
171
+ created_at: now,
172
+ thread_id: threadId,
173
+ status: 'completed',
174
+ completed_at: now,
175
+ incomplete_at: null,
176
+ role: request.role,
177
+ content: this.normalizeContent(request.content),
178
+ assistant_id: null,
179
+ run_id: null,
180
+ attachments: request.attachments ?? null,
181
+ metadata: request.metadata ?? {},
182
+ };
183
+ stored.messages.push(message);
184
+ await this.storage.saveThread(threadId, stored);
185
+ return message;
186
+ });
152
187
  }
153
188
  async getMessage(threadId, messageId) {
154
189
  const stored = await this.getStoredThread(threadId);
@@ -158,16 +193,10 @@ export class ThreadManager {
158
193
  const stored = await this.getStoredThread(threadId);
159
194
  if (!stored)
160
195
  return [];
161
- let messages = [...stored.messages];
196
+ let messages = options?.order === 'asc' ? [...stored.messages] : [...stored.messages].reverse();
162
197
  if (options?.run_id) {
163
198
  messages = messages.filter((m) => m.run_id === options.run_id);
164
199
  }
165
- if (options?.order === 'asc') {
166
- messages.sort((a, b) => a.created_at - b.created_at);
167
- }
168
- else {
169
- messages.sort((a, b) => b.created_at - a.created_at);
170
- }
171
200
  if (options?.after) {
172
201
  const idx = messages.findIndex((m) => m.id === options.after);
173
202
  if (idx !== -1) {
@@ -190,72 +219,85 @@ export class ThreadManager {
190
219
  */
191
220
  async getMessagesForLLM(threadId) {
192
221
  const messages = await this.listMessages(threadId, { order: 'asc' });
193
- return messages.map((msg) => ({
194
- role: msg.role,
195
- content: this.extractTextContent(msg.content),
196
- }));
222
+ const result = [];
223
+ for (const msg of messages) {
224
+ const images = await this.extractImages(msg.content);
225
+ result.push({
226
+ role: msg.role,
227
+ content: this.extractTextContent(msg.content),
228
+ ...(images.length > 0 && { images }),
229
+ });
230
+ }
231
+ return result;
197
232
  }
198
233
  /**
199
- * Add an assistant message (from LLM response)
234
+ * Add an assistant message (from LLM response).
235
+ * Pass `messageId` to keep the id already announced in stream events.
200
236
  */
201
- async addAssistantMessage(threadId, content, assistantId, runId) {
202
- const stored = await this.getStoredThread(threadId);
203
- if (!stored)
204
- return undefined;
205
- const id = `msg_${nanoid()}`;
206
- const now = Math.floor(Date.now() / 1000);
207
- const message = {
208
- id,
209
- object: 'thread.message',
210
- created_at: now,
211
- thread_id: threadId,
212
- status: 'completed',
213
- completed_at: now,
214
- incomplete_at: null,
215
- role: 'assistant',
216
- content: [
217
- {
218
- type: 'text',
219
- text: {
220
- value: content,
221
- annotations: [],
222
- },
223
- },
224
- ],
225
- assistant_id: assistantId,
226
- run_id: runId,
227
- attachments: null,
228
- metadata: {},
229
- };
230
- stored.messages.push(message);
231
- await this.storage.saveThread(threadId, stored);
232
- return message;
237
+ async addAssistantMessage(threadId, content, assistantId, runId, messageId) {
238
+ return this.withLock(`thread:${threadId}`, async () => {
239
+ const stored = await this.getStoredThread(threadId);
240
+ if (!stored)
241
+ return undefined;
242
+ const now = Math.floor(Date.now() / 1000);
243
+ const message = {
244
+ id: messageId ?? `msg_${nanoid()}`,
245
+ object: 'thread.message',
246
+ created_at: now,
247
+ thread_id: threadId,
248
+ status: 'completed',
249
+ completed_at: now,
250
+ incomplete_at: null,
251
+ role: 'assistant',
252
+ content: [{ type: 'text', text: { value: content, annotations: [] } }],
253
+ assistant_id: assistantId,
254
+ run_id: runId,
255
+ attachments: null,
256
+ metadata: {},
257
+ };
258
+ stored.messages.push(message);
259
+ await this.storage.saveThread(threadId, stored);
260
+ return message;
261
+ });
233
262
  }
234
- async addFile(content, filename) {
263
+ async addFile(content, filename, purpose = 'assistants') {
235
264
  const id = `file_${nanoid()}`;
236
265
  const created_at = Math.floor(Date.now() / 1000);
237
- const file = { id, content, filename, created_at };
266
+ const file = { id, content, filename, created_at, purpose };
238
267
  await this.storage.saveFile(id, file);
239
- this.cache.files.set(id, file);
240
- return { id, filename, created_at };
268
+ return { id, filename, created_at, purpose };
241
269
  }
242
270
  async getFile(id) {
243
- if (this.cache.files.has(id)) {
244
- return this.cache.files.get(id);
245
- }
246
271
  const file = await this.storage.loadFile(id);
247
- if (file) {
248
- this.cache.files.set(id, file);
249
- }
250
272
  return file ?? undefined;
251
273
  }
252
274
  async deleteFile(id) {
253
- this.cache.files.delete(id);
254
275
  return this.storage.deleteFile(id);
255
276
  }
256
277
  async listFiles() {
257
278
  return this.storage.listFiles();
258
279
  }
280
+ /**
281
+ * Resolve image parts to Cogitator image inputs: URLs are passed through,
282
+ * uploaded image files are inlined as base64.
283
+ */
284
+ async extractImages(content) {
285
+ const images = [];
286
+ for (const part of content) {
287
+ if (part.type === 'image_url') {
288
+ images.push(part.image_url.url);
289
+ }
290
+ else if (part.type === 'image_file') {
291
+ const file = await this.getFile(part.image_file.file_id);
292
+ const extension = file?.filename.split('.').pop()?.toLowerCase() ?? '';
293
+ const mimeType = IMAGE_MIME_BY_EXTENSION[extension];
294
+ if (file && mimeType) {
295
+ images.push({ data: file.content.toString('base64'), mimeType });
296
+ }
297
+ }
298
+ }
299
+ return images;
300
+ }
259
301
  normalizeContent(content) {
260
302
  if (typeof content === 'string') {
261
303
  return [
@@ -1 +1 @@
1
- {"version":3,"file":"thread-manager.js","sourceRoot":"","sources":["../../src/client/thread-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"thread-manager.js","sourceRoot":"","sources":["../../src/client/thread-manager.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -9,10 +9,10 @@ export { OpenAIServer, createOpenAIServer } from './server/api-server.js';
9
9
  export type { OpenAIServerConfig } from './server/api-server.js';
10
10
  export { formatOpenAIError } from './server/middleware/error-handler.js';
11
11
  export type { AuthConfig } from './server/middleware/auth.js';
12
- export { OpenAIAdapter, createOpenAIAdapter } from './client/openai-adapter.js';
13
- export type { StreamEventType, StreamEmitterEvents } from './client/openai-adapter.js';
12
+ export { OpenAIAdapter, createOpenAIAdapter, COGITATOR_MODEL_ID } from './client/openai-adapter.js';
13
+ export type { StreamEventType, StreamEventData, StreamEmitterEvents, RunStreamEvent, OpenAIAdapterOptions, } from './client/openai-adapter.js';
14
14
  export { ThreadManager } from './client/thread-manager.js';
15
- export type { StoredThread, StoredAssistant } from './client/thread-manager.js';
15
+ export type { StoredThread, StoredAssistant, LLMThreadMessage, CreateAssistantParams, UpdateAssistantParams, } from './client/thread-manager.js';
16
16
  export { InMemoryThreadStorage, RedisThreadStorage, PostgresThreadStorage, createThreadStorage, } from './client/storage.js';
17
17
  export type { ThreadStorage, StoredFile, RedisThreadStorageConfig, PostgresThreadStorageConfig, } from './client/storage.js';
18
18
  export type { OpenAIError, ListResponse, Assistant, AssistantTool, FunctionDefinition, ResponseFormat, CreateAssistantRequest, UpdateAssistantRequest, Thread, ToolResources, CreateThreadRequest, Message, MessageContent, TextContent, TextAnnotation, Attachment, CreateMessageRequest, MessageContentPart, Run, RunStatus, RequiredAction, ToolCall, RunError, Usage, ToolChoice, CreateRunRequest, SubmitToolOutputsRequest, ToolOutput, RunStep, StepDetails, StepToolCall, FileObject, FilePurpose, UploadFileRequest, StreamEvent, MessageDelta, RunStepDelta, MessageContentDelta, ImageFileContent, ImageUrlContent, JsonSchema, IncompleteDetails, TruncationStrategy, } from './types/openai-types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACvE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE7E,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,aAAa,EACb,UAAU,EACV,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,WAAW,EACX,YAAY,EACZ,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,MAAM,EACN,aAAa,EACb,mBAAmB,EACnB,OAAO,EACP,cAAc,EACd,WAAW,EACX,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,GAAG,EACH,SAAS,EACT,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB,wBAAwB,EACxB,UAAU,EACV,OAAO,EACP,WAAW,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACvE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACjG,YAAY,EACV,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,YAAY,EACV,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,aAAa,EACb,UAAU,EACV,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,WAAW,EACX,YAAY,EACZ,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,MAAM,EACN,aAAa,EACb,mBAAmB,EACnB,OAAO,EACP,cAAc,EACd,WAAW,EACX,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,GAAG,EACH,SAAS,EACT,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB,wBAAwB,EACxB,UAAU,EACV,OAAO,EACP,WAAW,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@
7
7
  */
8
8
  export { OpenAIServer, createOpenAIServer } from './server/api-server.js';
9
9
  export { formatOpenAIError } from './server/middleware/error-handler.js';
10
- export { OpenAIAdapter, createOpenAIAdapter } from './client/openai-adapter.js';
10
+ export { OpenAIAdapter, createOpenAIAdapter, COGITATOR_MODEL_ID } from './client/openai-adapter.js';
11
11
  export { ThreadManager } from './client/thread-manager.js';
12
12
  export { InMemoryThreadStorage, RedisThreadStorage, PostgresThreadStorage, createThreadStorage, } from './client/storage.js';
13
13
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAGtE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAGtE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAQjG,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AASxD,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC"}
@@ -3,8 +3,10 @@
3
3
  *
4
4
  * Exposes Cogitator as an OpenAI Assistants API compatible server.
5
5
  */
6
+ import { type FastifyInstance } from 'fastify';
6
7
  import type { Cogitator } from '@cogitator-ai/core';
7
8
  import type { Tool } from '@cogitator-ai/types';
9
+ import type { ThreadStorage } from '../client/storage.js';
8
10
  import { OpenAIAdapter } from '../client/openai-adapter.js';
9
11
  export interface OpenAIServerConfig {
10
12
  /** Port to listen on */
@@ -15,6 +17,15 @@ export interface OpenAIServerConfig {
15
17
  apiKeys?: string[];
16
18
  /** Tools to make available */
17
19
  tools?: Tool[];
20
+ /**
21
+ * Cogitator model used for assistants/runs that request the advertised
22
+ * `cogitator` model id (e.g. 'openai/gpt-6.1-sol', 'ollama/qwen3:8b')
23
+ */
24
+ defaultModel?: string;
25
+ /** Maximum upload size for POST /v1/files in bytes (default: 512 MB) */
26
+ maxFileSize?: number;
27
+ /** Persistence backend (connect it before passing). Default: in-memory */
28
+ storage?: ThreadStorage;
18
29
  /** Enable request logging */
19
30
  logging?: boolean;
20
31
  /** CORS configuration */
@@ -48,6 +59,8 @@ export declare class OpenAIServer {
48
59
  private config;
49
60
  private adapter;
50
61
  private started;
62
+ private ready;
63
+ private boundPort?;
51
64
  constructor(cogitator: Cogitator, config?: OpenAIServerConfig);
52
65
  /**
53
66
  * Set up the Fastify server
@@ -62,13 +75,22 @@ export declare class OpenAIServer {
62
75
  */
63
76
  stop(): Promise<void>;
64
77
  /**
65
- * Get the server URL
78
+ * Get the server URL (uses the bound port, so `port: 0` works)
66
79
  */
67
80
  getUrl(): string;
68
81
  /**
69
82
  * Get the OpenAI-compatible base URL
70
83
  */
71
84
  getBaseUrl(): string;
85
+ /**
86
+ * Resolves once all routes and plugins are registered (start() awaits it).
87
+ * Useful for `fastify.inject`-style testing via {@link getFastify}.
88
+ */
89
+ waitUntilReady(): Promise<void>;
90
+ /**
91
+ * Get the underlying Fastify instance
92
+ */
93
+ getFastify(): FastifyInstance;
72
94
  /**
73
95
  * Check if server is running
74
96
  */
@@ -1 +1 @@
1
- {"version":3,"file":"api-server.d.ts","sourceRoot":"","sources":["../../src/server/api-server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAQzD,MAAM,WAAW,kBAAkB;IACjC,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IAEf,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,yBAAyB;IACzB,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC;QACrC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,OAAO,CAAS;gBAEZ,SAAS,EAAE,SAAS,EAAE,MAAM,GAAE,kBAAuB;IA8BjE;;OAEG;YACW,WAAW;IA2CzB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,UAAU,IAAI,aAAa;CAG5B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,EACpB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,YAAY,CAEd"}
1
+ {"version":3,"file":"api-server.d.ts","sourceRoot":"","sources":["../../src/server/api-server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAsB,MAAM,0BAA0B,CAAC;AAQ7E,MAAM,WAAW,kBAAkB;IACjC,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IAEf;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,yBAAyB;IACzB,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC;QACrC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,MAAM,CACyC;IACvD,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAS;gBAEf,SAAS,EAAE,SAAS,EAAE,MAAM,GAAE,kBAAuB;IA2BjE;;OAEG;YACW,WAAW;IA4CzB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B;;OAEG;IACH,MAAM,IAAI,MAAM;IAOhB;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrC;;OAEG;IACH,UAAU,IAAI,eAAe;IAI7B;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,UAAU,IAAI,aAAa;CAG5B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,EACpB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,YAAY,CAEd"}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import Fastify from 'fastify';
7
7
  import fastifyCors from '@fastify/cors';
8
- import { OpenAIAdapter } from '../client/openai-adapter.js';
8
+ import { OpenAIAdapter, COGITATOR_MODEL_ID } from '../client/openai-adapter.js';
9
9
  import { createAuthMiddleware } from './middleware/auth.js';
10
10
  import { errorHandler, notFoundHandler } from './middleware/error-handler.js';
11
11
  import { registerAssistantRoutes } from './routes/assistants.js';
@@ -37,31 +37,30 @@ export class OpenAIServer {
37
37
  config;
38
38
  adapter;
39
39
  started = false;
40
+ ready;
41
+ boundPort;
40
42
  constructor(cogitator, config = {}) {
41
43
  this.config = {
42
44
  port: config.port ?? 8080,
43
45
  host: config.host ?? '0.0.0.0',
44
46
  apiKeys: config.apiKeys ?? [],
45
47
  tools: config.tools ?? [],
48
+ defaultModel: config.defaultModel,
49
+ storage: config.storage,
50
+ maxFileSize: config.maxFileSize ?? 512 * 1024 * 1024,
46
51
  logging: config.logging ?? false,
47
52
  cors: config.cors ?? { origin: true },
48
53
  };
49
- this.adapter = new OpenAIAdapter(cogitator, { tools: this.config.tools });
54
+ this.adapter = new OpenAIAdapter(cogitator, {
55
+ tools: this.config.tools,
56
+ defaultModel: this.config.defaultModel,
57
+ storage: this.config.storage,
58
+ });
50
59
  this.fastify = Fastify({
51
- logger: this.config.logging
52
- ? {
53
- level: 'info',
54
- transport: {
55
- target: 'pino-pretty',
56
- options: {
57
- translateTime: 'HH:MM:ss Z',
58
- ignore: 'pid,hostname',
59
- },
60
- },
61
- }
62
- : false,
60
+ logger: this.config.logging ? { level: 'info' } : false,
63
61
  });
64
- void this.setupServer();
62
+ this.ready = this.setupServer();
63
+ this.ready.catch(() => { });
65
64
  }
66
65
  /**
67
66
  * Set up the Fastify server
@@ -73,13 +72,14 @@ export class OpenAIServer {
73
72
  });
74
73
  await this.fastify.register(import('@fastify/multipart'), {
75
74
  limits: {
76
- fileSize: 512 * 1024 * 1024,
75
+ fileSize: this.config.maxFileSize,
77
76
  },
78
77
  });
79
78
  if (this.config.apiKeys.length > 0) {
80
79
  const authConfig = {
81
80
  apiKeys: this.config.apiKeys,
82
81
  required: true,
82
+ publicPaths: ['/health'],
83
83
  };
84
84
  this.fastify.addHook('preHandler', createAuthMiddleware(authConfig));
85
85
  }
@@ -90,7 +90,7 @@ export class OpenAIServer {
90
90
  object: 'list',
91
91
  data: [
92
92
  {
93
- id: 'cogitator',
93
+ id: COGITATOR_MODEL_ID,
94
94
  object: 'model',
95
95
  created: Math.floor(Date.now() / 1000),
96
96
  owned_by: 'cogitator',
@@ -109,13 +109,17 @@ export class OpenAIServer {
109
109
  if (this.started) {
110
110
  throw new Error('Server already started');
111
111
  }
112
+ await this.ready;
112
113
  await this.fastify.listen({
113
114
  port: this.config.port,
114
115
  host: this.config.host,
115
116
  });
117
+ const address = this.fastify.server.address();
118
+ this.boundPort = typeof address === 'object' && address ? address.port : this.config.port;
116
119
  this.started = true;
117
- console.log(`[OpenAI Server] Listening on http://${this.config.host}:${this.config.port}`);
118
- console.log(`[OpenAI Server] Use with OpenAI SDK: baseURL = "http://localhost:${this.config.port}/v1"`);
120
+ if (this.config.logging) {
121
+ this.fastify.log.info(`OpenAI-compatible API available at ${this.getBaseUrl()}`);
122
+ }
119
123
  }
120
124
  /**
121
125
  * Stop the server
@@ -126,19 +130,34 @@ export class OpenAIServer {
126
130
  }
127
131
  await this.fastify.close();
128
132
  this.started = false;
129
- console.log('[OpenAI Server] Stopped');
130
133
  }
131
134
  /**
132
- * Get the server URL
135
+ * Get the server URL (uses the bound port, so `port: 0` works)
133
136
  */
134
137
  getUrl() {
135
- return `http://${this.config.host}:${this.config.port}`;
138
+ const host = this.config.host === '0.0.0.0' || this.config.host === '::' ? 'localhost' : this.config.host;
139
+ const formattedHost = host.includes(':') ? `[${host}]` : host;
140
+ return `http://${formattedHost}:${this.boundPort ?? this.config.port}`;
136
141
  }
137
142
  /**
138
143
  * Get the OpenAI-compatible base URL
139
144
  */
140
145
  getBaseUrl() {
141
- return `http://${this.config.host}:${this.config.port}/v1`;
146
+ return `${this.getUrl()}/v1`;
147
+ }
148
+ /**
149
+ * Resolves once all routes and plugins are registered (start() awaits it).
150
+ * Useful for `fastify.inject`-style testing via {@link getFastify}.
151
+ */
152
+ async waitUntilReady() {
153
+ await this.ready;
154
+ await this.fastify.ready();
155
+ }
156
+ /**
157
+ * Get the underlying Fastify instance
158
+ */
159
+ getFastify() {
160
+ return this.fastify;
142
161
  }
143
162
  /**
144
163
  * Check if server is running