Browse Source

fix: restore live streaming of stable completed words as user speaks

main
Ali Alavi 5 days ago
parent
commit
624199910b
  1. 24
      src/SonioxClient.swift

24
src/SonioxClient.swift

@ -317,22 +317,28 @@ public final class SonioxLiveSession {
}
}
// Emit live streaming deltas STRICTLY from Soniox-finalized tokens (is_final == true):
// Ultra-responsive real-time word-by-word streaming:
// A word in 'combined' is completed as soon as a whitespace character follows it.
var deltaToEmit: String? = nil
if !triggerDetected && fullCommitted.count > streamedPrefix.count {
if fullCommitted.hasPrefix(streamedPrefix) {
let delta = String(fullCommitted.dropFirst(streamedPrefix.count))
streamedPrefix = fullCommitted
if !triggerDetected {
if let lastSpaceRange = combined.rangeOfCharacter(from: .whitespacesAndNewlines, options: .backwards) {
let stablePortion = String(combined[..<lastSpaceRange.upperBound])
if stablePortion.count > streamedPrefix.count {
if stablePortion.hasPrefix(streamedPrefix) {
let delta = String(stablePortion.dropFirst(streamedPrefix.count))
streamedPrefix = stablePortion
deltaToEmit = delta
} else {
let common = fullCommitted.commonPrefix(with: streamedPrefix)
if fullCommitted.count > common.count {
let delta = String(fullCommitted.dropFirst(common.count))
streamedPrefix = fullCommitted
let common = stablePortion.commonPrefix(with: streamedPrefix)
if stablePortion.count > common.count {
let delta = String(stablePortion.dropFirst(common.count))
streamedPrefix = stablePortion
deltaToEmit = delta
}
}
}
}
}
lock.unlock()
if triggerDetected {

Loading…
Cancel
Save