@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.
Files changed (162) hide show
  1. package/lib/agent.d.ts +233 -0
  2. package/lib/agent.js +604 -0
  3. package/lib/chat-model.d.ts +195 -0
  4. package/lib/chat-model.js +590 -0
  5. package/lib/completion/completion-provider.d.ts +83 -0
  6. package/lib/completion/completion-provider.js +209 -0
  7. package/lib/completion/index.d.ts +1 -0
  8. package/lib/completion/index.js +1 -0
  9. package/lib/components/clear-button.d.ts +18 -0
  10. package/lib/components/clear-button.js +31 -0
  11. package/lib/components/index.d.ts +3 -0
  12. package/lib/components/index.js +3 -0
  13. package/lib/components/model-select.d.ts +19 -0
  14. package/lib/components/model-select.js +154 -0
  15. package/lib/components/stop-button.d.ts +3 -3
  16. package/lib/components/stop-button.js +8 -9
  17. package/lib/components/token-usage-display.d.ts +45 -0
  18. package/lib/components/token-usage-display.js +74 -0
  19. package/lib/components/tool-select.d.ts +27 -0
  20. package/lib/components/tool-select.js +130 -0
  21. package/lib/icons.d.ts +3 -1
  22. package/lib/icons.js +10 -13
  23. package/lib/index.d.ts +4 -5
  24. package/lib/index.js +322 -167
  25. package/lib/mcp/browser.d.ts +68 -0
  26. package/lib/mcp/browser.js +132 -0
  27. package/lib/models/settings-model.d.ts +69 -0
  28. package/lib/models/settings-model.js +295 -0
  29. package/lib/providers/built-in-providers.d.ts +9 -0
  30. package/lib/providers/built-in-providers.js +192 -0
  31. package/lib/providers/models.d.ts +37 -0
  32. package/lib/providers/models.js +28 -0
  33. package/lib/providers/provider-registry.d.ts +94 -0
  34. package/lib/providers/provider-registry.js +155 -0
  35. package/lib/tokens.d.ts +157 -86
  36. package/lib/tokens.js +16 -12
  37. package/lib/tools/commands.d.ts +11 -0
  38. package/lib/tools/commands.js +126 -0
  39. package/lib/tools/file.d.ts +27 -0
  40. package/lib/tools/file.js +262 -0
  41. package/lib/tools/notebook.d.ts +40 -0
  42. package/lib/tools/notebook.js +762 -0
  43. package/lib/tools/tool-registry.d.ts +35 -0
  44. package/lib/tools/tool-registry.js +55 -0
  45. package/lib/widgets/ai-settings.d.ts +39 -0
  46. package/lib/widgets/ai-settings.js +506 -0
  47. package/lib/widgets/chat-wrapper.d.ts +144 -0
  48. package/lib/widgets/chat-wrapper.js +390 -0
  49. package/lib/widgets/provider-config-dialog.d.ts +13 -0
  50. package/lib/widgets/provider-config-dialog.js +104 -0
  51. package/package.json +150 -41
  52. package/schema/settings-model.json +153 -0
  53. package/src/agent.ts +800 -0
  54. package/src/chat-model.ts +770 -0
  55. package/src/completion/completion-provider.ts +308 -0
  56. package/src/completion/index.ts +1 -0
  57. package/src/components/clear-button.tsx +56 -0
  58. package/src/components/index.ts +3 -0
  59. package/src/components/model-select.tsx +245 -0
  60. package/src/components/stop-button.tsx +11 -11
  61. package/src/components/token-usage-display.tsx +130 -0
  62. package/src/components/tool-select.tsx +218 -0
  63. package/src/icons.ts +12 -14
  64. package/src/index.ts +468 -238
  65. package/src/mcp/browser.ts +213 -0
  66. package/src/models/settings-model.ts +409 -0
  67. package/src/providers/built-in-providers.ts +216 -0
  68. package/src/providers/models.ts +79 -0
  69. package/src/providers/provider-registry.ts +189 -0
  70. package/src/tokens.ts +203 -90
  71. package/src/tools/commands.ts +151 -0
  72. package/src/tools/file.ts +307 -0
  73. package/src/tools/notebook.ts +964 -0
  74. package/src/tools/tool-registry.ts +63 -0
  75. package/src/types.d.ts +4 -0
  76. package/src/widgets/ai-settings.tsx +1100 -0
  77. package/src/widgets/chat-wrapper.tsx +543 -0
  78. package/src/widgets/provider-config-dialog.tsx +256 -0
  79. package/style/base.css +335 -14
  80. package/style/icons/jupyternaut-lite.svg +1 -1
  81. package/lib/base-completer.d.ts +0 -49
  82. package/lib/base-completer.js +0 -14
  83. package/lib/chat-handler.d.ts +0 -56
  84. package/lib/chat-handler.js +0 -201
  85. package/lib/completion-provider.d.ts +0 -34
  86. package/lib/completion-provider.js +0 -32
  87. package/lib/default-prompts.d.ts +0 -2
  88. package/lib/default-prompts.js +0 -31
  89. package/lib/default-providers/Anthropic/completer.d.ts +0 -12
  90. package/lib/default-providers/Anthropic/completer.js +0 -46
  91. package/lib/default-providers/Anthropic/settings-schema.json +0 -70
  92. package/lib/default-providers/ChromeAI/completer.d.ts +0 -12
  93. package/lib/default-providers/ChromeAI/completer.js +0 -56
  94. package/lib/default-providers/ChromeAI/instructions.d.ts +0 -6
  95. package/lib/default-providers/ChromeAI/instructions.js +0 -42
  96. package/lib/default-providers/ChromeAI/settings-schema.json +0 -18
  97. package/lib/default-providers/Gemini/completer.d.ts +0 -12
  98. package/lib/default-providers/Gemini/completer.js +0 -48
  99. package/lib/default-providers/Gemini/instructions.d.ts +0 -2
  100. package/lib/default-providers/Gemini/instructions.js +0 -9
  101. package/lib/default-providers/Gemini/settings-schema.json +0 -64
  102. package/lib/default-providers/MistralAI/completer.d.ts +0 -13
  103. package/lib/default-providers/MistralAI/completer.js +0 -52
  104. package/lib/default-providers/MistralAI/instructions.d.ts +0 -2
  105. package/lib/default-providers/MistralAI/instructions.js +0 -18
  106. package/lib/default-providers/MistralAI/settings-schema.json +0 -75
  107. package/lib/default-providers/Ollama/completer.d.ts +0 -12
  108. package/lib/default-providers/Ollama/completer.js +0 -43
  109. package/lib/default-providers/Ollama/instructions.d.ts +0 -2
  110. package/lib/default-providers/Ollama/instructions.js +0 -70
  111. package/lib/default-providers/Ollama/settings-schema.json +0 -143
  112. package/lib/default-providers/OpenAI/completer.d.ts +0 -12
  113. package/lib/default-providers/OpenAI/completer.js +0 -43
  114. package/lib/default-providers/OpenAI/settings-schema.json +0 -628
  115. package/lib/default-providers/WebLLM/completer.d.ts +0 -21
  116. package/lib/default-providers/WebLLM/completer.js +0 -127
  117. package/lib/default-providers/WebLLM/instructions.d.ts +0 -6
  118. package/lib/default-providers/WebLLM/instructions.js +0 -32
  119. package/lib/default-providers/WebLLM/settings-schema.json +0 -19
  120. package/lib/default-providers/index.d.ts +0 -2
  121. package/lib/default-providers/index.js +0 -179
  122. package/lib/provider.d.ts +0 -144
  123. package/lib/provider.js +0 -412
  124. package/lib/settings/base.json +0 -7
  125. package/lib/settings/index.d.ts +0 -3
  126. package/lib/settings/index.js +0 -3
  127. package/lib/settings/panel.d.ts +0 -226
  128. package/lib/settings/panel.js +0 -510
  129. package/lib/settings/textarea.d.ts +0 -2
  130. package/lib/settings/textarea.js +0 -18
  131. package/lib/settings/utils.d.ts +0 -2
  132. package/lib/settings/utils.js +0 -4
  133. package/lib/types/ai-model.d.ts +0 -24
  134. package/lib/types/ai-model.js +0 -5
  135. package/schema/chat.json +0 -28
  136. package/schema/provider-registry.json +0 -29
  137. package/schema/system-prompts.json +0 -22
  138. package/src/base-completer.ts +0 -75
  139. package/src/chat-handler.ts +0 -262
  140. package/src/completion-provider.ts +0 -64
  141. package/src/default-prompts.ts +0 -33
  142. package/src/default-providers/Anthropic/completer.ts +0 -59
  143. package/src/default-providers/ChromeAI/completer.ts +0 -73
  144. package/src/default-providers/ChromeAI/instructions.ts +0 -45
  145. package/src/default-providers/Gemini/completer.ts +0 -61
  146. package/src/default-providers/Gemini/instructions.ts +0 -9
  147. package/src/default-providers/MistralAI/completer.ts +0 -69
  148. package/src/default-providers/MistralAI/instructions.ts +0 -18
  149. package/src/default-providers/Ollama/completer.ts +0 -54
  150. package/src/default-providers/Ollama/instructions.ts +0 -70
  151. package/src/default-providers/OpenAI/completer.ts +0 -54
  152. package/src/default-providers/WebLLM/completer.ts +0 -151
  153. package/src/default-providers/WebLLM/instructions.ts +0 -33
  154. package/src/default-providers/index.ts +0 -211
  155. package/src/global.d.ts +0 -9
  156. package/src/provider.ts +0 -514
  157. package/src/settings/index.ts +0 -3
  158. package/src/settings/panel.tsx +0 -773
  159. package/src/settings/textarea.tsx +0 -33
  160. package/src/settings/utils.ts +0 -5
  161. package/src/types/ai-model.ts +0 -37
  162. 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
@@ -1,2 +1,4 @@
1
1
  import { LabIcon } from '@jupyterlab/ui-components';
2
- export declare const jupyternautLiteIcon: LabIcon;
2
+ export declare const labaiIcon: LabIcon;
3
+ export declare const jupyternautIcon: LabIcon;
4
+ export declare const AI_AVATAR: string;
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
- * This icon is based on the jupyternaut icon from Jupyter AI:
8
- * https://github.com/jupyterlab/jupyter-ai/blob/main/packages/jupyter-ai/style/icons/jupyternaut.svg
9
- * With a small tweak for the colors to match the JupyterLite icon.
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 { IAIProviderRegistry } from './tokens';
4
- declare const _default: (JupyterFrontEndPlugin<void> | JupyterFrontEndPlugin<IChatCommandRegistry> | JupyterFrontEndPlugin<IAIProviderRegistry>)[];
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 { IAIProviderRegistry } from './tokens';
7
- export * from './base-completer';
6
+ export * from './tokens';