utilitas 2000.3.28 → 2000.3.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/utilitas.lite.mjs +1 -1
- package/dist/utilitas.lite.mjs.map +1 -1
- package/lib/alan.mjs +32 -31
- package/lib/manifest.mjs +1 -1
- package/package.json +1 -1
package/lib/alan.mjs
CHANGED
|
@@ -172,27 +172,28 @@ const MODELS = {
|
|
|
172
172
|
documentCostTokens: 3000 * 10, maxDocumentFile: m(32),
|
|
173
173
|
maxDocumentPages: 100, imageCostTokens: ~~(v8k / 750),
|
|
174
174
|
maxImagePerPrompt: 100, maxFileSize: m(5), maxImageSize: 2000 * 2000,
|
|
175
|
-
supportedMimeTypes: [MIME_TEXT, MIME_PNG, MIME_JPEG, MIME_GIF, MIME_WEBP, MIME_PDF],
|
|
176
175
|
json: true, reasoning: true, tools: true, vision: true,
|
|
176
|
+
supportedMimeTypes: [
|
|
177
|
+
MIME_TEXT, MIME_PNG, MIME_JPEG, MIME_GIF, MIME_WEBP, MIME_PDF,
|
|
178
|
+
],
|
|
177
179
|
defaultProvider: OPENROUTER,
|
|
178
180
|
},
|
|
179
181
|
// tts/stt models
|
|
180
182
|
[GEMINI_25_FLASH_TTS]: {
|
|
181
|
-
source: S_GOOGLE, maxInputTokens: kT(32),
|
|
182
|
-
|
|
183
|
+
source: S_GOOGLE, maxInputTokens: kT(32), audio: true, fast: true,
|
|
184
|
+
hidden: true, defaultProvider: GOOGLE,
|
|
183
185
|
},
|
|
184
186
|
[GEMINI_25_PRO_TTS]: {
|
|
185
|
-
source: S_GOOGLE, maxInputTokens: kT(32),
|
|
186
|
-
|
|
187
|
+
source: S_GOOGLE, maxInputTokens: kT(32), audio: true,
|
|
188
|
+
hidden: true, defaultProvider: GOOGLE,
|
|
187
189
|
},
|
|
188
190
|
[GPT_4O_MIMI_TTS]: {
|
|
189
|
-
source: S_OPENAI, maxInputTokens: kT(2),
|
|
190
|
-
|
|
191
|
+
source: S_OPENAI, maxInputTokens: kT(2), audio: true, fast: true,
|
|
192
|
+
hidden: true, defaultProvider: OPENAI,
|
|
191
193
|
},
|
|
192
194
|
[GPT_4O_TRANSCRIBE]: {
|
|
193
|
-
source: S_OPENAI, maxInputTokens: 0,
|
|
194
|
-
|
|
195
|
-
defaultProvider: OPENAI,
|
|
195
|
+
source: S_OPENAI, maxInputTokens: 0, hearing: true, fast: true,
|
|
196
|
+
hidden: true, defaultProvider: OPENAI,
|
|
196
197
|
},
|
|
197
198
|
// models with deepsearch capabilities
|
|
198
199
|
[JINA_DEEPSEARCH]: { // @todo: parse more details from results, eg: "reed urls".
|
|
@@ -290,8 +291,8 @@ const PROVIDER_ICONS = {
|
|
|
290
291
|
|
|
291
292
|
const FEATURE_ICONS = {
|
|
292
293
|
audio: '📣', deepsearch: '🔍', fast: '⚡️', finetune: '🔧', hearing: '👂',
|
|
293
|
-
image: '🎨', json: '📊', reasoning: '🧠', tools: '🧰',
|
|
294
|
-
vision: '👁️',
|
|
294
|
+
hidden: '🙈', image: '🎨', json: '📊', reasoning: '🧠', tools: '🧰',
|
|
295
|
+
video: '🎬', vision: '👁️',
|
|
295
296
|
};
|
|
296
297
|
|
|
297
298
|
const tokenRatioByWords = Math.min(
|
|
@@ -526,12 +527,16 @@ const init = async (options = {}) => {
|
|
|
526
527
|
};
|
|
527
528
|
|
|
528
529
|
const packAi = (ais, options = {}) => {
|
|
529
|
-
|
|
530
|
+
let res = options.basic ? ais.map(x => ({
|
|
530
531
|
id: x.id, name: x.name, features: x.features,
|
|
531
532
|
initOrder: x.initOrder, priority: x.priority,
|
|
532
533
|
provider: x.provider, model: x.model,
|
|
533
534
|
})) : ais;
|
|
534
|
-
|
|
535
|
+
if (options.all && !Object.keys(options.select).length && !options.withHidden) {
|
|
536
|
+
res = res.filter(x => !x.model.hidden);
|
|
537
|
+
} else if (options.withHidden) { } else { res = res[0]; }
|
|
538
|
+
assert(res?.length || res?.id, 'AI not found.');
|
|
539
|
+
return res;
|
|
535
540
|
};
|
|
536
541
|
|
|
537
542
|
const getAi = async (id, options = {}) => {
|
|
@@ -541,26 +546,22 @@ const getAi = async (id, options = {}) => {
|
|
|
541
546
|
const ai = ais.find(x => x.id === id);
|
|
542
547
|
assert(ai, `AI not found: ${id}.`);
|
|
543
548
|
return options?.client ? ai?.client : ai;
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
}
|
|
549
|
+
}
|
|
550
|
+
const res = [];
|
|
551
|
+
for (let x of ais) {
|
|
552
|
+
let select = true;
|
|
553
|
+
for (let i in options.select) {
|
|
554
|
+
if (options.select[i] && i !== 'fast' && !x.model[i]) {
|
|
555
|
+
select = false; break;
|
|
552
556
|
}
|
|
553
|
-
select && (res.push(x));
|
|
554
557
|
}
|
|
555
|
-
|
|
556
|
-
if (best.length) { return packAi(best, options); }
|
|
557
|
-
assert(res.length, 'AI not found.');
|
|
558
|
-
log(`Best match AI not found, fallbacked: ${JSON.stringify(options.select)}.`);
|
|
559
|
-
return packAi(res, options);
|
|
558
|
+
select && (res.push(x));
|
|
560
559
|
}
|
|
561
|
-
const
|
|
562
|
-
|
|
563
|
-
|
|
560
|
+
const best = options.select?.fast ? res.filter(x => x.model.fast) : res;
|
|
561
|
+
if (best.length) { return packAi(best, options); }
|
|
562
|
+
assert(res.length, 'AI not found.');
|
|
563
|
+
log(`Best match AI not found, fallbacked: ${JSON.stringify(options.select)}.`);
|
|
564
|
+
return packAi(res, options);
|
|
564
565
|
};
|
|
565
566
|
|
|
566
567
|
const countTokens = async (input, options) => {
|
package/lib/manifest.mjs
CHANGED