mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-13 04:40:44 +08:00
重构主控编排与运行时预热链路,统一工作区提示词/专家调度协议并补齐 wiki 记忆注入与写回闭环。
同时收敛启动与运维脚本默认行为(含 wiki worker)、更新 Admin 可观测性与相关测试,降低首轮时延并提高运行稳定性。 Made-with: Cursor
This commit is contained in:
parent
4a23b715a2
commit
dbbe3add6a
14438 changed files with 2693620 additions and 2546 deletions
|
|
@ -0,0 +1,62 @@
|
|||
import Foundation
|
||||
import SwabbleKit
|
||||
|
||||
enum VoiceWakeRecognitionDebugSupport {
|
||||
struct TranscriptSummary {
|
||||
let textOnly: Bool
|
||||
let timingCount: Int
|
||||
}
|
||||
|
||||
static func shouldLogTranscript(
|
||||
transcript: String,
|
||||
isFinal: Bool,
|
||||
loggerLevel: Logger.Level,
|
||||
lastLoggedText: inout String?,
|
||||
lastLoggedAt: inout Date?,
|
||||
minRepeatInterval: TimeInterval = 0.25) -> Bool
|
||||
{
|
||||
guard !transcript.isEmpty else { return false }
|
||||
guard loggerLevel == .debug || loggerLevel == .trace else { return false }
|
||||
if transcript == lastLoggedText,
|
||||
!isFinal,
|
||||
let last = lastLoggedAt,
|
||||
Date().timeIntervalSince(last) < minRepeatInterval
|
||||
{
|
||||
return false
|
||||
}
|
||||
lastLoggedText = transcript
|
||||
lastLoggedAt = Date()
|
||||
return true
|
||||
}
|
||||
|
||||
static func textOnlyFallbackMatch(
|
||||
transcript: String,
|
||||
triggers: [String],
|
||||
config: WakeWordGateConfig,
|
||||
trimWake: (String, [String]) -> String) -> WakeWordGateMatch?
|
||||
{
|
||||
guard let command = VoiceWakeTextUtils.textOnlyCommand(
|
||||
transcript: transcript,
|
||||
triggers: triggers,
|
||||
minCommandLength: config.minCommandLength,
|
||||
trimWake: trimWake)
|
||||
else { return nil }
|
||||
return WakeWordGateMatch(triggerEndTime: 0, postGap: 0, command: command)
|
||||
}
|
||||
|
||||
static func transcriptSummary(
|
||||
transcript: String,
|
||||
triggers: [String],
|
||||
segments: [WakeWordSegment]) -> TranscriptSummary
|
||||
{
|
||||
TranscriptSummary(
|
||||
textOnly: WakeWordGate.matchesTextOnly(text: transcript, triggers: triggers),
|
||||
timingCount: segments.count(where: { $0.start > 0 || $0.duration > 0 }))
|
||||
}
|
||||
|
||||
static func matchSummary(_ match: WakeWordGateMatch?) -> String {
|
||||
match.map {
|
||||
"match=true gap=\(String(format: "%.2f", $0.postGap))s cmdLen=\($0.command.count)"
|
||||
} ?? "match=false"
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue