@push.rocks/smartai 0.9.0 → 0.10.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.
- package/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/classes.conversation.d.ts +1 -0
- package/dist_ts/classes.conversation.js +12 -1
- package/dist_ts/classes.smartai.d.ts +9 -1
- package/dist_ts/classes.smartai.js +16 -1
- package/dist_ts/index.d.ts +1 -0
- package/dist_ts/index.js +2 -1
- package/dist_ts/plugins.d.ts +4 -3
- package/dist_ts/plugins.js +5 -4
- package/dist_ts/provider.mistral.d.ts +61 -0
- package/dist_ts/provider.mistral.js +288 -0
- package/dist_ts/provider.ollama.d.ts +60 -0
- package/dist_ts/provider.ollama.js +133 -3
- package/package.json +6 -5
- package/readme.hints.md +65 -1
- package/readme.md +35 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.conversation.ts +12 -0
- package/ts/classes.smartai.ts +23 -1
- package/ts/index.ts +1 -0
- package/ts/plugins.ts +4 -2
- package/ts/provider.mistral.ts +352 -0
- package/ts/provider.ollama.ts +196 -3
|
@@ -1,20 +1,80 @@
|
|
|
1
1
|
import { MultiModalModel } from './abstract.classes.multimodal.js';
|
|
2
2
|
import type { ChatOptions, ChatResponse, ChatMessage, ResearchOptions, ResearchResponse, ImageGenerateOptions, ImageEditOptions, ImageResponse } from './abstract.classes.multimodal.js';
|
|
3
|
+
/**
|
|
4
|
+
* Ollama model runtime options
|
|
5
|
+
* @see https://github.com/ollama/ollama/blob/main/docs/modelfile.md
|
|
6
|
+
*/
|
|
7
|
+
export interface IOllamaModelOptions {
|
|
8
|
+
num_ctx?: number;
|
|
9
|
+
temperature?: number;
|
|
10
|
+
top_k?: number;
|
|
11
|
+
top_p?: number;
|
|
12
|
+
repeat_penalty?: number;
|
|
13
|
+
num_predict?: number;
|
|
14
|
+
stop?: string[];
|
|
15
|
+
seed?: number;
|
|
16
|
+
}
|
|
3
17
|
export interface IOllamaProviderOptions {
|
|
4
18
|
baseUrl?: string;
|
|
5
19
|
model?: string;
|
|
6
20
|
visionModel?: string;
|
|
21
|
+
defaultOptions?: IOllamaModelOptions;
|
|
22
|
+
defaultTimeout?: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Extended chat options with Ollama-specific settings
|
|
26
|
+
*/
|
|
27
|
+
export interface IOllamaChatOptions extends ChatOptions {
|
|
28
|
+
options?: IOllamaModelOptions;
|
|
29
|
+
timeout?: number;
|
|
30
|
+
model?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Chunk emitted during streaming
|
|
34
|
+
*/
|
|
35
|
+
export interface IOllamaStreamChunk {
|
|
36
|
+
content: string;
|
|
37
|
+
thinking?: string;
|
|
38
|
+
done: boolean;
|
|
39
|
+
stats?: {
|
|
40
|
+
totalDuration?: number;
|
|
41
|
+
evalCount?: number;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Extended chat response with Ollama-specific fields
|
|
46
|
+
*/
|
|
47
|
+
export interface IOllamaChatResponse extends ChatResponse {
|
|
48
|
+
thinking?: string;
|
|
49
|
+
stats?: {
|
|
50
|
+
totalDuration?: number;
|
|
51
|
+
evalCount?: number;
|
|
52
|
+
};
|
|
7
53
|
}
|
|
8
54
|
export declare class OllamaProvider extends MultiModalModel {
|
|
9
55
|
private options;
|
|
10
56
|
private baseUrl;
|
|
11
57
|
private model;
|
|
12
58
|
private visionModel;
|
|
59
|
+
private defaultOptions;
|
|
60
|
+
private defaultTimeout;
|
|
13
61
|
constructor(optionsArg?: IOllamaProviderOptions);
|
|
14
62
|
start(): Promise<void>;
|
|
15
63
|
stop(): Promise<void>;
|
|
16
64
|
chatStream(input: ReadableStream<Uint8Array>): Promise<ReadableStream<string>>;
|
|
17
65
|
chat(optionsArg: ChatOptions): Promise<ChatResponse>;
|
|
66
|
+
/**
|
|
67
|
+
* Streaming chat with async iteration and options support
|
|
68
|
+
*/
|
|
69
|
+
chatStreamResponse(optionsArg: IOllamaChatOptions): Promise<AsyncIterable<IOllamaStreamChunk>>;
|
|
70
|
+
/**
|
|
71
|
+
* Stream and collect full response with optional progress callback
|
|
72
|
+
*/
|
|
73
|
+
collectStreamResponse(optionsArg: IOllamaChatOptions, onChunk?: (chunk: IOllamaStreamChunk) => void): Promise<IOllamaChatResponse>;
|
|
74
|
+
/**
|
|
75
|
+
* Non-streaming chat with full options support
|
|
76
|
+
*/
|
|
77
|
+
chatWithOptions(optionsArg: IOllamaChatOptions): Promise<IOllamaChatResponse>;
|
|
18
78
|
audio(optionsArg: {
|
|
19
79
|
message: string;
|
|
20
80
|
}): Promise<NodeJS.ReadableStream>;
|
|
@@ -8,6 +8,8 @@ export class OllamaProvider extends MultiModalModel {
|
|
|
8
8
|
this.baseUrl = optionsArg.baseUrl || 'http://localhost:11434';
|
|
9
9
|
this.model = optionsArg.model || 'llama2';
|
|
10
10
|
this.visionModel = optionsArg.visionModel || 'llava';
|
|
11
|
+
this.defaultOptions = optionsArg.defaultOptions || {};
|
|
12
|
+
this.defaultTimeout = optionsArg.defaultTimeout || 120000;
|
|
11
13
|
}
|
|
12
14
|
async start() {
|
|
13
15
|
await super.start();
|
|
@@ -123,7 +125,7 @@ export class OllamaProvider extends MultiModalModel {
|
|
|
123
125
|
...optionsArg.messageHistory,
|
|
124
126
|
{ role: 'user', content: optionsArg.userMessage }
|
|
125
127
|
];
|
|
126
|
-
// Make API call to Ollama
|
|
128
|
+
// Make API call to Ollama with defaultOptions and timeout
|
|
127
129
|
const response = await fetch(`${this.baseUrl}/api/chat`, {
|
|
128
130
|
method: 'POST',
|
|
129
131
|
headers: {
|
|
@@ -132,8 +134,131 @@ export class OllamaProvider extends MultiModalModel {
|
|
|
132
134
|
body: JSON.stringify({
|
|
133
135
|
model: this.model,
|
|
134
136
|
messages: messages,
|
|
135
|
-
stream: false
|
|
137
|
+
stream: false,
|
|
138
|
+
options: this.defaultOptions,
|
|
139
|
+
}),
|
|
140
|
+
signal: AbortSignal.timeout(this.defaultTimeout),
|
|
141
|
+
});
|
|
142
|
+
if (!response.ok) {
|
|
143
|
+
throw new Error(`Ollama API error: ${response.statusText}`);
|
|
144
|
+
}
|
|
145
|
+
const result = await response.json();
|
|
146
|
+
return {
|
|
147
|
+
role: 'assistant',
|
|
148
|
+
message: result.message.content,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Streaming chat with async iteration and options support
|
|
153
|
+
*/
|
|
154
|
+
async chatStreamResponse(optionsArg) {
|
|
155
|
+
const model = optionsArg.model || this.model;
|
|
156
|
+
const timeout = optionsArg.timeout || this.defaultTimeout;
|
|
157
|
+
const modelOptions = { ...this.defaultOptions, ...optionsArg.options };
|
|
158
|
+
const messages = [
|
|
159
|
+
{ role: 'system', content: optionsArg.systemMessage },
|
|
160
|
+
...optionsArg.messageHistory,
|
|
161
|
+
{ role: 'user', content: optionsArg.userMessage }
|
|
162
|
+
];
|
|
163
|
+
const response = await fetch(`${this.baseUrl}/api/chat`, {
|
|
164
|
+
method: 'POST',
|
|
165
|
+
headers: { 'Content-Type': 'application/json' },
|
|
166
|
+
body: JSON.stringify({
|
|
167
|
+
model,
|
|
168
|
+
messages,
|
|
169
|
+
stream: true,
|
|
170
|
+
options: modelOptions,
|
|
171
|
+
}),
|
|
172
|
+
signal: AbortSignal.timeout(timeout),
|
|
173
|
+
});
|
|
174
|
+
if (!response.ok) {
|
|
175
|
+
throw new Error(`Ollama API error: ${response.status}`);
|
|
176
|
+
}
|
|
177
|
+
const reader = response.body.getReader();
|
|
178
|
+
const decoder = new TextDecoder();
|
|
179
|
+
return {
|
|
180
|
+
[Symbol.asyncIterator]: async function* () {
|
|
181
|
+
let buffer = '';
|
|
182
|
+
try {
|
|
183
|
+
while (true) {
|
|
184
|
+
const { done, value } = await reader.read();
|
|
185
|
+
if (done)
|
|
186
|
+
break;
|
|
187
|
+
buffer += decoder.decode(value, { stream: true });
|
|
188
|
+
const lines = buffer.split('\n');
|
|
189
|
+
buffer = lines.pop() || '';
|
|
190
|
+
for (const line of lines) {
|
|
191
|
+
if (!line.trim())
|
|
192
|
+
continue;
|
|
193
|
+
try {
|
|
194
|
+
const json = JSON.parse(line);
|
|
195
|
+
yield {
|
|
196
|
+
content: json.message?.content || '',
|
|
197
|
+
thinking: json.message?.thinking,
|
|
198
|
+
done: json.done || false,
|
|
199
|
+
stats: json.done ? {
|
|
200
|
+
totalDuration: json.total_duration,
|
|
201
|
+
evalCount: json.eval_count,
|
|
202
|
+
} : undefined,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
catch { /* skip malformed */ }
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
finally {
|
|
210
|
+
reader.releaseLock();
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Stream and collect full response with optional progress callback
|
|
217
|
+
*/
|
|
218
|
+
async collectStreamResponse(optionsArg, onChunk) {
|
|
219
|
+
const stream = await this.chatStreamResponse(optionsArg);
|
|
220
|
+
let content = '';
|
|
221
|
+
let thinking = '';
|
|
222
|
+
let stats;
|
|
223
|
+
for await (const chunk of stream) {
|
|
224
|
+
if (chunk.content)
|
|
225
|
+
content += chunk.content;
|
|
226
|
+
if (chunk.thinking)
|
|
227
|
+
thinking += chunk.thinking;
|
|
228
|
+
if (chunk.stats)
|
|
229
|
+
stats = chunk.stats;
|
|
230
|
+
if (onChunk)
|
|
231
|
+
onChunk(chunk);
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
role: 'assistant',
|
|
235
|
+
message: content,
|
|
236
|
+
thinking: thinking || undefined,
|
|
237
|
+
stats,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Non-streaming chat with full options support
|
|
242
|
+
*/
|
|
243
|
+
async chatWithOptions(optionsArg) {
|
|
244
|
+
const model = optionsArg.model || this.model;
|
|
245
|
+
const timeout = optionsArg.timeout || this.defaultTimeout;
|
|
246
|
+
const modelOptions = { ...this.defaultOptions, ...optionsArg.options };
|
|
247
|
+
const messages = [
|
|
248
|
+
{ role: 'system', content: optionsArg.systemMessage },
|
|
249
|
+
...optionsArg.messageHistory,
|
|
250
|
+
{ role: 'user', content: optionsArg.userMessage }
|
|
251
|
+
];
|
|
252
|
+
const response = await fetch(`${this.baseUrl}/api/chat`, {
|
|
253
|
+
method: 'POST',
|
|
254
|
+
headers: { 'Content-Type': 'application/json' },
|
|
255
|
+
body: JSON.stringify({
|
|
256
|
+
model,
|
|
257
|
+
messages,
|
|
258
|
+
stream: false,
|
|
259
|
+
options: modelOptions,
|
|
136
260
|
}),
|
|
261
|
+
signal: AbortSignal.timeout(timeout),
|
|
137
262
|
});
|
|
138
263
|
if (!response.ok) {
|
|
139
264
|
throw new Error(`Ollama API error: ${response.statusText}`);
|
|
@@ -142,6 +267,11 @@ export class OllamaProvider extends MultiModalModel {
|
|
|
142
267
|
return {
|
|
143
268
|
role: 'assistant',
|
|
144
269
|
message: result.message.content,
|
|
270
|
+
thinking: result.message.thinking,
|
|
271
|
+
stats: {
|
|
272
|
+
totalDuration: result.total_duration,
|
|
273
|
+
evalCount: result.eval_count,
|
|
274
|
+
},
|
|
145
275
|
};
|
|
146
276
|
}
|
|
147
277
|
async audio(optionsArg) {
|
|
@@ -228,4 +358,4 @@ export class OllamaProvider extends MultiModalModel {
|
|
|
228
358
|
throw new Error('Image editing is not supported by Ollama. Please use OpenAI provider for image editing.');
|
|
229
359
|
}
|
|
230
360
|
}
|
|
231
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIub2xsYW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvcHJvdmlkZXIub2xsYW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQWtCbkUsTUFBTSxPQUFPLGNBQWUsU0FBUSxlQUFlO0lBTWpELFlBQVksYUFBcUMsRUFBRTtRQUNqRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sSUFBSSx3QkFBd0IsQ0FBQztRQUM5RCxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDO1FBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUM7SUFDdkQsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEIsMkJBQTJCO1FBQzNCLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sV0FBVyxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1lBQ3hELENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDN0YsQ0FB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
|
|
361
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIub2xsYW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvcHJvdmlkZXIub2xsYW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQW9FbkUsTUFBTSxPQUFPLGNBQWUsU0FBUSxlQUFlO0lBUWpELFlBQVksYUFBcUMsRUFBRTtRQUNqRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sSUFBSSx3QkFBd0IsQ0FBQztRQUM5RCxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDO1FBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUM7UUFDckQsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDO0lBQzVELENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BCLDJCQUEyQjtRQUMzQixJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLFdBQVcsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztZQUN4RCxDQUFDO1FBQ0gsQ0FBQztRQUFD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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/smartai",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "SmartAi is a versatile TypeScript library designed to facilitate integration and interaction with various AI models, offering functionalities for chat, audio generation, document processing, and vision tasks.",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
@@ -18,21 +18,22 @@
|
|
|
18
18
|
"@git.zone/tsbuild": "^4.1.2",
|
|
19
19
|
"@git.zone/tsbundle": "^2.8.1",
|
|
20
20
|
"@git.zone/tsrun": "^2.0.1",
|
|
21
|
-
"@git.zone/tstest": "^3.1.
|
|
21
|
+
"@git.zone/tstest": "^3.1.6",
|
|
22
22
|
"@push.rocks/qenv": "^6.1.3",
|
|
23
|
-
"@types/node": "^
|
|
23
|
+
"@types/node": "^25.0.9",
|
|
24
24
|
"typescript": "^5.9.3"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@anthropic-ai/sdk": "^0.71.2",
|
|
28
|
+
"@mistralai/mistralai": "^1.12.0",
|
|
28
29
|
"@push.rocks/smartarray": "^1.1.0",
|
|
29
|
-
"@push.rocks/
|
|
30
|
+
"@push.rocks/smartfs": "^1.3.1",
|
|
30
31
|
"@push.rocks/smartpath": "^6.0.0",
|
|
31
32
|
"@push.rocks/smartpdf": "^4.1.1",
|
|
32
33
|
"@push.rocks/smartpromise": "^4.2.3",
|
|
33
34
|
"@push.rocks/smartrequest": "^5.0.1",
|
|
34
35
|
"@push.rocks/webstream": "^1.0.10",
|
|
35
|
-
"openai": "^
|
|
36
|
+
"openai": "^6.16.0"
|
|
36
37
|
},
|
|
37
38
|
"repository": {
|
|
38
39
|
"type": "git",
|
package/readme.hints.md
CHANGED
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
## Dependencies
|
|
4
4
|
|
|
5
5
|
- Uses `@git.zone/tstest` v3.x for testing (import from `@git.zone/tstest/tapbundle`)
|
|
6
|
-
- `@push.rocks/
|
|
6
|
+
- `@push.rocks/smartfs` v1.x for file system operations (replaced smartfile)
|
|
7
7
|
- `@anthropic-ai/sdk` v0.71.x with extended thinking support
|
|
8
|
+
- `@mistralai/mistralai` v1.x for Mistral OCR and chat capabilities
|
|
9
|
+
- `openai` v6.x for OpenAI API integration
|
|
8
10
|
- `@push.rocks/smartrequest` v5.x - uses `response.stream()` + `Readable.fromWeb()` for streaming
|
|
9
11
|
|
|
10
12
|
## Important Notes
|
|
@@ -12,6 +14,68 @@
|
|
|
12
14
|
- When extended thinking is enabled, temperature parameter must NOT be set (or set to 1)
|
|
13
15
|
- The `streamNode()` method was removed in smartrequest v5, use `response.stream()` with `Readable.fromWeb()` instead
|
|
14
16
|
|
|
17
|
+
## Mistral Provider Integration
|
|
18
|
+
|
|
19
|
+
### Overview
|
|
20
|
+
|
|
21
|
+
The Mistral provider supports:
|
|
22
|
+
- **Document AI** via Mistral OCR 3 (December 2025) - native PDF processing without image conversion
|
|
23
|
+
- **Chat capabilities** using Mistral's chat models (`mistral-large-latest`, etc.)
|
|
24
|
+
|
|
25
|
+
### Key Advantage: Native PDF Support
|
|
26
|
+
|
|
27
|
+
Unlike other providers that require converting PDFs to images (using SmartPdf), Mistral OCR natively accepts PDF documents as base64-encoded data. This makes document processing potentially faster and more accurate for text extraction.
|
|
28
|
+
|
|
29
|
+
### Configuration
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import * as smartai from '@push.rocks/smartai';
|
|
33
|
+
|
|
34
|
+
const provider = new smartai.MistralProvider({
|
|
35
|
+
mistralToken: 'your-token-here',
|
|
36
|
+
chatModel: 'mistral-large-latest', // default
|
|
37
|
+
ocrModel: 'mistral-ocr-latest', // default
|
|
38
|
+
tableFormat: 'markdown', // 'markdown' or 'html'
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
await provider.start();
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Supported Methods
|
|
45
|
+
|
|
46
|
+
| Method | Support | Notes |
|
|
47
|
+
|--------|---------|-------|
|
|
48
|
+
| `chat()` | ✅ | Standard chat completion |
|
|
49
|
+
| `chatStream()` | ✅ | Streaming chat responses |
|
|
50
|
+
| `document()` | ✅ | Native PDF OCR - no image conversion needed |
|
|
51
|
+
| `vision()` | ✅ | Image OCR with optional chat analysis |
|
|
52
|
+
| `audio()` | ❌ | Not supported - use ElevenLabs |
|
|
53
|
+
| `research()` | ❌ | Not supported - use Perplexity |
|
|
54
|
+
| `imageGenerate()` | ❌ | Not supported - use OpenAI |
|
|
55
|
+
| `imageEdit()` | ❌ | Not supported - use OpenAI |
|
|
56
|
+
|
|
57
|
+
### Document Processing
|
|
58
|
+
|
|
59
|
+
The `document()` method uses Mistral OCR to extract text from PDFs, then uses Mistral chat to process the user's query with the extracted content.
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
const result = await provider.document({
|
|
63
|
+
systemMessage: 'You are a document analyst.',
|
|
64
|
+
userMessage: 'Summarize this document.',
|
|
65
|
+
pdfDocuments: [pdfBuffer],
|
|
66
|
+
messageHistory: [],
|
|
67
|
+
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### API Key
|
|
71
|
+
|
|
72
|
+
Tests require `MISTRAL_API_KEY` in `.nogit/env.json`.
|
|
73
|
+
|
|
74
|
+
### Pricing (as of December 2025)
|
|
75
|
+
|
|
76
|
+
- OCR: $2 per 1,000 pages ($1 with Batch API)
|
|
77
|
+
- Chat: Varies by model (see Mistral pricing page)
|
|
78
|
+
|
|
15
79
|
## Anthropic Extended Thinking Feature
|
|
16
80
|
|
|
17
81
|
### Overview
|
package/readme.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
[](https://www.typescriptlang.org/)
|
|
7
7
|
[](https://opensource.org/licenses/MIT)
|
|
8
8
|
|
|
9
|
-
SmartAI unifies the world's leading AI providers - OpenAI, Anthropic, Perplexity, Ollama, Groq, XAI, Exo, and ElevenLabs - under a single, elegant TypeScript interface. Build AI applications at lightning speed without vendor lock-in.
|
|
9
|
+
SmartAI unifies the world's leading AI providers - OpenAI, Anthropic, Mistral, Perplexity, Ollama, Groq, XAI, Exo, and ElevenLabs - under a single, elegant TypeScript interface. Build AI applications at lightning speed without vendor lock-in.
|
|
10
10
|
|
|
11
11
|
## Issue Reporting and Security
|
|
12
12
|
|
|
@@ -58,6 +58,7 @@ Choose the right provider for your use case:
|
|
|
58
58
|
| -------------- | :--: | :-------: | :-: | :----: | :-------: | :------: | :----: | --------------------------------------------------------------- |
|
|
59
59
|
| **OpenAI** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | • gpt-image-1<br>• DALL-E 3<br>• Deep research API |
|
|
60
60
|
| **Anthropic** | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | • Claude Sonnet 4.5<br>• Superior reasoning<br>• Web search API |
|
|
61
|
+
| **Mistral** | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | • Native PDF OCR<br>• mistral-large<br>• Fast inference |
|
|
61
62
|
| **ElevenLabs** | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | • Premium TTS<br>• 70+ languages<br>• Natural voices |
|
|
62
63
|
| **Ollama** | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | • 100% local<br>• Privacy-first<br>• No API costs |
|
|
63
64
|
| **XAI** | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | • Grok models<br>• Real-time data<br>• Uncensored |
|
|
@@ -282,6 +283,38 @@ const response = await anthropic.chat({
|
|
|
282
283
|
- Use `'quick'` for simple factual queries where deep reasoning isn't needed
|
|
283
284
|
- Thinking budget counts against total token usage
|
|
284
285
|
|
|
286
|
+
### 📑 Native PDF OCR (Mistral)
|
|
287
|
+
|
|
288
|
+
Mistral provides native PDF document processing via their OCR API - no image conversion required:
|
|
289
|
+
|
|
290
|
+
```typescript
|
|
291
|
+
import { MistralProvider } from '@push.rocks/smartai';
|
|
292
|
+
|
|
293
|
+
const mistral = new MistralProvider({
|
|
294
|
+
mistralToken: 'your-api-key',
|
|
295
|
+
chatModel: 'mistral-large-latest', // Default
|
|
296
|
+
ocrModel: 'mistral-ocr-latest', // Default
|
|
297
|
+
tableFormat: 'markdown', // 'markdown' | 'html'
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
await mistral.start();
|
|
301
|
+
|
|
302
|
+
// Direct PDF processing - no image conversion overhead
|
|
303
|
+
const result = await mistral.document({
|
|
304
|
+
systemMessage: 'You are a document analyst.',
|
|
305
|
+
userMessage: 'Extract all invoice details and calculate the total.',
|
|
306
|
+
pdfDocuments: [invoicePdfBuffer],
|
|
307
|
+
messageHistory: [],
|
|
308
|
+
});
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
**Key Advantage**: Unlike other providers that convert PDFs to images first, Mistral's OCR API processes PDFs natively, potentially offering faster and more accurate text extraction for document-heavy workloads.
|
|
312
|
+
|
|
313
|
+
**Supported Formats:**
|
|
314
|
+
- Native PDF processing via Files API
|
|
315
|
+
- Image OCR (JPEG, PNG, GIF, WebP) for vision tasks
|
|
316
|
+
- Table extraction with markdown or HTML output
|
|
317
|
+
|
|
285
318
|
### 🎨 Image Generation & Editing
|
|
286
319
|
|
|
287
320
|
Generate and edit images with OpenAI's cutting-edge models:
|
|
@@ -645,6 +678,7 @@ export ELEVENLABS_API_KEY=sk-...
|
|
|
645
678
|
| --------------------- | -------------------- | --------------------------------------------------------- |
|
|
646
679
|
| **General Purpose** | OpenAI | Most features, stable, well-documented |
|
|
647
680
|
| **Complex Reasoning** | Anthropic | Superior logical thinking, safer outputs |
|
|
681
|
+
| **Document OCR** | Mistral | Native PDF processing, no image conversion overhead |
|
|
648
682
|
| **Research & Facts** | Perplexity | Web-aware, provides citations |
|
|
649
683
|
| **Deep Research** | OpenAI | Deep Research API with comprehensive analysis |
|
|
650
684
|
| **Premium TTS** | ElevenLabs | Most natural voices, 70+ languages, superior quality (v3) |
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartai',
|
|
6
|
-
version: '0.
|
|
6
|
+
version: '0.10.1',
|
|
7
7
|
description: 'SmartAi is a versatile TypeScript library designed to facilitate integration and interaction with various AI models, offering functionalities for chat, audio generation, document processing, and vision tasks.'
|
|
8
8
|
}
|
|
@@ -84,6 +84,18 @@ export class Conversation {
|
|
|
84
84
|
return conversation;
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
+
public static async createWithMistral(smartaiRefArg: SmartAi) {
|
|
88
|
+
if (!smartaiRefArg.mistralProvider) {
|
|
89
|
+
throw new Error('Mistral provider not available');
|
|
90
|
+
}
|
|
91
|
+
const conversation = new Conversation(smartaiRefArg, {
|
|
92
|
+
processFunction: async (input) => {
|
|
93
|
+
return '' // TODO implement proper streaming
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
return conversation;
|
|
97
|
+
}
|
|
98
|
+
|
|
87
99
|
public static async createWithXai(smartaiRefArg: SmartAi) {
|
|
88
100
|
if (!smartaiRefArg.xaiProvider) {
|
|
89
101
|
throw new Error('XAI provider not available');
|
package/ts/classes.smartai.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { Conversation } from './classes.conversation.js';
|
|
|
2
2
|
import * as plugins from './plugins.js';
|
|
3
3
|
import { AnthropicProvider } from './provider.anthropic.js';
|
|
4
4
|
import { ElevenLabsProvider } from './provider.elevenlabs.js';
|
|
5
|
+
import { MistralProvider } from './provider.mistral.js';
|
|
5
6
|
import { OllamaProvider } from './provider.ollama.js';
|
|
6
7
|
import { OpenAiProvider } from './provider.openai.js';
|
|
7
8
|
import { PerplexityProvider } from './provider.perplexity.js';
|
|
@@ -15,12 +16,18 @@ export interface ISmartAiOptions {
|
|
|
15
16
|
anthropicToken?: string;
|
|
16
17
|
perplexityToken?: string;
|
|
17
18
|
groqToken?: string;
|
|
19
|
+
mistralToken?: string;
|
|
18
20
|
xaiToken?: string;
|
|
19
21
|
elevenlabsToken?: string;
|
|
20
22
|
exo?: {
|
|
21
23
|
baseUrl?: string;
|
|
22
24
|
apiKey?: string;
|
|
23
25
|
};
|
|
26
|
+
mistral?: {
|
|
27
|
+
chatModel?: string;
|
|
28
|
+
ocrModel?: string;
|
|
29
|
+
tableFormat?: 'markdown' | 'html';
|
|
30
|
+
};
|
|
24
31
|
ollama?: {
|
|
25
32
|
baseUrl?: string;
|
|
26
33
|
model?: string;
|
|
@@ -32,7 +39,7 @@ export interface ISmartAiOptions {
|
|
|
32
39
|
};
|
|
33
40
|
}
|
|
34
41
|
|
|
35
|
-
export type TProvider = 'openai' | 'anthropic' | 'perplexity' | 'ollama' | 'exo' | 'groq' | 'xai' | 'elevenlabs';
|
|
42
|
+
export type TProvider = 'openai' | 'anthropic' | 'perplexity' | 'ollama' | 'exo' | 'groq' | 'mistral' | 'xai' | 'elevenlabs';
|
|
36
43
|
|
|
37
44
|
export class SmartAi {
|
|
38
45
|
public options: ISmartAiOptions;
|
|
@@ -43,6 +50,7 @@ export class SmartAi {
|
|
|
43
50
|
public ollamaProvider: OllamaProvider;
|
|
44
51
|
public exoProvider: ExoProvider;
|
|
45
52
|
public groqProvider: GroqProvider;
|
|
53
|
+
public mistralProvider: MistralProvider;
|
|
46
54
|
public xaiProvider: XAIProvider;
|
|
47
55
|
public elevenlabsProvider: ElevenLabsProvider;
|
|
48
56
|
|
|
@@ -75,6 +83,15 @@ export class SmartAi {
|
|
|
75
83
|
});
|
|
76
84
|
await this.groqProvider.start();
|
|
77
85
|
}
|
|
86
|
+
if (this.options.mistralToken) {
|
|
87
|
+
this.mistralProvider = new MistralProvider({
|
|
88
|
+
mistralToken: this.options.mistralToken,
|
|
89
|
+
chatModel: this.options.mistral?.chatModel,
|
|
90
|
+
ocrModel: this.options.mistral?.ocrModel,
|
|
91
|
+
tableFormat: this.options.mistral?.tableFormat,
|
|
92
|
+
});
|
|
93
|
+
await this.mistralProvider.start();
|
|
94
|
+
}
|
|
78
95
|
if (this.options.xaiToken) {
|
|
79
96
|
this.xaiProvider = new XAIProvider({
|
|
80
97
|
xaiToken: this.options.xaiToken,
|
|
@@ -119,6 +136,9 @@ export class SmartAi {
|
|
|
119
136
|
if (this.groqProvider) {
|
|
120
137
|
await this.groqProvider.stop();
|
|
121
138
|
}
|
|
139
|
+
if (this.mistralProvider) {
|
|
140
|
+
await this.mistralProvider.stop();
|
|
141
|
+
}
|
|
122
142
|
if (this.xaiProvider) {
|
|
123
143
|
await this.xaiProvider.stop();
|
|
124
144
|
}
|
|
@@ -150,6 +170,8 @@ export class SmartAi {
|
|
|
150
170
|
return Conversation.createWithOllama(this);
|
|
151
171
|
case 'groq':
|
|
152
172
|
return Conversation.createWithGroq(this);
|
|
173
|
+
case 'mistral':
|
|
174
|
+
return Conversation.createWithMistral(this);
|
|
153
175
|
case 'xai':
|
|
154
176
|
return Conversation.createWithXai(this);
|
|
155
177
|
case 'elevenlabs':
|
package/ts/index.ts
CHANGED
|
@@ -4,6 +4,7 @@ export * from './provider.openai.js';
|
|
|
4
4
|
export * from './provider.anthropic.js';
|
|
5
5
|
export * from './provider.perplexity.js';
|
|
6
6
|
export * from './provider.groq.js';
|
|
7
|
+
export * from './provider.mistral.js';
|
|
7
8
|
export * from './provider.ollama.js';
|
|
8
9
|
export * from './provider.xai.js';
|
|
9
10
|
export * from './provider.exo.js';
|
package/ts/plugins.ts
CHANGED
|
@@ -8,7 +8,7 @@ export {
|
|
|
8
8
|
// @push.rocks scope
|
|
9
9
|
import * as qenv from '@push.rocks/qenv';
|
|
10
10
|
import * as smartarray from '@push.rocks/smartarray';
|
|
11
|
-
import * as
|
|
11
|
+
import * as smartfs from '@push.rocks/smartfs';
|
|
12
12
|
import * as smartpath from '@push.rocks/smartpath';
|
|
13
13
|
import * as smartpdf from '@push.rocks/smartpdf';
|
|
14
14
|
import * as smartpromise from '@push.rocks/smartpromise';
|
|
@@ -18,7 +18,7 @@ import * as webstream from '@push.rocks/webstream';
|
|
|
18
18
|
export {
|
|
19
19
|
smartarray,
|
|
20
20
|
qenv,
|
|
21
|
-
|
|
21
|
+
smartfs,
|
|
22
22
|
smartpath,
|
|
23
23
|
smartpdf,
|
|
24
24
|
smartpromise,
|
|
@@ -28,9 +28,11 @@ export {
|
|
|
28
28
|
|
|
29
29
|
// third party
|
|
30
30
|
import * as anthropic from '@anthropic-ai/sdk';
|
|
31
|
+
import * as mistralai from '@mistralai/mistralai';
|
|
31
32
|
import * as openai from 'openai';
|
|
32
33
|
|
|
33
34
|
export {
|
|
34
35
|
anthropic,
|
|
36
|
+
mistralai,
|
|
35
37
|
openai,
|
|
36
38
|
}
|