From 7f890b946d4fa8b2e0ee71348975a2a51aaa90e7 Mon Sep 17 00:00:00 2001 From: Andrew Pareles Date: Wed, 9 Apr 2025 16:57:35 -0700 Subject: [PATCH] add logs --- .../contrib/void/browser/chatThreadService.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/vs/workbench/contrib/void/browser/chatThreadService.ts b/src/vs/workbench/contrib/void/browser/chatThreadService.ts index 92bf7af0..b801a92c 100644 --- a/src/vs/workbench/contrib/void/browser/chatThreadService.ts +++ b/src/vs/workbench/contrib/void/browser/chatThreadService.ts @@ -661,6 +661,7 @@ class ChatThreadService extends Disposable implements IChatThreadService { // above just defines helpers, below starts the actual function const { chatMode } = this._settingsService.state.globalSettings // should not change as we loop even if user changes it, so it goes here + console.log('a', chatMode) // clear any previous error this._setStreamState(threadId, { error: undefined }, 'set') @@ -669,11 +670,13 @@ class ChatThreadService extends Disposable implements IChatThreadService { let isRunningWhenEnd: IsRunningType = undefined let aborted = false + console.log('b') // before enter loop, call tool if (callThisToolFirst) { const { interrupted } = await this._runToolCall(threadId, callThisToolFirst.name, { preapproved: true, validatedParams: callThisToolFirst.params }) if (interrupted) return } + console.log('c') // tool use loop while (shouldSendAnotherMessage) { @@ -685,14 +688,17 @@ class ChatThreadService extends Disposable implements IChatThreadService { let resMessageIsDonePromise: (toolCall?: RawToolCallObj | undefined) => void // resolves when user approves this tool use (or if tool doesn't require approval) const messageIsDonePromise = new Promise((res, rej) => { resMessageIsDonePromise = res }) + console.log('d') // send llm message this._setStreamState(threadId, { isRunning: 'LLM' }, 'merge') const systemMessage = await this._generateSystemMessage(chatMode) + console.log('e0') const llmMessages = await this._generateLLMMessages(threadId) const messages: LLMChatMessage[] = [ { role: 'system', content: systemMessage }, ...llmMessages ] + console.log('e') const llmCancelToken = this._llmMessageService.sendLLMMessage({ messagesType: 'chatMessages', @@ -734,14 +740,20 @@ class ChatThreadService extends Disposable implements IChatThreadService { break } this._setStreamState(threadId, { streamingToken: llmCancelToken }, 'merge') // new stream token for the new message + console.log('waiting...') const toolCall = await messageIsDonePromise // wait for message to complete + console.log('done!') if (aborted) { return } + console.log('H') this._setStreamState(threadId, { streamingToken: undefined }, 'merge') // streaming message is done + console.log('I') // call tool if there is one const tool: RawToolCallObj | undefined = toolCall if (tool) { + console.log('J') const { awaitingUserApproval, interrupted } = await this._runToolCall(threadId, tool.name, { preapproved: false, unvalidatedToolParams: tool.rawParams }) + console.log('K') // stop if interrupted. we don't have to do this for llmMessage because we have a stream token for it and onAbort gets called, but we don't have the equivalent for tools. // just detect tool interruption which is the same as chat interruption right now @@ -756,14 +768,17 @@ class ChatThreadService extends Disposable implements IChatThreadService { } } // end while + console.log('L') // if awaiting user approval, keep isRunning true, else end isRunning this._setStreamState(threadId, { isRunning: isRunningWhenEnd }, 'merge') + console.log('M') // add checkpoint before the next user message if (!isRunningWhenEnd) this._addUserCheckpoint({ threadId }) + console.log('N') // capture number of messages sent this._metricsService.capture('Agent Loop Done', { nMessagesSent, chatMode })