utilitas 1999.1.51 → 1999.1.52
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 +5 -5
- package/dist/utilitas.lite.mjs +1 -1
- package/dist/utilitas.lite.mjs.map +1 -1
- package/lib/alan.mjs +49 -59
- package/lib/manifest.mjs +19 -19
- package/package.json +19 -19
package/lib/alan.mjs
CHANGED
|
@@ -56,36 +56,34 @@ const [
|
|
|
56
56
|
];
|
|
57
57
|
|
|
58
58
|
const [
|
|
59
|
-
OPENAI, GEMINI, OPENAI_TRAINING, OLLAMA, GPT_4O,
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
GEMINI_25_PRO, SILICONFLOW, SF_DEEPSEEK_V3,
|
|
59
|
+
OPENAI, GEMINI, OPENAI_TRAINING, OLLAMA, GPT_4O, GPT_O3, GEMINI_25_FLASH,
|
|
60
|
+
NOVA, DEEPSEEK_R1, MD_CODE, TEXT_EMBEDDING_3_SMALL, TEXT_EMBEDDING_3_LARGE,
|
|
61
|
+
CLOUD_37_SONNET, AUDIO, WAV, ATTACHMENTS, CHAT, OPENAI_VOICE, MEDIUM, LOW,
|
|
62
|
+
HIGH, GPT_REASONING_EFFORT, THINK, THINK_STR, THINK_END, AZURE, TOOLS_STR,
|
|
63
|
+
TOOLS_END, TOOLS, TEXT, THINKING, OK, FUNC, GPT_41, REDACTED_THINKING,
|
|
64
|
+
GEMMA_3_27B, AZURE_OPENAI, ANTHROPIC, VERTEX_ANTHROPIC, v8k, ais,
|
|
65
|
+
MAX_TOOL_RECURSION, LOG, name, user, system, assistant, MODEL, JSON_OBJECT,
|
|
66
|
+
TOOL, silent, GEMINI_EMBEDDING_M, INVALID_FILE, tokenSafeRatio,
|
|
67
|
+
GPT_QUERY_LIMIT, CONTENT_IS_REQUIRED, OPENAI_HI_RES_SIZE, k, kT, m, minute,
|
|
68
|
+
hour, gb, trimTailing, EBD, GEMINI_20_FLASH, IMAGE, JINA, JINA_DEEPSEARCH,
|
|
69
|
+
JINA_CLIP, VERTEX, GEMINI_25_PRO, SILICONFLOW, SF_DEEPSEEK_V3,
|
|
71
70
|
] = [
|
|
72
|
-
'OpenAI', 'Gemini', 'OPENAI_TRAINING', 'Ollama', 'gpt-4o', '
|
|
73
|
-
'
|
|
74
|
-
'text-embedding-3-small', 'text-embedding-3-large',
|
|
71
|
+
'OpenAI', 'Gemini', 'OPENAI_TRAINING', 'Ollama', 'gpt-4o', 'o3',
|
|
72
|
+
'gemini-2.5-flash-preview-04-17', 'nova', 'deepseek-r1',
|
|
73
|
+
'```', 'text-embedding-3-small', 'text-embedding-3-large',
|
|
75
74
|
'claude-3-7-sonnet@20250219', 'audio', 'wav', '[ATTACHMENTS]', 'CHAT',
|
|
76
75
|
'OPENAI_VOICE', 'medium', 'low', 'high', 'medium', 'think', '<think>',
|
|
77
76
|
'</think>', 'AZURE', '<tools>', '</tools>', 'tools', 'text', 'thinking',
|
|
78
|
-
'OK', 'function', 'gpt-4.
|
|
79
|
-
'
|
|
80
|
-
|
|
81
|
-
'
|
|
82
|
-
'
|
|
83
|
-
|
|
84
|
-
x =>
|
|
85
|
-
x =>
|
|
86
|
-
|
|
87
|
-
'jina-
|
|
88
|
-
'gemini-2.5-pro-exp-03-25', 'SiliconFlow',
|
|
77
|
+
'OK', 'function', 'gpt-4.1', 'redacted_thinking', 'gemma3:27b',
|
|
78
|
+
'Azure Openai', 'Anthropic', 'Vertex Anthropic', 7680 * 4320, [], 10,
|
|
79
|
+
{ log: true }, 'Alan', 'user', 'system', 'assistant', 'model',
|
|
80
|
+
'json_object', 'tool', true, 'gemini-embedding-exp-03-07',
|
|
81
|
+
'Invalid file data.', 1.1, 100, 'Content is required.', 2000 * 768,
|
|
82
|
+
x => 1024 * x, x => 1000 * x, x => 1024 * 1024 * x, x => 60 * x,
|
|
83
|
+
x => 60 * 60 * x, x => 1024 * 1024 * 1024 * x,
|
|
84
|
+
x => x.replace(/[\.\s]*$/, ''), { embedding: true },
|
|
85
|
+
'gemini-2.0-flash-exp', 'image', 'Jina', 'jina-deepsearch-v1',
|
|
86
|
+
'jina-clip-v2', 'Vertex', 'gemini-2.5-pro-exp-03-25', 'SiliconFlow',
|
|
89
87
|
'Pro/deepseek-ai/DeepSeek-V3',
|
|
90
88
|
];
|
|
91
89
|
|
|
@@ -120,6 +118,7 @@ const OPENAI_RULES = {
|
|
|
120
118
|
};
|
|
121
119
|
|
|
122
120
|
const GEMINI_RULES = {
|
|
121
|
+
contextWindow: m(1), json: true,
|
|
123
122
|
audioCostTokens: 1000 * 1000 * 1, // 8.4 hours => 1 million tokens
|
|
124
123
|
imageCostTokens: ~~(v8k / (768 * 768) * 258), maxAudioLength: hour(8.4),
|
|
125
124
|
maxAudioPerPrompt: 1, maxFileSize: m(20), maxImagePerPrompt: 3000,
|
|
@@ -133,26 +132,27 @@ const GEMINI_RULES = {
|
|
|
133
132
|
// https://platform.openai.com/docs/models
|
|
134
133
|
// https://cloud.google.com/vertex-ai/docs/generative-ai/learn/models
|
|
135
134
|
const MODELS = {
|
|
136
|
-
[GPT_4O]: { ...OPENAI_RULES, ...OPENAI_S1 },
|
|
137
|
-
[
|
|
138
|
-
[
|
|
139
|
-
[GPT_O3_MINI]: {
|
|
140
|
-
...OPENAI_RULES, ...OPENAI_S2,
|
|
141
|
-
fast: true, reasoning: true, vision: GPT_O1,
|
|
142
|
-
},
|
|
135
|
+
[GPT_4O]: { ...OPENAI_RULES, ...OPENAI_S1, defaultProvider: null },
|
|
136
|
+
[GPT_41]: { ...OPENAI_RULES, ...OPENAI_S1, fast: true, finetune: true },
|
|
137
|
+
[GPT_O3]: { ...OPENAI_RULES, ...OPENAI_S2, reasoning: true },
|
|
143
138
|
[GEMINI_20_FLASH]: {
|
|
144
|
-
...GEMINI_RULES,
|
|
145
|
-
fast: true,
|
|
139
|
+
...GEMINI_RULES, maxOutputTokens: k(8),
|
|
140
|
+
fast: true, image: true, tools: false,
|
|
141
|
+
},
|
|
142
|
+
[GEMINI_25_FLASH]: {
|
|
143
|
+
...GEMINI_RULES, maxOutputTokens: k(64),
|
|
144
|
+
fast: true, reasoning: true, tools: true,
|
|
146
145
|
},
|
|
147
146
|
[GEMINI_25_PRO]: {
|
|
148
|
-
...GEMINI_RULES,
|
|
149
|
-
|
|
147
|
+
...GEMINI_RULES, maxOutputTokens: k(64),
|
|
148
|
+
reasoning: true, tools: true,
|
|
150
149
|
},
|
|
151
150
|
[GEMMA_3_27B]: {
|
|
152
151
|
contextWindow: kT(128), maxOutputTokens: k(8),
|
|
153
152
|
imageCostTokens: 256, maxImageSize: 896 * 896,
|
|
154
153
|
supportedMimeTypes: [png, jpeg, gif],
|
|
155
|
-
fast: true, json: true, vision: true,
|
|
154
|
+
fast: true, json: true, vision: true,
|
|
155
|
+
defaultProvider: OLLAMA,
|
|
156
156
|
},
|
|
157
157
|
[JINA_DEEPSEARCH]: {
|
|
158
158
|
contextWindow: Infinity, maxInputTokens: Infinity,
|
|
@@ -202,27 +202,18 @@ for (const n in MODELS) {
|
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
-
MODELS[GEMINI_20_FLASH].image = GEMINI_20_FLASH_EXP;
|
|
206
|
-
MODELS[GEMINI_20_FLASH_EXP] = {
|
|
207
|
-
...MODELS[GEMINI_20_FLASH],
|
|
208
|
-
name: GEMINI_20_FLASH_EXP, image: true, tools: false,
|
|
209
|
-
};
|
|
210
|
-
MODELS[GEMMA327B] = { // Ollama Alias
|
|
211
|
-
...MODELS[GEMMA_3_27B], name: GEMMA327B, defaultProvider: OLLAMA
|
|
212
|
-
};
|
|
213
|
-
|
|
214
205
|
// Default models for each provider
|
|
215
206
|
const DEFAULT_MODELS = {
|
|
216
|
-
[OPENAI]:
|
|
207
|
+
[OPENAI]: GPT_41,
|
|
217
208
|
[AZURE_OPENAI]: GPT_4O,
|
|
218
209
|
[SILICONFLOW]: SF_DEEPSEEK_V3,
|
|
219
|
-
[GEMINI]:
|
|
210
|
+
[GEMINI]: GEMINI_25_FLASH,
|
|
220
211
|
[ANTHROPIC]: CLOUD_37_SONNET,
|
|
221
212
|
[VERTEX_ANTHROPIC]: CLOUD_37_SONNET,
|
|
222
213
|
[JINA]: JINA_DEEPSEARCH,
|
|
223
|
-
[OLLAMA]:
|
|
214
|
+
[OLLAMA]: GEMMA_3_27B,
|
|
224
215
|
[OPENAI_VOICE]: NOVA,
|
|
225
|
-
[OPENAI_TRAINING]:
|
|
216
|
+
[OPENAI_TRAINING]: GPT_41, // https://platform.openai.com/docs/guides/fine-tuning
|
|
226
217
|
};
|
|
227
218
|
|
|
228
219
|
const DEFAULT_EMBEDDING = {
|
|
@@ -238,7 +229,7 @@ const PROVIDER_ICONS = {
|
|
|
238
229
|
};
|
|
239
230
|
|
|
240
231
|
const FEATURE_ICONS = {
|
|
241
|
-
audio: '📣', deepsearch: '🔍', fast: '⚡️', image: '🎨',
|
|
232
|
+
audio: '📣', deepsearch: '🔍', fast: '⚡️', finetune: '🔧', image: '🎨',
|
|
242
233
|
json: '📊', reasoning: '🧠', tools: '🧰', vision: '👁️',
|
|
243
234
|
};
|
|
244
235
|
|
|
@@ -815,7 +806,7 @@ const buildPrompts = async (model, input, options = {}) => {
|
|
|
815
806
|
break;
|
|
816
807
|
case GEMINI:
|
|
817
808
|
const _role = {
|
|
818
|
-
role: [
|
|
809
|
+
role: [GEMINI_20_FLASH].includes(options.model)
|
|
819
810
|
? user : system
|
|
820
811
|
};
|
|
821
812
|
systemPrompt = buildGeminiHistory(options.systemPrompt, _role);
|
|
@@ -859,7 +850,6 @@ const buildPrompts = async (model, input, options = {}) => {
|
|
|
859
850
|
break;
|
|
860
851
|
case GEMINI:
|
|
861
852
|
history.push(
|
|
862
|
-
...options.model === GEMMA_3_27B ? [systemPrompt] : [],
|
|
863
853
|
...options.toolsResult?.length ? [
|
|
864
854
|
buildGeminiHistory(content, { ...options, role: user }),
|
|
865
855
|
...options.toolsResult.slice(0, options.toolsResult.length - 1)
|
|
@@ -878,7 +868,7 @@ const buildPrompts = async (model, input, options = {}) => {
|
|
|
878
868
|
} // @todo: audioCostTokens (needs to calculate the audio length):
|
|
879
869
|
}, model.maxInputTokens - options.attachments?.length * model.imageCostTokens);
|
|
880
870
|
if ([OPENAI].includes(options.flavor)
|
|
881
|
-
|| [
|
|
871
|
+
|| [GEMINI_20_FLASH].includes(options.model)) {
|
|
882
872
|
systemPrompt = null;
|
|
883
873
|
}
|
|
884
874
|
return { systemPrompt, history, prompt };
|
|
@@ -1186,7 +1176,7 @@ const promptGemini = async (aiId, content, options = {}) => {
|
|
|
1186
1176
|
systemInstruction, responseModalities: options.modalities || (
|
|
1187
1177
|
options.imageMode ? [TEXT, IMAGE] : undefined
|
|
1188
1178
|
), ...options?.config || {}, ...model?.tools && !options.jsonMode
|
|
1189
|
-
&& options.model !==
|
|
1179
|
+
&& options.model !== GEMINI_20_FLASH ? (options.tools ?? {
|
|
1190
1180
|
tools: [
|
|
1191
1181
|
// @todo: Gemini will failed when using these tools together.
|
|
1192
1182
|
// https://ai.google.dev/gemini-api/docs/function-calling
|
|
@@ -1538,10 +1528,10 @@ export {
|
|
|
1538
1528
|
FEATURE_ICONS,
|
|
1539
1529
|
FUNCTION,
|
|
1540
1530
|
GEMINI_20_FLASH,
|
|
1541
|
-
|
|
1531
|
+
GEMINI_25_FLASH,
|
|
1532
|
+
GPT_41,
|
|
1542
1533
|
GPT_4O,
|
|
1543
|
-
|
|
1544
|
-
GPT_O3_MINI,
|
|
1534
|
+
GPT_O3,
|
|
1545
1535
|
INSTRUCTIONS,
|
|
1546
1536
|
MODELS,
|
|
1547
1537
|
OPENAI_VOICE,
|
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": "1999.1.
|
|
4
|
+
"version": "1999.1.52",
|
|
5
5
|
"private": false,
|
|
6
6
|
"homepage": "https://github.com/Leask/utilitas",
|
|
7
7
|
"main": "index.mjs",
|
|
@@ -20,7 +20,7 @@ const manifest = {
|
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"file-type": "^20.4.1",
|
|
23
|
-
"mathjs": "^14.
|
|
23
|
+
"mathjs": "^14.4.0",
|
|
24
24
|
"uuid": "^11.1.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
@@ -28,47 +28,47 @@ const manifest = {
|
|
|
28
28
|
"@anthropic-ai/vertex-sdk": "^0.7.0",
|
|
29
29
|
"@ffmpeg-installer/ffmpeg": "^1.1.0",
|
|
30
30
|
"@ffprobe-installer/ffprobe": "^2.1.2",
|
|
31
|
-
"@google-cloud/speech": "^7.0.
|
|
32
|
-
"@google-cloud/storage": "^7.
|
|
33
|
-
"@google-cloud/text-to-speech": "^6.0.
|
|
34
|
-
"@google-cloud/vision": "^5.
|
|
35
|
-
"@google/genai": "^0.
|
|
31
|
+
"@google-cloud/speech": "^7.0.1",
|
|
32
|
+
"@google-cloud/storage": "^7.16.0",
|
|
33
|
+
"@google-cloud/text-to-speech": "^6.0.1",
|
|
34
|
+
"@google-cloud/vision": "^5.1.0",
|
|
35
|
+
"@google/genai": "^0.9.0",
|
|
36
36
|
"@mozilla/readability": "github:mozilla/readability",
|
|
37
|
-
"@sentry/node": "^9.
|
|
38
|
-
"@sentry/profiling-node": "^9.
|
|
37
|
+
"@sentry/node": "^9.13.0",
|
|
38
|
+
"@sentry/profiling-node": "^9.13.0",
|
|
39
39
|
"acme-client": "^5.4.0",
|
|
40
40
|
"browserify-fs": "^1.0.0",
|
|
41
41
|
"buffer": "^6.0.3",
|
|
42
42
|
"fast-geoip": "^1.1.88",
|
|
43
43
|
"fluent-ffmpeg": "^2.1.3",
|
|
44
44
|
"form-data": "^4.0.2",
|
|
45
|
-
"ioredis": "^5.6.
|
|
45
|
+
"ioredis": "^5.6.1",
|
|
46
46
|
"js-tiktoken": "^1.0.19",
|
|
47
|
-
"jsdom": "^26.
|
|
47
|
+
"jsdom": "^26.1.0",
|
|
48
48
|
"lorem-ipsum": "^2.0.8",
|
|
49
49
|
"mailgun.js": "^12.0.1",
|
|
50
50
|
"mailparser": "^3.7.2",
|
|
51
|
-
"mime": "^4.0.
|
|
52
|
-
"mysql2": "^3.
|
|
51
|
+
"mime": "^4.0.7",
|
|
52
|
+
"mysql2": "^3.14.0",
|
|
53
53
|
"node-mailjet": "^6.0.8",
|
|
54
54
|
"node-polyfill-webpack-plugin": "^4.1.0",
|
|
55
55
|
"office-text-extractor": "^3.0.3",
|
|
56
|
-
"openai": "^4.
|
|
57
|
-
"pdfjs-dist": "^5.
|
|
56
|
+
"openai": "^4.95.0",
|
|
57
|
+
"pdfjs-dist": "^5.1.91",
|
|
58
58
|
"pg": "^8.14.1",
|
|
59
59
|
"pgvector": "^0.2.0",
|
|
60
60
|
"ping": "^0.4.4",
|
|
61
61
|
"process": "^0.11.10",
|
|
62
|
-
"puppeteer": "^24.
|
|
62
|
+
"puppeteer": "^24.6.1",
|
|
63
63
|
"say": "^0.16.0",
|
|
64
64
|
"telegraf": "^4.16.3",
|
|
65
65
|
"telesignsdk": "^3.0.2",
|
|
66
|
-
"tesseract.js": "^6.0.
|
|
67
|
-
"twilio": "^5.5.
|
|
66
|
+
"tesseract.js": "^6.0.1",
|
|
67
|
+
"twilio": "^5.5.2",
|
|
68
68
|
"url": "github:Leask/node-url",
|
|
69
69
|
"webpack-cli": "^6.0.1",
|
|
70
70
|
"whisper-node": "^1.1.1",
|
|
71
|
-
"wrangler": "^4.
|
|
71
|
+
"wrangler": "^4.12.0",
|
|
72
72
|
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.1/xlsx-0.20.1.tgz",
|
|
73
73
|
"youtube-transcript": "^1.2.1"
|
|
74
74
|
}
|
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": "1999.1.
|
|
4
|
+
"version": "1999.1.52",
|
|
5
5
|
"private": false,
|
|
6
6
|
"homepage": "https://github.com/Leask/utilitas",
|
|
7
7
|
"main": "index.mjs",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"file-type": "^20.4.1",
|
|
34
|
-
"mathjs": "^14.
|
|
34
|
+
"mathjs": "^14.4.0",
|
|
35
35
|
"uuid": "^11.1.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
@@ -39,47 +39,47 @@
|
|
|
39
39
|
"@anthropic-ai/vertex-sdk": "^0.7.0",
|
|
40
40
|
"@ffmpeg-installer/ffmpeg": "^1.1.0",
|
|
41
41
|
"@ffprobe-installer/ffprobe": "^2.1.2",
|
|
42
|
-
"@google-cloud/speech": "^7.0.
|
|
43
|
-
"@google-cloud/storage": "^7.
|
|
44
|
-
"@google-cloud/text-to-speech": "^6.0.
|
|
45
|
-
"@google-cloud/vision": "^5.
|
|
46
|
-
"@google/genai": "^0.
|
|
42
|
+
"@google-cloud/speech": "^7.0.1",
|
|
43
|
+
"@google-cloud/storage": "^7.16.0",
|
|
44
|
+
"@google-cloud/text-to-speech": "^6.0.1",
|
|
45
|
+
"@google-cloud/vision": "^5.1.0",
|
|
46
|
+
"@google/genai": "^0.9.0",
|
|
47
47
|
"@mozilla/readability": "github:mozilla/readability",
|
|
48
|
-
"@sentry/node": "^9.
|
|
49
|
-
"@sentry/profiling-node": "^9.
|
|
48
|
+
"@sentry/node": "^9.13.0",
|
|
49
|
+
"@sentry/profiling-node": "^9.13.0",
|
|
50
50
|
"acme-client": "^5.4.0",
|
|
51
51
|
"browserify-fs": "^1.0.0",
|
|
52
52
|
"buffer": "^6.0.3",
|
|
53
53
|
"fast-geoip": "^1.1.88",
|
|
54
54
|
"fluent-ffmpeg": "^2.1.3",
|
|
55
55
|
"form-data": "^4.0.2",
|
|
56
|
-
"ioredis": "^5.6.
|
|
56
|
+
"ioredis": "^5.6.1",
|
|
57
57
|
"js-tiktoken": "^1.0.19",
|
|
58
|
-
"jsdom": "^26.
|
|
58
|
+
"jsdom": "^26.1.0",
|
|
59
59
|
"lorem-ipsum": "^2.0.8",
|
|
60
60
|
"mailgun.js": "^12.0.1",
|
|
61
61
|
"mailparser": "^3.7.2",
|
|
62
|
-
"mime": "^4.0.
|
|
63
|
-
"mysql2": "^3.
|
|
62
|
+
"mime": "^4.0.7",
|
|
63
|
+
"mysql2": "^3.14.0",
|
|
64
64
|
"node-mailjet": "^6.0.8",
|
|
65
65
|
"node-polyfill-webpack-plugin": "^4.1.0",
|
|
66
66
|
"office-text-extractor": "^3.0.3",
|
|
67
|
-
"openai": "^4.
|
|
68
|
-
"pdfjs-dist": "^5.
|
|
67
|
+
"openai": "^4.95.0",
|
|
68
|
+
"pdfjs-dist": "^5.1.91",
|
|
69
69
|
"pg": "^8.14.1",
|
|
70
70
|
"pgvector": "^0.2.0",
|
|
71
71
|
"ping": "^0.4.4",
|
|
72
72
|
"process": "^0.11.10",
|
|
73
|
-
"puppeteer": "^24.
|
|
73
|
+
"puppeteer": "^24.6.1",
|
|
74
74
|
"say": "^0.16.0",
|
|
75
75
|
"telegraf": "^4.16.3",
|
|
76
76
|
"telesignsdk": "^3.0.2",
|
|
77
|
-
"tesseract.js": "^6.0.
|
|
78
|
-
"twilio": "^5.5.
|
|
77
|
+
"tesseract.js": "^6.0.1",
|
|
78
|
+
"twilio": "^5.5.2",
|
|
79
79
|
"url": "github:Leask/node-url",
|
|
80
80
|
"webpack-cli": "^6.0.1",
|
|
81
81
|
"whisper-node": "^1.1.1",
|
|
82
|
-
"wrangler": "^4.
|
|
82
|
+
"wrangler": "^4.12.0",
|
|
83
83
|
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.1/xlsx-0.20.1.tgz",
|
|
84
84
|
"youtube-transcript": "^1.2.1"
|
|
85
85
|
}
|