@jupyterlite/ai 0.18.0 → 0.19.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.
Files changed (108) hide show
  1. package/lib/chat-commands/clear.d.ts +1 -0
  2. package/lib/chat-commands/index.d.ts +1 -0
  3. package/lib/chat-commands/skills.d.ts +2 -1
  4. package/lib/chat-model-handler.d.ts +3 -1
  5. package/lib/chat-model.d.ts +46 -8
  6. package/lib/chat-model.js +51 -21
  7. package/lib/completion/completion-provider.d.ts +3 -1
  8. package/lib/completion/completion-provider.js +1 -2
  9. package/lib/completion/index.d.ts +1 -0
  10. package/lib/components/clear-button.d.ts +1 -0
  11. package/lib/components/clear-button.js +3 -4
  12. package/lib/components/completion-status.d.ts +1 -0
  13. package/lib/components/completion-status.js +5 -4
  14. package/lib/components/index.d.ts +1 -0
  15. package/lib/components/model-select.d.ts +1 -0
  16. package/lib/components/model-select.js +62 -67
  17. package/lib/components/save-button.d.ts +1 -0
  18. package/lib/components/save-button.js +4 -5
  19. package/lib/components/stop-button.d.ts +1 -0
  20. package/lib/components/stop-button.js +3 -4
  21. package/lib/components/tool-select.d.ts +3 -1
  22. package/lib/components/tool-select.js +47 -60
  23. package/lib/components/usage-display.d.ts +4 -2
  24. package/lib/components/usage-display.js +50 -61
  25. package/lib/diff-manager.d.ts +3 -1
  26. package/lib/index.d.ts +3 -2
  27. package/lib/index.js +28 -17
  28. package/lib/models/settings-model.d.ts +3 -1
  29. package/lib/rendered-message-outputarea.d.ts +1 -0
  30. package/lib/tokens.d.ts +18 -640
  31. package/lib/tokens.js +2 -31
  32. package/lib/widgets/ai-settings.d.ts +3 -1
  33. package/lib/widgets/ai-settings.js +185 -349
  34. package/lib/widgets/main-area-chat.d.ts +1 -0
  35. package/lib/widgets/provider-config-dialog.d.ts +2 -1
  36. package/lib/widgets/provider-config-dialog.js +102 -167
  37. package/package.json +111 -258
  38. package/src/chat-commands/skills.ts +2 -2
  39. package/src/chat-model-handler.ts +6 -4
  40. package/src/chat-model.ts +66 -19
  41. package/src/completion/completion-provider.ts +6 -6
  42. package/src/components/clear-button.tsx +0 -2
  43. package/src/components/completion-status.tsx +2 -2
  44. package/src/components/model-select.tsx +1 -1
  45. package/src/components/stop-button.tsx +0 -2
  46. package/src/components/tool-select.tsx +10 -9
  47. package/src/components/usage-display.tsx +4 -2
  48. package/src/diff-manager.ts +4 -3
  49. package/src/index.ts +62 -44
  50. package/src/models/settings-model.ts +6 -6
  51. package/src/tokens.ts +23 -788
  52. package/src/widgets/ai-settings.tsx +14 -11
  53. package/src/widgets/provider-config-dialog.tsx +8 -8
  54. package/LICENSE +0 -30
  55. package/README.md +0 -49
  56. package/lib/agent.d.ts +0 -280
  57. package/lib/agent.js +0 -1103
  58. package/lib/icons.d.ts +0 -3
  59. package/lib/icons.js +0 -8
  60. package/lib/providers/built-in-providers.d.ts +0 -21
  61. package/lib/providers/built-in-providers.js +0 -233
  62. package/lib/providers/generated-model-info.d.ts +0 -8
  63. package/lib/providers/generated-model-info.js +0 -502
  64. package/lib/providers/model-info.d.ts +0 -6
  65. package/lib/providers/model-info.js +0 -91
  66. package/lib/providers/models.d.ts +0 -37
  67. package/lib/providers/models.js +0 -28
  68. package/lib/providers/provider-registry.d.ts +0 -49
  69. package/lib/providers/provider-registry.js +0 -72
  70. package/lib/providers/provider-tools.d.ts +0 -36
  71. package/lib/providers/provider-tools.js +0 -93
  72. package/lib/skills/index.d.ts +0 -4
  73. package/lib/skills/index.js +0 -7
  74. package/lib/skills/parse-skill.d.ts +0 -25
  75. package/lib/skills/parse-skill.js +0 -69
  76. package/lib/skills/skill-loader.d.ts +0 -25
  77. package/lib/skills/skill-loader.js +0 -133
  78. package/lib/skills/skill-registry.d.ts +0 -31
  79. package/lib/skills/skill-registry.js +0 -100
  80. package/lib/skills/types.d.ts +0 -29
  81. package/lib/skills/types.js +0 -5
  82. package/lib/tools/commands.d.ts +0 -11
  83. package/lib/tools/commands.js +0 -154
  84. package/lib/tools/skills.d.ts +0 -9
  85. package/lib/tools/skills.js +0 -73
  86. package/lib/tools/tool-registry.d.ts +0 -35
  87. package/lib/tools/tool-registry.js +0 -55
  88. package/lib/tools/web.d.ts +0 -8
  89. package/lib/tools/web.js +0 -196
  90. package/src/agent.ts +0 -1431
  91. package/src/icons.ts +0 -11
  92. package/src/providers/built-in-providers.ts +0 -241
  93. package/src/providers/generated-model-info.ts +0 -508
  94. package/src/providers/model-info.ts +0 -145
  95. package/src/providers/models.ts +0 -76
  96. package/src/providers/provider-registry.ts +0 -88
  97. package/src/providers/provider-tools.ts +0 -179
  98. package/src/skills/index.ts +0 -14
  99. package/src/skills/parse-skill.ts +0 -91
  100. package/src/skills/skill-loader.ts +0 -175
  101. package/src/skills/skill-registry.ts +0 -137
  102. package/src/skills/types.ts +0 -37
  103. package/src/tools/commands.ts +0 -210
  104. package/src/tools/skills.ts +0 -84
  105. package/src/tools/tool-registry.ts +0 -63
  106. package/src/tools/web.ts +0 -238
  107. package/src/types.d.ts +0 -4
  108. package/style/icons/jupyternaut-lite.svg +0 -7
@@ -1,508 +0,0 @@
1
- /**
2
- * This file is generated by `jlpm sync:model-info`.
3
- * Source: https://models.dev/api.json
4
- * Backed by: https://github.com/anomalyco/models.dev
5
- * Generated: 2026-04-28T11:55:05.327Z
6
- */
7
-
8
- import type { IProviderModelInfo } from '../tokens';
9
-
10
- export const BUILT_IN_PROVIDER_MODEL_INFO: Record<
11
- string,
12
- Record<string, IProviderModelInfo>
13
- > = {
14
- anthropic: {
15
- 'claude-opus-4-6': {
16
- contextWindow: 1000000,
17
- supportsImages: true,
18
- supportsPdf: true,
19
- supportsAudio: false
20
- },
21
- 'claude-sonnet-4-6': {
22
- contextWindow: 1000000,
23
- supportsImages: true,
24
- supportsPdf: true,
25
- supportsAudio: false
26
- },
27
- 'claude-opus-4-5': {
28
- contextWindow: 200000,
29
- supportsImages: true,
30
- supportsPdf: true,
31
- supportsAudio: false
32
- },
33
- 'claude-opus-4-5-20251101': {
34
- contextWindow: 200000,
35
- supportsImages: true,
36
- supportsPdf: true,
37
- supportsAudio: false
38
- },
39
- 'claude-sonnet-4-5': {
40
- contextWindow: 200000,
41
- supportsImages: true,
42
- supportsPdf: true,
43
- supportsAudio: false
44
- },
45
- 'claude-sonnet-4-5-20250929': {
46
- contextWindow: 200000,
47
- supportsImages: true,
48
- supportsPdf: true,
49
- supportsAudio: false
50
- },
51
- 'claude-haiku-4-5': {
52
- contextWindow: 200000,
53
- supportsImages: true,
54
- supportsPdf: true,
55
- supportsAudio: false
56
- },
57
- 'claude-haiku-4-5-20251001': {
58
- contextWindow: 200000,
59
- supportsImages: true,
60
- supportsPdf: true,
61
- supportsAudio: false
62
- },
63
- 'claude-opus-4-1': {
64
- contextWindow: 200000,
65
- supportsImages: true,
66
- supportsPdf: true,
67
- supportsAudio: false
68
- },
69
- 'claude-opus-4-1-20250805': {
70
- contextWindow: 200000,
71
- supportsImages: true,
72
- supportsPdf: true,
73
- supportsAudio: false
74
- },
75
- 'claude-opus-4-0': {
76
- contextWindow: 200000,
77
- supportsImages: true,
78
- supportsPdf: true,
79
- supportsAudio: false
80
- },
81
- 'claude-opus-4-20250514': {
82
- contextWindow: 200000,
83
- supportsImages: true,
84
- supportsPdf: true,
85
- supportsAudio: false
86
- },
87
- 'claude-sonnet-4-0': {
88
- contextWindow: 200000,
89
- supportsImages: true,
90
- supportsPdf: true,
91
- supportsAudio: false
92
- },
93
- 'claude-sonnet-4-20250514': {
94
- contextWindow: 200000,
95
- supportsImages: true,
96
- supportsPdf: true,
97
- supportsAudio: false
98
- }
99
- },
100
- google: {
101
- 'gemini-3.1-pro-preview': {
102
- contextWindow: 1048576,
103
- supportsImages: true,
104
- supportsPdf: true,
105
- supportsAudio: true
106
- },
107
- 'gemini-3.1-pro-preview-customtools': {
108
- contextWindow: 1048576,
109
- supportsImages: true,
110
- supportsPdf: true,
111
- supportsAudio: true
112
- },
113
- 'gemini-3.1-flash-image-preview': {
114
- contextWindow: 131072,
115
- supportsImages: true,
116
- supportsPdf: true,
117
- supportsAudio: false
118
- },
119
- 'gemini-3.1-flash-lite-preview': {
120
- contextWindow: 1048576,
121
- supportsImages: true,
122
- supportsPdf: true,
123
- supportsAudio: true
124
- },
125
- 'gemini-3-flash-preview': {
126
- contextWindow: 1048576,
127
- supportsImages: true,
128
- supportsPdf: true,
129
- supportsAudio: true
130
- },
131
- 'gemini-2.5-pro': {
132
- contextWindow: 1048576,
133
- supportsImages: true,
134
- supportsPdf: true,
135
- supportsAudio: true
136
- },
137
- 'gemini-2.5-flash': {
138
- contextWindow: 1048576,
139
- supportsImages: true,
140
- supportsPdf: true,
141
- supportsAudio: true
142
- },
143
- 'gemini-2.5-flash-image': {
144
- contextWindow: 32768,
145
- supportsImages: true,
146
- supportsPdf: false,
147
- supportsAudio: false
148
- },
149
- 'gemini-2.5-flash-lite': {
150
- contextWindow: 1048576,
151
- supportsImages: true,
152
- supportsPdf: true,
153
- supportsAudio: true
154
- },
155
- 'gemini-flash-latest': {
156
- contextWindow: 1048576,
157
- supportsImages: true,
158
- supportsPdf: true,
159
- supportsAudio: true
160
- },
161
- 'gemini-flash-lite-latest': {
162
- contextWindow: 1048576,
163
- supportsImages: true,
164
- supportsPdf: true,
165
- supportsAudio: true
166
- }
167
- },
168
- mistral: {
169
- 'mistral-large-latest': {
170
- contextWindow: 262144,
171
- supportsImages: true,
172
- supportsPdf: false,
173
- supportsAudio: false
174
- },
175
- 'mistral-medium-latest': {
176
- contextWindow: 128000,
177
- supportsImages: true,
178
- supportsPdf: false,
179
- supportsAudio: false
180
- },
181
- 'mistral-medium-2508': {
182
- contextWindow: 262144,
183
- supportsImages: true,
184
- supportsPdf: false,
185
- supportsAudio: false
186
- },
187
- 'mistral-small-latest': {
188
- contextWindow: 256000,
189
- supportsImages: true,
190
- supportsPdf: false,
191
- supportsAudio: false
192
- },
193
- 'mistral-small-2506': {
194
- contextWindow: 128000,
195
- supportsImages: true,
196
- supportsPdf: false,
197
- supportsAudio: false
198
- },
199
- 'ministral-3b-latest': {
200
- contextWindow: 128000,
201
- supportsImages: false,
202
- supportsPdf: false,
203
- supportsAudio: false
204
- },
205
- 'ministral-8b-latest': {
206
- contextWindow: 128000,
207
- supportsImages: false,
208
- supportsPdf: false,
209
- supportsAudio: false
210
- },
211
- 'magistral-small-latest': {
212
- contextWindow: 128000,
213
- supportsImages: false,
214
- supportsPdf: false,
215
- supportsAudio: false
216
- },
217
- 'magistral-small': {
218
- contextWindow: 128000,
219
- supportsImages: false,
220
- supportsPdf: false,
221
- supportsAudio: false
222
- },
223
- 'magistral-medium-latest': {
224
- contextWindow: 128000,
225
- supportsImages: false,
226
- supportsPdf: false,
227
- supportsAudio: false
228
- },
229
- 'pixtral-large-latest': {
230
- contextWindow: 128000,
231
- supportsImages: true,
232
- supportsPdf: false,
233
- supportsAudio: false
234
- },
235
- 'codestral-latest': {
236
- contextWindow: 256000,
237
- supportsImages: false,
238
- supportsPdf: false,
239
- supportsAudio: false
240
- },
241
- 'devstral-latest': {
242
- contextWindow: 128000,
243
- supportsImages: false,
244
- supportsPdf: false,
245
- supportsAudio: false
246
- },
247
- 'devstral-small-2507': {
248
- contextWindow: 128000,
249
- supportsImages: false,
250
- supportsPdf: false,
251
- supportsAudio: false
252
- }
253
- },
254
- openai: {
255
- 'gpt-5.4': {
256
- contextWindow: 1050000,
257
- supportsImages: true,
258
- supportsPdf: true,
259
- supportsAudio: false
260
- },
261
- 'gpt-5.4-mini': {
262
- contextWindow: 400000,
263
- supportsImages: true,
264
- supportsPdf: false,
265
- supportsAudio: false
266
- },
267
- 'gpt-5.4-nano': {
268
- contextWindow: 400000,
269
- supportsImages: true,
270
- supportsPdf: false,
271
- supportsAudio: false
272
- },
273
- 'gpt-5.2': {
274
- contextWindow: 400000,
275
- supportsImages: true,
276
- supportsPdf: false,
277
- supportsAudio: false
278
- },
279
- 'gpt-5.2-2025-12-11': {
280
- contextWindow: 400000,
281
- supportsImages: true,
282
- supportsPdf: false,
283
- supportsAudio: false
284
- },
285
- 'gpt-5.2-chat-latest': {
286
- contextWindow: 128000,
287
- supportsImages: true,
288
- supportsPdf: false,
289
- supportsAudio: false
290
- },
291
- 'gpt-5.2-pro': {
292
- contextWindow: 400000,
293
- supportsImages: true,
294
- supportsPdf: false,
295
- supportsAudio: false
296
- },
297
- 'gpt-5.2-pro-2025-12-11': {
298
- contextWindow: 400000,
299
- supportsImages: true,
300
- supportsPdf: false,
301
- supportsAudio: false
302
- },
303
- 'gpt-5.2-codex': {
304
- contextWindow: 400000,
305
- supportsImages: true,
306
- supportsPdf: true,
307
- supportsAudio: false
308
- },
309
- 'gpt-5.1': {
310
- contextWindow: 400000,
311
- supportsImages: true,
312
- supportsPdf: false,
313
- supportsAudio: false
314
- },
315
- 'gpt-5.1-2025-11-13': {
316
- contextWindow: 400000,
317
- supportsImages: true,
318
- supportsPdf: false,
319
- supportsAudio: false
320
- },
321
- 'gpt-5.1-chat-latest': {
322
- contextWindow: 128000,
323
- supportsImages: true,
324
- supportsPdf: false,
325
- supportsAudio: false
326
- },
327
- 'gpt-5': {
328
- contextWindow: 400000,
329
- supportsImages: true,
330
- supportsPdf: false,
331
- supportsAudio: false
332
- },
333
- 'gpt-5-2025-08-07': {
334
- contextWindow: 400000,
335
- supportsImages: true,
336
- supportsPdf: false,
337
- supportsAudio: false
338
- },
339
- 'gpt-5-chat-latest': {
340
- contextWindow: 400000,
341
- supportsImages: true,
342
- supportsPdf: false,
343
- supportsAudio: false
344
- },
345
- 'gpt-5-mini': {
346
- contextWindow: 400000,
347
- supportsImages: true,
348
- supportsPdf: false,
349
- supportsAudio: false
350
- },
351
- 'gpt-5-mini-2025-08-07': {
352
- contextWindow: 400000,
353
- supportsImages: true,
354
- supportsPdf: false,
355
- supportsAudio: false
356
- },
357
- 'gpt-5-nano': {
358
- contextWindow: 400000,
359
- supportsImages: true,
360
- supportsPdf: false,
361
- supportsAudio: false
362
- },
363
- 'gpt-5-nano-2025-08-07': {
364
- contextWindow: 400000,
365
- supportsImages: true,
366
- supportsPdf: false,
367
- supportsAudio: false
368
- },
369
- 'o4-mini': {
370
- contextWindow: 200000,
371
- supportsImages: true,
372
- supportsPdf: false,
373
- supportsAudio: false
374
- },
375
- 'o4-mini-2025-04-16': {
376
- contextWindow: 200000,
377
- supportsImages: true,
378
- supportsPdf: false,
379
- supportsAudio: false
380
- },
381
- 'o3-pro': {
382
- contextWindow: 200000,
383
- supportsImages: true,
384
- supportsPdf: false,
385
- supportsAudio: false
386
- },
387
- o3: {
388
- contextWindow: 200000,
389
- supportsImages: true,
390
- supportsPdf: true,
391
- supportsAudio: false
392
- },
393
- 'o3-2025-04-16': {
394
- contextWindow: 200000,
395
- supportsImages: true,
396
- supportsPdf: true,
397
- supportsAudio: false
398
- },
399
- 'o3-mini': {
400
- contextWindow: 200000,
401
- supportsImages: false,
402
- supportsPdf: false,
403
- supportsAudio: false
404
- },
405
- 'o3-mini-2025-01-31': {
406
- contextWindow: 200000,
407
- supportsImages: false,
408
- supportsPdf: false,
409
- supportsAudio: false
410
- },
411
- o1: {
412
- contextWindow: 200000,
413
- supportsImages: true,
414
- supportsPdf: true,
415
- supportsAudio: false
416
- },
417
- 'o1-2024-12-17': {
418
- contextWindow: 200000,
419
- supportsImages: true,
420
- supportsPdf: true,
421
- supportsAudio: false
422
- },
423
- 'gpt-4.1': {
424
- contextWindow: 1047576,
425
- supportsImages: true,
426
- supportsPdf: true,
427
- supportsAudio: false
428
- },
429
- 'gpt-4.1-2025-04-14': {
430
- contextWindow: 1047576,
431
- supportsImages: true,
432
- supportsPdf: true,
433
- supportsAudio: false
434
- },
435
- 'gpt-4.1-mini': {
436
- contextWindow: 1047576,
437
- supportsImages: true,
438
- supportsPdf: true,
439
- supportsAudio: false
440
- },
441
- 'gpt-4.1-mini-2025-04-14': {
442
- contextWindow: 1047576,
443
- supportsImages: true,
444
- supportsPdf: true,
445
- supportsAudio: false
446
- },
447
- 'gpt-4.1-nano': {
448
- contextWindow: 1047576,
449
- supportsImages: true,
450
- supportsPdf: false,
451
- supportsAudio: false
452
- },
453
- 'gpt-4.1-nano-2025-04-14': {
454
- contextWindow: 1047576,
455
- supportsImages: true,
456
- supportsPdf: false,
457
- supportsAudio: false
458
- },
459
- 'gpt-4o': {
460
- contextWindow: 128000,
461
- supportsImages: true,
462
- supportsPdf: true,
463
- supportsAudio: false
464
- },
465
- 'gpt-4o-2024-05-13': {
466
- contextWindow: 128000,
467
- supportsImages: true,
468
- supportsPdf: false,
469
- supportsAudio: false
470
- },
471
- 'gpt-4o-2024-08-06': {
472
- contextWindow: 128000,
473
- supportsImages: true,
474
- supportsPdf: false,
475
- supportsAudio: false
476
- },
477
- 'gpt-4o-2024-11-20': {
478
- contextWindow: 128000,
479
- supportsImages: true,
480
- supportsPdf: false,
481
- supportsAudio: false
482
- },
483
- 'gpt-4o-mini': {
484
- contextWindow: 128000,
485
- supportsImages: true,
486
- supportsPdf: true,
487
- supportsAudio: false
488
- },
489
- 'gpt-4o-mini-2024-07-18': {
490
- contextWindow: 128000,
491
- supportsImages: true,
492
- supportsPdf: true,
493
- supportsAudio: false
494
- },
495
- 'gpt-3.5-turbo': {
496
- contextWindow: 16385,
497
- supportsImages: false,
498
- supportsPdf: false,
499
- supportsAudio: false
500
- },
501
- 'gpt-3.5-turbo-0125': {
502
- contextWindow: 16385,
503
- supportsImages: false,
504
- supportsPdf: false,
505
- supportsAudio: false
506
- }
507
- }
508
- };
@@ -1,145 +0,0 @@
1
- import type {
2
- IProviderConfig,
3
- IProviderInfo,
4
- IProviderModelInfo,
5
- IProviderRegistry
6
- } from '../tokens';
7
-
8
- const DATE_SUFFIX = /^(.*)-\d{4}-\d{2}-\d{2}$/;
9
- const SHORT_VERSION_SUFFIX = /^(.*)-\d{4}$/;
10
-
11
- // Treat rolling aliases and dated releases as the same model family so they
12
- // can share provider metadata such as context windows.
13
- function normalizeModelId(modelId: string): string {
14
- if (modelId.endsWith('-latest')) {
15
- return modelId.slice(0, -7);
16
- }
17
-
18
- const dateSuffixMatch = modelId.match(DATE_SUFFIX);
19
- if (dateSuffixMatch) {
20
- return dateSuffixMatch[1];
21
- }
22
-
23
- const shortVersionSuffixMatch = modelId.match(SHORT_VERSION_SUFFIX);
24
- if (shortVersionSuffixMatch) {
25
- return shortVersionSuffixMatch[1];
26
- }
27
-
28
- return modelId;
29
- }
30
-
31
- function getCandidateModelIds(modelId: string): string[] {
32
- const candidates = [modelId];
33
- const normalizedModelId = normalizeModelId(modelId);
34
-
35
- candidates.push(normalizedModelId);
36
-
37
- if (normalizedModelId !== modelId) {
38
- candidates.push(`${normalizedModelId}-latest`);
39
- }
40
-
41
- return [...new Set(candidates)];
42
- }
43
-
44
- export function getProviderModelInfo(
45
- providerInfo: IProviderInfo | null | undefined,
46
- model: string | undefined
47
- ): IProviderModelInfo | undefined {
48
- if (!providerInfo || !model) {
49
- return undefined;
50
- }
51
-
52
- const modelInfo = providerInfo.modelInfo;
53
- if (!modelInfo) {
54
- return undefined;
55
- }
56
-
57
- for (const candidateId of getCandidateModelIds(model)) {
58
- if (modelInfo[candidateId]) {
59
- return modelInfo[candidateId];
60
- }
61
- }
62
-
63
- const normalizedModelId = normalizeModelId(model);
64
- // As a last resort, match any known model entry that normalizes to the same
65
- // base ID, even if the exact alias/version string differs.
66
- return Object.entries(modelInfo).find(([candidateId]) => {
67
- return normalizeModelId(candidateId) === normalizedModelId;
68
- })?.[1];
69
- }
70
-
71
- export function modelSupportsImages(
72
- providerConfig: IProviderConfig | undefined,
73
- providerRegistry?: IProviderRegistry
74
- ): boolean {
75
- if (!providerConfig) {
76
- return true;
77
- }
78
-
79
- const providerInfo = providerRegistry?.getProviderInfo(
80
- providerConfig.provider
81
- );
82
- const modelInfo = getProviderModelInfo(providerInfo, providerConfig.model);
83
- if (!modelInfo) {
84
- return true;
85
- }
86
-
87
- return modelInfo.supportsImages ?? true;
88
- }
89
-
90
- export function modelSupportsPdf(
91
- providerConfig: IProviderConfig | undefined,
92
- providerRegistry?: IProviderRegistry
93
- ): boolean {
94
- if (!providerConfig) {
95
- return true;
96
- }
97
-
98
- const providerInfo = providerRegistry?.getProviderInfo(
99
- providerConfig.provider
100
- );
101
- const modelInfo = getProviderModelInfo(providerInfo, providerConfig.model);
102
- if (!modelInfo) {
103
- return true;
104
- }
105
-
106
- return modelInfo.supportsPdf ?? true;
107
- }
108
-
109
- export function modelSupportsAudio(
110
- providerConfig: IProviderConfig | undefined,
111
- providerRegistry?: IProviderRegistry
112
- ): boolean {
113
- if (!providerConfig) {
114
- return true;
115
- }
116
-
117
- const providerInfo = providerRegistry?.getProviderInfo(
118
- providerConfig.provider
119
- );
120
- const modelInfo = getProviderModelInfo(providerInfo, providerConfig.model);
121
- if (!modelInfo) {
122
- return true;
123
- }
124
-
125
- return modelInfo.supportsAudio ?? true;
126
- }
127
-
128
- export function getEffectiveContextWindow(
129
- providerConfig: IProviderConfig | undefined,
130
- providerRegistry?: IProviderRegistry
131
- ): number | undefined {
132
- if (!providerConfig) {
133
- return undefined;
134
- }
135
-
136
- if (providerConfig.parameters?.contextWindow !== undefined) {
137
- return providerConfig.parameters.contextWindow;
138
- }
139
-
140
- const providerInfo = providerRegistry?.getProviderInfo(
141
- providerConfig.provider
142
- );
143
- return getProviderModelInfo(providerInfo, providerConfig.model)
144
- ?.contextWindow;
145
- }
@@ -1,76 +0,0 @@
1
- import type { LanguageModel } from 'ai';
2
- import type { IProviderRegistry } from '../tokens';
3
-
4
- /**
5
- * Configuration options for creating language models.
6
- */
7
- export interface IModelOptions {
8
- /**
9
- * The provider name (e.g., 'openai', 'anthropic', 'huggingface')
10
- */
11
- provider: string;
12
-
13
- /**
14
- * The specific model name. If not provided, uses provider's default model
15
- */
16
- model?: string;
17
-
18
- /**
19
- * API key for authentication with the provider
20
- */
21
- apiKey?: string;
22
-
23
- /**
24
- * Additional HTTP headers to send with requests
25
- */
26
- headers?: Record<string, string>;
27
-
28
- /**
29
- * Custom base URL for the provider's API endpoint
30
- */
31
- baseURL?: string;
32
- }
33
-
34
- /**
35
- * Create a completion model using the provider registry.
36
- * Built-in providers are automatically registered during extension initialization.
37
- */
38
- export function createCompletionModel(
39
- options: IModelOptions,
40
- registry?: IProviderRegistry
41
- ): LanguageModel {
42
- if (!registry) {
43
- throw new Error('Provider registry not available');
44
- }
45
-
46
- const model = registry.createCompletionModel(options.provider, options);
47
- if (!model) {
48
- throw new Error(
49
- `Provider ${options.provider} not found or failed to create model`
50
- );
51
- }
52
-
53
- return model;
54
- }
55
-
56
- /**
57
- * Create a chat model using the provider registry.
58
- * Built-in providers are automatically registered during extension initialization.
59
- */
60
- export function createModel(
61
- options: IModelOptions,
62
- registry?: IProviderRegistry
63
- ): LanguageModel {
64
- if (!registry) {
65
- throw new Error('Provider registry not available');
66
- }
67
-
68
- const model = registry.createChatModel(options.provider, options);
69
- if (!model) {
70
- throw new Error(
71
- `Provider ${options.provider} not found or failed to create model`
72
- );
73
- }
74
-
75
- return model;
76
- }