@opensumi/ide-ai-native 3.8.1-next-1741091353.0 → 3.8.1-next-1741092802.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/browser/ai-core.contribution.d.ts +3 -0
- package/lib/browser/ai-core.contribution.d.ts.map +1 -1
- package/lib/browser/ai-core.contribution.js +45 -1
- package/lib/browser/ai-core.contribution.js.map +1 -1
- package/lib/browser/chat/chat-manager.service.d.ts.map +1 -1
- package/lib/browser/chat/chat-manager.service.js +0 -4
- package/lib/browser/chat/chat-manager.service.js.map +1 -1
- package/lib/browser/chat/chat-proxy.service.d.ts.map +1 -1
- package/lib/browser/chat/chat-proxy.service.js +8 -2
- package/lib/browser/chat/chat-proxy.service.js.map +1 -1
- package/lib/browser/chat/chat.view.d.ts.map +1 -1
- package/lib/browser/chat/chat.view.js +1 -7
- package/lib/browser/chat/chat.view.js.map +1 -1
- package/lib/browser/components/chat-history.module.less +0 -1
- package/lib/browser/mcp/base-apply.service.d.ts +7 -18
- package/lib/browser/mcp/base-apply.service.d.ts.map +1 -1
- package/lib/browser/mcp/base-apply.service.js +65 -185
- package/lib/browser/mcp/base-apply.service.js.map +1 -1
- package/lib/browser/mcp/tools/components/EditFile.d.ts.map +1 -1
- package/lib/browser/mcp/tools/components/EditFile.js +9 -15
- package/lib/browser/mcp/tools/components/EditFile.js.map +1 -1
- package/lib/browser/mcp/tools/components/index.module.less +0 -3
- package/lib/browser/mcp/tools/createNewFileWithText.d.ts +0 -1
- package/lib/browser/mcp/tools/createNewFileWithText.d.ts.map +1 -1
- package/lib/browser/mcp/tools/createNewFileWithText.js +11 -18
- package/lib/browser/mcp/tools/createNewFileWithText.js.map +1 -1
- package/lib/browser/mcp/tools/handlers/EditFile.js +1 -1
- package/lib/browser/mcp/tools/handlers/EditFile.js.map +1 -1
- package/lib/browser/model/msg-history-manager.d.ts +0 -1
- package/lib/browser/model/msg-history-manager.d.ts.map +1 -1
- package/lib/browser/model/msg-history-manager.js +0 -3
- package/lib/browser/model/msg-history-manager.js.map +1 -1
- package/lib/browser/preferences/schema.d.ts.map +1 -1
- package/lib/browser/preferences/schema.js +6 -1
- package/lib/browser/preferences/schema.js.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff-manager.d.ts.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff-manager.js +8 -68
- package/lib/browser/widget/inline-diff/inline-diff-manager.js.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff-previewer.d.ts +4 -10
- package/lib/browser/widget/inline-diff/inline-diff-previewer.d.ts.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff-previewer.js +3 -14
- package/lib/browser/widget/inline-diff/inline-diff-previewer.js.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff-widget.module.less +4 -25
- package/lib/browser/widget/inline-diff/inline-diff.controller.d.ts +3 -3
- package/lib/browser/widget/inline-diff/inline-diff.controller.d.ts.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff.controller.js +5 -10
- package/lib/browser/widget/inline-diff/inline-diff.controller.js.map +1 -1
- package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.d.ts +17 -46
- package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.d.ts.map +1 -1
- package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.js +53 -110
- package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.js.map +1 -1
- package/lib/browser/widget/inline-stream-diff/live-preview.decoration.d.ts +0 -4
- package/lib/browser/widget/inline-stream-diff/live-preview.decoration.d.ts.map +1 -1
- package/lib/browser/widget/inline-stream-diff/live-preview.decoration.js +1 -26
- package/lib/browser/widget/inline-stream-diff/live-preview.decoration.js.map +1 -1
- package/lib/common/index.d.ts +1 -0
- package/lib/common/index.d.ts.map +1 -1
- package/lib/common/index.js +2 -0
- package/lib/common/index.js.map +1 -1
- package/lib/common/model.d.ts +12 -0
- package/lib/common/model.d.ts.map +1 -0
- package/lib/common/model.js +83 -0
- package/lib/common/model.js.map +1 -0
- package/lib/common/types.d.ts +0 -1
- package/lib/common/types.d.ts.map +1 -1
- package/lib/node/anthropic/anthropic-language-model.d.ts +3 -1
- package/lib/node/anthropic/anthropic-language-model.d.ts.map +1 -1
- package/lib/node/anthropic/anthropic-language-model.js +6 -2
- package/lib/node/anthropic/anthropic-language-model.js.map +1 -1
- package/lib/node/base-language-model.d.ts +4 -1
- package/lib/node/base-language-model.d.ts.map +1 -1
- package/lib/node/base-language-model.js +6 -5
- package/lib/node/base-language-model.js.map +1 -1
- package/lib/node/deepseek/deepseek-language-model.d.ts +3 -1
- package/lib/node/deepseek/deepseek-language-model.d.ts.map +1 -1
- package/lib/node/deepseek/deepseek-language-model.js +6 -2
- package/lib/node/deepseek/deepseek-language-model.js.map +1 -1
- package/lib/node/openai/openai-language-model.d.ts +5 -4
- package/lib/node/openai/openai-language-model.d.ts.map +1 -1
- package/lib/node/openai/openai-language-model.js +8 -7
- package/lib/node/openai/openai-language-model.js.map +1 -1
- package/lib/node/openai-compatible/openai-compatible-language-model.d.ts +10 -0
- package/lib/node/openai-compatible/openai-compatible-language-model.d.ts.map +1 -0
- package/lib/node/openai-compatible/openai-compatible-language-model.js +32 -0
- package/lib/node/openai-compatible/openai-compatible-language-model.js.map +1 -0
- package/package.json +24 -23
- package/src/browser/ai-core.contribution.ts +57 -1
- package/src/browser/chat/chat-manager.service.ts +0 -6
- package/src/browser/chat/chat-proxy.service.ts +7 -2
- package/src/browser/chat/chat.view.tsx +2 -7
- package/src/browser/components/chat-history.module.less +0 -1
- package/src/browser/mcp/base-apply.service.ts +67 -222
- package/src/browser/mcp/tools/components/EditFile.tsx +9 -16
- package/src/browser/mcp/tools/components/index.module.less +0 -3
- package/src/browser/mcp/tools/createNewFileWithText.ts +12 -20
- package/src/browser/mcp/tools/handlers/EditFile.ts +1 -1
- package/src/browser/model/msg-history-manager.ts +0 -4
- package/src/browser/preferences/schema.ts +6 -1
- package/src/browser/widget/inline-diff/inline-diff-manager.tsx +21 -143
- package/src/browser/widget/inline-diff/inline-diff-previewer.ts +7 -25
- package/src/browser/widget/inline-diff/inline-diff-widget.module.less +4 -25
- package/src/browser/widget/inline-diff/inline-diff.controller.ts +8 -16
- package/src/browser/widget/inline-stream-diff/inline-stream-diff.handler.tsx +68 -139
- package/src/browser/widget/inline-stream-diff/live-preview.decoration.tsx +1 -30
- package/src/common/index.ts +2 -0
- package/src/common/model.ts +90 -0
- package/src/common/types.ts +0 -1
- package/src/node/anthropic/anthropic-language-model.ts +7 -2
- package/src/node/base-language-model.ts +9 -9
- package/src/node/deepseek/deepseek-language-model.ts +7 -2
- package/src/node/openai/openai-language-model.ts +10 -9
- package/src/node/openai-compatible/openai-compatible-language-model.ts +30 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opensumi/ide-ai-native",
|
|
3
|
-
"version": "3.8.1-next-
|
|
3
|
+
"version": "3.8.1-next-1741092802.0",
|
|
4
4
|
"files": [
|
|
5
5
|
"lib",
|
|
6
6
|
"src"
|
|
@@ -21,28 +21,29 @@
|
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@ai-sdk/anthropic": "^1.1.9",
|
|
23
23
|
"@ai-sdk/deepseek": "^0.1.11",
|
|
24
|
+
"@ai-sdk/openai": "^1.1.9",
|
|
24
25
|
"@ai-sdk/openai-compatible": "^0.1.11",
|
|
25
26
|
"@modelcontextprotocol/sdk": "^1.3.1",
|
|
26
|
-
"@opensumi/ide-addons": "3.8.1-next-
|
|
27
|
-
"@opensumi/ide-components": "3.8.1-next-
|
|
28
|
-
"@opensumi/ide-connection": "3.8.1-next-
|
|
29
|
-
"@opensumi/ide-core-common": "3.8.1-next-
|
|
30
|
-
"@opensumi/ide-core-node": "3.8.1-next-
|
|
31
|
-
"@opensumi/ide-debug": "3.8.1-next-
|
|
32
|
-
"@opensumi/ide-design": "3.8.1-next-
|
|
33
|
-
"@opensumi/ide-editor": "3.8.1-next-
|
|
34
|
-
"@opensumi/ide-file-search": "3.8.1-next-
|
|
35
|
-
"@opensumi/ide-file-service": "3.8.1-next-
|
|
36
|
-
"@opensumi/ide-main-layout": "3.8.1-next-
|
|
37
|
-
"@opensumi/ide-markers": "3.8.1-next-
|
|
38
|
-
"@opensumi/ide-monaco": "3.8.1-next-
|
|
39
|
-
"@opensumi/ide-overlay": "3.8.1-next-
|
|
40
|
-
"@opensumi/ide-preferences": "3.8.1-next-
|
|
41
|
-
"@opensumi/ide-search": "3.8.1-next-
|
|
42
|
-
"@opensumi/ide-terminal-next": "3.8.1-next-
|
|
43
|
-
"@opensumi/ide-theme": "3.8.1-next-
|
|
44
|
-
"@opensumi/ide-utils": "3.8.1-next-
|
|
45
|
-
"@opensumi/ide-workspace": "3.8.1-next-
|
|
27
|
+
"@opensumi/ide-addons": "3.8.1-next-1741092802.0",
|
|
28
|
+
"@opensumi/ide-components": "3.8.1-next-1741092802.0",
|
|
29
|
+
"@opensumi/ide-connection": "3.8.1-next-1741092802.0",
|
|
30
|
+
"@opensumi/ide-core-common": "3.8.1-next-1741092802.0",
|
|
31
|
+
"@opensumi/ide-core-node": "3.8.1-next-1741092802.0",
|
|
32
|
+
"@opensumi/ide-debug": "3.8.1-next-1741092802.0",
|
|
33
|
+
"@opensumi/ide-design": "3.8.1-next-1741092802.0",
|
|
34
|
+
"@opensumi/ide-editor": "3.8.1-next-1741092802.0",
|
|
35
|
+
"@opensumi/ide-file-search": "3.8.1-next-1741092802.0",
|
|
36
|
+
"@opensumi/ide-file-service": "3.8.1-next-1741092802.0",
|
|
37
|
+
"@opensumi/ide-main-layout": "3.8.1-next-1741092802.0",
|
|
38
|
+
"@opensumi/ide-markers": "3.8.1-next-1741092802.0",
|
|
39
|
+
"@opensumi/ide-monaco": "3.8.1-next-1741092802.0",
|
|
40
|
+
"@opensumi/ide-overlay": "3.8.1-next-1741092802.0",
|
|
41
|
+
"@opensumi/ide-preferences": "3.8.1-next-1741092802.0",
|
|
42
|
+
"@opensumi/ide-search": "3.8.1-next-1741092802.0",
|
|
43
|
+
"@opensumi/ide-terminal-next": "3.8.1-next-1741092802.0",
|
|
44
|
+
"@opensumi/ide-theme": "3.8.1-next-1741092802.0",
|
|
45
|
+
"@opensumi/ide-utils": "3.8.1-next-1741092802.0",
|
|
46
|
+
"@opensumi/ide-workspace": "3.8.1-next-1741092802.0",
|
|
46
47
|
"@xterm/xterm": "5.5.0",
|
|
47
48
|
"ai": "^4.1.45",
|
|
48
49
|
"ansi-regex": "^2.0.0",
|
|
@@ -57,7 +58,7 @@
|
|
|
57
58
|
"zod-to-json-schema": "^3.24.1"
|
|
58
59
|
},
|
|
59
60
|
"devDependencies": {
|
|
60
|
-
"@opensumi/ide-core-browser": "3.8.1-next-
|
|
61
|
+
"@opensumi/ide-core-browser": "3.8.1-next-1741092802.0"
|
|
61
62
|
},
|
|
62
|
-
"gitHead": "
|
|
63
|
+
"gitHead": "7dc1c6d485b184de145a648f66959aa243447ea3"
|
|
63
64
|
}
|
|
@@ -14,10 +14,12 @@ import {
|
|
|
14
14
|
Domain,
|
|
15
15
|
IAIInlineChatService,
|
|
16
16
|
IEditorExtensionContribution,
|
|
17
|
+
IPreferenceSettingsService,
|
|
17
18
|
KeybindingContribution,
|
|
18
19
|
KeybindingRegistry,
|
|
19
20
|
KeybindingScope,
|
|
20
21
|
MonacoContribution,
|
|
22
|
+
PreferenceSchemaProvider,
|
|
21
23
|
PreferenceService,
|
|
22
24
|
SlotLocation,
|
|
23
25
|
SlotRendererContribution,
|
|
@@ -82,6 +84,9 @@ import {
|
|
|
82
84
|
IChatManagerService,
|
|
83
85
|
ISumiMCPServerBackend,
|
|
84
86
|
SumiMCPServerProxyServicePath,
|
|
87
|
+
anthropicModels,
|
|
88
|
+
deepSeekModels,
|
|
89
|
+
openAiNativeModels,
|
|
85
90
|
} from '../common';
|
|
86
91
|
import { MCPServerDescription } from '../common/mcp-server-manager';
|
|
87
92
|
|
|
@@ -209,6 +214,12 @@ export class AINativeBrowserContribution
|
|
|
209
214
|
@Autowired(CommandService)
|
|
210
215
|
private readonly commandService: CommandService;
|
|
211
216
|
|
|
217
|
+
@Autowired(PreferenceSchemaProvider)
|
|
218
|
+
private preferenceSchemaProvider: PreferenceSchemaProvider;
|
|
219
|
+
|
|
220
|
+
@Autowired(IPreferenceSettingsService)
|
|
221
|
+
private preferenceSettings: IPreferenceSettingsService;
|
|
222
|
+
|
|
212
223
|
@Autowired(PreferenceService)
|
|
213
224
|
private readonly preferenceService: PreferenceService;
|
|
214
225
|
|
|
@@ -328,7 +339,8 @@ export class AINativeBrowserContribution
|
|
|
328
339
|
|
|
329
340
|
onDidStart() {
|
|
330
341
|
runWhenIdle(() => {
|
|
331
|
-
const { supportsRenameSuggestions, supportsInlineChat, supportsMCP } =
|
|
342
|
+
const { supportsRenameSuggestions, supportsInlineChat, supportsMCP, supportsCustomLLMSettings } =
|
|
343
|
+
this.aiNativeConfigService.capabilities;
|
|
332
344
|
const prefChatVisibleType = this.preferenceService.getValid(AINativeSettingSectionsId.ChatVisibleType);
|
|
333
345
|
|
|
334
346
|
if (prefChatVisibleType === 'always') {
|
|
@@ -345,6 +357,33 @@ export class AINativeBrowserContribution
|
|
|
345
357
|
this.codeActionSingleHandler.load();
|
|
346
358
|
}
|
|
347
359
|
|
|
360
|
+
if (supportsCustomLLMSettings) {
|
|
361
|
+
this.preferenceService.onSpecificPreferenceChange(AINativeSettingSectionsId.LLMModelSelection, (change) => {
|
|
362
|
+
const model = this.getModelByName(change.newValue);
|
|
363
|
+
const modelIds = model ? Object.keys(model) : [];
|
|
364
|
+
const defaultModelId = modelIds.length ? modelIds[0] : '';
|
|
365
|
+
const currentSchemas = this.preferenceSchemaProvider.getPreferenceProperty(AINativeSettingSectionsId.ModelID);
|
|
366
|
+
this.preferenceSchemaProvider.setSchema(
|
|
367
|
+
{
|
|
368
|
+
properties: {
|
|
369
|
+
[AINativeSettingSectionsId.ModelID]: {
|
|
370
|
+
...currentSchemas,
|
|
371
|
+
default: defaultModelId,
|
|
372
|
+
defaultValue: defaultModelId,
|
|
373
|
+
enum: modelIds.length ? modelIds : undefined,
|
|
374
|
+
},
|
|
375
|
+
},
|
|
376
|
+
},
|
|
377
|
+
true,
|
|
378
|
+
);
|
|
379
|
+
this.preferenceService.set(AINativeSettingSectionsId.ModelID, defaultModelId, change.scope);
|
|
380
|
+
this.preferenceSettings.setEnumLabels(
|
|
381
|
+
AINativeSettingSectionsId.ModelID,
|
|
382
|
+
modelIds.reduce((obj, item) => ({ ...obj, [item]: item }), {}),
|
|
383
|
+
);
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
|
|
348
387
|
if (supportsMCP) {
|
|
349
388
|
this.initMCPServers();
|
|
350
389
|
}
|
|
@@ -370,6 +409,19 @@ export class AINativeBrowserContribution
|
|
|
370
409
|
}
|
|
371
410
|
}
|
|
372
411
|
|
|
412
|
+
private getModelByName(modelName: string) {
|
|
413
|
+
switch (modelName) {
|
|
414
|
+
case 'deepseek':
|
|
415
|
+
return deepSeekModels;
|
|
416
|
+
case 'anthropic':
|
|
417
|
+
return anthropicModels;
|
|
418
|
+
case 'openai':
|
|
419
|
+
return openAiNativeModels;
|
|
420
|
+
default:
|
|
421
|
+
return undefined;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
|
|
373
425
|
private registerFeature() {
|
|
374
426
|
this.contributions.getContributions().forEach((contribution) => {
|
|
375
427
|
contribution.registerInlineChatFeature?.(this.inlineChatFeatureRegistry);
|
|
@@ -474,6 +526,10 @@ export class AINativeBrowserContribution
|
|
|
474
526
|
id: AINativeSettingSectionsId.LLMModelSelection,
|
|
475
527
|
localized: 'preference.ai.native.llm.model.selection',
|
|
476
528
|
},
|
|
529
|
+
{
|
|
530
|
+
id: AINativeSettingSectionsId.ModelID,
|
|
531
|
+
localized: 'preference.ai.native.llm.model.id',
|
|
532
|
+
},
|
|
477
533
|
{
|
|
478
534
|
id: AINativeSettingSectionsId.DeepseekApiKey,
|
|
479
535
|
localized: 'preference.ai.native.deepseek.apiKey',
|
|
@@ -10,7 +10,6 @@ import {
|
|
|
10
10
|
STORAGE_NAMESPACE,
|
|
11
11
|
StorageProvider,
|
|
12
12
|
debounce,
|
|
13
|
-
formatLocalize,
|
|
14
13
|
} from '@opensumi/ide-core-common';
|
|
15
14
|
import { ChatMessageRole, IChatMessage, IHistoryChatMessage } from '@opensumi/ide-core-common/lib/types/ai-native';
|
|
16
15
|
|
|
@@ -35,8 +34,6 @@ interface ISessionModel {
|
|
|
35
34
|
}[];
|
|
36
35
|
}
|
|
37
36
|
|
|
38
|
-
const MAX_SESSION_COUNT = 20;
|
|
39
|
-
|
|
40
37
|
@Injectable()
|
|
41
38
|
export class ChatManagerService extends Disposable {
|
|
42
39
|
#sessionModels = this.registerDispose(new DisposableMap<string, ChatModel>());
|
|
@@ -103,9 +100,6 @@ export class ChatManagerService extends Disposable {
|
|
|
103
100
|
}
|
|
104
101
|
|
|
105
102
|
startSession() {
|
|
106
|
-
if (this.#sessionModels.size >= MAX_SESSION_COUNT) {
|
|
107
|
-
throw new Error(formatLocalize('aiNative.chat.session.max', MAX_SESSION_COUNT.toString()));
|
|
108
|
-
}
|
|
109
103
|
const model = new ChatModel();
|
|
110
104
|
this.#sessionModels.set(model.sessionId, model);
|
|
111
105
|
this.listenSession(model);
|
|
@@ -115,15 +115,19 @@ export class ChatProxyService extends Disposable {
|
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
const model = this.preferenceService.get<string>(AINativeSettingSectionsId.LLMModelSelection);
|
|
118
|
+
const modelId = this.preferenceService.get<string>(AINativeSettingSectionsId.ModelID);
|
|
118
119
|
let apiKey: string = '';
|
|
119
120
|
let baseURL: string = '';
|
|
120
121
|
if (model === 'deepseek') {
|
|
121
122
|
apiKey = this.preferenceService.get<string>(AINativeSettingSectionsId.DeepseekApiKey, '');
|
|
122
123
|
} else if (model === 'openai') {
|
|
123
124
|
apiKey = this.preferenceService.get<string>(AINativeSettingSectionsId.OpenaiApiKey, '');
|
|
124
|
-
|
|
125
|
-
} else {
|
|
125
|
+
} else if (model === 'anthropic') {
|
|
126
126
|
apiKey = this.preferenceService.get<string>(AINativeSettingSectionsId.AnthropicApiKey, '');
|
|
127
|
+
} else {
|
|
128
|
+
// openai-compatible 为兜底
|
|
129
|
+
apiKey = this.preferenceService.get<string>(AINativeSettingSectionsId.OpenaiApiKey, '');
|
|
130
|
+
baseURL = this.preferenceService.get<string>(AINativeSettingSectionsId.OpenaiBaseURL, '');
|
|
127
131
|
}
|
|
128
132
|
const MAX_INPUT_TOKENS = 30720;
|
|
129
133
|
const agent = this.chatAgentService.getAgent(ChatProxyService.AGENT_ID);
|
|
@@ -136,6 +140,7 @@ export class ChatProxyService extends Disposable {
|
|
|
136
140
|
clientId: this.applicationService.clientId,
|
|
137
141
|
apiKey,
|
|
138
142
|
model,
|
|
143
|
+
modelId,
|
|
139
144
|
baseURL,
|
|
140
145
|
system: agent?.metadata.systemPrompt,
|
|
141
146
|
},
|
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
uuid,
|
|
32
32
|
} from '@opensumi/ide-core-common';
|
|
33
33
|
import { IMainLayoutService } from '@opensumi/ide-main-layout';
|
|
34
|
-
import { IDialogService
|
|
34
|
+
import { IDialogService } from '@opensumi/ide-overlay';
|
|
35
35
|
|
|
36
36
|
import 'react-chat-elements/dist/main.css';
|
|
37
37
|
import {
|
|
@@ -756,18 +756,13 @@ export function DefaultChatViewHeader({
|
|
|
756
756
|
const aiNativeConfigService = useInjectable<AINativeConfigService>(AINativeConfigService);
|
|
757
757
|
const mcpServerProxyService = useInjectable<MCPServerProxyService>(TokenMCPServerProxyService);
|
|
758
758
|
const aiChatService = useInjectable<ChatInternalService>(IChatInternalService);
|
|
759
|
-
const messageService = useInjectable<IMessageService>(IMessageService);
|
|
760
759
|
const commandService = useInjectable<CommandService>(CommandService);
|
|
761
760
|
|
|
762
761
|
const [historyList, setHistoryList] = React.useState<IChatHistoryItem[]>([]);
|
|
763
762
|
const [currentTitle, setCurrentTitle] = React.useState<string>('');
|
|
764
763
|
const handleNewChat = React.useCallback(() => {
|
|
765
764
|
if (aiChatService.sessionModel.history.getMessages().length > 0) {
|
|
766
|
-
|
|
767
|
-
aiChatService.createSessionModel();
|
|
768
|
-
} catch (error) {
|
|
769
|
-
messageService.error(error.message);
|
|
770
|
-
}
|
|
765
|
+
aiChatService.createSessionModel();
|
|
771
766
|
}
|
|
772
767
|
}, [aiChatService]);
|
|
773
768
|
const handleHistoryItemSelect = React.useCallback(
|