utilitas 1999.1.19 → 1999.1.20
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/utilitas.lite.mjs +1 -1
- package/dist/utilitas.lite.mjs.map +1 -1
- package/lib/alan.mjs +22 -4
- package/lib/manifest.mjs +1 -1
- package/package.json +1 -1
package/lib/alan.mjs
CHANGED
|
@@ -101,6 +101,7 @@ const log = (cnt, opt) => _log(cnt, import.meta.url, { time: 1, ...opt || {} });
|
|
|
101
101
|
const assertContent = content => assert(content.length, CONTENT_IS_REQUIRED);
|
|
102
102
|
const countToolCalls = r => r?.split('\n').filter(x => x === TOOLS_STR).length;
|
|
103
103
|
const assertApiKey = (p, o) => assert(o?.apiKey, `${p} api key is required.`);
|
|
104
|
+
const getProviderIcon = provider => PROVIDER_ICONS[provider] || '🔮';
|
|
104
105
|
const libOpenAi = async opts => await need('openai', { ...opts, raw: true });
|
|
105
106
|
const OpenAI = async opts => new (await libOpenAi(opts)).OpenAI(opts);
|
|
106
107
|
const AzureOpenAI = async opts => new (await libOpenAi(opts)).AzureOpenAI(opts);
|
|
@@ -166,8 +167,8 @@ const MODELS = {
|
|
|
166
167
|
[JINA_DEEPSEARCH]: {
|
|
167
168
|
contextWindow: Infinity, maxInputTokens: Infinity,
|
|
168
169
|
maxOutputTokens: Infinity, imageCostTokens: 0, maxImageSize: Infinity,
|
|
169
|
-
supportedMimeTypes: [png, jpeg, MIME_TEXT, webp, pdf],
|
|
170
|
-
|
|
170
|
+
supportedMimeTypes: [png, jpeg, MIME_TEXT, webp, pdf], reasoning: true,
|
|
171
|
+
json: true, vision: true, deepsearch: true, defaultProvider: JINA,
|
|
171
172
|
},
|
|
172
173
|
[DEEPSEEK_R1]: {
|
|
173
174
|
contextWindow: kT(128), maxOutputTokens: k(32),
|
|
@@ -234,6 +235,17 @@ const DEFAULT_EMBEDDING = {
|
|
|
234
235
|
[JINA]: JINA_CLIP,
|
|
235
236
|
};
|
|
236
237
|
|
|
238
|
+
const PROVIDER_ICONS = {
|
|
239
|
+
[OPENAI]: '⚛️', [AZURE_OPENAI]: '⚛️',
|
|
240
|
+
[ANTHROPIC]: '✳️', [VERTEX_ANTHROPIC]: '✳️',
|
|
241
|
+
[GEMINI]: '♊️', [AZURE]: '☁️', [OLLAMA]: '🦙', [JINA]: '✴️',
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
const FEATURE_ICONS = {
|
|
245
|
+
audio: '📣', deepsearch: '🔍', fast: '⚡️', image: '🎨',
|
|
246
|
+
json: '📊', reasoning: '🧠', tools: '🧰', vision: '👁️',
|
|
247
|
+
};
|
|
248
|
+
|
|
237
249
|
const tokenRatioByWords = Math.min(
|
|
238
250
|
100 / 75, // ChatGPT: https://platform.openai.com/tokenizer
|
|
239
251
|
Math.min(100 / 60, 100 / 80), // Gemini: https://ai.google.dev/gemini-api/docs/tokens?lang=node
|
|
@@ -356,8 +368,13 @@ const buildAiId = (provider, model) => [provider, model].map(
|
|
|
356
368
|
|
|
357
369
|
const setupAi = ai => {
|
|
358
370
|
const id = buildAiId(ai.provider, ai.model.name);
|
|
371
|
+
const icon = getProviderIcon(ai.provider);
|
|
372
|
+
const features = Object.entries(FEATURE_ICONS).map(
|
|
373
|
+
x => ai.model[x[0]] ? x[1] : ''
|
|
374
|
+
).join('');
|
|
359
375
|
ais.push({
|
|
360
|
-
id,
|
|
376
|
+
id, name: `${icon} ${ai.provider} (${ai.model.name})`,
|
|
377
|
+
features, initOrder: ais.length,
|
|
361
378
|
priority: DEFAULT_MODELS[ai.provider] === ai.model.name ? -1 : 0,
|
|
362
379
|
modelEmbedding: MODELS[DEFAULT_EMBEDDING[ai.provider]], ...ai,
|
|
363
380
|
prompt: ai.prompt && (async (c, o) => await ai.prompt(id, c, o)),
|
|
@@ -478,7 +495,8 @@ const init = async (options = {}) => {
|
|
|
478
495
|
|
|
479
496
|
const packAi = (ais, options = {}) => {
|
|
480
497
|
const res = options.basic ? ais.map(x => ({
|
|
481
|
-
id: x.id,
|
|
498
|
+
id: x.id, name: x.name, features: x.features,
|
|
499
|
+
initOrder: x.initOrder, priority: x.priority,
|
|
482
500
|
provider: x.provider, model: x.model, modelEmbedding: x.modelEmbedding,
|
|
483
501
|
prompt: !!x.prompt, embedding: !!x.embedding,
|
|
484
502
|
})) : ais;
|
package/lib/manifest.mjs
CHANGED