|
|
@ -316,28 +316,22 @@ public final class SonioxLiveSession { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// Ultra-responsive real-time word-by-word streaming: |
|
|
|
|
|
// A word in 'combined' is completed as soon as a whitespace character follows it. |
|
|
|
|
|
|
|
|
// Emit live streaming deltas STRICTLY from committed final tokens (is_final == true): |
|
|
var deltaToEmit: String? = nil |
|
|
var deltaToEmit: String? = nil |
|
|
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 |
|
|
|
|
|
|
|
|
if !triggerDetected && fullCommitted.count > streamedPrefix.count { |
|
|
|
|
|
if fullCommitted.hasPrefix(streamedPrefix) { |
|
|
|
|
|
let delta = String(fullCommitted.dropFirst(streamedPrefix.count)) |
|
|
|
|
|
streamedPrefix = fullCommitted |
|
|
deltaToEmit = delta |
|
|
deltaToEmit = delta |
|
|
} else { |
|
|
} else { |
|
|
let common = stablePortion.commonPrefix(with: streamedPrefix) |
|
|
|
|
|
if stablePortion.count > common.count { |
|
|
|
|
|
let delta = String(stablePortion.dropFirst(common.count)) |
|
|
|
|
|
streamedPrefix = stablePortion |
|
|
|
|
|
|
|
|
let common = fullCommitted.commonPrefix(with: streamedPrefix) |
|
|
|
|
|
if fullCommitted.count > common.count { |
|
|
|
|
|
let delta = String(fullCommitted.dropFirst(common.count)) |
|
|
|
|
|
streamedPrefix = fullCommitted |
|
|
deltaToEmit = delta |
|
|
deltaToEmit = delta |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
lock.unlock() |
|
|
lock.unlock() |
|
|
|
|
|
|
|
|
if triggerDetected { |
|
|
if triggerDetected { |
|
|
|