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/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), func: 'generateAudio',
182
- audio: true, fast: true, defaultProvider: GOOGLE,
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), func: 'generateAudio',
186
- audio: true, defaultProvider: GOOGLE,
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), func: 'generateAudio',
190
- audio: true, fast: true, defaultProvider: OPENAI,
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
- func: 'transcribeAudio', hearing: true, fast: true,
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: '🧰', video: '🎬',
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
- const res = options.basic ? ais.map(x => ({
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
- return options.all ? res : res[0];
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
- } else if (options?.select) {
545
- const res = [];
546
- for (let x of ais) {
547
- let select = true;
548
- for (let i in options.select) {
549
- if (options.select[i] && i !== 'fast' && !x.model[i]) {
550
- select = false; break;
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
- const best = options.select?.fast ? res.filter(x => x.model.fast) : res;
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 result = packAi(ais, options);
562
- assert(result?.length || result?.id, 'AI not found.');
563
- return result;
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
@@ -1,7 +1,7 @@
1
1
  const manifest = {
2
2
  "name": "utilitas",
3
3
  "description": "Just another common utility for JavaScript.",
4
- "version": "2000.3.28",
4
+ "version": "2000.3.29",
5
5
  "private": false,
6
6
  "homepage": "https://github.com/Leask/utilitas",
7
7
  "main": "index.mjs",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "utilitas",
3
3
  "description": "Just another common utility for JavaScript.",
4
- "version": "2000.3.28",
4
+ "version": "2000.3.29",
5
5
  "private": false,
6
6
  "homepage": "https://github.com/Leask/utilitas",
7
7
  "main": "index.mjs",