@push.rocks/smartai 0.13.3 → 2.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 (98) hide show
  1. package/dist_ts/00_commitinfo_data.js +3 -3
  2. package/dist_ts/index.d.ts +6 -11
  3. package/dist_ts/index.js +6 -12
  4. package/dist_ts/plugins.d.ts +10 -15
  5. package/dist_ts/plugins.js +13 -19
  6. package/dist_ts/smartai.classes.smartai.d.ts +7 -0
  7. package/dist_ts/smartai.classes.smartai.js +51 -0
  8. package/dist_ts/smartai.interfaces.d.ts +41 -0
  9. package/dist_ts/smartai.interfaces.js +2 -0
  10. package/dist_ts/smartai.middleware.anthropic.d.ts +7 -0
  11. package/dist_ts/smartai.middleware.anthropic.js +36 -0
  12. package/dist_ts/smartai.provider.ollama.d.ts +8 -0
  13. package/dist_ts/smartai.provider.ollama.js +378 -0
  14. package/dist_ts_audio/index.d.ts +9 -0
  15. package/dist_ts_audio/index.js +15 -0
  16. package/dist_ts_audio/plugins.d.ts +2 -0
  17. package/dist_ts_audio/plugins.js +3 -0
  18. package/dist_ts_document/index.d.ts +11 -0
  19. package/dist_ts_document/index.js +45 -0
  20. package/dist_ts_document/plugins.d.ts +3 -0
  21. package/dist_ts_document/plugins.js +4 -0
  22. package/dist_ts_image/index.d.ts +46 -0
  23. package/dist_ts_image/index.js +110 -0
  24. package/dist_ts_image/plugins.d.ts +3 -0
  25. package/dist_ts_image/plugins.js +4 -0
  26. package/dist_ts_research/index.d.ts +19 -0
  27. package/dist_ts_research/index.js +98 -0
  28. package/dist_ts_research/plugins.d.ts +2 -0
  29. package/dist_ts_research/plugins.js +3 -0
  30. package/dist_ts_vision/index.d.ts +8 -0
  31. package/dist_ts_vision/index.js +21 -0
  32. package/dist_ts_vision/plugins.d.ts +2 -0
  33. package/dist_ts_vision/plugins.js +3 -0
  34. package/package.json +50 -22
  35. package/readme.hints.md +34 -88
  36. package/readme.md +284 -547
  37. package/ts/00_commitinfo_data.ts +2 -2
  38. package/ts/index.ts +8 -11
  39. package/ts/plugins.ts +19 -35
  40. package/ts/smartai.classes.smartai.ts +51 -0
  41. package/ts/smartai.interfaces.ts +53 -0
  42. package/ts/smartai.middleware.anthropic.ts +38 -0
  43. package/ts/smartai.provider.ollama.ts +426 -0
  44. package/ts_audio/index.ts +24 -0
  45. package/ts_audio/plugins.ts +2 -0
  46. package/ts_document/index.ts +61 -0
  47. package/ts_document/plugins.ts +3 -0
  48. package/ts_image/index.ts +147 -0
  49. package/ts_image/plugins.ts +3 -0
  50. package/ts_research/index.ts +120 -0
  51. package/ts_research/plugins.ts +2 -0
  52. package/ts_vision/index.ts +29 -0
  53. package/ts_vision/plugins.ts +2 -0
  54. package/dist_ts/abstract.classes.multimodal.d.ts +0 -212
  55. package/dist_ts/abstract.classes.multimodal.js +0 -43
  56. package/dist_ts/classes.conversation.d.ts +0 -31
  57. package/dist_ts/classes.conversation.js +0 -150
  58. package/dist_ts/classes.smartai.d.ts +0 -59
  59. package/dist_ts/classes.smartai.js +0 -139
  60. package/dist_ts/classes.tts.d.ts +0 -6
  61. package/dist_ts/classes.tts.js +0 -10
  62. package/dist_ts/interfaces.d.ts +0 -1
  63. package/dist_ts/interfaces.js +0 -2
  64. package/dist_ts/paths.d.ts +0 -2
  65. package/dist_ts/paths.js +0 -4
  66. package/dist_ts/provider.anthropic.d.ts +0 -48
  67. package/dist_ts/provider.anthropic.js +0 -369
  68. package/dist_ts/provider.elevenlabs.d.ts +0 -43
  69. package/dist_ts/provider.elevenlabs.js +0 -64
  70. package/dist_ts/provider.exo.d.ts +0 -40
  71. package/dist_ts/provider.exo.js +0 -116
  72. package/dist_ts/provider.groq.d.ts +0 -39
  73. package/dist_ts/provider.groq.js +0 -178
  74. package/dist_ts/provider.mistral.d.ts +0 -61
  75. package/dist_ts/provider.mistral.js +0 -288
  76. package/dist_ts/provider.ollama.d.ts +0 -141
  77. package/dist_ts/provider.ollama.js +0 -529
  78. package/dist_ts/provider.openai.d.ts +0 -62
  79. package/dist_ts/provider.openai.js +0 -403
  80. package/dist_ts/provider.perplexity.d.ts +0 -37
  81. package/dist_ts/provider.perplexity.js +0 -215
  82. package/dist_ts/provider.xai.d.ts +0 -52
  83. package/dist_ts/provider.xai.js +0 -160
  84. package/ts/abstract.classes.multimodal.ts +0 -240
  85. package/ts/classes.conversation.ts +0 -176
  86. package/ts/classes.smartai.ts +0 -187
  87. package/ts/classes.tts.ts +0 -15
  88. package/ts/interfaces.ts +0 -0
  89. package/ts/paths.ts +0 -4
  90. package/ts/provider.anthropic.ts +0 -446
  91. package/ts/provider.elevenlabs.ts +0 -116
  92. package/ts/provider.exo.ts +0 -155
  93. package/ts/provider.groq.ts +0 -219
  94. package/ts/provider.mistral.ts +0 -352
  95. package/ts/provider.ollama.ts +0 -705
  96. package/ts/provider.openai.ts +0 -462
  97. package/ts/provider.perplexity.ts +0 -259
  98. package/ts/provider.xai.ts +0 -214
@@ -1,529 +0,0 @@
1
- import * as plugins from './plugins.js';
2
- import * as paths from './paths.js';
3
- import { MultiModalModel } from './abstract.classes.multimodal.js';
4
- export class OllamaProvider extends MultiModalModel {
5
- constructor(optionsArg = {}) {
6
- super();
7
- this.options = optionsArg;
8
- this.baseUrl = optionsArg.baseUrl || 'http://localhost:11434';
9
- this.model = optionsArg.model || 'llama2';
10
- this.visionModel = optionsArg.visionModel || 'llava';
11
- this.defaultOptions = optionsArg.defaultOptions || {};
12
- this.defaultTimeout = optionsArg.defaultTimeout || 120000;
13
- }
14
- async start() {
15
- await super.start();
16
- // Verify Ollama is running
17
- try {
18
- const response = await fetch(`${this.baseUrl}/api/tags`);
19
- if (!response.ok) {
20
- throw new Error('Failed to connect to Ollama server');
21
- }
22
- }
23
- catch (error) {
24
- throw new Error(`Failed to connect to Ollama server at ${this.baseUrl}: ${error.message}`);
25
- }
26
- }
27
- async stop() {
28
- await super.stop();
29
- }
30
- async chatStream(input) {
31
- // Create a TextDecoder to handle incoming chunks
32
- const decoder = new TextDecoder();
33
- let buffer = '';
34
- let currentMessage = null;
35
- // Create a TransformStream to process the input
36
- const transform = new TransformStream({
37
- transform: async (chunk, controller) => {
38
- buffer += decoder.decode(chunk, { stream: true });
39
- // Try to parse complete JSON messages from the buffer
40
- while (true) {
41
- const newlineIndex = buffer.indexOf('\n');
42
- if (newlineIndex === -1)
43
- break;
44
- const line = buffer.slice(0, newlineIndex);
45
- buffer = buffer.slice(newlineIndex + 1);
46
- if (line.trim()) {
47
- try {
48
- const message = JSON.parse(line);
49
- currentMessage = {
50
- role: message.role || 'user',
51
- content: message.content || '',
52
- };
53
- }
54
- catch (e) {
55
- console.error('Failed to parse message:', e);
56
- }
57
- }
58
- }
59
- // If we have a complete message, send it to Ollama
60
- if (currentMessage) {
61
- const response = await fetch(`${this.baseUrl}/api/chat`, {
62
- method: 'POST',
63
- headers: {
64
- 'Content-Type': 'application/json',
65
- },
66
- body: JSON.stringify({
67
- model: this.model,
68
- messages: [{ role: currentMessage.role, content: currentMessage.content }],
69
- stream: true,
70
- }),
71
- });
72
- // Process each chunk from Ollama
73
- const reader = response.body?.getReader();
74
- if (reader) {
75
- try {
76
- while (true) {
77
- const { done, value } = await reader.read();
78
- if (done)
79
- break;
80
- const chunk = new TextDecoder().decode(value);
81
- const lines = chunk.split('\n');
82
- for (const line of lines) {
83
- if (line.trim()) {
84
- try {
85
- const parsed = JSON.parse(line);
86
- const content = parsed.message?.content;
87
- if (content) {
88
- controller.enqueue(content);
89
- }
90
- }
91
- catch (e) {
92
- console.error('Failed to parse Ollama response:', e);
93
- }
94
- }
95
- }
96
- }
97
- }
98
- finally {
99
- reader.releaseLock();
100
- }
101
- }
102
- currentMessage = null;
103
- }
104
- },
105
- flush(controller) {
106
- if (buffer) {
107
- try {
108
- const message = JSON.parse(buffer);
109
- controller.enqueue(message.content || '');
110
- }
111
- catch (e) {
112
- console.error('Failed to parse remaining buffer:', e);
113
- }
114
- }
115
- }
116
- });
117
- // Connect the input to our transform stream
118
- return input.pipeThrough(transform);
119
- }
120
- // Implementing the synchronous chat interaction
121
- async chat(optionsArg) {
122
- // Format messages for Ollama
123
- const historyMessages = optionsArg.messageHistory.map((msg) => {
124
- const formatted = {
125
- role: msg.role,
126
- content: msg.content,
127
- };
128
- if (msg.images && msg.images.length > 0) {
129
- formatted.images = msg.images;
130
- }
131
- if (msg.reasoning) {
132
- formatted.reasoning = msg.reasoning;
133
- }
134
- return formatted;
135
- });
136
- // Build user message with optional images
137
- const userMessage = {
138
- role: 'user',
139
- content: optionsArg.userMessage,
140
- };
141
- if (optionsArg.images && optionsArg.images.length > 0) {
142
- userMessage.images = optionsArg.images;
143
- }
144
- const messages = [
145
- { role: 'system', content: optionsArg.systemMessage },
146
- ...historyMessages,
147
- userMessage,
148
- ];
149
- // Build request body - include think parameter if set
150
- const requestBody = {
151
- model: this.model,
152
- messages: messages,
153
- stream: false,
154
- options: this.defaultOptions,
155
- };
156
- // Add think parameter for reasoning models (GPT-OSS, QwQ, etc.)
157
- if (this.defaultOptions.think !== undefined) {
158
- requestBody.think = this.defaultOptions.think;
159
- }
160
- // Make API call to Ollama with defaultOptions and timeout
161
- const response = await fetch(`${this.baseUrl}/api/chat`, {
162
- method: 'POST',
163
- headers: {
164
- 'Content-Type': 'application/json',
165
- },
166
- body: JSON.stringify(requestBody),
167
- signal: AbortSignal.timeout(this.defaultTimeout),
168
- });
169
- if (!response.ok) {
170
- throw new Error(`Ollama API error: ${response.statusText}`);
171
- }
172
- const result = await response.json();
173
- return {
174
- role: 'assistant',
175
- message: result.message.content,
176
- reasoning: result.message.thinking || result.message.reasoning,
177
- };
178
- }
179
- /**
180
- * Streaming chat with token callback (implements MultiModalModel interface)
181
- * Calls onToken for each token generated during the response
182
- */
183
- async chatStreaming(optionsArg) {
184
- const onToken = optionsArg.onToken;
185
- // Use existing collectStreamResponse with callback, including images
186
- const response = await this.collectStreamResponse({
187
- systemMessage: optionsArg.systemMessage,
188
- userMessage: optionsArg.userMessage,
189
- messageHistory: optionsArg.messageHistory,
190
- images: optionsArg.images,
191
- }, (chunk) => {
192
- if (onToken) {
193
- if (chunk.thinking)
194
- onToken(chunk.thinking);
195
- if (chunk.content)
196
- onToken(chunk.content);
197
- }
198
- });
199
- return {
200
- role: 'assistant',
201
- message: response.message,
202
- reasoning: response.thinking,
203
- };
204
- }
205
- /**
206
- * Streaming chat with async iteration and options support
207
- */
208
- async chatStreamResponse(optionsArg) {
209
- const model = optionsArg.model || this.model;
210
- const timeout = optionsArg.timeout || this.defaultTimeout;
211
- const modelOptions = { ...this.defaultOptions, ...optionsArg.options };
212
- // Format history messages with optional images, reasoning, and tool_calls
213
- const historyMessages = optionsArg.messageHistory.map((msg) => {
214
- const formatted = {
215
- role: msg.role,
216
- content: msg.content,
217
- };
218
- if (msg.images && msg.images.length > 0) {
219
- formatted.images = msg.images;
220
- }
221
- if (msg.reasoning) {
222
- formatted.reasoning = msg.reasoning;
223
- }
224
- // CRITICAL: Include tool_calls in history for native tool calling
225
- // Without this, the model doesn't know it already called a tool and may call it again
226
- if (msg.tool_calls && Array.isArray(msg.tool_calls)) {
227
- formatted.tool_calls = msg.tool_calls;
228
- }
229
- return formatted;
230
- });
231
- // Build user message with optional images
232
- const userMessage = {
233
- role: 'user',
234
- content: optionsArg.userMessage,
235
- };
236
- if (optionsArg.images && optionsArg.images.length > 0) {
237
- userMessage.images = optionsArg.images;
238
- }
239
- const messages = [
240
- { role: 'system', content: optionsArg.systemMessage },
241
- ...historyMessages,
242
- userMessage,
243
- ];
244
- // Build request body with optional tools and think parameters
245
- const requestBody = {
246
- model,
247
- messages,
248
- stream: true,
249
- options: modelOptions,
250
- };
251
- // Add think parameter for reasoning models (GPT-OSS, QwQ, etc.)
252
- if (modelOptions.think !== undefined) {
253
- requestBody.think = modelOptions.think;
254
- }
255
- // Add tools for native function calling
256
- if (optionsArg.tools && optionsArg.tools.length > 0) {
257
- requestBody.tools = optionsArg.tools;
258
- }
259
- const response = await fetch(`${this.baseUrl}/api/chat`, {
260
- method: 'POST',
261
- headers: { 'Content-Type': 'application/json' },
262
- body: JSON.stringify(requestBody),
263
- signal: AbortSignal.timeout(timeout),
264
- });
265
- if (!response.ok) {
266
- throw new Error(`Ollama API error: ${response.status}`);
267
- }
268
- const reader = response.body.getReader();
269
- const decoder = new TextDecoder();
270
- return {
271
- [Symbol.asyncIterator]: async function* () {
272
- let buffer = '';
273
- try {
274
- while (true) {
275
- const { done, value } = await reader.read();
276
- if (done)
277
- break;
278
- buffer += decoder.decode(value, { stream: true });
279
- const lines = buffer.split('\n');
280
- buffer = lines.pop() || '';
281
- for (const line of lines) {
282
- if (!line.trim())
283
- continue;
284
- try {
285
- const json = JSON.parse(line);
286
- // Parse tool_calls from response
287
- let toolCalls;
288
- if (json.message?.tool_calls && Array.isArray(json.message.tool_calls)) {
289
- toolCalls = json.message.tool_calls.map((tc) => ({
290
- function: {
291
- name: tc.function?.name || '',
292
- arguments: typeof tc.function?.arguments === 'string'
293
- ? JSON.parse(tc.function.arguments)
294
- : tc.function?.arguments || {},
295
- index: tc.index,
296
- },
297
- }));
298
- }
299
- yield {
300
- content: json.message?.content || '',
301
- thinking: json.message?.thinking,
302
- toolCalls,
303
- done: json.done || false,
304
- stats: json.done ? {
305
- totalDuration: json.total_duration,
306
- evalCount: json.eval_count,
307
- } : undefined,
308
- };
309
- }
310
- catch { /* skip malformed */ }
311
- }
312
- }
313
- }
314
- finally {
315
- reader.releaseLock();
316
- }
317
- }
318
- };
319
- }
320
- /**
321
- * Stream and collect full response with optional progress callback
322
- */
323
- async collectStreamResponse(optionsArg, onChunk) {
324
- const stream = await this.chatStreamResponse(optionsArg);
325
- let content = '';
326
- let thinking = '';
327
- let toolCalls = [];
328
- let stats;
329
- for await (const chunk of stream) {
330
- if (chunk.content)
331
- content += chunk.content;
332
- if (chunk.thinking)
333
- thinking += chunk.thinking;
334
- if (chunk.toolCalls)
335
- toolCalls = toolCalls.concat(chunk.toolCalls);
336
- if (chunk.stats)
337
- stats = chunk.stats;
338
- if (onChunk)
339
- onChunk(chunk);
340
- }
341
- return {
342
- role: 'assistant',
343
- message: content,
344
- thinking: thinking || undefined,
345
- toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
346
- stats,
347
- };
348
- }
349
- /**
350
- * Non-streaming chat with full options support
351
- */
352
- async chatWithOptions(optionsArg) {
353
- const model = optionsArg.model || this.model;
354
- const timeout = optionsArg.timeout || this.defaultTimeout;
355
- const modelOptions = { ...this.defaultOptions, ...optionsArg.options };
356
- // Format history messages with optional images, reasoning, tool_calls, and tool role
357
- const historyMessages = optionsArg.messageHistory.map((msg) => {
358
- // Handle tool result messages
359
- if (msg.role === 'tool') {
360
- return {
361
- role: 'tool',
362
- content: msg.content,
363
- tool_name: msg.toolName,
364
- };
365
- }
366
- const formatted = {
367
- role: msg.role,
368
- content: msg.content,
369
- };
370
- if (msg.images && msg.images.length > 0) {
371
- formatted.images = msg.images;
372
- }
373
- if (msg.reasoning) {
374
- formatted.reasoning = msg.reasoning;
375
- }
376
- // CRITICAL: Include tool_calls in history for native tool calling
377
- // Without this, the model doesn't know it already called a tool and may call it again
378
- if (msg.tool_calls && Array.isArray(msg.tool_calls)) {
379
- formatted.tool_calls = msg.tool_calls;
380
- }
381
- return formatted;
382
- });
383
- // Build user message with optional images
384
- const userMessage = {
385
- role: 'user',
386
- content: optionsArg.userMessage,
387
- };
388
- if (optionsArg.images && optionsArg.images.length > 0) {
389
- userMessage.images = optionsArg.images;
390
- }
391
- const messages = [
392
- { role: 'system', content: optionsArg.systemMessage },
393
- ...historyMessages,
394
- userMessage,
395
- ];
396
- // Build request body with optional tools and think parameters
397
- const requestBody = {
398
- model,
399
- messages,
400
- stream: false,
401
- options: modelOptions,
402
- };
403
- // Add think parameter for reasoning models (GPT-OSS, QwQ, etc.)
404
- if (modelOptions.think !== undefined) {
405
- requestBody.think = modelOptions.think;
406
- }
407
- // Add tools for native function calling
408
- if (optionsArg.tools && optionsArg.tools.length > 0) {
409
- requestBody.tools = optionsArg.tools;
410
- }
411
- const response = await fetch(`${this.baseUrl}/api/chat`, {
412
- method: 'POST',
413
- headers: { 'Content-Type': 'application/json' },
414
- body: JSON.stringify(requestBody),
415
- signal: AbortSignal.timeout(timeout),
416
- });
417
- if (!response.ok) {
418
- throw new Error(`Ollama API error: ${response.statusText}`);
419
- }
420
- const result = await response.json();
421
- // Parse tool_calls from response
422
- let toolCalls;
423
- if (result.message?.tool_calls && Array.isArray(result.message.tool_calls)) {
424
- toolCalls = result.message.tool_calls.map((tc) => ({
425
- function: {
426
- name: tc.function?.name || '',
427
- arguments: typeof tc.function?.arguments === 'string'
428
- ? JSON.parse(tc.function.arguments)
429
- : tc.function?.arguments || {},
430
- index: tc.index,
431
- },
432
- }));
433
- }
434
- return {
435
- role: 'assistant',
436
- message: result.message.content || '',
437
- thinking: result.message.thinking,
438
- toolCalls,
439
- stats: {
440
- totalDuration: result.total_duration,
441
- evalCount: result.eval_count,
442
- },
443
- };
444
- }
445
- async audio(optionsArg) {
446
- throw new Error('Audio generation is not supported by Ollama.');
447
- }
448
- async vision(optionsArg) {
449
- const base64Image = optionsArg.image.toString('base64');
450
- const response = await fetch(`${this.baseUrl}/api/chat`, {
451
- method: 'POST',
452
- headers: {
453
- 'Content-Type': 'application/json',
454
- },
455
- body: JSON.stringify({
456
- model: this.visionModel,
457
- messages: [{
458
- role: 'user',
459
- content: optionsArg.prompt,
460
- images: [base64Image]
461
- }],
462
- stream: false
463
- }),
464
- });
465
- if (!response.ok) {
466
- throw new Error(`Ollama API error: ${response.statusText}`);
467
- }
468
- const result = await response.json();
469
- return result.message.content;
470
- }
471
- async document(optionsArg) {
472
- // Ensure SmartPdf is initialized before processing documents
473
- await this.ensureSmartpdfReady();
474
- // Convert PDF documents to images using SmartPDF
475
- let documentImageBytesArray = [];
476
- for (const pdfDocument of optionsArg.pdfDocuments) {
477
- const documentImageArray = await this.smartpdfInstance.convertPDFToPngBytes(pdfDocument);
478
- documentImageBytesArray = documentImageBytesArray.concat(documentImageArray);
479
- }
480
- // Convert images to base64
481
- const base64Images = documentImageBytesArray.map(bytes => Buffer.from(bytes).toString('base64'));
482
- // Send request to Ollama with images
483
- const response = await fetch(`${this.baseUrl}/api/chat`, {
484
- method: 'POST',
485
- headers: {
486
- 'Content-Type': 'application/json',
487
- },
488
- body: JSON.stringify({
489
- model: this.visionModel,
490
- messages: [
491
- { role: 'system', content: optionsArg.systemMessage },
492
- ...optionsArg.messageHistory,
493
- {
494
- role: 'user',
495
- content: optionsArg.userMessage,
496
- images: base64Images
497
- }
498
- ],
499
- stream: false
500
- }),
501
- });
502
- if (!response.ok) {
503
- throw new Error(`Ollama API error: ${response.statusText}`);
504
- }
505
- const result = await response.json();
506
- return {
507
- message: {
508
- role: 'assistant',
509
- content: result.message.content
510
- }
511
- };
512
- }
513
- async research(optionsArg) {
514
- throw new Error('Research capabilities are not yet supported by Ollama provider.');
515
- }
516
- /**
517
- * Image generation is not supported by Ollama
518
- */
519
- async imageGenerate(optionsArg) {
520
- throw new Error('Image generation is not supported by Ollama. Please use OpenAI provider for image generation.');
521
- }
522
- /**
523
- * Image editing is not supported by Ollama
524
- */
525
- async imageEdit(optionsArg) {
526
- throw new Error('Image editing is not supported by Ollama. Please use OpenAI provider for image editing.');
527
- }
528
- }
529
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIub2xsYW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvcHJvdmlkZXIub2xsYW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQTBHbkUsTUFBTSxPQUFPLGNBQWUsU0FBUSxlQUFlO0lBUWpELFlBQVksYUFBcUMsRUFBRTtRQUNqRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sSUFBSSx3QkFBd0IsQ0FBQztRQUM5RCxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDO1FBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUM7UUFDckQsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDO0lBQzVELENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BCLDJCQUEyQjtRQUMzQixJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLFdBQVcsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztZQUN4RCxDQUFDO1FBQ0gsQ0FBQztRQUFD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
@@ -1,62 +0,0 @@
1
- import * as plugins from './plugins.js';
2
- export type TChatCompletionRequestMessage = {
3
- role: "system" | "user" | "assistant";
4
- content: string;
5
- };
6
- import { MultiModalModel } from './abstract.classes.multimodal.js';
7
- import type { ResearchOptions, ResearchResponse, ImageGenerateOptions, ImageEditOptions, ImageResponse } from './abstract.classes.multimodal.js';
8
- export interface IOpenaiProviderOptions {
9
- openaiToken: string;
10
- chatModel?: string;
11
- audioModel?: string;
12
- visionModel?: string;
13
- researchModel?: string;
14
- imageModel?: string;
15
- enableWebSearch?: boolean;
16
- }
17
- export declare class OpenAiProvider extends MultiModalModel {
18
- private options;
19
- openAiApiClient: plugins.openai.default;
20
- constructor(optionsArg: IOpenaiProviderOptions);
21
- start(): Promise<void>;
22
- stop(): Promise<void>;
23
- chatStream(input: ReadableStream<Uint8Array>): Promise<ReadableStream<string>>;
24
- chat(optionsArg: {
25
- systemMessage: string;
26
- userMessage: string;
27
- messageHistory: {
28
- role: 'assistant' | 'user';
29
- content: string;
30
- }[];
31
- }): Promise<{
32
- role: "assistant";
33
- message: string;
34
- }>;
35
- audio(optionsArg: {
36
- message: string;
37
- }): Promise<NodeJS.ReadableStream>;
38
- document(optionsArg: {
39
- systemMessage: string;
40
- userMessage: string;
41
- pdfDocuments: Uint8Array[];
42
- messageHistory: {
43
- role: 'assistant' | 'user';
44
- content: any;
45
- }[];
46
- }): Promise<{
47
- message: plugins.openai.OpenAI.Chat.Completions.ChatCompletionMessage;
48
- }>;
49
- vision(optionsArg: {
50
- image: Buffer;
51
- prompt: string;
52
- }): Promise<string>;
53
- research(optionsArg: ResearchOptions): Promise<ResearchResponse>;
54
- /**
55
- * Image generation using OpenAI's gpt-image-1 or DALL-E models
56
- */
57
- imageGenerate(optionsArg: ImageGenerateOptions): Promise<ImageResponse>;
58
- /**
59
- * Image editing using OpenAI's gpt-image-1 or DALL-E 2 models
60
- */
61
- imageEdit(optionsArg: ImageEditOptions): Promise<ImageResponse>;
62
- }