RVC-Boss/GPT-SoVITS · error · NO_PROMPT_ERROR
prompt_text cannot be empty when using SoVITS_V3
Error message
prompt_text cannot be empty when using SoVITS_V3
What it means
Raised as NO_PROMPT_ERROR when the inference call has no prompt text while the loaded model is SoVITS v2-Pro (configs.use_vocoder is True). The v2Pro vocoder path conditions generation on prompt text tokens; without them the vocoder has no linguistic anchor for the reference, so inference is refused rather than allowed to produce garbage.
Source
Thrown at GPT_SoVITS/TTS_infer_pack/TTS.py:1120
print(i18n("当开启并行推理模式时,SoVits V3/4模型不支持分桶处理,已自动关闭分桶处理"))
split_bucket = False
else:
print(i18n("分桶处理模式已关闭"))
# if fragment_interval < 0.01:
# fragment_interval = 0.01
# print(i18n("分段间隔过小,已自动设置为0.01"))
no_prompt_text = False
if prompt_text in [None, ""]:
no_prompt_text = True
assert text_lang in self.configs.languages
if not no_prompt_text:
assert prompt_lang in self.configs.languages
if no_prompt_text and self.configs.use_vocoder:
raise NO_PROMPT_ERROR("prompt_text cannot be empty when using SoVITS_V3")
if ref_audio_path in [None, ""] and (
(self.prompt_cache["prompt_semantic"] is None) or (self.prompt_cache["refer_spec"] in [None, []])
):
raise ValueError(
"ref_audio_path cannot be empty, when the reference audio is not set using set_ref_audio()"
)
###### setting reference audio and prompt text preprocessing ########
t0 = time.perf_counter()
if (ref_audio_path is not None) and (
ref_audio_path != self.prompt_cache["ref_audio_path"]
or (self.is_v2pro and self.prompt_cache["refer_spec"][0][1] is None)
):
if not os.path.exists(ref_audio_path):
raise ValueError(f"{ref_audio_path} not exists")
self.set_ref_audio(ref_audio_path)
View on GitHub (pinned to d523079fc0)
Solutions
- Supply the transcript of the reference audio as prompt_text (and matching prompt_lang) whenever a v2Pro/vocoder model is loaded.
- If you must run without prompt text, switch back to a non-Pro sovits model (v1/v2/v3/v4 checkpoint without the Pro vocoder path).
- In API wrappers, make prompt_text a required field when configs.use_vocoder is True and validate before dispatch.
Example fix
# before
audio = handler.run(text="你好", text_lang="zh", ref_audio_path="ref.wav") # NO_PROMPT_ERROR
# after
audio = handler.run(
text="你好", text_lang="zh",
ref_audio_path="ref.wav",
prompt_text="这是参考音频的文字内容", prompt_lang="zh", # required for v2Pro
) Defensive patterns
Strategy: validation
Validate before calling
if handler.configs.use_vocoder and not (prompt_text or "").strip():
raise ValueError("prompt_text is required for SoVITS v2Pro models") Type guard
def requires_prompt_text(handler) -> bool:
"""v2Pro/vocoder models cannot run without the reference transcript."""
return bool(getattr(handler.configs, "use_vocoder", False)) Prevention
- Treat prompt_text as mandatory whenever a Pro/vocoder model is loaded.
- Store the transcript alongside every reference audio file (e.g. ref.wav + ref.txt) so it's never lost.
- Validate request payloads in API servers against the loaded model's requirements.
When it happens
Trigger: Calling infer_batch (or the TTS.run wrapper) with prompt_text=None or "" while configs.use_vocoder is True — i.e. a v2Pro sovits model is loaded and the caller tries the 'ref_free' (no prompt text) mode that works for v1/v2.
Common situations: User upgrades to a v2Pro model but keeps an old script/preset that omitted prompt text; webui opened in free-reference mode with a Pro model selected; API request built without prompt_text field.
Related errors
- 参考音频在3~10秒范围外,请更换!
- ref_audio_path cannot be empty, when the reference audio is
- {ref_audio_path} not exists
- 请输入有效文本
- 参考音频在3~10秒范围外,请更换!
AI-assisted analysis of RVC-Boss/GPT-SoVITS@d523079fc0 (2026-08-15).
Data as JSON: /api/errors/3a63d4459dfa4dc0.
Report an issue: GitHub.