From 5699cf19f44ff11caad41208e73c9801cdf24463 Mon Sep 17 00:00:00 2001 From: Andrew Pareles Date: Tue, 18 Feb 2025 16:12:16 -0800 Subject: [PATCH] merge updates --- .../contrib/void/browser/editCodeService.ts | 2 ++ .../contrib/void/common/llmMessageTypes.ts | 9 +++++---- .../void/electron-main/llmMessage/anthropic.ts | 9 ++++++++- .../void/electron-main/llmMessage/openai.ts | 14 ++++++++++---- .../llmMessage/postprocessToolCalls.ts | 10 ++++++++++ .../llmMessage/preprocessLLMMessages.ts | 3 --- 6 files changed, 35 insertions(+), 12 deletions(-) create mode 100644 src/vs/workbench/contrib/void/electron-main/llmMessage/postprocessToolCalls.ts diff --git a/src/vs/workbench/contrib/void/browser/editCodeService.ts b/src/vs/workbench/contrib/void/browser/editCodeService.ts index ad3eb81d..e3a5d998 100644 --- a/src/vs/workbench/contrib/void/browser/editCodeService.ts +++ b/src/vs/workbench/contrib/void/browser/editCodeService.ts @@ -42,6 +42,7 @@ import { ILLMMessageService } from '../common/llmMessageService.js'; import { LLMChatMessage, errorDetails } from '../common/llmMessageTypes.js'; import { IMetricsService } from '../common/metricsService.js'; import { VSReadFile } from './helpers/readFile.js'; +import { IFileService } from '../../../../platform/files/common/files.js'; const configOfBG = (color: Color) => { return { dark: color, light: color, hcDark: color, hcLight: color, } @@ -254,6 +255,7 @@ class EditCodeService extends Disposable implements IEditCodeService { @IMetricsService private readonly _metricsService: IMetricsService, @INotificationService private readonly _notificationService: INotificationService, @ICommandService private readonly _commandService: ICommandService, + @IFileService private readonly _fileService: IFileService, ) { super(); diff --git a/src/vs/workbench/contrib/void/common/llmMessageTypes.ts b/src/vs/workbench/contrib/void/common/llmMessageTypes.ts index 75cf2739..0956b08b 100644 --- a/src/vs/workbench/contrib/void/common/llmMessageTypes.ts +++ b/src/vs/workbench/contrib/void/common/llmMessageTypes.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------*/ import { ChatMessage } from '../browser/chatThreadService.js' -import { InternalToolInfo } from './toolsService.js' +import { InternalToolInfo, ToolName } from './toolsService.js' import { FeatureName, ProviderName, SettingsOfProvider } from './voidSettingsTypes.js' @@ -37,15 +37,16 @@ export type LLMChatMessage = { id: string; } -export type LLMToolCallType = { - name: string; + +export type ToolCallType = { + name: ToolName; params: string; id: string; } export type OnText = (p: { newText: string, fullText: string }) => void -export type OnFinalMessage = (p: { fullText: string, toolCalls?: LLMToolCallType[] }) => void // id is tool_use_id +export type OnFinalMessage = (p: { fullText: string, toolCalls?: ToolCallType[] }) => void // id is tool_use_id export type OnError = (p: { message: string, fullError: Error | null }) => void export type AbortRef = { current: (() => void) | null } diff --git a/src/vs/workbench/contrib/void/electron-main/llmMessage/anthropic.ts b/src/vs/workbench/contrib/void/electron-main/llmMessage/anthropic.ts index 8308bb44..c4338ebb 100644 --- a/src/vs/workbench/contrib/void/electron-main/llmMessage/anthropic.ts +++ b/src/vs/workbench/contrib/void/electron-main/llmMessage/anthropic.ts @@ -8,6 +8,7 @@ import { _InternalSendLLMChatMessageFnType } from '../../common/llmMessageTypes. import { anthropicMaxPossibleTokens, developerInfoOfModelName, developerInfoOfProviderName } from '../../common/voidSettingsTypes.js'; import { InternalToolInfo } from '../../common/toolsService.js'; import { addSystemMessageAndToolSupport } from './preprocessLLMMessages.js'; +import { isAToolName } from './postprocessToolCalls.js'; @@ -86,7 +87,13 @@ export const sendAnthropicChat: _InternalSendLLMChatMessageFnType = ({ messages: stream.on('finalMessage', (response) => { // stringify the response's content const content = response.content.map(c => c.type === 'text' ? c.text : '').join('\n\n') - const toolCalls = response.content.map(c => c.type === 'tool_use' ? { name: c.name, params: JSON.stringify(c.input), id: c.id } : null).filter(c => !!c) + const toolCalls = response.content + .map(c => { + if (c.type !== 'tool_use') return null + if (!isAToolName(c.name)) return null + return c.type === 'tool_use' ? { name: c.name, params: JSON.stringify(c.input), id: c.id } : null + }) + .filter(t => !!t) onFinalMessage({ fullText: content, toolCalls }) }) diff --git a/src/vs/workbench/contrib/void/electron-main/llmMessage/openai.ts b/src/vs/workbench/contrib/void/electron-main/llmMessage/openai.ts index 80db8d73..66c0ffe1 100644 --- a/src/vs/workbench/contrib/void/electron-main/llmMessage/openai.ts +++ b/src/vs/workbench/contrib/void/electron-main/llmMessage/openai.ts @@ -9,6 +9,7 @@ import { Model } from 'openai/resources/models.js'; import { InternalToolInfo } from '../../common/toolsService.js'; import { addSystemMessageAndToolSupport } from './preprocessLLMMessages.js'; import { developerInfoOfModelName, developerInfoOfProviderName } from '../../common/voidSettingsTypes.js'; +import { isAToolName } from './postprocessToolCalls.js'; // import { parseMaxTokensStr } from './util.js'; @@ -205,10 +206,15 @@ export const sendOpenAIChat: _InternalSendLLMChatMessageFnType = ({ messages: me onText({ newText, fullText }); } onFinalMessage({ - fullText, toolCalls: Object.keys(toolCallOfIndex).map(index => { - const tool = toolCallOfIndex[index] - return { name: tool.name, id: tool.id, params: tool.params } - }) + fullText, + toolCalls: Object.keys(toolCallOfIndex) + .map(index => { + const tool = toolCallOfIndex[index] + if (isAToolName(tool.name)) + return { name: tool.name, id: tool.id, params: tool.params } + return null + }) + .filter(t => !!t) }); }) // when error/fail - this catches errors of both .create() and .then(for await) diff --git a/src/vs/workbench/contrib/void/electron-main/llmMessage/postprocessToolCalls.ts b/src/vs/workbench/contrib/void/electron-main/llmMessage/postprocessToolCalls.ts new file mode 100644 index 00000000..e9bb2b7c --- /dev/null +++ b/src/vs/workbench/contrib/void/electron-main/llmMessage/postprocessToolCalls.ts @@ -0,0 +1,10 @@ +import { ToolName, toolNames } from '../../common/toolsService'; + + + +const toolNamesSet = new Set(toolNames) + +export const isAToolName = (toolName: string): toolName is ToolName => { + const isAToolName = toolNamesSet.has(toolName) + return isAToolName +} diff --git a/src/vs/workbench/contrib/void/electron-main/llmMessage/preprocessLLMMessages.ts b/src/vs/workbench/contrib/void/electron-main/llmMessage/preprocessLLMMessages.ts index eba90468..689e44de 100644 --- a/src/vs/workbench/contrib/void/electron-main/llmMessage/preprocessLLMMessages.ts +++ b/src/vs/workbench/contrib/void/electron-main/llmMessage/preprocessLLMMessages.ts @@ -262,9 +262,6 @@ export const addSystemMessageAndToolSupport = (modelName: string, providerName: - - - /*