@jupyterlite/ai 0.14.0 → 0.16.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.
- package/lib/agent.d.ts +33 -115
- package/lib/agent.js +192 -106
- package/lib/chat-model-handler.d.ts +9 -11
- package/lib/chat-model-handler.js +9 -4
- package/lib/chat-model.d.ts +84 -13
- package/lib/chat-model.js +214 -136
- package/lib/completion/completion-provider.d.ts +2 -3
- package/lib/components/completion-status.d.ts +2 -2
- package/lib/components/index.d.ts +1 -1
- package/lib/components/index.js +1 -1
- package/lib/components/model-select.d.ts +3 -3
- package/lib/components/save-button.d.ts +31 -0
- package/lib/components/save-button.js +41 -0
- package/lib/components/tool-select.d.ts +3 -4
- package/lib/components/{token-usage-display.d.ts → usage-display.d.ts} +13 -14
- package/lib/components/usage-display.js +109 -0
- package/lib/diff-manager.d.ts +2 -3
- package/lib/index.d.ts +2 -4
- package/lib/index.js +186 -28
- package/lib/models/settings-model.d.ts +11 -53
- package/lib/models/settings-model.js +38 -22
- package/lib/providers/built-in-providers.js +22 -36
- package/lib/providers/generated-context-windows.d.ts +8 -0
- package/lib/providers/generated-context-windows.js +96 -0
- package/lib/providers/model-info.d.ts +3 -0
- package/lib/providers/model-info.js +58 -0
- package/lib/tokens.d.ts +361 -36
- package/lib/tokens.js +18 -13
- package/lib/tools/commands.d.ts +2 -3
- package/lib/widgets/ai-settings.d.ts +3 -5
- package/lib/widgets/ai-settings.js +12 -0
- package/lib/widgets/main-area-chat.d.ts +2 -3
- package/lib/widgets/main-area-chat.js +12 -12
- package/lib/widgets/provider-config-dialog.d.ts +1 -2
- package/lib/widgets/provider-config-dialog.js +34 -34
- package/package.json +17 -10
- package/schema/settings-model.json +18 -1
- package/src/agent.ts +275 -248
- package/src/chat-model-handler.ts +25 -21
- package/src/chat-model.ts +307 -196
- package/src/completion/completion-provider.ts +7 -4
- package/src/components/completion-status.tsx +3 -3
- package/src/components/index.ts +1 -1
- package/src/components/model-select.tsx +4 -3
- package/src/components/save-button.tsx +84 -0
- package/src/components/tool-select.tsx +10 -4
- package/src/components/usage-display.tsx +208 -0
- package/src/diff-manager.ts +4 -4
- package/src/index.ts +250 -58
- package/src/models/settings-model.ts +46 -88
- package/src/providers/built-in-providers.ts +22 -36
- package/src/providers/generated-context-windows.ts +102 -0
- package/src/providers/model-info.ts +88 -0
- package/src/tokens.ts +438 -58
- package/src/tools/commands.ts +2 -3
- package/src/widgets/ai-settings.tsx +69 -15
- package/src/widgets/main-area-chat.ts +18 -15
- package/src/widgets/provider-config-dialog.tsx +96 -61
- package/style/base.css +17 -195
- package/lib/approval-buttons.d.ts +0 -49
- package/lib/approval-buttons.js +0 -79
- package/lib/components/token-usage-display.js +0 -72
- package/src/approval-buttons.ts +0 -115
- package/src/components/token-usage-display.tsx +0 -138
|
@@ -3,6 +3,7 @@ import { createGoogleGenerativeAI } from '@ai-sdk/google';
|
|
|
3
3
|
import { createMistral } from '@ai-sdk/mistral';
|
|
4
4
|
import { createOpenAI } from '@ai-sdk/openai';
|
|
5
5
|
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
|
|
6
|
+
import { BUILT_IN_PROVIDER_MODEL_INFO } from './generated-context-windows';
|
|
6
7
|
/**
|
|
7
8
|
* Anthropic provider
|
|
8
9
|
*/
|
|
@@ -24,9 +25,9 @@ export const anthropicProvider = {
|
|
|
24
25
|
'claude-opus-4-0',
|
|
25
26
|
'claude-opus-4-20250514',
|
|
26
27
|
'claude-sonnet-4-0',
|
|
27
|
-
'claude-sonnet-4-20250514'
|
|
28
|
-
'claude-3-haiku-20240307'
|
|
28
|
+
'claude-sonnet-4-20250514'
|
|
29
29
|
],
|
|
30
|
+
modelInfo: BUILT_IN_PROVIDER_MODEL_INFO.anthropic,
|
|
30
31
|
supportsBaseURL: true,
|
|
31
32
|
supportsHeaders: true,
|
|
32
33
|
providerToolCapabilities: {
|
|
@@ -60,30 +61,20 @@ export const googleProvider = {
|
|
|
60
61
|
'gemini-3.1-pro-preview',
|
|
61
62
|
'gemini-3.1-pro-preview-customtools',
|
|
62
63
|
'gemini-3.1-flash-image-preview',
|
|
63
|
-
'gemini-3-
|
|
64
|
+
'gemini-3.1-flash-lite-preview',
|
|
64
65
|
'gemini-3-pro-image-preview',
|
|
65
66
|
'gemini-3-flash-preview',
|
|
66
67
|
'gemini-2.5-pro',
|
|
67
68
|
'gemini-2.5-flash',
|
|
68
69
|
'gemini-2.5-flash-image',
|
|
69
70
|
'gemini-2.5-flash-lite',
|
|
70
|
-
'gemini-2.5-flash-lite-preview-09-2025',
|
|
71
71
|
'gemini-2.5-computer-use-preview-10-2025',
|
|
72
|
-
'
|
|
73
|
-
'gemini-2.0-flash-001',
|
|
74
|
-
'gemini-2.0-flash-lite',
|
|
75
|
-
'gemini-2.0-flash-lite-001',
|
|
72
|
+
'deep-research-pro-preview-12-2025',
|
|
76
73
|
'gemini-pro-latest',
|
|
77
74
|
'gemini-flash-latest',
|
|
78
|
-
'gemini-flash-lite-latest'
|
|
79
|
-
'deep-research-pro-preview-12-2025',
|
|
80
|
-
'gemma-3-27b-it',
|
|
81
|
-
'gemma-3-12b-it',
|
|
82
|
-
'gemma-3-4b-it',
|
|
83
|
-
'gemma-3-1b-it',
|
|
84
|
-
'gemma-3n-e4b-it',
|
|
85
|
-
'gemma-3n-e2b-it'
|
|
75
|
+
'gemini-flash-lite-latest'
|
|
86
76
|
],
|
|
77
|
+
modelInfo: BUILT_IN_PROVIDER_MODEL_INFO.google,
|
|
87
78
|
supportsBaseURL: true,
|
|
88
79
|
factory: (options) => {
|
|
89
80
|
if (!options.apiKey) {
|
|
@@ -105,24 +96,21 @@ export const mistralProvider = {
|
|
|
105
96
|
name: 'Mistral AI',
|
|
106
97
|
apiKeyRequirement: 'required',
|
|
107
98
|
defaultModels: [
|
|
108
|
-
'ministral-3b-latest',
|
|
109
|
-
'ministral-8b-latest',
|
|
110
99
|
'mistral-large-latest',
|
|
111
100
|
'mistral-medium-latest',
|
|
112
101
|
'mistral-medium-2508',
|
|
113
|
-
'mistral-medium-2505',
|
|
114
102
|
'mistral-small-latest',
|
|
115
|
-
'
|
|
103
|
+
'mistral-small-2506',
|
|
104
|
+
'ministral-3b-latest',
|
|
105
|
+
'ministral-8b-latest',
|
|
106
|
+
'ministral-14b-latest',
|
|
107
|
+
'magistral-small-latest',
|
|
108
|
+
'magistral-medium-latest',
|
|
116
109
|
'pixtral-large-latest',
|
|
117
|
-
'
|
|
118
|
-
'
|
|
119
|
-
'magistral-small-2506',
|
|
120
|
-
'magistral-medium-2506',
|
|
121
|
-
'pixtral-12b-2409',
|
|
122
|
-
'open-mistral-7b',
|
|
123
|
-
'open-mixtral-8x7b',
|
|
124
|
-
'open-mixtral-8x22b'
|
|
110
|
+
'codestral-latest',
|
|
111
|
+
'devstral-latest'
|
|
125
112
|
],
|
|
113
|
+
modelInfo: BUILT_IN_PROVIDER_MODEL_INFO.mistral,
|
|
126
114
|
supportsBaseURL: true,
|
|
127
115
|
factory: (options) => {
|
|
128
116
|
if (!options.apiKey) {
|
|
@@ -144,6 +132,9 @@ export const openaiProvider = {
|
|
|
144
132
|
name: 'OpenAI',
|
|
145
133
|
apiKeyRequirement: 'required',
|
|
146
134
|
defaultModels: [
|
|
135
|
+
'gpt-5.4',
|
|
136
|
+
'gpt-5.4-mini',
|
|
137
|
+
'gpt-5.4-nano',
|
|
147
138
|
'gpt-5.2',
|
|
148
139
|
'gpt-5.2-2025-12-11',
|
|
149
140
|
'gpt-5.2-chat-latest',
|
|
@@ -162,6 +153,7 @@ export const openaiProvider = {
|
|
|
162
153
|
'gpt-5-nano-2025-08-07',
|
|
163
154
|
'o4-mini',
|
|
164
155
|
'o4-mini-2025-04-16',
|
|
156
|
+
'o3-pro',
|
|
165
157
|
'o3',
|
|
166
158
|
'o3-2025-04-16',
|
|
167
159
|
'o3-mini',
|
|
@@ -178,22 +170,16 @@ export const openaiProvider = {
|
|
|
178
170
|
'gpt-4o-2024-05-13',
|
|
179
171
|
'gpt-4o-2024-08-06',
|
|
180
172
|
'gpt-4o-2024-11-20',
|
|
181
|
-
'gpt-4o-audio-preview',
|
|
182
|
-
'gpt-4o-audio-preview-2024-12-17',
|
|
183
|
-
'gpt-4o-audio-preview-2025-06-03',
|
|
184
173
|
'gpt-4o-mini',
|
|
185
174
|
'gpt-4o-mini-2024-07-18',
|
|
186
|
-
'gpt-4o-mini-audio-preview',
|
|
187
|
-
'gpt-4o-mini-audio-preview-2024-12-17',
|
|
188
175
|
'gpt-4o-search-preview',
|
|
189
176
|
'gpt-4o-search-preview-2025-03-11',
|
|
190
177
|
'gpt-4o-mini-search-preview',
|
|
191
178
|
'gpt-4o-mini-search-preview-2025-03-11',
|
|
192
179
|
'gpt-3.5-turbo',
|
|
193
|
-
'gpt-3.5-turbo-0125'
|
|
194
|
-
'gpt-3.5-turbo-1106',
|
|
195
|
-
'gpt-3.5-turbo-16k'
|
|
180
|
+
'gpt-3.5-turbo-0125'
|
|
196
181
|
],
|
|
182
|
+
modelInfo: BUILT_IN_PROVIDER_MODEL_INFO.openai,
|
|
197
183
|
supportsBaseURL: true,
|
|
198
184
|
supportsHeaders: true,
|
|
199
185
|
providerToolCapabilities: {
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is generated by `jlpm sync:model-context-windows`.
|
|
3
|
+
* Source: https://models.dev/api.json
|
|
4
|
+
* Backed by: https://github.com/anomalyco/models.dev
|
|
5
|
+
* Generated: 2026-04-08T16:23:34.080Z
|
|
6
|
+
*/
|
|
7
|
+
import type { IProviderModelInfo } from '../tokens';
|
|
8
|
+
export declare const BUILT_IN_PROVIDER_MODEL_INFO: Record<string, Record<string, IProviderModelInfo>>;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is generated by `jlpm sync:model-context-windows`.
|
|
3
|
+
* Source: https://models.dev/api.json
|
|
4
|
+
* Backed by: https://github.com/anomalyco/models.dev
|
|
5
|
+
* Generated: 2026-04-08T16:23:34.080Z
|
|
6
|
+
*/
|
|
7
|
+
export const BUILT_IN_PROVIDER_MODEL_INFO = {
|
|
8
|
+
anthropic: {
|
|
9
|
+
'claude-opus-4-6': { contextWindow: 1000000 },
|
|
10
|
+
'claude-sonnet-4-6': { contextWindow: 1000000 },
|
|
11
|
+
'claude-opus-4-5': { contextWindow: 200000 },
|
|
12
|
+
'claude-opus-4-5-20251101': { contextWindow: 200000 },
|
|
13
|
+
'claude-sonnet-4-5': { contextWindow: 200000 },
|
|
14
|
+
'claude-sonnet-4-5-20250929': { contextWindow: 200000 },
|
|
15
|
+
'claude-haiku-4-5': { contextWindow: 200000 },
|
|
16
|
+
'claude-haiku-4-5-20251001': { contextWindow: 200000 },
|
|
17
|
+
'claude-opus-4-1': { contextWindow: 200000 },
|
|
18
|
+
'claude-opus-4-1-20250805': { contextWindow: 200000 },
|
|
19
|
+
'claude-opus-4-0': { contextWindow: 200000 },
|
|
20
|
+
'claude-opus-4-20250514': { contextWindow: 200000 },
|
|
21
|
+
'claude-sonnet-4-0': { contextWindow: 200000 },
|
|
22
|
+
'claude-sonnet-4-20250514': { contextWindow: 200000 }
|
|
23
|
+
},
|
|
24
|
+
google: {
|
|
25
|
+
'gemini-3.1-pro-preview': { contextWindow: 1048576 },
|
|
26
|
+
'gemini-3.1-pro-preview-customtools': { contextWindow: 1048576 },
|
|
27
|
+
'gemini-3.1-flash-image-preview': { contextWindow: 131072 },
|
|
28
|
+
'gemini-3.1-flash-lite-preview': { contextWindow: 1048576 },
|
|
29
|
+
'gemini-3-flash-preview': { contextWindow: 1048576 },
|
|
30
|
+
'gemini-2.5-pro': { contextWindow: 1048576 },
|
|
31
|
+
'gemini-2.5-flash': { contextWindow: 1048576 },
|
|
32
|
+
'gemini-2.5-flash-image': { contextWindow: 32768 },
|
|
33
|
+
'gemini-2.5-flash-lite': { contextWindow: 1048576 },
|
|
34
|
+
'gemini-flash-latest': { contextWindow: 1048576 },
|
|
35
|
+
'gemini-flash-lite-latest': { contextWindow: 1048576 }
|
|
36
|
+
},
|
|
37
|
+
mistral: {
|
|
38
|
+
'mistral-large-latest': { contextWindow: 262144 },
|
|
39
|
+
'mistral-medium-latest': { contextWindow: 128000 },
|
|
40
|
+
'mistral-medium-2508': { contextWindow: 262144 },
|
|
41
|
+
'mistral-small-latest': { contextWindow: 256000 },
|
|
42
|
+
'mistral-small-2506': { contextWindow: 128000 },
|
|
43
|
+
'ministral-3b-latest': { contextWindow: 128000 },
|
|
44
|
+
'ministral-8b-latest': { contextWindow: 128000 },
|
|
45
|
+
'magistral-small-latest': { contextWindow: 128000 },
|
|
46
|
+
'magistral-medium-latest': { contextWindow: 128000 },
|
|
47
|
+
'pixtral-large-latest': { contextWindow: 128000 },
|
|
48
|
+
'codestral-latest': { contextWindow: 256000 },
|
|
49
|
+
'devstral-latest': { contextWindow: 262144 },
|
|
50
|
+
'devstral-2512': { contextWindow: 262144 }
|
|
51
|
+
},
|
|
52
|
+
openai: {
|
|
53
|
+
'gpt-5.4': { contextWindow: 1050000 },
|
|
54
|
+
'gpt-5.4-mini': { contextWindow: 400000 },
|
|
55
|
+
'gpt-5.4-nano': { contextWindow: 400000 },
|
|
56
|
+
'gpt-5.2': { contextWindow: 400000 },
|
|
57
|
+
'gpt-5.2-2025-12-11': { contextWindow: 400000 },
|
|
58
|
+
'gpt-5.2-chat-latest': { contextWindow: 128000 },
|
|
59
|
+
'gpt-5.2-pro': { contextWindow: 400000 },
|
|
60
|
+
'gpt-5.2-pro-2025-12-11': { contextWindow: 400000 },
|
|
61
|
+
'gpt-5.2-codex': { contextWindow: 400000 },
|
|
62
|
+
'gpt-5.1': { contextWindow: 400000 },
|
|
63
|
+
'gpt-5.1-2025-11-13': { contextWindow: 400000 },
|
|
64
|
+
'gpt-5.1-chat-latest': { contextWindow: 128000 },
|
|
65
|
+
'gpt-5': { contextWindow: 400000 },
|
|
66
|
+
'gpt-5-2025-08-07': { contextWindow: 400000 },
|
|
67
|
+
'gpt-5-chat-latest': { contextWindow: 400000 },
|
|
68
|
+
'gpt-5-mini': { contextWindow: 400000 },
|
|
69
|
+
'gpt-5-mini-2025-08-07': { contextWindow: 400000 },
|
|
70
|
+
'gpt-5-nano': { contextWindow: 400000 },
|
|
71
|
+
'gpt-5-nano-2025-08-07': { contextWindow: 400000 },
|
|
72
|
+
'o4-mini': { contextWindow: 200000 },
|
|
73
|
+
'o4-mini-2025-04-16': { contextWindow: 200000 },
|
|
74
|
+
'o3-pro': { contextWindow: 200000 },
|
|
75
|
+
o3: { contextWindow: 200000 },
|
|
76
|
+
'o3-2025-04-16': { contextWindow: 200000 },
|
|
77
|
+
'o3-mini': { contextWindow: 200000 },
|
|
78
|
+
'o3-mini-2025-01-31': { contextWindow: 200000 },
|
|
79
|
+
o1: { contextWindow: 200000 },
|
|
80
|
+
'o1-2024-12-17': { contextWindow: 200000 },
|
|
81
|
+
'gpt-4.1': { contextWindow: 1047576 },
|
|
82
|
+
'gpt-4.1-2025-04-14': { contextWindow: 1047576 },
|
|
83
|
+
'gpt-4.1-mini': { contextWindow: 1047576 },
|
|
84
|
+
'gpt-4.1-mini-2025-04-14': { contextWindow: 1047576 },
|
|
85
|
+
'gpt-4.1-nano': { contextWindow: 1047576 },
|
|
86
|
+
'gpt-4.1-nano-2025-04-14': { contextWindow: 1047576 },
|
|
87
|
+
'gpt-4o': { contextWindow: 128000 },
|
|
88
|
+
'gpt-4o-2024-05-13': { contextWindow: 128000 },
|
|
89
|
+
'gpt-4o-2024-08-06': { contextWindow: 128000 },
|
|
90
|
+
'gpt-4o-2024-11-20': { contextWindow: 128000 },
|
|
91
|
+
'gpt-4o-mini': { contextWindow: 128000 },
|
|
92
|
+
'gpt-4o-mini-2024-07-18': { contextWindow: 128000 },
|
|
93
|
+
'gpt-3.5-turbo': { contextWindow: 16385 },
|
|
94
|
+
'gpt-3.5-turbo-0125': { contextWindow: 16385 }
|
|
95
|
+
}
|
|
96
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { IProviderConfig, IProviderInfo, IProviderModelInfo, IProviderRegistry } from '../tokens';
|
|
2
|
+
export declare function getProviderModelInfo(providerInfo: IProviderInfo | null | undefined, model: string | undefined): IProviderModelInfo | undefined;
|
|
3
|
+
export declare function getEffectiveContextWindow(providerConfig: IProviderConfig | undefined, providerRegistry?: IProviderRegistry): number | undefined;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
const DATE_SUFFIX = /^(.*)-\d{4}-\d{2}-\d{2}$/;
|
|
2
|
+
const SHORT_VERSION_SUFFIX = /^(.*)-\d{4}$/;
|
|
3
|
+
// Treat rolling aliases and dated releases as the same model family so they
|
|
4
|
+
// can share provider metadata such as context windows.
|
|
5
|
+
function normalizeModelId(modelId) {
|
|
6
|
+
if (modelId.endsWith('-latest')) {
|
|
7
|
+
return modelId.slice(0, -7);
|
|
8
|
+
}
|
|
9
|
+
const dateSuffixMatch = modelId.match(DATE_SUFFIX);
|
|
10
|
+
if (dateSuffixMatch) {
|
|
11
|
+
return dateSuffixMatch[1];
|
|
12
|
+
}
|
|
13
|
+
const shortVersionSuffixMatch = modelId.match(SHORT_VERSION_SUFFIX);
|
|
14
|
+
if (shortVersionSuffixMatch) {
|
|
15
|
+
return shortVersionSuffixMatch[1];
|
|
16
|
+
}
|
|
17
|
+
return modelId;
|
|
18
|
+
}
|
|
19
|
+
function getCandidateModelIds(modelId) {
|
|
20
|
+
const candidates = [modelId];
|
|
21
|
+
const normalizedModelId = normalizeModelId(modelId);
|
|
22
|
+
candidates.push(normalizedModelId);
|
|
23
|
+
if (normalizedModelId !== modelId) {
|
|
24
|
+
candidates.push(`${normalizedModelId}-latest`);
|
|
25
|
+
}
|
|
26
|
+
return [...new Set(candidates)];
|
|
27
|
+
}
|
|
28
|
+
export function getProviderModelInfo(providerInfo, model) {
|
|
29
|
+
if (!providerInfo || !model) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const modelInfo = providerInfo.modelInfo;
|
|
33
|
+
if (!modelInfo) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
for (const candidateId of getCandidateModelIds(model)) {
|
|
37
|
+
if (modelInfo[candidateId]) {
|
|
38
|
+
return modelInfo[candidateId];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const normalizedModelId = normalizeModelId(model);
|
|
42
|
+
// As a last resort, match any known model entry that normalizes to the same
|
|
43
|
+
// base ID, even if the exact alias/version string differs.
|
|
44
|
+
return Object.entries(modelInfo).find(([candidateId]) => {
|
|
45
|
+
return normalizeModelId(candidateId) === normalizedModelId;
|
|
46
|
+
})?.[1];
|
|
47
|
+
}
|
|
48
|
+
export function getEffectiveContextWindow(providerConfig, providerRegistry) {
|
|
49
|
+
if (!providerConfig) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
if (providerConfig.parameters?.contextWindow !== undefined) {
|
|
53
|
+
return providerConfig.parameters.contextWindow;
|
|
54
|
+
}
|
|
55
|
+
const providerInfo = providerRegistry?.getProviderInfo(providerConfig.provider);
|
|
56
|
+
return getProviderModelInfo(providerInfo, providerConfig.model)
|
|
57
|
+
?.contextWindow;
|
|
58
|
+
}
|