Files
OSGKeyboard/OSGKeyboardTests/FlowUtteranceEndCoordinatorTests.swift
T
Cursor Agent c7ee891a90 fix(flow): improve tail capture and final chunk ASR recovery
- Add FlowUtteranceEndCoordinator with 350ms silence drain and 150ms post-roll
- Extend FinalChunkRecovery for short/empty final chunks in chunked pipeline
- Snapshot partial at mic stop and guard final transcript in FlowSessionManager
- Unify tail drain presets (iosFlow/macMLX) and expand diagnostics

Co-authored-by: Rocky <hkgood@users.noreply.github.com>
2026-07-26 10:13:40 +00:00

36 lines
1.2 KiB
Swift

// FlowUtteranceEndCoordinatorTests.swift
// OSGKeyboardTests
import XCTest
@testable import OSGKeyboardShared
final class FlowUtteranceEndCoordinatorTests: XCTestCase {
func testAwaitTailCaptureRunsPostRollAfterSilenceDrain() async {
let policy = FlowCaptureTailDrainPolicy(
silenceRMSThreshold: 0.02,
silenceDurationSeconds: 0.05,
maxDrainSeconds: 1.0,
postRollSeconds: 0.08
)
let tracker = FlowCaptureDrainTracker()
let start = Date().timeIntervalSince1970
tracker.beginDrain(now: start)
let timing = await FlowUtteranceEndCoordinator.awaitTailCapture(
tracker: tracker,
policy: policy,
pollIntervalNs: 5_000_000
)
XCTAssertTrue(timing.endedBySilence)
XCTAssertGreaterThanOrEqual(timing.postRollDurationSeconds, 0.07)
}
func testIOSFlowPresetUsesLongerSilenceAndPostRoll() {
XCTAssertEqual(FlowCaptureTailDrainPolicy.iosFlow.silenceDurationSeconds, 0.35)
XCTAssertEqual(FlowCaptureTailDrainPolicy.iosFlow.postRollSeconds, 0.15)
XCTAssertEqual(FlowCaptureTailDrainPolicy.flowDefault, FlowCaptureTailDrainPolicy.iosFlow)
}
}