wangzhibo
2026-10-08 220e4fab27b7f419b3e89e2f2d28ae789aac09d7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from pathlib import Path
 
ROOT = Path(__file__).resolve().parents[1]
 
 
def read_text(path: str) -> str:
    return (ROOT / path).read_text(encoding="utf-8")
 
 
def require(condition: bool, message: str) -> None:
    if not condition:
        raise SystemExit(message)
 
 
def main() -> None:
    audio_service = read_text("main/audio/audio_service.cc")
    afe_pos = audio_service.find("wake_word_ = std::make_unique<AfeWakeWord>();")
    custom_pos = audio_service.find("wake_word_ = std::make_unique<CustomWakeWord>();")
    require(afe_pos != -1, "AfeWakeWord selection is missing")
    require(custom_pos != -1, "CustomWakeWord fallback is missing")
    require(afe_pos < custom_pos, "AfeWakeWord must be preferred before CustomWakeWord when WakeNet exists")
 
    sdkconfig = read_text("sdkconfig")
    defaults = read_text("sdkconfig.defaults.esp32s3")
    assets_script = read_text("scripts/build_default_assets.py")
    multinet_enabled = "CONFIG_SR_MN_CN_MULTINET" in sdkconfig and "CONFIG_SR_MN_CN_NONE=y" not in sdkconfig
    defaults_enabled = "CONFIG_SR_MN_CN_MULTINET" in defaults
    require(multinet_enabled, "sdkconfig must enable a Chinese MultiNet model")
    require(defaults_enabled, "sdkconfig.defaults.esp32s3 must enable a Chinese MultiNet model")
    require(
        "wake_word_config['use_custom_wake_word'] or wake_word_config['use_afe_wake_word']" in assets_script,
        "assets build must package MultiNet when AFE wake word is enabled",
    )
 
 
if __name__ == "__main__":
    main()