@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
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { TooltippedButton } from '@jupyter/chat';
|
|
2
|
+
import BuildIcon from '@mui/icons-material/Build';
|
|
3
|
+
import CheckIcon from '@mui/icons-material/Check';
|
|
4
|
+
import { Menu, MenuItem, Tooltip, Typography } from '@mui/material';
|
|
5
|
+
import React, { useCallback, useEffect, useState } from 'react';
|
|
6
|
+
const SELECT_ITEM_CLASS = 'jp-AIToolSelect-item';
|
|
7
|
+
/**
|
|
8
|
+
* The tool select component for choosing AI tools.
|
|
9
|
+
*/
|
|
10
|
+
export function ToolSelect(props) {
|
|
11
|
+
const { toolRegistry, onToolSelectionChange, toolsEnabled } = props;
|
|
12
|
+
const [selectedToolNames, setSelectedToolNames] = useState([]);
|
|
13
|
+
const [tools, setTools] = useState(toolRegistry?.namedTools || []);
|
|
14
|
+
const [menuAnchorEl, setMenuAnchorEl] = useState(null);
|
|
15
|
+
const [menuOpen, setMenuOpen] = useState(false);
|
|
16
|
+
const openMenu = useCallback((el) => {
|
|
17
|
+
setMenuAnchorEl(el);
|
|
18
|
+
setMenuOpen(true);
|
|
19
|
+
}, []);
|
|
20
|
+
const closeMenu = useCallback(() => {
|
|
21
|
+
setMenuOpen(false);
|
|
22
|
+
}, []);
|
|
23
|
+
const toggleTool = useCallback((toolName) => {
|
|
24
|
+
const currentToolNames = [...selectedToolNames];
|
|
25
|
+
const index = currentToolNames.indexOf(toolName);
|
|
26
|
+
if (index !== -1) {
|
|
27
|
+
// Remove tool
|
|
28
|
+
currentToolNames.splice(index, 1);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
// Add tool
|
|
32
|
+
currentToolNames.push(toolName);
|
|
33
|
+
}
|
|
34
|
+
setSelectedToolNames(currentToolNames);
|
|
35
|
+
onToolSelectionChange(currentToolNames);
|
|
36
|
+
}, [selectedToolNames, onToolSelectionChange]);
|
|
37
|
+
// Update tools when registry changes
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
const updateTools = () => {
|
|
40
|
+
const newTools = toolRegistry?.namedTools || [];
|
|
41
|
+
setTools(newTools);
|
|
42
|
+
};
|
|
43
|
+
if (toolRegistry) {
|
|
44
|
+
updateTools();
|
|
45
|
+
toolRegistry.toolsChanged.connect(updateTools);
|
|
46
|
+
return () => {
|
|
47
|
+
toolRegistry.toolsChanged.disconnect(updateTools);
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}, [toolRegistry]);
|
|
51
|
+
// Initialize selected tools to all tools by default
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (tools.length > 0 && selectedToolNames.length === 0) {
|
|
54
|
+
const defaultToolNames = tools.map(tool => tool.name);
|
|
55
|
+
setSelectedToolNames(defaultToolNames);
|
|
56
|
+
onToolSelectionChange(defaultToolNames);
|
|
57
|
+
}
|
|
58
|
+
}, [tools, selectedToolNames.length, onToolSelectionChange]);
|
|
59
|
+
// Don't render if tools are disabled or no tools available
|
|
60
|
+
if (!toolsEnabled || tools.length === 0) {
|
|
61
|
+
return React.createElement(React.Fragment, null);
|
|
62
|
+
}
|
|
63
|
+
return (React.createElement(React.Fragment, null,
|
|
64
|
+
React.createElement(TooltippedButton, { onClick: e => {
|
|
65
|
+
openMenu(e.currentTarget);
|
|
66
|
+
}, tooltip: `Tools (${selectedToolNames.length}/${tools.length} selected)`, buttonProps: {
|
|
67
|
+
size: 'small',
|
|
68
|
+
variant: selectedToolNames.length > 0 ? 'contained' : 'outlined',
|
|
69
|
+
color: 'primary',
|
|
70
|
+
title: 'Select AI Tools',
|
|
71
|
+
onKeyDown: e => {
|
|
72
|
+
if (e.key !== 'Enter' && e.key !== ' ') {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
openMenu(e.currentTarget);
|
|
76
|
+
// Stop propagation to prevent sending message
|
|
77
|
+
e.stopPropagation();
|
|
78
|
+
}
|
|
79
|
+
}, sx: selectedToolNames.length === 0
|
|
80
|
+
? { backgroundColor: 'var(--jp-layout-color3)' }
|
|
81
|
+
: {} },
|
|
82
|
+
React.createElement(BuildIcon, null)),
|
|
83
|
+
React.createElement(Menu, { open: menuOpen, onClose: closeMenu, anchorEl: menuAnchorEl, anchorOrigin: {
|
|
84
|
+
vertical: 'top',
|
|
85
|
+
horizontal: 'right'
|
|
86
|
+
}, transformOrigin: {
|
|
87
|
+
vertical: 'bottom',
|
|
88
|
+
horizontal: 'right'
|
|
89
|
+
}, sx: {
|
|
90
|
+
'& .MuiMenuItem-root': {
|
|
91
|
+
padding: '0.5em',
|
|
92
|
+
paddingRight: '2em'
|
|
93
|
+
}
|
|
94
|
+
} }, tools.map(namedTool => (React.createElement(Tooltip, { key: namedTool.name, title: namedTool.tool.description || namedTool.name, placement: "left" },
|
|
95
|
+
React.createElement(MenuItem, { className: SELECT_ITEM_CLASS, onClick: e => {
|
|
96
|
+
toggleTool(namedTool.name);
|
|
97
|
+
// Prevent sending message on tool selection
|
|
98
|
+
e.stopPropagation();
|
|
99
|
+
} },
|
|
100
|
+
selectedToolNames.includes(namedTool.name) ? (React.createElement(CheckIcon, { sx: {
|
|
101
|
+
marginRight: '8px',
|
|
102
|
+
color: 'var(--jp-brand-color1, #2196F3)'
|
|
103
|
+
} })) : (React.createElement("div", { style: { width: '24px', marginRight: '8px' } })),
|
|
104
|
+
React.createElement(Typography, { variant: "body2" }, namedTool.name))))))));
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Factory function returning the toolbar item for tool selection.
|
|
108
|
+
*/
|
|
109
|
+
export function createToolSelectItem(toolRegistry, toolsEnabled = true) {
|
|
110
|
+
return {
|
|
111
|
+
element: (props) => {
|
|
112
|
+
const onToolSelectionChange = (tools) => {
|
|
113
|
+
const chatContext = props.model
|
|
114
|
+
.chatContext;
|
|
115
|
+
if (!chatContext.agentManager) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
chatContext.agentManager.setSelectedTools(tools);
|
|
119
|
+
};
|
|
120
|
+
const toolSelectProps = {
|
|
121
|
+
...props,
|
|
122
|
+
toolRegistry,
|
|
123
|
+
onToolSelectionChange,
|
|
124
|
+
toolsEnabled
|
|
125
|
+
};
|
|
126
|
+
return React.createElement(ToolSelect, { ...toolSelectProps });
|
|
127
|
+
},
|
|
128
|
+
position: 1
|
|
129
|
+
};
|
|
130
|
+
}
|
package/lib/icons.d.ts
CHANGED
package/lib/icons.js
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) Jupyter Development Team.
|
|
3
|
-
* Distributed under the terms of the Modified BSD License.
|
|
4
|
-
*/
|
|
5
1
|
import { LabIcon } from '@jupyterlab/ui-components';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
*/
|
|
11
|
-
import jupyternautLiteSvg from '../style/icons/jupyternaut-lite.svg';
|
|
12
|
-
export const jupyternautLiteIcon = new LabIcon({
|
|
13
|
-
name: '@jupyterlite/ai:jupyternaut-lite',
|
|
14
|
-
svgstr: jupyternautLiteSvg
|
|
2
|
+
import labaiIconSvg from '../style/icons/jupyternaut-lite.svg';
|
|
3
|
+
export const labaiIcon = new LabIcon({
|
|
4
|
+
name: '@jupyterlite/ai:icon',
|
|
5
|
+
svgstr: labaiIconSvg
|
|
15
6
|
});
|
|
7
|
+
export const jupyternautIcon = new LabIcon({
|
|
8
|
+
name: '@jupyterlite/ai:jupyternaut',
|
|
9
|
+
svgstr: labaiIconSvg
|
|
10
|
+
});
|
|
11
|
+
const AI_AVATAR_BASE64 = btoa(jupyternautIcon.svgstr);
|
|
12
|
+
export const AI_AVATAR = `data:image/svg+xml;base64,${AI_AVATAR_BASE64}`;
|
package/lib/index.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { IChatCommandRegistry } from '@jupyter/chat';
|
|
2
1
|
import { JupyterFrontEndPlugin } from '@jupyterlab/application';
|
|
3
|
-
import {
|
|
4
|
-
|
|
2
|
+
import { IChatProviderRegistry, ICompletionProviderRegistry, IToolRegistry } from './tokens';
|
|
3
|
+
import { AISettingsModel } from './models/settings-model';
|
|
4
|
+
declare const _default: (JupyterFrontEndPlugin<IChatProviderRegistry> | JupyterFrontEndPlugin<ICompletionProviderRegistry> | JupyterFrontEndPlugin<void> | JupyterFrontEndPlugin<AISettingsModel> | JupyterFrontEndPlugin<IToolRegistry>)[];
|
|
5
5
|
export default _default;
|
|
6
|
-
export
|
|
7
|
-
export * from './base-completer';
|
|
6
|
+
export * from './tokens';
|