@theia/ai-chat 1.46.0-next.241
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/README.md +31 -0
- package/lib/browser/ai-chat-frontend-module.d.ts +4 -0
- package/lib/browser/ai-chat-frontend-module.d.ts.map +1 -0
- package/lib/browser/ai-chat-frontend-module.js +79 -0
- package/lib/browser/ai-chat-frontend-module.js.map +1 -0
- package/lib/browser/ai-chat-preferences.d.ts +4 -0
- package/lib/browser/ai-chat-preferences.d.ts.map +1 -0
- package/lib/browser/ai-chat-preferences.js +32 -0
- package/lib/browser/ai-chat-preferences.js.map +1 -0
- package/lib/browser/custom-agent-factory.d.ts +4 -0
- package/lib/browser/custom-agent-factory.d.ts.map +1 -0
- package/lib/browser/custom-agent-factory.js +20 -0
- package/lib/browser/custom-agent-factory.js.map +1 -0
- package/lib/browser/custom-agent-frontend-application-contribution.d.ts +13 -0
- package/lib/browser/custom-agent-frontend-application-contribution.d.ts.map +1 -0
- package/lib/browser/custom-agent-frontend-application-contribution.js +82 -0
- package/lib/browser/custom-agent-frontend-application-contribution.js.map +1 -0
- package/lib/browser/frontend-chat-service.d.ts +8 -0
- package/lib/browser/frontend-chat-service.d.ts.map +1 -0
- package/lib/browser/frontend-chat-service.js +67 -0
- package/lib/browser/frontend-chat-service.js.map +1 -0
- package/lib/common/chat-agent-service.d.ts +45 -0
- package/lib/common/chat-agent-service.d.ts.map +1 -0
- package/lib/common/chat-agent-service.js +78 -0
- package/lib/common/chat-agent-service.js.map +1 -0
- package/lib/common/chat-agents-variable-contribution.d.ts +17 -0
- package/lib/common/chat-agents-variable-contribution.d.ts.map +1 -0
- package/lib/common/chat-agents-variable-contribution.js +51 -0
- package/lib/common/chat-agents-variable-contribution.js.map +1 -0
- package/lib/common/chat-agents.d.ts +108 -0
- package/lib/common/chat-agents.d.ts.map +1 -0
- package/lib/common/chat-agents.js +321 -0
- package/lib/common/chat-agents.js.map +1 -0
- package/lib/common/chat-history-entry.d.ts +7 -0
- package/lib/common/chat-history-entry.d.ts.map +1 -0
- package/lib/common/chat-history-entry.js +42 -0
- package/lib/common/chat-history-entry.js.map +1 -0
- package/lib/common/chat-model-util.d.ts +7 -0
- package/lib/common/chat-model-util.d.ts.map +1 -0
- package/lib/common/chat-model-util.js +50 -0
- package/lib/common/chat-model-util.js.map +1 -0
- package/lib/common/chat-model.d.ts +393 -0
- package/lib/common/chat-model.d.ts.map +1 -0
- package/lib/common/chat-model.js +612 -0
- package/lib/common/chat-model.js.map +1 -0
- package/lib/common/chat-request-parser.d.ts +20 -0
- package/lib/common/chat-request-parser.d.ts.map +1 -0
- package/lib/common/chat-request-parser.js +158 -0
- package/lib/common/chat-request-parser.js.map +1 -0
- package/lib/common/chat-request-parser.spec.d.ts +2 -0
- package/lib/common/chat-request-parser.spec.d.ts.map +1 -0
- package/lib/common/chat-request-parser.spec.js +108 -0
- package/lib/common/chat-request-parser.spec.js.map +1 -0
- package/lib/common/chat-service.d.ts +72 -0
- package/lib/common/chat-service.d.ts.map +1 -0
- package/lib/common/chat-service.js +170 -0
- package/lib/common/chat-service.js.map +1 -0
- package/lib/common/command-chat-agents.d.ts +33 -0
- package/lib/common/command-chat-agents.d.ts.map +1 -0
- package/lib/common/command-chat-agents.js +329 -0
- package/lib/common/command-chat-agents.js.map +1 -0
- package/lib/common/custom-chat-agent.d.ts +14 -0
- package/lib/common/custom-chat-agent.d.ts.map +1 -0
- package/lib/common/custom-chat-agent.js +43 -0
- package/lib/common/custom-chat-agent.js.map +1 -0
- package/lib/common/index.d.ts +12 -0
- package/lib/common/index.d.ts.map +1 -0
- package/lib/common/index.js +30 -0
- package/lib/common/index.js.map +1 -0
- package/lib/common/o1-chat-agent.d.ts +13 -0
- package/lib/common/o1-chat-agent.d.ts.map +1 -0
- package/lib/common/o1-chat-agent.js +45 -0
- package/lib/common/o1-chat-agent.js.map +1 -0
- package/lib/common/orchestrator-chat-agent.d.ts +22 -0
- package/lib/common/orchestrator-chat-agent.d.ts.map +1 -0
- package/lib/common/orchestrator-chat-agent.js +167 -0
- package/lib/common/orchestrator-chat-agent.js.map +1 -0
- package/lib/common/parse-contents.d.ts +11 -0
- package/lib/common/parse-contents.d.ts.map +1 -0
- package/lib/common/parse-contents.js +67 -0
- package/lib/common/parse-contents.js.map +1 -0
- package/lib/common/parse-contents.spec.d.ts +9 -0
- package/lib/common/parse-contents.spec.d.ts.map +1 -0
- package/lib/common/parse-contents.spec.js +134 -0
- package/lib/common/parse-contents.spec.js.map +1 -0
- package/lib/common/parsed-chat-request.d.ts +66 -0
- package/lib/common/parsed-chat-request.d.ts.map +1 -0
- package/lib/common/parsed-chat-request.js +83 -0
- package/lib/common/parsed-chat-request.js.map +1 -0
- package/lib/common/response-content-matcher.d.ts +63 -0
- package/lib/common/response-content-matcher.d.ts.map +1 -0
- package/lib/common/response-content-matcher.js +86 -0
- package/lib/common/response-content-matcher.js.map +1 -0
- package/lib/common/universal-chat-agent.d.ts +16 -0
- package/lib/common/universal-chat-agent.d.ts.map +1 -0
- package/lib/common/universal-chat-agent.js +109 -0
- package/lib/common/universal-chat-agent.js.map +1 -0
- package/package.json +54 -0
- package/src/browser/ai-chat-frontend-module.ts +98 -0
- package/src/browser/ai-chat-preferences.ts +32 -0
- package/src/browser/custom-agent-factory.ts +20 -0
- package/src/browser/custom-agent-frontend-application-contribution.ts +73 -0
- package/src/browser/frontend-chat-service.ts +66 -0
- package/src/common/chat-agent-service.ts +100 -0
- package/src/common/chat-agents-variable-contribution.ts +81 -0
- package/src/common/chat-agents.ts +392 -0
- package/src/common/chat-history-entry.ts +47 -0
- package/src/common/chat-model-util.ts +44 -0
- package/src/common/chat-model.ts +889 -0
- package/src/common/chat-request-parser.spec.ts +120 -0
- package/src/common/chat-request-parser.ts +220 -0
- package/src/common/chat-service.ts +236 -0
- package/src/common/command-chat-agents.ts +354 -0
- package/src/common/custom-chat-agent.ts +44 -0
- package/src/common/index.ts +26 -0
- package/src/common/o1-chat-agent.ts +51 -0
- package/src/common/orchestrator-chat-agent.ts +179 -0
- package/src/common/parse-contents.spec.ts +144 -0
- package/src/common/parse-contents.ts +93 -0
- package/src/common/parsed-chat-request.ts +112 -0
- package/src/common/response-content-matcher.ts +103 -0
- package/src/common/universal-chat-agent.ts +117 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2024 EclipseSource GmbH.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
/*---------------------------------------------------------------------------------------------
|
|
18
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
19
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
20
|
+
*--------------------------------------------------------------------------------------------*/
|
|
21
|
+
// Partially copied from https://github.com/microsoft/vscode/blob/a2cab7255c0df424027be05d58e1b7b941f4ea60/src/vs/workbench/contrib/chat/common/chatRequestParser.ts
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.ChatRequestParserImpl = exports.ChatRequestParser = void 0;
|
|
24
|
+
const tslib_1 = require("tslib");
|
|
25
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
26
|
+
const chat_agent_service_1 = require("./chat-agent-service");
|
|
27
|
+
const parsed_chat_request_1 = require("./parsed-chat-request");
|
|
28
|
+
const ai_core_1 = require("@theia/ai-core");
|
|
29
|
+
const agentReg = /^@([\w_\-\.]+)(?=(\s|$|\b))/i; // An @-agent
|
|
30
|
+
const functionReg = /^~([\w_\-\.]+)(?=(\s|$|\b))/i; // A ~ tool function
|
|
31
|
+
const variableReg = /^#([\w_\-]+)(?::([\w_\-_\/\\.:]+))?(?=(\s|$|\b))/i; // A #-variable with an optional : arg (#file:workspace/path/name.ext)
|
|
32
|
+
exports.ChatRequestParser = Symbol('ChatRequestParser');
|
|
33
|
+
function offsetRange(start, endExclusive) {
|
|
34
|
+
if (start > endExclusive) {
|
|
35
|
+
throw new Error(`Invalid range: start=${start} endExclusive=${endExclusive}`);
|
|
36
|
+
}
|
|
37
|
+
return { start, endExclusive };
|
|
38
|
+
}
|
|
39
|
+
let ChatRequestParserImpl = class ChatRequestParserImpl {
|
|
40
|
+
constructor(agentService, variableService, toolInvocationRegistry) {
|
|
41
|
+
this.agentService = agentService;
|
|
42
|
+
this.variableService = variableService;
|
|
43
|
+
this.toolInvocationRegistry = toolInvocationRegistry;
|
|
44
|
+
}
|
|
45
|
+
parseChatRequest(request, location) {
|
|
46
|
+
var _a, _b;
|
|
47
|
+
const parts = [];
|
|
48
|
+
const variables = new Map();
|
|
49
|
+
const toolRequests = new Map();
|
|
50
|
+
const message = request.text;
|
|
51
|
+
for (let i = 0; i < message.length; i++) {
|
|
52
|
+
const previousChar = message.charAt(i - 1);
|
|
53
|
+
const char = message.charAt(i);
|
|
54
|
+
let newPart;
|
|
55
|
+
if (previousChar.match(/\s/) || i === 0) {
|
|
56
|
+
if (char === parsed_chat_request_1.chatFunctionLeader) {
|
|
57
|
+
const functionPart = this.tryParseFunction(message.slice(i), i);
|
|
58
|
+
newPart = functionPart;
|
|
59
|
+
if (functionPart) {
|
|
60
|
+
toolRequests.set(functionPart.toolRequest.id, functionPart.toolRequest);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else if (char === parsed_chat_request_1.chatVariableLeader) {
|
|
64
|
+
const variablePart = this.tryToParseVariable(message.slice(i), i, parts);
|
|
65
|
+
newPart = variablePart;
|
|
66
|
+
if (variablePart) {
|
|
67
|
+
const variable = this.variableService.getVariable(variablePart.variableName);
|
|
68
|
+
if (variable) {
|
|
69
|
+
variables.set(variable.name, variable);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else if (char === parsed_chat_request_1.chatAgentLeader) {
|
|
74
|
+
newPart = this.tryToParseAgent(message.slice(i), i, parts, location);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (newPart) {
|
|
78
|
+
if (i !== 0) {
|
|
79
|
+
// Insert a part for all the text we passed over, then insert the new parsed part
|
|
80
|
+
const previousPart = parts.at(-1);
|
|
81
|
+
const previousPartEnd = (_a = previousPart === null || previousPart === void 0 ? void 0 : previousPart.range.endExclusive) !== null && _a !== void 0 ? _a : 0;
|
|
82
|
+
parts.push(new parsed_chat_request_1.ParsedChatRequestTextPart(offsetRange(previousPartEnd, i), message.slice(previousPartEnd, i)));
|
|
83
|
+
}
|
|
84
|
+
parts.push(newPart);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const lastPart = parts.at(-1);
|
|
88
|
+
const lastPartEnd = (_b = lastPart === null || lastPart === void 0 ? void 0 : lastPart.range.endExclusive) !== null && _b !== void 0 ? _b : 0;
|
|
89
|
+
if (lastPartEnd < message.length) {
|
|
90
|
+
parts.push(new parsed_chat_request_1.ParsedChatRequestTextPart(offsetRange(lastPartEnd, message.length), message.slice(lastPartEnd, message.length)));
|
|
91
|
+
}
|
|
92
|
+
return { request, parts, toolRequests, variables };
|
|
93
|
+
}
|
|
94
|
+
tryToParseAgent(message, offset, parts, location) {
|
|
95
|
+
const nextAgentMatch = message.match(agentReg);
|
|
96
|
+
if (!nextAgentMatch) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const [full, name] = nextAgentMatch;
|
|
100
|
+
const agentRange = offsetRange(offset, offset + full.length);
|
|
101
|
+
let agents = this.agentService.getAgents().filter(a => a.name === name);
|
|
102
|
+
if (!agents.length) {
|
|
103
|
+
const fqAgent = this.agentService.getAgent(name);
|
|
104
|
+
if (fqAgent) {
|
|
105
|
+
agents = [fqAgent];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// If there is more than one agent with this name, and the user picked it from the suggest widget, then the selected agent should be in the
|
|
109
|
+
// context and we use that one. Otherwise just pick the first.
|
|
110
|
+
const agent = agents[0];
|
|
111
|
+
if (!agent || !agent.locations.includes(location)) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (parts.some(p => p instanceof parsed_chat_request_1.ParsedChatRequestAgentPart)) {
|
|
115
|
+
// Only one agent allowed
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
// The agent must come first
|
|
119
|
+
if (parts.some(p => (p instanceof parsed_chat_request_1.ParsedChatRequestTextPart &&
|
|
120
|
+
p.text.trim() !== '') ||
|
|
121
|
+
!(p instanceof parsed_chat_request_1.ParsedChatRequestAgentPart))) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
return new parsed_chat_request_1.ParsedChatRequestAgentPart(agentRange, agent.id, agent.name);
|
|
125
|
+
}
|
|
126
|
+
tryToParseVariable(message, offset, _parts) {
|
|
127
|
+
const nextVariableMatch = message.match(variableReg);
|
|
128
|
+
if (!nextVariableMatch) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const [full, name] = nextVariableMatch;
|
|
132
|
+
const variableArg = nextVariableMatch[2];
|
|
133
|
+
const varRange = offsetRange(offset, offset + full.length);
|
|
134
|
+
return new parsed_chat_request_1.ParsedChatRequestVariablePart(varRange, name, variableArg);
|
|
135
|
+
}
|
|
136
|
+
tryParseFunction(message, offset) {
|
|
137
|
+
const nextFunctionMatch = message.match(functionReg);
|
|
138
|
+
if (!nextFunctionMatch) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const [full, id] = nextFunctionMatch;
|
|
142
|
+
const maybeToolRequest = this.toolInvocationRegistry.getFunction(id);
|
|
143
|
+
if (!maybeToolRequest) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const functionRange = offsetRange(offset, offset + full.length);
|
|
147
|
+
return new parsed_chat_request_1.ParsedChatRequestFunctionPart(functionRange, maybeToolRequest);
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
exports.ChatRequestParserImpl = ChatRequestParserImpl;
|
|
151
|
+
exports.ChatRequestParserImpl = ChatRequestParserImpl = tslib_1.__decorate([
|
|
152
|
+
(0, inversify_1.injectable)(),
|
|
153
|
+
tslib_1.__param(0, (0, inversify_1.inject)(chat_agent_service_1.ChatAgentService)),
|
|
154
|
+
tslib_1.__param(1, (0, inversify_1.inject)(ai_core_1.AIVariableService)),
|
|
155
|
+
tslib_1.__param(2, (0, inversify_1.inject)(ai_core_1.ToolInvocationRegistry)),
|
|
156
|
+
tslib_1.__metadata("design:paramtypes", [Object, Object, Object])
|
|
157
|
+
], ChatRequestParserImpl);
|
|
158
|
+
//# sourceMappingURL=chat-request-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-request-parser.js","sourceRoot":"","sources":["../../src/common/chat-request-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-request-parser.spec.d.ts","sourceRoot":"","sources":["../../src/common/chat-request-parser.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2024 EclipseSource GmbH.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const sinon = require("sinon");
|
|
19
|
+
const chat_agent_service_1 = require("./chat-agent-service");
|
|
20
|
+
const chat_request_parser_1 = require("./chat-request-parser");
|
|
21
|
+
const chat_agents_1 = require("./chat-agents");
|
|
22
|
+
const chai_1 = require("chai");
|
|
23
|
+
const ai_core_1 = require("@theia/ai-core");
|
|
24
|
+
describe('ChatRequestParserImpl', () => {
|
|
25
|
+
const chatAgentService = sinon.createStubInstance(chat_agent_service_1.ChatAgentServiceImpl);
|
|
26
|
+
const variableService = sinon.createStubInstance(ai_core_1.DefaultAIVariableService);
|
|
27
|
+
const toolInvocationRegistry = sinon.createStubInstance(ai_core_1.ToolInvocationRegistryImpl);
|
|
28
|
+
const parser = new chat_request_parser_1.ChatRequestParserImpl(chatAgentService, variableService, toolInvocationRegistry);
|
|
29
|
+
it('parses simple text', () => {
|
|
30
|
+
const req = {
|
|
31
|
+
text: 'What is the best pizza topping?'
|
|
32
|
+
};
|
|
33
|
+
const result = parser.parseChatRequest(req, chat_agents_1.ChatAgentLocation.Panel);
|
|
34
|
+
(0, chai_1.expect)(result.parts).to.deep.contain({
|
|
35
|
+
text: 'What is the best pizza topping?',
|
|
36
|
+
range: { start: 0, endExclusive: 31 }
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
it('parses text with variable name', () => {
|
|
40
|
+
const req = {
|
|
41
|
+
text: 'What is the #best pizza topping?'
|
|
42
|
+
};
|
|
43
|
+
const result = parser.parseChatRequest(req, chat_agents_1.ChatAgentLocation.Panel);
|
|
44
|
+
(0, chai_1.expect)(result).to.deep.contain({
|
|
45
|
+
parts: [{
|
|
46
|
+
text: 'What is the ',
|
|
47
|
+
range: { start: 0, endExclusive: 12 }
|
|
48
|
+
}, {
|
|
49
|
+
variableName: 'best',
|
|
50
|
+
variableArg: undefined,
|
|
51
|
+
range: { start: 12, endExclusive: 17 }
|
|
52
|
+
}, {
|
|
53
|
+
text: ' pizza topping?',
|
|
54
|
+
range: { start: 17, endExclusive: 32 }
|
|
55
|
+
}]
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
it('parses text with variable name with argument', () => {
|
|
59
|
+
const req = {
|
|
60
|
+
text: 'What is the #best:by-poll pizza topping?'
|
|
61
|
+
};
|
|
62
|
+
const result = parser.parseChatRequest(req, chat_agents_1.ChatAgentLocation.Panel);
|
|
63
|
+
(0, chai_1.expect)(result).to.deep.contain({
|
|
64
|
+
parts: [{
|
|
65
|
+
text: 'What is the ',
|
|
66
|
+
range: { start: 0, endExclusive: 12 }
|
|
67
|
+
}, {
|
|
68
|
+
variableName: 'best',
|
|
69
|
+
variableArg: 'by-poll',
|
|
70
|
+
range: { start: 12, endExclusive: 25 }
|
|
71
|
+
}, {
|
|
72
|
+
text: ' pizza topping?',
|
|
73
|
+
range: { start: 25, endExclusive: 40 }
|
|
74
|
+
}]
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
it('parses text with variable name with numeric argument', () => {
|
|
78
|
+
const req = {
|
|
79
|
+
text: '#size-class:2'
|
|
80
|
+
};
|
|
81
|
+
const result = parser.parseChatRequest(req, chat_agents_1.ChatAgentLocation.Panel);
|
|
82
|
+
(0, chai_1.expect)(result.parts[0]).to.contain({
|
|
83
|
+
variableName: 'size-class',
|
|
84
|
+
variableArg: '2'
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
it('parses text with variable name with POSIX path argument', () => {
|
|
88
|
+
const req = {
|
|
89
|
+
text: '#file:/path/to/file.ext'
|
|
90
|
+
};
|
|
91
|
+
const result = parser.parseChatRequest(req, chat_agents_1.ChatAgentLocation.Panel);
|
|
92
|
+
(0, chai_1.expect)(result.parts[0]).to.contain({
|
|
93
|
+
variableName: 'file',
|
|
94
|
+
variableArg: '/path/to/file.ext'
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
it('parses text with variable name with Win32 path argument', () => {
|
|
98
|
+
const req = {
|
|
99
|
+
text: '#file:c:\\path\\to\\file.ext'
|
|
100
|
+
};
|
|
101
|
+
const result = parser.parseChatRequest(req, chat_agents_1.ChatAgentLocation.Panel);
|
|
102
|
+
(0, chai_1.expect)(result.parts[0]).to.contain({
|
|
103
|
+
variableName: 'file',
|
|
104
|
+
variableArg: 'c:\\path\\to\\file.ext'
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
//# sourceMappingURL=chat-request-parser.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-request-parser.spec.js","sourceRoot":"","sources":["../../src/common/chat-request-parser.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { ChatModel, ChatModelImpl, ChatRequest, ChatRequestModel, ChatResponseModel } from './chat-model';
|
|
2
|
+
import { ChatAgentService } from './chat-agent-service';
|
|
3
|
+
import { Emitter, ILogger } from '@theia/core';
|
|
4
|
+
import { ChatRequestParser } from './chat-request-parser';
|
|
5
|
+
import { ChatAgent, ChatAgentLocation } from './chat-agents';
|
|
6
|
+
import { ParsedChatRequestAgentPart, ParsedChatRequest } from './parsed-chat-request';
|
|
7
|
+
import { AIVariableService } from '@theia/ai-core';
|
|
8
|
+
import { Event } from '@theia/core/shared/vscode-languageserver-protocol';
|
|
9
|
+
export interface ChatRequestInvocation {
|
|
10
|
+
/**
|
|
11
|
+
* Promise which completes once the request preprocessing is complete.
|
|
12
|
+
*/
|
|
13
|
+
requestCompleted: Promise<ChatRequestModel>;
|
|
14
|
+
/**
|
|
15
|
+
* Promise which completes once a response is expected to arrive.
|
|
16
|
+
*/
|
|
17
|
+
responseCreated: Promise<ChatResponseModel>;
|
|
18
|
+
/**
|
|
19
|
+
* Promise which completes once the response is complete.
|
|
20
|
+
*/
|
|
21
|
+
responseCompleted: Promise<ChatResponseModel>;
|
|
22
|
+
}
|
|
23
|
+
export interface ChatSession {
|
|
24
|
+
id: string;
|
|
25
|
+
title?: string;
|
|
26
|
+
model: ChatModel;
|
|
27
|
+
isActive: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface ActiveSessionChangedEvent {
|
|
30
|
+
sessionId: string | undefined;
|
|
31
|
+
focus?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface SessionOptions {
|
|
34
|
+
focus?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export declare const DefaultChatAgentId: unique symbol;
|
|
37
|
+
export interface DefaultChatAgentId {
|
|
38
|
+
id: string;
|
|
39
|
+
}
|
|
40
|
+
export declare const ChatService: unique symbol;
|
|
41
|
+
export interface ChatService {
|
|
42
|
+
onActiveSessionChanged: Event<ActiveSessionChangedEvent>;
|
|
43
|
+
getSession(id: string): ChatSession | undefined;
|
|
44
|
+
getSessions(): ChatSession[];
|
|
45
|
+
createSession(location?: ChatAgentLocation, options?: SessionOptions): ChatSession;
|
|
46
|
+
deleteSession(sessionId: string): void;
|
|
47
|
+
setActiveSession(sessionId: string, options?: SessionOptions): void;
|
|
48
|
+
sendRequest(sessionId: string, request: ChatRequest): Promise<ChatRequestInvocation | undefined>;
|
|
49
|
+
}
|
|
50
|
+
interface ChatSessionInternal extends ChatSession {
|
|
51
|
+
model: ChatModelImpl;
|
|
52
|
+
}
|
|
53
|
+
export declare class ChatServiceImpl implements ChatService {
|
|
54
|
+
protected readonly onActiveSessionChangedEmitter: Emitter<ActiveSessionChangedEvent>;
|
|
55
|
+
onActiveSessionChanged: import("@theia/core").Event<ActiveSessionChangedEvent>;
|
|
56
|
+
protected chatAgentService: ChatAgentService;
|
|
57
|
+
protected defaultChatAgentId: DefaultChatAgentId | undefined;
|
|
58
|
+
protected chatRequestParser: ChatRequestParser;
|
|
59
|
+
protected variableService: AIVariableService;
|
|
60
|
+
protected logger: ILogger;
|
|
61
|
+
protected _sessions: ChatSessionInternal[];
|
|
62
|
+
getSessions(): ChatSessionInternal[];
|
|
63
|
+
getSession(id: string): ChatSessionInternal | undefined;
|
|
64
|
+
createSession(location?: ChatAgentLocation, options?: SessionOptions): ChatSession;
|
|
65
|
+
deleteSession(sessionId: string): void;
|
|
66
|
+
setActiveSession(sessionId: string | undefined, options?: SessionOptions): void;
|
|
67
|
+
sendRequest(sessionId: string, request: ChatRequest): Promise<ChatRequestInvocation | undefined>;
|
|
68
|
+
protected getAgent(parsedRequest: ParsedChatRequest): ChatAgent | undefined;
|
|
69
|
+
protected getMentionedAgent(parsedRequest: ParsedChatRequest): ParsedChatRequestAgentPart | undefined;
|
|
70
|
+
}
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=chat-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-service.d.ts","sourceRoot":"","sources":["../../src/common/chat-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2024 EclipseSource GmbH.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
/*---------------------------------------------------------------------------------------------
|
|
18
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
19
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
20
|
+
*--------------------------------------------------------------------------------------------*/
|
|
21
|
+
// Partially copied from https://github.com/microsoft/vscode/blob/a2cab7255c0df424027be05d58e1b7b941f4ea60/src/vs/workbench/contrib/chat/common/chatService.ts
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.ChatServiceImpl = exports.ChatService = exports.DefaultChatAgentId = void 0;
|
|
24
|
+
const tslib_1 = require("tslib");
|
|
25
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
26
|
+
const chat_model_1 = require("./chat-model");
|
|
27
|
+
const chat_agent_service_1 = require("./chat-agent-service");
|
|
28
|
+
const core_1 = require("@theia/core");
|
|
29
|
+
const chat_request_parser_1 = require("./chat-request-parser");
|
|
30
|
+
const chat_agents_1 = require("./chat-agents");
|
|
31
|
+
const parsed_chat_request_1 = require("./parsed-chat-request");
|
|
32
|
+
const ai_core_1 = require("@theia/ai-core");
|
|
33
|
+
exports.DefaultChatAgentId = Symbol('DefaultChatAgentId');
|
|
34
|
+
exports.ChatService = Symbol('ChatService');
|
|
35
|
+
let ChatServiceImpl = class ChatServiceImpl {
|
|
36
|
+
constructor() {
|
|
37
|
+
this.onActiveSessionChangedEmitter = new core_1.Emitter();
|
|
38
|
+
this.onActiveSessionChanged = this.onActiveSessionChangedEmitter.event;
|
|
39
|
+
this._sessions = [];
|
|
40
|
+
}
|
|
41
|
+
getSessions() {
|
|
42
|
+
return [...this._sessions];
|
|
43
|
+
}
|
|
44
|
+
getSession(id) {
|
|
45
|
+
return this._sessions.find(session => session.id === id);
|
|
46
|
+
}
|
|
47
|
+
createSession(location = chat_agents_1.ChatAgentLocation.Panel, options) {
|
|
48
|
+
const model = new chat_model_1.ChatModelImpl(location);
|
|
49
|
+
const session = {
|
|
50
|
+
id: model.id,
|
|
51
|
+
model,
|
|
52
|
+
isActive: true
|
|
53
|
+
};
|
|
54
|
+
this._sessions.push(session);
|
|
55
|
+
this.setActiveSession(session.id, options);
|
|
56
|
+
return session;
|
|
57
|
+
}
|
|
58
|
+
deleteSession(sessionId) {
|
|
59
|
+
var _a, _b;
|
|
60
|
+
// If the removed session is the active one, set the newest one as active
|
|
61
|
+
if ((_a = this.getSession(sessionId)) === null || _a === void 0 ? void 0 : _a.isActive) {
|
|
62
|
+
this.setActiveSession((_b = this._sessions[this._sessions.length - 1]) === null || _b === void 0 ? void 0 : _b.id);
|
|
63
|
+
}
|
|
64
|
+
this._sessions = this._sessions.filter(item => item.id !== sessionId);
|
|
65
|
+
}
|
|
66
|
+
setActiveSession(sessionId, options) {
|
|
67
|
+
this._sessions.forEach(session => {
|
|
68
|
+
session.isActive = session.id === sessionId;
|
|
69
|
+
});
|
|
70
|
+
this.onActiveSessionChangedEmitter.fire({ sessionId: sessionId, ...options });
|
|
71
|
+
}
|
|
72
|
+
async sendRequest(sessionId, request) {
|
|
73
|
+
const session = this.getSession(sessionId);
|
|
74
|
+
if (!session) {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
session.title = request.text;
|
|
78
|
+
const parsedRequest = this.chatRequestParser.parseChatRequest(request, session.model.location);
|
|
79
|
+
const agent = this.getAgent(parsedRequest);
|
|
80
|
+
if (agent === undefined) {
|
|
81
|
+
const error = 'No ChatAgents available to handle request!';
|
|
82
|
+
this.logger.error(error);
|
|
83
|
+
const chatResponseModel = new chat_model_1.ErrorChatResponseModelImpl((0, core_1.generateUuid)(), new Error(error));
|
|
84
|
+
return {
|
|
85
|
+
requestCompleted: Promise.reject(error),
|
|
86
|
+
responseCreated: Promise.reject(error),
|
|
87
|
+
responseCompleted: Promise.resolve(chatResponseModel),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
const requestModel = session.model.addRequest(parsedRequest, agent === null || agent === void 0 ? void 0 : agent.id);
|
|
91
|
+
for (const part of parsedRequest.parts) {
|
|
92
|
+
if (part instanceof parsed_chat_request_1.ParsedChatRequestVariablePart) {
|
|
93
|
+
const resolvedVariable = await this.variableService.resolveVariable({ variable: part.variableName, arg: part.variableArg }, { request, model: session });
|
|
94
|
+
if (resolvedVariable) {
|
|
95
|
+
part.resolution = resolvedVariable;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
this.logger.warn(`Failed to resolve variable ${part.variableName} for ${session.model.location}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
let resolveResponseCreated;
|
|
103
|
+
let resolveResponseCompleted;
|
|
104
|
+
const invocation = {
|
|
105
|
+
requestCompleted: Promise.resolve(requestModel),
|
|
106
|
+
responseCreated: new Promise(resolve => {
|
|
107
|
+
resolveResponseCreated = resolve;
|
|
108
|
+
}),
|
|
109
|
+
responseCompleted: new Promise(resolve => {
|
|
110
|
+
resolveResponseCompleted = resolve;
|
|
111
|
+
}),
|
|
112
|
+
};
|
|
113
|
+
resolveResponseCreated(requestModel.response);
|
|
114
|
+
requestModel.response.onDidChange(() => {
|
|
115
|
+
if (requestModel.response.isComplete) {
|
|
116
|
+
resolveResponseCompleted(requestModel.response);
|
|
117
|
+
}
|
|
118
|
+
if (requestModel.response.isError) {
|
|
119
|
+
resolveResponseCompleted(requestModel.response);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
if (agent) {
|
|
123
|
+
agent.invoke(requestModel).catch(error => requestModel.response.error(error));
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
this.logger.error('No ChatAgents available to handle request!', requestModel);
|
|
127
|
+
}
|
|
128
|
+
return invocation;
|
|
129
|
+
}
|
|
130
|
+
getAgent(parsedRequest) {
|
|
131
|
+
var _a;
|
|
132
|
+
const agentPart = this.getMentionedAgent(parsedRequest);
|
|
133
|
+
if (agentPart) {
|
|
134
|
+
return this.chatAgentService.getAgent(agentPart.agentId);
|
|
135
|
+
}
|
|
136
|
+
if (this.defaultChatAgentId) {
|
|
137
|
+
return this.chatAgentService.getAgent(this.defaultChatAgentId.id);
|
|
138
|
+
}
|
|
139
|
+
return (_a = this.chatAgentService.getAgents()[0]) !== null && _a !== void 0 ? _a : undefined;
|
|
140
|
+
}
|
|
141
|
+
getMentionedAgent(parsedRequest) {
|
|
142
|
+
return parsedRequest.parts.find(p => p instanceof parsed_chat_request_1.ParsedChatRequestAgentPart);
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
exports.ChatServiceImpl = ChatServiceImpl;
|
|
146
|
+
tslib_1.__decorate([
|
|
147
|
+
(0, inversify_1.inject)(chat_agent_service_1.ChatAgentService),
|
|
148
|
+
tslib_1.__metadata("design:type", Object)
|
|
149
|
+
], ChatServiceImpl.prototype, "chatAgentService", void 0);
|
|
150
|
+
tslib_1.__decorate([
|
|
151
|
+
(0, inversify_1.inject)(exports.DefaultChatAgentId),
|
|
152
|
+
(0, inversify_1.optional)(),
|
|
153
|
+
tslib_1.__metadata("design:type", Object)
|
|
154
|
+
], ChatServiceImpl.prototype, "defaultChatAgentId", void 0);
|
|
155
|
+
tslib_1.__decorate([
|
|
156
|
+
(0, inversify_1.inject)(chat_request_parser_1.ChatRequestParser),
|
|
157
|
+
tslib_1.__metadata("design:type", Object)
|
|
158
|
+
], ChatServiceImpl.prototype, "chatRequestParser", void 0);
|
|
159
|
+
tslib_1.__decorate([
|
|
160
|
+
(0, inversify_1.inject)(ai_core_1.AIVariableService),
|
|
161
|
+
tslib_1.__metadata("design:type", Object)
|
|
162
|
+
], ChatServiceImpl.prototype, "variableService", void 0);
|
|
163
|
+
tslib_1.__decorate([
|
|
164
|
+
(0, inversify_1.inject)(core_1.ILogger),
|
|
165
|
+
tslib_1.__metadata("design:type", Object)
|
|
166
|
+
], ChatServiceImpl.prototype, "logger", void 0);
|
|
167
|
+
exports.ChatServiceImpl = ChatServiceImpl = tslib_1.__decorate([
|
|
168
|
+
(0, inversify_1.injectable)()
|
|
169
|
+
], ChatServiceImpl);
|
|
170
|
+
//# sourceMappingURL=chat-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-service.js","sourceRoot":"","sources":["../../src/common/chat-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { AbstractTextToModelParsingChatAgent, ChatAgent, SystemMessageDescription } from './chat-agents';
|
|
2
|
+
import { PromptTemplate, AgentSpecificVariables } from '@theia/ai-core';
|
|
3
|
+
import { ChatRequestModelImpl, ChatResponseContent } from './chat-model';
|
|
4
|
+
import { CommandRegistry, MessageService } from '@theia/core';
|
|
5
|
+
export declare const commandTemplate: PromptTemplate;
|
|
6
|
+
interface ParsedCommand {
|
|
7
|
+
type: 'theia-command' | 'custom-handler' | 'no-command';
|
|
8
|
+
commandId: string;
|
|
9
|
+
arguments?: string[];
|
|
10
|
+
message?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare class CommandChatAgent extends AbstractTextToModelParsingChatAgent<ParsedCommand> implements ChatAgent {
|
|
13
|
+
protected commandRegistry: CommandRegistry;
|
|
14
|
+
protected messageService: MessageService;
|
|
15
|
+
readonly name: string;
|
|
16
|
+
readonly description: string;
|
|
17
|
+
readonly variables: string[];
|
|
18
|
+
readonly promptTemplates: PromptTemplate[];
|
|
19
|
+
readonly functions: string[];
|
|
20
|
+
readonly agentSpecificVariables: AgentSpecificVariables[];
|
|
21
|
+
constructor();
|
|
22
|
+
protected getSystemMessageDescription(): Promise<SystemMessageDescription | undefined>;
|
|
23
|
+
/**
|
|
24
|
+
* @param text the text received from the language model
|
|
25
|
+
* @returns the parsed command if the text contained a valid command.
|
|
26
|
+
* If there was no json in the text, return a no-command response.
|
|
27
|
+
*/
|
|
28
|
+
protected parseTextResponse(text: string): Promise<ParsedCommand>;
|
|
29
|
+
protected createResponseContent(parsedCommand: ParsedCommand, request: ChatRequestModelImpl): ChatResponseContent;
|
|
30
|
+
protected commandCallback(...commandArgs: unknown[]): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=command-chat-agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-chat-agents.d.ts","sourceRoot":"","sources":["../../src/common/command-chat-agents.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,mCAAmC,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzG,OAAO,EACH,cAAc,EACd,sBAAsB,EACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACH,oBAAoB,EACpB,mBAAmB,EAKtB,MAAM,cAAc,CAAC;AACtB,OAAO,EACH,eAAe,EACf,cAAc,EAEjB,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,eAAe,EAAE,cA8M5B,CAAC;AAEH,UAAU,aAAa;IACnB,IAAI,EAAE,eAAe,GAAG,gBAAgB,GAAG,YAAY,CAAA;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBACa,gBAAiB,SAAQ,mCAAmC,CAAC,aAAa,CAAE,YAAW,SAAS;IAEzG,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAE3C,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,CAAC;;cAqB1C,2BAA2B,IAAI,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAc5F;;;;OAIG;cACa,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAUvE,SAAS,CAAC,qBAAqB,CAAC,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,oBAAoB,GAAG,mBAAmB;cAqCjG,eAAe,CAAC,GAAG,WAAW,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAI5E"}
|