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();") custom_pos = audio_service.find("wake_word_ = std::make_unique();") 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()