Просмотр исходного кода

fix: ensure XML parser state matches tool protocol on config update (#9535)

Daniel 1 месяц назад
Родитель
Сommit
3ac5bec3fc
1 измененных файлов с 11 добавлено и 20 удалено
  1. 11 20
      src/core/task/Task.ts

+ 11 - 20
src/core/task/Task.ts

@@ -1164,38 +1164,29 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
 	 * @param newApiConfiguration - The new API configuration to use
 	 */
 	public async updateApiConfiguration(newApiConfiguration: ProviderSettings): Promise<void> {
-		// 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`)
 		}
 	}