@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.
- package/dist_ts/00_commitinfo_data.js +3 -3
- package/dist_ts/index.d.ts +6 -11
- package/dist_ts/index.js +6 -12
- package/dist_ts/plugins.d.ts +10 -15
- package/dist_ts/plugins.js +13 -19
- package/dist_ts/smartai.classes.smartai.d.ts +7 -0
- package/dist_ts/smartai.classes.smartai.js +51 -0
- package/dist_ts/smartai.interfaces.d.ts +41 -0
- package/dist_ts/smartai.interfaces.js +2 -0
- package/dist_ts/smartai.middleware.anthropic.d.ts +7 -0
- package/dist_ts/smartai.middleware.anthropic.js +36 -0
- package/dist_ts/smartai.provider.ollama.d.ts +8 -0
- package/dist_ts/smartai.provider.ollama.js +378 -0
- package/dist_ts_audio/index.d.ts +9 -0
- package/dist_ts_audio/index.js +15 -0
- package/dist_ts_audio/plugins.d.ts +2 -0
- package/dist_ts_audio/plugins.js +3 -0
- package/dist_ts_document/index.d.ts +11 -0
- package/dist_ts_document/index.js +45 -0
- package/dist_ts_document/plugins.d.ts +3 -0
- package/dist_ts_document/plugins.js +4 -0
- package/dist_ts_image/index.d.ts +46 -0
- package/dist_ts_image/index.js +110 -0
- package/dist_ts_image/plugins.d.ts +3 -0
- package/dist_ts_image/plugins.js +4 -0
- package/dist_ts_research/index.d.ts +19 -0
- package/dist_ts_research/index.js +98 -0
- package/dist_ts_research/plugins.d.ts +2 -0
- package/dist_ts_research/plugins.js +3 -0
- package/dist_ts_vision/index.d.ts +8 -0
- package/dist_ts_vision/index.js +21 -0
- package/dist_ts_vision/plugins.d.ts +2 -0
- package/dist_ts_vision/plugins.js +3 -0
- package/package.json +50 -22
- package/readme.hints.md +34 -88
- package/readme.md +284 -547
- package/ts/00_commitinfo_data.ts +2 -2
- package/ts/index.ts +8 -11
- package/ts/plugins.ts +19 -35
- package/ts/smartai.classes.smartai.ts +51 -0
- package/ts/smartai.interfaces.ts +53 -0
- package/ts/smartai.middleware.anthropic.ts +38 -0
- package/ts/smartai.provider.ollama.ts +426 -0
- package/ts_audio/index.ts +24 -0
- package/ts_audio/plugins.ts +2 -0
- package/ts_document/index.ts +61 -0
- package/ts_document/plugins.ts +3 -0
- package/ts_image/index.ts +147 -0
- package/ts_image/plugins.ts +3 -0
- package/ts_research/index.ts +120 -0
- package/ts_research/plugins.ts +2 -0
- package/ts_vision/index.ts +29 -0
- package/ts_vision/plugins.ts +2 -0
- package/dist_ts/abstract.classes.multimodal.d.ts +0 -212
- package/dist_ts/abstract.classes.multimodal.js +0 -43
- package/dist_ts/classes.conversation.d.ts +0 -31
- package/dist_ts/classes.conversation.js +0 -150
- package/dist_ts/classes.smartai.d.ts +0 -59
- package/dist_ts/classes.smartai.js +0 -139
- package/dist_ts/classes.tts.d.ts +0 -6
- package/dist_ts/classes.tts.js +0 -10
- package/dist_ts/interfaces.d.ts +0 -1
- package/dist_ts/interfaces.js +0 -2
- package/dist_ts/paths.d.ts +0 -2
- package/dist_ts/paths.js +0 -4
- package/dist_ts/provider.anthropic.d.ts +0 -48
- package/dist_ts/provider.anthropic.js +0 -369
- package/dist_ts/provider.elevenlabs.d.ts +0 -43
- package/dist_ts/provider.elevenlabs.js +0 -64
- package/dist_ts/provider.exo.d.ts +0 -40
- package/dist_ts/provider.exo.js +0 -116
- package/dist_ts/provider.groq.d.ts +0 -39
- package/dist_ts/provider.groq.js +0 -178
- package/dist_ts/provider.mistral.d.ts +0 -61
- package/dist_ts/provider.mistral.js +0 -288
- package/dist_ts/provider.ollama.d.ts +0 -141
- package/dist_ts/provider.ollama.js +0 -529
- package/dist_ts/provider.openai.d.ts +0 -62
- package/dist_ts/provider.openai.js +0 -403
- package/dist_ts/provider.perplexity.d.ts +0 -37
- package/dist_ts/provider.perplexity.js +0 -215
- package/dist_ts/provider.xai.d.ts +0 -52
- package/dist_ts/provider.xai.js +0 -160
- package/ts/abstract.classes.multimodal.ts +0 -240
- package/ts/classes.conversation.ts +0 -176
- package/ts/classes.smartai.ts +0 -187
- package/ts/classes.tts.ts +0 -15
- package/ts/interfaces.ts +0 -0
- package/ts/paths.ts +0 -4
- package/ts/provider.anthropic.ts +0 -446
- package/ts/provider.elevenlabs.ts +0 -116
- package/ts/provider.exo.ts +0 -155
- package/ts/provider.groq.ts +0 -219
- package/ts/provider.mistral.ts +0 -352
- package/ts/provider.ollama.ts +0 -705
- package/ts/provider.openai.ts +0 -462
- package/ts/provider.perplexity.ts +0 -259
- package/ts/provider.xai.ts +0 -214
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
export async function generateImage(options) {
|
|
3
|
+
const client = new plugins.OpenAI({ apiKey: options.apiKey });
|
|
4
|
+
const model = options.model || 'gpt-image-1';
|
|
5
|
+
const requestParams = {
|
|
6
|
+
model,
|
|
7
|
+
prompt: options.prompt,
|
|
8
|
+
n: options.n || 1,
|
|
9
|
+
};
|
|
10
|
+
if (model === 'gpt-image-1') {
|
|
11
|
+
if (options.quality)
|
|
12
|
+
requestParams.quality = options.quality;
|
|
13
|
+
if (options.size)
|
|
14
|
+
requestParams.size = options.size;
|
|
15
|
+
if (options.background)
|
|
16
|
+
requestParams.background = options.background;
|
|
17
|
+
if (options.outputFormat)
|
|
18
|
+
requestParams.output_format = options.outputFormat;
|
|
19
|
+
if (options.outputCompression !== undefined)
|
|
20
|
+
requestParams.output_compression = options.outputCompression;
|
|
21
|
+
if (options.moderation)
|
|
22
|
+
requestParams.moderation = options.moderation;
|
|
23
|
+
if (options.stream !== undefined)
|
|
24
|
+
requestParams.stream = options.stream;
|
|
25
|
+
if (options.partialImages !== undefined)
|
|
26
|
+
requestParams.partial_images = options.partialImages;
|
|
27
|
+
}
|
|
28
|
+
else if (model === 'dall-e-3') {
|
|
29
|
+
if (options.quality)
|
|
30
|
+
requestParams.quality = options.quality;
|
|
31
|
+
if (options.size)
|
|
32
|
+
requestParams.size = options.size;
|
|
33
|
+
if (options.style)
|
|
34
|
+
requestParams.style = options.style;
|
|
35
|
+
requestParams.response_format = 'b64_json';
|
|
36
|
+
}
|
|
37
|
+
else if (model === 'dall-e-2') {
|
|
38
|
+
if (options.size)
|
|
39
|
+
requestParams.size = options.size;
|
|
40
|
+
requestParams.response_format = 'b64_json';
|
|
41
|
+
}
|
|
42
|
+
const result = await client.images.generate(requestParams);
|
|
43
|
+
const images = (result.data || []).map((img) => ({
|
|
44
|
+
b64_json: img.b64_json,
|
|
45
|
+
url: img.url,
|
|
46
|
+
revisedPrompt: img.revised_prompt,
|
|
47
|
+
}));
|
|
48
|
+
return {
|
|
49
|
+
images,
|
|
50
|
+
metadata: {
|
|
51
|
+
model,
|
|
52
|
+
quality: result.quality,
|
|
53
|
+
size: result.size,
|
|
54
|
+
outputFormat: result.output_format,
|
|
55
|
+
tokensUsed: result.usage?.total_tokens,
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export async function editImage(options) {
|
|
60
|
+
const client = new plugins.OpenAI({ apiKey: options.apiKey });
|
|
61
|
+
const model = options.model || 'gpt-image-1';
|
|
62
|
+
const imageFile = await plugins.toFile(options.image, 'image.png', { type: 'image/png' });
|
|
63
|
+
const requestParams = {
|
|
64
|
+
model,
|
|
65
|
+
image: imageFile,
|
|
66
|
+
prompt: options.prompt,
|
|
67
|
+
n: options.n || 1,
|
|
68
|
+
};
|
|
69
|
+
if (options.mask) {
|
|
70
|
+
requestParams.mask = await plugins.toFile(options.mask, 'mask.png', { type: 'image/png' });
|
|
71
|
+
}
|
|
72
|
+
if (model === 'gpt-image-1') {
|
|
73
|
+
if (options.quality)
|
|
74
|
+
requestParams.quality = options.quality;
|
|
75
|
+
if (options.size)
|
|
76
|
+
requestParams.size = options.size;
|
|
77
|
+
if (options.background)
|
|
78
|
+
requestParams.background = options.background;
|
|
79
|
+
if (options.outputFormat)
|
|
80
|
+
requestParams.output_format = options.outputFormat;
|
|
81
|
+
if (options.outputCompression !== undefined)
|
|
82
|
+
requestParams.output_compression = options.outputCompression;
|
|
83
|
+
if (options.stream !== undefined)
|
|
84
|
+
requestParams.stream = options.stream;
|
|
85
|
+
if (options.partialImages !== undefined)
|
|
86
|
+
requestParams.partial_images = options.partialImages;
|
|
87
|
+
}
|
|
88
|
+
else if (model === 'dall-e-2') {
|
|
89
|
+
if (options.size)
|
|
90
|
+
requestParams.size = options.size;
|
|
91
|
+
requestParams.response_format = 'b64_json';
|
|
92
|
+
}
|
|
93
|
+
const result = await client.images.edit(requestParams);
|
|
94
|
+
const images = (result.data || []).map((img) => ({
|
|
95
|
+
b64_json: img.b64_json,
|
|
96
|
+
url: img.url,
|
|
97
|
+
revisedPrompt: img.revised_prompt,
|
|
98
|
+
}));
|
|
99
|
+
return {
|
|
100
|
+
images,
|
|
101
|
+
metadata: {
|
|
102
|
+
model,
|
|
103
|
+
quality: result.quality,
|
|
104
|
+
size: result.size,
|
|
105
|
+
outputFormat: result.output_format,
|
|
106
|
+
tokensUsed: result.usage?.total_tokens,
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19pbWFnZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQWlEeEMsTUFBTSxDQUFDLEtBQUssVUFBVSxhQUFhLENBQUMsT0FBOEI7SUFDaEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzlELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDO0lBRTdDLE1BQU0sYUFBYSxHQUE0QjtRQUM3QyxLQUFLO1FBQ0wsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUM7S0FDbEIsQ0FBQztJQUVGLElBQUksS0FBSyxLQUFLLGFBQWEsRUFBRSxDQUFDO1FBQzVCLElBQUksT0FBTyxDQUFDLE9BQU87WUFBRSxhQUFhLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDN0QsSUFBSSxPQUFPLENBQUMsSUFBSTtZQUFFLGFBQWEsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUNwRCxJQUFJLE9BQU8sQ0FBQyxVQUFVO1lBQUUsYUFBYSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3RFLElBQUksT0FBTyxDQUFDLFlBQVk7WUFBRSxhQUFhLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDN0UsSUFBSSxPQUFPLENBQUMsaUJBQWlCLEtBQUssU0FBUztZQUFFLGFBQWEsQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDMUcsSUFBSSxPQUFPLENBQUMsVUFBVTtZQUFFLGFBQWEsQ0FBQyxVQUFVLEdBQUcsT0FB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
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import OpenAI from 'openai';
|
|
2
|
+
import { toFile } from 'openai';
|
|
3
|
+
export { OpenAI, toFile };
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX2ltYWdlL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyJ9
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface IResearchOptions {
|
|
2
|
+
apiKey: string;
|
|
3
|
+
query: string;
|
|
4
|
+
searchDepth?: 'basic' | 'advanced' | 'deep';
|
|
5
|
+
maxSources?: number;
|
|
6
|
+
allowedDomains?: string[];
|
|
7
|
+
blockedDomains?: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface IResearchResponse {
|
|
10
|
+
answer: string;
|
|
11
|
+
sources: Array<{
|
|
12
|
+
url: string;
|
|
13
|
+
title: string;
|
|
14
|
+
snippet: string;
|
|
15
|
+
}>;
|
|
16
|
+
searchQueries?: string[];
|
|
17
|
+
metadata?: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
export declare function research(options: IResearchOptions): Promise<IResearchResponse>;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
export async function research(options) {
|
|
3
|
+
const client = new plugins.Anthropic({ apiKey: options.apiKey });
|
|
4
|
+
const systemMessage = `You are a research assistant with web search capabilities.
|
|
5
|
+
Provide comprehensive, well-researched answers with citations and sources.
|
|
6
|
+
When searching the web, be thorough and cite your sources accurately.`;
|
|
7
|
+
// Build web search tool config
|
|
8
|
+
const webSearchTool = {
|
|
9
|
+
type: 'web_search_20250305',
|
|
10
|
+
name: 'web_search',
|
|
11
|
+
};
|
|
12
|
+
if (options.maxSources) {
|
|
13
|
+
webSearchTool.max_uses = options.maxSources;
|
|
14
|
+
}
|
|
15
|
+
if (options.allowedDomains?.length) {
|
|
16
|
+
webSearchTool.allowed_domains = options.allowedDomains;
|
|
17
|
+
}
|
|
18
|
+
else if (options.blockedDomains?.length) {
|
|
19
|
+
webSearchTool.blocked_domains = options.blockedDomains;
|
|
20
|
+
}
|
|
21
|
+
const result = await client.messages.create({
|
|
22
|
+
model: 'claude-sonnet-4-5-20250929',
|
|
23
|
+
system: systemMessage,
|
|
24
|
+
messages: [
|
|
25
|
+
{ role: 'user', content: options.query },
|
|
26
|
+
],
|
|
27
|
+
max_tokens: 20000,
|
|
28
|
+
temperature: 0.7,
|
|
29
|
+
tools: [webSearchTool],
|
|
30
|
+
});
|
|
31
|
+
// Extract answer, sources, and search queries
|
|
32
|
+
let answer = '';
|
|
33
|
+
const sources = [];
|
|
34
|
+
const searchQueries = [];
|
|
35
|
+
for (const block of result.content) {
|
|
36
|
+
const b = block;
|
|
37
|
+
if ('text' in b) {
|
|
38
|
+
answer += b.text;
|
|
39
|
+
// Extract citations if present
|
|
40
|
+
if (b.citations && Array.isArray(b.citations)) {
|
|
41
|
+
for (const citation of b.citations) {
|
|
42
|
+
if (citation.type === 'web_search_result_location') {
|
|
43
|
+
sources.push({
|
|
44
|
+
title: citation.title || '',
|
|
45
|
+
url: citation.url || '',
|
|
46
|
+
snippet: citation.cited_text || '',
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else if (b.type === 'server_tool_use') {
|
|
53
|
+
if (b.name === 'web_search' && b.input?.query) {
|
|
54
|
+
searchQueries.push(b.input.query);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else if (b.type === 'web_search_tool_result') {
|
|
58
|
+
if (Array.isArray(b.content)) {
|
|
59
|
+
for (const item of b.content) {
|
|
60
|
+
if (item.type === 'web_search_result') {
|
|
61
|
+
if (!sources.some(s => s.url === item.url)) {
|
|
62
|
+
sources.push({
|
|
63
|
+
title: item.title || '',
|
|
64
|
+
url: item.url || '',
|
|
65
|
+
snippet: '',
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Fallback: parse markdown links if no citations found
|
|
74
|
+
if (sources.length === 0) {
|
|
75
|
+
const urlRegex = /\[([^\]]+)\]\(([^)]+)\)/g;
|
|
76
|
+
let match;
|
|
77
|
+
while ((match = urlRegex.exec(answer)) !== null) {
|
|
78
|
+
sources.push({
|
|
79
|
+
title: match[1],
|
|
80
|
+
url: match[2],
|
|
81
|
+
snippet: '',
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const usage = result.usage;
|
|
86
|
+
return {
|
|
87
|
+
answer,
|
|
88
|
+
sources,
|
|
89
|
+
searchQueries: searchQueries.length > 0 ? searchQueries : undefined,
|
|
90
|
+
metadata: {
|
|
91
|
+
model: 'claude-sonnet-4-5-20250929',
|
|
92
|
+
searchDepth: options.searchDepth || 'basic',
|
|
93
|
+
tokensUsed: usage?.output_tokens,
|
|
94
|
+
webSearchesPerformed: usage?.server_tool_use?.web_search_requests ?? 0,
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19yZXNlYXJjaC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQWtCeEMsTUFBTSxDQUFDLEtBQUssVUFBVSxRQUFRLENBQUMsT0FBeUI7SUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRWpFLE1BQU0sYUFBYSxHQUFHOztzRUFFOEMsQ0FBQztJQUVyRSwrQkFBK0I7SUFDL0IsTUFBTSxhQUFhLEdBQVE7UUFDekIsSUFBSSxFQUFFLHFCQUFxQjtRQUMzQixJQUFJLEVBQUUsWUFBWTtLQUNuQixDQUFDO0lBRUYsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkIsYUFBYSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQzlDLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDbkMsYUFBYSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO0lBQ3pELENBQUM7U0FBTSxJQUFJLE9BQU8sQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDMUMsYUFBYSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO0lBQ3pELENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzFDLEtBQUssRUFBRSw0QkFBNEI7UUFDbkMsTUFBTSxFQUFFLGFBQWE7UUFDckIsUUFBUSxFQUFFO1lBQ1IsRUFBRSxJQUFJLEVBQUUsTUFBZSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFO1NBQ2xEO1FBQ0QsVUFBVSxFQUFFLEtBQUs7UUFD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
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
export { Anthropic };
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX3Jlc2VhcmNoL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxTQUFTLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDIn0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LanguageModelV3 } from '@ai-sdk/provider';
|
|
2
|
+
export interface IVisionOptions {
|
|
3
|
+
model: LanguageModelV3;
|
|
4
|
+
image: Buffer | Uint8Array;
|
|
5
|
+
prompt: string;
|
|
6
|
+
mediaType?: 'image/jpeg' | 'image/png' | 'image/webp' | 'image/gif';
|
|
7
|
+
}
|
|
8
|
+
export declare function analyzeImage(options: IVisionOptions): Promise<string>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
export async function analyzeImage(options) {
|
|
3
|
+
const result = await plugins.generateText({
|
|
4
|
+
model: options.model,
|
|
5
|
+
messages: [
|
|
6
|
+
{
|
|
7
|
+
role: 'user',
|
|
8
|
+
content: [
|
|
9
|
+
{ type: 'text', text: options.prompt },
|
|
10
|
+
{
|
|
11
|
+
type: 'image',
|
|
12
|
+
image: options.image,
|
|
13
|
+
mediaType: options.mediaType ?? 'image/jpeg',
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
},
|
|
17
|
+
],
|
|
18
|
+
});
|
|
19
|
+
return result.text;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c192aXNpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFVeEMsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQUMsT0FBdUI7SUFDeEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ3hDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxJQUFJLEVBQUUsTUFBTTtnQkFDWixPQUFPLEVBQUU7b0JBQ1AsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFO29CQUN0Qzt3QkFDRSxJQUFJLEVBQUUsT0FBTzt3QkFDYixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7d0JBQ3BCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxJQUFJLFlBQVk7cUJBQzdDO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGLENBQUMsQ0FBQztJQUNILE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztBQUNyQixDQUFDIn0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { generateText } from 'ai';
|
|
2
|
+
export { generateText };
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX3Zpc2lvbi9wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,39 +1,67 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/smartai",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"private": false,
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "Provider registry and capability utilities for ai-sdk (Vercel AI SDK). Core export returns LanguageModel; subpath exports provide vision, audio, image, document and research capabilities.",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
7
7
|
"typings": "dist_ts/index.d.ts",
|
|
8
8
|
"type": "module",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist_ts/index.js",
|
|
12
|
+
"types": "./dist_ts/index.d.ts"
|
|
13
|
+
},
|
|
14
|
+
"./vision": {
|
|
15
|
+
"import": "./dist_ts_vision/index.js",
|
|
16
|
+
"types": "./dist_ts_vision/index.d.ts"
|
|
17
|
+
},
|
|
18
|
+
"./audio": {
|
|
19
|
+
"import": "./dist_ts_audio/index.js",
|
|
20
|
+
"types": "./dist_ts_audio/index.d.ts"
|
|
21
|
+
},
|
|
22
|
+
"./image": {
|
|
23
|
+
"import": "./dist_ts_image/index.js",
|
|
24
|
+
"types": "./dist_ts_image/index.d.ts"
|
|
25
|
+
},
|
|
26
|
+
"./document": {
|
|
27
|
+
"import": "./dist_ts_document/index.js",
|
|
28
|
+
"types": "./dist_ts_document/index.d.ts"
|
|
29
|
+
},
|
|
30
|
+
"./research": {
|
|
31
|
+
"import": "./dist_ts_research/index.js",
|
|
32
|
+
"types": "./dist_ts_research/index.d.ts"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
9
35
|
"author": "Task Venture Capital GmbH",
|
|
10
36
|
"license": "MIT",
|
|
11
37
|
"scripts": {
|
|
12
|
-
"test": "(tstest test/ --
|
|
38
|
+
"test": "(tstest test/ --verbose --logfile)",
|
|
13
39
|
"typecheck": "tsbuild check",
|
|
14
40
|
"build": "(tsbuild tsfolders --allowimplicitany)",
|
|
15
41
|
"buildDocs": "(tsdoc)"
|
|
16
42
|
},
|
|
17
43
|
"devDependencies": {
|
|
18
|
-
"@git.zone/tsbuild": "^4.
|
|
19
|
-
"@git.zone/tsbundle": "^2.
|
|
44
|
+
"@git.zone/tsbuild": "^4.2.6",
|
|
45
|
+
"@git.zone/tsbundle": "^2.9.1",
|
|
20
46
|
"@git.zone/tsrun": "^2.0.1",
|
|
21
|
-
"@git.zone/tstest": "^3.
|
|
47
|
+
"@git.zone/tstest": "^3.2.0",
|
|
22
48
|
"@push.rocks/qenv": "^6.1.3",
|
|
23
|
-
"@types/node": "^25.
|
|
49
|
+
"@types/node": "^25.3.3",
|
|
24
50
|
"typescript": "^5.9.3"
|
|
25
51
|
},
|
|
26
52
|
"dependencies": {
|
|
27
|
-
"@
|
|
28
|
-
"@
|
|
29
|
-
"@
|
|
30
|
-
"@
|
|
31
|
-
"@
|
|
32
|
-
"@
|
|
33
|
-
"@
|
|
34
|
-
"@
|
|
35
|
-
"@
|
|
36
|
-
"
|
|
53
|
+
"@ai-sdk/anthropic": "^3.0.58",
|
|
54
|
+
"@ai-sdk/google": "^3.0.43",
|
|
55
|
+
"@ai-sdk/groq": "^3.0.29",
|
|
56
|
+
"@ai-sdk/mistral": "^3.0.24",
|
|
57
|
+
"@ai-sdk/openai": "^3.0.41",
|
|
58
|
+
"@ai-sdk/perplexity": "^3.0.23",
|
|
59
|
+
"@ai-sdk/provider": "^3.0.8",
|
|
60
|
+
"@ai-sdk/xai": "^3.0.67",
|
|
61
|
+
"@anthropic-ai/sdk": "^0.78.0",
|
|
62
|
+
"@push.rocks/smartpdf": "^4.1.3",
|
|
63
|
+
"ai": "^6.0.116",
|
|
64
|
+
"openai": "^6.26.0"
|
|
37
65
|
},
|
|
38
66
|
"repository": {
|
|
39
67
|
"type": "git",
|
|
@@ -48,13 +76,13 @@
|
|
|
48
76
|
],
|
|
49
77
|
"files": [
|
|
50
78
|
"ts/**/*",
|
|
51
|
-
"
|
|
52
|
-
"
|
|
79
|
+
"ts_vision/**/*",
|
|
80
|
+
"ts_audio/**/*",
|
|
81
|
+
"ts_image/**/*",
|
|
82
|
+
"ts_document/**/*",
|
|
83
|
+
"ts_research/**/*",
|
|
53
84
|
"dist_*/**/*",
|
|
54
|
-
"dist_ts/**/*",
|
|
55
|
-
"dist_ts_web/**/*",
|
|
56
85
|
"assets/**/*",
|
|
57
|
-
"cli.js",
|
|
58
86
|
"npmextra.json",
|
|
59
87
|
"readme.md"
|
|
60
88
|
],
|
package/readme.hints.md
CHANGED
|
@@ -1,104 +1,50 @@
|
|
|
1
1
|
# SmartAI Project Hints
|
|
2
2
|
|
|
3
|
-
##
|
|
4
|
-
|
|
5
|
-
- Uses `@git.zone/tstest` v3.x for testing (import from `@git.zone/tstest/tapbundle`)
|
|
6
|
-
- `@push.rocks/smartfs` v1.x for file system operations
|
|
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
|
|
10
|
-
- `@push.rocks/smartrequest` v5.x - uses `response.stream()` + `Readable.fromWeb()` for streaming
|
|
11
|
-
|
|
12
|
-
## Important Notes
|
|
13
|
-
|
|
14
|
-
- When extended thinking is enabled, temperature parameter must NOT be set (or set to 1)
|
|
15
|
-
- The `streamNode()` method was removed in smartrequest v5, use `response.stream()` with `Readable.fromWeb()` instead
|
|
16
|
-
|
|
17
|
-
## Provider Capabilities Summary
|
|
18
|
-
|
|
19
|
-
| Provider | Chat | Stream | TTS | Vision | Documents | Research | Images |
|
|
20
|
-
|--------------|------|--------|-----|--------|-----------|----------|--------|
|
|
21
|
-
| OpenAI | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
22
|
-
| Anthropic | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ |
|
|
23
|
-
| Mistral | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ |
|
|
24
|
-
| ElevenLabs | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
|
|
25
|
-
| Ollama | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ |
|
|
26
|
-
| XAI | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ |
|
|
27
|
-
| Perplexity | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ |
|
|
28
|
-
| Groq | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
29
|
-
| Exo | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
3
|
+
## Architecture (v1.0.0 - Vercel AI SDK rewrite)
|
|
30
4
|
|
|
31
|
-
|
|
5
|
+
The package is a **provider registry** built on the Vercel AI SDK (`ai` v6). The core export returns a `LanguageModelV3` from `@ai-sdk/provider`. Specialized capabilities are in subpath exports.
|
|
32
6
|
|
|
33
|
-
###
|
|
7
|
+
### Core Entry (`ts/`)
|
|
8
|
+
- `getModel(options)` → returns `LanguageModelV3` for any supported provider
|
|
9
|
+
- Providers: anthropic, openai, google, groq, mistral, xai, perplexity, ollama
|
|
10
|
+
- Anthropic prompt caching via `wrapLanguageModel` middleware (enabled by default)
|
|
11
|
+
- Custom Ollama provider implementing `LanguageModelV3` directly (for think, num_ctx support)
|
|
34
12
|
|
|
35
|
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
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.
|
|
42
|
-
|
|
43
|
-
### Configuration
|
|
44
|
-
|
|
45
|
-
```typescript
|
|
46
|
-
import * as smartai from '@push.rocks/smartai';
|
|
47
|
-
|
|
48
|
-
const provider = new smartai.MistralProvider({
|
|
49
|
-
mistralToken: 'your-token-here',
|
|
50
|
-
chatModel: 'mistral-large-latest', // default
|
|
51
|
-
ocrModel: 'mistral-ocr-latest', // default
|
|
52
|
-
tableFormat: 'markdown', // 'markdown' or 'html'
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
await provider.start();
|
|
56
|
-
```
|
|
13
|
+
### Subpath Exports
|
|
14
|
+
- `@push.rocks/smartai/vision` — `analyzeImage()` using `generateText` with image content
|
|
15
|
+
- `@push.rocks/smartai/audio` — `textToSpeech()` using OpenAI SDK directly
|
|
16
|
+
- `@push.rocks/smartai/image` — `generateImage()`, `editImage()` using OpenAI SDK directly
|
|
17
|
+
- `@push.rocks/smartai/document` — `analyzeDocuments()` using SmartPdf + `generateText`
|
|
18
|
+
- `@push.rocks/smartai/research` — `research()` using `@anthropic-ai/sdk` web_search tool
|
|
57
19
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
Tests require `MISTRAL_API_KEY` in `.nogit/env.json`.
|
|
61
|
-
|
|
62
|
-
## Anthropic Extended Thinking Feature
|
|
63
|
-
|
|
64
|
-
### Configuration
|
|
65
|
-
|
|
66
|
-
Extended thinking is configured at the provider level during instantiation:
|
|
67
|
-
|
|
68
|
-
```typescript
|
|
69
|
-
import * as smartai from '@push.rocks/smartai';
|
|
20
|
+
## Dependencies
|
|
70
21
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
22
|
+
- `ai` ^6.0.116 — Vercel AI SDK core
|
|
23
|
+
- `@ai-sdk/*` — Provider packages (anthropic, openai, google, groq, mistral, xai, perplexity)
|
|
24
|
+
- `@ai-sdk/provider` ^3.0.8 — LanguageModelV3 types
|
|
25
|
+
- `@anthropic-ai/sdk` ^0.78.0 — Direct SDK for research (web search tool)
|
|
26
|
+
- `openai` ^6.25.0 — Direct SDK for audio TTS and image generation/editing
|
|
27
|
+
- `@push.rocks/smartpdf` ^4.1.3 — PDF to PNG conversion for document analysis
|
|
76
28
|
|
|
77
|
-
|
|
29
|
+
## Build
|
|
78
30
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
| `'quick'` | 2,048 | Lightweight reasoning for simple queries |
|
|
82
|
-
| `'normal'` | 8,000 | **Default** - Balanced reasoning for most tasks |
|
|
83
|
-
| `'deep'` | 16,000 | Complex reasoning for difficult problems |
|
|
84
|
-
| `'off'` | 0 | Disable extended thinking |
|
|
31
|
+
- `pnpm build` → `tsbuild tsfolders --allowimplicitany`
|
|
32
|
+
- Compiles: ts/, ts_vision/, ts_audio/, ts_image/, ts_document/, ts_research/
|
|
85
33
|
|
|
86
|
-
|
|
34
|
+
## Important Notes
|
|
87
35
|
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
36
|
+
- LanguageModelV3 uses `unified`/`raw` in FinishReason (not `type`/`rawType`)
|
|
37
|
+
- LanguageModelV3 system messages have `content: string` (not array)
|
|
38
|
+
- LanguageModelV3 file parts use `mediaType` (not `mimeType`)
|
|
39
|
+
- LanguageModelV3FunctionTool uses `inputSchema` (not `parameters`)
|
|
40
|
+
- Ollama `think` param goes at request body top level, not inside `options`
|
|
41
|
+
- Qwen models get default temperature 0.55 in the custom Ollama provider
|
|
42
|
+
- `qenv.getEnvVarOnDemand()` returns a Promise — must be awaited in tests
|
|
91
43
|
|
|
92
44
|
## Testing
|
|
93
45
|
|
|
94
|
-
Run tests with:
|
|
95
|
-
|
|
96
|
-
```bash
|
|
97
|
-
pnpm test
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
Run specific tests:
|
|
101
|
-
|
|
102
46
|
```bash
|
|
103
|
-
|
|
47
|
+
pnpm test # all tests
|
|
48
|
+
tstest test/test.smartai.ts --verbose # core tests
|
|
49
|
+
tstest test/test.ollama.ts --verbose # ollama provider tests (mocked, no API needed)
|
|
104
50
|
```
|