Открыть боковую панель
code
vscode
Коммиты
69471ed8
Не подтверждена
Коммит
69471ed8
создал
Апр 03, 2025
по автору
Johannes Rieken
Зафиксировано автором
GitHub
Апр 03, 2025
Просмотр файлов
Merge pull request #245510 from microsoft/joh/coloured-wasp
show squiggles for tool input
владельцы
aa8b30e3
020b767c
Изменения
3
Скрыть пробелы
Построчно
Рядом
src/vs/workbench/contrib/chat/browser/chatContentParts/chatToolInvocationPart.ts
Просмотр файла @
69471ed8
...
...
@@ -4,25 +4,29 @@
*--------------------------------------------------------------------------------------------*/
import
*
as
dom
from
'
../../../../../base/browser/dom.js
'
;
import
{
RunOnceScheduler
}
from
'
../../../../../base/common/async.js
'
;
import
{
Codicon
}
from
'
../../../../../base/common/codicons.js
'
;
import
{
Emitter
}
from
'
../../../../../base/common/event.js
'
;
import
{
IMarkdownString
,
MarkdownString
}
from
'
../../../../../base/common/htmlContent.js
'
;
import
{
Disposable
,
DisposableStore
,
IDisposable
,
toDisposable
}
from
'
../../../../../base/common/lifecycle.js
'
;
import
{
ThemeIcon
}
from
'
../../../../../base/common/themables.js
'
;
import
{
URI
}
from
'
../../../../../base/common/uri.js
'
;
import
{
generateUuid
}
from
'
../../../../../base/common/uuid.js
'
;
import
{
MarkdownRenderer
}
from
'
../../../../../editor/browser/widget/markdownRenderer/browser/markdownRenderer.js
'
;
import
{
Location
}
from
'
../../../../../editor/common/languages.js
'
;
import
{
ILanguageService
}
from
'
../../../../../editor/common/languages/language.js
'
;
import
{
IModelService
}
from
'
../../../../../editor/common/services/model.js
'
;
import
{
localize
}
from
'
../../../../../nls.js
'
;
import
{
ICommandService
}
from
'
../../../../../platform/commands/common/commands.js
'
;
import
{
IContextKeyService
}
from
'
../../../../../platform/contextkey/common/contextkey.js
'
;
import
{
IInstantiationService
}
from
'
../../../../../platform/instantiation/common/instantiation.js
'
;
import
{
IKeybindingService
}
from
'
../../../../../platform/keybinding/common/keybinding.js
'
;
import
{
IMarkerData
,
IMarkerService
,
MarkerSeverity
}
from
'
../../../../../platform/markers/common/markers.js
'
;
import
{
ChatContextKeys
}
from
'
../../common/chatContextKeys.js
'
;
import
{
IChatMarkdownContent
,
IChatProgressMessage
,
IChatTerminalToolInvocationData
,
IChatToolInvocation
,
IChatToolInvocationSerialized
}
from
'
../../common/chatService.js
'
;
import
{
IChatRendererContent
}
from
'
../../common/chatViewModel.js
'
;
import
{
CodeBlockModelCollection
}
from
'
../../common/codeBlockModelCollection.js
'
;
import
{
createToolInputUri
,
ILanguageModelToolsService
,
isToolResultInputOutputDetails
,
IToolResultInputOutputDetails
}
from
'
../../common/languageModelToolsService.js
'
;
import
{
createToolInputUri
,
createToolSchemaUri
,
ILanguageModelToolsService
,
isToolResultInputOutputDetails
,
IToolResultInputOutputDetails
}
from
'
../../common/languageModelToolsService.js
'
;
import
{
CancelChatActionId
}
from
'
../actions/chatExecuteActions.js
'
;
import
{
AcceptToolConfirmationActionId
}
from
'
../actions/chatToolActions.js
'
;
import
{
ChatTreeItem
,
IChatCodeBlockInfo
}
from
'
../chat.js
'
;
...
...
@@ -133,7 +137,9 @@ class ChatToolInvocationSubPart extends Disposable {
@
IModelService
private
readonly
modelService
:
IModelService
,
@
ILanguageService
private
readonly
languageService
:
ILanguageService
,
@
IContextKeyService
private
readonly
contextKeyService
:
IContextKeyService
,
@
ILanguageModelToolsService
private
readonly
languageModelToolsService
:
ILanguageModelToolsService
@
ILanguageModelToolsService
private
readonly
languageModelToolsService
:
ILanguageModelToolsService
,
@
ICommandService
private
readonly
commandService
:
ICommandService
,
@
IMarkerService
private
readonly
markerService
:
IMarkerService
,
)
{
super
();
...
...
@@ -245,6 +251,37 @@ class ChatToolInvocationSubPart extends Disposable {
this
.
languageService
.
createById
(
langId
),
createToolInputUri
(
toolInvocation
.
toolId
)
));
const
markerOwner
=
generateUuid
();
const
schemaUri
=
createToolSchemaUri
(
toolInvocation
.
toolId
);
const
validator
=
new
RunOnceScheduler
(
async
()
=>
{
const
newMarker
:
IMarkerData
[]
=
[];
const
result
=
await
this
.
commandService
.
executeCommand
(
'
json.validate
'
,
schemaUri
,
model
.
getValue
());
for
(
const
item
of
result
)
{
if
(
item
.
range
&&
item
.
message
)
{
newMarker
.
push
({
severity
:
item
.
severity
===
'
Error
'
?
MarkerSeverity
.
Error
:
MarkerSeverity
.
Warning
,
message
:
item
.
message
,
startLineNumber
:
item
.
range
[
0
].
line
+
1
,
startColumn
:
item
.
range
[
0
].
character
+
1
,
endLineNumber
:
item
.
range
[
1
].
line
+
1
,
endColumn
:
item
.
range
[
1
].
character
+
1
,
code
:
item
.
code
?
String
(
item
.
code
)
:
undefined
});
}
}
this
.
markerService
.
changeOne
(
markerOwner
,
model
.
uri
,
newMarker
);
},
500
);
validator
.
schedule
();
this
.
_register
(
model
.
onDidChangeContent
(()
=>
validator
.
schedule
()));
this
.
_register
(
toDisposable
(()
=>
this
.
markerService
.
remove
(
markerOwner
,
[
model
.
uri
])));
this
.
_register
(
validator
);
const
editor
=
this
.
_register
(
this
.
editorPool
.
get
());
editor
.
object
.
render
({
codeBlockIndex
:
this
.
codeBlockStartIndex
,
...
...
src/vs/workbench/contrib/chat/browser/languageModelToolsService.ts
Просмотр файла @
69471ed8
...
...
@@ -14,8 +14,6 @@ import { Iterable } from '../../../../base/common/iterator.js';
import
{
Lazy
}
from
'
../../../../base/common/lazy.js
'
;
import
{
Disposable
,
DisposableStore
,
dispose
,
IDisposable
,
toDisposable
}
from
'
../../../../base/common/lifecycle.js
'
;
import
{
LRUCache
}
from
'
../../../../base/common/map.js
'
;
import
{
Schemas
}
from
'
../../../../base/common/network.js
'
;
import
{
URI
}
from
'
../../../../base/common/uri.js
'
;
import
{
localize
}
from
'
../../../../nls.js
'
;
import
{
IAccessibilityService
}
from
'
../../../../platform/accessibility/common/accessibility.js
'
;
import
{
IConfigurationService
}
from
'
../../../../platform/configuration/common/configuration.js
'
;
...
...
@@ -33,7 +31,7 @@ import { ChatModel } from '../common/chatModel.js';
import
{
ChatToolInvocation
}
from
'
../common/chatProgressTypes/chatToolInvocation.js
'
;
import
{
IChatService
}
from
'
../common/chatService.js
'
;
import
{
ChatConfiguration
}
from
'
../common/constants.js
'
;
import
{
CountTokensCallback
,
ILanguageModelToolsService
,
IPreparedToolInvocation
,
IToolData
,
IToolImpl
,
IToolInvocation
,
IToolResult
,
stringifyPromptTsxPart
}
from
'
../common/languageModelToolsService.js
'
;
import
{
CountTokensCallback
,
createToolSchemaUri
,
ILanguageModelToolsService
,
IPreparedToolInvocation
,
IToolData
,
IToolImpl
,
IToolInvocation
,
IToolResult
,
stringifyPromptTsxPart
}
from
'
../common/languageModelToolsService.js
'
;
const
jsonSchemaRegistry
=
Registry
.
as
<
JSONContributionRegistry
.
IJSONContributionRegistry
>
(
JSONContributionRegistry
.
Extensions
.
JSONContribution
);
...
...
@@ -107,7 +105,7 @@ export class LanguageModelToolsService extends Disposable implements ILanguageMo
let
store
:
DisposableStore
|
undefined
;
if
(
toolData
.
inputSchema
)
{
store
=
new
DisposableStore
();
const
schemaUrl
=
URI
.
from
({
scheme
:
Schemas
.
vscode
,
authority
:
'
schemas
'
,
path
:
`/lm/tool/
${
toolData
.
id
}
`
}
).
toString
();
const
schemaUrl
=
createToolSchemaUri
(
toolData
.
id
).
toString
();
jsonSchemaRegistry
.
registerSchema
(
schemaUrl
,
toolData
.
inputSchema
,
store
);
store
.
add
(
jsonSchemaRegistry
.
registerSchemaAssociation
(
schemaUrl
,
`/lm/tool/
${
toolData
.
id
}
/tool_input.json`
));
}
...
...
src/vs/workbench/contrib/chat/common/languageModelToolsService.ts
Просмотр файла @
69471ed8
...
...
@@ -155,3 +155,10 @@ export function createToolInputUri(toolOrId: IToolData | string): URI {
}
return
URI
.
from
({
scheme
:
Schemas
.
inMemory
,
path
:
`/lm/tool/
${
toolOrId
}
/tool_input.json`
});
}
export
function
createToolSchemaUri
(
toolOrId
:
IToolData
|
string
):
URI
{
if
(
typeof
toolOrId
!==
'
string
'
)
{
toolOrId
=
toolOrId
.
id
;
}
return
URI
.
from
({
scheme
:
Schemas
.
vscode
,
authority
:
'
schemas
'
,
path
:
`/lm/tool/
${
toolOrId
}
`
});
}
Редактирование
Предварительный просмотр
Поддерживает Markdown
0%
Попробовать снова
или
прикрепить новый файл
.
Отмена
You are about to add
0
people
to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Отмена
Пожалуйста,
зарегистрируйтесь
или
войдите
чтобы прокомментировать