{"record":{"id":"85550e4078588a41","repo":"microsoft/VibeVoice","slug":"voice-preset-key-r-not-found","errorCode":null,"errorMessage":"Voice preset {key!r} not found","messagePattern":"Voice preset (.+?) not found","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"demo/web/app.py","lineNumber":157,"sourceCode":"\n        print(f\"[startup] Found {len(presets)} voice presets\")\n        return dict(sorted(presets.items()))\n\n    def _determine_voice_key(self, name: Optional[str]) -> str:\n        if name and name in self.voice_presets:\n            return name\n\n        default_key = \"en-Carter_man\"\n        if default_key in self.voice_presets:\n            return default_key\n\n        first_key = next(iter(self.voice_presets))\n        print(f\"[startup] Using fallback voice preset: {first_key}\")\n        return first_key\n\n    def _ensure_voice_cached(self, key: str) -> Tuple[object, Path, str]:\n        if key not in self.voice_presets:\n            raise RuntimeError(f\"Voice preset {key!r} not found\")\n\n        if key not in self._voice_cache:\n            preset_path = self.voice_presets[key]\n            print(f\"[startup] Loading voice preset {key} from {preset_path}\")\n            print(f\"[startup] Loading prefilled prompt from {preset_path}\")\n            with torch.serialization.safe_globals([BaseModelOutputWithPast, DynamicCache]):\n                prefilled_outputs = torch.load(\n                    preset_path,\n                    map_location=self._torch_device,\n                    weights_only=True,\n                )\n            self._voice_cache[key] = prefilled_outputs\n\n        return self._voice_cache[key]\n\n    def _get_voice_resources(self, requested_key: Optional[str]) -> Tuple[str, object, Path, str]:\n        key = requested_key if requested_key and requested_key in self.voice_presets else self.default_voice_key\n        if key is None:","sourceCodeStart":139,"sourceCodeEnd":175,"githubUrl":"https://github.com/microsoft/VibeVoice/blob/94da20d98b2fa7688e9cbfaf7692ddb4954f7600/demo/web/app.py#L139-L175","documentation":"Raised by _ensure_voice_cached when asked to cache a voice preset key that is not in self.voice_presets. Preset keys are the .pt filename stems discovered at startup (e.g. 'en-Carter_man'), so any key from another naming scheme (path, display name, uppercase) will miss. Note the main request path (_get_voice_resources) already falls back to default_voice_key, so hitting this usually means an internal call passed a raw/unvalidated key.","triggerScenarios":"Calling service._ensure_voice_cached('en-Carter_man.pt') (with extension), 'Carter', or a VOICE_PRESET env value that was never validated against the discovered keys; calling load-dependent methods before load() populated voice_presets.","commonSituations":"VOICE_PRESET env var set to a name that does not match any .pt stem in demo/voices/streaming_model; preset files renamed after startup; passing a Path instead of the stem string.","solutions":["Use the exact preset stem (filename without .pt), e.g. 'en-Carter_man', matching a file in demo/voices/streaming_model.","Print sorted(service.voice_presets) and pick the key from that list.","Set VOICE_PRESET to a valid stem or unset it to fall back to en-Carter_man / first key.","If presets changed on disk, restart the service so presets are re-discovered."],"exampleFix":"# before\nservice._ensure_voice_cached(\"en-Carter_man.pt\")\n\n# after\nkey = \"en-Carter_man\"  # exact stem from service.voice_presets\nservice._ensure_voice_cached(key)","handlingStrategy":"validation","validationCode":"def valid_voice_key(service, key: str) -> bool:\n    return key in service.voice_presets  # keys are .pt stems\n\nif not valid_voice_key(service, requested):\n    requested = service.default_voice_key","typeGuard":"def is_known_voice(service, key: object) -> bool:\n    return isinstance(key, str) and key in service.voice_presets","tryCatchPattern":"try:\n    out = service._ensure_voice_cached(key)\nexcept RuntimeError:\n    key = next(iter(service.voice_presets))\n    out = service._ensure_voice_cached(key)","preventionTips":["Treat VOICE_PRESET values as untrusted; validate against service.voice_presets","Use stems without the .pt extension","Restart the service after changing preset files on disk"],"tags":["web-demo","voice-preset","invalid-key","runtimeerror"],"backgroundTag":null,"analyzedSha":"94da20d98b2fa7688e9cbfaf7692ddb4954f7600","analyzedAt":"2026-08-15T04:12:07.418Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}