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>
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user