{"record":{"id":"619d47c1b6f3c182","repo":"Hmbown/CodeWhale","slug":"mimo-v2-5-tts-voicedesign-requires-voice-prompt","errorCode":null,"errorMessage":"mimo-v2.5-tts-voicedesign requires --voice-prompt or --instruction to describe the voice","messagePattern":"mimo-v2\\.5-tts-voicedesign requires --voice-prompt or --instruction to describe the voice","errorType":"error_code","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/tui/src/lib.rs","lineNumber":7841,"sourceCode":"        voice_prompt.is_some(),\n    );\n    let model_lower = model.to_ascii_lowercase();\n    if !model_lower.contains(\"tts\") {\n        bail!(\n            \"speech requires a TTS model (examples: {}); got {model}\",\n            SPEECH_MODEL_EXAMPLES.join(\", \")\n        );\n    }\n    let is_voice_design = model_lower.contains(\"voicedesign\");\n    let is_voice_clone = model_lower.contains(\"voiceclone\");\n\n    let instruction = combine_speech_instructions(instruction, voice_prompt);\n    if is_voice_design\n        && instruction\n            .as_deref()\n            .is_none_or(|value| value.trim().is_empty())\n    {\n        bail!(\n            \"mimo-v2.5-tts-voicedesign requires --voice-prompt or --instruction to describe the voice\"\n        );\n    }\n\n    let voice = if let Some(clone_path) = clone_voice {\n        Some(encode_voice_clone_sample_data_uri(&clone_path)?)\n    } else if is_voice_design {\n        None\n    } else if let Some(value) = voice.filter(|value| !value.trim().is_empty()) {\n        Some(value)\n    } else if is_voice_clone {\n        bail!(\"mimo-v2.5-tts-voiceclone requires --clone-voice <mp3|wav> or --voice <data-uri>\");\n    } else {\n        Some(DEFAULT_VOICE.to_string())\n    };\n    let format = normalize_speech_format(&format).with_context(|| {\n        format!(\"Unsupported speech format '{format}' (allowed: wav, mp3, pcm16)\")\n    })?;","sourceCodeStart":7823,"sourceCodeEnd":7859,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/73e0f67d83c59909b571efdfc88c4bc28c309cb1/crates/tui/src/lib.rs#L7823-L7859","documentation":"The mimo-v2.5-tts-voicedesign model requires a textual description of the desired voice, supplied via --voice-prompt or --instruction (combined by combine_speech_instructions); if the combined instruction is missing or whitespace-only the command bails. Voice design cannot proceed without a voice description.","triggerScenarios":"Running `speech` with a voicedesign model (model name containing \"voicedesign\") but neither --voice-prompt nor --instruction, or passing only empty/whitespace values.","commonSituations":"Quoting mistakes leaving an argument empty (--voice-prompt \"\"); scripts that set the model to voicedesign without setting the prompt; misunderstanding that voicedesign needs a description unlike plain TTS.","solutions":["Add --voice-prompt \"<description of the desired voice>\"","Or add --instruction \"<voice description>\"","Ensure the provided value is not empty/whitespace-only"],"exampleFix":"// before\ncodewhale speech --model mimo-v2.5-tts-voicedesign --text \"hi\"\n// after\ncodewhale speech --model mimo-v2.5-tts-voicedesign --voice-prompt \"warm, calm female narrator\" --text \"hi\"","handlingStrategy":"validation","validationCode":"let is_voice_design = model.to_ascii_lowercase().contains(\"voicedesign\");\nlet has_desc = instruction.as_deref().is_some_and(|v| !v.trim().is_empty());\nif is_voice_design && !has_desc {\n    eprintln!(\"voicedesign requires --voice-prompt or --instruction\");\n    std::process::exit(2);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always pair voicedesign models with a non-empty voice description","Trim and check --voice-prompt/--instruction in wrapper scripts","Remember plain TTS models do not need the prompt; voicedesign does"],"tags":["cli","speech","missing-argument","voicedesign"],"backgroundTag":"missing-required-option","analyzedSha":"73e0f67d83c59909b571efdfc88c4bc28c309cb1","analyzedAt":"2026-09-22T01:30:00.501Z","contentChangedAt":"2026-09-22T01:30:00.501Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}