Remove ai.enabled configuration support

This commit is contained in:
Thales Maciel 2026-02-25 11:01:18 -03:00
parent ccf968a410
commit 2c570c7a87
5 changed files with 22 additions and 26 deletions

View file

@ -94,7 +94,6 @@ Create `~/.config/lel/config.json`:
"backend": "clipboard",
"remove_transcription_from_clipboard": false
},
"ai": { "enabled": true },
"vocabulary": {
"replacements": [
{ "from": "Martha", "to": "Marta" },
@ -111,7 +110,6 @@ Create `~/.config/lel/config.json`:
Recording input can be a device index (preferred) or a substring of the device
name.
`ai.enabled` is accepted for compatibility but currently has no runtime effect.
AI cleanup is always enabled and uses the locked local Llama-3.2-3B GGUF model
downloaded to `~/.cache/lel/models/` on first use.

View file

@ -13,9 +13,6 @@
"backend": "clipboard",
"remove_transcription_from_clipboard": false
},
"ai": {
"enabled": true
},
"vocabulary": {
"replacements": [
{

View file

@ -41,11 +41,6 @@ class InjectionConfig:
remove_transcription_from_clipboard: bool = False
@dataclass
class AiConfig:
enabled: bool = True
@dataclass
class VocabularyReplacement:
source: str
@ -72,7 +67,6 @@ class Config:
recording: RecordingConfig = field(default_factory=RecordingConfig)
stt: SttConfig = field(default_factory=SttConfig)
injection: InjectionConfig = field(default_factory=InjectionConfig)
ai: AiConfig = field(default_factory=AiConfig)
vocabulary: VocabularyConfig = field(default_factory=VocabularyConfig)
domain_inference: DomainInferenceConfig = field(default_factory=DomainInferenceConfig)
@ -119,9 +113,6 @@ def validate(cfg: Config) -> None:
if not isinstance(cfg.injection.remove_transcription_from_clipboard, bool):
raise ValueError("injection.remove_transcription_from_clipboard must be boolean")
if not isinstance(cfg.ai.enabled, bool):
raise ValueError("ai.enabled must be boolean")
cfg.vocabulary.max_rules = _validated_limit(cfg.vocabulary.max_rules, "vocabulary.max_rules")
cfg.vocabulary.max_terms = _validated_limit(cfg.vocabulary.max_terms, "vocabulary.max_terms")
@ -151,6 +142,10 @@ def _from_dict(data: dict[str, Any], cfg: Config) -> Config:
raise ValueError("logging section is no longer supported; use -v/--verbose")
if "log_transcript" in data:
raise ValueError("log_transcript is no longer supported; use -v/--verbose")
if "ai" in data:
raise ValueError("ai section is no longer supported")
if "ai_enabled" in data:
raise ValueError("ai_enabled is no longer supported")
has_sections = any(
key in data
@ -159,7 +154,6 @@ def _from_dict(data: dict[str, Any], cfg: Config) -> Config:
"recording",
"stt",
"injection",
"ai",
"vocabulary",
"domain_inference",
)
@ -169,7 +163,6 @@ def _from_dict(data: dict[str, Any], cfg: Config) -> Config:
recording = _ensure_dict(data.get("recording"), "recording")
stt = _ensure_dict(data.get("stt"), "stt")
injection = _ensure_dict(data.get("injection"), "injection")
ai = _ensure_dict(data.get("ai"), "ai")
vocabulary = _ensure_dict(data.get("vocabulary"), "vocabulary")
domain_inference = _ensure_dict(data.get("domain_inference"), "domain_inference")
@ -188,8 +181,6 @@ def _from_dict(data: dict[str, Any], cfg: Config) -> Config:
injection["remove_transcription_from_clipboard"],
"injection.remove_transcription_from_clipboard",
)
if "enabled" in ai:
cfg.ai.enabled = _as_bool(ai["enabled"], "ai.enabled")
if "replacements" in vocabulary:
cfg.vocabulary.replacements = _as_replacements(vocabulary["replacements"])
if "terms" in vocabulary:
@ -218,8 +209,6 @@ def _from_dict(data: dict[str, Any], cfg: Config) -> Config:
cfg.stt.device = _as_nonempty_str(data["whisper_device"], "whisper_device")
if "injection_backend" in data:
cfg.injection.backend = _as_nonempty_str(data["injection_backend"], "injection_backend")
if "ai_enabled" in data:
cfg.ai.enabled = _as_bool(data["ai_enabled"], "ai_enabled")
return cfg

View file

@ -26,7 +26,6 @@ class ConfigTests(unittest.TestCase):
self.assertEqual(cfg.stt.device, "cpu")
self.assertEqual(cfg.injection.backend, "clipboard")
self.assertFalse(cfg.injection.remove_transcription_from_clipboard)
self.assertTrue(cfg.ai.enabled)
self.assertEqual(cfg.vocabulary.replacements, [])
self.assertEqual(cfg.vocabulary.terms, [])
self.assertEqual(cfg.vocabulary.max_rules, 500)
@ -43,7 +42,6 @@ class ConfigTests(unittest.TestCase):
"backend": "injection",
"remove_transcription_from_clipboard": True,
},
"ai": {"enabled": False},
"vocabulary": {
"replacements": [
{"from": "Martha", "to": "Marta"},
@ -67,7 +65,6 @@ class ConfigTests(unittest.TestCase):
self.assertEqual(cfg.stt.device, "cuda")
self.assertEqual(cfg.injection.backend, "injection")
self.assertTrue(cfg.injection.remove_transcription_from_clipboard)
self.assertFalse(cfg.ai.enabled)
self.assertEqual(cfg.vocabulary.max_rules, 100)
self.assertEqual(cfg.vocabulary.max_terms, 200)
self.assertEqual(len(cfg.vocabulary.replacements), 2)
@ -84,7 +81,6 @@ class ConfigTests(unittest.TestCase):
"whisper_model": "tiny",
"whisper_device": "cpu",
"injection_backend": "clipboard",
"ai_enabled": False,
}
with tempfile.TemporaryDirectory() as td:
path = Path(td) / "config.json"
@ -98,7 +94,6 @@ class ConfigTests(unittest.TestCase):
self.assertEqual(cfg.stt.device, "cpu")
self.assertEqual(cfg.injection.backend, "clipboard")
self.assertFalse(cfg.injection.remove_transcription_from_clipboard)
self.assertFalse(cfg.ai.enabled)
self.assertEqual(cfg.vocabulary.replacements, [])
def test_invalid_injection_backend_raises(self):
@ -119,6 +114,24 @@ class ConfigTests(unittest.TestCase):
with self.assertRaisesRegex(ValueError, "injection.remove_transcription_from_clipboard"):
load(str(path))
def test_removed_ai_section_raises(self):
payload = {"ai": {"enabled": True}}
with tempfile.TemporaryDirectory() as td:
path = Path(td) / "config.json"
path.write_text(json.dumps(payload), encoding="utf-8")
with self.assertRaisesRegex(ValueError, "ai section is no longer supported"):
load(str(path))
def test_removed_legacy_ai_enabled_raises(self):
payload = {"ai_enabled": True}
with tempfile.TemporaryDirectory() as td:
path = Path(td) / "config.json"
path.write_text(json.dumps(payload), encoding="utf-8")
with self.assertRaisesRegex(ValueError, "ai_enabled is no longer supported"):
load(str(path))
def test_removed_logging_section_raises(self):
payload = {"logging": {"log_transcript": True}}
with tempfile.TemporaryDirectory() as td:

View file

@ -85,7 +85,6 @@ class FakeAudio:
class DaemonTests(unittest.TestCase):
def _config(self) -> Config:
cfg = Config()
cfg.ai.enabled = False
return cfg
@patch("leld.stop_audio_recording", return_value=FakeAudio(8))