@jupyterlite/ai 0.8.0 → 0.9.0-a0
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 +233 -0
- package/lib/agent.js +604 -0
- package/lib/chat-model.d.ts +195 -0
- package/lib/chat-model.js +590 -0
- package/lib/completion/completion-provider.d.ts +83 -0
- package/lib/completion/completion-provider.js +209 -0
- package/lib/completion/index.d.ts +1 -0
- package/lib/completion/index.js +1 -0
- package/lib/components/clear-button.d.ts +18 -0
- package/lib/components/clear-button.js +31 -0
- package/lib/components/index.d.ts +3 -0
- package/lib/components/index.js +3 -0
- package/lib/components/model-select.d.ts +19 -0
- package/lib/components/model-select.js +154 -0
- package/lib/components/stop-button.d.ts +3 -3
- package/lib/components/stop-button.js +8 -9
- package/lib/components/token-usage-display.d.ts +45 -0
- package/lib/components/token-usage-display.js +74 -0
- package/lib/components/tool-select.d.ts +27 -0
- package/lib/components/tool-select.js +130 -0
- package/lib/icons.d.ts +3 -1
- package/lib/icons.js +10 -13
- package/lib/index.d.ts +4 -5
- package/lib/index.js +322 -167
- package/lib/mcp/browser.d.ts +68 -0
- package/lib/mcp/browser.js +132 -0
- package/lib/models/settings-model.d.ts +69 -0
- package/lib/models/settings-model.js +295 -0
- package/lib/providers/built-in-providers.d.ts +9 -0
- package/lib/providers/built-in-providers.js +192 -0
- package/lib/providers/models.d.ts +37 -0
- package/lib/providers/models.js +28 -0
- package/lib/providers/provider-registry.d.ts +94 -0
- package/lib/providers/provider-registry.js +155 -0
- package/lib/tokens.d.ts +157 -86
- package/lib/tokens.js +16 -12
- package/lib/tools/commands.d.ts +11 -0
- package/lib/tools/commands.js +126 -0
- package/lib/tools/file.d.ts +27 -0
- package/lib/tools/file.js +262 -0
- package/lib/tools/notebook.d.ts +40 -0
- package/lib/tools/notebook.js +762 -0
- package/lib/tools/tool-registry.d.ts +35 -0
- package/lib/tools/tool-registry.js +55 -0
- package/lib/widgets/ai-settings.d.ts +39 -0
- package/lib/widgets/ai-settings.js +506 -0
- package/lib/widgets/chat-wrapper.d.ts +144 -0
- package/lib/widgets/chat-wrapper.js +390 -0
- package/lib/widgets/provider-config-dialog.d.ts +13 -0
- package/lib/widgets/provider-config-dialog.js +104 -0
- package/package.json +150 -41
- package/schema/settings-model.json +153 -0
- package/src/agent.ts +800 -0
- package/src/chat-model.ts +770 -0
- package/src/completion/completion-provider.ts +308 -0
- package/src/completion/index.ts +1 -0
- package/src/components/clear-button.tsx +56 -0
- package/src/components/index.ts +3 -0
- package/src/components/model-select.tsx +245 -0
- package/src/components/stop-button.tsx +11 -11
- package/src/components/token-usage-display.tsx +130 -0
- package/src/components/tool-select.tsx +218 -0
- package/src/icons.ts +12 -14
- package/src/index.ts +468 -238
- package/src/mcp/browser.ts +213 -0
- package/src/models/settings-model.ts +409 -0
- package/src/providers/built-in-providers.ts +216 -0
- package/src/providers/models.ts +79 -0
- package/src/providers/provider-registry.ts +189 -0
- package/src/tokens.ts +203 -90
- package/src/tools/commands.ts +151 -0
- package/src/tools/file.ts +307 -0
- package/src/tools/notebook.ts +964 -0
- package/src/tools/tool-registry.ts +63 -0
- package/src/types.d.ts +4 -0
- package/src/widgets/ai-settings.tsx +1100 -0
- package/src/widgets/chat-wrapper.tsx +543 -0
- package/src/widgets/provider-config-dialog.tsx +256 -0
- package/style/base.css +335 -14
- package/style/icons/jupyternaut-lite.svg +1 -1
- package/lib/base-completer.d.ts +0 -49
- package/lib/base-completer.js +0 -14
- package/lib/chat-handler.d.ts +0 -56
- package/lib/chat-handler.js +0 -201
- package/lib/completion-provider.d.ts +0 -34
- package/lib/completion-provider.js +0 -32
- package/lib/default-prompts.d.ts +0 -2
- package/lib/default-prompts.js +0 -31
- package/lib/default-providers/Anthropic/completer.d.ts +0 -12
- package/lib/default-providers/Anthropic/completer.js +0 -46
- package/lib/default-providers/Anthropic/settings-schema.json +0 -70
- package/lib/default-providers/ChromeAI/completer.d.ts +0 -12
- package/lib/default-providers/ChromeAI/completer.js +0 -56
- package/lib/default-providers/ChromeAI/instructions.d.ts +0 -6
- package/lib/default-providers/ChromeAI/instructions.js +0 -42
- package/lib/default-providers/ChromeAI/settings-schema.json +0 -18
- package/lib/default-providers/Gemini/completer.d.ts +0 -12
- package/lib/default-providers/Gemini/completer.js +0 -48
- package/lib/default-providers/Gemini/instructions.d.ts +0 -2
- package/lib/default-providers/Gemini/instructions.js +0 -9
- package/lib/default-providers/Gemini/settings-schema.json +0 -64
- package/lib/default-providers/MistralAI/completer.d.ts +0 -13
- package/lib/default-providers/MistralAI/completer.js +0 -52
- package/lib/default-providers/MistralAI/instructions.d.ts +0 -2
- package/lib/default-providers/MistralAI/instructions.js +0 -18
- package/lib/default-providers/MistralAI/settings-schema.json +0 -75
- package/lib/default-providers/Ollama/completer.d.ts +0 -12
- package/lib/default-providers/Ollama/completer.js +0 -43
- package/lib/default-providers/Ollama/instructions.d.ts +0 -2
- package/lib/default-providers/Ollama/instructions.js +0 -70
- package/lib/default-providers/Ollama/settings-schema.json +0 -143
- package/lib/default-providers/OpenAI/completer.d.ts +0 -12
- package/lib/default-providers/OpenAI/completer.js +0 -43
- package/lib/default-providers/OpenAI/settings-schema.json +0 -628
- package/lib/default-providers/WebLLM/completer.d.ts +0 -21
- package/lib/default-providers/WebLLM/completer.js +0 -127
- package/lib/default-providers/WebLLM/instructions.d.ts +0 -6
- package/lib/default-providers/WebLLM/instructions.js +0 -32
- package/lib/default-providers/WebLLM/settings-schema.json +0 -19
- package/lib/default-providers/index.d.ts +0 -2
- package/lib/default-providers/index.js +0 -179
- package/lib/provider.d.ts +0 -144
- package/lib/provider.js +0 -412
- package/lib/settings/base.json +0 -7
- package/lib/settings/index.d.ts +0 -3
- package/lib/settings/index.js +0 -3
- package/lib/settings/panel.d.ts +0 -226
- package/lib/settings/panel.js +0 -510
- package/lib/settings/textarea.d.ts +0 -2
- package/lib/settings/textarea.js +0 -18
- package/lib/settings/utils.d.ts +0 -2
- package/lib/settings/utils.js +0 -4
- package/lib/types/ai-model.d.ts +0 -24
- package/lib/types/ai-model.js +0 -5
- package/schema/chat.json +0 -28
- package/schema/provider-registry.json +0 -29
- package/schema/system-prompts.json +0 -22
- package/src/base-completer.ts +0 -75
- package/src/chat-handler.ts +0 -262
- package/src/completion-provider.ts +0 -64
- package/src/default-prompts.ts +0 -33
- package/src/default-providers/Anthropic/completer.ts +0 -59
- package/src/default-providers/ChromeAI/completer.ts +0 -73
- package/src/default-providers/ChromeAI/instructions.ts +0 -45
- package/src/default-providers/Gemini/completer.ts +0 -61
- package/src/default-providers/Gemini/instructions.ts +0 -9
- package/src/default-providers/MistralAI/completer.ts +0 -69
- package/src/default-providers/MistralAI/instructions.ts +0 -18
- package/src/default-providers/Ollama/completer.ts +0 -54
- package/src/default-providers/Ollama/instructions.ts +0 -70
- package/src/default-providers/OpenAI/completer.ts +0 -54
- package/src/default-providers/WebLLM/completer.ts +0 -151
- package/src/default-providers/WebLLM/instructions.ts +0 -33
- package/src/default-providers/index.ts +0 -211
- package/src/global.d.ts +0 -9
- package/src/provider.ts +0 -514
- package/src/settings/index.ts +0 -3
- package/src/settings/panel.tsx +0 -773
- package/src/settings/textarea.tsx +0 -33
- package/src/settings/utils.ts +0 -5
- package/src/types/ai-model.ts +0 -37
- package/src/types/service-worker.d.ts +0 -6
package/lib/provider.js
DELETED
|
@@ -1,412 +0,0 @@
|
|
|
1
|
-
import { Notification } from '@jupyterlab/apputils';
|
|
2
|
-
import { Debouncer } from '@lumino/polling';
|
|
3
|
-
import { Signal } from '@lumino/signaling';
|
|
4
|
-
import { getSecretId, SECRETS_REPLACEMENT } from './settings';
|
|
5
|
-
import { PLUGIN_IDS } from './tokens';
|
|
6
|
-
const SECRETS_NAMESPACE = PLUGIN_IDS.providerRegistry;
|
|
7
|
-
const NOTIFICATION_DELAY = 2000;
|
|
8
|
-
export class AIProviderRegistry {
|
|
9
|
-
/**
|
|
10
|
-
* The constructor of the provider registry.
|
|
11
|
-
*/
|
|
12
|
-
constructor(options) {
|
|
13
|
-
this._secretsManager = options.secretsManager || null;
|
|
14
|
-
Private.setToken(options.token);
|
|
15
|
-
this._notifications = {
|
|
16
|
-
chat: new Debouncer(this._emitErrorNotification, NOTIFICATION_DELAY),
|
|
17
|
-
completer: new Debouncer(this._emitErrorNotification, NOTIFICATION_DELAY)
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Get the list of provider names.
|
|
22
|
-
*/
|
|
23
|
-
get providers() {
|
|
24
|
-
return Array.from(Private.providers.keys());
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Add a new provider.
|
|
28
|
-
*/
|
|
29
|
-
add(provider) {
|
|
30
|
-
if (Private.providers.has(provider.name)) {
|
|
31
|
-
throw new Error(`A AI provider named '${provider.name}' is already registered`);
|
|
32
|
-
}
|
|
33
|
-
Private.providers.set(provider.name, provider);
|
|
34
|
-
// Set the providers if the loading has been deferred.
|
|
35
|
-
if (provider.name === this._deferredProvider.completer?.name) {
|
|
36
|
-
this.setCompleterProvider(this._deferredProvider.completer);
|
|
37
|
-
}
|
|
38
|
-
if (provider.name === this._deferredProvider.chat?.name) {
|
|
39
|
-
this.setChatProvider(this._deferredProvider.chat);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Get the current provider name.
|
|
44
|
-
*/
|
|
45
|
-
currentName(role) {
|
|
46
|
-
return Private.getName(role);
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Get the current AICompleter.
|
|
50
|
-
*/
|
|
51
|
-
get currentCompleter() {
|
|
52
|
-
if (Private.getName('completer') === 'None') {
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
const completer = Private.getCompleter();
|
|
56
|
-
if (completer === null) {
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
59
|
-
return {
|
|
60
|
-
fetch: (request, context) => completer.fetch(request, context)
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Getter/setter for the completer system prompt.
|
|
65
|
-
*/
|
|
66
|
-
get completerSystemPrompt() {
|
|
67
|
-
return this._completerPrompt.replaceAll('$provider_name$', this.currentName('completer'));
|
|
68
|
-
}
|
|
69
|
-
set completerSystemPrompt(value) {
|
|
70
|
-
this._completerPrompt = value;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Get the current AIChatModel.
|
|
74
|
-
*/
|
|
75
|
-
get currentChatModel() {
|
|
76
|
-
if (Private.getName('chat') === 'None') {
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
const currentProvider = Private.providers.get(Private.getName('chat')) ?? null;
|
|
80
|
-
const chatModel = Private.getChatModel();
|
|
81
|
-
if (chatModel === null) {
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
if (currentProvider?.exposeChatModel ?? false) {
|
|
85
|
-
// Expose the full chat model if expected.
|
|
86
|
-
return chatModel;
|
|
87
|
-
}
|
|
88
|
-
// Otherwise, we create a reduced AIChatModel interface.
|
|
89
|
-
return {
|
|
90
|
-
stream: (input, options) => chatModel.stream(input, options)
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Getter/setter for the chat system prompt.
|
|
95
|
-
*/
|
|
96
|
-
get chatSystemPrompt() {
|
|
97
|
-
return this._chatPrompt.replaceAll('$provider_name$', this.currentName('chat'));
|
|
98
|
-
}
|
|
99
|
-
set chatSystemPrompt(value) {
|
|
100
|
-
this._chatPrompt = value;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Get the settings schema of a given provider.
|
|
104
|
-
*/
|
|
105
|
-
getSettingsSchema(provider) {
|
|
106
|
-
return (Private.providers.get(provider)?.settingsSchema?.properties ||
|
|
107
|
-
{});
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Get the instructions of a given provider.
|
|
111
|
-
*/
|
|
112
|
-
getInstructions(provider) {
|
|
113
|
-
return Private.providers.get(provider)?.instructions;
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Get the compatibility check function of a given provider.
|
|
117
|
-
*/
|
|
118
|
-
getCompatibilityCheck(provider) {
|
|
119
|
-
return Private.providers.get(provider)?.compatibilityCheck;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Format an error message from the current provider.
|
|
123
|
-
*/
|
|
124
|
-
formatErrorMessage(error) {
|
|
125
|
-
const currentProvider = Private.providers.get(Private.getName('chat')) ?? null;
|
|
126
|
-
if (currentProvider?.errorMessage) {
|
|
127
|
-
return currentProvider?.errorMessage(error);
|
|
128
|
-
}
|
|
129
|
-
if (error.message) {
|
|
130
|
-
return error.message;
|
|
131
|
-
}
|
|
132
|
-
return error;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Get/set the current chat error;
|
|
136
|
-
*/
|
|
137
|
-
get chatError() {
|
|
138
|
-
return this._chatError;
|
|
139
|
-
}
|
|
140
|
-
set chatError(error) {
|
|
141
|
-
this._chatError = error;
|
|
142
|
-
if (error !== '') {
|
|
143
|
-
this._notifications.chat.invoke(`Chat: ${error}`);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Get/set the current completer error.
|
|
148
|
-
*/
|
|
149
|
-
get completerError() {
|
|
150
|
-
return this._completerError;
|
|
151
|
-
}
|
|
152
|
-
set completerError(error) {
|
|
153
|
-
this._completerError = error;
|
|
154
|
-
if (error !== '') {
|
|
155
|
-
this._notifications.completer.invoke(`Completer: ${error}`);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* A function to emit a notification error.
|
|
160
|
-
*/
|
|
161
|
-
_emitErrorNotification(error) {
|
|
162
|
-
Notification.emit(error, 'error', {
|
|
163
|
-
autoClose: NOTIFICATION_DELAY
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Set the completer provider.
|
|
168
|
-
* Creates the provider if the name has changed, otherwise only updates its config.
|
|
169
|
-
*
|
|
170
|
-
* @param options - An object with the name and the settings of the provider to use.
|
|
171
|
-
*/
|
|
172
|
-
async setCompleterProvider(settings) {
|
|
173
|
-
this.completerError = '';
|
|
174
|
-
if (!Object.keys(settings).includes('provider')) {
|
|
175
|
-
Private.setName('completer', 'None');
|
|
176
|
-
Private.setCompleter(null);
|
|
177
|
-
this.completerError =
|
|
178
|
-
'The provider is missing from the completer settings';
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
const provider = settings['provider'];
|
|
182
|
-
const currentProvider = Private.providers.get(provider) ?? null;
|
|
183
|
-
if (currentProvider === null) {
|
|
184
|
-
// The current provider may not be loaded when the settings are first loaded.
|
|
185
|
-
// Let's defer the provider loading.
|
|
186
|
-
this._deferredProvider.completer = settings;
|
|
187
|
-
Private.setName('completer', provider);
|
|
188
|
-
Private.setCompleter(null);
|
|
189
|
-
return;
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
this._deferredProvider.completer = null;
|
|
193
|
-
}
|
|
194
|
-
const compatibilityCheck = this.getCompatibilityCheck(provider);
|
|
195
|
-
if (compatibilityCheck !== undefined) {
|
|
196
|
-
const error = await compatibilityCheck();
|
|
197
|
-
if (error !== null) {
|
|
198
|
-
this.completerError = error.trim();
|
|
199
|
-
Private.setName('completer', 'None');
|
|
200
|
-
this._providerChanged.emit('completer');
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
// Get the settings including the secrets.
|
|
205
|
-
const fullSettings = await this._buildFullSettings(provider, settings);
|
|
206
|
-
if (currentProvider?.completer !== undefined) {
|
|
207
|
-
try {
|
|
208
|
-
Private.setCompleter(new currentProvider.completer({
|
|
209
|
-
providerRegistry: this,
|
|
210
|
-
settings: fullSettings
|
|
211
|
-
}));
|
|
212
|
-
}
|
|
213
|
-
catch (e) {
|
|
214
|
-
this.completerError = e.message;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
Private.setCompleter(null);
|
|
219
|
-
}
|
|
220
|
-
Private.setName('completer', provider);
|
|
221
|
-
this._providerChanged.emit('completer');
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Set the chat provider.
|
|
225
|
-
* Creates the provider if the name has changed, otherwise only updates its config.
|
|
226
|
-
*
|
|
227
|
-
* @param options - An object with the name and the settings of the provider to use.
|
|
228
|
-
*/
|
|
229
|
-
async setChatProvider(settings) {
|
|
230
|
-
this.chatError = '';
|
|
231
|
-
if (!Object.keys(settings).includes('provider')) {
|
|
232
|
-
Private.setName('chat', 'None');
|
|
233
|
-
Private.setChatModel(null);
|
|
234
|
-
this.chatError = 'The provider is missing from the chat settings';
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
const provider = settings['provider'];
|
|
238
|
-
const currentProvider = Private.providers.get(provider) ?? null;
|
|
239
|
-
if (currentProvider === null) {
|
|
240
|
-
// The current provider may not be loaded when the settings are first loaded.
|
|
241
|
-
// Let's defer the provider loading.
|
|
242
|
-
this._deferredProvider.chat = settings;
|
|
243
|
-
Private.setName('chat', provider);
|
|
244
|
-
Private.setChatModel(null);
|
|
245
|
-
return;
|
|
246
|
-
}
|
|
247
|
-
else {
|
|
248
|
-
this._deferredProvider.chat = null;
|
|
249
|
-
}
|
|
250
|
-
const compatibilityCheck = this.getCompatibilityCheck(provider);
|
|
251
|
-
if (compatibilityCheck !== undefined) {
|
|
252
|
-
const error = await compatibilityCheck();
|
|
253
|
-
if (error !== null) {
|
|
254
|
-
this.chatError = error.trim();
|
|
255
|
-
Private.setName('chat', 'None');
|
|
256
|
-
this._providerChanged.emit('chat');
|
|
257
|
-
return;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
// Get the settings including the secrets.
|
|
261
|
-
const fullSettings = await this._buildFullSettings(provider, settings);
|
|
262
|
-
if (currentProvider?.chat !== undefined) {
|
|
263
|
-
try {
|
|
264
|
-
Private.setChatModel(new currentProvider.chat({
|
|
265
|
-
...fullSettings
|
|
266
|
-
}));
|
|
267
|
-
}
|
|
268
|
-
catch (e) {
|
|
269
|
-
this.chatError = e.message;
|
|
270
|
-
Private.setChatModel(null);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
else {
|
|
274
|
-
Private.setChatModel(null);
|
|
275
|
-
}
|
|
276
|
-
Private.setName('chat', provider);
|
|
277
|
-
this._providerChanged.emit('chat');
|
|
278
|
-
}
|
|
279
|
-
/**
|
|
280
|
-
* A signal emitting when the provider or its settings has changed.
|
|
281
|
-
*/
|
|
282
|
-
get providerChanged() {
|
|
283
|
-
return this._providerChanged;
|
|
284
|
-
}
|
|
285
|
-
/**
|
|
286
|
-
* Build a new settings object containing the secrets.
|
|
287
|
-
*/
|
|
288
|
-
async _buildFullSettings(name, settings) {
|
|
289
|
-
// Build a new settings object containing the secrets.
|
|
290
|
-
const fullSettings = {};
|
|
291
|
-
for (const key of Object.keys(settings)) {
|
|
292
|
-
if (settings[key] === SECRETS_REPLACEMENT) {
|
|
293
|
-
const id = getSecretId(name, key);
|
|
294
|
-
const secrets = await this._secretsManager?.get(Private.getToken(), SECRETS_NAMESPACE, id);
|
|
295
|
-
if (secrets !== undefined) {
|
|
296
|
-
fullSettings[key] = secrets.value;
|
|
297
|
-
}
|
|
298
|
-
continue;
|
|
299
|
-
}
|
|
300
|
-
fullSettings[key] = settings[key];
|
|
301
|
-
}
|
|
302
|
-
return fullSettings;
|
|
303
|
-
}
|
|
304
|
-
_secretsManager;
|
|
305
|
-
_providerChanged = new Signal(this);
|
|
306
|
-
_chatError = '';
|
|
307
|
-
_completerError = '';
|
|
308
|
-
_notifications;
|
|
309
|
-
_deferredProvider = {
|
|
310
|
-
chat: null,
|
|
311
|
-
completer: null
|
|
312
|
-
};
|
|
313
|
-
_chatPrompt = '';
|
|
314
|
-
_completerPrompt = '';
|
|
315
|
-
}
|
|
316
|
-
(function (AIProviderRegistry) {
|
|
317
|
-
/**
|
|
318
|
-
* This function indicates whether a key is writable in an object.
|
|
319
|
-
* https://stackoverflow.com/questions/54724875/can-we-check-whether-property-is-readonly-in-typescript
|
|
320
|
-
*
|
|
321
|
-
* @param obj - An object extending the BaseLanguageModel interface.
|
|
322
|
-
* @param key - A string as a key of the object.
|
|
323
|
-
* @returns a boolean whether the key is writable or not.
|
|
324
|
-
*/
|
|
325
|
-
function isWritable(obj, key) {
|
|
326
|
-
const desc = Object.getOwnPropertyDescriptor(obj, key) ||
|
|
327
|
-
Object.getOwnPropertyDescriptor(Object.getPrototypeOf(obj), key) ||
|
|
328
|
-
{};
|
|
329
|
-
return Boolean(desc.writable);
|
|
330
|
-
}
|
|
331
|
-
AIProviderRegistry.isWritable = isWritable;
|
|
332
|
-
/**
|
|
333
|
-
* Update the config of a language model.
|
|
334
|
-
* It only updates the writable attributes of the model.
|
|
335
|
-
*
|
|
336
|
-
* @param model - the model to update.
|
|
337
|
-
* @param settings - the configuration s a JSON object.
|
|
338
|
-
*/
|
|
339
|
-
function updateConfig(model, settings) {
|
|
340
|
-
Object.entries(settings).forEach(([key, value], index) => {
|
|
341
|
-
if (key in model) {
|
|
342
|
-
const modelKey = key;
|
|
343
|
-
if (isWritable(model, modelKey)) {
|
|
344
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
345
|
-
// @ts-ignore
|
|
346
|
-
model[modelKey] = value;
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
});
|
|
350
|
-
}
|
|
351
|
-
AIProviderRegistry.updateConfig = updateConfig;
|
|
352
|
-
})(AIProviderRegistry || (AIProviderRegistry = {}));
|
|
353
|
-
var Private;
|
|
354
|
-
(function (Private) {
|
|
355
|
-
/**
|
|
356
|
-
* The token to use with the secrets manager, setter and getter.
|
|
357
|
-
*/
|
|
358
|
-
let secretsToken;
|
|
359
|
-
function setToken(value) {
|
|
360
|
-
secretsToken = value;
|
|
361
|
-
}
|
|
362
|
-
Private.setToken = setToken;
|
|
363
|
-
function getToken() {
|
|
364
|
-
return secretsToken;
|
|
365
|
-
}
|
|
366
|
-
Private.getToken = getToken;
|
|
367
|
-
/**
|
|
368
|
-
* The providers map, in private namespace to prevent updating the 'exposeChatModel'
|
|
369
|
-
* flag.
|
|
370
|
-
*/
|
|
371
|
-
Private.providers = new Map();
|
|
372
|
-
/**
|
|
373
|
-
* The name of the current provider, setter and getter.
|
|
374
|
-
* It is in a private namespace to prevent updating it without updating the models.
|
|
375
|
-
*/
|
|
376
|
-
const names = {
|
|
377
|
-
chat: 'None',
|
|
378
|
-
completer: 'None'
|
|
379
|
-
};
|
|
380
|
-
function setName(role, value) {
|
|
381
|
-
names[role] = value;
|
|
382
|
-
}
|
|
383
|
-
Private.setName = setName;
|
|
384
|
-
function getName(role) {
|
|
385
|
-
return names[role];
|
|
386
|
-
}
|
|
387
|
-
Private.getName = getName;
|
|
388
|
-
/**
|
|
389
|
-
* The chat model setter and getter.
|
|
390
|
-
*/
|
|
391
|
-
let chatModel = null;
|
|
392
|
-
function setChatModel(model) {
|
|
393
|
-
chatModel = model;
|
|
394
|
-
}
|
|
395
|
-
Private.setChatModel = setChatModel;
|
|
396
|
-
function getChatModel() {
|
|
397
|
-
return chatModel;
|
|
398
|
-
}
|
|
399
|
-
Private.getChatModel = getChatModel;
|
|
400
|
-
/**
|
|
401
|
-
* The completer setter and getter.
|
|
402
|
-
*/
|
|
403
|
-
let completer = null;
|
|
404
|
-
function setCompleter(model) {
|
|
405
|
-
completer = model;
|
|
406
|
-
}
|
|
407
|
-
Private.setCompleter = setCompleter;
|
|
408
|
-
function getCompleter() {
|
|
409
|
-
return completer;
|
|
410
|
-
}
|
|
411
|
-
Private.getCompleter = getCompleter;
|
|
412
|
-
})(Private || (Private = {}));
|
package/lib/settings/base.json
DELETED
package/lib/settings/index.d.ts
DELETED
package/lib/settings/index.js
DELETED
package/lib/settings/panel.d.ts
DELETED
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
import { IRenderMimeRegistry } from '@jupyterlab/rendermime';
|
|
2
|
-
import { IFormRenderer } from '@jupyterlab/ui-components';
|
|
3
|
-
import type { FieldProps } from '@rjsf/utils';
|
|
4
|
-
import { JSONSchema7 } from 'json-schema';
|
|
5
|
-
import { ISecretsManager } from 'jupyter-secrets-manager';
|
|
6
|
-
import React from 'react';
|
|
7
|
-
import { IAIProviderRegistry, IDict, ModelRole } from '../tokens';
|
|
8
|
-
export declare const aiSettingsRenderer: (options: {
|
|
9
|
-
providerRegistry: IAIProviderRegistry;
|
|
10
|
-
secretsToken?: symbol;
|
|
11
|
-
rmRegistry?: IRenderMimeRegistry;
|
|
12
|
-
secretsManager?: ISecretsManager;
|
|
13
|
-
}) => IFormRenderer;
|
|
14
|
-
export interface IAiSettings {
|
|
15
|
-
/**
|
|
16
|
-
* Get the local storage settings for a specific role (chat or completer).
|
|
17
|
-
*/
|
|
18
|
-
getLocalStorage(role: ModelRole): IDict<any>;
|
|
19
|
-
/**
|
|
20
|
-
* Set the local storage item for a specific role (chat or completer).
|
|
21
|
-
* If the key is not provider (null) we assume the value should replace the whole
|
|
22
|
-
* local storage for this role.
|
|
23
|
-
*/
|
|
24
|
-
setLocalStorageItem(role: ModelRole, key: string | null, value: any): void;
|
|
25
|
-
/**
|
|
26
|
-
* Get the settings from the registry (jupyterlab settings system) for a given role.
|
|
27
|
-
*/
|
|
28
|
-
getSettingsFromRegistry(role: ModelRole): IDict<any>;
|
|
29
|
-
/**
|
|
30
|
-
* Save the settings to the setting registry.
|
|
31
|
-
*/
|
|
32
|
-
saveSettingsToRegistry(role: ModelRole, settings: IDict<any>): void;
|
|
33
|
-
}
|
|
34
|
-
export declare class AiSettings extends React.Component<FieldProps, AiSettings.states> implements IAiSettings {
|
|
35
|
-
constructor(props: FieldProps);
|
|
36
|
-
private _settingsChanged;
|
|
37
|
-
/**
|
|
38
|
-
* Get the local storage settings for a specific role (chat or completer).
|
|
39
|
-
*/
|
|
40
|
-
getLocalStorage: (role: ModelRole) => IDict<any>;
|
|
41
|
-
/**
|
|
42
|
-
* Set the local storage item for a specific role (chat or completer).
|
|
43
|
-
* If the key is not provider (null) we assume the value should replace the whole
|
|
44
|
-
* local storage for this role.
|
|
45
|
-
*/
|
|
46
|
-
setLocalStorageItem: (role: ModelRole, key: string | null, value: any) => void;
|
|
47
|
-
/**
|
|
48
|
-
* Get the settings from the registry (jupyterlab settings system) for a given role.
|
|
49
|
-
*/
|
|
50
|
-
getSettingsFromRegistry: (role: ModelRole) => IDict<any>;
|
|
51
|
-
/**
|
|
52
|
-
* Save the settings to the setting registry.
|
|
53
|
-
*/
|
|
54
|
-
saveSettingsToRegistry: (role: ModelRole, settings: IDict<any>) => void;
|
|
55
|
-
render(): JSX.Element;
|
|
56
|
-
private _settings;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* The AI settings component namespace.
|
|
60
|
-
*/
|
|
61
|
-
declare namespace AiSettings {
|
|
62
|
-
/**
|
|
63
|
-
* The AI settings component states.
|
|
64
|
-
*/
|
|
65
|
-
type states = {
|
|
66
|
-
/**
|
|
67
|
-
* Whether there is only one provider for chat and completion.
|
|
68
|
-
*/
|
|
69
|
-
uniqueProvider: boolean;
|
|
70
|
-
};
|
|
71
|
-
/**
|
|
72
|
-
* The provider names object.
|
|
73
|
-
*/
|
|
74
|
-
type providers = {
|
|
75
|
-
[key in ModelRole]: string;
|
|
76
|
-
};
|
|
77
|
-
/**
|
|
78
|
-
* The provider schemas object.
|
|
79
|
-
*/
|
|
80
|
-
type schemas = {
|
|
81
|
-
[key in ModelRole]: JSONSchema7;
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
export declare class AiProviderSettings extends React.Component<AiProviderSettings.props, AiProviderSettings.states> {
|
|
85
|
-
constructor(props: AiProviderSettings.props);
|
|
86
|
-
componentDidMount(): void;
|
|
87
|
-
componentDidUpdate(): Promise<void>;
|
|
88
|
-
componentWillUnmount(): void;
|
|
89
|
-
/**
|
|
90
|
-
* Get the current provider from the local storage.
|
|
91
|
-
*/
|
|
92
|
-
getCurrentProvider(): string;
|
|
93
|
-
/**
|
|
94
|
-
* Save the current provider to the local storage.
|
|
95
|
-
*/
|
|
96
|
-
saveCurrentProvider(): void;
|
|
97
|
-
/**
|
|
98
|
-
* Get settings from local storage for the current provider provider.
|
|
99
|
-
*/
|
|
100
|
-
getSettingsFromLocalStorage(): IDict<any>;
|
|
101
|
-
/**
|
|
102
|
-
* Save settings in local storage for a given provider.
|
|
103
|
-
*/
|
|
104
|
-
saveSettingsToLocalStorage(): void;
|
|
105
|
-
/**
|
|
106
|
-
* Save the settings to the setting registry.
|
|
107
|
-
*/
|
|
108
|
-
saveSettingsToRegistry(): void;
|
|
109
|
-
/**
|
|
110
|
-
* Triggered when the settings has changed.
|
|
111
|
-
*/
|
|
112
|
-
private _settingsChanged;
|
|
113
|
-
/**
|
|
114
|
-
* Triggered when the secret fields visibility has changed.
|
|
115
|
-
*/
|
|
116
|
-
private _fieldVisibilityChanged;
|
|
117
|
-
/**
|
|
118
|
-
* Update the settings whether the secrets manager is used or not.
|
|
119
|
-
*
|
|
120
|
-
* @param value - whether to use the secrets manager or not.
|
|
121
|
-
*/
|
|
122
|
-
private _updateUseSecretsManager;
|
|
123
|
-
/**
|
|
124
|
-
* Build the schema for a given provider.
|
|
125
|
-
*/
|
|
126
|
-
private _buildSchema;
|
|
127
|
-
/**
|
|
128
|
-
* Update the schema state for the given provider, that trigger the re-rendering of
|
|
129
|
-
* the component.
|
|
130
|
-
*/
|
|
131
|
-
private _updateSchema;
|
|
132
|
-
/**
|
|
133
|
-
* Render the markdown instructions for the current provider.
|
|
134
|
-
*/
|
|
135
|
-
private _renderInstruction;
|
|
136
|
-
/**
|
|
137
|
-
* Check for compatibility of the provider with the current environment.
|
|
138
|
-
* If the provider is not compatible, display an error message.
|
|
139
|
-
*/
|
|
140
|
-
private _checkProviderCompatibility;
|
|
141
|
-
/**
|
|
142
|
-
* Triggered when the provider has changed, to update the schema and values.
|
|
143
|
-
* Update the Jupyterlab settings accordingly.
|
|
144
|
-
*/
|
|
145
|
-
private _onProviderChanged;
|
|
146
|
-
/**
|
|
147
|
-
* Callback function called when the password input has been programmatically updated
|
|
148
|
-
* with the secret manager.
|
|
149
|
-
*/
|
|
150
|
-
private _onPasswordUpdated;
|
|
151
|
-
/**
|
|
152
|
-
* Update the current settings with the new values from the form.
|
|
153
|
-
*
|
|
154
|
-
* @param data - The form data to update.
|
|
155
|
-
* @returns - Boolean whether the form is not the default one.
|
|
156
|
-
*/
|
|
157
|
-
private _updatedFormData;
|
|
158
|
-
/**
|
|
159
|
-
* Triggered when the form value has changed, to update the current settings and save
|
|
160
|
-
* it in local storage.
|
|
161
|
-
* Update the Jupyterlab settings accordingly.
|
|
162
|
-
*/
|
|
163
|
-
private _onFormChanged;
|
|
164
|
-
/**
|
|
165
|
-
* Handler for the "Restore to defaults" button - clears all
|
|
166
|
-
* modified settings then calls `setFormData` to restore the
|
|
167
|
-
* values.
|
|
168
|
-
*/
|
|
169
|
-
private _reset;
|
|
170
|
-
render(): JSX.Element;
|
|
171
|
-
private _role;
|
|
172
|
-
private _providerRegistry;
|
|
173
|
-
private _provider;
|
|
174
|
-
private _providerSchema;
|
|
175
|
-
private _useSecretsManager;
|
|
176
|
-
private _rmRegistry;
|
|
177
|
-
private _secretsManager;
|
|
178
|
-
private _currentSettings;
|
|
179
|
-
private _uiSchema;
|
|
180
|
-
private _settings;
|
|
181
|
-
private _formRef;
|
|
182
|
-
private _secretFields;
|
|
183
|
-
private _defaultFormData;
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* The AI provider settings component namespace.
|
|
187
|
-
*/
|
|
188
|
-
export declare namespace AiProviderSettings {
|
|
189
|
-
/**
|
|
190
|
-
* The AI provider settings component props.
|
|
191
|
-
*/
|
|
192
|
-
type props = FieldProps & {
|
|
193
|
-
/**
|
|
194
|
-
* Why this model is used for (chat or completion).
|
|
195
|
-
*/
|
|
196
|
-
role: ModelRole;
|
|
197
|
-
/**
|
|
198
|
-
* The parent component which should handle:
|
|
199
|
-
* - the get/set functions for local storage
|
|
200
|
-
* - save settings using jupyter settings system
|
|
201
|
-
*/
|
|
202
|
-
aiSettings: IAiSettings;
|
|
203
|
-
};
|
|
204
|
-
/**
|
|
205
|
-
* The AI provider settings component states.
|
|
206
|
-
*/
|
|
207
|
-
type states = {
|
|
208
|
-
/**
|
|
209
|
-
* The schema of the settings.
|
|
210
|
-
*/
|
|
211
|
-
schema: JSONSchema7;
|
|
212
|
-
/**
|
|
213
|
-
* The instructions for this provider.
|
|
214
|
-
*/
|
|
215
|
-
instruction: HTMLElement | null;
|
|
216
|
-
/**
|
|
217
|
-
* An error if the model in not compatible with the current environment.
|
|
218
|
-
*/
|
|
219
|
-
compatibilityError: string | null;
|
|
220
|
-
/**
|
|
221
|
-
* Whether the settings are modified from default or not.
|
|
222
|
-
*/
|
|
223
|
-
isModified?: boolean;
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
export {};
|