{"record":{"id":"81286a1da9a33942","repo":"jamiepine/voicebox","slug":"unknown-qwen3-size-model-size","errorCode":null,"errorMessage":"Unknown Qwen3 size: {model_size}","messagePattern":"Unknown Qwen3 size: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"backend/backends/qwen_llm_backend.py","lineNumber":77,"sourceCode":"class PyTorchQwenLLMBackend:\n    \"\"\"Qwen3 LLM backend using HuggingFace transformers.\"\"\"\n\n    def __init__(self, model_size: str = \"0.6B\"):\n        self.model = None\n        self.tokenizer = None\n        self.model_size = model_size\n        self._current_model_size: Optional[str] = None\n        self.device = self._get_device()\n\n    def _get_device(self) -> str:\n        return get_torch_device(allow_xpu=True, allow_directml=True, allow_mps=True)\n\n    def is_loaded(self) -> bool:\n        return self.model is not None\n\n    def _get_model_path(self, model_size: str) -> str:\n        if model_size not in PYTORCH_HF_REPOS:\n            raise ValueError(f\"Unknown Qwen3 size: {model_size}\")\n        return PYTORCH_HF_REPOS[model_size]\n\n    def _is_model_cached(self, model_size: str) -> bool:\n        return is_model_cached(self._get_model_path(model_size))\n\n    async def load_model(self, model_size: Optional[str] = None) -> None:\n        if model_size is None:\n            model_size = self.model_size\n\n        if self.model is not None and self._current_model_size == model_size:\n            return\n\n        if self.model is not None and self._current_model_size != model_size:\n            self.unload_model()\n\n        await asyncio.to_thread(self._load_model_sync, model_size)\n\n    def _load_model_sync(self, model_size: str) -> None:","sourceCodeStart":59,"sourceCodeEnd":95,"githubUrl":"https://github.com/jamiepine/voicebox/blob/51f49dea198384b4eb6087b72c17057c6eb1c1cd/backend/backends/qwen_llm_backend.py#L59-L95","documentation":"Raised by the PyTorch Qwen LLM backend's _get_model_path when model_size is not a key of PYTORCH_HF_REPOS, which contains \"0.6B\" (Qwen/Qwen3-0.6B), \"1.7B\" (Qwen/Qwen3-1.7B), and \"4B\" (Qwen/Qwen3-4B). Note this is the Qwen3 LLM (text) model, not the TTS model — the valid set differs from the TTS backends.","triggerScenarios":"Calling load_model on the Qwen LLM backend with a string outside {\"0.6B\",\"1.7B\",\"4B\"} — e.g. \"base\", \"1.7b\", or a TTS-only token like \"12Hz\".","commonSituations":"Confusing the LLM size set with the TTS size set (TTS does not accept \"4B\"; this backend does); forwarding a whisper model name; case mismatch.","solutions":["Pass \"0.6B\", \"1.7B\", or \"4B\".","Confirm you are calling the LLM backend, not a TTS backend, before assuming \"4B\" is valid.","Normalize/case-fold the value where it enters the system."],"exampleFix":"// before\nllm_backend.load_model(model_size=\"base\")\n// after\nllm_backend.load_model(model_size=\"0.6B\")","handlingStrategy":"validation","validationCode":"from backend.backends.qwen_llm_backend import PYTORCH_HF_REPOS\nif model_size not in PYTORCH_HF_REPOS:\n    raise ValueError(f\"size must be one of {sorted(PYTORCH_HF_REPOS)}\")\nawait llm_backend.load_model(model_size=model_size)","typeGuard":"def is_qwen_llm_pytorch_size(value: str) -> bool:\n    from backend.backends.qwen_llm_backend import PYTORCH_HF_REPOS\n    return isinstance(value, str) and value in PYTORCH_HF_REPOS","tryCatchPattern":"try:\n    await llm_backend.load_model(model_size=model_size)\nexcept ValueError as exc:\n    if \"Unknown Qwen3 size\" in str(exc):\n        await llm_backend.load_model(model_size=\"0.6B\")\n    else:\n        raise","preventionTips":["Remember this LLM backend also accepts \"4B\"; the TTS backends do not — keep them separate.","Validate against PYTORCH_HF_REPOS keys rather than a hardcoded list.","Normalize casing/whitespace before forwarding user input."],"tags":["qwen-llm","pytorch","model-selection","validation"],"backgroundTag":null,"analyzedSha":"51f49dea198384b4eb6087b72c17057c6eb1c1cd","analyzedAt":"2026-08-12T16:51:42.824Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}