diff --git a/src/core/task/Task.ts b/src/core/task/Task.ts index b9a3b5ae7bf..6c17e201210 100644 --- a/src/core/task/Task.ts +++ b/src/core/task/Task.ts @@ -1164,38 +1164,29 @@ export class Task extends EventEmitter implements TaskLike { * @param newApiConfiguration - The new API configuration to use */ public async updateApiConfiguration(newApiConfiguration: ProviderSettings): Promise { - // Determine the previous protocol before updating - const prevModelInfo = this.api.getModel().info - const previousProtocol = this.apiConfiguration - ? resolveToolProtocol(this.apiConfiguration, prevModelInfo) - : undefined - + // Update the configuration and rebuild the API handler this.apiConfiguration = newApiConfiguration this.api = buildApiHandler(newApiConfiguration) - // Determine the new tool protocol - const newModelInfo = this.api.getModel().info - const newProtocol = resolveToolProtocol(this.apiConfiguration, newModelInfo) - const shouldUseXmlParser = newProtocol === "xml" + // Determine what the tool protocol should be + const modelInfo = this.api.getModel().info + const protocol = resolveToolProtocol(this.apiConfiguration, modelInfo) + const shouldUseXmlParser = protocol === "xml" + + // Ensure parser state matches protocol requirement + const parserStateCorrect = + (shouldUseXmlParser && this.assistantMessageParser) || (!shouldUseXmlParser && !this.assistantMessageParser) - // Only make changes if the protocol actually changed - if (previousProtocol === newProtocol) { - console.log( - `[Task#${this.taskId}.${this.instanceId}] Tool protocol unchanged (${newProtocol}), no parser update needed`, - ) + if (parserStateCorrect) { return } - // Handle protocol transitions + // Fix parser state if (shouldUseXmlParser && !this.assistantMessageParser) { - // Switching from native → XML: create parser this.assistantMessageParser = new AssistantMessageParser() - console.log(`[Task#${this.taskId}.${this.instanceId}] Switched native → xml: initialized XML parser`) } else if (!shouldUseXmlParser && this.assistantMessageParser) { - // Switching from XML → native: remove parser this.assistantMessageParser.reset() this.assistantMessageParser = undefined - console.log(`[Task#${this.taskId}.${this.instanceId}] Switched xml → native: removed XML parser`) } }