Skip to content

Commit fac1e67

Browse files
committed
Fix tool result persistence: await tool tracking before stream completes
1 parent 213fd9d commit fac1e67

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

apple/Clarissa/Sources/Tools/AppleToolBridge.swift

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -174,15 +174,17 @@ private func logToolCall(_ name: String, _ arguments: Any) {
174174
}
175175

176176
/// Log tool result for debugging and track usage
177+
/// Note: This function is async to ensure tool tracking completes before streaming finishes
177178
@inline(__always)
178-
private func logToolResult(_ name: String, arguments: String, _ result: String) {
179+
private func logToolResult(_ name: String, arguments: String, _ result: String) async {
179180
#if DEBUG
180181
let truncated = result.count > 200 ? String(result.prefix(200)) + "..." : result
181182
toolLogger.debug("Tool '\(name)' returned: \(truncated)")
182183
#endif
183184

184185
// Track tool usage for context stats (on MainActor)
185-
Task { @MainActor in
186+
// Must await to ensure tracking completes before consumeExecutions() is called
187+
await MainActor.run {
186188
NativeToolUsageTracker.shared.recordToolCall(name: name, arguments: arguments, result: result)
187189
}
188190
}
@@ -239,7 +241,7 @@ struct AppleWeatherTool: Tool {
239241
let result = await safeToolExecution(name) {
240242
return try await tool.execute(arguments: jsonString)
241243
}
242-
logToolResult(name, arguments: jsonString, result)
244+
await logToolResult(name, arguments: jsonString, result)
243245
return result
244246
}
245247
}
@@ -279,7 +281,7 @@ struct AppleCalculatorTool: Tool {
279281
let result = await safeToolExecution(name) {
280282
return try await tool.execute(arguments: jsonString)
281283
}
282-
logToolResult(name, arguments: jsonString, result)
284+
await logToolResult(name, arguments: jsonString, result)
283285
return result
284286
}
285287
}
@@ -356,7 +358,7 @@ struct AppleCalendarTool: Tool {
356358
let result = await safeToolExecution(name) {
357359
return try await tool.execute(arguments: jsonString)
358360
}
359-
logToolResult(name, arguments: jsonString, result)
361+
await logToolResult(name, arguments: jsonString, result)
360362
return result
361363
}
362364
}
@@ -413,7 +415,7 @@ struct AppleContactsTool: Tool {
413415
let result = await safeToolExecution(name) {
414416
return try await tool.execute(arguments: jsonString)
415417
}
416-
logToolResult(name, arguments: jsonString, result)
418+
await logToolResult(name, arguments: jsonString, result)
417419
return result
418420
}
419421
}
@@ -486,7 +488,7 @@ struct AppleRemindersTool: Tool {
486488
let result = await safeToolExecution(name) {
487489
return try await tool.execute(arguments: jsonString)
488490
}
489-
logToolResult(name, arguments: jsonString, result)
491+
await logToolResult(name, arguments: jsonString, result)
490492
return result
491493
}
492494
}
@@ -526,7 +528,7 @@ struct AppleLocationTool: Tool {
526528
let result = await safeToolExecution(name) {
527529
return try await tool.execute(arguments: jsonString)
528530
}
529-
logToolResult(name, arguments: jsonString, result)
531+
await logToolResult(name, arguments: jsonString, result)
530532
return result
531533
}
532534
}
@@ -578,7 +580,7 @@ struct AppleWebFetchTool: Tool {
578580
let result = await safeToolExecution(name) {
579581
return try await tool.execute(arguments: jsonString)
580582
}
581-
logToolResult(name, arguments: jsonString, result)
583+
await logToolResult(name, arguments: jsonString, result)
582584
return result
583585
}
584586
}
@@ -618,7 +620,7 @@ struct AppleRememberTool: Tool {
618620
let result = await safeToolExecution(name) {
619621
return try await tool.execute(arguments: jsonString)
620622
}
621-
logToolResult(name, arguments: jsonString, result)
623+
await logToolResult(name, arguments: jsonString, result)
622624
return result
623625
}
624626
}
@@ -685,7 +687,7 @@ struct AppleImageAnalysisTool: Tool {
685687
let result = await safeToolExecution(name) {
686688
return try await tool.execute(arguments: jsonString)
687689
}
688-
logToolResult(name, arguments: jsonString, result)
690+
await logToolResult(name, arguments: jsonString, result)
689691
return result
690692
}
691693
}

0 commit comments

Comments
 (0)