perf(asr): speed up local Flow dictation and land CLM/keyboard refactor
Reduce perceived latency from key release to final text: - Adaptive chunking: 2.5s first chunk + 5s follow-ups so short utterances start on-device recognition while still recording. - Session-level ASR warmup and audio-format cache reuse to remove per-utterance cold-start of SpeechAnalyzer. - Mirror live pipelined partials to the keyboard transcript line via a new flow.transcriptionPartial App Group key + Darwin ping. Also commits the accumulated custom language model, Flow session, keyboard extension restructure, and Xiaomi MiMo provider work in progress on this branch.
This commit is contained in:
@@ -84,6 +84,27 @@ final class FlowSessionBridgeTests: XCTestCase {
|
||||
XCTAssertNil(FlowSessionBridge.remainingSessionDuration(defaults: defaults))
|
||||
}
|
||||
|
||||
func testConsumeTranscriptionErrorIncludesKind() {
|
||||
let defaults = makeDefaults()
|
||||
FlowSessionBridge.storeTranscriptionError(
|
||||
"no speech",
|
||||
kind: .noSpeech,
|
||||
defaults: defaults
|
||||
)
|
||||
let error = FlowSessionBridge.consumeTranscriptionError(defaults: defaults)
|
||||
XCTAssertEqual(error?.message, "no speech")
|
||||
XCTAssertEqual(error?.kind, .noSpeech)
|
||||
XCTAssertNil(FlowSessionBridge.consumeTranscriptionError(defaults: defaults))
|
||||
}
|
||||
|
||||
func testTranscriptionPartialRoundTrip() {
|
||||
let defaults = makeDefaults()
|
||||
FlowSessionBridge.storeTranscriptionPartial("你好世界", defaults: defaults)
|
||||
XCTAssertEqual(FlowSessionBridge.transcriptionPartial(defaults: defaults), "你好世界")
|
||||
FlowSessionBridge.storeTranscriptionResult("final", defaults: defaults)
|
||||
XCTAssertNil(FlowSessionBridge.transcriptionPartial(defaults: defaults))
|
||||
}
|
||||
|
||||
func testDarwinNotificationPostsWithoutCrashing() {
|
||||
FlowSessionDarwin.postSessionChanged()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user