fix: propagate STT disable through shared transcription config

- add stt.enabled to the default user config
- make transcription_tools respect the disabled flag globally
- surface disabled state cleanly in voice mode diagnostics
- add regression coverage for disabled STT provider selection
This commit is contained in:
teknium1
2026-03-14 22:09:59 -07:00
parent c36136084a
commit f8ceadbad0
4 changed files with 47 additions and 5 deletions

View File

@@ -93,6 +93,18 @@ def _load_stt_config() -> dict:
return {}
def is_stt_enabled(stt_config: Optional[dict] = None) -> bool:
"""Return whether STT is enabled in config."""
if stt_config is None:
stt_config = _load_stt_config()
enabled = stt_config.get("enabled", True)
if isinstance(enabled, str):
return enabled.strip().lower() in ("true", "1", "yes", "on")
if enabled is None:
return True
return bool(enabled)
def _get_provider(stt_config: dict) -> str:
"""Determine which STT provider to use.
@@ -101,6 +113,9 @@ def _get_provider(stt_config: dict) -> str:
2. Auto-detect: local > groq (free) > openai (paid)
3. Disabled (returns "none")
"""
if not is_stt_enabled(stt_config):
return "none"
provider = stt_config.get("provider", DEFAULT_PROVIDER)
if provider == "local":
@@ -334,6 +349,13 @@ def transcribe_audio(file_path: str, model: Optional[str] = None) -> Dict[str, A
# Load config and determine provider
stt_config = _load_stt_config()
if not is_stt_enabled(stt_config):
return {
"success": False,
"transcript": "",
"error": "STT is disabled in config.yaml (stt.enabled: false).",
}
provider = _get_provider(stt_config)
if provider == "local":

View File

@@ -703,10 +703,11 @@ def check_voice_requirements() -> Dict[str, Any]:
``missing_packages``, and ``details``.
"""
# Determine STT provider availability
from tools.transcription_tools import _get_provider, _load_stt_config, _HAS_FASTER_WHISPER
from tools.transcription_tools import _get_provider, _load_stt_config, is_stt_enabled, _HAS_FASTER_WHISPER
stt_config = _load_stt_config()
stt_enabled = is_stt_enabled(stt_config)
stt_provider = _get_provider(stt_config)
stt_available = stt_provider != "none"
stt_available = stt_enabled and stt_provider != "none"
missing: List[str] = []
has_audio = _audio_available()
@@ -725,7 +726,9 @@ def check_voice_requirements() -> Dict[str, Any]:
else:
details_parts.append("Audio capture: MISSING (pip install sounddevice numpy)")
if stt_provider == "local":
if not stt_enabled:
details_parts.append("STT provider: DISABLED in config (stt.enabled: false)")
elif stt_provider == "local":
details_parts.append("STT provider: OK (local faster-whisper)")
elif stt_provider == "groq":
details_parts.append("STT provider: OK (Groq)")