From dd7373561781a8b2cae377318fe1876ad0d0faea Mon Sep 17 00:00:00 2001 From: Muzaffer Emre Date: Fri, 31 Jul 2026 18:48:21 +0300 Subject: [PATCH 01/13] Add Groq transcription support --- README.md | 7 ++-- README.tr.md | 8 ++-- api.py | 19 +++++---- config.py | 12 +++++- i18n.py | 1 + settings_ui.py | 102 ++++++++++++++++++++++++++++++++++----------- tests/test_groq.py | 37 ++++++++++++++++ 7 files changed, 145 insertions(+), 41 deletions(-) create mode 100644 tests/test_groq.py diff --git a/README.md b/README.md index de518bd..22e246f 100644 --- a/README.md +++ b/README.md @@ -32,10 +32,11 @@ dikte # the settings window opens on first run `install.sh` adds the `dikte` command, a menu entry, an autostart entry and the KDE shortcut. -Two keys go in the settings window: **OpenAI** and **OpenRouter**. Speech to text -runs on either one (`gpt-4o-transcribe` by default), cleanup always on +The settings window accepts **OpenAI**, **Groq** and **OpenRouter** keys. Speech +to text runs on any of them (`gpt-4o-transcribe` by default), cleanup always on OpenRouter (`google/gemini-3.5-flash-lite`), so a single OpenRouter key can -cover both. They fall back to `OPENAI_API_KEY` and `OPENROUTER_API_KEY`, and are +cover both. They fall back to `OPENAI_API_KEY`, `GROQ_API_KEY` and +`OPENROUTER_API_KEY`, and are stored in `~/.config/dikte/config.json`, mode 600. Cleanup can be switched off, in which case the raw transcript is pasted, and a thinking model's effort can be set next to it. diff --git a/README.tr.md b/README.tr.md index 3e8a877..4034a1f 100644 --- a/README.tr.md +++ b/README.tr.md @@ -32,11 +32,11 @@ dikte # ilk açılışta ayarlar penceresi gelir `install.sh` `dikte` komutunu, menü girdisini, oturum açılışında otomatik başlatmayı ve KDE kısayolunu kurar. -Ayarlar penceresinde iki anahtar istenir: **OpenAI** ve **OpenRouter**. Sesi -yazıya çevirme ikisinden birinde çalışır (varsayılan `gpt-4o-transcribe`), +Ayarlar penceresinde **OpenAI**, **Groq** ve **OpenRouter** anahtarları bulunur. +Sesi yazıya çevirme bunlardan birinde çalışır (varsayılan `gpt-4o-transcribe`), temizleme her zaman OpenRouter'da (`google/gemini-3.5-flash-lite`), yani tek bir -OpenRouter anahtarı ikisine de yeter. Boş bırakırsan `OPENAI_API_KEY` ve -`OPENROUTER_API_KEY` kullanılır; anahtarlar `~/.config/dikte/config.json` +OpenRouter anahtarı ikisine de yeter. Boş bırakırsan `OPENAI_API_KEY`, +`GROQ_API_KEY` ve `OPENROUTER_API_KEY` kullanılır; anahtarlar `~/.config/dikte/config.json` içinde, izinler 600. Temizlemeyi tamamen kapatabilirsin, o zaman ham transkript yapıştırılır; modelin yanındaki kutudan düşünme seviyesini de seçebilirsin. diff --git a/api.py b/api.py index 95d794c..139ea33 100644 --- a/api.py +++ b/api.py @@ -1,4 +1,4 @@ -"""OpenAI and OpenRouter calls, stdlib only. +"""OpenAI-compatible transcription and OpenRouter calls, stdlib only. Transcription runs on either provider: OpenRouter mirrors OpenAI's /audio/transcriptions endpoint field for field, so one multipart request serves @@ -20,6 +20,7 @@ APP_URL = "https://github.com/yusufipk/dikte" USER_AGENT = f"dikte/1.0 (+{APP_URL})" OPENAI_URL = "https://api.openai.com/v1" OPENROUTER_URL = "https://openrouter.ai/api/v1" +GROQ_URL = "https://api.groq.com/openai/v1" # Where a transcription request goes; built by config.Config.transcribe_target(). # `service` is the name the user sees in an error, `provider` the one the code @@ -27,8 +28,10 @@ OPENROUTER_URL = "https://openrouter.ai/api/v1" Target = collections.namedtuple("Target", "provider service api_key base_url model") -def timestamp_model(provider): - """Only whisper-1 returns segment times, and OpenRouter namespaces the id.""" +def timestamp_model(provider, selected=""): + """Return a timestamp-capable model id for the selected provider.""" + if provider == "groq": + return selected or "whisper-large-v3-turbo" return "openai/whisper-1" if provider == "openrouter" else "whisper-1" @@ -126,7 +129,7 @@ def _transcribe_request(target, wav_path, language, prompt, response_format, fields.append(("language", language)) # OpenRouter takes the hint field and throws it away, so spare it the bytes. # The same words still reach the cleanup model as a glossary. - if prompt and target.provider == "openai": + if prompt and target.provider != "openrouter": fields.append(("prompt", prompt)) if granularity: fields.append(("timestamp_granularities[]", granularity)) @@ -153,7 +156,7 @@ def transcribe(target, wav_path, language="", prompt="", timeout=300): def transcribe_segments(target, wav_path, language="", prompt="", timeout=300): """[(start_seconds, end_seconds, text)] using whisper-1's verbose response.""" data = _transcribe_request( - target._replace(model=timestamp_model(target.provider)), + target._replace(model=timestamp_model(target.provider, target.model)), wav_path, language, prompt, "verbose_json", granularity="segment", timeout=timeout, ) @@ -297,17 +300,17 @@ def openrouter_models(api_key="", transcription=False): return sorted(m["id"] for m in models if m.get("id")) -def openai_models(api_key, base_url=OPENAI_URL): +def openai_models(api_key, base_url=OPENAI_URL, service="OpenAI"): if not api_key: raise ApiError(t("{service} API key is empty. Add it in Settings.", - service="OpenAI")) + service=service)) try: data = _get_json( f"{base_url.rstrip('/')}/models", {"Authorization": f"Bearer {api_key}", "User-Agent": USER_AGENT}, ) except ApiError as exc: - raise explain(exc, "OpenAI") from None + raise explain(exc, service) from None ids = [m["id"] for m in data.get("data", []) if m.get("id")] audio = [i for i in ids if "transcribe" in i or "whisper" in i] return sorted(audio or ids) diff --git a/config.py b/config.py index 396bd58..fc113e3 100644 --- a/config.py +++ b/config.py @@ -363,10 +363,13 @@ DEFAULTS = { "ui_language": "auto", # auto | tr | en "openai_api_key": "", "openai_base_url": "https://api.openai.com/v1", + "groq_api_key": "", + "groq_base_url": "https://api.groq.com/openai/v1", "openrouter_api_key": "", "openrouter_base_url": "https://openrouter.ai/api/v1", - "transcribe_provider": "openai", # openai | openrouter + "transcribe_provider": "openai", # openai | groq | openrouter "transcribe_model": "gpt-4o-transcribe", # used when provider is openai + "groq_transcribe_model": "whisper-large-v3-turbo", "openrouter_transcribe_model": "openai/gpt-4o-transcribe", "language": "tr", "transcribe_prompt": "", @@ -494,12 +497,19 @@ class Config: def openrouter_key(self): return self["openrouter_api_key"].strip() or os.environ.get("OPENROUTER_API_KEY", "").strip() + def groq_key(self): + return self["groq_api_key"].strip() or os.environ.get("GROQ_API_KEY", "").strip() + def transcribe_target(self): """Key, endpoint and model for whichever provider does speech to text.""" if self["transcribe_provider"] == "openrouter": return api.Target("openrouter", "OpenRouter", self.openrouter_key(), self["openrouter_base_url"], self["openrouter_transcribe_model"]) + if self["transcribe_provider"] == "groq": + return api.Target("groq", "Groq", self.groq_key(), + self["groq_base_url"], + self["groq_transcribe_model"]) return api.Target("openai", "OpenAI", self.openai_key(), self["openai_base_url"], self["transcribe_model"]) diff --git a/i18n.py b/i18n.py index 13ec3d2..73836ed 100644 --- a/i18n.py +++ b/i18n.py @@ -171,6 +171,7 @@ TR = { "Model": "Model", "Provider": "Sağlayıcı", "sk-… (falls back to OPENAI_API_KEY)": "sk-… (boşsa OPENAI_API_KEY kullanılır)", + "gsk_… (falls back to GROQ_API_KEY)": "gsk_… (boşsa GROQ_API_KEY kullanılır)", "sk-or-… (falls back to OPENROUTER_API_KEY)": "sk-or-… (boşsa OPENROUTER_API_KEY kullanılır)", "Test": "Test et", "Trying…": "Deneniyor…", diff --git a/settings_ui.py b/settings_ui.py index 9638ae8..9fbeda8 100644 --- a/settings_ui.py +++ b/settings_ui.py @@ -29,11 +29,14 @@ LANGUAGES = [ ("German", "de"), ("French", "fr"), ("Spanish", "es"), ("Arabic", "ar"), ] CORNERS = ["bottom-left", "bottom-right", "top-left", "top-right"] -TRANSCRIBE_PROVIDERS = [("OpenAI", "openai"), ("OpenRouter", "openrouter")] +TRANSCRIBE_PROVIDERS = [ + ("OpenAI", "openai"), ("Groq", "groq"), ("OpenRouter", "openrouter"), +] # Starting points for the model box; "Fetch model list" replaces them with # whatever the provider offers today. TRANSCRIBE_MODELS = { "openai": ["gpt-4o-transcribe", "gpt-4o-mini-transcribe", "whisper-1"], + "groq": ["whisper-large-v3-turbo", "whisper-large-v3"], "openrouter": [ "openai/gpt-4o-transcribe", "openai/gpt-4o-mini-transcribe", "openai/whisper-1", "openai/whisper-large-v3", @@ -109,6 +112,7 @@ class SettingsWindow(QDialog): _models_loaded = pyqtSignal(list, str) _transcribe_models_loaded = pyqtSignal(list, str) _test_done = pyqtSignal(bool, str) + _groq_test_done = pyqtSignal(bool, str) _or_test_done = pyqtSignal(bool, str) def __init__(self, conf, launch_command, meeting_command=None, @@ -121,7 +125,7 @@ class SettingsWindow(QDialog): self.meetings = meetings # Each provider keeps its own transcription model, so switching the # provider back and forth never overwrites the other one's. - self._models = {"openai": "", "openrouter": ""} + self._models = {"openai": "", "groq": "", "openrouter": ""} self._shown_provider = "" self.transcriber = FileTranscriber(conf, self) self.setWindowTitle(t("Dikte Settings")) @@ -152,6 +156,7 @@ class SettingsWindow(QDialog): self._models_loaded.connect(self._on_models_loaded) self._transcribe_models_loaded.connect(self._on_transcribe_models_loaded) self._test_done.connect(self._on_test_done) + self._groq_test_done.connect(self._on_groq_test_done) self._or_test_done.connect(self._on_or_test_done) self.transcriber.progress.connect(self._on_file_progress) self.transcriber.finished.connect(self._on_file_finished) @@ -254,6 +259,16 @@ class SettingsWindow(QDialog): keys_form.addRow("OpenAI", self._row(self.openai_key, self.test_button)) keys_form.addRow("", self.test_label) + self.groq_key = QLineEdit() + self.groq_key.setEchoMode(QLineEdit.EchoMode.Password) + self.groq_key.setPlaceholderText(t("gsk_… (falls back to GROQ_API_KEY)")) + self.groq_test_button = QPushButton(t("Test")) + self.groq_test_button.clicked.connect(self._test_groq) + self.groq_test_label = QLabel("") + self.groq_test_label.setWordWrap(True) + keys_form.addRow("Groq", self._row(self.groq_key, self.groq_test_button)) + keys_form.addRow("", self.groq_test_label) + self.openrouter_key = QLineEdit() self.openrouter_key.setEchoMode(QLineEdit.EchoMode.Password) self.openrouter_key.setPlaceholderText(t("sk-or-… (falls back to OPENROUTER_API_KEY)")) @@ -368,7 +383,7 @@ class SettingsWindow(QDialog): how = QGroupBox(t("How it runs")) how_form = QFormLayout(how) self.assistant_shortcut = self._shortcut_box(t("none")) - install = QPushButton(t("Install as a KDE shortcut")) + install = QPushButton(t("Install as a global shortcut")) install.clicked.connect(self._install_ask_shortcut) remove = QPushButton(t("Remove")) remove.clicked.connect(self._remove_ask_shortcut) @@ -630,7 +645,7 @@ class SettingsWindow(QDialog): recording_form.addRow("", self.meeting_keep_audio) self.meeting_shortcut = self._shortcut_box(t("none")) - install = QPushButton(t("Install as a KDE shortcut")) + install = QPushButton(t("Install as a global shortcut")) install.clicked.connect(self._install_meeting_shortcut) remove = QPushButton(t("Remove")) remove.clicked.connect(self._remove_meeting_shortcut) @@ -784,7 +799,7 @@ class SettingsWindow(QDialog): form.addRow(t("Shortcut"), self.shortcut) layout.addLayout(form) - install = QPushButton(t("Install as a KDE shortcut")) + install = QPushButton(t("Install as a global shortcut")) install.clicked.connect(self._install_shortcut) remove = QPushButton(t("Remove")) remove.clicked.connect(self._remove_shortcut) @@ -920,8 +935,10 @@ class SettingsWindow(QDialog): self.keep_audio.setChecked(conf["keep_audio"]) self.openai_key.setText(conf["openai_api_key"]) + self.groq_key.setText(conf["groq_api_key"]) self.openrouter_key.setText(conf["openrouter_api_key"]) self._models = {"openai": conf["transcribe_model"], + "groq": conf["groq_transcribe_model"], "openrouter": conf["openrouter_transcribe_model"]} self._shown_provider = "" self._select_data(self.transcribe_provider, conf["transcribe_provider"]) @@ -1001,12 +1018,14 @@ class SettingsWindow(QDialog): conf["keep_audio"] = self.keep_audio.isChecked() conf["openai_api_key"] = self.openai_key.text().strip() + conf["groq_api_key"] = self.groq_key.text().strip() conf["openrouter_api_key"] = self.openrouter_key.text().strip() provider = self.transcribe_provider.currentData() or "openai" self._models[provider] = self.transcribe_model.currentText().strip() conf["transcribe_provider"] = provider for key, name in (("openai", "transcribe_model"), + ("groq", "groq_transcribe_model"), ("openrouter", "openrouter_transcribe_model")): conf[name] = self._models[key].strip() or cfg.DEFAULTS[name] @@ -1108,14 +1127,21 @@ class SettingsWindow(QDialog): self.refresh_transcribe_models.setEnabled(False) self.transcribe_status.setText(t("Fetching model list…")) openai_key = self.openai_key.text().strip() or self.conf.openai_key() + groq_key = self.groq_key.text().strip() or self.conf.groq_key() openrouter_key = self.openrouter_key.text().strip() or self.conf.openrouter_key() - base = self.conf["openai_base_url"] def work(): try: - models = (api.openrouter_models(openrouter_key, transcription=True) - if provider == "openrouter" - else api.openai_models(openai_key, base)) + if provider == "openrouter": + models = api.openrouter_models(openrouter_key, transcription=True) + elif provider == "groq": + models = api.openai_models( + groq_key, self.conf["groq_base_url"], "Groq" + ) + else: + models = api.openai_models( + openai_key, self.conf["openai_base_url"] + ) self._transcribe_models_loaded.emit(models, "") except api.ApiError as exc: self._transcribe_models_loaded.emit([], str(exc)) @@ -1188,6 +1214,25 @@ class SettingsWindow(QDialog): threading.Thread(target=work, daemon=True).start() + def _test_groq(self): + self.groq_test_button.setEnabled(False) + self.groq_test_label.setText(t("Trying…")) + key = self.groq_key.text().strip() or self.conf.groq_key() + + def work(): + try: + models = api.openai_models( + key, self.conf["groq_base_url"], "Groq" + ) + self._groq_test_done.emit( + True, t("Connection works. {count} audio models visible.", + count=len(models)) + ) + except api.ApiError as exc: + self._groq_test_done.emit(False, str(exc)) + + threading.Thread(target=work, daemon=True).start() + def _on_or_test_done(self, ok, message): self.or_test_button.setEnabled(True) self.or_test_label.setText(("✓ " if ok else "✗ ") + message) @@ -1196,6 +1241,10 @@ class SettingsWindow(QDialog): self.test_button.setEnabled(True) self.test_label.setText(("✓ " if ok else "✗ ") + message) + def _on_groq_test_done(self, ok, message): + self.groq_test_button.setEnabled(True) + self.groq_test_label.setText(("✓ " if ok else "✗ ") + message) + # ---- audio file ------------------------------------------------------ def _choose_file(self): @@ -1280,7 +1329,7 @@ class SettingsWindow(QDialog): def _install_shortcut(self): combo = self.shortcut.currentText().strip() or "Ctrl+Space" - clashes = hotkey.conflicting_shortcuts(combo) + clashes = hotkey.conflicting_shortcuts(combo) if hotkey.desktop_name() == "KDE" else [] if clashes: answer = QMessageBox.question( self, t("Shortcut conflict"), @@ -1289,7 +1338,7 @@ class SettingsWindow(QDialog): ) if answer != QMessageBox.StandardButton.Yes: return - ok, message = hotkey.install_kde_shortcut(combo, self.launch_command) + ok, message = hotkey.install_shortcut(combo, self.launch_command) QMessageBox.information(self, t("Shortcut"), message) if ok: self.conf["shortcut"] = combo @@ -1297,14 +1346,15 @@ class SettingsWindow(QDialog): self._refresh_shortcut_status() def _remove_shortcut(self): - hotkey.remove_kde_shortcut() + hotkey.remove_shortcut() self._refresh_shortcut_status() def _refresh_shortcut_status(self): - current = hotkey.kde_shortcut_status() + current = hotkey.shortcut_status() self.shortcut_status.setText( - t("Registered in KDE: {shortcut}", shortcut=current) if current - else t("No KDE shortcut installed.") + t("Registered in {desktop}: {shortcut}", + desktop=hotkey.desktop_name(), shortcut=current) if current + else t("No global shortcut installed.") ) def _install_meeting_shortcut(self): @@ -1322,7 +1372,7 @@ class SettingsWindow(QDialog): ) if answer != QMessageBox.StandardButton.Yes: return - ok, message = hotkey.install_kde_shortcut( + ok, message = hotkey.install_shortcut( combo, self.meeting_command, name="Dikte: start/end a meeting recording", desktop_id=hotkey.MEETING_DESKTOP_ID, ) @@ -1333,14 +1383,15 @@ class SettingsWindow(QDialog): self._refresh_meeting_shortcut_status() def _remove_meeting_shortcut(self): - hotkey.remove_kde_shortcut(hotkey.MEETING_DESKTOP_ID) + hotkey.remove_shortcut(hotkey.MEETING_DESKTOP_ID) self._refresh_meeting_shortcut_status() def _refresh_meeting_shortcut_status(self): - current = hotkey.kde_shortcut_status(hotkey.MEETING_DESKTOP_ID) + current = hotkey.shortcut_status(hotkey.MEETING_DESKTOP_ID) self.meeting_shortcut_status.setText( - t("Registered in KDE: {shortcut}", shortcut=current) if current - else t("No KDE shortcut installed. The tray menu starts a meeting too.") + t("Registered in {desktop}: {shortcut}", + desktop=hotkey.desktop_name(), shortcut=current) if current + else t("No global shortcut installed. The tray menu starts a meeting too.") ) # ---- Claude ---------------------------------------------------------- @@ -1360,7 +1411,7 @@ class SettingsWindow(QDialog): ) if answer != QMessageBox.StandardButton.Yes: return - ok, message = hotkey.install_kde_shortcut( + ok, message = hotkey.install_shortcut( combo, self.ask_command, name="Dikte: ask Claude Code", desktop_id=hotkey.ASK_DESKTOP_ID, ) @@ -1371,14 +1422,15 @@ class SettingsWindow(QDialog): self._refresh_ask_shortcut_status() def _remove_ask_shortcut(self): - hotkey.remove_kde_shortcut(hotkey.ASK_DESKTOP_ID) + hotkey.remove_shortcut(hotkey.ASK_DESKTOP_ID) self._refresh_ask_shortcut_status() def _refresh_ask_shortcut_status(self): - current = hotkey.kde_shortcut_status(hotkey.ASK_DESKTOP_ID) + current = hotkey.shortcut_status(hotkey.ASK_DESKTOP_ID) self.assistant_shortcut_status.setText( - t("Registered in KDE: {shortcut}", shortcut=current) if current - else t("No KDE shortcut installed. The tray menu asks it too.") + t("Registered in {desktop}: {shortcut}", + desktop=hotkey.desktop_name(), shortcut=current) if current + else t("No global shortcut installed. The tray menu asks it too.") ) def _assistant_provider_changed(self): diff --git a/tests/test_groq.py b/tests/test_groq.py new file mode 100644 index 0000000..3f15f06 --- /dev/null +++ b/tests/test_groq.py @@ -0,0 +1,37 @@ +import json +import pathlib +import tempfile +import unittest +from unittest import mock + +import api +import config +import settings_ui + + +class GroqCompatibilityTests(unittest.TestCase): + def test_old_config_gains_groq_defaults(self): + with tempfile.TemporaryDirectory() as directory: + path = pathlib.Path(directory) / "config.json" + path.write_text(json.dumps({"transcribe_provider": "openai"}), encoding="utf-8") + with mock.patch.object(config, "CONFIG_FILE", path): + conf = config.Config() + self.assertEqual(conf["groq_base_url"], api.GROQ_URL) + self.assertEqual(conf["groq_transcribe_model"], "whisper-large-v3-turbo") + + def test_groq_target_and_timestamp_model(self): + with mock.patch.object(config.Config, "load"): + conf = config.Config() + conf["transcribe_provider"] = "groq" + conf["groq_api_key"] = "test-key" + target = conf.transcribe_target() + self.assertEqual(target.provider, "groq") + self.assertEqual(target.base_url, api.GROQ_URL) + self.assertEqual(api.timestamp_model(target.provider, target.model), target.model) + + def test_groq_is_available_in_settings(self): + self.assertIn(("Groq", "groq"), settings_ui.TRANSCRIBE_PROVIDERS) + + +if __name__ == "__main__": + unittest.main() From d04efe235a852fc50447da4c5ff971a922ac411e Mon Sep 17 00:00:00 2001 From: yusufipk Date: Sat, 1 Aug 2026 22:09:41 +0700 Subject: [PATCH 02/13] Put the three providers in a table, and test the request rather than the list Reworked on top of master. The Groq request itself needed nothing beyond a key, a base URL and a model id, but two providers fit in an if and an else where three do not, and each one was written out four times: in transcribe_target(), in the key rows of the settings window, in save and in load. config.TRANSCRIBERS holds them now, one row each: the name the user sees and the three settings that keep its key, its endpoint and its model. The variable an empty key falls back to is the name of its setting, shouted. The provider box, save, load, `dikte models --provider` and `dikte test-key` all read that table, so a fourth provider is a row and a default rather than a branch in five files. The key field, its Test button and its answer line are built once and the three signals became one that carries which key was asked about. The tests moved into the files of the modules they cover and check what a provider actually changes: that the request goes to api.groq.com with the right model and fields, that the glossary now reaches everything except OpenRouter, that a Groq error says Groq, and that the settings window carries the key and the model there and back. GROQ_API_KEY is cleared for the test run like the other two, so a developer who has one does not send a test to the network. Co-authored-by: Muzaffer Emre --- CONTRIBUTING.md | 8 +- README.md | 8 +- README.tr.md | 7 +- api.py | 22 +++-- cli.py | 36 ++++---- config.py | 50 +++++++---- settings_ui.py | 206 ++++++++++++++++++------------------------- tests/__init__.py | 2 +- tests/test_api.py | 50 ++++++++++- tests/test_cli.py | 35 +++++++- tests/test_config.py | 19 ++++ tests/test_groq.py | 37 -------- tests/test_ui.py | 30 ++++++- 13 files changed, 298 insertions(+), 212 deletions(-) delete mode 100644 tests/test_groq.py diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5894a68..88c772d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -79,10 +79,10 @@ next port breaks all of them. ## What a pull request should carry -A change to behaviour comes with a test for it. Adding a provider means a test -that the request goes to the right URL with the right fields; adding a platform -means a test for whatever the parsing of its device list, clipboard or shortcuts -looks like. Adding a setting means both halves of `settings_ui.py`: the round +A change to behaviour comes with a test for it. Adding a provider means a row in +`config.TRANSCRIBERS` and a test that the request goes to the right URL with the +right fields; adding a platform means a test for whatever the parsing of its +device list, clipboard or shortcuts looks like. Adding a setting means both halves of `settings_ui.py`: the round trip in `tests/test_ui.py` is what catches only one of them being written. Match the surrounding code: it is plain Python with no framework, comments diff --git a/README.md b/README.md index 6be310e..c6f68ea 100644 --- a/README.md +++ b/README.md @@ -39,10 +39,10 @@ sudo apt install pulseaudio-utils xclip xdotool ffmpeg `install.sh` adds the `dikte` command, a menu entry and an autostart entry. The settings window installs a GNOME or KDE global shortcut. -The settings window accepts **OpenAI**, **Groq** and **OpenRouter** keys. Speech -to text runs on any of them (`gpt-4o-transcribe` by default), cleanup always on -OpenRouter (`google/gemini-3.5-flash-lite`), so a single OpenRouter key can -cover both. They fall back to `OPENAI_API_KEY`, `GROQ_API_KEY` and +Three keys go in the settings window: **OpenAI**, **Groq** and **OpenRouter**. +Speech to text runs on any of them (`gpt-4o-transcribe` by default), cleanup +always on OpenRouter (`google/gemini-3.5-flash-lite`), so a single OpenRouter key +can cover both. They fall back to `OPENAI_API_KEY`, `GROQ_API_KEY` and `OPENROUTER_API_KEY`, and are stored in `~/.config/dikte/config.json`, mode 600. Cleanup can be switched off, in which case the raw transcript is pasted, and a thinking model's effort can be diff --git a/README.tr.md b/README.tr.md index 2bf0335..de07629 100644 --- a/README.tr.md +++ b/README.tr.md @@ -39,11 +39,12 @@ sudo apt install pulseaudio-utils xclip xdotool ffmpeg `install.sh` `dikte` komutunu, menü girdisini ve oturum açılışında otomatik başlatmayı kurar. Ayarlar penceresi GNOME veya KDE global kısayolunu kurar. -Ayarlar penceresinde **OpenAI**, **Groq** ve **OpenRouter** anahtarları bulunur. -Sesi yazıya çevirme bunlardan birinde çalışır (varsayılan `gpt-4o-transcribe`), +Ayarlar penceresinde üç anahtar istenir: **OpenAI**, **Groq** ve **OpenRouter**. +Sesi yazıya çevirme üçünden birinde çalışır (varsayılan `gpt-4o-transcribe`), temizleme her zaman OpenRouter'da (`google/gemini-3.5-flash-lite`), yani tek bir OpenRouter anahtarı ikisine de yeter. Boş bırakırsan `OPENAI_API_KEY`, -`GROQ_API_KEY` ve `OPENROUTER_API_KEY` kullanılır; anahtarlar `~/.config/dikte/config.json` +`GROQ_API_KEY` ve `OPENROUTER_API_KEY` kullanılır; +anahtarlar `~/.config/dikte/config.json` içinde, izinler 600. Temizlemeyi tamamen kapatabilirsin, o zaman ham transkript yapıştırılır; modelin yanındaki kutudan düşünme seviyesini de seçebilirsin. diff --git a/api.py b/api.py index 139ea33..d022544 100644 --- a/api.py +++ b/api.py @@ -1,9 +1,9 @@ -"""OpenAI-compatible transcription and OpenRouter calls, stdlib only. +"""OpenAI, Groq and OpenRouter calls, stdlib only. -Transcription runs on either provider: OpenRouter mirrors OpenAI's +Transcription runs on any of the three: Groq and OpenRouter both mirror OpenAI's /audio/transcriptions endpoint field for field, so one multipart request serves -both and only the key, the base URL and the model id change. Cleanup is always -OpenRouter. +all of them and only the key, the base URL and the model id change. Cleanup is +always OpenRouter. """ import collections @@ -19,8 +19,8 @@ from i18n import t APP_URL = "https://github.com/yusufipk/dikte" USER_AGENT = f"dikte/1.0 (+{APP_URL})" OPENAI_URL = "https://api.openai.com/v1" -OPENROUTER_URL = "https://openrouter.ai/api/v1" GROQ_URL = "https://api.groq.com/openai/v1" +OPENROUTER_URL = "https://openrouter.ai/api/v1" # Where a transcription request goes; built by config.Config.transcribe_target(). # `service` is the name the user sees in an error, `provider` the one the code @@ -29,7 +29,12 @@ Target = collections.namedtuple("Target", "provider service api_key base_url mod def timestamp_model(provider, selected=""): - """Return a timestamp-capable model id for the selected provider.""" + """Which model answers with segment times. + + OpenAI keeps them to whisper-1 and OpenRouter namespaces that id. Everything + Groq transcribes with is a whisper, so the model already chosen does it and + the fallback is only for a provider left on its default. + """ if provider == "groq": return selected or "whisper-large-v3-turbo" return "openai/whisper-1" if provider == "openrouter" else "whisper-1" @@ -301,6 +306,11 @@ def openrouter_models(api_key="", transcription=False): def openai_models(api_key, base_url=OPENAI_URL, service="OpenAI"): + """The audio models of anything that speaks OpenAI's /models, Groq included. + + `service` is only the name an error is written in, so a Groq key that is + refused says Groq rather than OpenAI. + """ if not api_key: raise ApiError(t("{service} API key is empty. Add it in Settings.", service=service)) diff --git a/cli.py b/cli.py index facb667..b62047d 100644 --- a/cli.py +++ b/cli.py @@ -662,12 +662,14 @@ def cmd_devices(opts): def cmd_models(opts): conf = cfg.Config() + who = cfg.TRANSCRIBERS[opts.provider] try: - if opts.provider == "openai": - models = api.openai_models(conf.openai_key(), conf["openai_base_url"]) - else: + if opts.provider == "openrouter": models = api.openrouter_models(conf.openrouter_key(), transcription=opts.transcription) + else: + models = api.openai_models(conf.api_key(who.key), conf[who.url], + who.service) except api.ApiError as exc: return fail(opts, exc) return out(opts, {"ok": True, "provider": opts.provider, "models": models}, @@ -677,19 +679,21 @@ def cmd_models(opts): def cmd_test_key(opts): conf = cfg.Config() results = {} - if opts.which in ("openai", "all"): + for name, who in cfg.TRANSCRIBERS.items(): + if opts.which not in (name, "all"): + continue try: - count = len(api.openai_models(conf.openai_key(), conf["openai_base_url"])) - results["openai"] = {"ok": True, - "message": f"connection works, {count} models visible"} + if name == "openrouter": + # The one key that also pays for cleanup, so it reports credit + # rather than a model count. + message = api.openrouter_key_status(conf.openrouter_key()) + else: + count = len(api.openai_models(conf.api_key(who.key), conf[who.url], + who.service)) + message = f"connection works, {count} models visible" + results[name] = {"ok": True, "message": message} except api.ApiError as exc: - results["openai"] = {"ok": False, "message": str(exc)} - if opts.which in ("openrouter", "all"): - try: - results["openrouter"] = {"ok": True, - "message": api.openrouter_key_status(conf.openrouter_key())} - except api.ApiError as exc: - results["openrouter"] = {"ok": False, "message": str(exc)} + results[name] = {"ok": False, "message": str(exc)} everything_ok = all(item["ok"] for item in results.values()) lines = [f"{'✓' if item['ok'] else '✗'} {name}: {item['message']}" for name, item in results.items()] @@ -986,14 +990,14 @@ def build_parser(): # --- the machine ------------------------------------------------------ leaf(subs, "devices", "microphones and monitors").set_defaults(func=cmd_devices) models = leaf(subs, "models", "model ids a provider offers") - models.add_argument("--provider", choices=("openrouter", "openai"), + models.add_argument("--provider", choices=tuple(cfg.TRANSCRIBERS), default="openrouter") models.add_argument("--transcription", action="store_true", help="only the speech-to-text ones") models.set_defaults(func=cmd_models) test = leaf(subs, "test-key", "check the API keys") test.add_argument("which", nargs="?", default="all", - choices=("all", "openai", "openrouter")) + choices=("all", *cfg.TRANSCRIBERS)) test.set_defaults(func=cmd_test_key) leaf(subs, "doctor", "keys, programs, and what is missing").set_defaults(func=cmd_doctor) diff --git a/config.py b/config.py index fc113e3..1febe84 100644 --- a/config.py +++ b/config.py @@ -1,5 +1,6 @@ """Settings storage in ~/.config/dikte/config.json""" +import collections import hashlib import json import os @@ -367,7 +368,7 @@ DEFAULTS = { "groq_base_url": "https://api.groq.com/openai/v1", "openrouter_api_key": "", "openrouter_base_url": "https://openrouter.ai/api/v1", - "transcribe_provider": "openai", # openai | groq | openrouter + "transcribe_provider": "openai", # a key of TRANSCRIBERS "transcribe_model": "gpt-4o-transcribe", # used when provider is openai "groq_transcribe_model": "whisper-large-v3-turbo", "openrouter_transcribe_model": "openai/gpt-4o-transcribe", @@ -442,6 +443,22 @@ LEGACY_PROMPTS = { "154fc5aca1166f00eebda705f848f0391bfbf5fe", # 1.2 English } +# Every provider speech to text can run on, and the four settings that describe +# one. A fifth is a row here rather than another branch in transcribe_target(), +# another key row in the settings window and another line in save and load. The +# order is the order the provider box offers them in. `service` is the name the +# user sees; the environment variable that stands in for an empty key is the +# name of its setting, shouted. +Transcriber = collections.namedtuple("Transcriber", "service key url model") +TRANSCRIBERS = { + "openai": Transcriber("OpenAI", "openai_api_key", "openai_base_url", + "transcribe_model"), + "groq": Transcriber("Groq", "groq_api_key", "groq_base_url", + "groq_transcribe_model"), + "openrouter": Transcriber("OpenRouter", "openrouter_api_key", + "openrouter_base_url", "openrouter_transcribe_model"), +} + # Corners used to be stored with Turkish names. _CORNER_MIGRATION = { "sol-alt": "bottom-left", "sağ-alt": "bottom-right", @@ -490,28 +507,27 @@ class Config: def get(self, key, default=None): return self.data.get(key, DEFAULTS.get(key, default)) - def openai_key(self): - """Fall back to the environment when no key is stored.""" - return self["openai_api_key"].strip() or os.environ.get("OPENAI_API_KEY", "").strip() + def api_key(self, setting): + """A stored key, or the environment variable that shares its name.""" + return self[setting].strip() or os.environ.get(setting.upper(), "").strip() - def openrouter_key(self): - return self["openrouter_api_key"].strip() or os.environ.get("OPENROUTER_API_KEY", "").strip() + def openai_key(self): + return self.api_key("openai_api_key") def groq_key(self): - return self["groq_api_key"].strip() or os.environ.get("GROQ_API_KEY", "").strip() + return self.api_key("groq_api_key") + + def openrouter_key(self): + return self.api_key("openrouter_api_key") def transcribe_target(self): """Key, endpoint and model for whichever provider does speech to text.""" - if self["transcribe_provider"] == "openrouter": - return api.Target("openrouter", "OpenRouter", self.openrouter_key(), - self["openrouter_base_url"], - self["openrouter_transcribe_model"]) - if self["transcribe_provider"] == "groq": - return api.Target("groq", "Groq", self.groq_key(), - self["groq_base_url"], - self["groq_transcribe_model"]) - return api.Target("openai", "OpenAI", self.openai_key(), - self["openai_base_url"], self["transcribe_model"]) + name = self["transcribe_provider"] + if name not in TRANSCRIBERS: + name = DEFAULTS["transcribe_provider"] + who = TRANSCRIBERS[name] + return api.Target(name, who.service, self.api_key(who.key), + self[who.url], self[who.model]) def cleanup_prompt(self, with_timestamps=False, with_speakers=False, subtitles=False): diff --git a/settings_ui.py b/settings_ui.py index 9fbeda8..2bf1a9e 100644 --- a/settings_ui.py +++ b/settings_ui.py @@ -29,9 +29,8 @@ LANGUAGES = [ ("German", "de"), ("French", "fr"), ("Spanish", "es"), ("Arabic", "ar"), ] CORNERS = ["bottom-left", "bottom-right", "top-left", "top-right"] -TRANSCRIBE_PROVIDERS = [ - ("OpenAI", "openai"), ("Groq", "groq"), ("OpenRouter", "openrouter"), -] +# The provider box offers what config knows how to reach, in that order. +TRANSCRIBE_PROVIDERS = [(who.service, name) for name, who in cfg.TRANSCRIBERS.items()] # Starting points for the model box; "Fetch model list" replaces them with # whatever the provider offers today. TRANSCRIBE_MODELS = { @@ -111,9 +110,8 @@ class SettingsWindow(QDialog): _models_loaded = pyqtSignal(list, str) _transcribe_models_loaded = pyqtSignal(list, str) - _test_done = pyqtSignal(bool, str) - _groq_test_done = pyqtSignal(bool, str) - _or_test_done = pyqtSignal(bool, str) + # Which key was tested, whether it worked, and what to write under it. + _test_done = pyqtSignal(str, bool, str) def __init__(self, conf, launch_command, meeting_command=None, meetings=None, ask_command=None, parent=None): @@ -125,7 +123,9 @@ class SettingsWindow(QDialog): self.meetings = meetings # Each provider keeps its own transcription model, so switching the # provider back and forth never overwrites the other one's. - self._models = {"openai": "", "groq": "", "openrouter": ""} + self._models = dict.fromkeys(cfg.TRANSCRIBERS, "") + self._key_fields = {} + self._testers = {} self._shown_provider = "" self.transcriber = FileTranscriber(conf, self) self.setWindowTitle(t("Dikte Settings")) @@ -156,8 +156,6 @@ class SettingsWindow(QDialog): self._models_loaded.connect(self._on_models_loaded) self._transcribe_models_loaded.connect(self._on_transcribe_models_loaded) self._test_done.connect(self._on_test_done) - self._groq_test_done.connect(self._on_groq_test_done) - self._or_test_done.connect(self._on_or_test_done) self.transcriber.progress.connect(self._on_file_progress) self.transcriber.finished.connect(self._on_file_finished) self.transcriber.failed.connect(self._on_file_failed) @@ -249,35 +247,15 @@ class SettingsWindow(QDialog): # them and a key no longer belongs to a single job. keys = QGroupBox(t("Keys")) keys_form = QFormLayout(keys) - self.openai_key = QLineEdit() - self.openai_key.setEchoMode(QLineEdit.EchoMode.Password) - self.openai_key.setPlaceholderText(t("sk-… (falls back to OPENAI_API_KEY)")) - self.test_button = QPushButton(t("Test")) - self.test_button.clicked.connect(self._test_openai) - self.test_label = QLabel("") - self.test_label.setWordWrap(True) - keys_form.addRow("OpenAI", self._row(self.openai_key, self.test_button)) - keys_form.addRow("", self.test_label) - - self.groq_key = QLineEdit() - self.groq_key.setEchoMode(QLineEdit.EchoMode.Password) - self.groq_key.setPlaceholderText(t("gsk_… (falls back to GROQ_API_KEY)")) - self.groq_test_button = QPushButton(t("Test")) - self.groq_test_button.clicked.connect(self._test_groq) - self.groq_test_label = QLabel("") - self.groq_test_label.setWordWrap(True) - keys_form.addRow("Groq", self._row(self.groq_key, self.groq_test_button)) - keys_form.addRow("", self.groq_test_label) - - self.openrouter_key = QLineEdit() - self.openrouter_key.setEchoMode(QLineEdit.EchoMode.Password) - self.openrouter_key.setPlaceholderText(t("sk-or-… (falls back to OPENROUTER_API_KEY)")) - self.or_test_button = QPushButton(t("Test")) - self.or_test_button.clicked.connect(self._test_openrouter) - self.or_test_label = QLabel("") - self.or_test_label.setWordWrap(True) - keys_form.addRow("OpenRouter", self._row(self.openrouter_key, self.or_test_button)) - keys_form.addRow("", self.or_test_label) + self.openai_key = self._key_row( + keys_form, "openai", t("sk-… (falls back to OPENAI_API_KEY)"), + self._test_openai) + self.groq_key = self._key_row( + keys_form, "groq", t("gsk_… (falls back to GROQ_API_KEY)"), + self._test_groq) + self.openrouter_key = self._key_row( + keys_form, "openrouter", t("sk-or-… (falls back to OPENROUTER_API_KEY)"), + self._test_openrouter) outer.addWidget(keys) stt = QGroupBox(t("Speech to text")) @@ -383,7 +361,7 @@ class SettingsWindow(QDialog): how = QGroupBox(t("How it runs")) how_form = QFormLayout(how) self.assistant_shortcut = self._shortcut_box(t("none")) - install = QPushButton(t("Install as a global shortcut")) + install = QPushButton(t("Install as a KDE shortcut")) install.clicked.connect(self._install_ask_shortcut) remove = QPushButton(t("Remove")) remove.clicked.connect(self._remove_ask_shortcut) @@ -645,7 +623,7 @@ class SettingsWindow(QDialog): recording_form.addRow("", self.meeting_keep_audio) self.meeting_shortcut = self._shortcut_box(t("none")) - install = QPushButton(t("Install as a global shortcut")) + install = QPushButton(t("Install as a KDE shortcut")) install.clicked.connect(self._install_meeting_shortcut) remove = QPushButton(t("Remove")) remove.clicked.connect(self._remove_meeting_shortcut) @@ -799,7 +777,7 @@ class SettingsWindow(QDialog): form.addRow(t("Shortcut"), self.shortcut) layout.addLayout(form) - install = QPushButton(t("Install as a global shortcut")) + install = QPushButton(t("Install as a KDE shortcut")) install.clicked.connect(self._install_shortcut) remove = QPushButton(t("Remove")) remove.clicked.connect(self._remove_shortcut) @@ -906,6 +884,26 @@ class SettingsWindow(QDialog): box.lineEdit().setPlaceholderText(placeholder) return box + def _key_row(self, form, provider, placeholder, tester): + """A key field, its Test button and the line the answer lands on. + + The field and the pair the answer needs are filed under the provider's + name, so saving, loading and the test handler find them by name rather + than through three attributes each. + """ + field = QLineEdit() + field.setEchoMode(QLineEdit.EchoMode.Password) + field.setPlaceholderText(placeholder) + button = QPushButton(t("Test")) + button.clicked.connect(tester) + answer = QLabel("") + answer.setWordWrap(True) + form.addRow(cfg.TRANSCRIBERS[provider].service, self._row(field, button)) + form.addRow("", answer) + self._key_fields[provider] = field + self._testers[provider] = (button, answer) + return field + @staticmethod def _row(*widgets): """Widgets side by side in one form row; the first one takes the space.""" @@ -934,12 +932,9 @@ class SettingsWindow(QDialog): self.filter_hallucinations.setChecked(conf["filter_hallucinations"]) self.keep_audio.setChecked(conf["keep_audio"]) - self.openai_key.setText(conf["openai_api_key"]) - self.groq_key.setText(conf["groq_api_key"]) - self.openrouter_key.setText(conf["openrouter_api_key"]) - self._models = {"openai": conf["transcribe_model"], - "groq": conf["groq_transcribe_model"], - "openrouter": conf["openrouter_transcribe_model"]} + for name, who in cfg.TRANSCRIBERS.items(): + self._key_fields[name].setText(conf[who.key]) + self._models[name] = conf[who.model] self._shown_provider = "" self._select_data(self.transcribe_provider, conf["transcribe_provider"]) self._provider_changed() # selecting index 0 fires no signal @@ -1017,17 +1012,12 @@ class SettingsWindow(QDialog): conf["filter_hallucinations"] = self.filter_hallucinations.isChecked() conf["keep_audio"] = self.keep_audio.isChecked() - conf["openai_api_key"] = self.openai_key.text().strip() - conf["groq_api_key"] = self.groq_key.text().strip() - conf["openrouter_api_key"] = self.openrouter_key.text().strip() - provider = self.transcribe_provider.currentData() or "openai" self._models[provider] = self.transcribe_model.currentText().strip() conf["transcribe_provider"] = provider - for key, name in (("openai", "transcribe_model"), - ("groq", "groq_transcribe_model"), - ("openrouter", "openrouter_transcribe_model")): - conf[name] = self._models[key].strip() or cfg.DEFAULTS[name] + for name, who in cfg.TRANSCRIBERS.items(): + conf[who.key] = self._key_fields[name].text().strip() + conf[who.model] = self._models[name].strip() or cfg.DEFAULTS[who.model] conf["cleanup_enabled"] = self.cleanup_enabled.isChecked() conf["cleanup_model"] = self.cleanup_model.currentText().strip() @@ -1126,22 +1116,14 @@ class SettingsWindow(QDialog): provider = self.transcribe_provider.currentData() or "openai" self.refresh_transcribe_models.setEnabled(False) self.transcribe_status.setText(t("Fetching model list…")) - openai_key = self.openai_key.text().strip() or self.conf.openai_key() - groq_key = self.groq_key.text().strip() or self.conf.groq_key() - openrouter_key = self.openrouter_key.text().strip() or self.conf.openrouter_key() + key, base = self._typed_key(provider) + service = cfg.TRANSCRIBERS[provider].service def work(): try: - if provider == "openrouter": - models = api.openrouter_models(openrouter_key, transcription=True) - elif provider == "groq": - models = api.openai_models( - groq_key, self.conf["groq_base_url"], "Groq" - ) - else: - models = api.openai_models( - openai_key, self.conf["openai_base_url"] - ) + models = (api.openrouter_models(key, transcription=True) + if provider == "openrouter" + else api.openai_models(key, base, service)) self._transcribe_models_loaded.emit(models, "") except api.ApiError as exc: self._transcribe_models_loaded.emit([], str(exc)) @@ -1185,65 +1167,51 @@ class SettingsWindow(QDialog): self.models_label.setText(t("{count} models loaded.", count=len(models))) def _test_openai(self): - self.test_button.setEnabled(False) - self.test_label.setText(t("Trying…")) - key = self.openai_key.text().strip() or self.conf.openai_key() - base = self.conf["openai_base_url"] - - def work(): - try: - models = api.openai_models(key, base) - self._test_done.emit( - True, t("Connection works. {count} audio models visible.", count=len(models)) - ) - except api.ApiError as exc: - self._test_done.emit(False, str(exc)) - - threading.Thread(target=work, daemon=True).start() - - def _test_openrouter(self): - self.or_test_button.setEnabled(False) - self.or_test_label.setText(t("Trying…")) - key = self.openrouter_key.text().strip() or self.conf.openrouter_key() - - def work(): - try: - self._or_test_done.emit(True, api.openrouter_key_status(key)) - except api.ApiError as exc: - self._or_test_done.emit(False, str(exc)) - - threading.Thread(target=work, daemon=True).start() + key, base = self._typed_key("openai") + self._test_key("openai", lambda: t( + "Connection works. {count} audio models visible.", + count=len(api.openai_models(key, base)), + )) def _test_groq(self): - self.groq_test_button.setEnabled(False) - self.groq_test_label.setText(t("Trying…")) - key = self.groq_key.text().strip() or self.conf.groq_key() + key, base = self._typed_key("groq") + self._test_key("groq", lambda: t( + "Connection works. {count} audio models visible.", + count=len(api.openai_models(key, base, cfg.TRANSCRIBERS["groq"].service)), + )) + + def _test_openrouter(self): + key, _ = self._typed_key("openrouter") + self._test_key("openrouter", lambda: api.openrouter_key_status(key)) + + def _typed_key(self, provider): + """(key, base URL) for a provider, preferring what is in the field now.""" + who = cfg.TRANSCRIBERS[provider] + typed = self._key_fields[provider].text().strip() + return typed or self.conf.api_key(who.key), self.conf[who.url] + + def _test_key(self, provider, ask): + """Run `ask` off the interface thread and write its answer under the key. + + `ask` returns the line to show, or raises ApiError with the line to show + instead; either way it is read from a field before the thread starts. + """ + button, answer = self._testers[provider] + button.setEnabled(False) + answer.setText(t("Trying…")) def work(): try: - models = api.openai_models( - key, self.conf["groq_base_url"], "Groq" - ) - self._groq_test_done.emit( - True, t("Connection works. {count} audio models visible.", - count=len(models)) - ) + self._test_done.emit(provider, True, ask()) except api.ApiError as exc: - self._groq_test_done.emit(False, str(exc)) + self._test_done.emit(provider, False, str(exc)) threading.Thread(target=work, daemon=True).start() - def _on_or_test_done(self, ok, message): - self.or_test_button.setEnabled(True) - self.or_test_label.setText(("✓ " if ok else "✗ ") + message) - - def _on_test_done(self, ok, message): - self.test_button.setEnabled(True) - self.test_label.setText(("✓ " if ok else "✗ ") + message) - - def _on_groq_test_done(self, ok, message): - self.groq_test_button.setEnabled(True) - self.groq_test_label.setText(("✓ " if ok else "✗ ") + message) + def _on_test_done(self, provider, ok, message): + button, answer = self._testers[provider] + button.setEnabled(True) + answer.setText(("✓ " if ok else "✗ ") + message) # ---- audio file ------------------------------------------------------ @@ -1329,7 +1297,7 @@ class SettingsWindow(QDialog): def _install_shortcut(self): combo = self.shortcut.currentText().strip() or "Ctrl+Space" - clashes = hotkey.conflicting_shortcuts(combo) if hotkey.desktop_name() == "KDE" else [] + clashes = hotkey.conflicting_shortcuts(combo) if clashes: answer = QMessageBox.question( self, t("Shortcut conflict"), diff --git a/tests/__init__.py b/tests/__init__.py index d422cec..e83e504 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -22,7 +22,7 @@ atexit.register(shutil.rmtree, _SANDBOX, True) # A key sitting in the environment would otherwise reach the code that falls # back to it, and the tests for "there is no key" would pass only on a machine # without one. -for _var in ("OPENAI_API_KEY", "OPENROUTER_API_KEY"): +for _var in ("OPENAI_API_KEY", "GROQ_API_KEY", "OPENROUTER_API_KEY"): os.environ.pop(_var, None) # The interface language leaks through module-level state, so the tests fix it diff --git a/tests/test_api.py b/tests/test_api.py index 30e7e3e..2a8730e 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -21,6 +21,7 @@ from tests.support import ( ) OPENAI = api.Target("openai", "OpenAI", "sk-test", api.OPENAI_URL, "gpt-4o-transcribe") +GROQ = api.Target("groq", "Groq", "gsk-test", api.GROQ_URL, "whisper-large-v3-turbo") OPENROUTER = api.Target("openrouter", "OpenRouter", "sk-or-test", api.OPENROUTER_URL, "openai/gpt-4o-transcribe") @@ -32,6 +33,18 @@ class TimestampModel(unittest.TestCase): def test_openrouter_namespaces_the_id(self): self.assertEqual(api.timestamp_model("openrouter"), "openai/whisper-1") + def test_groq_keeps_the_model_that_was_chosen(self): + """Every model it transcribes with is a whisper, so all of them do times.""" + self.assertEqual(api.timestamp_model("groq", "whisper-large-v3"), + "whisper-large-v3") + + def test_groq_with_nothing_chosen_falls_back(self): + self.assertEqual(api.timestamp_model("groq"), "whisper-large-v3-turbo") + + def test_the_others_ignore_what_was_chosen(self): + self.assertEqual(api.timestamp_model("openai", "gpt-4o-transcribe"), + "whisper-1") + class Explain(DikteTest): def error(self, status): @@ -176,13 +189,28 @@ class Transcribe(DikteTest): self.assertEqual(multipart_fields(calls[0])["language"], "tr") self.assertNotIn("language", multipart_fields(calls[1])) - def test_the_glossary_goes_to_openai_only(self): + def test_the_glossary_goes_everywhere_but_openrouter(self): """OpenRouter takes the field and throws it away, so spare it the bytes.""" with fake_urlopen({"text": "hi"}) as calls: api.transcribe(OPENAI, self.wav, prompt="Paraşüt, OpenFrame") + api.transcribe(GROQ, self.wav, prompt="Paraşüt, OpenFrame") api.transcribe(OPENROUTER, self.wav, prompt="Paraşüt, OpenFrame") self.assertIn("prompt", multipart_fields(calls[0])) - self.assertNotIn("prompt", multipart_fields(calls[1])) + self.assertIn("prompt", multipart_fields(calls[1])) + self.assertNotIn("prompt", multipart_fields(calls[2])) + + def test_groq_goes_to_groq(self): + with fake_urlopen({"text": "hi"}) as calls: + api.transcribe(GROQ, self.wav) + self.assertEqual(calls[0].full_url, + "https://api.groq.com/openai/v1/audio/transcriptions") + self.assertEqual(multipart_fields(calls[0])["model"], "whisper-large-v3-turbo") + + def test_a_refused_groq_key_is_explained_in_groq_s_name(self): + with fake_urlopen(http_error(401, '{"error": {"message": "bad key"}}')), \ + self.assertRaises(api.ApiError) as caught: + api.transcribe(GROQ, self.wav) + self.assertIn("Groq", str(caught.exception)) def test_openrouter_is_attributed(self): with fake_urlopen({"text": "hi"}) as calls: @@ -242,6 +270,12 @@ class TranscribeSegments(DikteTest): api.transcribe_segments(OPENROUTER, self.wav) self.assertEqual(multipart_fields(calls[0])["model"], "openai/whisper-1") + def test_groq_stays_on_the_model_it_was_given(self): + target = GROQ._replace(model="whisper-large-v3") + with fake_urlopen(self.reply([{"start": 0, "end": 1, "text": "hi"}])) as calls: + api.transcribe_segments(target, self.wav) + self.assertEqual(multipart_fields(calls[0])["model"], "whisper-large-v3") + def test_the_segments_come_back_as_numbers(self): with fake_urlopen(self.reply([ {"start": "0.5", "end": "2.25", "text": " hello "}, @@ -432,6 +466,18 @@ class ModelLists(DikteTest): with self.assertRaises(api.ApiError): api.openai_models("") + def test_the_same_list_read_from_groq(self): + with fake_urlopen({"data": [{"id": "llama-3.3-70b"}, + {"id": "whisper-large-v3"}]}) as calls: + models = api.openai_models("gsk-test", api.GROQ_URL, "Groq") + self.assertEqual(calls[0].full_url, "https://api.groq.com/openai/v1/models") + self.assertEqual(models, ["whisper-large-v3"]) + + def test_a_missing_groq_key_says_groq(self): + with self.assertRaises(api.ApiError) as caught: + api.openai_models("", api.GROQ_URL, "Groq") + self.assertIn("Groq", str(caught.exception)) + if __name__ == "__main__": unittest.main() diff --git a/tests/test_cli.py b/tests/test_cli.py index 98145c3..9a11a46 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -15,7 +15,7 @@ from unittest import mock import cli import config as cfg import ipc -from tests.support import DikteTest +from tests.support import DikteTest, fake_urlopen class Options: @@ -316,6 +316,39 @@ class ConfigCommands(DikteTest): {"cleanup", "subtitles", "meeting", "agent"}) +class Providers(DikteTest): + """The terminal reaches every provider the settings window does.""" + + def run_cmd(self, func, **values): + with captured() as (out, err): + code = func(Options(**values)) + return code, out.getvalue(), err.getvalue() + + def test_a_provider_the_settings_window_offers_is_a_choice_here_too(self): + parser = cli.build_parser() + for provider in cfg.TRANSCRIBERS: + with self.subTest(provider=provider): + opts = parser.parse_args(["models", "--provider", provider]) + self.assertEqual(opts.provider, provider) + self.assertEqual(parser.parse_args(["test-key", provider]).which, + provider) + + def test_the_model_list_is_read_from_the_chosen_provider(self): + self.write_config({"groq_api_key": "gsk-test"}) + with fake_urlopen({"data": [{"id": "whisper-large-v3"}]}) as calls: + code, out, _ = self.run_cmd(cli.cmd_models, provider="groq", + transcription=False) + self.assertEqual(code, 0) + self.assertEqual(calls[0].full_url, "https://api.groq.com/openai/v1/models") + self.assertEqual(out.strip(), "whisper-large-v3") + + def test_a_key_that_is_not_there_is_reported_under_its_own_name(self): + code, out, _ = self.run_cmd(cli.cmd_test_key, which="groq") + self.assertEqual(code, 1) + self.assertIn("groq", out) + self.assertIn("Groq", out) + + class Finding(DikteTest): def test_no_history_at_all(self): self.assertIsNone(cli._find_history("last")) diff --git a/tests/test_config.py b/tests/test_config.py index 7120a0c..fa7c2c4 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -125,6 +125,10 @@ class Keys(DikteTest): def test_no_key_anywhere(self): self.assertEqual(cfg.Config().openai_key(), "") + def test_every_provider_falls_back_to_the_variable_of_its_own_name(self): + with mock.patch.dict(os.environ, {"GROQ_API_KEY": "gsk-env"}): + self.assertEqual(cfg.Config().groq_key(), "gsk-env") + class TranscribeTarget(DikteTest): def test_openai_by_default(self): @@ -145,6 +149,21 @@ class TranscribeTarget(DikteTest): self.assertEqual(target.api_key, "sk-or-test") self.assertEqual(target.model, "openai/whisper-1") + def test_groq_when_it_is_picked(self): + conf = self.config(transcribe_provider="groq", groq_api_key="gsk-test", + groq_transcribe_model="whisper-large-v3") + target = conf.transcribe_target() + self.assertEqual(target.provider, "groq") + self.assertEqual(target.service, "Groq") + self.assertEqual(target.api_key, "gsk-test") + self.assertEqual(target.base_url, api.GROQ_URL) + self.assertEqual(target.model, "whisper-large-v3") + + def test_a_provider_this_version_has_never_heard_of(self): + """A config written by a fork, or by a version that dropped one.""" + target = self.config(transcribe_provider="deepgram").transcribe_target() + self.assertEqual(target.provider, "openai") + def test_a_self_hosted_endpoint(self): conf = self.config(openai_base_url="http://localhost:8080/v1") self.assertEqual(conf.transcribe_target().base_url, "http://localhost:8080/v1") diff --git a/tests/test_groq.py b/tests/test_groq.py deleted file mode 100644 index 3f15f06..0000000 --- a/tests/test_groq.py +++ /dev/null @@ -1,37 +0,0 @@ -import json -import pathlib -import tempfile -import unittest -from unittest import mock - -import api -import config -import settings_ui - - -class GroqCompatibilityTests(unittest.TestCase): - def test_old_config_gains_groq_defaults(self): - with tempfile.TemporaryDirectory() as directory: - path = pathlib.Path(directory) / "config.json" - path.write_text(json.dumps({"transcribe_provider": "openai"}), encoding="utf-8") - with mock.patch.object(config, "CONFIG_FILE", path): - conf = config.Config() - self.assertEqual(conf["groq_base_url"], api.GROQ_URL) - self.assertEqual(conf["groq_transcribe_model"], "whisper-large-v3-turbo") - - def test_groq_target_and_timestamp_model(self): - with mock.patch.object(config.Config, "load"): - conf = config.Config() - conf["transcribe_provider"] = "groq" - conf["groq_api_key"] = "test-key" - target = conf.transcribe_target() - self.assertEqual(target.provider, "groq") - self.assertEqual(target.base_url, api.GROQ_URL) - self.assertEqual(api.timestamp_model(target.provider, target.model), target.model) - - def test_groq_is_available_in_settings(self): - self.assertIn(("Groq", "groq"), settings_ui.TRANSCRIBE_PROVIDERS) - - -if __name__ == "__main__": - unittest.main() diff --git a/tests/test_ui.py b/tests/test_ui.py index a616e94..5ca37b2 100644 --- a/tests/test_ui.py +++ b/tests/test_ui.py @@ -36,9 +36,11 @@ CHANGED = { "filter_hallucinations": False, "keep_audio": True, "openai_api_key": "sk-test-key", + "groq_api_key": "gsk-test-key", "openrouter_api_key": "sk-or-test-key", "transcribe_provider": "openrouter", "transcribe_model": "whisper-1", + "groq_transcribe_model": "whisper-large-v3", "openrouter_transcribe_model": "openai/whisper-1", "cleanup_enabled": False, "cleanup_model": "some/other-model", @@ -145,14 +147,38 @@ class Settings(DikteTest): def test_each_provider_keeps_its_own_transcription_model(self): self.write_config({"transcribe_provider": "openai", "transcribe_model": "gpt-4o-transcribe", + "groq_transcribe_model": "whisper-large-v3", "openrouter_transcribe_model": "openai/whisper-1"}) conf = cfg.Config() window = self.window(conf) - window.transcribe_provider.setCurrentIndex( - window.transcribe_provider.findData("openrouter")) + for provider in ("groq", "openrouter"): + window.transcribe_provider.setCurrentIndex( + window.transcribe_provider.findData(provider)) window._save() self.assertEqual(conf["transcribe_provider"], "openrouter") self.assertEqual(conf["transcribe_model"], "gpt-4o-transcribe") + self.assertEqual(conf["groq_transcribe_model"], "whisper-large-v3") + + def test_the_provider_box_offers_every_provider_config_knows(self): + window = self.window(cfg.Config()) + offered = [window.transcribe_provider.itemData(i) + for i in range(window.transcribe_provider.count())] + self.assertEqual(offered, list(cfg.TRANSCRIBERS)) + + def test_the_answer_to_a_test_lands_under_the_key_it_was_asked_about(self): + """One signal serves all three buttons, so it carries which one asked.""" + window = self.window(cfg.Config()) + window._on_test_done("groq", True, "it works") + button, answer = window._testers["groq"] + self.assertEqual(answer.text(), "✓ it works") + self.assertTrue(button.isEnabled()) + self.assertEqual(window._testers["openai"][1].text(), "") + + def test_a_key_lands_in_the_field_of_its_own_provider(self): + self.write_config({"groq_api_key": "gsk-mine"}) + window = self.window(cfg.Config()) + self.assertEqual(window.groq_key.text(), "gsk-mine") + self.assertEqual(window.openai_key.text(), "") def test_saving_applies_the_lowered_history_limit_at_once(self): for index in range(10): From 3486892ec67903b7018be13aaa57820ab1446505 Mon Sep 17 00:00:00 2001 From: yusufipk Date: Sat, 1 Aug 2026 18:55:10 +0300 Subject: [PATCH 03/13] Give throwing a recording away a key of its own Stopping a recording is the step there is no taking back. It is what sends the audio off, and a moment later the sentence you did not mean to dictate is in the clipboard and pasted into whatever window you were typing in. The tray menu was the only way out, and by the time it is open the recording has already gone. Discarding needed to be as quick as starting, which means a key. Ctrl+Alt+Space rather than Escape: the combination the recording started with, one modifier along, so the two are one gesture with a modifier between them. Escape is the obvious choice and the wrong one, because it belongs to whichever window has focus, and while you are talking something else usually has it. It works on a dictation and on a command for the agent alike, since the one you want to take back is the one that is running. That made four global shortcuts, and four is the number at which three copies of the same forty lines stop being a coincidence. The command line already had a table of them; hotkey.py now holds it, and the settings window reads it too, so a shortcut is a row rather than a combination box, two buttons, a status label and three methods written out again. The window no longer takes the commands to run as arguments either, because ipc.command_for already knows them from the verb. Adding the fourth key is what this buys: one line in the table and one call per row. Both places a key can live are told about it. The listener catching the press and the KDE shortcut arriving behind it go through the same echo guard the toggle already had, so the two are one discard rather than two, and the tray calls the inner method as it already did for the toggle. Ctrl+Space and Ctrl+Alt+Space land on the same evdev key code, so there is a test for the modifier matching that keeps them apart. install.sh takes the second key as a second argument and refuses to register two of the same. It hands both to `dikte shortcut install` rather than writing kglobalshortcutsrc itself, which is what makes it work on GNOME, and what finally puts the chosen key in the settings as well: the built-in listener reads it from there, so a key written to only one of the two places was a key that half worked. Left empty in the settings window the discard key stays empty, unlike the dictation shortcut which falls back to Ctrl+Space: a recording can always be thrown away from the tray menu, so there is nothing to guarantee here. --- README.md | 14 +-- README.tr.md | 14 +-- cli.py | 34 +++---- config.py | 4 + dikte.py | 39 +++----- hotkey.py | 41 ++++++-- i18n.py | 10 +- install.sh | 62 +++++++----- settings_ui.py | 222 ++++++++++++++++--------------------------- tests/test_cli.py | 17 ++++ tests/test_hotkey.py | 40 ++++++++ tests/test_ui.py | 35 ++++++- 12 files changed, 302 insertions(+), 230 deletions(-) diff --git a/README.md b/README.md index c6f68ea..c8196a4 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ just the Python standard library and PyQt6. sudo pacman -S --needed pipewire-audio wl-clipboard ydotool ffmpeg python-pyqt6 systemctl --user enable --now ydotool # needed for auto-paste -./install.sh # or: ./install.sh "Ctrl+Alt+Space" +./install.sh # or: ./install.sh "Meta+Space" "Meta+Shift+Space" dikte # the settings window opens on first run ``` @@ -36,8 +36,8 @@ tools instead: sudo apt install pulseaudio-utils xclip xdotool ffmpeg ``` -`install.sh` adds the `dikte` command, a menu entry and an autostart entry. The -settings window installs a GNOME or KDE global shortcut. +`install.sh` adds the `dikte` command, a menu entry, an autostart entry and the +two global shortcuts, whose keys are its two arguments. Three keys go in the settings window: **OpenAI**, **Groq** and **OpenRouter**. Speech to text runs on any of them (`gpt-4o-transcribe` by default), cleanup @@ -53,7 +53,7 @@ set next to it. | What | How | | --- | --- | | Start / stop recording | `Ctrl+Space`, or click the tray icon | -| Cancel a recording | Tray menu → *Cancel recording*, or `dikte cancel` | +| Discard the recording | `Ctrl+Alt+Space`, tray menu, or `dikte cancel` | | Speak a command to an agent | Tray menu → *Ask Claude*, or `dikte ask` | | Start / end a meeting | Tray menu → *Record a meeting*, or `dikte meeting` | | Settings | Tray menu → *Settings*, or `dikte settings` | @@ -127,11 +127,11 @@ running. right-click to delete. - **Turkish and English interface**, following the system locale by default. -## The global shortcut needs one logout +## The global shortcuts need one logout -KWin only reads `kglobalshortcutsrc` at startup, so the shortcut `install.sh` +KWin only reads `kglobalshortcutsrc` at startup, so the shortcuts `install.sh` writes will not fire until you log out and back in. Until then, Settings → -Shortcut → **built-in listener** reads `/dev/input` and catches the combination +Shortcuts → **built-in listener** reads `/dev/input` and catches the combination itself. The difference: it does not swallow the key, so `Ctrl+Space` also reaches the focused application (some editors will pop up autocomplete). The listener needs your user in the `input` group: `sudo usermod -aG input $USER`. diff --git a/README.tr.md b/README.tr.md index de07629..cfb503c 100644 --- a/README.tr.md +++ b/README.tr.md @@ -25,7 +25,7 @@ sadece Python standart kütüphanesi ve PyQt6. sudo pacman -S --needed pipewire-audio wl-clipboard ydotool ffmpeg python-pyqt6 systemctl --user enable --now ydotool # otomatik yapıştırma için -./install.sh # ya da: ./install.sh "Ctrl+Alt+Space" +./install.sh # ya da: ./install.sh "Meta+Space" "Meta+Shift+Space" dikte # ilk açılışta ayarlar penceresi gelir ``` @@ -36,8 +36,8 @@ araçlarıyla çalışır: sudo apt install pulseaudio-utils xclip xdotool ffmpeg ``` -`install.sh` `dikte` komutunu, menü girdisini ve oturum açılışında otomatik -başlatmayı kurar. Ayarlar penceresi GNOME veya KDE global kısayolunu kurar. +`install.sh` `dikte` komutunu, menü girdisini, oturum açılışında otomatik +başlatmayı ve iki global kısayolu kurar; tuşları da iki argümanı. Ayarlar penceresinde üç anahtar istenir: **OpenAI**, **Groq** ve **OpenRouter**. Sesi yazıya çevirme üçünden birinde çalışır (varsayılan `gpt-4o-transcribe`), @@ -53,7 +53,7 @@ yapıştırılır; modelin yanındaki kutudan düşünme seviyesini de seçebili | Ne | Nasıl | | --- | --- | | Kaydı başlat / bitir | `Ctrl+Space`, ya da tepsi simgesine tıkla | -| Kaydı iptal et | Tepsi menüsü → *Kaydı iptal et*, ya da `dikte cancel` | +| Kaydı iptal et | `Ctrl+Alt+Space`, tepsi menüsü, ya da `dikte cancel` | | Ajana sesle komut ver | Tepsi menüsü → *Claude'a sor*, ya da `dikte ask` | | Toplantıyı başlat / bitir | Tepsi menüsü → *Toplantı kaydet*, ya da `dikte meeting` | | Ayarlar | Tepsi menüsü → *Ayarlar*, ya da `dikte settings` | @@ -125,11 +125,11 @@ olmasını ister. silebilirsin. - **Türkçe ve İngilizce arayüz**, varsayılan olarak sistem dilini izler. -## Global kısayol için bir kez oturum kapatmak gerekir +## Global kısayollar için bir kez oturum kapatmak gerekir KWin `kglobalshortcutsrc` dosyasını yalnızca açılışta okur, yani `install.sh`'ın -yazdığı kısayol oturumu yeniden açana kadar tetiklenmez. O zamana kadar Ayarlar → -Kısayol → **yerleşik dinleyici** `/dev/input` üzerinden kombinasyonu kendisi +yazdığı kısayollar oturumu yeniden açana kadar tetiklenmez. O zamana kadar Ayarlar → +Kısayollar → **yerleşik dinleyici** `/dev/input` üzerinden kombinasyonu kendisi yakalar. Tek farkı: tuşu yutmaz, yani `Ctrl+Space` odaktaki uygulamaya da iletilir (bazı editörlerde otomatik tamamlama açılabilir). Dinleyici kullanıcının `input` grubunda olmasını gerektirir: `sudo usermod -aG input $USER`. diff --git a/cli.py b/cli.py index b62047d..d907537 100644 --- a/cli.py +++ b/cli.py @@ -44,14 +44,6 @@ GUI_VERBS = {"", "settings", "toggle", "ask", "meeting"} IDEMPOTENT_VERBS = {"cancel", "stop", "quit", "restart", "ask-cancel", "ask-reset", "meeting-cancel"} -# Which desktop entry, name and setting belong to each of the three shortcuts. -SHORTCUTS = { - "toggle": (hotkey.DESKTOP_ID, "Dikte: start/stop recording", "shortcut"), - "ask": (hotkey.ASK_DESKTOP_ID, "Dikte: ask Claude Code", "assistant_shortcut"), - "meeting": (hotkey.MEETING_DESKTOP_ID, "Dikte: start/end a meeting recording", - "meeting_shortcut"), -} - _app = None @@ -705,9 +697,9 @@ def cmd_shortcut(opts): conf = cfg.Config() if opts.shortcut == "status": rows = {} - for name, (desktop_id, _label, key) in SHORTCUTS.items(): - rows[name] = {"registered": hotkey.shortcut_status(desktop_id), - "configured": conf[key]} + for name, spec in hotkey.SHORTCUTS.items(): + rows[name] = {"registered": hotkey.shortcut_status(spec.desktop_id), + "configured": conf[spec.setting]} lines = [f"{name:8} {row['registered'] or '(not installed)':16} " f"setting: {row['configured'] or '(none)'}" for name, row in rows.items()] @@ -715,28 +707,29 @@ def cmd_shortcut(opts): return out(opts, {"ok": True, "shortcuts": rows, "listener": conf["evdev_hotkey"]}, "\n".join(lines)) - desktop_id, label, key = SHORTCUTS[opts.which] + spec = hotkey.SHORTCUTS[opts.which] if opts.shortcut == "remove": - hotkey.remove_shortcut(desktop_id) + hotkey.remove_shortcut(spec.desktop_id) return out(opts, {"ok": True, "removed": opts.which}, f"Removed the {opts.which} shortcut.") - combo = (opts.combo or conf[key] or ("Ctrl+Space" if opts.which == "toggle" else "")).strip() + combo = (opts.combo or conf[spec.setting] or spec.fallback).strip() if not combo: return fail(opts, "no combination given and none stored; pass --combo", 2) if hotkey.parse_shortcut(combo) == (None, None): return fail(opts, f"cannot parse that combination: {combo}", 2) - clashes = hotkey.conflicting_shortcuts(combo, desktop_id) + clashes = hotkey.conflicting_shortcuts(combo, spec.desktop_id) if clashes and not opts.force: return fail(opts, f"{combo} is also used by: {', '.join(clashes[:6])}. " "Pass --force to install it anyway.", 1, conflicts=clashes) ok, message = hotkey.install_shortcut( - combo, ipc.command_for(opts.which), name=label, desktop_id=desktop_id, + combo, ipc.command_for(spec.verb), name=spec.name, + desktop_id=spec.desktop_id, ) if not ok: return fail(opts, message) - conf[key] = combo + conf[spec.setting] = combo try: conf.save() except OSError as exc: @@ -1001,19 +994,20 @@ def build_parser(): test.set_defaults(func=cmd_test_key) leaf(subs, "doctor", "keys, programs, and what is missing").set_defaults(func=cmd_doctor) - shortcut = leaf(subs, "shortcut", "the KDE global shortcuts") + shortcut = leaf(subs, "shortcut", "the desktop's global shortcuts") inner = shortcut.add_subparsers(dest="shortcut", metavar="") shortcut.set_defaults(func=_needs_subcommand(shortcut)) leaf(inner, "status", "what is registered").set_defaults(func=cmd_shortcut) install = leaf(inner, "install", "register one") install.add_argument("which", nargs="?", default="toggle", - choices=tuple(SHORTCUTS)) + choices=tuple(hotkey.SHORTCUTS)) install.add_argument("--combo", help="e.g. Ctrl+Alt+Space") install.add_argument("--force", action="store_true", help="install it even if something else uses it") install.set_defaults(func=cmd_shortcut) remove = leaf(inner, "remove", "unregister one") - remove.add_argument("which", nargs="?", default="toggle", choices=tuple(SHORTCUTS)) + remove.add_argument("which", nargs="?", default="toggle", + choices=tuple(hotkey.SHORTCUTS)) remove.set_defaults(func=cmd_shortcut) # --- the application -------------------------------------------------- diff --git a/config.py b/config.py index 1febe84..6d052b0 100644 --- a/config.py +++ b/config.py @@ -389,6 +389,10 @@ DEFAULTS = { "min_voiced_seconds": 0.3, "filter_hallucinations": True, "shortcut": "Ctrl+Space", + # Ctrl+Alt+Space rather than Escape: the combination the recording started + # with, one modifier along. Escape belongs to whatever window has focus, and + # while you are dictating something else usually has it. + "cancel_shortcut": "Ctrl+Alt+Space", "evdev_hotkey": False, "overlay_corner": "bottom-left", "keep_audio": False, diff --git a/dikte.py b/dikte.py index cc17c6c..1e2bfc4 100755 --- a/dikte.py +++ b/dikte.py @@ -152,8 +152,10 @@ class Dikte: self.ask_cancel_action.setEnabled(False) self.menu.addAction(self.ask_cancel_action) - self.cancel_action = QAction(t("Cancel recording"), self.menu) - self.cancel_action.triggered.connect(self.cancel) + self.cancel_action = QAction(t("Discard the recording"), self.menu) + # The inner method, so that a menu click is never mistaken for the KDE + # shortcut echoing the built-in listener's press. + self.cancel_action.triggered.connect(self._cancel) self.cancel_action.setEnabled(False) self.menu.addAction(self.cancel_action) self.menu.addSeparator() @@ -306,6 +308,9 @@ class Dikte: def toggle_meeting(self): self._external("meeting", self._toggle_meeting) + def cancel(self): + self._external("cancel", self._cancel) + def _external(self, name, handler): # The built-in listener sees the key press the instant it happens, so a # toggle arriving right behind one is the KDE shortcut catching up on @@ -323,7 +328,8 @@ class Dikte: if timer is None: timer = self.last_evdev[name] = QElapsedTimer() timer.restart() - handlers = {"meeting": self._toggle_meeting, "ask": self._toggle_ask} + handlers = {"meeting": self._toggle_meeting, "ask": self._toggle_ask, + "cancel": self._cancel} handlers.get(name, self._toggle)() def _retire_listener(self): @@ -516,7 +522,7 @@ class Dikte: self.ask_overlay.show_busy(t("Transcribing…")) self.recorder.stop() - def cancel(self): + def _cancel(self): """Throw away whichever recording is running.""" if not self.recording: return @@ -540,7 +546,7 @@ class Dikte: def cancel_ask(self): """Call off the agent, whether it is still recording or already working.""" if self.ask_state == RECORDING: - self.cancel() + self._cancel() elif self.ask_state == BUSY: self.ask_overlay.show_busy(t("Stopping…")) self.ask_pipeline.cancel() @@ -788,10 +794,7 @@ class Dikte: def open_settings(self): if self.settings_window is None: - self.settings_window = SettingsWindow( - self.conf, launch_command(), meeting_command(), self.meetings, - ask_command(), - ) + self.settings_window = SettingsWindow(self.conf, self.meetings) self.settings_window.applied.connect(self._apply_settings) self.settings_window.finished.connect(self._settings_closed) self.settings_window.show() @@ -808,9 +811,8 @@ class Dikte: self._build_tray() self._refresh_tray() if self.conf["evdev_hotkey"]: - self.evdev.start({"toggle": self.conf["shortcut"], - "ask": self.conf["assistant_shortcut"], - "meeting": self.conf["meeting_shortcut"]}) + self.evdev.start({name: self.conf[spec.setting] + for name, spec in hotkey.SHORTCUTS.items()}) else: self.evdev.stop() @@ -849,19 +851,6 @@ def _clock(seconds): else f"{minutes}:{secs:02d}") -def launch_command(): - """The command the KDE shortcut will run.""" - return ipc.command_for("toggle") - - -def meeting_command(): - return ipc.command_for("meeting") - - -def ask_command(): - return ipc.command_for("ask") - - def main(): argv = sys.argv[1:] # Anything typed at a terminal is the command line's business, including diff --git a/hotkey.py b/hotkey.py index b6b3ed1..f71de71 100644 --- a/hotkey.py +++ b/hotkey.py @@ -1,6 +1,7 @@ """GNOME/KDE global-shortcut installation plus a built-in evdev listener.""" import ast +import collections import glob import os import pathlib @@ -16,6 +17,7 @@ from PyQt6.QtCore import QObject, pyqtSignal from i18n import t DESKTOP_ID = "dikte-toggle.desktop" +CANCEL_DESKTOP_ID = "dikte-cancel.desktop" MEETING_DESKTOP_ID = "dikte-meeting.desktop" ASK_DESKTOP_ID = "dikte-ask.desktop" APPLICATIONS_DIR = pathlib.Path.home() / ".local/share/applications" @@ -24,6 +26,25 @@ SHORTCUTS_FILE = pathlib.Path.home() / ".config/kglobalshortcutsrc" GNOME_MEDIA_SCHEMA = "org.gnome.settings-daemon.plugins.media-keys" GNOME_BINDING_SCHEMA = "org.gnome.settings-daemon.plugins.media-keys.custom-keybinding" +Shortcut = collections.namedtuple("Shortcut", "verb desktop_id name setting fallback") + +# Every global shortcut in one place, because there are four of them and the +# command line, the settings window and the installer each used to carry their +# own copy of the list. `fallback` is what to register when the setting is +# empty: only the toggle has one, since it is the key the application is +# unusable without. +SHORTCUTS = { + "toggle": Shortcut("toggle", DESKTOP_ID, "Dikte: start/stop recording", + "shortcut", "Ctrl+Space"), + "cancel": Shortcut("cancel", CANCEL_DESKTOP_ID, "Dikte: discard the recording", + "cancel_shortcut", ""), + "ask": Shortcut("ask", ASK_DESKTOP_ID, "Dikte: ask Claude Code", + "assistant_shortcut", ""), + "meeting": Shortcut("meeting", MEETING_DESKTOP_ID, + "Dikte: start/end a meeting recording", + "meeting_shortcut", ""), +} + # --- evdev key codes (linux/input-event-codes.h) -------------------------- EV_KEY = 0x01 @@ -371,14 +392,18 @@ def remove_kde_shortcut(desktop_id=DESKTOP_ID): (APPLICATIONS_DIR / desktop_id).unlink(missing_ok=True) except OSError: pass - try: - subprocess.run( - ["kwriteconfig6", "--notify", "--file", "kglobalshortcutsrc", - "--group", "services", "--group", desktop_id, "--key", "_launch", "--delete"], - capture_output=True, timeout=10, - ) - except (subprocess.SubprocessError, OSError): - pass + # kwriteconfig6 deletes keys rather than groups, so both of the ones KDE + # keeps in there go and the empty group is left behind harmlessly. + for key in ("_launch", "_k_friendly_name"): + try: + subprocess.run( + ["kwriteconfig6", "--notify", "--file", "kglobalshortcutsrc", + "--group", "services", "--group", desktop_id, + "--key", key, "--delete"], + capture_output=True, timeout=10, + ) + except (subprocess.SubprocessError, OSError): + pass def kde_shortcut_status(desktop_id=DESKTOP_ID): diff --git a/i18n.py b/i18n.py index 83e06ad..7466143 100644 --- a/i18n.py +++ b/i18n.py @@ -56,7 +56,7 @@ TR = { "Start recording": "Kaydı başlat", "Stop and transcribe": "Kaydı bitir ve yaz", "Working…": "İşleniyor…", - "Cancel recording": "Kaydı iptal et", + "Discard the recording": "Kaydı iptal et", "Settings…": "Ayarlar…", "Restart": "Yeniden başlat", "Quit": "Çık", @@ -133,6 +133,7 @@ TR = { "Cleanup rules": "Temizleme kuralları", "Audio file": "Ses dosyası", "Shortcut": "Kısayol", + "Shortcuts": "Kısayollar", "History": "Geçmiş", "Save": "Kaydet", "Saved successfully.": "Başarıyla kaydedildi.", @@ -282,6 +283,13 @@ TR = { "Global kısayol kurulu değil. Toplantı tepsi menüsünden de başlatılabilir.", "No global shortcut installed. The tray menu asks it too.": "Global kısayol kurulu değil. Tepsi menüsünden de soru sorulabilir.", + "No global shortcut installed. The tray menu discards it too.": + "Global kısayol kurulu değil. Kayıt tepsi menüsünden de iptal edilebilir.", + "Start and stop": "Başlat ve bitir", + "Throws the recording away without transcribing it. Works on a dictation " + "and on a command for the agent alike, whichever is running.": + "Kaydı yazıya dökmeden atar. Hangisi çalışıyorsa ona işler: dikteye de, " + "ajana verilen komuta da.", "Shortcut saved: {shortcut}": "Kısayol kaydedildi: {shortcut}", "Could not register the GNOME shortcut: {error}": "GNOME kısayolu kaydedilemedi: {error}", diff --git a/install.sh b/install.sh index 2cbaaee..79a666d 100755 --- a/install.sh +++ b/install.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Dikte installer: dependency check, launchers, KDE shortcut. +# Dikte installer: dependency check, launchers, global shortcuts. set -euo pipefail DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" @@ -8,6 +8,9 @@ BIN_DIR="$HOME/.local/bin" APP_DIR="$HOME/.local/share/applications" AUTOSTART_DIR="$HOME/.config/autostart" SHORTCUT="${1:-Ctrl+Space}" +# Without the colon, so that a second argument given as "" stays empty. That is +# how update.sh says "this one was turned off", as against not saying anything. +CANCEL_SHORTCUT="${2-Ctrl+Alt+Space}" say() { printf ' %s\n' "$1"; } ok() { printf ' \033[32m✓\033[0m %s\n' "$1"; } @@ -88,30 +91,43 @@ StartupNotify=false EOF ok "Will start automatically on login" -# 4. KDE global shortcut --------------------------------------------------- -cat > "$APP_DIR/dikte-toggle.desktop" < Shortcut to install the global shortcut." -elif command -v kwriteconfig6 >/dev/null; then - kwriteconfig6 --notify --file kglobalshortcutsrc \ - --group services --group dikte-toggle.desktop \ - --key _launch "$SHORTCUT" - ok "KDE shortcut registered: $SHORTCUT" - warn "KWin only reads this at startup, so the shortcut goes live after your" - say "next login. Until then open Settings → Shortcut and turn on the" - say "built-in listener to use it right away." +register() { # which combination label + if out="$("$PY" "$DIR/dikte.py" shortcut install "$1" --combo "$2" 2>&1)"; then + ok "$3: $2" + else + # One line: the rest of what it has to say about KWin is printed below. + warn "${out%%$'\n'*}" + fi +} + +if python3 -c 'import PyQt6.QtWidgets' 2>/dev/null; then + register toggle "$SHORTCUT" "Start and stop" + if [[ -n "$CANCEL_SHORTCUT" ]]; then + register cancel "$CANCEL_SHORTCUT" "Discard the recording" + fi + if [[ "${XDG_CURRENT_DESKTOP:-}" != *[Gg][Nn][Oo][Mm][Ee]* ]]; then + warn "KWin only reads these at startup, so they go live after your next" + say "login. Until then open Settings → Shortcuts and turn on the" + say "built-in listener to use them right away." + fi else - warn "No supported shortcut manager found. Add the shortcut in desktop settings." + warn "PyQt6 is missing, so no shortcut was registered. Install it, then run:" + say "dikte shortcut install toggle --combo '$SHORTCUT'" fi echo diff --git a/settings_ui.py b/settings_ui.py index 2bf1a9e..3a36c7c 100644 --- a/settings_ui.py +++ b/settings_ui.py @@ -19,6 +19,7 @@ import audio import config as cfg import filetranscribe import hotkey +import ipc import meeting from filetranscribe import FileTranscriber from i18n import t @@ -92,9 +93,9 @@ REASONING_LEVELS = [ ("Very high", "xhigh"), ("Maximum", "max"), ] PASTE_SHORTCUTS = ["ctrl+v", "ctrl+shift+v", "shift+insert"] -# Offered for all three global shortcuts, which keeps them one kind of field -# rather than three. The boxes stay editable: this is a shortlist of -# combinations that are usually free, not the set of ones that work. +# Offered for every global shortcut, which keeps them one kind of field rather +# than four. The boxes stay editable: this is a shortlist of combinations that +# are usually free, not the set of ones that work. SHORTCUTS = [ "Ctrl+Space", "Ctrl+Alt+Space", "Ctrl+Shift+Space", "Meta+Space", "Ctrl+Alt+A", "Ctrl+Alt+D", "Ctrl+Alt+M", "Ctrl+Alt+Q", @@ -113,14 +114,15 @@ class SettingsWindow(QDialog): # Which key was tested, whether it worked, and what to write under it. _test_done = pyqtSignal(str, bool, str) - def __init__(self, conf, launch_command, meeting_command=None, - meetings=None, ask_command=None, parent=None): + def __init__(self, conf, meetings=None, parent=None): super().__init__(parent) self.conf = conf - self.launch_command = launch_command - self.meeting_command = meeting_command or launch_command - self.ask_command = ask_command or launch_command self.meetings = meetings + # Filled in by _shortcut_row as the tabs are built: which combination + # box, status label and "nothing installed" line belong to each of the + # global shortcuts. One dictionary is what lets install, remove and the + # status line be written once instead of once per key. + self._shortcut_rows = {} # Each provider keeps its own transcription model, so switching the # provider back and forth never overwrites the other one's. self._models = dict.fromkeys(cfg.TRANSCRIBERS, "") @@ -139,7 +141,7 @@ class SettingsWindow(QDialog): tabs.addTab(self._meeting_tab(), t("Meeting")) tabs.addTab(self._minutes_tab(), t("Minutes")) tabs.addTab(self._file_tab(), t("Audio file")) - tabs.addTab(self._shortcut_tab(), t("Shortcut")) + tabs.addTab(self._shortcut_tab(), t("Shortcuts")) tabs.addTab(self._history_tab(), t("History")) # Save keeps the window open, so the window is closed with the titlebar @@ -360,16 +362,10 @@ class SettingsWindow(QDialog): how = QGroupBox(t("How it runs")) how_form = QFormLayout(how) - self.assistant_shortcut = self._shortcut_box(t("none")) - install = QPushButton(t("Install as a KDE shortcut")) - install.clicked.connect(self._install_ask_shortcut) - remove = QPushButton(t("Remove")) - remove.clicked.connect(self._remove_ask_shortcut) - how_form.addRow(t("Shortcut"), - self._row(self.assistant_shortcut, install, remove)) - self.assistant_shortcut_status = QLabel("") - self.assistant_shortcut_status.setWordWrap(True) - how_form.addRow(self.assistant_shortcut_status) + self._shortcut_row( + how_form, "ask", t("Shortcut"), + t("No global shortcut installed. The tray menu asks it too."), + ) self.assistant_provider = QComboBox() for label, value in ASSISTANT_PROVIDERS: @@ -622,16 +618,10 @@ class SettingsWindow(QDialog): )) recording_form.addRow("", self.meeting_keep_audio) - self.meeting_shortcut = self._shortcut_box(t("none")) - install = QPushButton(t("Install as a KDE shortcut")) - install.clicked.connect(self._install_meeting_shortcut) - remove = QPushButton(t("Remove")) - remove.clicked.connect(self._remove_meeting_shortcut) - recording_form.addRow(t("Shortcut"), - self._row(self.meeting_shortcut, install, remove)) - self.meeting_shortcut_status = QLabel("") - self.meeting_shortcut_status.setWordWrap(True) - recording_form.addRow(self.meeting_shortcut_status) + self._shortcut_row( + recording_form, "meeting", t("Shortcut"), + t("No global shortcut installed. The tray menu starts a meeting too."), + ) layout.addWidget(recording) prompt_label = QLabel(t("System instruction given to the minutes model.")) @@ -772,25 +762,27 @@ class SettingsWindow(QDialog): def _shortcut_tab(self): page = QWidget() layout = QVBoxLayout(page) + # Both keys in one form, the way the Meeting and Agent tabs already lay + # theirs out. Two forms would give each row a label column of its own, + # and two combination boxes starting at different places read as two + # unrelated settings rather than the pair they are. form = QFormLayout() - self.shortcut = self._shortcut_box("Ctrl+Space") - form.addRow(t("Shortcut"), self.shortcut) + self._shortcut_row( + form, "toggle", t("Start and stop"), + t("No global shortcut installed."), placeholder="Ctrl+Space", + ) + # Stopping is what sends the recording off to be transcribed, and that + # is the step there is no taking back. By the time the tray menu is + # open the sentence you did not mean to dictate is already on its way. + self._shortcut_row( + form, "cancel", t("Discard the recording"), + t("No global shortcut installed. The tray menu discards it too."), + tooltip=t("Throws the recording away without transcribing it. Works " + "on a dictation and on a command for the agent alike, " + "whichever is running."), + ) layout.addLayout(form) - install = QPushButton(t("Install as a KDE shortcut")) - install.clicked.connect(self._install_shortcut) - remove = QPushButton(t("Remove")) - remove.clicked.connect(self._remove_shortcut) - row = QHBoxLayout() - row.addWidget(install) - row.addWidget(remove) - row.addStretch(1) - layout.addLayout(row) - - self.shortcut_status = QLabel("") - self.shortcut_status.setWordWrap(True) - layout.addWidget(self.shortcut_status) - self.evdev_enabled = QCheckBox(t( "Use the built-in listener (/dev/input), for when the KDE shortcut is " "not active yet" @@ -904,6 +896,25 @@ class SettingsWindow(QDialog): self._testers[provider] = (button, answer) return field + def _shortcut_row(self, form, which, label, missing, placeholder="", + tooltip=""): + """One global shortcut: the combination, Install, Remove, and a line + saying what the desktop has registered. `missing` is what that line + says when nothing is.""" + box = self._shortcut_box(placeholder or t("none")) + if tooltip: + box.setToolTip(tooltip) + install = QPushButton(t("Install as a KDE shortcut")) + install.clicked.connect(lambda: self._install_shortcut(which)) + remove = QPushButton(t("Remove")) + remove.clicked.connect(lambda: self._remove_shortcut(which)) + form.addRow(label, self._row(box, install, remove)) + status = QLabel("") + status.setWordWrap(True) + form.addRow(status) + self._shortcut_rows[which] = (box, status, missing) + return box + @staticmethod def _row(*widgets): """Widgets side by side in one form row; the first one takes the space.""" @@ -947,7 +958,6 @@ class SettingsWindow(QDialog): ) self.transcribe_prompt.setPlainText(conf["transcribe_prompt"]) - self.assistant_shortcut.setCurrentText(conf["assistant_shortcut"]) self._select_data(self.assistant_provider, conf["assistant_provider"]) self.assistant_model.setCurrentText(conf["assistant_model"]) self._select_data(self.assistant_permission, conf["assistant_permission_mode"]) @@ -976,7 +986,6 @@ class SettingsWindow(QDialog): self.meeting_cleanup.setChecked(conf["meeting_cleanup"]) self.meeting_max_minutes.setValue(max(5, int(conf["meeting_max_seconds"]) // 60)) self.meeting_keep_audio.setChecked(conf["meeting_keep_audio"]) - self.meeting_shortcut.setCurrentText(conf["meeting_shortcut"]) self.meeting_prompt.setPlainText( conf["meeting_prompt"] or cfg.default_meeting_prompt() ) @@ -985,14 +994,14 @@ class SettingsWindow(QDialog): self.file_cleanup.setChecked(conf["file_cleanup"]) self.file_path = "" - self.shortcut.setCurrentText(conf["shortcut"]) + for which, (box, _status, _missing) in self._shortcut_rows.items(): + box.setCurrentText(conf[hotkey.SHORTCUTS[which].setting]) self.evdev_enabled.setChecked(conf["evdev_hotkey"]) self.history_limit.setValue(max(0, int(conf["history_limit"]))) - self._refresh_shortcut_status() - self._refresh_meeting_shortcut_status() - self._refresh_ask_shortcut_status() + for which in self._shortcut_rows: + self._refresh_shortcut_status(which) self._refresh_assistant_status() self._load_history() self._load_minutes() @@ -1032,7 +1041,6 @@ class SettingsWindow(QDialog): else file_prompt) conf["transcribe_prompt"] = self.transcribe_prompt.toPlainText().strip() - conf["assistant_shortcut"] = self.assistant_shortcut.currentText().strip() conf["assistant_provider"] = self.assistant_provider.currentData() or "claude" conf["assistant_model"] = (self.assistant_model.currentText().strip() or cfg.DEFAULTS["assistant_model"]) @@ -1072,7 +1080,6 @@ class SettingsWindow(QDialog): conf["meeting_cleanup"] = self.meeting_cleanup.isChecked() conf["meeting_max_seconds"] = self.meeting_max_minutes.value() * 60 conf["meeting_keep_audio"] = self.meeting_keep_audio.isChecked() - conf["meeting_shortcut"] = self.meeting_shortcut.currentText().strip() meeting_prompt = self.meeting_prompt.toPlainText().strip() conf["meeting_prompt"] = ("" if meeting_prompt == cfg.default_meeting_prompt() else meeting_prompt) @@ -1080,7 +1087,12 @@ class SettingsWindow(QDialog): conf["file_timestamps"] = self.file_timestamps.isChecked() conf["file_cleanup"] = self.file_cleanup.isChecked() - conf["shortcut"] = self.shortcut.currentText().strip() or "Ctrl+Space" + # Left empty, only the toggle falls back to a default: the application + # is unusable without it. The other three stay empty, which is what + # turns them off. + for which, (box, _status, _missing) in self._shortcut_rows.items(): + spec = hotkey.SHORTCUTS[which] + conf[spec.setting] = box.currentText().strip() or spec.fallback conf["evdev_hotkey"] = self.evdev_enabled.isChecked() conf["history_limit"] = self.history_limit.value() conf.save() @@ -1293,45 +1305,17 @@ class SettingsWindow(QDialog): except OSError as exc: self.file_status.setText(t("Failed: {error}", error=exc)) - # ---- shortcut -------------------------------------------------------- + # ---- shortcuts ------------------------------------------------------- - def _install_shortcut(self): - combo = self.shortcut.currentText().strip() or "Ctrl+Space" - clashes = hotkey.conflicting_shortcuts(combo) - if clashes: - answer = QMessageBox.question( - self, t("Shortcut conflict"), - t("{shortcut} is also used by:\n\n{list}\n\nInstall anyway?", - shortcut=combo, list="\n".join(clashes[:6])), - ) - if answer != QMessageBox.StandardButton.Yes: - return - ok, message = hotkey.install_shortcut(combo, self.launch_command) - QMessageBox.information(self, t("Shortcut"), message) - if ok: - self.conf["shortcut"] = combo - self.conf.save() - self._refresh_shortcut_status() - - def _remove_shortcut(self): - hotkey.remove_shortcut() - self._refresh_shortcut_status() - - def _refresh_shortcut_status(self): - current = hotkey.shortcut_status() - self.shortcut_status.setText( - t("Registered in {desktop}: {shortcut}", - desktop=hotkey.desktop_name(), shortcut=current) if current - else t("No global shortcut installed.") - ) - - def _install_meeting_shortcut(self): - combo = self.meeting_shortcut.currentText().strip() + def _install_shortcut(self, which): + spec = hotkey.SHORTCUTS[which] + box, _status, _missing = self._shortcut_rows[which] + combo = box.currentText().strip() or spec.fallback if not combo: QMessageBox.information(self, t("Shortcut"), t("Type a key combination first.")) return - clashes = hotkey.conflicting_shortcuts(combo, hotkey.MEETING_DESKTOP_ID) + clashes = hotkey.conflicting_shortcuts(combo, spec.desktop_id) if clashes: answer = QMessageBox.question( self, t("Shortcut conflict"), @@ -1341,64 +1325,26 @@ class SettingsWindow(QDialog): if answer != QMessageBox.StandardButton.Yes: return ok, message = hotkey.install_shortcut( - combo, self.meeting_command, name="Dikte: start/end a meeting recording", - desktop_id=hotkey.MEETING_DESKTOP_ID, + combo, ipc.command_for(spec.verb), name=spec.name, + desktop_id=spec.desktop_id, ) QMessageBox.information(self, t("Shortcut"), message) if ok: - self.conf["meeting_shortcut"] = combo + self.conf[spec.setting] = combo self.conf.save() - self._refresh_meeting_shortcut_status() + self._refresh_shortcut_status(which) - def _remove_meeting_shortcut(self): - hotkey.remove_shortcut(hotkey.MEETING_DESKTOP_ID) - self._refresh_meeting_shortcut_status() + def _remove_shortcut(self, which): + hotkey.remove_shortcut(hotkey.SHORTCUTS[which].desktop_id) + self._refresh_shortcut_status(which) - def _refresh_meeting_shortcut_status(self): - current = hotkey.shortcut_status(hotkey.MEETING_DESKTOP_ID) - self.meeting_shortcut_status.setText( + def _refresh_shortcut_status(self, which): + _box, status, missing = self._shortcut_rows[which] + current = hotkey.shortcut_status(hotkey.SHORTCUTS[which].desktop_id) + status.setText( t("Registered in {desktop}: {shortcut}", desktop=hotkey.desktop_name(), shortcut=current) if current - else t("No global shortcut installed. The tray menu starts a meeting too.") - ) - - # ---- Claude ---------------------------------------------------------- - - def _install_ask_shortcut(self): - combo = self.assistant_shortcut.currentText().strip() - if not combo: - QMessageBox.information(self, t("Shortcut"), - t("Type a key combination first.")) - return - clashes = hotkey.conflicting_shortcuts(combo, hotkey.ASK_DESKTOP_ID) - if clashes: - answer = QMessageBox.question( - self, t("Shortcut conflict"), - t("{shortcut} is also used by:\n\n{list}\n\nInstall anyway?", - shortcut=combo, list="\n".join(clashes[:6])), - ) - if answer != QMessageBox.StandardButton.Yes: - return - ok, message = hotkey.install_shortcut( - combo, self.ask_command, name="Dikte: ask Claude Code", - desktop_id=hotkey.ASK_DESKTOP_ID, - ) - QMessageBox.information(self, t("Shortcut"), message) - if ok: - self.conf["assistant_shortcut"] = combo - self.conf.save() - self._refresh_ask_shortcut_status() - - def _remove_ask_shortcut(self): - hotkey.remove_shortcut(hotkey.ASK_DESKTOP_ID) - self._refresh_ask_shortcut_status() - - def _refresh_ask_shortcut_status(self): - current = hotkey.shortcut_status(hotkey.ASK_DESKTOP_ID) - self.assistant_shortcut_status.setText( - t("Registered in {desktop}: {shortcut}", - desktop=hotkey.desktop_name(), shortcut=current) if current - else t("No global shortcut installed. The tray menu asks it too.") + else missing ) def _assistant_provider_changed(self): diff --git a/tests/test_cli.py b/tests/test_cli.py index 9a11a46..cb09bc0 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -14,6 +14,7 @@ from unittest import mock import cli import config as cfg +import hotkey import ipc from tests.support import DikteTest, fake_urlopen @@ -144,6 +145,22 @@ class Parser(unittest.TestCase): self.assertIsNone(opts.verb) self.assertEqual(opts.func, cli.cmd_plain) + def test_every_global_shortcut_runs_a_verb_that_exists(self): + """A shortcut registers a command line; a verb the parser never heard of + is a key that does nothing at all when it is pressed.""" + for name, spec in hotkey.SHORTCUTS.items(): + with self.subTest(name=name): + opts = self.parse(spec.verb) + self.assertTrue(callable(opts.func)) + + def test_every_shortcut_can_be_installed_and_removed_by_name(self): + for name in hotkey.SHORTCUTS: + with self.subTest(name=name): + self.assertEqual(self.parse("shortcut", "install", name).which, + name) + self.assertEqual(self.parse("shortcut", "remove", name).which, + name) + def test_every_verb_is_wired_to_something(self): for verb in ("record", "toggle", "start", "stop", "cancel", "ask", "session", "transcribe", "meeting", "meetings", "history", diff --git a/tests/test_hotkey.py b/tests/test_hotkey.py index 4297724..01ae92d 100644 --- a/tests/test_hotkey.py +++ b/tests/test_hotkey.py @@ -6,6 +6,7 @@ import subprocess import unittest from unittest import mock +import config as cfg import hotkey from tests.support import DikteTest, FakeCompleted, linux_only @@ -56,6 +57,28 @@ class ParseShortcut(unittest.TestCase): self.assertEqual(hotkey.parse_shortcut(None), (None, None)) +class Table(unittest.TestCase): + """The one list of global shortcuts. The command line, the settings window + and install.sh read it instead of keeping a copy each, so what it has to + hold together is checked here rather than in three places.""" + + def test_every_shortcut_remembers_itself_in_a_real_setting(self): + for name, spec in hotkey.SHORTCUTS.items(): + with self.subTest(name=name): + self.assertIn(spec.setting, cfg.DEFAULTS) + + def test_no_two_share_a_desktop_entry(self): + ids = [spec.desktop_id for spec in hotkey.SHORTCUTS.values()] + self.assertEqual(len(ids), len(set(ids))) + + def test_only_the_toggle_falls_back_to_a_key_of_its_own(self): + """The rest are off until you pick one, and emptying the box is how you + turn them off again.""" + self.assertEqual(hotkey.SHORTCUTS["toggle"].fallback, "Ctrl+Space") + self.assertEqual([name for name, spec in hotkey.SHORTCUTS.items() + if spec.fallback], ["toggle"]) + + class ModsMatch(unittest.TestCase): """The combination has to be exact, or Ctrl+Space fires on Ctrl+Shift+Space.""" @@ -122,6 +145,23 @@ class Bindings(DikteTest): thread.assert_called_once() self.assertEqual(len(listener._bindings[57]), 2) + def test_starting_and_discarding_do_not_fire_on_each_other(self): + """The two defaults are one modifier apart on the same key code, so the + modifier set is the only thing keeping them apart.""" + listener = hotkey.EvdevHotkey() + self.addCleanup(listener.stop) + with mock.patch.object(listener, "_open_devices", return_value=[99]), \ + mock.patch.object(hotkey.threading, "Thread"): + listener.start({"toggle": "Ctrl+Space", "cancel": "Ctrl+Alt+Space"}) + + def fired(held): + return [name for mods, name in listener._bindings[57] + if hotkey.EvdevHotkey._mods_match(held, mods)] + + self.assertEqual(fired({29}), ["toggle"]) # ctrl + self.assertEqual(fired({29, 56}), ["cancel"]) # ctrl + alt + self.assertEqual(fired({29, 42}), []) # ctrl + shift + @linux_only class Chooser(DikteTest): diff --git a/tests/test_ui.py b/tests/test_ui.py index 5ca37b2..892e736 100644 --- a/tests/test_ui.py +++ b/tests/test_ui.py @@ -12,6 +12,7 @@ from unittest import mock from PyQt6.QtWidgets import QApplication, QMessageBox import config as cfg +import hotkey import overlay as overlay_module import settings_ui from tests.support import DikteTest, only_these_tools @@ -76,6 +77,7 @@ CHANGED = { "file_timestamps": True, "file_cleanup": False, "shortcut": "Ctrl+Alt+Space", + "cancel_shortcut": "Meta+Shift+Space", "evdev_hotkey": True, "history_limit": 50, } @@ -98,7 +100,7 @@ class Settings(DikteTest): self.path("kglobalshortcutsrc"))) def window(self, conf): - window = settings_ui.SettingsWindow(conf, "dikte toggle") + window = settings_ui.SettingsWindow(conf) self.addCleanup(window.deleteLater) self.addCleanup(window.close) return window @@ -136,6 +138,37 @@ class Settings(DikteTest): self.assertEqual(stored["speech_margin_db"], 15.0) self.assertEqual(stored["openrouter_base_url"], "http://localhost:1234/v1") + def test_every_global_shortcut_has_a_row_of_its_own(self): + window = self.window(cfg.Config()) + self.assertEqual(set(window._shortcut_rows), set(hotkey.SHORTCUTS)) + + def test_emptying_a_shortcut_turns_it_off_but_not_the_toggle(self): + """The application is unusable without the toggle, so that one box + falls back. The rest stay empty, which is how they are switched off.""" + conf = cfg.Config() + window = self.window(conf) + for box, _status, _missing in window._shortcut_rows.values(): + box.setCurrentText("") + window._save() + self.assertEqual(conf["shortcut"], "Ctrl+Space") + self.assertEqual(conf["cancel_shortcut"], "") + self.assertEqual(conf["assistant_shortcut"], "") + self.assertEqual(conf["meeting_shortcut"], "") + + def test_installing_the_discard_key_writes_its_own_entry(self): + conf = cfg.Config() + window = self.window(conf) + window._shortcut_rows["cancel"][0].setCurrentText("Meta+Shift+Space") + with mock.patch.object(settings_ui.hotkey, "install_shortcut", + return_value=(True, "saved")) as install: + window._install_shortcut("cancel") + combo, command = install.call_args.args + self.assertEqual(combo, "Meta+Shift+Space") + self.assertTrue(command.endswith(" cancel")) + self.assertEqual(install.call_args.kwargs["desktop_id"], + hotkey.CANCEL_DESKTOP_ID) + self.assertEqual(conf["cancel_shortcut"], "Meta+Shift+Space") + def test_a_prompt_left_at_its_default_is_stored_as_empty(self): """So that switching the interface language switches the prompt too.""" conf = cfg.Config() From 698eacf33a202fafb5d898053fbbaa0b350181f9 Mon Sep 17 00:00:00 2001 From: yusufipk Date: Sat, 1 Aug 2026 18:55:29 +0300 Subject: [PATCH 04/13] Take the install back, and pull the next one in install.sh has been the only half of its job that was written down. Removing Dikte meant remembering a symlink, three desktop files, an autostart entry and a handful of kglobalshortcutsrc keys, and updating meant a pull followed by guessing which of those the new version had moved. Both are now scripts, because both are lists somebody would otherwise keep in their head. uninstall.sh removes what install.sh put down and stops there. What you have written is yours: the settings and the dictations, the meetings and the recordings survive a plain run, and --purge is the word that deletes them. It prints what that would cost first, how many dictations, how many meetings, how much audio, since a count is the thing that makes the sentence real, and without a terminal to ask it refuses rather than assuming --yes. Only our own symlink goes; a file of that name somebody else put there is left alone. The shortcuts are handed back to `dikte shortcut remove` rather than unpicked from KDE's file here, because that is the half that knows whether they went into kglobalshortcutsrc or into GNOME's gsettings. update.sh asks whether anything is waiting before it complains about anything else, because an unfinished afternoon in the working tree is nobody's problem on a day when nothing has been published. If something is waiting and you do have edits of your own, it stops and says so rather than choosing for you. The merge is --ff-only: an update is somebody else's commits arriving, never a merge a script decided to make on your behalf. Then install.sh runs again, since an update can add a dependency or move a file, and it is told which keys you chose so that it puts those back instead of its own defaults. They are read from the settings rather than from the desktop's file, that being the one place they mean the same thing on KDE and on GNOME, and a key you had turned off is passed back as the empty string rather than quietly becoming the default again. Finally the running instance is restarted, because it is still holding the code from before the pull. --- README.md | 4 +- README.tr.md | 5 +- uninstall.sh | 154 +++++++++++++++++++++++++++++++++++++++++++++++++++ update.sh | 99 +++++++++++++++++++++++++++++++++ 4 files changed, 260 insertions(+), 2 deletions(-) create mode 100755 uninstall.sh create mode 100755 update.sh diff --git a/README.md b/README.md index c8196a4..4b42583 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,9 @@ sudo apt install pulseaudio-utils xclip xdotool ffmpeg ``` `install.sh` adds the `dikte` command, a menu entry, an autostart entry and the -two global shortcuts, whose keys are its two arguments. +two global shortcuts, whose keys are its two arguments. `./update.sh` pulls and +puts all of that back, keeping the keys you chose; `./uninstall.sh` takes it away +again and leaves your settings and dictations alone unless you pass `--purge`. Three keys go in the settings window: **OpenAI**, **Groq** and **OpenRouter**. Speech to text runs on any of them (`gpt-4o-transcribe` by default), cleanup diff --git a/README.tr.md b/README.tr.md index cfb503c..97b007d 100644 --- a/README.tr.md +++ b/README.tr.md @@ -37,7 +37,10 @@ sudo apt install pulseaudio-utils xclip xdotool ffmpeg ``` `install.sh` `dikte` komutunu, menü girdisini, oturum açılışında otomatik -başlatmayı ve iki global kısayolu kurar; tuşları da iki argümanı. +başlatmayı ve iki global kısayolu kurar; tuşları da iki argümanı. `./update.sh` +son sürümü çeker ve bunları senin seçtiğin tuşlarla yerine koyar; +`./uninstall.sh` hepsini geri alır, `--purge` demedikçe ayarlarına ve +diktelerine dokunmaz. Ayarlar penceresinde üç anahtar istenir: **OpenAI**, **Groq** ve **OpenRouter**. Sesi yazıya çevirme üçünden birinde çalışır (varsayılan `gpt-4o-transcribe`), diff --git a/uninstall.sh b/uninstall.sh new file mode 100755 index 0000000..dfbdaa1 --- /dev/null +++ b/uninstall.sh @@ -0,0 +1,154 @@ +#!/usr/bin/env bash +# Dikte uninstaller: takes back what install.sh put down, and nothing else +# unless asked. Your settings and your dictations survive a plain run; --purge +# is the word that deletes them. +set -euo pipefail + +DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PY="$(command -v python3 || true)" +USER_NAME="$(id -un)" +BIN_DIR="$HOME/.local/bin" +APP_DIR="$HOME/.local/share/applications" +AUTOSTART_DIR="$HOME/.config/autostart" +CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/dikte" +DATA_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/dikte" + +PURGE=0 +ASSUME_YES=0 + +say() { printf ' %s\n' "$1"; } +ok() { printf ' \033[32m✓\033[0m %s\n' "$1"; } +warn() { printf ' \033[33m!\033[0m %s\n' "$1"; } +gone() { printf ' \033[90m·\033[0m %s\n' "$1"; } +# "1 dictation", "3 dictations": how many is the point of printing it at all. +count() { + if (( $1 == 1 )); then printf '%s %s' "$1" "$2"; else printf '%s %s' "$1" "$3"; fi +} + +usage() { + cat <&2; usage >&2; exit 2 ;; + esac +done + +# A symlink whose target is gone is still a file to remove, hence -L. +remove() { + if [[ -e "$1" || -L "$1" ]]; then + rm -f "$1" + ok "Removed $1" + else + gone "Was not there: $1" + fi +} + +echo +echo "Uninstalling Dikte" +echo "──────────────────" + +# 1. Global shortcuts ------------------------------------------------------ +# Handed to Dikte while it can still run, because it is the half that knows +# whether they went into KDE's kglobalshortcutsrc or GNOME's gsettings. +if [[ -n "$PY" ]] && python3 -c 'import PyQt6.QtWidgets' 2>/dev/null; then + for which in toggle cancel ask meeting; do + "$PY" "$DIR/dikte.py" shortcut remove "$which" >/dev/null 2>&1 || true + done + ok "Global shortcuts unregistered" + say "KWin reads that file at startup, so the keys are free after your next login." +else + warn "PyQt6 is missing, so the shortcuts were left registered." + say "Remove them in your desktop's shortcut settings." +fi + +# 2. The running instance -------------------------------------------------- +# It holds a tray icon and a socket; asking it to quit is tidier than pulling +# its launchers out from under it. +if pgrep -u "$USER_NAME" -f 'dikte\.py' >/dev/null 2>&1; then + [[ -n "$PY" ]] && "$PY" "$DIR/dikte.py" quit >/dev/null 2>&1 || true + sleep 0.5 + if pgrep -u "$USER_NAME" -f 'dikte\.py' >/dev/null 2>&1; then + warn "Dikte is still running; close it from the tray icon" + else + ok "Stopped the running instance" + fi +fi + +# 3. Launchers ------------------------------------------------------------- +# Only our own symlink goes: a file of the same name that somebody else put +# there is not ours to delete. +if [[ -L "$BIN_DIR/dikte" ]]; then + remove "$BIN_DIR/dikte" +elif [[ -e "$BIN_DIR/dikte" ]]; then + warn "$BIN_DIR/dikte is not our symlink, leaving it alone" +else + gone "Was not there: $BIN_DIR/dikte" +fi +remove "$APP_DIR/dikte.desktop" +remove "$AUTOSTART_DIR/dikte.desktop" +# Removing the shortcut takes its desktop file with it, but an install from +# before this script existed may have left one behind on a desktop that never +# used them. +for id in dikte-toggle dikte-cancel dikte-ask dikte-meeting; do + if [[ -e "$APP_DIR/$id.desktop" ]]; then + remove "$APP_DIR/$id.desktop" + fi +done + +# 4. Settings and dictations ----------------------------------------------- +echo +if ((PURGE)); then + warn "--purge also deletes:" + if [[ -f "$CONFIG_DIR/config.json" ]]; then + say "$CONFIG_DIR/config.json (your API keys and every setting)" + fi + if [[ -f "$DATA_DIR/history.jsonl" ]]; then + # grep -c rather than wc -l: a last line with no newline is still a dictation. + say "$DATA_DIR/history.jsonl ($(count "$(grep -c '' "$DATA_DIR/history.jsonl" 2>/dev/null || echo 0)" dictation dictations))" + fi + if [[ -d "$DATA_DIR/meetings" ]]; then + say "$DATA_DIR/meetings ($(count "$(find "$DATA_DIR/meetings" -name '*.md' | wc -l)" meeting meetings))" + fi + if [[ -d "$DATA_DIR/recordings" ]]; then + say "$DATA_DIR/recordings ($(du -sh "$DATA_DIR/recordings" | cut -f1) of audio)" + fi + + if ((!ASSUME_YES)); then + if [[ -t 0 ]]; then + printf ' Type yes to delete them: ' + read -r reply + [[ "$reply" == "yes" ]] || { PURGE=0; say "Kept."; } + else + PURGE=0 + warn "Not a terminal, so nothing was deleted. Pass --yes if you meant it." + fi + fi +fi + +if ((PURGE)); then + rm -rf "$CONFIG_DIR" "$DATA_DIR" + ok "Settings and dictations deleted" +else + say "Settings kept: $CONFIG_DIR" + say "Dictations kept: $DATA_DIR" + say "Delete them too with: ./uninstall.sh --purge" +fi + +echo +ok "Done." +say "The source directory is untouched: $DIR" +echo diff --git a/update.sh b/update.sh new file mode 100755 index 0000000..9194407 --- /dev/null +++ b/update.sh @@ -0,0 +1,99 @@ +#!/usr/bin/env bash +# Dikte updater: pull, put the launchers back, restart what was running. +set -euo pipefail + +DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PY="$(command -v python3 || true)" +USER_NAME="$(id -un)" + +say() { printf ' %s\n' "$1"; } +ok() { printf ' \033[32m✓\033[0m %s\n' "$1"; } +warn() { printf ' \033[33m!\033[0m %s\n' "$1"; } +die() { printf ' \033[31m✗\033[0m %s\n' "$1"; echo; exit 1; } + +# The combination stored in the settings, which is where Dikte itself reads it +# from and the one place that is the same on KDE and on GNOME. +setting() { + [[ -n "$PY" ]] || return 0 + "$PY" "$DIR/dikte.py" config get "$1" 2>/dev/null || true +} + +echo +echo "Updating Dikte" +echo "──────────────" + +cd "$DIR" + +# 1. Somewhere there is something to pull ---------------------------------- +command -v git >/dev/null || die "git not found; update by downloading the source again" +git rev-parse --git-dir >/dev/null 2>&1 \ + || die "$DIR is not a git checkout; update by downloading the source again" + +before="$(git rev-parse HEAD)" + +# 2. Is there anything to come? --------------------------------------------- +# Asked before anything else is complained about: an unfinished afternoon in +# the working tree is nobody's problem on a day when nothing has been +# published. Fetching leaves the working tree alone. +git fetch --quiet || die "Could not reach the remote." +upstream="$(git rev-parse '@{u}' 2>/dev/null)" \ + || die "This branch is not tracking a remote one; pull by hand." + +if [[ "$before" == "$upstream" ]]; then + echo + ok "Already up to date ($(git log -1 --format=%s))" + echo + exit 0 +fi + +# 3. Only now, your own edits ----------------------------------------------- +# They would be overwritten by a fast-forward or would block it, and either way +# that is your call to make, not this script's. Untracked files are counted +# too: a fast-forward that adds a file of that name stops on them. +if [[ -n "$(git status --porcelain)" ]]; then + warn "There is an update waiting, but you have changes of your own here:" + git --no-pager status --short | sed 's/^/ /' + say "Commit them, or put them aside with: git stash --include-untracked" + die "Nothing was updated." +fi + +# --ff-only: an update should be somebody else's commits arriving, never a +# merge this script decided to make on your behalf. The fetch above already +# brought them, so this touches no network. +# advice off: git's suggestion is a merge or a rebase, and which of those you +# want is the sentence below, not a wall of hints. +if ! merge_log="$(git -c advice.diverging=false merge --ff-only '@{u}' 2>&1)"; then + printf '%s\n' "$merge_log" | sed 's/^/ /' + say "Your branch has commits the remote does not. To put them on top of the" + say "update instead: git pull --rebase" + die "Could not fast-forward." +fi +after="$(git rev-parse HEAD)" + +echo +say "What arrived:" +git --no-pager log --oneline "$before..$after" | sed 's/^/ /' +echo + +# 4. Launchers -------------------------------------------------------------- +# An update can add a dependency or move a file, so the installer runs again. +# It would otherwise register its own defaults over the keys you chose, so it +# is told what those are. Read before the installer runs, since it is the one +# writing them. +shortcut="$(setting shortcut)" +cancel_shortcut="$(setting cancel_shortcut)" +# Positional, so a chosen discard key cannot be passed without the other one. +"$DIR/install.sh" "${shortcut:-Ctrl+Space}" "${cancel_shortcut:-}" + +# 5. The running instance --------------------------------------------------- +# It is still running the code from before the pull. +if pgrep -u "$USER_NAME" -f 'dikte\.py' >/dev/null 2>&1; then + if [[ -n "$PY" ]] && "$PY" "$DIR/dikte.py" restart >/dev/null 2>&1; then + ok "Restarted, so the new version is the one running" + else + warn "Could not restart it; use the tray menu → Restart" + fi +else + say "Dikte was not running. Start it with: dikte" +fi +echo From 034c2bec7e829cad9262d51efd747bf1c951a98c Mon Sep 17 00:00:00 2001 From: yusufipk Date: Sat, 1 Aug 2026 19:30:55 +0300 Subject: [PATCH 05/13] Clean the transcript up on the subscription you already have Cleanup was the one step with only one place to run. Speech to text has three providers behind a setting and the agent has three behind another, but the model that drops the "eee"s out of a sentence was always a request to OpenRouter, which meant a second key on a machine that already pays for a model and already hands whole dictations to it as commands. Claude Code and Codex can rewrite a sentence as easily as they can put something in your calendar, and now they may. cleanup.py is where that choice lives, so worker, the file transcriber and the meeting all ask the same question rather than each building the same OpenRouter request. What comes out of a CLI that failed is a CleanupError, which is an ApiError, because to the chain a cleanup that failed is a cleanup that failed however it was run: the raw transcript is still pasted and the reason still shows in the corner, unchanged. Neither CLI is given anything it does not need for the job. No tools, no MCP servers, no session to resume, and the home directory rather than wherever the agent is pointed, since a project's instructions have opinions about how text should be written and none of them are about this transcript. The transcript goes in fenced the same way the OpenRouter call fences it, because it is material rather than an instruction however much of it reads like one. Claude takes the cleanup rules as its whole system prompt; Codex has no system prompt of its own, so they ride in front of the text, and its answer is read from the file it writes on the way out rather than from a stdout that also carries a header, its thinking and a token count. The cost is seconds. OpenRouter answers in about one, a CLI in six or seven, because each one opens a whole session to do it. That is the trade the box says out loud, and the default has not moved: OpenRouter cleans up until you say otherwise. Codex's two lowest thinking levels now ask for "low". "minimal" was its bottom rung until the newer models replaced it with "none", and each of them answers the other's word with a 400, which the agent has been quietly hitting too. In the settings window the model box belongs to whoever is chosen rather than meaning three different things in turn, since an OpenRouter id and a Claude alias do not belong in the same field, and under it is the same "found it or not" line the agent tab has. dikte doctor asks about the program instead of the key when a CLI does the cleaning, and the history records which model actually did it. --- README.md | 7 +- README.tr.md | 7 +- assistant.py | 14 ++- cleanup.py | 181 ++++++++++++++++++++++++++++++++++ cli.py | 20 ++-- config.py | 3 + filetranscribe.py | 10 +- i18n.py | 20 ++++ meeting.py | 10 +- settings_ui.py | 74 +++++++++++++- tests/test_assistant.py | 15 +-- tests/test_cleanup.py | 211 ++++++++++++++++++++++++++++++++++++++++ tests/test_cli.py | 28 ++++++ tests/test_ui.py | 17 ++++ worker.py | 12 +-- 15 files changed, 580 insertions(+), 49 deletions(-) create mode 100644 cleanup.py create mode 100644 tests/test_cleanup.py diff --git a/README.md b/README.md index 4b42583..0dd4540 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Dikte Press `Ctrl+Space`, talk, press again. The recording goes to OpenAI or OpenRouter -for transcription, a model on OpenRouter cleans it up (dropping the *uh*s, the +for transcription, a model cleans it up (dropping the *uh*s, the restarts, the missing punctuation), and the result lands in your clipboard and is pasted into whatever window you were typing in. @@ -43,8 +43,8 @@ again and leaves your settings and dictations alone unless you pass `--purge`. Three keys go in the settings window: **OpenAI**, **Groq** and **OpenRouter**. Speech to text runs on any of them (`gpt-4o-transcribe` by default), cleanup -always on OpenRouter (`google/gemini-3.5-flash-lite`), so a single OpenRouter key -can cover both. They fall back to `OPENAI_API_KEY`, `GROQ_API_KEY` and +on OpenRouter (`google/gemini-3.5-flash-lite`) or, when either is installed, on +Claude Code or Codex instead, so a single OpenRouter key can cover both. They fall back to `OPENAI_API_KEY`, `GROQ_API_KEY` and `OPENROUTER_API_KEY`, and are stored in `~/.config/dikte/config.json`, mode 600. Cleanup can be switched off, in which case the raw transcript is pasted, and a thinking model's effort can be @@ -148,6 +148,7 @@ audio.py PCM capture: pw-record for dictation, ffmpeg for a meeting meeting.py channel split, speaker labelling, cleanup, minutes assistant.py running a dictation through Claude Code, Codex or OpenRouter api.py transcription on either provider, OpenRouter cleanup (stdlib only) +cleanup.py who rewrites the transcript: OpenRouter, Claude Code or Codex worker.py transcribe → clean up → clipboard → paste vad.py deciding whether a recording holds speech at all filetranscribe.py file transcription: ffmpeg, chunking, timestamps diff --git a/README.tr.md b/README.tr.md index 97b007d..29f2f95 100644 --- a/README.tr.md +++ b/README.tr.md @@ -1,7 +1,7 @@ # Dikte `Ctrl+Space`'e bas, konuş, tekrar bas. Ses OpenAI'ye ya da OpenRouter'a gidip -yazıya çevrilir, OpenRouter'daki bir model transkripti temizler (ıı'lar, +yazıya çevrilir, bir model transkripti temizler (ıı'lar, tekrarlar, eksik noktalama), sonuç panoya kopyalanır ve o an yazdığın pencereye yapıştırılır. @@ -44,8 +44,8 @@ diktelerine dokunmaz. Ayarlar penceresinde üç anahtar istenir: **OpenAI**, **Groq** ve **OpenRouter**. Sesi yazıya çevirme üçünden birinde çalışır (varsayılan `gpt-4o-transcribe`), -temizleme her zaman OpenRouter'da (`google/gemini-3.5-flash-lite`), yani tek bir -OpenRouter anahtarı ikisine de yeter. Boş bırakırsan `OPENAI_API_KEY`, +temizleme OpenRouter'da (`google/gemini-3.5-flash-lite`) ya da kuruluysa Claude +Code veya Codex'te, yani tek bir OpenRouter anahtarı ikisine de yeter. Boş bırakırsan `OPENAI_API_KEY`, `GROQ_API_KEY` ve `OPENROUTER_API_KEY` kullanılır; anahtarlar `~/.config/dikte/config.json` içinde, izinler 600. Temizlemeyi tamamen kapatabilirsin, o zaman ham transkript @@ -147,6 +147,7 @@ audio.py PCM kaydı: diktede pw-record, toplantıda ffmpeg meeting.py kanal ayırma, konuşmacı etiketi, temizleme, tutanak assistant.py dikteyi Claude Code, Codex ya da OpenRouter'dan geçirme api.py iki sağlayıcıda transkript + OpenRouter temizleme (yalnız stdlib) +cleanup.py transkripti kim temizler: OpenRouter, Claude Code ya da Codex worker.py transkript → temizleme → pano → yapıştırma vad.py kayıtta gerçekten konuşma var mı kararı filetranscribe.py dosyadan transkript: ffmpeg, parçalama, zaman damgaları diff --git a/assistant.py b/assistant.py index 20339bb..f708ab3 100644 --- a/assistant.py +++ b/assistant.py @@ -75,7 +75,10 @@ CODEX_ITEMS = { CLAUDE_EFFORT = {"none": "low", "minimal": "low", "low": "low", "medium": "medium", "high": "high", "xhigh": "xhigh", "max": "max"} -CODEX_EFFORT = {"none": "minimal", "minimal": "minimal", "low": "low", +# "minimal" was Codex's bottom rung until the newer models replaced it with +# "none", and each of them rejects the other's word for it with a 400. "low" is +# the one every model has, so the two lowest rungs land there instead. +CODEX_EFFORT = {"none": "low", "minimal": "low", "low": "low", "medium": "medium", "high": "high", "xhigh": "high", "max": "high"} @@ -421,7 +424,7 @@ def _conclude(found, code, stderr, session, service): if code != 0 and not found["answer"]: if session and _session_missing(stderr): raise _SessionGone() - raise AssistantError(_last_line(stderr) or found["failure"] or t( + raise AssistantError(last_line(stderr) or found["failure"] or t( "{service} exited with code {code}.", service=service, code=code)) if found["failure"] and not found["answer"]: raise AssistantError(found["failure"]) @@ -480,6 +483,11 @@ def _finish(proc): return stderr -def _last_line(text): +def last_line(text): + """The line worth showing out of a CLI's stderr: the last one it wrote. + + Shared with cleanup, which runs the same two programs for a different job + and fails the same way when they are unhappy. + """ lines = [line for line in (text or "").splitlines() if line.strip()] return lines[-1].strip() if lines else "" diff --git a/cleanup.py b/cleanup.py new file mode 100644 index 0000000..f937756 --- /dev/null +++ b/cleanup.py @@ -0,0 +1,181 @@ +"""Who rewrites the transcript once it has been heard. + +Normally a small model on OpenRouter: one request, a second, a few tenths of a +cent. A machine with Claude Code or Codex on it is already paying for a model +though, and the subscription that answers "put that in my calendar on Thursday" +can just as well take the "eee"s out of a sentence. No second key, no second +bill. It costs seconds rather than one, because a CLI opens a whole session to +do it, which is the trade. + +Whoever does it, the job is the same one: no tools, no files, no memory of the +last dictation. There is nothing here to look up and nothing to carry over, and +a transcript is text from a microphone rather than an instruction, so the less +the agent can reach while it reads one, the better. +""" + +import os +import shutil +import subprocess +import tempfile + +import api +import assistant +from i18n import t + +PROVIDERS = ("openrouter", "claude", "codex") + + +class CleanupError(api.ApiError): + """What a CLI could not do. + + An ApiError because to the chain a cleanup that failed is a cleanup that + failed, whichever way it was run, and every caller already catches one and + keeps the raw transcript. + """ + + +def provider(conf): + chosen = conf["cleanup_provider"] + return chosen if chosen in PROVIDERS else "openrouter" + + +def executable(name): + """The CLI a provider runs, or "" when it needs none.""" + return {"claude": "claude", "codex": "codex"}.get(name, "") + + +def model(conf): + """Which model does the cleaning, for the history and the settings window.""" + name = provider(conf) + if name == "claude": + return conf["cleanup_claude_model"].strip() or "haiku" + if name == "codex": + # Codex is left on whatever it is set to unless a model is typed in, so + # here there is only the name of the thing that did it. + return conf["cleanup_codex_model"].strip() or "codex" + return conf["cleanup_model"] + + +def run(text, conf, system_prompt, timeout=180): + """Hand the transcript to whoever is set to clean it up.""" + name = provider(conf) + if name == "openrouter": + return api.cleanup( + text, conf.openrouter_key(), conf["cleanup_model"], system_prompt, + reasoning=conf["cleanup_reasoning"], + base_url=conf["openrouter_base_url"], timeout=timeout, + ) + runner = _claude if name == "claude" else _codex + return runner(text, conf, system_prompt, timeout) + + +def _wrap(text): + """The same fence the OpenRouter call puts around it: this is the material, + not the instruction, however much of it reads like one.""" + return f"\n{text}\n" + + +# --- Claude Code ---------------------------------------------------------- + +def _claude(text, conf, system_prompt, timeout): + cmd = [ + "claude", "-p", _wrap(text), + # --system-prompt rather than --append-system-prompt: the cleanup rules + # are the whole job, and Claude Code's own instructions are about + # working on a codebase. + "--system-prompt", system_prompt, + "--model", model(conf), + "--output-format", "text", + "--tools", "", # nothing to run + "--strict-mcp-config", "--mcp-config", '{"mcpServers":{}}', + "--no-session-persistence", # nothing to resume + ] + effort = assistant.CLAUDE_EFFORT.get(conf["cleanup_reasoning"], "") + if effort: + cmd += ["--effort", effort] + + answer = _output(cmd, timeout, "Claude") + if not answer: + raise CleanupError(t("{service} answered with nothing.", service="Claude")) + return answer + + +# --- Codex ---------------------------------------------------------------- + +def _codex(text, conf, system_prompt, timeout): + # Codex takes no system prompt of its own, so the rules ride in front of the + # transcript, kept apart from it so the two are not read as one. + body = f"{system_prompt}\n\n---\n\n{_wrap(text)}" + cmd = [ + "codex", "exec", + "--sandbox", "read-only", # it has no reason to touch the disk + "--skip-git-repo-check", + "--ephemeral", # nothing to resume + "--color", "never", + "-c", 'approval_policy="never"', # there is nobody here to approve + ] + if conf["cleanup_codex_model"].strip(): + cmd += ["-m", conf["cleanup_codex_model"].strip()] + effort = assistant.CODEX_EFFORT.get(conf["cleanup_reasoning"], "") + if effort: + cmd += ["-c", f'model_reasoning_effort="{effort}"'] + + # `codex exec` prints a header, its thinking and a token count around the + # answer; the file it writes on the way out is the answer on its own. + handle, last_message = tempfile.mkstemp(prefix="dikte-cleanup-", suffix=".txt") + os.close(handle) + cmd += ["-o", last_message, body] + try: + _output(cmd, timeout, "Codex") + answer = _read(last_message) + finally: + try: + os.unlink(last_message) + except OSError: + pass + + if not answer: + raise CleanupError(t("{service} answered with nothing.", service="Codex")) + return answer + + +def _read(path): + try: + with open(path, encoding="utf-8", errors="replace") as fh: + return fh.read().strip() + except OSError: + return "" + + +# --- running a CLI -------------------------------------------------------- + +def _output(cmd, timeout, service): + """Run cmd to the end and return what it printed. + + It runs in the home directory rather than wherever the agent is pointed: a + project's instructions have opinions about how text should be written, and + none of them are about this transcript. + """ + binary = cmd[0] + if not shutil.which(binary): + raise CleanupError(t( + "{binary} not found. Install it, or have OpenRouter clean up " + "instead, under Settings → API and models.", binary=binary, + )) + try: + done = subprocess.run( + cmd, cwd=os.path.expanduser("~"), stdin=subprocess.DEVNULL, + capture_output=True, text=True, encoding="utf-8", errors="replace", + timeout=timeout, + ) + except subprocess.TimeoutExpired: + raise CleanupError(t("{service} did not finish within {seconds} seconds.", + service=service, seconds=timeout)) from None + except OSError as exc: + raise CleanupError(t("Could not run {binary}: {error}", + binary=binary, error=exc)) from exc + if done.returncode != 0: + raise CleanupError(assistant.last_line(done.stderr) or t( + "{service} exited with code {code}.", + service=service, code=done.returncode)) + return (done.stdout or "").strip() diff --git a/cli.py b/cli.py index d907537..334a957 100644 --- a/cli.py +++ b/cli.py @@ -25,6 +25,7 @@ from PyQt6.QtCore import QCoreApplication, QTimer import api import assistant import audio +import cleanup import config as cfg import filetranscribe import hotkey @@ -764,16 +765,18 @@ def cmd_status(opts): def cmd_doctor(opts): """What the settings window checks behind its buttons, in one pass.""" conf = cfg.Config() - programs = {name: shutil.which(name) or "" - for name in ("pw-record", "wl-copy", "ydotool", "ffmpeg", - "pactl", "kwriteconfig6", - assistant.executable(assistant.provider(conf)) or "claude")} + wanted = ["pw-record", "wl-copy", "ydotool", "ffmpeg", "pactl", "kwriteconfig6", + assistant.executable(assistant.provider(conf)) or "claude", + cleanup.executable(cleanup.provider(conf))] + programs = {name: shutil.which(name) or "" for name in wanted if name} target = conf.transcribe_target() + cleaner = cleanup.provider(conf) checks = { "programs": programs, "transcription": {"provider": target.provider, "model": target.model, "key": bool(target.api_key)}, - "cleanup": {"enabled": conf["cleanup_enabled"], "model": conf["cleanup_model"], + "cleanup": {"enabled": conf["cleanup_enabled"], "provider": cleaner, + "model": cleanup.model(conf), "key": bool(conf.openrouter_key())}, "agent": {"provider": assistant.provider(conf), "directory": assistant.working_dir(conf)}, @@ -784,8 +787,11 @@ def cmd_doctor(opts): lines += [ f"{'✓' if target.api_key else '✗'} {target.service} key, transcribing on " f"{target.model}", - f"{'✓' if conf.openrouter_key() else '✗'} OpenRouter key, cleaning up on " - f"{conf['cleanup_model']}", + # Cleanup on a CLI needs no key, so what is checked is the program. + (f"{'✓' if conf.openrouter_key() else '✗'} OpenRouter key, cleaning up on " + f"{conf['cleanup_model']}") if cleaner == "openrouter" else + (f"{'✓' if programs[cleanup.executable(cleaner)] else '✗'} " + f"{cleanup.executable(cleaner)}, cleaning up on {cleanup.model(conf)}"), f"{'✓' if checks['running'] else '·'} application " + ("running" if checks["running"] else "not running"), ] diff --git a/config.py b/config.py index 6d052b0..6476bad 100644 --- a/config.py +++ b/config.py @@ -375,7 +375,10 @@ DEFAULTS = { "language": "tr", "transcribe_prompt": "", "cleanup_enabled": True, + "cleanup_provider": "openrouter", # openrouter | claude | codex "cleanup_model": "google/gemini-3.5-flash-lite", + "cleanup_claude_model": "haiku", # Claude Code: an alias, or a full model id + "cleanup_codex_model": "", # empty -> whatever Codex is set to "cleanup_reasoning": "", # empty -> whatever the model does by default "cleanup_prompt": "", # empty -> language-specific default "auto_paste": True, diff --git a/filetranscribe.py b/filetranscribe.py index 4839d13..f797d58 100644 --- a/filetranscribe.py +++ b/filetranscribe.py @@ -17,6 +17,7 @@ import wave from PyQt6.QtCore import QObject, pyqtSignal import api +import cleanup from i18n import t CHUNK_SECONDS = 600 # 10 min ≈ 19 MB at 16 kHz mono s16 @@ -130,14 +131,7 @@ class FileTranscriber(QObject): out = [] for block in split_text(text, timestamps): self._check() - out.append(api.cleanup( - block, - conf.openrouter_key(), - conf["cleanup_model"], - prompt, - reasoning=conf["cleanup_reasoning"], - base_url=conf["openrouter_base_url"], - )) + out.append(cleanup.run(block, conf, prompt)) return ("\n" if timestamps else "\n\n").join(out) diff --git a/i18n.py b/i18n.py index 7466143..c414e34 100644 --- a/i18n.py +++ b/i18n.py @@ -186,6 +186,18 @@ TR = { "Connection works. {count} audio models visible.": "Bağlantı tamam. {count} ses modeli görünüyor.", "Clean the transcript with a model": "Transkripti bir modelle temizle", + "OpenRouter is the quickest and the only one that needs nothing installed. " + "Claude Code and Codex clean up on the subscription you already have, " + "without a second key, and take a few seconds longer because each one opens " + "a session to do it.": + "En hızlısı OpenRouter'dır ve kurulu bir program istemeyen tek seçenektir. " + "Claude Code ile Codex, temizliği hâlihazırda ödediğin abonelik üzerinden " + "yapar, ikinci bir anahtar istemez; her biri bunun için bir oturum açtığından " + "birkaç saniye daha uzun sürer.", + "{binary} is not on your PATH, so cleanup would fail and the raw transcript " + "would be pasted. Install it, or pick another one above.": + "{binary} PATH'te değil; temizleme başarısız olur ve ham transkript " + "yapıştırılır. Kur ya da yukarıdan başka birini seç.", "Thinking": "Düşünme", "Model's own default": "Modelin kendi varsayılanı", "Off": "Kapalı", @@ -380,6 +392,14 @@ TR = { "It was not allowed to use: {tools}": "Şunları kullanmasına izin yoktu: {tools}", "The model returned an empty reply.": "Model boş cevap döndürdü.", + # --- cleanup, when a CLI does it ---------------------------------------- + "{binary} not found. Install it, or have OpenRouter clean up instead, " + "under Settings → API and models.": + "{binary} bulunamadı. Kur ya da Ayarlar → API ve modeller sekmesinden " + "temizliği OpenRouter'a bırak.", + "{service} did not finish within {seconds} seconds.": + "{service} {seconds} saniye içinde bitmedi.", + # --- settings: the agent ------------------------------------------------ "Agent": "Ajan", "This shortcut records the same way dictation does, but the transcript is " diff --git a/meeting.py b/meeting.py index c0713c6..c178668 100644 --- a/meeting.py +++ b/meeting.py @@ -25,6 +25,7 @@ import wave from PyQt6.QtCore import QObject, pyqtSignal import api +import cleanup import config as cfg import filetranscribe import vad @@ -208,14 +209,7 @@ class MeetingPipeline(QObject): if len(blocks) > 1: self._say(t("Cleaning up {index}/{count}…", index=index, count=len(blocks))) - out.append(api.cleanup( - block, - conf.openrouter_key(), - conf["cleanup_model"], - prompt, - reasoning=conf["cleanup_reasoning"], - base_url=conf["openrouter_base_url"], - )) + out.append(cleanup.run(block, conf, prompt, timeout=600)) return "\n".join(out) def _write(self, doc_path, minutes, transcript, entry): diff --git a/settings_ui.py b/settings_ui.py index 3a36c7c..c3002f9 100644 --- a/settings_ui.py +++ b/settings_ui.py @@ -16,6 +16,7 @@ from PyQt6.QtWidgets import ( import api import assistant import audio +import cleanup import config as cfg import filetranscribe import hotkey @@ -49,6 +50,15 @@ CLEANUP_MODELS = [ "google/gemini-2.5-flash-lite", "anthropic/claude-haiku-4.5", "openai/gpt-5-mini", "meta-llama/llama-3.3-70b-instruct", ] +# The same two CLIs the agent can run on, doing the smaller job instead. They +# are offered second: a request to OpenRouter is over in a second, and a CLI +# opens a session first. +CLEANUP_PROVIDERS = [ + ("OpenRouter", "openrouter"), ("Claude Code", "claude"), ("Codex", "codex"), +] +# Cleaning up a sentence is the lightest thing either of them will ever be +# asked, so the small model comes first. +CLEANUP_CLAUDE_MODELS = ["haiku", "sonnet", "opus", "fable"] # Minutes are a harder job than cleanup: an hour of talk has to be read whole # and turned into decisions, so the starting points are the larger models. MEETING_MODELS = [ @@ -282,16 +292,42 @@ class SettingsWindow(QDialog): outer.addWidget(stt) orr = QGroupBox(t("Transcript cleanup")) - orr_form = QFormLayout(orr) + orr_form = self.cleanup_form = QFormLayout(orr) self.cleanup_enabled = QCheckBox(t("Clean the transcript with a model")) orr_form.addRow("", self.cleanup_enabled) + self.cleanup_provider = QComboBox() + for label, value in CLEANUP_PROVIDERS: + self.cleanup_provider.addItem(t(label), value) + self.cleanup_provider.setToolTip(t( + "OpenRouter is the quickest and the only one that needs nothing " + "installed. Claude Code and Codex clean up on the subscription you " + "already have, without a second key, and take a few seconds longer " + "because each one opens a session to do it." + )) + self.cleanup_provider.currentIndexChanged.connect(self._cleanup_provider_changed) + orr_form.addRow(t("Runs on"), self.cleanup_provider) + self.cleanup_model = QComboBox() self.cleanup_model.setEditable(True) self.cleanup_model.addItems(CLEANUP_MODELS) self.refresh_models = QPushButton(t("Fetch model list")) self.refresh_models.clicked.connect(self._load_models) - orr_form.addRow(t("Model"), self._row(self.cleanup_model, self.refresh_models)) + self.cleanup_model_row = self._row(self.cleanup_model, self.refresh_models) + orr_form.addRow(t("Model"), self.cleanup_model_row) + + # One row per provider rather than one box that means a different thing + # in each: an OpenRouter id and a Claude alias do not belong in the same + # field, and only the row of whoever is chosen is on screen. + self.cleanup_claude_model = QComboBox() + self.cleanup_claude_model.setEditable(True) + self.cleanup_claude_model.addItems(CLEANUP_CLAUDE_MODELS) + orr_form.addRow(t("Model"), self.cleanup_claude_model) + + self.cleanup_codex_model = QComboBox() + self.cleanup_codex_model.setEditable(True) + self.cleanup_codex_model.addItems([t("Codex's own default")] + CODEX_MODELS) + orr_form.addRow(t("Model"), self.cleanup_codex_model) self.cleanup_reasoning = QComboBox() for label, value in REASONING_LEVELS: @@ -951,6 +987,12 @@ class SettingsWindow(QDialog): self._provider_changed() # selecting index 0 fires no signal self.cleanup_enabled.setChecked(conf["cleanup_enabled"]) self.cleanup_model.setCurrentText(conf["cleanup_model"]) + self.cleanup_claude_model.setCurrentText(conf["cleanup_claude_model"]) + self.cleanup_codex_model.setCurrentText( + conf["cleanup_codex_model"] or t("Codex's own default") + ) + self._select_data(self.cleanup_provider, conf["cleanup_provider"]) + self._cleanup_provider_changed() # selecting index 0 fires no signal self._select_data(self.cleanup_reasoning, conf["cleanup_reasoning"]) self.cleanup_prompt.setPlainText(conf["cleanup_prompt"] or cfg.default_cleanup_prompt()) self.file_cleanup_prompt.setPlainText( @@ -1029,7 +1071,14 @@ class SettingsWindow(QDialog): conf[who.model] = self._models[name].strip() or cfg.DEFAULTS[who.model] conf["cleanup_enabled"] = self.cleanup_enabled.isChecked() + conf["cleanup_provider"] = self.cleanup_provider.currentData() or "openrouter" conf["cleanup_model"] = self.cleanup_model.currentText().strip() + conf["cleanup_claude_model"] = (self.cleanup_claude_model.currentText().strip() + or cfg.DEFAULTS["cleanup_claude_model"]) + codex_cleanup_model = self.cleanup_codex_model.currentText().strip() + conf["cleanup_codex_model"] = ( + "" if codex_cleanup_model == t("Codex's own default") else codex_cleanup_model + ) conf["cleanup_reasoning"] = self.cleanup_reasoning.currentData() or "" # Store an empty prompt when it matches the default, so switching the @@ -1347,6 +1396,27 @@ class SettingsWindow(QDialog): else missing ) + def _cleanup_provider_changed(self): + provider = self.cleanup_provider.currentData() or "openrouter" + self.cleanup_form.setRowVisible(self.cleanup_model_row, + provider == "openrouter") + self.cleanup_form.setRowVisible(self.cleanup_claude_model, + provider == "claude") + self.cleanup_form.setRowVisible(self.cleanup_codex_model, + provider == "codex") + binary = cleanup.executable(provider) + found = shutil.which(binary) if binary else "" + if not binary: + self.models_label.setText(t("Runs on OpenRouter.")) + elif found: + self.models_label.setText(t("Found: {path}", path=found)) + else: + self.models_label.setText(t( + "{binary} is not on your PATH, so cleanup would fail and the raw " + "transcript would be pasted. Install it, or pick another one " + "above.", binary=binary, + )) + def _assistant_provider_changed(self): provider = self.assistant_provider.currentData() or "claude" self.claude_box.setVisible(provider == "claude") diff --git a/tests/test_assistant.py b/tests/test_assistant.py index 8fee724..c57cfbe 100644 --- a/tests/test_assistant.py +++ b/tests/test_assistant.py @@ -79,9 +79,12 @@ class Effort(unittest.TestCase): self.assertEqual(assistant.CODEX_EFFORT["xhigh"], "high") self.assertEqual(assistant.CODEX_EFFORT["max"], "high") - def test_claude_has_no_rung_below_low(self): - self.assertEqual(assistant.CLAUDE_EFFORT["none"], "low") - self.assertEqual(assistant.CLAUDE_EFFORT["minimal"], "low") + def test_neither_one_asks_for_a_rung_below_low(self): + # Claude has none; Codex has one, but calls it "minimal" on the older + # models and "none" on the newer ones, and refuses the wrong word. + for scale in (assistant.CLAUDE_EFFORT, assistant.CODEX_EFFORT): + self.assertEqual(scale["none"], "low") + self.assertEqual(scale["minimal"], "low") def test_an_empty_setting_asks_for_nothing(self): self.assertEqual(assistant.CLAUDE_EFFORT.get("", ""), "") @@ -232,10 +235,10 @@ class SessionMissing(unittest.TestCase): self.assertFalse(assistant._session_missing(text)) def test_the_last_line_is_the_one_worth_showing(self): - self.assertEqual(assistant._last_line("warning\n\nreal error\n"), + self.assertEqual(assistant.last_line("warning\n\nreal error\n"), "real error") - self.assertEqual(assistant._last_line(""), "") - self.assertEqual(assistant._last_line(None), "") + self.assertEqual(assistant.last_line(""), "") + self.assertEqual(assistant.last_line(None), "") class Conclude(DikteTest): diff --git a/tests/test_cleanup.py b/tests/test_cleanup.py new file mode 100644 index 0000000..84d56b4 --- /dev/null +++ b/tests/test_cleanup.py @@ -0,0 +1,211 @@ +"""Who cleans the transcript up, and what they are asked. + +The CLIs are faked at subprocess.run: what the tests read is the argument list +each one is given, where the answer is picked up from, and what happens to the +chain when the program is missing, slow or unhappy. The OpenRouter path is the +one that was always there and is checked here only for still being taken. +""" + +import os +import subprocess +import unittest +from unittest import mock + +import api +import cleanup +from tests.support import DikteTest + + +def fake_run(stdout="", code=0, stderr="", last_message=""): + """Stand in for subprocess.run, writing the file Codex would have written.""" + calls = [] + + def run(cmd, **kwargs): + calls.append(cmd) + if last_message and "-o" in cmd: + with open(cmd[cmd.index("-o") + 1], "w", encoding="utf-8") as fh: + fh.write(last_message) + return subprocess.CompletedProcess(cmd, code, stdout, stderr) + + return mock.patch.object(subprocess, "run", side_effect=run), calls + + +class Provider(DikteTest): + def test_the_default_is_still_openrouter(self): + self.assertEqual(cleanup.provider(self.config()), "openrouter") + + def test_a_provider_this_version_does_not_have(self): + self.assertEqual( + cleanup.provider(self.config(cleanup_provider="ollama")), "openrouter") + + def test_each_one_is_recognised(self): + for name in cleanup.PROVIDERS: + with self.subTest(name=name): + self.assertEqual( + cleanup.provider(self.config(cleanup_provider=name)), name) + + def test_what_each_one_runs(self): + self.assertEqual(cleanup.executable("claude"), "claude") + self.assertEqual(cleanup.executable("codex"), "codex") + self.assertEqual(cleanup.executable("openrouter"), "") + + def test_the_model_named_in_the_history_is_the_one_that_did_it(self): + self.assertEqual(cleanup.model(self.config(cleanup_model="some/model")), + "some/model") + self.assertEqual( + cleanup.model(self.config(cleanup_provider="claude")), "haiku") + self.assertEqual( + cleanup.model(self.config(cleanup_provider="claude", + cleanup_claude_model="opus")), "opus") + # Codex on its own default has no model id to report, only a name. + self.assertEqual( + cleanup.model(self.config(cleanup_provider="codex")), "codex") + self.assertEqual( + cleanup.model(self.config(cleanup_provider="codex", + cleanup_codex_model="gpt-5.4")), "gpt-5.4") + + +class OpenRouter(DikteTest): + def test_it_is_still_one_request_with_the_settings_as_they_were(self): + conf = self.config(openrouter_api_key="sk-or-test", + cleanup_model="some/model", cleanup_reasoning="low") + with mock.patch.object(api, "cleanup", return_value="Done.") as call: + self.assertEqual(cleanup.run("uh, done", conf, "the rules"), "Done.") + text, key, model, prompt = call.call_args.args + self.assertEqual((text, key, model, prompt), + ("uh, done", "sk-or-test", "some/model", "the rules")) + self.assertEqual(call.call_args.kwargs["reasoning"], "low") + + def test_no_cli_is_started_for_it(self): + conf = self.config(openrouter_api_key="sk-or-test") + patcher, calls = fake_run(stdout="never") + with patcher, mock.patch.object(api, "cleanup", return_value="Done."): + cleanup.run("uh, done", conf, "the rules") + self.assertEqual(calls, []) + + +class ClaudeCode(DikteTest): + def setUp(self): + super().setUp() + self.conf = self.config(cleanup_provider="claude") + self.patch_attr(cleanup.shutil, "which", lambda name: f"/usr/bin/{name}") + + def run_cleanup(self, text="uh, book it", **kwargs): + patcher, calls = fake_run(**kwargs) + with patcher: + answer = cleanup.run(text, self.conf, "the rules") + return answer, calls[0] + + def test_the_transcript_goes_in_fenced_and_the_rules_go_in_as_the_prompt(self): + answer, cmd = self.run_cleanup(stdout="Book it.\n") + self.assertEqual(answer, "Book it.") + self.assertEqual(cmd[0], "claude") + self.assertIn("\nuh, book it\n", cmd) + self.assertEqual(cmd[cmd.index("--system-prompt") + 1], "the rules") + self.assertEqual(cmd[cmd.index("--model") + 1], "haiku") + + def test_it_is_given_nothing_to_run_and_nothing_to_remember(self): + _, cmd = self.run_cleanup(stdout="Book it.") + self.assertEqual(cmd[cmd.index("--tools") + 1], "") + self.assertIn("--strict-mcp-config", cmd) + self.assertIn("--no-session-persistence", cmd) + + def test_the_thinking_setting_is_carried_over_in_its_own_words(self): + self.conf["cleanup_reasoning"] = "none" + _, cmd = self.run_cleanup(stdout="Book it.") + self.assertEqual(cmd[cmd.index("--effort") + 1], "low") + + def test_no_thinking_setting_means_no_flag(self): + _, cmd = self.run_cleanup(stdout="Book it.") + self.assertNotIn("--effort", cmd) + + def test_a_model_of_your_own(self): + self.conf["cleanup_claude_model"] = "claude-sonnet-5" + _, cmd = self.run_cleanup(stdout="Book it.") + self.assertEqual(cmd[cmd.index("--model") + 1], "claude-sonnet-5") + + def test_an_answer_of_nothing_is_a_failure_rather_than_an_empty_paste(self): + with self.assertRaises(cleanup.CleanupError): + self.run_cleanup(stdout=" \n") + + def test_the_last_line_of_the_complaint_is_what_gets_shown(self): + with self.assertRaises(cleanup.CleanupError) as caught: + self.run_cleanup(code=1, stderr="a warning\nout of credit\n") + self.assertEqual(str(caught.exception), "out of credit") + + def test_a_failure_is_the_same_kind_the_chain_already_catches(self): + # worker, the file transcriber and the meeting all keep the raw + # transcript when an ApiError comes out of here. + self.assertTrue(issubclass(cleanup.CleanupError, api.ApiError)) + + def test_a_program_that_is_not_installed_says_so_before_running_anything(self): + self.patch_attr(cleanup.shutil, "which", lambda name: "") + with self.assertRaises(cleanup.CleanupError) as caught: + self.run_cleanup(stdout="Book it.") + self.assertIn("claude", str(caught.exception)) + + def test_a_run_that_never_ends(self): + def run(cmd, **kwargs): + raise subprocess.TimeoutExpired(cmd, 180) + + with mock.patch.object(subprocess, "run", side_effect=run): + with self.assertRaises(cleanup.CleanupError) as caught: + cleanup.run("uh, book it", self.conf, "the rules") + self.assertIn("180", str(caught.exception)) + + +class Codex(DikteTest): + def setUp(self): + super().setUp() + self.conf = self.config(cleanup_provider="codex") + self.patch_attr(cleanup.shutil, "which", lambda name: f"/usr/bin/{name}") + + def run_cleanup(self, text="uh, book it", **kwargs): + patcher, calls = fake_run(**kwargs) + with patcher: + answer = cleanup.run(text, self.conf, "the rules") + return answer, calls[0] + + def test_the_rules_ride_in_front_of_the_transcript(self): + answer, cmd = self.run_cleanup(last_message="Book it.\n") + self.assertEqual(answer, "Book it.") + self.assertEqual(cmd[:2], ["codex", "exec"]) + self.assertEqual(cmd[-1], + "the rules\n\n---\n\n\nuh, book it\n") + + def test_the_answer_is_read_from_the_file_rather_than_the_noise_on_stdout(self): + answer, _ = self.run_cleanup( + stdout="workdir: /home\nmodel: gpt-5.4\ntokens used 400\n", + last_message="Book it.", + ) + self.assertEqual(answer, "Book it.") + + def test_that_file_does_not_stay_behind(self): + _, cmd = self.run_cleanup(last_message="Book it.") + self.assertFalse(os.path.exists(cmd[cmd.index("-o") + 1])) + + def test_it_may_read_but_not_write_and_has_nobody_to_ask(self): + _, cmd = self.run_cleanup(last_message="Book it.") + self.assertEqual(cmd[cmd.index("--sandbox") + 1], "read-only") + self.assertIn('approval_policy="never"', cmd) + self.assertIn("--ephemeral", cmd) + + def test_the_model_is_left_alone_until_one_is_typed_in(self): + _, cmd = self.run_cleanup(last_message="Book it.") + self.assertNotIn("-m", cmd) + self.conf["cleanup_codex_model"] = "gpt-5.4" + _, cmd = self.run_cleanup(last_message="Book it.") + self.assertEqual(cmd[cmd.index("-m") + 1], "gpt-5.4") + + def test_the_thinking_setting_lands_on_the_nearest_rung_codex_has(self): + self.conf["cleanup_reasoning"] = "xhigh" + _, cmd = self.run_cleanup(last_message="Book it.") + self.assertIn('model_reasoning_effort="high"', cmd) + + def test_an_answer_of_nothing(self): + with self.assertRaises(cleanup.CleanupError): + self.run_cleanup(stdout="tokens used 400", last_message="") + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_cli.py b/tests/test_cli.py index cb09bc0..9547df2 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -366,6 +366,34 @@ class Providers(DikteTest): self.assertIn("Groq", out) +class Doctor(DikteTest): + """One pass over everything the settings window checks behind its buttons.""" + + def run_doctor(self, as_json=True, **settings): + self.write_config(settings) + with mock.patch.object(ipc, "send", return_value=None), \ + captured() as (out, _err): + cli.cmd_doctor(Options(json=as_json)) + return json.loads(out.getvalue()) if as_json else out.getvalue() + + def test_cleanup_on_openrouter_is_a_question_about_the_key(self): + reply = self.run_doctor(cleanup_model="some/model") + self.assertEqual(reply["cleanup"]["provider"], "openrouter") + self.assertEqual(reply["cleanup"]["model"], "some/model") + self.assertIn("OpenRouter key, cleaning up on some/model", + self.run_doctor(as_json=False, cleanup_model="some/model")) + + def test_cleanup_on_a_cli_is_a_question_about_the_program(self): + reply = self.run_doctor(cleanup_provider="codex", + cleanup_codex_model="gpt-5.4") + self.assertEqual(reply["cleanup"]["provider"], "codex") + self.assertEqual(reply["cleanup"]["model"], "gpt-5.4") + self.assertIn("codex", reply["programs"]) + self.assertIn("codex, cleaning up on gpt-5.4", + self.run_doctor(as_json=False, cleanup_provider="codex", + cleanup_codex_model="gpt-5.4")) + + class Finding(DikteTest): def test_no_history_at_all(self): self.assertIsNone(cli._find_history("last")) diff --git a/tests/test_ui.py b/tests/test_ui.py index 892e736..e6d1aba 100644 --- a/tests/test_ui.py +++ b/tests/test_ui.py @@ -44,7 +44,10 @@ CHANGED = { "groq_transcribe_model": "whisper-large-v3", "openrouter_transcribe_model": "openai/whisper-1", "cleanup_enabled": False, + "cleanup_provider": "claude", "cleanup_model": "some/other-model", + "cleanup_claude_model": "opus", + "cleanup_codex_model": "gpt-5", "cleanup_reasoning": "high", "cleanup_prompt": "Only fix the punctuation.", "file_cleanup_prompt": "Keep the stamps where they are.", @@ -128,6 +131,20 @@ class Settings(DikteTest): with self.subTest(key=key): self.assertEqual(stored[key], value) + def test_the_model_box_on_screen_belongs_to_whoever_cleans_up(self): + """An OpenRouter id and a Claude alias are not the same field.""" + window = self.window(cfg.Config()) + boxes = {"openrouter": window.cleanup_model_row, + "claude": window.cleanup_claude_model, + "codex": window.cleanup_codex_model} + for provider, box in boxes.items(): + with self.subTest(provider=provider): + window._select_data(window.cleanup_provider, provider) + shown = [name for name, other in boxes.items() + if not other.isHidden()] + self.assertEqual(shown, [provider]) + self.assertFalse(box.isHidden()) + def test_the_settings_the_window_does_not_show_are_left_alone(self): """A tab nobody wrote must not reset what the command line set.""" self.write_config({"silence_db": -42.0, "speech_margin_db": 15.0, diff --git a/worker.py b/worker.py index ba27107..012ab07 100644 --- a/worker.py +++ b/worker.py @@ -18,6 +18,7 @@ from PyQt6.QtCore import QObject, pyqtSignal import api import assistant import audio +import cleanup import config as cfg import i18n import paste @@ -112,14 +113,7 @@ class Pipeline(QObject): if (conf["assistant_cleanup"] if ask else conf["cleanup_enabled"]): self.stage.emit(t("Cleaning up…")) try: - text = api.cleanup( - raw, - conf.openrouter_key(), - conf["cleanup_model"], - conf.cleanup_prompt(), - reasoning=conf["cleanup_reasoning"], - base_url=conf["openrouter_base_url"], - ) + text = cleanup.run(raw, conf, conf.cleanup_prompt()) except api.ApiError as exc: # Keep the transcript, but never let the failure pass unseen: # a rejected key would otherwise look like working dictation. @@ -159,7 +153,7 @@ class Pipeline(QObject): "duration": round(duration, 1), "elapsed": round(time.monotonic() - started, 1), "model": target.model, - "cleanup_model": conf["cleanup_model"] if conf["cleanup_enabled"] else "", + "cleanup_model": cleanup.model(conf) if conf["cleanup_enabled"] else "", "cleanup_error": warning, "mode": "ask" if ask else "", "question": question, From c0b892f53c1a066c2931afc3c791819b513d5952 Mon Sep 17 00:00:00 2001 From: yusufipk Date: Sat, 1 Aug 2026 20:00:21 +0300 Subject: [PATCH 06/13] Fetch whisper.cpp and llama.cpp, and keep a server alive on each Two programs, one treatment: ask GitHub what was released, take the build this machine can run, check it against the sha256 the index published, then fetch a model from Hugging Face the same way and keep one server up on a port of its own. Neither list is written into the source. A model catalogue in here means a release of Dikte for every model somebody else publishes, and a pinned version means one for every whisper.cpp release; both are somebody else's news. The lists are read at the moment the settings window is opened and cached for a few hours, and a cache that has gone stale still answers when the network does not. Nothing that lands on disk is trusted for having arrived, which matters more here than usual because half of what is fetched is a program Dikte then runs. --- ggml.py | 760 +++++++++++++++++++++++++++++++++++++++++++++ hub.py | 186 +++++++++++ tests/test_ggml.py | 582 ++++++++++++++++++++++++++++++++++ tests/test_hub.py | 184 +++++++++++ 4 files changed, 1712 insertions(+) create mode 100644 ggml.py create mode 100644 hub.py create mode 100644 tests/test_ggml.py create mode 100644 tests/test_hub.py diff --git a/ggml.py b/ggml.py new file mode 100644 index 0000000..1ea8d66 --- /dev/null +++ b/ggml.py @@ -0,0 +1,760 @@ +"""Speech to text and cleanup on this machine: whisper.cpp and llama.cpp. + +Two programs, one treatment. Fetch a release from GitHub, unpack it under the +data directory, fetch a model from Hugging Face, then keep one server alive on a +port of its own. Both of them speak the shape api.py already sends to the hosted +providers, so what the rest of Dikte sees is a base URL and nothing else: +whisper-server is started on `--inference-path /v1/audio/transcriptions`, the +exact path api.py builds, and llama-server answers /v1/chat/completions the way +OpenRouter does. + +A server rather than a one-shot run, because the model is the slow part. Loading +a large whisper model takes a second or two while transcribing a few seconds of +speech takes a fraction of one, and an LLM is worse: a server pays that once and +a run per dictation pays it every time. + +Nothing downloaded is trusted for having arrived. Every file is checked against +the sha256 its index published, and the bytes go to a `.part` that is only +renamed once the whole thing is there, so an interrupted download can never be +mistaken for a working one. + +This module imports hub and the string table, and nothing else of Dikte's: it +knows how to fetch a file and how to run a process, and nothing about dictation. +Its errors leave as LocalError and api.py turns them into the ApiError the +interface already knows how to show. +""" + +import atexit +import collections +import ctypes.util +import hashlib +import http.client +import json +import os +import pathlib +import platform +import shutil +import signal +import socket +import subprocess +import tarfile +import threading +import time +import urllib.error +import urllib.request + +import hub +from i18n import t + +HOST = "127.0.0.1" +# The path api.py asks for, so its URL and the server's line up. +INFERENCE_PATH = "/v1/audio/transcriptions" + +DATA_DIR = (pathlib.Path(os.environ.get("XDG_DATA_HOME") + or os.path.expanduser("~/.local/share")) / "dikte") +BIN_DIR = DATA_DIR / "bin" +MODELS_DIR = DATA_DIR / "models" + +# Loading a large model onto a GPU is the slow part of a start, and on a cold +# page cache a large LLM read from a spinning disk is slower still. +STARTUP_TIMEOUT = 180.0 +DOWNLOAD_CHUNK = 1 << 20 + +# `health` is the path that answers only once the model is in memory. whisper +# does not have one and does not need one: it binds its port after the model is +# loaded, so the port opening is the signal. +Program = collections.namedtuple("Program", "name repo binary health") + +WHISPER = Program("whisper", "ggml-org/whisper.cpp", "whisper-server", "") +LLAMA = Program("llama", "ggml-org/llama.cpp", "llama-server", "/health") + +# Where the models are listed. Neither list is written into Dikte: a catalogue +# in the source means a release of Dikte for every model somebody else +# publishes. +WHISPER_MODELS_REPO = "ggerganov/whisper.cpp" +LLM_AUTHOR = "ggml-org" + +# What the whisper repository holds besides models: Core ML encoders for Apple +# hardware and the odd loose file. +WHISPER_PREFIX = "ggml-" +WHISPER_SUFFIX = ".bin" + +# What a GGUF repository holds besides the model: mmproj is the vision half of a +# multimodal model, mtp a draft head for speculative decoding. Neither is a model +# a server can be started on, and offering them is offering a failure. +GGUF_SKIP = ("mmproj", "mtp-") +# Big enough for a 12B at Q4 and far past anything cleanup wants; the point is +# to keep a 400 GB frontier model out of a list somebody might click. +GGUF_MAX_BYTES = 16 << 30 + +# Suggestions, not a catalogue: the list itself is fetched, and these are only +# the rows that float to the top of it. Small instruction-following models, +# because cleanup is punctuation and filler words rather than anything that +# wants thinking about. +SUGGESTED_LLM = ( + "ggml-org/gemma-3-4b-it-GGUF", + "ggml-org/gemma-4-E2B-it-GGUF", + "ggml-org/gemma-4-E4B-it-GGUF", + "ggml-org/SmolLM3-3B-GGUF", +) +# Turbo at q5_0 is smaller than `small` and better than it, which makes the +# usual "start small" advice point at the same file as "start good". +SUGGESTED_WHISPER = "ggml-large-v3-turbo-q5_0.bin" + + +class LocalError(Exception): + pass + + +def human_size(count): + for unit in ("B", "KB", "MB", "GB"): + if count < 1024 or unit == "GB": + return f"{count:.0f} {unit}" if unit == "B" else f"{count:.1f} {unit}" + count /= 1024.0 + return f"{count:.1f} GB" + + +# --- fetching ------------------------------------------------------------- + + +def download(item, target, on_progress=None, should_stop=None): + """Fetch one hub.Item to `target`. True when it landed, False when stopped. + + The bytes go to a `.part` that is renamed only after both the length and the + hash agree with what the index said. A truncated file would otherwise sit + there looking installed and fail much later, inside a server, as a corrupt + model; a file that is the right length but the wrong content is worse, and + this is a program as often as it is a model. + """ + target = pathlib.Path(target) + part = target.with_name(target.name + ".part") + try: + target.parent.mkdir(parents=True, exist_ok=True) + except OSError as exc: + raise LocalError(t("Could not create {path}: {error}", + path=target.parent, error=exc)) from exc + + request = urllib.request.Request(item.url, headers={"User-Agent": hub.USER_AGENT}) + digest = hashlib.sha256() + done = 0 + try: + with urllib.request.urlopen(request, timeout=60) as response: + total = int(response.headers.get("Content-Length") or item.size or 0) + with open(part, "wb") as out: + while True: + if should_stop is not None and should_stop(): + part.unlink(missing_ok=True) + return False + block = response.read(DOWNLOAD_CHUNK) + if not block: + break + out.write(block) + digest.update(block) + done += len(block) + # More than was announced: a body that does not end is the + # one way this loop could run until the disk is full. + if total and done > total: + part.unlink(missing_ok=True) + raise LocalError(t("{name} is longer than it said it " + "would be.", name=item.name)) + if on_progress is not None: + on_progress(done, total) + # A proxy notice or an error page that came back as 200 would otherwise + # be renamed into place and only fail when something tries to read it. + if total and done != total: + part.unlink(missing_ok=True) + raise LocalError(t("The download stopped early ({done} of {total}).", + done=human_size(done), total=human_size(total))) + if item.sha256 and digest.hexdigest() != item.sha256: + part.unlink(missing_ok=True) + raise LocalError(t("{name} does not match its published checksum. " + "Nothing was installed.", name=item.name)) + part.replace(target) + return True + except urllib.error.HTTPError as exc: + part.unlink(missing_ok=True) + exc.close() # it holds the response body open until it is collected + raise LocalError(t("Could not download {name}: HTTP {code}", + name=item.name, code=exc.code)) from exc + except urllib.error.URLError as exc: + part.unlink(missing_ok=True) + raise LocalError(t("Could not download {name}: {error}", + name=item.name, error=exc.reason)) from exc + except OSError as exc: + # A connection cut mid-body arrives here too, and gigabytes in is + # exactly where that happens. + part.unlink(missing_ok=True) + raise LocalError(t("Could not write {name}: {error}", + name=item.name, error=exc)) from exc + + +# --- the programs --------------------------------------------------------- + + +def _arch(): + machine = platform.machine().lower() + if machine in ("aarch64", "arm64"): + return "arm64" + return "x64" + + +def _has_vulkan(): + """Whether a Vulkan loader is installed, which decides which build to fetch. + + llama.cpp publishes no CUDA build for Linux, so Vulkan is what a graphics + card gets here. The build without it is smaller and runs on the CPU, and + fetching the Vulkan one for a machine that cannot load it would only make + the download bigger. + """ + return bool(ctypes.util.find_library("vulkan")) + + +def _wanted_assets(program): + """Asset name endings to accept, best first.""" + arch = _arch() + if program is LLAMA and _has_vulkan(): + return (f"bin-ubuntu-vulkan-{arch}.tar.gz", f"bin-ubuntu-{arch}.tar.gz") + return (f"bin-ubuntu-{arch}.tar.gz",) + + +def _install_record(program): + return BIN_DIR / program.name / "installed.json" + + +def installed_program(program): + """The binary Dikte downloaded, or "" when there is none that still runs.""" + try: + record = json.loads(_install_record(program).read_text(encoding="utf-8")) + path = record.get("binary") or "" + except (OSError, ValueError): + return "" + return path if os.path.isfile(path) and os.access(path, os.X_OK) else "" + + +def installed_version(program): + try: + record = json.loads(_install_record(program).read_text(encoding="utf-8")) + return record.get("tag") or "" + except (OSError, ValueError): + return "" + + +def program_path(program, custom=""): + """Which copy of the program to run, or "" when there is none. + + A system one wins over a downloaded one. The distribution package is built + against whatever the machine has, which on this platform means it may reach + the graphics card, while the release binaries carry CPU backends only. + """ + custom = (custom or "").strip() + if custom: + return custom if os.path.isfile(custom) and os.access(custom, os.X_OK) else "" + return shutil.which(program.binary) or installed_program(program) + + +def system_program(program): + """Whether the program came from the system rather than from Dikte.""" + return bool(shutil.which(program.binary)) + + +def _find_binary(root, name): + for path in sorted(pathlib.Path(root).rglob(name)): + if path.is_file(): + return path + return None + + +def _extract(archive, into): + """Unpack a release tarball, refusing anything that reaches outside `into`. + + The archives lay their libraries next to their binaries and are linked with + an $ORIGIN runpath, so a whole directory is what has to survive the trip and + the binary cannot be lifted out of it. + """ + try: + with tarfile.open(archive, "r:gz") as tar: + try: + tar.extractall(into, filter="data") + except TypeError: # Python without the extraction filters + tar.extractall(into) + except (tarfile.TarError, OSError) as exc: + raise LocalError(t("Could not unpack {name}: {error}", + name=os.path.basename(str(archive)), error=exc)) from exc + + +def install_program(program, tag="", on_progress=None, should_stop=None, + refresh=False): + """Fetch and unpack a release. The path to the binary, or "" when stopped. + + `tag` is empty for whatever the project released last, which is the point: + a version pinned in Dikte's source would mean a release of Dikte every time + whisper.cpp has one. + """ + try: + tag, assets = hub.release(program.repo, tag or "latest", refresh=refresh) + except hub.HubError as exc: + raise LocalError(str(exc)) from exc + + item = None + for ending in _wanted_assets(program): + item = next((a for a in assets if a.name.endswith(ending)), None) + if item: + break + if item is None: + raise LocalError(t("{repo} {tag} has no build for this machine.", + repo=program.repo, tag=tag)) + + into = BIN_DIR / program.name / tag + shutil.rmtree(into, ignore_errors=True) + archive = BIN_DIR / program.name / item.name + try: + if not download(item, archive, on_progress, should_stop): + return "" + _extract(archive, into) + binary = _find_binary(into, program.binary) + if binary is None: + raise LocalError(t("{name} was not in the download.", + name=program.binary)) + binary.chmod(binary.stat().st_mode | 0o111) + _install_record(program).write_text( + json.dumps({"tag": tag, "binary": str(binary)}), encoding="utf-8") + except OSError as exc: + raise LocalError(t("Could not install {name}: {error}", + name=program.name, error=exc)) from exc + finally: + try: + archive.unlink(missing_ok=True) + except OSError: + pass + _drop_old_versions(program, keep=tag) + return str(binary) + + +def _drop_old_versions(program, keep): + """Leave one unpacked release behind, not one per update.""" + root = BIN_DIR / program.name + try: + for path in root.iterdir(): + if path.is_dir() and path.name != keep: + shutil.rmtree(path, ignore_errors=True) + except OSError: + pass + + +# --- the models ----------------------------------------------------------- + + +def whisper_models(refresh=False): + """[hub.Item] for every whisper model on offer, smallest first.""" + try: + files = hub.files(WHISPER_MODELS_REPO, refresh=refresh) + except hub.HubError as exc: + raise LocalError(str(exc)) from exc + models = [f for f in files + if f.name.startswith(WHISPER_PREFIX) and f.name.endswith(WHISPER_SUFFIX) + and f.size > 0] + return sorted(models, key=lambda f: f.size) + + +def llm_repos(refresh=False): + """Repository ids for the GGUF models on offer, suggestions first.""" + try: + found = [r.id for r in hub.repos(author=LLM_AUTHOR, refresh=refresh)] + except hub.HubError: + # A menu rather than a catalogue: with nothing to show, the suggestions + # are still worth showing, and whatever is wrong with the network will + # say so where it matters, when a download is asked for. + found = [] + if not found: + return list(SUGGESTED_LLM) + first = [r for r in SUGGESTED_LLM if r in found] + return first + [r for r in found if r not in first] + + +def llm_quants(repo, refresh=False): + """[hub.Item] for the model files in one GGUF repository, smallest first.""" + try: + files = hub.files(repo, refresh=refresh) + except hub.HubError as exc: + raise LocalError(str(exc)) from exc + out = [] + for item in files: + name = item.name.rsplit("/", 1)[-1] + if not name.endswith(".gguf") or name.startswith(GGUF_SKIP): + continue + # A model split across files needs all of them and a different command + # line; anything cleanup wants fits in one. + if "-of-000" in name or not 0 < item.size <= GGUF_MAX_BYTES: + continue + out.append(item) + return sorted(out, key=lambda f: f.size) + + +def whisper_model_path(name): + return MODELS_DIR / "whisper" / name + + +def llm_model_path(name): + return MODELS_DIR / "llm" / name.rsplit("/", 1)[-1] + + +def have_model(path): + path = pathlib.Path(path) + return path.is_file() and path.stat().st_size > 0 + + +def installed_whisper_models(): + return sorted(p.name for p in (MODELS_DIR / "whisper").glob("*.bin")) + + +def installed_llm_models(): + return sorted(p.name for p in (MODELS_DIR / "llm").glob("*.gguf")) + + +def delete_model(path): + try: + pathlib.Path(path).unlink() + except FileNotFoundError: + pass + except OSError as exc: + raise LocalError(t("Could not delete the model: {error}", error=exc)) from exc + + +# --- one server ----------------------------------------------------------- + + +def _free_port(): + """A port nothing is listening on, handed straight to the server. + + Between closing this socket and the server binding it, something else could + take it; that is why a start retries rather than trusting the number. + """ + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: + sock.bind((HOST, 0)) + return sock.getsockname()[1] + + +def _listening(port): + try: + with socket.create_connection((HOST, port), timeout=0.5): + return True + except OSError: + return False + + +def _healthy(port, path): + """Whether the model is in memory, for a server that says so. + + Spoken over http.client rather than urllib because this never leaves the + machine: it is the same question as _listening, one layer up. + """ + connection = http.client.HTTPConnection(HOST, port, timeout=2) + try: + connection.request("GET", path) + # 503 for as long as the model is still being read in. + return connection.getresponse().status == 200 + except (http.client.HTTPException, OSError): + return False + finally: + connection.close() + + +def _tail(path, lines=3): + try: + with open(path, encoding="utf-8", errors="replace") as fh: + found = [line.strip() for line in fh if line.strip()] + except OSError: + return "" + return " | ".join(found[-lines:]) + + +class Server: + """One process, started when something needs it and stopped when nothing does. + + `build` turns the settings into a command line; everything else about + running a server is the same for both programs. + """ + + def __init__(self, program, build, defaults): + self.program = program + self._build = build + self._settings = dict(defaults) + # Two locks on purpose. `_lock` is held for the length of a dictionary + # lookup, so the interface can ask what is running while a model is + # being loaded; `_starting` is held across the start itself, which can + # take a minute and which two threads must not both do. + self._lock = threading.Lock() + self._starting = threading.Lock() + self._proc = None + self._port = 0 + self._log = "" + self._key = None + + # ---- settings -------------------------------------------------------- + + def configure(self, **changes): + """Apply settings. A server started on the old ones is stopped.""" + with self._lock: + for key, value in changes.items(): + if value is not None and key in self._settings: + self._settings[key] = value + stale = self._proc is not None and self._key != self._settings_key() + if stale: + self.stop() + + def settings(self): + with self._lock: + return dict(self._settings) + + def _settings_key(self): + """What a running server would have to be restarted for.""" + return json.dumps(self._settings, sort_keys=True, default=str) + + # ---- process --------------------------------------------------------- + + @property + def running(self): + with self._lock: + return self._proc is not None and self._proc.poll() is None + + def base_url(self): + with self._lock: + return f"http://{HOST}:{self._port}/v1" if self._port else "" + + def error(self): + """The last thing the server printed, for a failure after it started.""" + with self._lock: + log = self._log + return _tail(log) if log else "" + + def serve(self): + """The base URL of a server that is up and running the current settings.""" + ready = self._current_url() + if ready: + return ready + with self._starting: + # Somebody may have started it while this thread waited its turn. + ready = self._current_url() + if ready: + return ready + self.stop() + with self._lock: + settings, key = dict(self._settings), self._settings_key() + proc, port, log = self._launch(settings) + with self._lock: + self._proc, self._port, self._log, self._key = proc, port, log, key + return self.base_url() + + def _current_url(self): + with self._lock: + up = self._proc is not None and self._proc.poll() is None + return (f"http://{HOST}:{self._port}/v1" + if up and self._key == self._settings_key() else "") + + def _launch(self, settings): + args = self._build(settings) # raises LocalError when unusable + last = "" + for _ in range(3): + port = _free_port() + log = DATA_DIR / f"{self.program.name}-server.log" + try: + log.parent.mkdir(parents=True, exist_ok=True) + sink = open(log, "wb") + except OSError as exc: + raise LocalError(t("Could not start {name}: {error}", + name=self.program.name, error=exc)) from exc + try: + with sink: + proc = subprocess.Popen( + args + ["--host", HOST, "--port", str(port)], + stdout=sink, stderr=subprocess.STDOUT, + stdin=subprocess.DEVNULL, + ) + except OSError as exc: + raise LocalError(t("Could not start {name}: {error}", + name=self.program.name, error=exc)) from exc + + # Written before it is ready rather than after, so that a kill + # during the model load leaves something for the sweep to find. + self._remember(proc.pid) + if self._wait_ready(proc, port): + return proc, port, str(log) + last = _tail(log) + self._forget() + # A port taken between the probe and the bind is the one failure + # worth another go; anything else will fail the same way again. + if "address" not in last.lower() and "bind" not in last.lower(): + break + raise LocalError(t("{name} did not start: {error}", + name=self.program.binary, error=last or t("no output"))) + + def _wait_ready(self, proc, port): + deadline = time.monotonic() + STARTUP_TIMEOUT + while time.monotonic() < deadline: + if proc.poll() is not None: + return False + if _listening(port): + # whisper binds after the model is loaded, so the open port is + # the answer. llama binds first and answers /health with 503 + # until it is ready. + if not self.program.health or _healthy(port, self.program.health): + return True + time.sleep(0.1) + proc.kill() + proc.wait(timeout=5) + return False + + def stop(self): + with self._lock: + proc, self._proc = self._proc, None + self._port, self._log, self._key = 0, "", None + if proc is not None and proc.poll() is None: + proc.terminate() + try: + proc.wait(timeout=5) + except subprocess.TimeoutExpired: + proc.kill() + proc.wait(timeout=5) + if proc is not None: + self._forget() + + # ---- servers a killed Dikte left behind ------------------------------- + + def _pid_file(self): + return DATA_DIR / f"{self.program.name}-server.pid" + + def _remember(self, pid): + try: + path = self._pid_file() + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(str(pid)) + except OSError: + pass # the sweep is a safety net, not something to fail a run over + + def _forget(self): + try: + self._pid_file().unlink() + except OSError: + pass + + def _is_ours(self, pid): + """Whether that pid is still the server this Dikte started. + + Asked because pids are handed out again: by the time anyone looks, the + number could belong to something else entirely, and killing it would be + a good deal worse than the leak being cleaned up. The program name alone + could be somebody else's copy; the name together with Dikte's own data + directory on the command line could not. + """ + try: + blob = pathlib.Path(f"/proc/{pid}/cmdline").read_bytes() + except OSError: + return False + return (self.program.binary.encode() in blob + and str(DATA_DIR).encode() in blob) + + def sweep(self): + """Kill a server a previous Dikte left behind. True when one was found. + + stop() and atexit cover every exit that gets to run code. A SIGKILL does + not, and neither does a session torn down from under it, and the server + would then sit there holding the model with nothing left alive to ask it + anything. + """ + try: + pid = int(self._pid_file().read_text().strip()) + except (OSError, ValueError): + return False + self._forget() + if not self._is_ours(pid): + return False + try: + os.kill(pid, signal.SIGTERM) + except OSError: + return False + return True + + +# --- the two of them ------------------------------------------------------ + + +def _whisper_args(settings): + binary = program_path(WHISPER, settings["binary"]) + if not binary: + raise LocalError(t("whisper.cpp is not installed. Settings → API and " + "models → Download.")) + model = whisper_model_path(settings["model"]) + if not settings["model"] or not have_model(model): + raise LocalError(t("No whisper model has been downloaded yet. " + "Settings → API and models → Download.")) + args = [ + binary, "-m", str(model), + "--inference-path", INFERENCE_PATH, + # Whatever language the request does not name. api.py leaves the field + # out when the language is "auto", and the server's own default is + # English rather than detection. + "-l", "auto", + # Stock phrases invented for near-silence come from non-speech tokens, + # and verbose_json otherwise pays for a language probability sweep + # nothing here reads. + "-sns", "-nlp", + ] + if int(settings["threads"]) > 0: + args += ["-t", str(int(settings["threads"]))] + if not settings["gpu"]: + args.append("-ng") + return args + + +def _llm_args(settings): + binary = program_path(LLAMA, settings["binary"]) + if not binary: + raise LocalError(t("llama.cpp is not installed. Settings → API and " + "models → Download.")) + model = llm_model_path(settings["model"]) + if not settings["model"] or not have_model(model): + raise LocalError(t("No local cleanup model has been downloaded yet. " + "Settings → API and models → Download.")) + args = [binary, "-m", str(model), "-c", str(int(settings["context"]))] + # All of them, or as many as fit: llama.cpp stops offloading when the card + # is full rather than failing, and a build with no GPU backend ignores it. + args += ["-ngl", "99" if settings["gpu"] else "0"] + if int(settings["threads"]) > 0: + args += ["-t", str(int(settings["threads"]))] + return args + + +whisper = Server(WHISPER, _whisper_args, { + "model": "", + "threads": 0, + "gpu": True, + "binary": "", +}) + +llm = Server(LLAMA, _llm_args, { + "model": "", + "threads": 0, + "gpu": True, + "binary": "", + # A dictation and its prompt are short. This is sized for the longest + # cleanup block rather than for a conversation, and it is what the model + # costs in memory beyond its own weights. + "context": 8192, +}) + +SERVERS = (whisper, llm) + + +def sweep(): + """Clean up after a Dikte that was killed outright. True when one was found.""" + return any([server.sweep() for server in SERVERS]) + + +def stop_all(): + for server in SERVERS: + server.stop() + + +# Dikte stops the servers itself on quit and on restart; this catches the paths +# that skip that, such as an unhandled exception on the way out. +atexit.register(stop_all) diff --git a/hub.py b/hub.py new file mode 100644 index 0000000..f793d1c --- /dev/null +++ b/hub.py @@ -0,0 +1,186 @@ +"""Where the programs and the models come from: GitHub releases and Hugging Face. + +Both answer plain JSON over HTTPS without a key, and both publish a sha256 for +every file they hand out: GitHub as the asset digest, Hugging Face as the LFS +object id. Nothing that lands on disk is trusted for having arrived, which +matters more here than it usually would, because half of what is fetched is a +program Dikte then runs. + +The lists are read rather than kept. A model catalogue written into the source +means a release of Dikte for every new model, and a pinned whisper.cpp version +means one for every whisper.cpp release; both of those are somebody else's news, +not Dikte's. Answers are cached for a few hours, and a cache that has gone stale +is still a better answer than none when the network is down. + +Nothing here imports the rest of Dikte apart from the string table: this module +knows two websites and nothing about dictation. +""" + +import collections +import json +import os +import pathlib +import time +import urllib.error +import urllib.parse +import urllib.request + +from i18n import t + +GITHUB_API = "https://api.github.com" +HF_API = "https://huggingface.co/api" +HF_FILES = "https://huggingface.co" +USER_AGENT = "dikte/1.0 (+https://github.com/yusufipk/dikte)" + +CACHE_DIR = (pathlib.Path(os.environ.get("XDG_CACHE_HOME") + or os.path.expanduser("~/.cache")) / "dikte") +# Long enough that opening the settings window twice in an evening asks nobody +# anything, short enough that a model published this morning is offered today. +CACHE_TTL = 6 * 3600 + +# `sha256` is empty for the few files neither side stores in LFS; those are the +# small ones, and a checksum is only worth having where there is something to +# check. +Item = collections.namedtuple("Item", "name url size sha256") +Repo = collections.namedtuple("Repo", "id downloads updated") + + +class HubError(Exception): + pass + + +def _get(url, timeout=20): + request = urllib.request.Request(url, headers={ + "User-Agent": USER_AGENT, + "Accept": "application/json", + }) + try: + with urllib.request.urlopen(request, timeout=timeout) as response: + return json.loads(response.read().decode("utf-8")) + except urllib.error.HTTPError as exc: + exc.close() # it holds the response body open until it is collected + raise HubError(t("{url} answered HTTP {code}.", + url=urllib.parse.urlsplit(url).netloc, code=exc.code)) from exc + except urllib.error.URLError as exc: + raise HubError(t("Could not reach {url}: {error}", + url=urllib.parse.urlsplit(url).netloc, + error=exc.reason)) from exc + except (ValueError, OSError) as exc: + raise HubError(t("Could not read the answer from {url}: {error}", + url=urllib.parse.urlsplit(url).netloc, error=exc)) from exc + + +def _cache_file(key): + safe = "".join(c if c.isalnum() or c in "-._" else "-" for c in key) + return CACHE_DIR / f"{safe}.json" + + +def _read_cache(key, ttl): + """What was stored under this key, or None. `ttl` of 0 ignores the age.""" + path = _cache_file(key) + try: + age = time.time() - path.stat().st_mtime + if ttl and age > ttl: + return None + return json.loads(path.read_text(encoding="utf-8")) + except (OSError, ValueError): + return None + + +def _write_cache(key, payload): + try: + CACHE_DIR.mkdir(parents=True, exist_ok=True) + _cache_file(key).write_text(json.dumps(payload), encoding="utf-8") + except OSError: + pass # a cache that cannot be written is not a failed lookup + + +def _fetch(key, url, ttl=CACHE_TTL, refresh=False): + """The JSON at `url`, from the cache when it is fresh enough. + + A lookup that fails falls back to the cache however old it is: an offline + settings window that shows yesterday's list is worth a great deal more than + one that shows an error. + """ + if not refresh: + cached = _read_cache(key, ttl) + if cached is not None: + return cached + try: + payload = _get(url) + except HubError: + stale = _read_cache(key, 0) + if stale is not None: + return stale + raise + _write_cache(key, payload) + return payload + + +def _digest(value): + """GitHub writes its digests as "sha256:…"; Hugging Face writes the hash.""" + value = (value or "").strip() + return value.split(":", 1)[1] if value.startswith("sha256:") else value + + +def release(repo, tag="latest", refresh=False): + """(tag, [Item]) for one GitHub release, newest when no tag is given.""" + where = "latest" if tag in ("", "latest") else f"tags/{tag}" + data = _fetch(f"gh-{repo}-{tag or 'latest'}", + f"{GITHUB_API}/repos/{repo}/releases/{where}", refresh=refresh) + if not isinstance(data, dict) or not data.get("assets"): + raise HubError(t("{repo} has no downloadable release.", repo=repo)) + assets = [Item(a.get("name") or "", a.get("browser_download_url") or "", + int(a.get("size") or 0), _digest(a.get("digest"))) + for a in data["assets"] if a.get("browser_download_url")] + return data.get("tag_name") or tag, assets + + +def files(repo, revision="main", refresh=False): + """[Item] for every file in a Hugging Face repository. + + The size is there whether or not the file is in LFS; the hash is only there + when it is, which for anything worth downloading it always is. + """ + data = _fetch(f"hf-tree-{repo}-{revision}", + f"{HF_API}/models/{repo}/tree/{revision}?recursive=true", + refresh=refresh) + if not isinstance(data, list): + raise HubError(t("{repo} did not return a file list.", repo=repo)) + out = [] + for entry in data: + if entry.get("type") != "file": + continue + path = entry.get("path") or "" + lfs = entry.get("lfs") or {} + out.append(Item( + path, + f"{HF_FILES}/{repo}/resolve/{revision}/{urllib.parse.quote(path)}", + int(lfs.get("size") or entry.get("size") or 0), + _digest(lfs.get("oid") or lfs.get("sha256")), + )) + return out + + +def repos(author="", search="", limit=40, refresh=False): + """[Repo] of GGUF repositories, newest first. + + Filtered by author on purpose. Hugging Face's own trending list is open to + everyone and reads like it: asking it for the popular GGUF today answers + with a wall of roleplay merges, which is not what a dictation transcript + wants cleaning up. An author is a small enough thing to trust and a large + enough one to keep the list current without Dikte being updated. + """ + query = {"filter": "gguf", "sort": "lastModified", "direction": "-1", + "limit": str(limit)} + if author: + query["author"] = author + if search: + query["search"] = search + url = f"{HF_API}/models?{urllib.parse.urlencode(query)}" + data = _fetch(f"hf-models-{author}-{search}-{limit}", url, refresh=refresh) + if not isinstance(data, list): + raise HubError(t("Hugging Face did not return a model list.")) + return [Repo(m.get("id") or "", int(m.get("downloads") or 0), + m.get("lastModified") or "") + for m in data if m.get("id")] diff --git a/tests/test_ggml.py b/tests/test_ggml.py new file mode 100644 index 0000000..ea2af74 --- /dev/null +++ b/tests/test_ggml.py @@ -0,0 +1,582 @@ +"""Fetching a program and a model, and keeping a server alive on them. + +No network and no whisper.cpp: the downloads are answered from memory, and the +servers are stand-in scripts that take the same arguments and open their port +when they are told to, which is the only thing the code waits on. +""" + +import contextlib +import hashlib +import io +import os +import signal +import sys +import tarfile +import textwrap +import threading +import time +from unittest import mock + +import ggml +import hub +from tests.support import (DikteTest, fake_urlopen, http_error, json_body, + linux_only, url_error) + + +def body(data, length=None): + """What urlopen hands back for a download: a reader with a length header.""" + class Body: + def __init__(self): + self._buf = io.BytesIO(data) + self.headers = {"Content-Length": + str(len(data) if length is None else length)} + + def read(self, count=-1): + return self._buf.read(count) + + def __enter__(self): + return self + + def __exit__(self, *_): + return False + return Body() + + +def item(name, data, url="https://example.invalid/f", sha=True): + return hub.Item(name, url, len(data), + hashlib.sha256(data).hexdigest() if sha else "") + + +@contextlib.contextmanager +def serving(release, archive): + """Answer by what is being asked for rather than by what came before. + + An install asks GitHub what the release is and then asks for one file out of + it, and the first of those two comes from the cache the second time around. + Answering in order would then hand the archive request the release listing. + """ + def opener(request, timeout=None): + url = request.full_url + if "api.github.com" in url: + return json_body(release) + return body(archive) + + with mock.patch("urllib.request.urlopen", side_effect=opener) as calls: + yield calls + + +def tarball(entries): + """A .tar.gz laid out the way the releases are: one directory of files.""" + buf = io.BytesIO() + with tarfile.open(fileobj=buf, mode="w:gz") as tar: + for name, content in entries.items(): + info = tarfile.TarInfo(name) + info.size = len(content) + info.mode = 0o755 + tar.addfile(info, io.BytesIO(content)) + return buf.getvalue() + + +class Local(DikteTest): + """A test with its own bin, models and cache directories.""" + + def setUp(self): + super().setUp() + self.patch_attr(ggml, "DATA_DIR", self.path("data")) + self.patch_attr(ggml, "BIN_DIR", self.path("data", "bin")) + self.patch_attr(ggml, "MODELS_DIR", self.path("data", "models")) + self.patch_attr(hub, "CACHE_DIR", self.path("cache")) + + +# --- downloading ---------------------------------------------------------- + + +class Download(Local): + def test_it_lands_and_the_part_file_is_gone(self): + data = b"a model, more or less" * 100 + target = self.path("data", "models", "m.bin") + with fake_urlopen(body(data)): + self.assertTrue(ggml.download(item("m.bin", data), target)) + self.assertEqual(target.read_bytes(), data) + self.assertFalse(target.with_name("m.bin.part").exists()) + + def test_a_wrong_checksum_installs_nothing(self): + data = b"the bytes that arrived" + wrong = hub.Item("m.bin", "https://example.invalid/f", len(data), "f" * 64) + target = self.path("data", "models", "m.bin") + with fake_urlopen(body(data)): + with self.assertRaises(ggml.LocalError) as caught: + ggml.download(wrong, target) + self.assertIn("checksum", str(caught.exception)) + self.assertFalse(target.exists()) + self.assertFalse(target.with_name("m.bin.part").exists()) + + def test_a_body_shorter_than_its_header_installs_nothing(self): + data = b"half of it" + target = self.path("data", "models", "m.bin") + with fake_urlopen(body(data, length=len(data) * 2)): + with self.assertRaises(ggml.LocalError): + ggml.download(item("m.bin", data), target) + self.assertFalse(target.exists()) + + def test_a_file_with_no_published_checksum_is_still_taken(self): + data = b"a README, say" + target = self.path("data", "models", "readme") + with fake_urlopen(body(data)): + self.assertTrue(ggml.download(item("readme", data, sha=False), target)) + self.assertTrue(target.exists()) + + def test_stopping_leaves_nothing_behind(self): + data = b"x" * (ggml.DOWNLOAD_CHUNK * 3) + target = self.path("data", "models", "m.bin") + with fake_urlopen(body(data)): + landed = ggml.download(item("m.bin", data), target, + should_stop=lambda: True) + self.assertFalse(landed) + self.assertFalse(target.exists()) + self.assertFalse(target.with_name("m.bin.part").exists()) + + def test_progress_is_reported_against_the_total(self): + data = b"y" * (ggml.DOWNLOAD_CHUNK + 5) + seen = [] + with fake_urlopen(body(data)): + ggml.download(item("m.bin", data), self.path("data", "m.bin"), + on_progress=lambda done, total: seen.append((done, total))) + self.assertEqual(seen[-1], (len(data), len(data))) + self.assertGreater(len(seen), 1) + + def test_a_refused_connection_says_which_file(self): + with fake_urlopen(url_error("no route to host")): + with self.assertRaises(ggml.LocalError) as caught: + ggml.download(item("m.bin", b"x"), self.path("data", "m.bin")) + self.assertIn("m.bin", str(caught.exception)) + + def test_an_http_error_is_not_written_to_disk(self): + target = self.path("data", "m.bin") + with fake_urlopen(http_error(404)): + with self.assertRaises(ggml.LocalError): + ggml.download(item("m.bin", b"x"), target) + self.assertFalse(target.exists()) + + +# --- installing a program ------------------------------------------------- + + +class InstallProgram(Local): + def release(self, *names): + return {"tag_name": "v1.9.1", "assets": [ + {"name": name, "browser_download_url": f"https://example.invalid/{name}", + "size": 10, "digest": ""} for name in names]} + + def archive(self): + return tarball({ + "whisper-bin-ubuntu-x64/whisper-server": b"#!/bin/sh\nexit 0\n", + "whisper-bin-ubuntu-x64/libwhisper.so": b"not really a library", + }) + + def install(self, *names, archive=None): + self.patch_attr(ggml, "_arch", lambda: "x64") + with serving(self.release(*names), + self.archive() if archive is None else archive) as calls: + path = ggml.install_program(ggml.WHISPER) + return path, [call.args[0].full_url for call in calls.call_args_list] + + def test_the_binary_and_its_libraries_land_together(self): + path, _ = self.install("whisper-bin-ubuntu-x64.tar.gz") + self.assertTrue(os.path.isfile(path)) + self.assertTrue(os.access(path, os.X_OK)) + self.assertTrue(os.path.isfile(os.path.join(os.path.dirname(path), + "libwhisper.so"))) + + def test_the_build_for_this_machine_is_the_one_fetched(self): + _, urls = self.install("whisper-bin-x64.zip", "whisper-bin-ubuntu-arm64.tar.gz", + "whisper-bin-ubuntu-x64.tar.gz") + self.assertTrue(urls[1].endswith("whisper-bin-ubuntu-x64.tar.gz")) + + def test_a_release_with_nothing_for_this_machine_says_so(self): + self.patch_attr(ggml, "_arch", lambda: "x64") + with fake_urlopen(self.release("whisper-bin-Win32.zip")): + with self.assertRaises(ggml.LocalError) as caught: + ggml.install_program(ggml.WHISPER) + self.assertIn("this machine", str(caught.exception)) + + def test_what_was_installed_is_remembered(self): + path, _ = self.install("whisper-bin-ubuntu-x64.tar.gz") + self.assertEqual(ggml.installed_program(ggml.WHISPER), path) + self.assertEqual(ggml.installed_version(ggml.WHISPER), "v1.9.1") + + def test_a_record_pointing_at_a_deleted_binary_counts_for_nothing(self): + path, _ = self.install("whisper-bin-ubuntu-x64.tar.gz") + os.unlink(path) + self.assertEqual(ggml.installed_program(ggml.WHISPER), "") + + def test_the_archive_is_not_kept(self): + self.install("whisper-bin-ubuntu-x64.tar.gz") + left = list((self.path("data", "bin", "whisper")).glob("*.tar.gz")) + self.assertEqual(left, []) + + def test_the_previous_version_is_swept_up(self): + self.install("whisper-bin-ubuntu-x64.tar.gz") + old = self.path("data", "bin", "whisper", "v1.9.0") + old.mkdir(parents=True) + (old / "whisper-server").write_bytes(b"older") + self.install("whisper-bin-ubuntu-x64.tar.gz") + self.assertFalse(old.exists()) + + def test_an_archive_without_the_binary_is_refused(self): + empty = tarball({"whisper-bin-ubuntu-x64/README": b"nothing here"}) + with self.assertRaises(ggml.LocalError) as caught: + self.install("whisper-bin-ubuntu-x64.tar.gz", archive=empty) + self.assertIn("whisper-server", str(caught.exception)) + + def test_llama_takes_the_vulkan_build_when_there_is_a_loader(self): + self.patch_attr(ggml, "_arch", lambda: "x64") + self.patch_attr(ggml, "_has_vulkan", lambda: True) + self.assertEqual(ggml._wanted_assets(ggml.LLAMA)[0], + "bin-ubuntu-vulkan-x64.tar.gz") + + def test_llama_falls_back_to_the_plain_build_without_one(self): + self.patch_attr(ggml, "_arch", lambda: "x64") + self.patch_attr(ggml, "_has_vulkan", lambda: False) + self.assertEqual(ggml._wanted_assets(ggml.LLAMA), ("bin-ubuntu-x64.tar.gz",)) + + +class WhichCopyRuns(Local): + def test_a_system_build_wins_over_a_downloaded_one(self): + self.patch_attr(ggml, "installed_program", lambda program: "/data/whisper-server") + with mock.patch("shutil.which", return_value="/usr/bin/whisper-server"): + self.assertEqual(ggml.program_path(ggml.WHISPER), "/usr/bin/whisper-server") + + def test_the_downloaded_one_is_used_when_there_is_no_system_build(self): + self.patch_attr(ggml, "installed_program", lambda program: "/data/whisper-server") + with mock.patch("shutil.which", return_value=None): + self.assertEqual(ggml.program_path(ggml.WHISPER), "/data/whisper-server") + + def test_a_setting_pointing_at_nothing_is_no_program(self): + self.assertEqual(ggml.program_path(ggml.WHISPER, "/nowhere/whisper-server"), "") + + def test_a_setting_pointing_at_a_program_wins(self): + mine = self.path("mine") + mine.write_text("#!/bin/sh\n") + mine.chmod(0o755) + with mock.patch("shutil.which", return_value="/usr/bin/whisper-server"): + self.assertEqual(ggml.program_path(ggml.WHISPER, str(mine)), str(mine)) + + +# --- the lists ------------------------------------------------------------ + + +WHISPER_TREE = [ + {"type": "file", "path": "ggml-base.bin", "size": 147951465, + "lfs": {"oid": "a" * 64}}, + {"type": "file", "path": "ggml-large-v3-turbo-q5_0.bin", "size": 574041195, + "lfs": {"oid": "b" * 64}}, + {"type": "file", "path": "ggml-base-encoder.mlmodelc.zip", "size": 37922638, + "lfs": {"oid": "c" * 64}}, + {"type": "file", "path": "README.md", "size": 3196}, +] + +GGUF_TREE = [ + {"type": "file", "path": "gemma-3-4b-it-Q4_K_M.gguf", "size": 2489000000, + "lfs": {"oid": "a" * 64}}, + {"type": "file", "path": "gemma-3-4b-it-Q8_0.gguf", "size": 4130000000, + "lfs": {"oid": "b" * 64}}, + {"type": "file", "path": "mmproj-model-f16.gguf", "size": 851000000, + "lfs": {"oid": "c" * 64}}, + {"type": "file", "path": "mtp-gemma-4-E4B-it-Q4_0.gguf", "size": 59000000, + "lfs": {"oid": "d" * 64}}, + {"type": "file", "path": "huge-00001-of-00009.gguf", "size": 40000000000, + "lfs": {"oid": "e" * 64}}, + {"type": "file", "path": "README.md", "size": 100}, +] + + +class Catalogue(Local): + def test_only_models_are_offered_and_the_small_ones_first(self): + with fake_urlopen(WHISPER_TREE): + models = ggml.whisper_models() + self.assertEqual([m.name for m in models], + ["ggml-base.bin", "ggml-large-v3-turbo-q5_0.bin"]) + + def test_the_core_ml_encoders_are_not_models(self): + with fake_urlopen(WHISPER_TREE): + names = [m.name for m in ggml.whisper_models()] + self.assertNotIn("ggml-base-encoder.mlmodelc.zip", names) + + def test_the_projector_and_the_draft_head_are_not_models(self): + with fake_urlopen(GGUF_TREE): + names = [q.name for q in ggml.llm_quants("ggml-org/gemma-3-4b-it-GGUF")] + self.assertEqual(names, + ["gemma-3-4b-it-Q4_K_M.gguf", "gemma-3-4b-it-Q8_0.gguf"]) + + def test_a_model_split_across_files_is_left_out(self): + with fake_urlopen(GGUF_TREE): + names = [q.name for q in ggml.llm_quants("ggml-org/gemma-3-4b-it-GGUF")] + self.assertNotIn("huge-00001-of-00009.gguf", names) + + def test_the_suggestions_come_first_and_the_rest_follow(self): + listing = [{"id": "ggml-org/something-new-GGUF"}, + {"id": ggml.SUGGESTED_LLM[0]}] + with fake_urlopen(listing): + found = ggml.llm_repos() + self.assertEqual(found[0], ggml.SUGGESTED_LLM[0]) + self.assertIn("ggml-org/something-new-GGUF", found) + + def test_an_unreachable_list_still_offers_the_suggestions(self): + with fake_urlopen(url_error()): + self.assertEqual(ggml.llm_repos(), list(ggml.SUGGESTED_LLM)) + + def test_an_unreachable_whisper_list_is_an_error_worth_showing(self): + with fake_urlopen(url_error()): + with self.assertRaises(ggml.LocalError): + ggml.whisper_models() + + def test_what_is_on_disk_is_read_from_disk(self): + self.assertEqual(ggml.installed_whisper_models(), []) + path = ggml.whisper_model_path("ggml-base.bin") + path.parent.mkdir(parents=True) + path.write_bytes(b"model") + self.assertEqual(ggml.installed_whisper_models(), ["ggml-base.bin"]) + self.assertTrue(ggml.have_model(path)) + + def test_an_empty_file_is_not_a_model(self): + path = ggml.llm_model_path("ggml-org/x-GGUF/model.gguf") + path.parent.mkdir(parents=True) + path.write_bytes(b"") + self.assertFalse(ggml.have_model(path)) + + def test_a_model_is_named_by_its_file_not_its_repository(self): + self.assertEqual(ggml.llm_model_path("ggml-org/x-GGUF/model.gguf").name, + "model.gguf") + + +# --- keeping a server alive ----------------------------------------------- + + +STAND_IN = textwrap.dedent(""" + import http.server, sys, threading, time + + args = sys.argv[1:] + + def opt(name, default=""): + return args[args.index(name) + 1] if name in args else default + + if "--die" in args: + print("could not load model: no such file") + sys.exit(2) + + time.sleep(float(opt("--wait", "0"))) + + started = time.monotonic() + healthy_after = float(opt("--healthy-after", "0")) + + class Handler(http.server.BaseHTTPRequestHandler): + def do_GET(self): + ok = time.monotonic() - started >= healthy_after + self.send_response(200 if ok else 503) + self.end_headers() + self.wfile.write(b"{}") + + def log_message(self, *a): + pass + + server = http.server.HTTPServer((opt("--host"), int(opt("--port"))), Handler) + print("listening on " + opt("--port"), flush=True) + server.serve_forever() +""") + + +class Servers(Local): + def setUp(self): + super().setUp() + self.path("data").mkdir(parents=True, exist_ok=True) + # Named for the program and kept inside the data directory, because that + # is what the sweep looks for on a command line. + self.script = self.path("data", "whisper-server.py") + self.script.write_text(STAND_IN) + self.addCleanup(ggml.stop_all) + self.servers = [] + + def server(self, program=ggml.WHISPER, **settings): + defaults = {"extra": []} + defaults.update(settings) + made = ggml.Server( + program, + lambda values: [sys.executable, str(self.script)] + list(values["extra"]), + defaults, + ) + self.servers.append(made) + self.addCleanup(made.stop) + return made + + def test_a_started_server_hands_back_its_address(self): + server = self.server() + url = server.serve() + self.assertRegex(url, r"^http://127\.0\.0\.1:\d+/v1$") + self.assertTrue(server.running) + + def test_the_second_call_does_not_start_a_second_one(self): + server = self.server() + first = server.serve() + self.assertEqual(server.serve(), first) + + def test_a_settings_change_stops_what_was_running(self): + server = self.server() + server.serve() + server.configure(extra=["--wait", "0"]) + self.assertFalse(server.running) + + def test_the_new_settings_are_what_the_next_start_uses(self): + server = self.server() + server.serve() + server.configure(extra=["--healthy-after", "0"]) + second = server.serve() + self.assertTrue(server.running) + self.assertTrue(second) + + def test_a_program_that_dies_reports_what_it_printed(self): + server = self.server(extra=["--die"]) + with self.assertRaises(ggml.LocalError) as caught: + server.serve() + self.assertIn("no such file", str(caught.exception)) + self.assertFalse(server.running) + + def test_a_model_that_is_still_loading_is_not_ready_yet(self): + # llama binds its port first and answers /health with 503 until the + # model is in memory, so the open port on its own is not the signal. + server = self.server(program=ggml.LLAMA, extra=["--healthy-after", "0.4"]) + started = time.monotonic() + server.serve() + self.assertGreaterEqual(time.monotonic() - started, 0.4) + + def test_a_start_that_never_becomes_ready_gives_up(self): + self.patch_attr(ggml, "STARTUP_TIMEOUT", 0.5) + server = self.server(program=ggml.LLAMA, extra=["--healthy-after", "30"]) + with self.assertRaises(ggml.LocalError): + server.serve() + + def test_stopping_leaves_nothing_running(self): + server = self.server() + server.serve() + server.stop() + self.assertFalse(server.running) + self.assertEqual(server.base_url(), "") + + def test_the_last_thing_it_printed_is_available(self): + server = self.server() + server.serve() + self.assertIn("listening", server.error()) + + def test_asking_what_is_running_does_not_wait_for_a_start(self): + """A model being loaded must not freeze the settings window. + + The interface asks a running server what it is doing while a start is in + flight, and a lock held across the whole start would stop it dead. + """ + server = self.server(extra=["--wait", "0.6"]) + answers = [] + + def start(): + server.serve() + + thread = __import__("threading").Thread(target=start) + thread.start() + try: + time.sleep(0.15) + began = time.monotonic() + answers.append(server.settings()) + answers.append(server.running) + self.assertLess(time.monotonic() - began, 0.2) + finally: + thread.join(timeout=10) + + @linux_only + def test_a_server_a_killed_dikte_left_behind_is_swept_up(self): + server = self.server() + server.serve() + # What a SIGKILL of Dikte leaves: the child still running, the pid file + # still on disk, and nothing left that knows about either. + proc, server._proc = server._proc, None + self.assertTrue(server.sweep()) + self.assertEqual(proc.wait(timeout=5), -signal.SIGTERM) + + @linux_only + def test_a_pid_that_belongs_to_something_else_is_left_alone(self): + server = self.server() + server._remember(os.getpid()) # this test runner, not a server + self.assertFalse(server.sweep()) + + def test_no_pid_file_is_nothing_to_sweep(self): + self.assertFalse(self.server().sweep()) + + +class Arguments(Local): + """What the two command lines say, since neither program is here to say it.""" + + def setUp(self): + super().setUp() + self.binary = self.path("whisper-server") + self.binary.write_text("#!/bin/sh\n") + self.binary.chmod(0o755) + + def whisper_model(self, name="ggml-base.bin"): + path = ggml.whisper_model_path(name) + path.parent.mkdir(parents=True, exist_ok=True) + path.write_bytes(b"model") + return name + + def test_the_inference_path_is_the_one_api_py_builds(self): + args = ggml._whisper_args({"binary": str(self.binary), "gpu": True, + "threads": 0, "model": self.whisper_model()}) + self.assertIn("--inference-path", args) + self.assertEqual(args[args.index("--inference-path") + 1], + "/v1/audio/transcriptions") + + def test_detection_rather_than_english_when_nothing_is_asked_for(self): + args = ggml._whisper_args({"binary": str(self.binary), "gpu": True, + "threads": 0, "model": self.whisper_model()}) + self.assertEqual(args[args.index("-l") + 1], "auto") + + def test_the_graphics_card_is_turned_off_rather_than_asked_for(self): + settings = {"binary": str(self.binary), "gpu": False, "threads": 2, + "model": self.whisper_model()} + args = ggml._whisper_args(settings) + self.assertIn("-ng", args) + self.assertEqual(args[args.index("-t") + 1], "2") + + def test_a_missing_model_is_a_message_about_settings(self): + with self.assertRaises(ggml.LocalError) as caught: + ggml._whisper_args({"binary": str(self.binary), "gpu": True, + "threads": 0, "model": "ggml-nothing.bin"}) + self.assertIn("Settings", str(caught.exception)) + + def test_a_missing_program_says_so_before_a_missing_model(self): + with mock.patch("shutil.which", return_value=None): + with self.assertRaises(ggml.LocalError) as caught: + ggml._whisper_args({"binary": "", "gpu": True, "threads": 0, + "model": self.whisper_model()}) + self.assertIn("whisper.cpp", str(caught.exception)) + + def test_the_layers_go_to_the_card_when_there_is_one(self): + model = ggml.llm_model_path("m.gguf") + model.parent.mkdir(parents=True, exist_ok=True) + model.write_bytes(b"gguf") + args = ggml._llm_args({"binary": str(self.binary), "gpu": True, + "threads": 0, "model": "m.gguf", "context": 4096}) + self.assertEqual(args[args.index("-ngl") + 1], "99") + self.assertEqual(args[args.index("-c") + 1], "4096") + + def test_no_card_means_no_layers_offloaded(self): + model = ggml.llm_model_path("m.gguf") + model.parent.mkdir(parents=True, exist_ok=True) + model.write_bytes(b"gguf") + args = ggml._llm_args({"binary": str(self.binary), "gpu": False, + "threads": 0, "model": "m.gguf", "context": 4096}) + self.assertEqual(args[args.index("-ngl") + 1], "0") + + +class Sizes(DikteTest): + def test_bytes_are_written_the_way_a_download_is_talked_about(self): + self.assertEqual(ggml.human_size(512), "512 B") + self.assertEqual(ggml.human_size(574041195), "547.4 MB") + self.assertEqual(ggml.human_size(3_095_033_483), "2.9 GB") diff --git a/tests/test_hub.py b/tests/test_hub.py new file mode 100644 index 0000000..f3741c2 --- /dev/null +++ b/tests/test_hub.py @@ -0,0 +1,184 @@ +"""What GitHub and Hugging Face are asked, and what is believed of the answer.""" + +import json + +import hub +from tests.support import DikteTest, fake_urlopen, http_error, url_error + +RELEASE = { + "tag_name": "v1.9.1", + "assets": [ + {"name": "whisper-bin-ubuntu-x64.tar.gz", + "browser_download_url": "https://example.invalid/ubuntu-x64.tar.gz", + "size": 9379235, "digest": "sha256:" + "a" * 64}, + {"name": "whisper-bin-x64.zip", + "browser_download_url": "https://example.invalid/win.zip", + "size": 100, "digest": "sha256:" + "b" * 64}, + {"name": "no-url-here.zip", "size": 1}, + ], +} + +TREE = [ + {"type": "file", "path": ".gitattributes", "size": 1477}, + {"type": "file", "path": "ggml-base.bin", "size": 147951465, + "lfs": {"oid": "c" * 64, "size": 147951465}}, + {"type": "directory", "path": "extra"}, + {"type": "file", "path": "extra/ggml-tiny.bin", "size": 77691713, + "lfs": {"oid": "d" * 64, "size": 77691713}}, +] + +MODELS = [ + {"id": "ggml-org/gemma-3-4b-it-GGUF", "downloads": 44606, + "lastModified": "2026-07-01T00:00:00.000Z"}, + {"id": "ggml-org/gpt-oss-20b-GGUF", "downloads": 47975}, + {"noid": True}, +] + + +class Releases(DikteTest): + def setUp(self): + super().setUp() + self.patch_attr(hub, "CACHE_DIR", self.path("cache")) + + def test_the_tag_and_the_assets_come_back(self): + with fake_urlopen(RELEASE) as calls: + tag, assets = hub.release("ggml-org/whisper.cpp") + self.assertEqual(tag, "v1.9.1") + self.assertEqual([a.name for a in assets], + ["whisper-bin-ubuntu-x64.tar.gz", "whisper-bin-x64.zip"]) + self.assertEqual(calls[0].full_url, + "https://api.github.com/repos/ggml-org/whisper.cpp/" + "releases/latest") + + def test_the_sha256_prefix_is_dropped(self): + with fake_urlopen(RELEASE): + _, assets = hub.release("ggml-org/whisper.cpp") + self.assertEqual(assets[0].sha256, "a" * 64) + + def test_a_tag_asks_for_that_tag(self): + with fake_urlopen(RELEASE) as calls: + hub.release("ggml-org/whisper.cpp", "v1.9.1") + self.assertTrue(calls[0].full_url.endswith("/releases/tags/v1.9.1")) + + def test_a_release_with_no_assets_is_an_error(self): + with fake_urlopen({"tag_name": "v1", "assets": []}): + with self.assertRaises(hub.HubError): + hub.release("ggml-org/whisper.cpp") + + def test_the_second_call_asks_nobody(self): + with fake_urlopen(RELEASE) as calls: + hub.release("ggml-org/whisper.cpp") + hub.release("ggml-org/whisper.cpp") + self.assertEqual(len(calls), 1) + + def test_a_refresh_asks_again(self): + with fake_urlopen(RELEASE) as calls: + hub.release("ggml-org/whisper.cpp") + hub.release("ggml-org/whisper.cpp", refresh=True) + self.assertEqual(len(calls), 2) + + def test_an_old_cache_beats_no_answer(self): + with fake_urlopen(RELEASE): + hub.release("ggml-org/whisper.cpp") + # Old enough that it would normally be fetched again, and no network + # to fetch it with. + for path in self.path("cache").iterdir(): + os_utime(path) + with fake_urlopen(url_error()): + tag, assets = hub.release("ggml-org/whisper.cpp") + self.assertEqual(tag, "v1.9.1") + self.assertEqual(len(assets), 2) + + def test_no_cache_and_no_network_says_so(self): + with fake_urlopen(url_error("no route to host")): + with self.assertRaises(hub.HubError) as caught: + hub.release("ggml-org/whisper.cpp") + self.assertIn("api.github.com", str(caught.exception)) + + def test_an_http_error_names_the_host_and_the_code(self): + with fake_urlopen(http_error(404, "nope")): + with self.assertRaises(hub.HubError) as caught: + hub.release("ggml-org/nothing") + self.assertIn("404", str(caught.exception)) + + +class Files(DikteTest): + def setUp(self): + super().setUp() + self.patch_attr(hub, "CACHE_DIR", self.path("cache")) + + def test_directories_are_left_out(self): + with fake_urlopen(TREE): + files = hub.files("ggerganov/whisper.cpp") + self.assertEqual([f.name for f in files], + [".gitattributes", "ggml-base.bin", "extra/ggml-tiny.bin"]) + + def test_the_url_is_the_one_that_serves_the_bytes(self): + with fake_urlopen(TREE): + files = hub.files("ggerganov/whisper.cpp") + self.assertEqual( + files[1].url, + "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.bin") + + def test_the_lfs_object_id_is_the_checksum(self): + with fake_urlopen(TREE): + files = hub.files("ggerganov/whisper.cpp") + self.assertEqual(files[1].sha256, "c" * 64) + self.assertEqual(files[1].size, 147951465) + + def test_a_file_outside_lfs_has_no_checksum(self): + with fake_urlopen(TREE): + files = hub.files("ggerganov/whisper.cpp") + self.assertEqual(files[0].sha256, "") + + def test_an_answer_that_is_not_a_list_is_an_error(self): + with fake_urlopen({"error": "Invalid username or password."}): + with self.assertRaises(hub.HubError): + hub.files("ggml-org/whisper.cpp") + + +class Repos(DikteTest): + def setUp(self): + super().setUp() + self.patch_attr(hub, "CACHE_DIR", self.path("cache")) + + def test_it_asks_for_one_author_and_for_gguf(self): + with fake_urlopen(MODELS) as calls: + found = hub.repos(author="ggml-org") + self.assertIn("author=ggml-org", calls[0].full_url) + self.assertIn("filter=gguf", calls[0].full_url) + self.assertEqual([r.id for r in found], + ["ggml-org/gemma-3-4b-it-GGUF", "ggml-org/gpt-oss-20b-GGUF"]) + + def test_a_missing_download_count_is_zero(self): + with fake_urlopen(MODELS): + found = hub.repos(author="ggml-org") + self.assertEqual(found[0].downloads, 44606) + self.assertEqual(found[1].updated, "") + + +def os_utime(path): + """Backdate a cache file past its time to live.""" + import os + import time + old = time.time() - hub.CACHE_TTL - 60 + os.utime(path, (old, old)) + + +class CacheOnDisk(DikteTest): + def setUp(self): + super().setUp() + self.patch_attr(hub, "CACHE_DIR", self.path("cache")) + + def test_what_is_stored_is_what_came_back(self): + with fake_urlopen(RELEASE): + hub.release("ggml-org/whisper.cpp") + stored = [json.loads(p.read_text()) for p in self.path("cache").iterdir()] + self.assertEqual(stored[0]["tag_name"], "v1.9.1") + + def test_a_cache_that_cannot_be_written_is_not_a_failure(self): + self.patch_attr(hub, "CACHE_DIR", self.path("nope", "deeper")) + self.path("nope").write_text("a file where a directory would go") + with fake_urlopen(RELEASE): + tag, _ = hub.release("ggml-org/whisper.cpp") + self.assertEqual(tag, "v1.9.1") From 2cfbbb2d990905df8841d97e9a6172c834bd4a8c Mon Sep 17 00:00:00 2001 From: yusufipk Date: Sat, 1 Aug 2026 20:00:35 +0300 Subject: [PATCH 07/13] Transcribe and clean up on this machine, without installing anything first MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit whisper-server is started on --inference-path /v1/audio/transcriptions, which is exactly the path api.py already builds for the hosted providers, and llama-server answers /chat/completions the way OpenRouter does. So the local half is one more base URL rather than a second code path: worker.py, filetranscribe.py and meeting.py are untouched, and dictation, subtitles and meetings all work here on the first try. Three findings worth naming, none of them in the new code: whisper.cpp cuts segments on tokens, which in Turkish lands inside a word about as often as between two. Pasted raw that gives "akraba değ\niller."; in a subtitle it gives a cue reading "değ". Whisper marks the start of a word with a leading space, so a piece that does not begin with one continues the word above it. A small model will repeat the transcript until the context is full, and every one of those tokens is a second of somebody waiting: measured at 206 seconds, and 25 with a ceiling on the reply. Hosted models are left alone, where the same runaway is rare and a ceiling would cut the minutes short. A server outlives SIGTERM and SIGKILL holding its model in memory. Signals are now turned into an event Qt delivers, since Qt blocks in C where a Python handler never runs, and a pid file lets the next start sweep up what a SIGKILL left behind. The minutes keep their own provider rather than following cleanup's. The two jobs are not the same size: a 4B model here will strip the filler words out of a dictation and will not write up an hour long meeting. The suite runs offline now: a test that reaches the network says so instead of quietly going there. --- README.md | 22 +- README.tr.md | 23 +- api.py | 208 +++++++++++++--- config.py | 111 ++++++++- dikte.py | 94 +++++++- filetranscribe.py | 10 +- install.sh | 3 +- meeting.py | 24 +- settings_ui.py | 452 +++++++++++++++++++++++++++++++++-- tests/support.py | 12 + tests/test_api.py | 192 ++++++++++++++- tests/test_config.py | 87 ++++++- tests/test_filetranscribe.py | 2 +- tests/test_ui.py | 60 +++++ tests/test_worker.py | 2 +- worker.py | 12 +- 16 files changed, 1194 insertions(+), 120 deletions(-) diff --git a/README.md b/README.md index 1d36007..bd27986 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Dikte -Press `Ctrl+Space`, talk, press again. The recording goes to OpenAI or OpenRouter -for transcription, a model on OpenRouter cleans it up (dropping the *uh*s, the -restarts, the missing punctuation), and the result lands in your clipboard and -is pasted into whatever window you were typing in. +Press `Ctrl+Space`, talk, press again. The recording is transcribed on this +machine by default, a model cleans it up (dropping the *uh*s, the restarts, the +missing punctuation), and the result lands in your clipboard and is pasted into +whatever window you were typing in. Built for KDE Plasma 6 on Wayland. No dependencies beyond system packages: just the Python standard library and PyQt6. @@ -39,10 +39,12 @@ sudo apt install pulseaudio-utils xclip xdotool ffmpeg `install.sh` adds the `dikte` command, a menu entry and an autostart entry. The settings window installs a GNOME or KDE global shortcut. -Two keys go in the settings window: **OpenAI** and **OpenRouter**. Speech to text -runs on either one (`gpt-4o-transcribe` by default), cleanup always on -OpenRouter (`google/gemini-3.5-flash-lite`), so a single OpenRouter key can -cover both. They fall back to `OPENAI_API_KEY` and `OPENROUTER_API_KEY`, and are +Speech to text and cleanup each pick a provider in the settings window. Both can +run here, on whisper.cpp and llama.cpp: the program and the model are downloaded +from that window (checksummed, into `~/.local/share/dikte`), so nothing has to be +installed first and nothing leaves the machine. The hosted alternatives want a +key: **OpenAI** or **OpenRouter** for speech to text, **OpenRouter** for cleanup +(`google/gemini-3.5-flash-lite`), so a single OpenRouter key can cover both. They fall back to `OPENAI_API_KEY` and `OPENROUTER_API_KEY`, and are stored in `~/.config/dikte/config.json`, mode 600. Cleanup can be switched off, in which case the raw transcript is pasted, and a thinking model's effort can be set next to it. @@ -144,7 +146,9 @@ ipc.py one request and one reply over the local socket audio.py PCM capture: pw-record for dictation, ffmpeg for a meeting meeting.py channel split, speaker labelling, cleanup, minutes assistant.py running a dictation through Claude Code, Codex or OpenRouter -api.py transcription on either provider, OpenRouter cleanup (stdlib only) +api.py transcription and cleanup on any provider (stdlib only) +ggml.py whisper.cpp and llama.cpp here: fetch, verify, keep serving +hub.py what GitHub and Hugging Face have on offer today worker.py transcribe → clean up → clipboard → paste vad.py deciding whether a recording holds speech at all filetranscribe.py file transcription: ffmpeg, chunking, timestamps diff --git a/README.tr.md b/README.tr.md index b6d3917..454ec6a 100644 --- a/README.tr.md +++ b/README.tr.md @@ -1,9 +1,8 @@ # Dikte -`Ctrl+Space`'e bas, konuş, tekrar bas. Ses OpenAI'ye ya da OpenRouter'a gidip -yazıya çevrilir, OpenRouter'daki bir model transkripti temizler (ıı'lar, -tekrarlar, eksik noktalama), sonuç panoya kopyalanır ve o an yazdığın pencereye -yapıştırılır. +`Ctrl+Space`'e bas, konuş, tekrar bas. Ses varsayılan olarak bu makinede yazıya +çevrilir, bir model transkripti temizler (ıı'lar, tekrarlar, eksik noktalama), +sonuç panoya kopyalanır ve o an yazdığın pencereye yapıştırılır. KDE Plasma 6 / Wayland için yazıldı. Sistem paketleri dışında bağımlılığı yok: sadece Python standart kütüphanesi ve PyQt6. @@ -39,10 +38,14 @@ sudo apt install pulseaudio-utils xclip xdotool ffmpeg `install.sh` `dikte` komutunu, menü girdisini ve oturum açılışında otomatik başlatmayı kurar. Ayarlar penceresi GNOME veya KDE global kısayolunu kurar. -Ayarlar penceresinde iki anahtar istenir: **OpenAI** ve **OpenRouter**. Sesi -yazıya çevirme ikisinden birinde çalışır (varsayılan `gpt-4o-transcribe`), -temizleme her zaman OpenRouter'da (`google/gemini-3.5-flash-lite`), yani tek bir -OpenRouter anahtarı ikisine de yeter. Boş bırakırsan `OPENAI_API_KEY` ve +Sesi yazıya çevirme ve temizleme, ayarlar penceresinde ayrı ayrı sağlayıcı +seçer. İkisi de burada çalışabilir, whisper.cpp ve llama.cpp üzerinde: program +da model de o pencereden indirilir (sha256 doğrulamasıyla, +`~/.local/share/dikte` altına), yani önceden hiçbir şey kurman gerekmez ve +makineden hiçbir şey çıkmaz. Bulut seçenekleri anahtar ister: yazıya çevirme +için **OpenAI** ya da **OpenRouter**, temizleme için **OpenRouter** +(`google/gemini-3.5-flash-lite`), yani tek bir OpenRouter anahtarı ikisine de +yeter. Boş bırakırsan `OPENAI_API_KEY` ve `OPENROUTER_API_KEY` kullanılır; anahtarlar `~/.config/dikte/config.json` içinde, izinler 600. Temizlemeyi tamamen kapatabilirsin, o zaman ham transkript yapıştırılır; modelin yanındaki kutudan düşünme seviyesini de seçebilirsin. @@ -142,7 +145,9 @@ ipc.py yerel sokette bir istek, bir cevap audio.py PCM kaydı: diktede pw-record, toplantıda ffmpeg meeting.py kanal ayırma, konuşmacı etiketi, temizleme, tutanak assistant.py dikteyi Claude Code, Codex ya da OpenRouter'dan geçirme -api.py iki sağlayıcıda transkript + OpenRouter temizleme (yalnız stdlib) +api.py her sağlayıcıda transkript ve temizleme (yalnız stdlib) +ggml.py whisper.cpp ve llama.cpp'yi indirip burada çalıştırma +hub.py GitHub ve Hugging Face'te bugün ne olduğu worker.py transkript → temizleme → pano → yapıştırma vad.py kayıtta gerçekten konuşma var mı kararı filetranscribe.py dosyadan transkript: ffmpeg, parçalama, zaman damgaları diff --git a/api.py b/api.py index 95d794c..df9bab6 100644 --- a/api.py +++ b/api.py @@ -1,9 +1,14 @@ -"""OpenAI and OpenRouter calls, stdlib only. +"""OpenAI, OpenRouter and this machine, stdlib only. -Transcription runs on either provider: OpenRouter mirrors OpenAI's -/audio/transcriptions endpoint field for field, so one multipart request serves -both and only the key, the base URL and the model id change. Cleanup is always -OpenRouter. +Transcription runs on any of three providers and cleanup on two, and none of +them needs code of its own. OpenRouter mirrors OpenAI's /audio/transcriptions +endpoint field for field, and ggml.py starts whisper.cpp on that same path, so +one multipart request serves all three; llama.cpp answers /chat/completions the +way OpenRouter does, so one JSON request serves both. What changes between them +is the key, the base URL and the model id. + +The local ones have no key, and their base URL is not known until a server is +up, which is the one thing this module has to fill in for them. """ import collections @@ -14,6 +19,7 @@ import secrets import urllib.error import urllib.request +import ggml from i18n import t APP_URL = "https://github.com/yusufipk/dikte" @@ -21,14 +27,29 @@ USER_AGENT = f"dikte/1.0 (+{APP_URL})" OPENAI_URL = "https://api.openai.com/v1" OPENROUTER_URL = "https://openrouter.ai/api/v1" -# Where a transcription request goes; built by config.Config.transcribe_target(). -# `service` is the name the user sees in an error, `provider` the one the code -# branches on. -Target = collections.namedtuple("Target", "provider service api_key base_url model") +# The floor for a local request. The timeouts elsewhere are sized for a hosted +# API, where a slow answer is a bill running; here the only thing being spent is +# time, and a long recording on a machine without a graphics card takes a good +# deal of it. Cutting that off would throw the work away for nothing. +LOCAL_TIMEOUT = 3600 + +# Where a request goes; built by config.Config's *_target() methods. `service` +# is the name the user sees in an error, `provider` the one the code branches +# on. `reasoning` is only read by cleanup, which is the only job with a model +# that might think about anything. +Target = collections.namedtuple( + "Target", "provider service api_key base_url model reasoning", defaults=("",)) -def timestamp_model(provider): - """Only whisper-1 returns segment times, and OpenRouter namespaces the id.""" +def timestamp_model(provider, model): + """Only whisper-1 returns segment times, and OpenRouter namespaces the id. + + Whisper is what the local server runs whatever the file is called, so there + it stays on the model that is already loaded; asking for another one would + name a model that server has never heard of. + """ + if provider == "local": + return model return "openai/whisper-1" if provider == "openrouter" else "whisper-1" @@ -106,7 +127,11 @@ def _multipart(fields, file_field, file_path): def _headers(provider, api_key, content_type=None): - headers = {"Authorization": f"Bearer {api_key}", "User-Agent": USER_AGENT} + headers = {"User-Agent": USER_AGENT} + # A server on this machine has nothing to authorise, and sending it a + # bearer token would only be a made-up one. + if api_key: + headers["Authorization"] = f"Bearer {api_key}" if content_type: headers["Content-Type"] = content_type if provider == "openrouter": @@ -116,17 +141,44 @@ def _headers(provider, api_key, content_type=None): return headers +def _serving(target, server, timeout): + """A local target with the address of a running server in it. + + The server is started on demand and picks its own port, so this is the first + moment its address exists. serve() is idempotent: once it is up this costs + nothing. + """ + try: + return target._replace(base_url=server.serve()), max(timeout, LOCAL_TIMEOUT) + except ggml.LocalError as exc: + raise ApiError(str(exc)) from None + + +def _local_failure(target, server, exc): + """A server that died mid-request, explained by its own output. + + Without this the message is that the connection dropped, when the reason for + it was printed by the process at the other end. + """ + detail = server.error() + return ApiError(f"{target.service}: {exc}" + (f" ({detail})" if detail else ""), + exc.status) + + def _transcribe_request(target, wav_path, language, prompt, response_format, granularity=None, timeout=300): - if not target.api_key: + if target.provider == "local": + target, timeout = _serving(target, ggml.whisper, timeout) + elif not target.api_key: raise ApiError(t("{service} API key is empty. Add it in Settings.", service=target.service)) fields = [("model", target.model), ("response_format", response_format)] if language and language != "auto": fields.append(("language", language)) # OpenRouter takes the hint field and throws it away, so spare it the bytes. - # The same words still reach the cleanup model as a glossary. - if prompt and target.provider == "openai": + # The same words still reach the cleanup model as a glossary. whisper.cpp + # takes it as the initial prompt, the way OpenAI does. + if prompt and target.provider in ("openai", "local"): fields.append(("prompt", prompt)) if granularity: fields.append(("timestamp_granularities[]", granularity)) @@ -137,14 +189,58 @@ def _transcribe_request(target, wav_path, language, prompt, response_format, _headers(target.provider, target.api_key, ctype), timeout=timeout, ) except ApiError as exc: + if target.provider == "local": + raise _local_failure(target, ggml.whisper, exc) from None raise explain(exc, target.service) from None +# Whisper marks the start of a word with a leading space, so a piece of text +# that does not begin with one continues the word before it rather than starting +# a new one. Both helpers below turn on that. +def _continues_a_word(previous, following): + return bool(previous) and not previous[-1:].isspace() and not following[:1].isspace() + + +def _local_text(text): + """whisper.cpp's segments, joined back into the flowing line OpenAI returns. + + Its plain text puts one segment per line, and a segment boundary falls + wherever the tokens fell, which in Turkish lands inside a word about as + often as between two. Nothing takes the line break's place: whisper's own + leading spaces are what separate the words, and a break inside "değ|iller" + has nothing on either side of it worth keeping. + """ + return "".join(text.split("\n")) + + +def _merge_word_splits(segments): + """Fold a segment that begins mid-word into the one it continues. + + The hosted whisper-1 hands back segments cut on sentences; whisper.cpp cuts + them on tokens, and a subtitle cue reading "değ" is not a cue. The times are + joined along with the text, so the merged segment still covers the whole + word. + """ + merged = [] + for seg in segments: + text = seg.get("text") or "" + if merged and _continues_a_word(merged[-1]["text"], text): + merged[-1]["text"] += text + merged[-1]["end"] = seg.get("end") or merged[-1]["end"] + continue + merged.append({"text": text, "start": seg.get("start") or 0.0, + "end": seg.get("end") or 0.0}) + return merged + + def transcribe(target, wav_path, language="", prompt="", timeout=300): data = _transcribe_request( target, wav_path, language, prompt, "json", timeout=timeout ) - text = (data.get("text") or "").strip() + text = data.get("text") or "" + if target.provider == "local": + text = _local_text(text) + text = text.strip() if not text: raise ApiError(t("Transcript came back empty.")) return text @@ -153,11 +249,13 @@ def transcribe(target, wav_path, language="", prompt="", timeout=300): def transcribe_segments(target, wav_path, language="", prompt="", timeout=300): """[(start_seconds, end_seconds, text)] using whisper-1's verbose response.""" data = _transcribe_request( - target._replace(model=timestamp_model(target.provider)), + target._replace(model=timestamp_model(target.provider, target.model)), wav_path, language, prompt, "verbose_json", granularity="segment", timeout=timeout, ) segments = data.get("segments") or [] + if target.provider == "local": + segments = _merge_word_splits(segments) out = [] for seg in segments: text = (seg.get("text") or "").strip() @@ -166,45 +264,91 @@ def transcribe_segments(target, wav_path, language="", prompt="", timeout=300): end = float(seg.get("end") or 0.0) out.append((start, max(end, start), text)) if not out: - text = (data.get("text") or "").strip() + text = data.get("text") or "" + if target.provider == "local": + text = _local_text(text) + text = text.strip() if not text: raise ApiError(t("Transcript came back empty.")) out = [(0.0, 0.0, text)] return out -def cleanup(text, api_key, model, system_prompt, reasoning="", - base_url=OPENROUTER_URL, timeout=180): - if not api_key: +def _thinking(target, payload): + """Ask for as much thinking as this provider understands, or for none. + + An empty level means "whatever the model does on its own", so nothing is + sent. The two providers mean opposite things by that, which is why the + setting is kept per provider: OpenRouter's cleanup models answer straight + away, while a local model that was trained to think will think, and cleanup + is punctuation rather than a job worth thinking about. + """ + if not target.reasoning: + return + if target.provider == "local-llm": + # What llama.cpp passes to the chat template. The models that think + # read it; the ones that do not ignore it. + payload["chat_template_kwargs"] = { + "enable_thinking": target.reasoning != "none"} + return + if target.reasoning != "none": + # The thinking itself is never shown, so ask for it to be left out. + payload["reasoning"] = {"effort": target.reasoning, "exclude": True} + + +def _local_ceiling(text): + """How much of a reply is worth waiting for from a model on this machine. + + Cleanup gives back what it was given, near enough, so a reply several times + the length of the transcript is a model that has lost the thread rather than + one doing the job. A small one will happily repeat the transcript until the + context is full, and every one of those tokens is a second of somebody + waiting. A hosted model is left alone: there the same runaway is rare, and a + ceiling would cut the minutes short instead. + """ + return max(512, len(text)) + + +def cleanup(target, text, system_prompt, timeout=180): + if target.provider == "local-llm": + target, timeout = _serving(target, ggml.llm, timeout) + elif not target.api_key: raise ApiError(t("{service} API key is empty. Add it in Settings.", - service="OpenRouter")) + service=target.service)) payload = { - "model": model, + "model": target.model, "temperature": 0, "messages": [ {"role": "system", "content": system_prompt}, {"role": "user", "content": f"\n{text}\n"}, ], } - # An empty level means "whatever the model does on its own"; anything else is - # one of OpenRouter's efforts. The thinking itself is never shown, so ask for - # it to be left out of the reply. - if reasoning: - payload["reasoning"] = {"effort": reasoning, "exclude": True} + if target.provider == "local-llm": + payload["max_tokens"] = _local_ceiling(text) + _thinking(target, payload) try: data = _request( - f"{base_url.rstrip('/')}/chat/completions", + f"{target.base_url.rstrip('/')}/chat/completions", json.dumps(payload).encode("utf-8"), - _headers("openrouter", api_key, "application/json"), + _headers(target.provider, target.api_key, "application/json"), timeout=timeout, ) except ApiError as exc: - raise explain(exc, "OpenRouter") from None + if target.provider == "local-llm": + raise _local_failure(target, ggml.llm, exc) from None + raise explain(exc, target.service) from None choices = data.get("choices") or [] if not choices: raise ApiError(_extract_error(json.dumps(data))) - content = ((choices[0].get("message") or {}).get("content") or "").strip() + message = choices[0].get("message") or {} + content = (message.get("content") or "").strip() if not content: + # A thinking model can spend the whole reply on the thinking and leave + # nothing to paste. Worth naming, because the fix is a setting rather + # than a retry: cleanup is not a job that wants thinking. + if message.get("reasoning_content") or message.get("reasoning"): + raise ApiError(t("The cleanup model spent its whole reply on " + "thinking. Set Thinking to “Off”.")) raise ApiError(t("The cleanup model returned an empty reply.")) return content diff --git a/config.py b/config.py index 396bd58..16d9c0d 100644 --- a/config.py +++ b/config.py @@ -6,7 +6,9 @@ import os import pathlib import api +import ggml import i18n +from i18n import t def _xdg(var, default): @@ -365,14 +367,46 @@ DEFAULTS = { "openai_base_url": "https://api.openai.com/v1", "openrouter_api_key": "", "openrouter_base_url": "https://openrouter.ai/api/v1", - "transcribe_provider": "openai", # openai | openrouter + "transcribe_provider": "local", # local | openai | openrouter "transcribe_model": "gpt-4o-transcribe", # used when provider is openai "openrouter_transcribe_model": "openai/gpt-4o-transcribe", "language": "tr", "transcribe_prompt": "", + + # --- whisper.cpp, on this machine --------------------------------------- + # The program and the model are both fetched from Settings; empty means + # nothing has been downloaded yet, which is what opens Settings on a first + # run. + # Pointed at the suggestion rather than at nothing, so the settings window + # opens with the Download button already on the right model. + "local_model": ggml.SUGGESTED_WHISPER, + "local_threads": 0, # 0 -> whisper.cpp picks + "local_gpu": True, + "local_preload": True, # load the model while Dikte starts, rather + # than on the first dictation + "local_binary": "", # empty -> whichever copy ggml.py finds + "cleanup_enabled": True, + "cleanup_provider": "openrouter", # openrouter | local "cleanup_model": "google/gemini-3.5-flash-lite", "cleanup_reasoning": "", # empty -> whatever the model does by default + + # --- llama.cpp, on this machine ----------------------------------------- + # Kept apart from the meeting settings on purpose. Cleanup is punctuation + # and filler words, which a small model does in a moment; the minutes are a + # summary of an hour, which it does not. + "local_llm_model": "", # a file name, e.g. gemma-3-4b-it-Q4_K_M.gguf + # Where the model list is read from; the settings window offers the + # publishers ggml.py knows of and takes any other one that is typed in. + "local_llm_repo": ggml.SUGGESTED_LLM[0], + "local_llm_threads": 0, + "local_llm_gpu": True, + "local_llm_context": 8192, + "local_llm_binary": "", + "local_llm_preload": False, # heavier than whisper, so only when asked + # Off rather than empty: a model trained to think will, and 300 tokens of + # reasoning about a comma is 300 tokens of waiting. + "local_llm_reasoning": "none", "cleanup_prompt": "", # empty -> language-specific default "auto_paste": True, "paste_shortcut": "ctrl+v", @@ -400,6 +434,7 @@ DEFAULTS = { "meeting_language": "", # empty -> the dictation speech language "meeting_max_seconds": 14400, # 4 hours "meeting_cleanup": True, + "meeting_provider": "openrouter", # openrouter | local "meeting_model": "google/gemini-3.5-flash", "meeting_reasoning": "", "meeting_prompt": "", # empty -> language-specific default @@ -495,14 +530,84 @@ class Config: return self["openrouter_api_key"].strip() or os.environ.get("OPENROUTER_API_KEY", "").strip() def transcribe_target(self): - """Key, endpoint and model for whichever provider does speech to text.""" - if self["transcribe_provider"] == "openrouter": + """Key, endpoint and model for whichever provider does speech to text. + + The local one leaves its base URL empty on purpose: the server picks a + port when it starts, and starting it here would make reading a setting + launch a process. api.py fills the address in when it is about to send + the request, which is the moment the server is needed anyway. + """ + provider = self["transcribe_provider"] + if provider == "local": + return api.Target("local", t("Local whisper"), "", "", + self["local_model"]) + if provider == "openrouter": return api.Target("openrouter", "OpenRouter", self.openrouter_key(), self["openrouter_base_url"], self["openrouter_transcribe_model"]) return api.Target("openai", "OpenAI", self.openai_key(), self["openai_base_url"], self["transcribe_model"]) + def cleanup_target(self): + """The same, for the model that tidies a transcript up.""" + if self["cleanup_provider"] == "local": + return api.Target("local-llm", t("Local model"), "", "", + self["local_llm_model"], self["local_llm_reasoning"]) + return api.Target("openrouter", "OpenRouter", self.openrouter_key(), + self["openrouter_base_url"], self["cleanup_model"], + self["cleanup_reasoning"]) + + def minutes_target(self): + """The same again, for the minutes. + + Its own provider rather than the cleanup one. The two jobs are not the + same size: a 4B model on this machine will strip the filler words out of + a dictation perfectly well and will not write up an hour long meeting, + so choosing it for the first must not quietly choose it for the second. + """ + if self["meeting_provider"] == "local": + return api.Target("local-llm", t("Local model"), "", "", + self["local_llm_model"], self["local_llm_reasoning"]) + return api.Target("openrouter", "OpenRouter", self.openrouter_key(), + self["openrouter_base_url"], self["meeting_model"], + self["meeting_reasoning"]) + + def transcribe_ready(self): + """Whether speech to text could run right now, without opening Settings.""" + if self["transcribe_provider"] == "local": + return self.local_whisper_ready() + return bool(self.transcribe_target().api_key) + + def local_whisper_ready(self): + return bool(ggml.program_path(ggml.WHISPER, self["local_binary"]) + and self["local_model"] + and ggml.have_model(ggml.whisper_model_path(self["local_model"]))) + + def local_llm_ready(self): + return bool(ggml.program_path(ggml.LLAMA, self["local_llm_binary"]) + and self["local_llm_model"] + and ggml.have_model(ggml.llm_model_path(self["local_llm_model"]))) + + def apply_local(self): + """Hand the local settings to the servers, restarting what they change.""" + ggml.whisper.configure( + model=self["local_model"], + threads=int(self["local_threads"]), + gpu=bool(self["local_gpu"]), + binary=self["local_binary"], + ) + ggml.llm.configure( + model=self["local_llm_model"], + threads=int(self["local_llm_threads"]), + gpu=bool(self["local_llm_gpu"]), + binary=self["local_llm_binary"], + context=int(self["local_llm_context"]), + ) + + def uses_local_llm(self): + """Whether anything is set to run the local cleanup model.""" + return "local" in (self["cleanup_provider"], self["meeting_provider"]) + def cleanup_prompt(self, with_timestamps=False, with_speakers=False, subtitles=False): turkish = i18n.language() == "tr" diff --git a/dikte.py b/dikte.py index cc17c6c..c667634 100755 --- a/dikte.py +++ b/dikte.py @@ -7,16 +7,20 @@ terminal talks to. Every verb it answers is in cli.py, which is also what runs command line says "there is no instance to talk to, so be one". """ +import contextlib import json import os +import signal +import socket import sys +import threading # A Wayland client cannot place a window in a screen corner, so the indicator # is drawn through XWayland. if os.environ.get("XDG_SESSION_TYPE") == "wayland" and os.environ.get("DISPLAY"): os.environ.setdefault("QT_QPA_PLATFORM", "xcb") -from PyQt6.QtCore import QTimer, QElapsedTimer # noqa: E402 +from PyQt6.QtCore import QTimer, QElapsedTimer, QSocketNotifier # noqa: E402 from PyQt6.QtGui import QAction, QIcon # noqa: E402 from PyQt6.QtNetwork import QLocalServer, QLocalSocket # noqa: E402 from PyQt6.QtWidgets import QApplication, QMenu, QSystemTrayIcon # noqa: E402 @@ -25,6 +29,7 @@ import assistant # noqa: E402 import audio # noqa: E402 import cli # noqa: E402 import config as cfg # noqa: E402 +import ggml # noqa: E402 import hotkey # noqa: E402 import i18n # noqa: E402 import ipc # noqa: E402 @@ -92,6 +97,9 @@ class Dikte: self.meeting_recorder = audio.MeetingRecorder() self.meetings = MeetingPipeline(self.conf) self.evdev = hotkey.EvdevHotkey() + # Before anything of ours is started: a server from a Dikte that was + # killed outright is still holding a model in memory. + ggml.sweep() self.recorder.level.connect(self._on_level) self.recorder.stopped.connect(self._on_recorded) @@ -802,9 +810,44 @@ class Dikte: # Don't drop the object while its own signal is still being delivered. QTimer.singleShot(0, lambda: setattr(self, "settings_window", None)) + def _apply_local(self): + """Pass the local settings on, and hold the models ready if asked to. + + Loading a model takes a second or two for whisper and longer for an LLM. + Doing it while Dikte starts rather than on the first dictation is the + whole reason a server is kept alive instead of running the program once + per recording; the checkboxes are there for the machine whose memory is + wanted elsewhere. + """ + self.conf.apply_local() + wanted = [] + if self.conf["transcribe_provider"] == "local": + if self.conf["local_preload"] and self.conf.local_whisper_ready(): + wanted.append((ggml.whisper, "whisper")) + else: + ggml.whisper.stop() # give the memory back when it is not in use + if self.conf.uses_local_llm(): + if self.conf["local_llm_preload"] and self.conf.local_llm_ready(): + wanted.append((ggml.llm, "llama")) + else: + ggml.llm.stop() + + def warm(): + for server, name in wanted: + try: + server.serve() + except ggml.LocalError as exc: + # Not worth an indicator: the first dictation raises the + # same thing where the user can act on it. + print(f"dikte: {name}: {exc}", file=sys.stderr) + + if wanted: + threading.Thread(target=warm, daemon=True).start() + def _apply_settings(self): self.overlay.corner = self.conf["overlay_corner"] self.ask_overlay.corner = self.conf["overlay_corner"] + self._apply_local() self._build_tray() self._refresh_tray() if self.conf["evdev_hotkey"]: @@ -834,6 +877,9 @@ class Dikte: self.meeting_recorder.stop() self.overlay.dismiss() self.ask_overlay.dismiss() + # Also on the restart path, which replaces the process without ever + # reaching atexit and would otherwise leave the models in memory. + ggml.stop_all() self.tray.hide() @@ -872,6 +918,41 @@ def main(): return run_app([arg for arg in argv if arg != "--gui"]) +def install_signal_handlers(app): + """Quit properly on the signals a session sends, rather than dying where we stand. + + Qt spends its time blocked inside C, and a Python signal handler only runs + between bytecodes, so on its own it would not run until the next event + arrived, which for an idle tray icon may be never. set_wakeup_fd writes the + signal number to a socket instead, and a notifier turns that into an event + Qt does deliver. + + Worth the trouble because of what shutdown() does: a logout sends SIGTERM, + and without this a whisper.cpp or llama.cpp server outlives the session + holding its model in memory. SIGKILL cannot be caught at all, which is what + ggml.sweep() is for. + + Returns the objects it made; they have to stay alive to keep working. + """ + reader, writer = socket.socketpair() + reader.setblocking(False) + writer.setblocking(False) + signal.set_wakeup_fd(writer.fileno()) + notifier = QSocketNotifier(reader.fileno(), QSocketNotifier.Type.Read) + + def woken(): + with contextlib.suppress(OSError): + reader.recv(64) + app.quit() # aboutToQuit runs shutdown() + + notifier.activated.connect(woken) + for sig in (signal.SIGINT, signal.SIGTERM, signal.SIGHUP): + # A handler that does nothing, so that the default action, stopping the + # process where it stands, is replaced by the wakeup above. + signal.signal(sig, lambda *_: None) + return reader, writer, notifier + + def run_app(args): command = args[0] if args else "" @@ -879,6 +960,12 @@ def run_app(args): app.setApplicationName("Dikte") app.setDesktopFileName("dikte") app.setQuitOnLastWindowClosed(False) + # Before Dikte is built, because building it is what may start a server, and + # a signal arriving in the middle of that would otherwise take the default + # action and leave the server behind. A signal this early lands in the + # socket and is delivered as soon as the event loop starts. Held in a name + # so that the notifier and its socket outlive this function. + signal_plumbing = install_signal_handlers(app) # noqa: F841 if not QSystemTrayIcon.isSystemTrayAvailable(): print("dikte: no system tray found, running anyway") @@ -927,7 +1014,10 @@ def run_app(args): # No key for the chosen transcription provider means nothing can work yet, # so the settings window is the only useful thing to open. - if command == "settings" or not dikte.conf.transcribe_target().api_key: + # A transcription provider that cannot run yet, whether that is a missing + # API key or a model nobody has downloaded, means nothing can work, so the + # settings window is the only useful thing to open. + if command == "settings" or not dikte.conf.transcribe_ready(): dikte.open_settings() elif command == "toggle": QTimer.singleShot(0, dikte.toggle) diff --git a/filetranscribe.py b/filetranscribe.py index 4839d13..d931264 100644 --- a/filetranscribe.py +++ b/filetranscribe.py @@ -127,17 +127,11 @@ class FileTranscriber(QObject): def _cleanup(self, text, timestamps): conf = self.conf prompt = conf.cleanup_prompt(with_timestamps=timestamps, subtitles=True) + target = conf.cleanup_target() out = [] for block in split_text(text, timestamps): self._check() - out.append(api.cleanup( - block, - conf.openrouter_key(), - conf["cleanup_model"], - prompt, - reasoning=conf["cleanup_reasoning"], - base_url=conf["openrouter_base_url"], - )) + out.append(api.cleanup(target, block, prompt)) return ("\n" if timestamps else "\n\n").join(out) diff --git a/install.sh b/install.sh index 2cbaaee..10a89c4 100755 --- a/install.sh +++ b/install.sh @@ -116,5 +116,6 @@ fi echo ok "Done. Start it with: dikte" -say "The settings window opens on first run; add an OpenAI, Groq or OpenRouter key." +say "The settings window opens on first run: download a speech model, or add" +say "an OpenAI or OpenRouter key instead." echo diff --git a/meeting.py b/meeting.py index c0713c6..d6bfbbe 100644 --- a/meeting.py +++ b/meeting.py @@ -118,18 +118,12 @@ class MeetingPipeline(QObject): self._check() self._say(t("Writing the minutes…")) - minutes = api.cleanup( - transcript, - self.conf.openrouter_key(), - self.conf["meeting_model"], - self.conf.meeting_prompt(), - reasoning=self.conf["meeting_reasoning"], - base_url=self.conf["openrouter_base_url"], - timeout=600, - ) + writer = self.conf.minutes_target() + minutes = api.cleanup(writer, transcript, self.conf.meeting_prompt(), + timeout=600) title = self._write(doc_path, minutes, transcript, entry) cfg.update_meeting(base, status="done", error="", title=title, - model=self.conf["meeting_model"]) + model=writer.model) self._discard_audio(wav_path) self.finished.emit(base, title) @@ -201,6 +195,7 @@ class MeetingPipeline(QObject): def _cleanup(self, transcript): conf = self.conf prompt = conf.cleanup_prompt(with_timestamps=True, with_speakers=True) + target = conf.cleanup_target() out = [] blocks = filetranscribe.split_text(transcript, True) for index, block in enumerate(blocks, start=1): @@ -208,14 +203,7 @@ class MeetingPipeline(QObject): if len(blocks) > 1: self._say(t("Cleaning up {index}/{count}…", index=index, count=len(blocks))) - out.append(api.cleanup( - block, - conf.openrouter_key(), - conf["cleanup_model"], - prompt, - reasoning=conf["cleanup_reasoning"], - base_url=conf["openrouter_base_url"], - )) + out.append(api.cleanup(target, block, prompt)) return "\n".join(out) def _write(self, doc_path, minutes, transcript, entry): diff --git a/settings_ui.py b/settings_ui.py index 1690a6b..c70ed66 100644 --- a/settings_ui.py +++ b/settings_ui.py @@ -18,6 +18,7 @@ import assistant import audio import config as cfg import filetranscribe +import ggml import hotkey import meeting from filetranscribe import FileTranscriber @@ -29,7 +30,10 @@ LANGUAGES = [ ("German", "de"), ("French", "fr"), ("Spanish", "es"), ("Arabic", "ar"), ] CORNERS = ["bottom-left", "bottom-right", "top-left", "top-right"] -TRANSCRIBE_PROVIDERS = [("OpenAI", "openai"), ("OpenRouter", "openrouter")] +TRANSCRIBE_PROVIDERS = [("This machine (whisper.cpp)", "local"), + ("OpenAI", "openai"), ("OpenRouter", "openrouter")] +CLEANUP_PROVIDERS = [("OpenRouter", "openrouter"), + ("This machine (llama.cpp)", "local")] # Starting points for the model box; "Fetch model list" replaces them with # whatever the provider offers today. TRANSCRIBE_MODELS = { @@ -103,6 +107,316 @@ AUDIO_FILTER = ("*.mp3 *.wav *.m4a *.ogg *.opus *.flac *.aac *.wma " "*.mp4 *.mkv *.webm *.mov *.avi") +class LocalModelBox(QGroupBox): + """The program, the model, and the two downloads that put them there. + + One class for whisper.cpp and llama.cpp, because the job is the same one + twice: say whether the program is here, offer the models somebody publishes, + fetch the chosen one, and stay usable while a gigabyte arrives. Nothing is + listed in the source; `repos` and `models` are asked at the moment the box is + opened, so a model published this morning is in the list this afternoon. + """ + + _listed = pyqtSignal(list, str) + _quants = pyqtSignal(list, str) + _progress = pyqtSignal(int, int) + _finished = pyqtSignal(str, str) + _installed = pyqtSignal(str, str) + + changed = pyqtSignal() + + def __init__(self, program, title, models, model_path, repos=None, parent=None): + super().__init__(title, parent) + self.program = program + self._models = models # () -> [hub.Item], or (repo) -> [hub.Item] + self._model_path = model_path # (name) -> Path + self._repos = repos # None, or () -> [repo id] + self._downloading = False + self._pending = False + self._stop = False + self._wanted = "" # the model to select once a list arrives + + form = QFormLayout(self) + + self.program_label = QLabel("") + self.program_label.setWordWrap(True) + self.install_button = QPushButton(t("Download")) + self.install_button.clicked.connect(self._install_program) + form.addRow(t("Program"), self._side_by_side(self.program_label, + self.install_button)) + + if self._repos is not None: + self.repo = QComboBox() + self.repo.setEditable(True) + self.repo.setToolTip(t("A Hugging Face repository of GGUF files. The " + "list is fetched; any other one can be typed in.")) + self.repo.currentTextChanged.connect(self._repo_changed) + form.addRow(t("Publisher"), self.repo) + + self.model = QComboBox() + self.download_button = QPushButton(t("Download")) + self.download_button.clicked.connect(self._download) + self.delete_button = QPushButton(t("Delete")) + self.delete_button.clicked.connect(self._delete) + form.addRow(t("Model"), self._side_by_side(self.model, + self.download_button, + self.delete_button)) + self.model.currentIndexChanged.connect(self._model_changed) + + self.status = QLabel("") + self.status.setWordWrap(True) + form.addRow(self.status) + + self._listed.connect(self._on_listed) + self._quants.connect(self._on_listed) + self._progress.connect(self._on_progress) + self._finished.connect(self._on_finished) + self._installed.connect(self._on_installed) + + @staticmethod + def _side_by_side(*widgets): + layout = QHBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + for index, widget in enumerate(widgets): + layout.addWidget(widget, 1 if index == 0 else 0) + holder = QWidget() + holder.setLayout(layout) + return holder + + # ---- what is here ---------------------------------------------------- + + def selected(self): + return self.model.currentData() or "" + + def repository(self): + return self.repo.currentText().strip() if self._repos is not None else "" + + def load(self, model, repo=""): + """Show what is stored. What else is on offer is asked for on the way up. + + Nothing is fetched here: building the settings window is not the same as + opening it, and a list nobody is looking at is not worth a request. What + is already on this disk is shown straight away either way. + """ + self._wanted = model + self._pending = True + self._show_program() + if self._repos is not None: + self.repo.blockSignals(True) + self.repo.clear() + self.repo.addItems(list(ggml.SUGGESTED_LLM)) + self.repo.setCurrentText(repo or ggml.SUGGESTED_LLM[0]) + self.repo.blockSignals(False) + self._fill_models([]) + + def showEvent(self, event): + super().showEvent(event) + if self._pending: + self._pending = False + if self._repos is not None: + self._fill_repos(self.repository()) + self._fetch_models(self.repository()) + + def _show_program(self): + path = ggml.program_path(self.program) + if not path: + self.program_label.setText(t("Not installed.")) + self.install_button.setVisible(True) + return + self.install_button.setVisible(not ggml.installed_program(self.program) + and not ggml.system_program(self.program)) + if ggml.system_program(self.program): + # Worth saying which one is running: a distribution package is built + # for this machine and may reach the graphics card, while the + # released binaries carry processor backends only. + self.program_label.setText(t("Installed on the system: {path}", path=path)) + else: + self.program_label.setText( + t("Downloaded, version {version}.", + version=ggml.installed_version(self.program) or "?")) + + # ---- the lists ------------------------------------------------------- + + def _fill_repos(self, current): + def work(): + self._listed.emit([("repos", ggml.llm_repos())], "") + + threading.Thread(target=work, daemon=True).start() + + def _repo_changed(self): + if not self._downloading: + self._fetch_models(self.repository()) + + def _fetch_models(self, repo=""): + self.status.setText(t("Fetching the model list…")) + + def work(): + try: + found = self._models(repo) if self._repos is not None else self._models() + self._quants.emit([("models", found)], "") + except ggml.LocalError as exc: + self._quants.emit([], str(exc)) + + threading.Thread(target=work, daemon=True).start() + + def _on_listed(self, payload, error): + if error: + self.status.setText(error) + self._refresh_buttons() + return + kind, found = payload[0] + if kind == "repos": + current = self.repo.currentText() + self.repo.blockSignals(True) + self.repo.clear() + self.repo.addItems(found) + self.repo.setCurrentText(current) + self.repo.blockSignals(False) + return + self._fill_models(found) + + def _fill_models(self, items): + """One row per model, saying what it weighs and whether it is here.""" + wanted = self._wanted or self.selected() + here = [name for name in (self._model_path(i.name).name for i in items)] + self.model.blockSignals(True) + self.model.clear() + for item, name in zip(items, here): + mark = (t("downloaded") if ggml.have_model(self._model_path(item.name)) + else ggml.human_size(item.size)) + self.model.addItem(f"{name} ({mark})", name) + self.model.setItemData(self.model.count() - 1, item, Qt.ItemDataRole.UserRole + 1) + # A model that was downloaded and then dropped from the list upstream is + # still on this disk and still works, so it stays on offer. + for name in self._on_disk(): + if self.model.findData(name) < 0: + self.model.addItem(f"{name} ({t('downloaded')})", name) + # And one that is chosen but not here, because the file was deleted from + # underneath or the settings came from another machine, stays chosen: + # Save reads this box, and a row missing here would quietly empty the + # setting rather than showing that the model needs downloading again. + if wanted and self.model.findData(wanted) < 0: + self.model.addItem(f"{wanted} ({t('not downloaded')})", wanted) + index = self.model.findData(wanted) + self.model.setCurrentIndex(max(index, 0)) + self.model.blockSignals(False) + self._wanted = "" + self._model_changed() + + def _on_disk(self): + return (ggml.installed_whisper_models() if self.program is ggml.WHISPER + else ggml.installed_llm_models()) + + # ---- fetching -------------------------------------------------------- + + def _install_program(self): + self.install_button.setEnabled(False) + self.program_label.setText(t("Downloading…")) + + def work(): + try: + ggml.install_program(self.program, on_progress=self._report) + self._installed.emit("", "") + except ggml.LocalError as exc: + self._installed.emit("", str(exc)) + + threading.Thread(target=work, daemon=True).start() + + def _on_installed(self, _, error): + self.install_button.setEnabled(True) + self._show_program() + if error: + self.program_label.setText(error) + self.changed.emit() + + def _current_item(self): + return self.model.currentData(Qt.ItemDataRole.UserRole + 1) + + def _download(self): + if self._downloading: + self._stop = True + return + item = self._current_item() + if item is None: + return + self._downloading, self._stop = True, False + self._refresh_buttons() + + def work(): + try: + landed = ggml.download(item, self._model_path(item.name), + on_progress=self._report, + should_stop=lambda: self._stop) + self._finished.emit(item.name if landed else "", "") + except ggml.LocalError as exc: + self._finished.emit("", str(exc)) + + threading.Thread(target=work, daemon=True).start() + + def _report(self, done, total): + self._progress.emit(done, total) + + def _on_progress(self, done, total): + share = f" ({done * 100 // total}%)" if total else "" + text = t("Downloading: {done} of {total}{share}", + done=ggml.human_size(done), total=ggml.human_size(total or done), + share=share) + if self._downloading: + self.status.setText(text) + else: + self.program_label.setText(text) + + def _on_finished(self, name, error): + self._downloading = False + if error: + self.status.setText(error) + elif not name: + self.status.setText(t("Download stopped.")) + self._fill_models_from_current() + self.changed.emit() + + def _fill_models_from_current(self): + """Redraw the rows without asking anybody anything again.""" + items = [self.model.itemData(i, Qt.ItemDataRole.UserRole + 1) + for i in range(self.model.count())] + self._wanted = self.selected() + self._fill_models([i for i in items if i is not None]) + + def _delete(self): + name = self.selected() + if not name or not ggml.have_model(self._model_path(name)): + return + if QMessageBox.question(self, t("Delete model"), + t("Delete {name} from this machine?", name=name)) \ + != QMessageBox.StandardButton.Yes: + return + try: + ggml.delete_model(self._model_path(name)) + except ggml.LocalError as exc: + self.status.setText(str(exc)) + self._fill_models_from_current() + self.changed.emit() + + def _model_changed(self): + self._refresh_buttons() + self.changed.emit() + + def _refresh_buttons(self): + name = self.selected() + here = bool(name) and ggml.have_model(self._model_path(name)) + self.delete_button.setEnabled(here and not self._downloading) + self.download_button.setText(t("Stop") if self._downloading else t("Download")) + self.download_button.setEnabled(self._downloading or (bool(name) and not here)) + if self._downloading: + return + if not name: + self.status.setText(t("Nothing downloaded yet.")) + elif here: + self.status.setText(t("Ready: {name}.", name=name)) + else: + self.status.setText(t("{name} has not been downloaded yet.", name=name)) + + class SettingsWindow(QDialog): applied = pyqtSignal() @@ -127,9 +441,9 @@ class SettingsWindow(QDialog): self.setWindowTitle(t("Dikte Settings")) self.resize(680, 640) - tabs = QTabWidget(self) + tabs = self.tabs = QTabWidget(self) tabs.addTab(self._general_tab(), t("General")) - tabs.addTab(self._api_tab(), t("API and models")) + self.api_tab_index = tabs.addTab(self._api_tab(), t("API and models")) tabs.addTab(self._prompt_tab(), t("Cleanup rules")) tabs.addTab(self._assistant_tab(), t("Agent")) tabs.addTab(self._meeting_tab(), t("Meeting")) @@ -161,6 +475,10 @@ class SettingsWindow(QDialog): self.meetings.finished.connect(self._on_minutes_finished) self.meetings.failed.connect(self._on_minutes_failed) self._load() + # On a machine where nothing can transcribe yet, this window was opened + # because of that, so open it on the tab that fixes it. + if not conf.transcribe_ready(): + self.tabs.setCurrentIndex(self.api_tab_index) # ---- tabs ---------------------------------------------------------- @@ -269,20 +587,55 @@ class SettingsWindow(QDialog): stt_form = QFormLayout(stt) self.transcribe_provider = QComboBox() for label, value in TRANSCRIBE_PROVIDERS: - self.transcribe_provider.addItem(label, value) + self.transcribe_provider.addItem(t(label), value) stt_form.addRow(t("Provider"), self.transcribe_provider) + # The hosted providers take any model id that is typed at them; the + # local one offers what has been published, so the two are separate + # blocks and only one of them is ever visible. + self.hosted_stt = QWidget() + hosted_form = QFormLayout(self.hosted_stt) + hosted_form.setContentsMargins(0, 0, 0, 0) self.transcribe_model = QComboBox() self.transcribe_model.setEditable(True) self.refresh_transcribe_models = QPushButton(t("Fetch model list")) self.refresh_transcribe_models.clicked.connect(self._load_transcribe_models) - stt_form.addRow(t("Model"), - self._row(self.transcribe_model, self.refresh_transcribe_models)) + hosted_form.addRow(t("Model"), + self._row(self.transcribe_model, + self.refresh_transcribe_models)) # A spanning row: in the narrow field column a wrapped label gets a # height that fits one line, and the rest of the text is cut off. self.transcribe_status = QLabel("") self.transcribe_status.setWordWrap(True) - stt_form.addRow(self.transcribe_status) + hosted_form.addRow(self.transcribe_status) + stt_form.addRow(self.hosted_stt) + + self.local_whisper = LocalModelBox( + ggml.WHISPER, t("On this machine"), + ggml.whisper_models, ggml.whisper_model_path) + stt_form.addRow(self.local_whisper) + + self.local_gpu = QCheckBox(t("Use the graphics card")) + self.local_gpu.setToolTip( + t("whisper.cpp reaches the card through CUDA, ROCm or Vulkan when the " + "build it is running was made with one. A build without any of them " + "runs on the processor whatever this says.")) + self.local_preload = QCheckBox(t("Load the model when Dikte starts")) + self.local_preload.setToolTip( + t("A large model takes a second or two to load. Loading it up front " + "spends that once instead of on the first dictation, at the cost of " + "the memory it sits in.")) + self.local_threads = QSpinBox() + self.local_threads.setRange(0, 64) + self.local_threads.setSpecialValueText(t("Automatic")) + self.local_options = QWidget() + options_form = QFormLayout(self.local_options) + options_form.setContentsMargins(0, 0, 0, 0) + options_form.addRow("", self.local_gpu) + options_form.addRow("", self.local_preload) + options_form.addRow(t("Threads"), self.local_threads) + stt_form.addRow(self.local_options) + self.transcribe_provider.currentIndexChanged.connect(self._provider_changed) outer.addWidget(stt) @@ -291,12 +644,22 @@ class SettingsWindow(QDialog): self.cleanup_enabled = QCheckBox(t("Clean the transcript with a model")) orr_form.addRow("", self.cleanup_enabled) + self.cleanup_provider = QComboBox() + for label, value in CLEANUP_PROVIDERS: + self.cleanup_provider.addItem(t(label), value) + self.cleanup_provider.currentIndexChanged.connect(self._cleanup_provider_changed) + orr_form.addRow(t("Provider"), self.cleanup_provider) + + self.hosted_cleanup = QWidget() + cleanup_form = QFormLayout(self.hosted_cleanup) + cleanup_form.setContentsMargins(0, 0, 0, 0) self.cleanup_model = QComboBox() self.cleanup_model.setEditable(True) self.cleanup_model.addItems(CLEANUP_MODELS) self.refresh_models = QPushButton(t("Fetch model list")) self.refresh_models.clicked.connect(self._load_models) - orr_form.addRow(t("Model"), self._row(self.cleanup_model, self.refresh_models)) + cleanup_form.addRow(t("Model"), self._row(self.cleanup_model, + self.refresh_models)) self.cleanup_reasoning = QComboBox() for label, value in REASONING_LEVELS: @@ -306,11 +669,38 @@ class SettingsWindow(QDialog): "a light job, so more thinking mostly costs time and tokens. Models " "that cannot think ignore this.") ) - orr_form.addRow(t("Thinking"), self.cleanup_reasoning) + cleanup_form.addRow(t("Thinking"), self.cleanup_reasoning) self.models_label = QLabel(t("Runs on OpenRouter.")) self.models_label.setWordWrap(True) - orr_form.addRow(self.models_label) + cleanup_form.addRow(self.models_label) + orr_form.addRow(self.hosted_cleanup) + + self.local_llm = LocalModelBox( + ggml.LLAMA, t("On this machine"), + ggml.llm_quants, ggml.llm_model_path, repos=ggml.llm_repos) + orr_form.addRow(self.local_llm) + + self.local_llm_gpu = QCheckBox(t("Use the graphics card")) + self.local_llm_preload = QCheckBox(t("Load the model when Dikte starts")) + self.local_llm_preload.setToolTip( + t("An LLM is slower to load than a whisper model and sits in more " + "memory. Off means it is loaded on the first cleanup instead.")) + self.local_llm_reasoning = QComboBox() + for label, value in REASONING_LEVELS: + self.local_llm_reasoning.addItem(t(label), value) + self.local_llm_reasoning.setToolTip( + t("A model trained to think will think unless it is told not to, and " + "spending 300 tokens of reasoning on a comma is 300 tokens of " + "waiting. Off is what cleanup wants.")) + self.local_llm_options = QWidget() + llm_form = QFormLayout(self.local_llm_options) + llm_form.setContentsMargins(0, 0, 0, 0) + llm_form.addRow("", self.local_llm_gpu) + llm_form.addRow("", self.local_llm_preload) + llm_form.addRow(t("Thinking"), self.local_llm_reasoning) + orr_form.addRow(self.local_llm_options) + outer.addWidget(orr) outer.addStretch(1) return page @@ -926,9 +1316,20 @@ class SettingsWindow(QDialog): self._shown_provider = "" self._select_data(self.transcribe_provider, conf["transcribe_provider"]) self._provider_changed() # selecting index 0 fires no signal + self.local_gpu.setChecked(conf["local_gpu"]) + self.local_preload.setChecked(conf["local_preload"]) + self.local_threads.setValue(int(conf["local_threads"])) + self.local_whisper.load(conf["local_model"]) + self.cleanup_enabled.setChecked(conf["cleanup_enabled"]) + self._select_data(self.cleanup_provider, conf["cleanup_provider"]) + self._cleanup_provider_changed() self.cleanup_model.setCurrentText(conf["cleanup_model"]) self._select_data(self.cleanup_reasoning, conf["cleanup_reasoning"]) + self.local_llm_gpu.setChecked(conf["local_llm_gpu"]) + self.local_llm_preload.setChecked(conf["local_llm_preload"]) + self._select_data(self.local_llm_reasoning, conf["local_llm_reasoning"]) + self.local_llm.load(conf["local_llm_model"], conf["local_llm_repo"]) self.cleanup_prompt.setPlainText(conf["cleanup_prompt"] or cfg.default_cleanup_prompt()) self.file_cleanup_prompt.setPlainText( conf["file_cleanup_prompt"] or cfg.default_file_cleanup_prompt() @@ -1003,16 +1404,27 @@ class SettingsWindow(QDialog): conf["openai_api_key"] = self.openai_key.text().strip() conf["openrouter_api_key"] = self.openrouter_key.text().strip() - provider = self.transcribe_provider.currentData() or "openai" - self._models[provider] = self.transcribe_model.currentText().strip() + provider = self.transcribe_provider.currentData() or "local" + if provider in TRANSCRIBE_MODELS: + self._models[provider] = self.transcribe_model.currentText().strip() conf["transcribe_provider"] = provider for key, name in (("openai", "transcribe_model"), ("openrouter", "openrouter_transcribe_model")): conf[name] = self._models[key].strip() or cfg.DEFAULTS[name] + conf["local_model"] = self.local_whisper.selected() + conf["local_gpu"] = self.local_gpu.isChecked() + conf["local_preload"] = self.local_preload.isChecked() + conf["local_threads"] = self.local_threads.value() conf["cleanup_enabled"] = self.cleanup_enabled.isChecked() + conf["cleanup_provider"] = self.cleanup_provider.currentData() or "openrouter" conf["cleanup_model"] = self.cleanup_model.currentText().strip() conf["cleanup_reasoning"] = self.cleanup_reasoning.currentData() or "" + conf["local_llm_model"] = self.local_llm.selected() + conf["local_llm_repo"] = self.local_llm.repository() + conf["local_llm_gpu"] = self.local_llm_gpu.isChecked() + conf["local_llm_preload"] = self.local_llm_preload.isChecked() + conf["local_llm_reasoning"] = self.local_llm_reasoning.currentData() or "" # Store an empty prompt when it matches the default, so switching the # interface language also switches the prompt language. @@ -1093,15 +1505,27 @@ class SettingsWindow(QDialog): def _provider_changed(self): """Swap the model box over to the newly chosen provider's own model.""" - if self._shown_provider: + if self._shown_provider in TRANSCRIBE_MODELS: self._models[self._shown_provider] = self.transcribe_model.currentText().strip() - provider = self.transcribe_provider.currentData() or "openai" + provider = self.transcribe_provider.currentData() or "local" self._shown_provider = provider + local = provider == "local" + self.hosted_stt.setVisible(not local) + self.local_whisper.setVisible(local) + self.local_options.setVisible(local) + if local: + return self.transcribe_model.clear() self.transcribe_model.addItems(TRANSCRIBE_MODELS[provider]) self.transcribe_model.setCurrentText(self._models[provider]) self.transcribe_status.setText("") + def _cleanup_provider_changed(self): + local = (self.cleanup_provider.currentData() or "openrouter") == "local" + self.hosted_cleanup.setVisible(not local) + self.local_llm.setVisible(local) + self.local_llm_options.setVisible(local) + def _load_transcribe_models(self): """The model list of whichever provider is selected.""" provider = self.transcribe_provider.currentData() or "openai" diff --git a/tests/support.py b/tests/support.py index b199940..26d069b 100644 --- a/tests/support.py +++ b/tests/support.py @@ -18,6 +18,7 @@ import sys import tempfile import unittest import urllib.error +import urllib.request import wave from unittest import mock @@ -40,6 +41,12 @@ linux_only = unittest.skipUnless( ) +def _no_network(*args, **kwargs): + raise AssertionError( + "a test reached the network; wrap the call in support.fake_urlopen" + ) + + def _no_exec(*args, **kwargs): raise AssertionError( "a test reached os.execv, which would replace the test process with the " @@ -78,6 +85,11 @@ class DikteTest(unittest.TestCase): # with it and hang, so it fails loudly here instead. self.patch_attr(os, "execv", _no_exec) + # Every way out of here goes through urllib, so closing it is enough to + # keep the suite offline. A test that means to answer a request patches + # this again through fake_urlopen. + self.patch_attr(urllib.request, "urlopen", _no_network) + # ---- helpers --------------------------------------------------------- def path(self, *parts): diff --git a/tests/test_api.py b/tests/test_api.py index 30e7e3e..0a4e69c 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -10,6 +10,7 @@ import os import unittest import api +import ggml from tests.support import ( DikteTest, fake_urlopen, @@ -27,10 +28,18 @@ OPENROUTER = api.Target("openrouter", "OpenRouter", "sk-or-test", class TimestampModel(unittest.TestCase): def test_only_whisper_returns_segment_times(self): - self.assertEqual(api.timestamp_model("openai"), "whisper-1") + self.assertEqual(api.timestamp_model("openai", "gpt-4o-transcribe"), + "whisper-1") def test_openrouter_namespaces_the_id(self): - self.assertEqual(api.timestamp_model("openrouter"), "openai/whisper-1") + self.assertEqual(api.timestamp_model("openrouter", "openai/gpt-4o-transcribe"), + "openai/whisper-1") + + def test_the_local_server_stays_on_the_model_it_loaded(self): + # Asking it for whisper-1 would name a model it has never heard of, and + # it is running whisper whatever the file is called. + self.assertEqual(api.timestamp_model("local", "ggml-base.bin"), + "ggml-base.bin") class Explain(DikteTest): @@ -278,10 +287,15 @@ def chat_reply(content): return {"choices": [{"message": {"content": content}}]} +def openrouter(model="some/model", key="sk-or-test", reasoning="", + base_url="https://openrouter.ai/api/v1"): + return api.Target("openrouter", "OpenRouter", key, base_url, model, reasoning) + + class Cleanup(DikteTest): - def call(self, replies, **kwargs): + def call(self, replies, target=None, **kwargs): with fake_urlopen(replies) as calls: - result = api.cleanup("uh, hello", "sk-or-test", "some/model", + result = api.cleanup(target or openrouter(), "uh, hello", "you clean up text", **kwargs) return result, calls @@ -311,32 +325,34 @@ class Cleanup(DikteTest): self.assertNotIn("reasoning", sent_json(calls[0])) def test_an_effort_is_passed_on_and_the_thinking_left_out(self): - _, calls = self.call(chat_reply("Hello."), reasoning="high") + _, calls = self.call(chat_reply("Hello."), + target=openrouter(reasoning="high")) self.assertEqual(sent_json(calls[0])["reasoning"], {"effort": "high", "exclude": True}) def test_a_local_base_url(self): - _, calls = self.call(chat_reply("Hello."), base_url="http://localhost:1234/v1") + _, calls = self.call(chat_reply("Hello."), + target=openrouter(base_url="http://localhost:1234/v1")) self.assertEqual(calls[0].full_url, "http://localhost:1234/v1/chat/completions") def test_no_key(self): with self.assertRaises(api.ApiError): - api.cleanup("hello", "", "some/model", "prompt") + api.cleanup(openrouter(key=""), "hello", "prompt") def test_a_reply_with_no_choices_says_why(self): with fake_urlopen({"error": {"message": "model is offline"}}), \ self.assertRaises(api.ApiError) as caught: - api.cleanup("hello", "k", "m", "p") + api.cleanup(openrouter(), "hello", "p") self.assertIn("model is offline", str(caught.exception)) def test_an_empty_answer(self): with fake_urlopen(chat_reply(" ")), self.assertRaises(api.ApiError): - api.cleanup("hello", "k", "m", "p") + api.cleanup(openrouter(), "hello", "p") def test_a_rate_limit_is_explained(self): with fake_urlopen(http_error(429)), \ self.assertRaises(api.ApiError) as caught: - api.cleanup("hello", "k", "m", "p") + api.cleanup(openrouter(), "hello", "p") self.assertIn("OpenRouter", str(caught.exception)) @@ -435,3 +451,159 @@ class ModelLists(DikteTest): if __name__ == "__main__": unittest.main() + + +class FakeServer: + """A ggml.Server as far as api.py is concerned.""" + + def __init__(self, url="http://127.0.0.1:9999/v1", fails="", log=""): + self.url = url + self.fails = fails + self.log = log + self.starts = 0 + + def serve(self): + self.starts += 1 + if self.fails: + raise ggml.LocalError(self.fails) + return self.url + + def error(self): + return self.log + + +LOCAL = api.Target("local", "Local whisper", "", "", "ggml-base.bin") +LOCAL_LLM = api.Target("local-llm", "Local model", "", "", "gemma.gguf", "none") + + +class TranscribeHere(DikteTest): + def setUp(self): + super().setUp() + self.wav = str(self.path("clip.wav")) + os.makedirs(self.root, exist_ok=True) + with open(self.wav, "wb") as fh: + fh.write(b"RIFFfake") + self.server = FakeServer() + self.patch_attr(ggml, "whisper", self.server) + + def test_the_address_comes_from_the_server_it_starts(self): + with fake_urlopen({"text": "hello"}) as calls: + api.transcribe(LOCAL, self.wav) + self.assertEqual(self.server.starts, 1) + self.assertEqual(calls[0].full_url, + "http://127.0.0.1:9999/v1/audio/transcriptions") + + def test_nothing_local_is_authorised(self): + with fake_urlopen({"text": "hello"}) as calls: + api.transcribe(LOCAL, self.wav) + self.assertNotIn("Authorization", calls[0].headers) + + def test_a_server_that_will_not_start_is_the_error_shown(self): + self.patch_attr(ggml, "whisper", FakeServer(fails="no model downloaded")) + with self.assertRaises(api.ApiError) as caught: + api.transcribe(LOCAL, self.wav) + self.assertIn("no model downloaded", str(caught.exception)) + + def test_a_server_that_dies_mid_request_says_what_it_printed(self): + self.patch_attr(ggml, "whisper", FakeServer(log="out of memory")) + with fake_urlopen(url_error("connection reset")): + with self.assertRaises(api.ApiError) as caught: + api.transcribe(LOCAL, self.wav) + self.assertIn("out of memory", str(caught.exception)) + + def test_the_hint_reaches_whisper_as_its_initial_prompt(self): + with fake_urlopen({"text": "hi"}) as calls: + api.transcribe(LOCAL, self.wav, prompt="Dikte, Paraşüt") + self.assertEqual(multipart_fields(calls[0])["prompt"], "Dikte, Paraşüt") + + def test_a_word_broken_over_two_lines_is_put_back_together(self): + # whisper.cpp cuts on tokens and writes one segment per line, which in + # Turkish lands inside a word about as often as between two. + with fake_urlopen({"text": "Onlar akraba değ\niller. Ve\n devamı."}): + # The line break inside a word leaves nothing in its place; the + # one between two words is where whisper's own leading space is. + self.assertEqual(api.transcribe(LOCAL, self.wav), + "Onlar akraba değiller. Ve devamı.") + + def test_a_local_timeout_is_not_a_hosted_one(self): + # Nothing is being spent but time, and a long file on a machine without + # a graphics card takes a good deal of it. + with fake_urlopen({"text": "hi"}): + api.transcribe(LOCAL, self.wav, timeout=300) + self.assertGreaterEqual(api.LOCAL_TIMEOUT, 600) + + def test_segments_that_continue_a_word_are_merged(self): + reply = {"segments": [ + {"start": 0.0, "end": 1.0, "text": " Onlar akraba değ"}, + {"start": 1.0, "end": 1.4, "text": "iller."}, + {"start": 2.0, "end": 3.0, "text": " Başka bir cümle."}, + ]} + with fake_urlopen(reply): + out = api.transcribe_segments(LOCAL, self.wav) + self.assertEqual([text for _, _, text in out], + ["Onlar akraba değiller.", "Başka bir cümle."]) + self.assertEqual(out[0][1], 1.4) # the merged cue covers the whole word + + def test_the_loaded_model_is_the_one_asked_for_again(self): + with fake_urlopen({"segments": [{"start": 0, "end": 1, "text": " hi"}]}) as calls: + api.transcribe_segments(LOCAL, self.wav) + self.assertEqual(multipart_fields(calls[0])["model"], "ggml-base.bin") + + +class CleanupHere(DikteTest): + def setUp(self): + super().setUp() + self.server = FakeServer("http://127.0.0.1:8888/v1") + self.patch_attr(ggml, "llm", self.server) + + def test_it_goes_to_the_server_it_starts(self): + with fake_urlopen(chat_reply("Hello.")) as calls: + result = api.cleanup(LOCAL_LLM, "uh, hello", "clean it up") + self.assertEqual(result, "Hello.") + self.assertEqual(calls[0].full_url, + "http://127.0.0.1:8888/v1/chat/completions") + + def test_no_key_is_wanted_and_none_is_sent(self): + with fake_urlopen(chat_reply("Hello.")) as calls: + api.cleanup(LOCAL_LLM, "hello", "prompt") + self.assertNotIn("Authorization", calls[0].headers) + + def test_thinking_is_turned_off_in_the_words_llama_cpp_uses(self): + with fake_urlopen(chat_reply("Hello.")) as calls: + api.cleanup(LOCAL_LLM, "hello", "prompt") + self.assertEqual(sent_json(calls[0])["chat_template_kwargs"], + {"enable_thinking": False}) + + def test_the_models_own_default_asks_for_nothing(self): + with fake_urlopen(chat_reply("Hello.")) as calls: + api.cleanup(LOCAL_LLM._replace(reasoning=""), "hello", "prompt") + self.assertNotIn("chat_template_kwargs", sent_json(calls[0])) + + def test_a_reply_that_was_all_thinking_names_the_setting_that_fixes_it(self): + reply = {"choices": [{"message": {"content": "", "reasoning": "hmm"}}]} + with fake_urlopen(reply), self.assertRaises(api.ApiError) as caught: + api.cleanup(LOCAL_LLM, "hello", "prompt") + self.assertIn("Thinking", str(caught.exception)) + + def test_a_reply_longer_than_the_transcript_is_cut_off(self): + # A small model will repeat the transcript until the context is full, + # and every one of those tokens is a second of somebody waiting. + with fake_urlopen(chat_reply("Hello.")) as calls: + api.cleanup(LOCAL_LLM, "x" * 4000, "prompt") + self.assertEqual(sent_json(calls[0])["max_tokens"], 4000) + + def test_a_short_dictation_still_gets_room_to_answer(self): + with fake_urlopen(chat_reply("Hello.")) as calls: + api.cleanup(LOCAL_LLM, "uh, hi", "prompt") + self.assertEqual(sent_json(calls[0])["max_tokens"], 512) + + def test_a_hosted_model_is_left_to_answer_at_length(self): + with fake_urlopen(chat_reply("Hello.")) as calls: + api.cleanup(openrouter(), "uh, hi", "prompt") + self.assertNotIn("max_tokens", sent_json(calls[0])) + + def test_a_server_that_will_not_start_is_the_error_shown(self): + self.patch_attr(ggml, "llm", FakeServer(fails="llama.cpp is not installed")) + with self.assertRaises(api.ApiError) as caught: + api.cleanup(LOCAL_LLM, "hello", "prompt") + self.assertIn("llama.cpp", str(caught.exception)) diff --git a/tests/test_config.py b/tests/test_config.py index 7120a0c..28e3218 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -13,6 +13,7 @@ from unittest import mock import api import config as cfg +import ggml import i18n from tests.support import DikteTest @@ -127,8 +128,17 @@ class Keys(DikteTest): class TranscribeTarget(DikteTest): - def test_openai_by_default(self): - target = self.config(openai_api_key="sk-test").transcribe_target() + def test_this_machine_by_default(self): + target = cfg.Config().transcribe_target() + self.assertEqual(target.provider, "local") + self.assertEqual(target.api_key, "") + # Empty on purpose: the server picks a port when it starts, and reading + # a setting must not be what starts it. + self.assertEqual(target.base_url, "") + + def test_openai_when_it_is_picked(self): + target = self.config(transcribe_provider="openai", + openai_api_key="sk-test").transcribe_target() self.assertEqual(target.provider, "openai") self.assertEqual(target.service, "OpenAI") self.assertEqual(target.api_key, "sk-test") @@ -146,7 +156,8 @@ class TranscribeTarget(DikteTest): self.assertEqual(target.model, "openai/whisper-1") def test_a_self_hosted_endpoint(self): - conf = self.config(openai_base_url="http://localhost:8080/v1") + conf = self.config(transcribe_provider="openai", + openai_base_url="http://localhost:8080/v1") self.assertEqual(conf.transcribe_target().base_url, "http://localhost:8080/v1") @@ -425,3 +436,73 @@ class Defaults(unittest.TestCase): if __name__ == "__main__": unittest.main() + + +class LocalTargets(DikteTest): + def test_cleanup_can_run_here_while_the_minutes_do_not(self): + # The two jobs are not the same size: a small model on this machine + # strips filler words perfectly well and will not write up an hour. + conf = self.config(cleanup_provider="local", local_llm_model="gemma.gguf") + self.assertEqual(conf.cleanup_target().provider, "local-llm") + self.assertEqual(conf.minutes_target().provider, "openrouter") + self.assertEqual(conf.minutes_target().model, cfg.DEFAULTS["meeting_model"]) + + def test_the_minutes_can_run_here_on_their_own(self): + conf = self.config(meeting_provider="local", local_llm_model="gemma.gguf") + self.assertEqual(conf.minutes_target().model, "gemma.gguf") + self.assertEqual(conf.cleanup_target().provider, "openrouter") + + def test_the_local_cleanup_target_carries_the_thinking_level(self): + conf = self.config(cleanup_provider="local", local_llm_model="gemma.gguf", + local_llm_reasoning="none") + target = conf.cleanup_target() + self.assertEqual(target.reasoning, "none") + self.assertEqual(target.api_key, "") + + def test_either_of_them_counts_as_using_the_local_model(self): + self.assertFalse(cfg.Config().uses_local_llm()) + self.assertTrue(self.config(cleanup_provider="local").uses_local_llm()) + self.assertTrue(self.config(meeting_provider="local").uses_local_llm()) + + +class ReadyToRun(DikteTest): + def setUp(self): + super().setUp() + self.patch_attr(ggml, "MODELS_DIR", self.path("models")) + + def install(self, name): + path = ggml.whisper_model_path(name) + path.parent.mkdir(parents=True, exist_ok=True) + path.write_bytes(b"model") + + def test_a_missing_program_is_not_ready(self): + with mock.patch("shutil.which", return_value=None): + self.install("ggml-base.bin") + conf = self.config(local_model="ggml-base.bin") + self.assertFalse(conf.transcribe_ready()) + + def test_a_missing_model_is_not_ready_either(self): + with mock.patch("shutil.which", return_value="/usr/bin/whisper-server"): + conf = self.config(local_model="ggml-base.bin") + self.assertFalse(conf.transcribe_ready()) + + def test_both_halves_in_place(self): + with mock.patch("shutil.which", return_value="/usr/bin/whisper-server"): + self.install("ggml-base.bin") + conf = self.config(local_model="ggml-base.bin") + self.assertTrue(conf.transcribe_ready()) + + def test_a_hosted_provider_is_ready_when_it_has_a_key(self): + conf = self.config(transcribe_provider="openai", openai_api_key="sk-test") + self.assertTrue(conf.transcribe_ready()) + + def test_the_settings_reach_the_servers(self): + conf = self.config(local_model="ggml-base.bin", local_threads=4, + local_gpu=False, local_llm_model="gemma.gguf", + local_llm_context=4096) + conf.apply_local() + self.addCleanup(ggml.whisper.configure, model="", threads=0, gpu=True) + self.assertEqual(ggml.whisper.settings()["model"], "ggml-base.bin") + self.assertEqual(ggml.whisper.settings()["threads"], 4) + self.assertFalse(ggml.whisper.settings()["gpu"]) + self.assertEqual(ggml.llm.settings()["context"], 4096) diff --git a/tests/test_filetranscribe.py b/tests/test_filetranscribe.py index def4f5c..5ed22d6 100644 --- a/tests/test_filetranscribe.py +++ b/tests/test_filetranscribe.py @@ -197,7 +197,7 @@ class Transcriber(DikteTest): def test_cleanup_is_told_it_is_writing_subtitles(self): _, _, _, cleanup_call = self.run_chain(cleanup=True) - prompt = cleanup_call.call_args.args[3] + prompt = cleanup_call.call_args.args[2] self.assertEqual(prompt, self.conf.cleanup_prompt(subtitles=True)) def test_timestamps_come_back_as_segments_and_as_stamped_lines(self): diff --git a/tests/test_ui.py b/tests/test_ui.py index a616e94..10fac61 100644 --- a/tests/test_ui.py +++ b/tests/test_ui.py @@ -41,8 +41,18 @@ CHANGED = { "transcribe_model": "whisper-1", "openrouter_transcribe_model": "openai/whisper-1", "cleanup_enabled": False, + "cleanup_provider": "local", "cleanup_model": "some/other-model", "cleanup_reasoning": "high", + "local_model": "ggml-small.bin", + "local_gpu": False, + "local_preload": False, + "local_threads": 6, + "local_llm_model": "gemma-3-4b-it-Q4_K_M.gguf", + "local_llm_repo": "ggml-org/gemma-4-E2B-it-GGUF", + "local_llm_gpu": False, + "local_llm_preload": True, + "local_llm_reasoning": "low", "cleanup_prompt": "Only fix the punctuation.", "file_cleanup_prompt": "Keep the stamps where they are.", "transcribe_prompt": "Paraşüt, OpenFrame", @@ -259,3 +269,53 @@ class Overlay(DikteTest): if __name__ == "__main__": unittest.main() + + +class LocalModels(DikteTest): + """The download boxes, without a network and without either program.""" + + def window(self, conf): + window = settings_ui.SettingsWindow(conf, "dikte toggle") + self.addCleanup(window.deleteLater) + self.addCleanup(window.close) + return window + + def test_it_opens_where_the_missing_model_is_fixed(self): + # Nothing can transcribe on a fresh install, which is why this window + # was opened at all. + window = self.window(cfg.Config()) + self.assertEqual(window.tabs.currentIndex(), window.api_tab_index) + + def test_it_opens_where_it_was_left_when_everything_works(self): + conf = self.config(transcribe_provider="openai", openai_api_key="sk-test") + self.assertEqual(self.window(conf).tabs.currentIndex(), 0) + + def test_a_model_that_is_not_here_yet_survives_a_save(self): + # The box is filled from what is on this disk, so a model that was + # deleted from underneath is not in the list. Dropping it on save would + # quietly empty the setting instead of asking for the download again. + conf = self.config(local_model="ggml-large-v3-turbo-q5_0.bin") + with mock.patch.object(QMessageBox, "information"): + self.window(conf)._save() + self.assertEqual(conf["local_model"], "ggml-large-v3-turbo-q5_0.bin") + + def test_nothing_is_fetched_for_a_window_nobody_opened(self): + # DikteTest closes the network, so a request would fail the test. The + # lists are asked for when the box is shown, not when it is built. + window = self.window(cfg.Config()) + self.assertTrue(window.local_whisper._pending) + + def test_the_hosted_boxes_go_away_when_the_work_happens_here(self): + window = self.window(self.config(transcribe_provider="openai")) + self.assertTrue(window.hosted_stt.isVisibleTo(window)) + self.assertFalse(window.local_whisper.isVisibleTo(window)) + window._select_data(window.transcribe_provider, "local") + self.assertFalse(window.hosted_stt.isVisibleTo(window)) + self.assertTrue(window.local_whisper.isVisibleTo(window)) + + def test_the_same_for_cleanup(self): + window = self.window(cfg.Config()) + self.assertTrue(window.hosted_cleanup.isVisibleTo(window)) + window._select_data(window.cleanup_provider, "local") + self.assertTrue(window.local_llm.isVisibleTo(window)) + self.assertFalse(window.hosted_cleanup.isVisibleTo(window)) diff --git a/tests/test_worker.py b/tests/test_worker.py index d128378..1617efb 100644 --- a/tests/test_worker.py +++ b/tests/test_worker.py @@ -234,7 +234,7 @@ class Chain(DikteTest): self.assertEqual(row["raw"], "uh, book it for Thursday") self.assertEqual(row["text"], "Book it for Thursday.") self.assertEqual(row["duration"], 2.0) - self.assertEqual(row["model"], self.conf["transcribe_model"]) + self.assertEqual(row["model"], self.conf.transcribe_target().model) self.assertEqual(row["mode"], "") def test_a_command_is_recorded_as_one(self): diff --git a/worker.py b/worker.py index ba27107..69871ab 100644 --- a/worker.py +++ b/worker.py @@ -106,20 +106,14 @@ class Pipeline(QObject): text = raw warning = "" + cleaner = conf.cleanup_target() # Claude reads through “eee” and “hani” without help, so a dictation # on its way there is normally sent as it was heard, one API call and # a second or two lighter. if (conf["assistant_cleanup"] if ask else conf["cleanup_enabled"]): self.stage.emit(t("Cleaning up…")) try: - text = api.cleanup( - raw, - conf.openrouter_key(), - conf["cleanup_model"], - conf.cleanup_prompt(), - reasoning=conf["cleanup_reasoning"], - base_url=conf["openrouter_base_url"], - ) + text = api.cleanup(cleaner, raw, conf.cleanup_prompt()) except api.ApiError as exc: # Keep the transcript, but never let the failure pass unseen: # a rejected key would otherwise look like working dictation. @@ -159,7 +153,7 @@ class Pipeline(QObject): "duration": round(duration, 1), "elapsed": round(time.monotonic() - started, 1), "model": target.model, - "cleanup_model": conf["cleanup_model"] if conf["cleanup_enabled"] else "", + "cleanup_model": cleaner.model if conf["cleanup_enabled"] else "", "cleanup_error": warning, "mode": "ask" if ask else "", "question": question, From 634b46fcb0e1044f5b7fa24477a04613e9debf7d Mon Sep 17 00:00:00 2001 From: yusufipk Date: Sat, 1 Aug 2026 20:09:00 +0300 Subject: [PATCH 08/13] Take the process with a start that goes wrong _wait_ready can raise rather than return, and the process it was waiting on is ours with nothing else holding a reference to it. Leaving it running leaks a loaded model with nobody left to ask it anything, which is the whole failure this class is careful about everywhere else. Found by two stand-in servers still running after a test run. --- ggml.py | 42 ++++++++++++++++++++++++++++++++---------- tests/test_ggml.py | 16 ++++++++++++++++ 2 files changed, 48 insertions(+), 10 deletions(-) diff --git a/ggml.py b/ggml.py index 1ea8d66..04e46f8 100644 --- a/ggml.py +++ b/ggml.py @@ -577,7 +577,18 @@ class Server: # Written before it is ready rather than after, so that a kill # during the model load leaves something for the sweep to find. self._remember(proc.pid) - if self._wait_ready(proc, port): + try: + ready = self._wait_ready(proc, port) + except BaseException: + # Whatever went wrong while waiting, the process is ours and + # nothing else is left holding a reference to it. Leaving it + # running would leak a loaded model with nobody to ask it + # anything, which is the whole failure this class is careful + # about elsewhere. + self._kill(proc) + self._forget() + raise + if ready: return proc, port, str(log) last = _tail(log) self._forget() @@ -600,21 +611,32 @@ class Server: if not self.program.health or _healthy(port, self.program.health): return True time.sleep(0.1) - proc.kill() - proc.wait(timeout=5) + self._kill(proc) return False + @staticmethod + def _kill(proc, gently=False): + """Stop a process of ours, and wait for it rather than assume.""" + if proc is None or proc.poll() is not None: + return + if gently: + proc.terminate() + try: + proc.wait(timeout=5) + return + except subprocess.TimeoutExpired: + pass + proc.kill() + try: + proc.wait(timeout=5) + except subprocess.TimeoutExpired: + pass + def stop(self): with self._lock: proc, self._proc = self._proc, None self._port, self._log, self._key = 0, "", None - if proc is not None and proc.poll() is None: - proc.terminate() - try: - proc.wait(timeout=5) - except subprocess.TimeoutExpired: - proc.kill() - proc.wait(timeout=5) + self._kill(proc, gently=True) if proc is not None: self._forget() diff --git a/tests/test_ggml.py b/tests/test_ggml.py index ea2af74..48eff50 100644 --- a/tests/test_ggml.py +++ b/tests/test_ggml.py @@ -509,6 +509,22 @@ class Servers(Local): def test_no_pid_file_is_nothing_to_sweep(self): self.assertFalse(self.server().sweep()) + def test_a_start_that_goes_wrong_takes_its_process_with_it(self): + started = [] + + def explode(inner, proc, port): + started.append(proc) + raise RuntimeError("something in the wait went wrong") + + self.patch_attr(ggml.Server, "_wait_ready", explode) + server = self.server() + with self.assertRaises(RuntimeError): + server.serve() + # Nothing else holds a reference to it, so leaving it running would leak + # a loaded model with nobody left to ask it anything. + self.assertIsNotNone(started[0].poll()) + self.assertFalse(server.sweep()) # and the pid file went with it + class Arguments(Local): """What the two command lines say, since neither program is here to say it.""" From f3573908d0fbc1c46b245db64791831bfd500a75 Mon Sep 17 00:00:00 2001 From: yusufipk Date: Sat, 1 Aug 2026 20:14:50 +0300 Subject: [PATCH 09/13] Count a model bigger than two gigabytes upwards Qt's int is C++'s 32-bit one, so the progress of a 2.3 GB download arrived at the other end of the signal as -1805209440, which is the real figure less 2^32. The file was landing correctly; only the line under it was wrong, reading "1.0 MB of -1805209440 B (-1%)". --- settings_ui.py | 4 +++- tests/test_ui.py | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/settings_ui.py b/settings_ui.py index c70ed66..7033a8e 100644 --- a/settings_ui.py +++ b/settings_ui.py @@ -119,7 +119,9 @@ class LocalModelBox(QGroupBox): _listed = pyqtSignal(list, str) _quants = pyqtSignal(list, str) - _progress = pyqtSignal(int, int) + # qint64 rather than int, which is C++'s 32-bit one: a 2.3 GB model is more + # than fits in it, and the count comes out the far side negative. + _progress = pyqtSignal("qint64", "qint64") _finished = pyqtSignal(str, str) _installed = pyqtSignal(str, str) diff --git a/tests/test_ui.py b/tests/test_ui.py index 10fac61..1f1a179 100644 --- a/tests/test_ui.py +++ b/tests/test_ui.py @@ -305,6 +305,16 @@ class LocalModels(DikteTest): window = self.window(cfg.Config()) self.assertTrue(window.local_whisper._pending) + def test_a_model_bigger_than_two_gigabytes_counts_up_rather_than_down(self): + # Qt's int is C++'s 32-bit one, and a 2.3 GB model is more than fits in + # it: the count came out the far side negative, at "-1%". + box = self.window(cfg.Config()).local_llm + box._downloading = True + box._report(1_048_576, 2_489_757_856) + _app.processEvents() + self.assertIn("2.3 GB", box.status.text()) + self.assertNotIn("-", box.status.text()) + def test_the_hosted_boxes_go_away_when_the_work_happens_here(self): window = self.window(self.config(transcribe_provider="openai")) self.assertTrue(window.hosted_stt.isVisibleTo(window)) From 593d307ecc8b55bda567300839ef7fc670a8a1a4 Mon Sep 17 00:00:00 2001 From: yusufipk Date: Sat, 1 Aug 2026 20:16:38 +0300 Subject: [PATCH 10/13] Show a model name whole in the list it is chosen from A combo box hands its own width to the list under it and elides whatever does not fit, in the middle of the word: "ggml-org/Qwen....7B-Base-GGUF" is not something anybody can choose between. The list is now as wide as its longest row while the box stays the width the form gave it. --- settings_ui.py | 20 ++++++++++++++++++++ tests/test_ui.py | 12 ++++++++++++ 2 files changed, 32 insertions(+) diff --git a/settings_ui.py b/settings_ui.py index 7033a8e..1ed8d0a 100644 --- a/settings_ui.py +++ b/settings_ui.py @@ -175,6 +175,23 @@ class LocalModelBox(QGroupBox): self._finished.connect(self._on_finished) self._installed.connect(self._on_installed) + @staticmethod + def _fit_popup(combo): + """Let the list that drops down be as wide as its longest row. + + A combo box hands its own width to the list under it and elides + whatever does not fit, which lands in the middle of the name: + `ggml-org/Qwen....7B-Base-GGUF` is not a model anybody can choose + between. The box itself stays the width the form gave it. + """ + view = combo.view() + view.setTextElideMode(Qt.TextElideMode.ElideNone) + metrics = combo.fontMetrics() + widest = max((metrics.horizontalAdvance(combo.itemText(row)) + for row in range(combo.count())), default=0) + # Room for the frame and for a scroll bar, which a long list will have. + view.setMinimumWidth(widest + view.verticalScrollBar().sizeHint().width() + 24) + @staticmethod def _side_by_side(*widgets): layout = QHBoxLayout() @@ -209,6 +226,7 @@ class LocalModelBox(QGroupBox): self.repo.addItems(list(ggml.SUGGESTED_LLM)) self.repo.setCurrentText(repo or ggml.SUGGESTED_LLM[0]) self.repo.blockSignals(False) + self._fit_popup(self.repo) self._fill_models([]) def showEvent(self, event): @@ -274,6 +292,7 @@ class LocalModelBox(QGroupBox): self.repo.addItems(found) self.repo.setCurrentText(current) self.repo.blockSignals(False) + self._fit_popup(self.repo) return self._fill_models(found) @@ -302,6 +321,7 @@ class LocalModelBox(QGroupBox): index = self.model.findData(wanted) self.model.setCurrentIndex(max(index, 0)) self.model.blockSignals(False) + self._fit_popup(self.model) self._wanted = "" self._model_changed() diff --git a/tests/test_ui.py b/tests/test_ui.py index 1f1a179..b2aa933 100644 --- a/tests/test_ui.py +++ b/tests/test_ui.py @@ -315,6 +315,18 @@ class LocalModels(DikteTest): self.assertIn("2.3 GB", box.status.text()) self.assertNotIn("-", box.status.text()) + def test_a_long_model_name_is_not_cut_in_half(self): + # The list under a combo box takes the box's width and elides what does + # not fit, in the middle: "ggml-org/Qwen....7B-Base-GGUF". + box = self.window(cfg.Config()).local_llm + box.repo.addItem("ggml-org/a-model-with-a-name-that-runs-on-and-on-GGUF") + box._fit_popup(box.repo) + view = box.repo.view() + self.assertEqual(view.textElideMode(), settings_ui.Qt.TextElideMode.ElideNone) + widest = max(box.repo.fontMetrics().horizontalAdvance(box.repo.itemText(row)) + for row in range(box.repo.count())) + self.assertGreaterEqual(view.minimumWidth(), widest) + def test_the_hosted_boxes_go_away_when_the_work_happens_here(self): window = self.window(self.config(transcribe_provider="openai")) self.assertTrue(window.hosted_stt.isVisibleTo(window)) From 97396d4734e02ef6818a82a3696860ad7bf31bfe Mon Sep 17 00:00:00 2001 From: yusufipk Date: Sat, 1 Aug 2026 20:42:47 +0300 Subject: [PATCH 11/13] Refuse a download that was published without a checksum The hash was checked when there was one and skipped when there was not, which is the wrong way round: everything fetched here is either run or parsed by something written in C++, and the case with no hash is the one where that matters most and says least. Not hypothetical. GitHub publishes a digest for whisper.cpp v1.9.1 and for llama.cpp today, and publishes none for whisper.cpp v1.8.0 and older, so anything reaching for an older tag would have installed an executable nobody checked. --- ggml.py | 12 +++++- tests/test_ggml.py | 94 +++++++++++++++++++++++++++++++++++++++------- 2 files changed, 91 insertions(+), 15 deletions(-) diff --git a/ggml.py b/ggml.py index 04e46f8..d8778b5 100644 --- a/ggml.py +++ b/ggml.py @@ -117,7 +117,7 @@ def human_size(count): # --- fetching ------------------------------------------------------------- -def download(item, target, on_progress=None, should_stop=None): +def download(item, target, on_progress=None, should_stop=None, require_hash=True): """Fetch one hub.Item to `target`. True when it landed, False when stopped. The bytes go to a `.part` that is renamed only after both the length and the @@ -125,8 +125,18 @@ def download(item, target, on_progress=None, should_stop=None): there looking installed and fail much later, inside a server, as a corrupt model; a file that is the right length but the wrong content is worse, and this is a program as often as it is a model. + + A file whose index published no hash is refused rather than taken on trust. + Everything fetched here is either run or parsed by something written in C++, + and GitHub did not always publish a digest: a release old enough to predate + that would otherwise install unchecked, which is the one case where this + would matter most and say least. """ target = pathlib.Path(target) + if require_hash and not item.sha256: + raise LocalError(t("{name} is published without a checksum, so there is " + "no way to tell what arrived. Nothing was installed.", + name=item.name)) part = target.with_name(target.name + ".part") try: target.parent.mkdir(parents=True, exist_ok=True) diff --git a/tests/test_ggml.py b/tests/test_ggml.py index 48eff50..548d4c3 100644 --- a/tests/test_ggml.py +++ b/tests/test_ggml.py @@ -119,12 +119,23 @@ class Download(Local): ggml.download(item("m.bin", data), target) self.assertFalse(target.exists()) - def test_a_file_with_no_published_checksum_is_still_taken(self): - data = b"a README, say" - target = self.path("data", "models", "readme") + def test_a_file_with_no_published_checksum_is_refused(self): + # Everything fetched here is run or parsed by something written in C++, + # and GitHub did not always publish a digest. + data = b"a program, say" + target = self.path("data", "models", "m.bin") with fake_urlopen(body(data)): - self.assertTrue(ggml.download(item("readme", data, sha=False), target)) - self.assertTrue(target.exists()) + with self.assertRaises(ggml.LocalError) as caught: + ggml.download(item("m.bin", data, sha=False), target) + self.assertIn("checksum", str(caught.exception)) + self.assertFalse(target.exists()) + + def test_nothing_is_asked_for_before_it_is_refused(self): + # The refusal is not worth a gigabyte of somebody's bandwidth first. + with fake_urlopen(body(b"never read")) as calls: + with self.assertRaises(ggml.LocalError): + ggml.download(item("m.bin", b"x", sha=False), self.path("m.bin")) + self.assertEqual(calls, []) def test_stopping_leaves_nothing_behind(self): data = b"x" * (ggml.DOWNLOAD_CHUNK * 3) @@ -163,21 +174,26 @@ class Download(Local): class InstallProgram(Local): - def release(self, *names): - return {"tag_name": "v1.9.1", "assets": [ - {"name": name, "browser_download_url": f"https://example.invalid/{name}", - "size": 10, "digest": ""} for name in names]} - - def archive(self): - return tarball({ + def setUp(self): + super().setUp() + # Built once, because the release listing has to publish its checksum + # and a tarball is not the same bytes twice. + self.archive = tarball({ "whisper-bin-ubuntu-x64/whisper-server": b"#!/bin/sh\nexit 0\n", "whisper-bin-ubuntu-x64/libwhisper.so": b"not really a library", }) + def release(self, *names, archive=None): + digest = hashlib.sha256(self.archive if archive is None else archive) + return {"tag_name": "v1.9.1", "assets": [ + {"name": name, "browser_download_url": f"https://example.invalid/{name}", + "size": 10, "digest": "sha256:" + digest.hexdigest()} + for name in names]} + def install(self, *names, archive=None): self.patch_attr(ggml, "_arch", lambda: "x64") - with serving(self.release(*names), - self.archive() if archive is None else archive) as calls: + blob = self.archive if archive is None else archive + with serving(self.release(*names, archive=blob), blob) as calls: path = ggml.install_program(ggml.WHISPER) return path, [call.args[0].full_url for call in calls.call_args_list] @@ -229,6 +245,55 @@ class InstallProgram(Local): self.install("whisper-bin-ubuntu-x64.tar.gz", archive=empty) self.assertIn("whisper-server", str(caught.exception)) + + def test_a_release_without_a_published_checksum_is_refused(self): + # GitHub did not always publish one, and whisper.cpp v1.8.0 and older + # still have none. + self.patch_attr(ggml, "_arch", lambda: "x64") + listing = {"tag_name": "v1.8.0", "assets": [ + {"name": "whisper-bin-ubuntu-x64.tar.gz", + "browser_download_url": "https://example.invalid/w.tar.gz", + "size": 10}]} + with serving(listing, self.archive): + with self.assertRaises(ggml.LocalError) as caught: + ggml.install_program(ggml.WHISPER) + self.assertIn("checksum", str(caught.exception)) + self.assertEqual(ggml.installed_program(ggml.WHISPER), "") + + def test_an_archive_that_is_not_what_was_promised_installs_nothing(self): + listing = self.release("whisper-bin-ubuntu-x64.tar.gz") + other = tarball({"whisper-bin-ubuntu-x64/whisper-server": b"#!/bin/sh\nrm -rf\n"}) + self.patch_attr(ggml, "_arch", lambda: "x64") + with serving(listing, other): + with self.assertRaises(ggml.LocalError) as caught: + ggml.install_program(ggml.WHISPER) + self.assertIn("checksum", str(caught.exception)) + self.assertEqual(ggml.installed_program(ggml.WHISPER), "") + + def test_an_archive_cannot_write_outside_the_directory_it_is_opened_in(self): + # An archive is not a trusted thing to unpack: a member named ../../ is + # how one writes over a file it was never given. + escape = tarball({"../../../escaped": b"should not land"}) + path = self.path("data", "bin", "whisper", "v1.9.1") + with self.assertRaises(ggml.LocalError): + self.install("whisper-bin-ubuntu-x64.tar.gz", archive=escape) + self.assertFalse(self.path("escaped").exists()) + self.assertFalse((path.parent.parent / "escaped").exists()) + + def test_a_symlink_out_of_the_directory_does_not_survive_either(self): + buf = io.BytesIO() + with tarfile.open(fileobj=buf, mode="w:gz") as tar: + info = tarfile.TarInfo("whisper-bin-ubuntu-x64/whisper-server") + info.type, info.linkname = tarfile.SYMTYPE, "/etc/passwd" + tar.addfile(info) + with self.assertRaises(ggml.LocalError): + self.install("whisper-bin-ubuntu-x64.tar.gz", archive=buf.getvalue()) + + def test_everything_is_asked_for_over_tls(self): + for url in (hub.GITHUB_API, hub.HF_API, hub.HF_FILES): + with self.subTest(url=url): + self.assertTrue(url.startswith("https://")) + def test_llama_takes_the_vulkan_build_when_there_is_a_loader(self): self.patch_attr(ggml, "_arch", lambda: "x64") self.patch_attr(ggml, "_has_vulkan", lambda: True) @@ -596,3 +661,4 @@ class Sizes(DikteTest): self.assertEqual(ggml.human_size(512), "512 B") self.assertEqual(ggml.human_size(574041195), "547.4 MB") self.assertEqual(ggml.human_size(3_095_033_483), "2.9 GB") + From fc333fcb8cafa21b46914fa31115434a22719ec3 Mon Sep 17 00:00:00 2001 From: yusufipk Date: Sat, 1 Aug 2026 21:05:46 +0300 Subject: [PATCH 12/13] Reshoot every tab, and put the local models first The settings window has four tabs it did not have when these were taken: Agent, Meeting, Minutes and Shortcuts. Replace the four screenshots with seven, at the same size and lossless as before. History goes without a replacement rather than showing an old tab bar beside the new ones. Running here is what the program does by default, and it was buried in a paragraph under Install. Make it the first thing the feature list says, and cut that paragraph back so the two do not repeat each other. --- README.md | 27 ++++++++++++++++----------- README.tr.md | 17 +++++++++++------ docs/settings-agent.webp | Bin 0 -> 94354 bytes docs/settings-api.webp | Bin 62878 -> 72508 bytes docs/settings-audio-file.webp | Bin 69184 -> 48868 bytes docs/settings-cleanup.webp | Bin 101232 -> 119222 bytes docs/settings-general.webp | Bin 72662 -> 71384 bytes docs/settings-history.webp | Bin 67378 -> 0 bytes docs/settings-meeting.webp | Bin 0 -> 84922 bytes docs/settings-shortcuts.webp | Bin 0 -> 59854 bytes 10 files changed, 27 insertions(+), 17 deletions(-) create mode 100644 docs/settings-agent.webp delete mode 100644 docs/settings-history.webp create mode 100644 docs/settings-meeting.webp create mode 100644 docs/settings-shortcuts.webp diff --git a/README.md b/README.md index 7f45e4d..29ce1b4 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,8 @@ just the Python standard library and PyQt6. | | | |---|---| | API and models | Cleanup rules | -| Audio file | History | +| Agent | Meeting | +| Audio file | Shortcuts | ## Install @@ -42,16 +43,14 @@ puts all of that back, keeping the keys you chose; `./uninstall.sh` takes it awa again and leaves your settings and dictations alone unless you pass `--purge`. Speech to text and cleanup each pick a provider in the settings window, and both -can run here, on whisper.cpp and llama.cpp: the program and the model are -downloaded from that window, checksummed, so nothing has to be installed first -and nothing leaves the machine. Otherwise speech to text runs on **OpenAI**, -**Groq** or **OpenRouter** (`gpt-4o-transcribe` by default) and cleanup on -OpenRouter (`google/gemini-3.5-flash-lite`) or, when either is installed, on -Claude Code or Codex. The keys fall back to `OPENAI_API_KEY`, `GROQ_API_KEY` and -`OPENROUTER_API_KEY`, and are -stored in `~/.config/dikte/config.json`, mode 600. Cleanup can be switched off, -in which case the raw transcript is pasted, and a thinking model's effort can be -set next to it. +run here by default, on models of your own. The cloud is the other option: +speech to text on **OpenAI**, **Groq** or **OpenRouter** (`gpt-4o-transcribe`), +cleanup on OpenRouter (`google/gemini-3.5-flash-lite`) or, when either is +installed, on Claude Code or Codex. The keys fall back to `OPENAI_API_KEY`, +`GROQ_API_KEY` and `OPENROUTER_API_KEY`, and are stored in +`~/.config/dikte/config.json`, mode 600. Cleanup can be switched off, in which +case the raw transcript is pasted, and a thinking model's effort can be set next +to it. ## Using it @@ -81,6 +80,12 @@ running. ## What it does +- **It all runs on this machine by default.** Speech to text on whisper.cpp and + cleanup on llama.cpp, neither installed beforehand: the settings window fetches + the program and the model, verifies the sha256 and refuses a download published + without one, then keeps a server alive while you dictate. The graphics card is + reached through CUDA, ROCm or Vulkan where the build allows. No key, no + account, nothing leaving the machine. - **Silence never reaches the API.** Handed near-silence, a transcription model invents a sentence instead of returning nothing ("Thanks for watching", or in Turkish "Altyazı M.K."). A recording is dropped when nothing rose 10 dB above diff --git a/README.tr.md b/README.tr.md index f60087b..38c4639 100644 --- a/README.tr.md +++ b/README.tr.md @@ -16,7 +16,8 @@ sadece Python standart kütüphanesi ve PyQt6. | | | |---|---| | API ve modeller | Temizleme kuralları | -| Ses dosyası | Geçmiş | +| Ajan | Toplantı | +| Ses dosyası | Kısayollar | ## Kurulum @@ -42,11 +43,9 @@ son sürümü çeker ve bunları senin seçtiğin tuşlarla yerine koyar; diktelerine dokunmaz. Sesi yazıya çevirme ve temizleme, ayarlar penceresinde ayrı ayrı sağlayıcı -seçer; ikisi de burada çalışabilir, whisper.cpp ve llama.cpp üzerinde: program da -model de o pencereden, sha256 doğrulamasıyla indirilir, yani önceden hiçbir şey -kurman gerekmez ve makineden hiçbir şey çıkmaz. Bulutu seçersen sesi yazıya -çevirme **OpenAI**, **Groq** ya da **OpenRouter**'da (varsayılan -`gpt-4o-transcribe`), temizleme OpenRouter'da +seçer; ikisi de varsayılan olarak burada, kendi modellerinle çalışır. Bulutu +seçersen sesi yazıya çevirme **OpenAI**, **Groq** ya da **OpenRouter**'da +(varsayılan `gpt-4o-transcribe`), temizleme OpenRouter'da (`google/gemini-3.5-flash-lite`) ya da kuruluysa Claude Code veya Codex'te çalışır. Anahtarları boş bırakırsan `OPENAI_API_KEY`, `GROQ_API_KEY` ve `OPENROUTER_API_KEY` kullanılır; anahtarlar `~/.config/dikte/config.json` @@ -81,6 +80,12 @@ olmasını ister. ## Neler yapıyor +- **Her şey varsayılan olarak bu makinede çalışır.** Sesi yazıya çevirme + whisper.cpp, temizleme llama.cpp üzerinde; ikisini de önceden kurman gerekmez: + ayarlar penceresi programı ve modeli indirir, sha256'sını doğrular, + checksum'suz yayınlanmış bir indirmeyi reddeder, sen dikte ettikçe sunucuyu + ayakta tutar. Derleme destekliyorsa ekran kartına CUDA, ROCm ya da Vulkan + üzerinden ulaşılır. Anahtar yok, hesap yok, makineden çıkan bir şey yok. - **Sessizlik API'ye gitmez.** Sessize yakın bir ses verildiğinde model boş dize döndürmez, bir cümle uydurur ("Altyazı M.K.", "Thanks for watching"). *O kaydın kendi* gürültü tabanının 10 dB üstüne en az 0,3 saniye çıkan bir şey diff --git a/docs/settings-agent.webp b/docs/settings-agent.webp new file mode 100644 index 0000000000000000000000000000000000000000..d69365830c4104417f3a6c594f459fa4623c260f GIT binary patch literal 94354 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

@CTvJ$qdG7Y$eL5Ph31g_Q7?2W07<%v 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 Pe-_jH?-P+SANKzMUYI<$ literal 0 HcmV?d00001 diff --git a/docs/settings-api.webp b/docs/settings-api.webp index afcf3e0e9c2e24b041813d9ad58400d1923d1c17..142a4359d951e2d569dedfab31fb7402399fc3f0 100644 GIT binary patch literal 72508 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%0DS)6ql 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�o4pQF|gU#kK=4 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 HC4#;Hcw3Yo literal 62878 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 Xig+bwyUQg*q5S@T>-qJl_6YtDzzBmO diff --git a/docs/settings-audio-file.webp b/docs/settings-audio-file.webp index 3b113f9169de359d5fde942352854b3fe87bffd1..f5d77f040af7e8408c64d4e879fe9a64aa438fb1 100644 GIT binary patch literal 48868 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%0A9Psb~7*wdDK=B>2Rm@upHzHw#w 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 literal 69184 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
4?vfNA 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

-eqSA|5N!EBr^e?Mq4#`wIe-k{@dwTYn>TEC}$B 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 M`;Yy{{_7;@2A-{9sQ>@~ literal 101232 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 diff --git a/docs/settings-general.webp b/docs/settings-general.webp index 498ee8e3692ca701101ea254b05cfe760f481b39..18bcef7bbc635a1c4a3231eaeed493c6a1de6fde 100644 GIT binary patch literal 71384 zcmV*0KzYAXNk&G{76AZPMM6+kP&iD(76AY+!Uc2@RgWV{l7eWMY6a~7zZhhZ!&F-ipxVt)Oy z8Nh%dJm%t3E)Kh|m3ekXS(D4QbMMRsy=k^N=bm>q=gt@%5#iPRHP!(G*V0zaGc(&z zK#XFVUk)h{=p{D`fdH<{`(rgn@78O+OGpT~;>eu$F5424#56zcUDJWZ9g+kBF551j z=iE=7>(IoY*_W z(Api(bHMXFako;`>iryg*VbAo_25>{&m&{8(5e65aqL_O4%N%=Y1e7Jm2=KH=bUrS zId?v;vdtg|kbCcc^se+yem|Xk5C(*S3=l^Ks+>!g*$70y3^q^@kO8qk#+?Beh(Ne} zfr5@H?AcBXZX+P$Yyiu^Wt`Fg_AHJ8;sjxw4I(oT2$uq}K!(B#wJ`{RD+4eD0a*}J zyMCo=*Xo>Fmnsb)GH^SkTc0BUuw>gdUCsV~#Yqp6r*_!3ZS%}^TuG8_+Tprg&$jh# z6LKH`1e*zC+gXQWXoTde+P2%5-E%ETQWPbyr~|V<;DJ6;ifmi9RZagA=p&Nui*r{o zcX4P83L%I>=#zvH{HuB*5OV!%LDH3UgdpULetLfEN+QU%DchirbPj<)658C;F_0w5 zP@HYswtfHq)k)z$J9+Vv3kThF6ibK@nC4v|v4u&hFv%fIAT}@ht(D5@^Gvf)`;C@ht-@fbbTA zW(WfijsO4MDkO((+Xiybk#u+ej3P-=Bx(PQ$LHTpLSiFHk>tr#Ei)g!d0zmyTy7-i zzfgm_>bv(=m86nx-CI>ERjH&ZF_pmL5|)^mWl5GS$&zeI2Fa2w*&<68SY%m}ZOLNE zmc4?vlC`!QgE3W9p=R_>71?56EB3ByB~KuahREzdE(tCdJ6fR41{r#ep>WH@8mc% zCl1ro7g}a|3uA?&Fb;&7$sNXd3xfi)^Au*zLZAJ;gqfM+Ff;X}!^^u0^@N!jj)wsN zO}DnSZ8}Dgq_%CWI_}=jf3t18e)nFPak*-*GIdiVX{_lnriTFl7A4xY?Wh?ThL9Ao z6T55GwP@Vy=ic`z4R+V++KH_oT~qzX07;UdNRl)e{s-yqiL9c5uBPekxX4P@Qnmf- z|0z+v|8aN29d>RzcXz4atT_~L*FCes-F@rs{{6gO_w&5o@6S)p`FwG*kcAo)Ai=EJ z&x%SE`lp}*hX_*v`gjA@-hlP2amX-1XhesJLm6vF3@ZHhq+m%5+7N&xK{)K*S%{z+ zCctc|0ok@KLsCT9HL~p*+x}o{WOG*4w(X7=30t;p)6qVNZ98waZG5qlwr$(CyZTRo zf!w%}R0Hf2+}x3J?w@ZPY?8JrZU3^#(P4y{nVFfHnVFfHnVFfHnVFfHnVJ9Z|NXt+ z_Xgj$e&MK8eB!WGT1}#J4D$=BQ309QxMX}JwTq5RjZ1wM*(VVyqx*|rU9G=2VE|Ic&Z_xo|oh6(|c zBVbBIP)5L(h)5X`h)5X`h@eCS5J8Cu$`z0j0TB!W04y7A zGkdpflM-y(aogyIs1M)|*rf;Ie}G)tskZI?9LJ?QQ;22GIp-WUw2qa{B@i%}oO8~R z$^Uzv`+2{gLiGbMAf_~d?F2$V1ma&Bgg~fV5CdXMffyhHF#rrf6!x4cO<+5Lm}49| z=TAZ9f*2rM`51tJY-BK{5x5!<14JOSok0l5f|ynuRJ#_C1u>;T42XYe5CcM`K@13$ z0x=*Aq-}HmmcO+j|5vpsWvrmDuDiRtySux)ySuyVeeRPZ zscYn#xx3r*-19&G`!fI4Gebxfk6eHw5e(Z#Qsm>i z{#&I-iDBDFihNApf2Rx*14)t${dVoMjbE1|w{0W|x&({ew@y{2=L3GLZF?mv+qNuF ztxB}+(ltwK-PJX#T2$9E!Ng+R@Wkg?Qt&xTE^60>HqO(~)&)Jz zA~GNd!F`?Yc>=~0r}&iVqJn2ha#96jjn50vrN~Jb$r^MX{f^sk=MFqJ+b|i^7 z!XoB9Zi6dUNeY3IgOOP>Q{zN@A8K@JhP_8%JAg{g90s8$Wy)%3XZUs@FzVoskwYr% zWi)iYL)s(+P7}rkO0IIK6sO^*)!@+(>rl}KJ6-vv4F zLl1?p_;@hxS-8{EV3pR>!ymrH{6Fi zeN)SDriEYtgE2;8x=xc{+i+Ta>>cq(YimPOR=&w~?C5m)hgeHW2$nW@0wsjjOhtul zxP4pB6C6+QJf)9L9e%XzY^g|nYNN5$mf;Br!Q%u=pj6Xc?hP$HW7SDdx7Q!f`EzXH z1NuWV0xpTt)kE?u=R#T0SulSs;p1B0c|za`zO5>BQbD-`U4zDX?q0K%Vtp|oM4aG@ zlTv6h6&10po2IVjXP+kjQ)OFMtSKdgL=#MLQVosQ0m&2<@iW(|vA!?>-+q|CWK&cK znH>z(N~)Iwq!^N(u~w?WY}vT|B}kwNwnA(Y7jq>8MzSSzk>u*`l}b@e8w+i)jY}Tr zUpeb{Tl_)&Qd|fnMW}S)M@lJ2!Uci5Rz^8BMXq(q>6-&FO>J^)F)jWj2#qf^lSI>% zLODF9e(hpKHa0F!4ewPQcaE`ZOoH ztBD-)FBG%d(kd!ynpJwh9yN>y|RqP2wm?I*la4Ew&3U(5&5?tA& z;b9oBLPb2vtdbnqJT(6Lge`u;>ts`3>KM6Ah`5YM*ujZ1yq$zD;-PdQAk!QlL*k;{hX-?y@(3DFNA<`NmV+ETvlv)a18+bYz>}WbQi90=Y z)NZNr{`4#kkW5MA^d5$4bCGEC3*I;tjhyw%IluWzzGA;H#e~RN!9e|_+D0TD&2yxT z&T>=%4y2%Gj7k*!n!y0fkMK(#&n^BkwXwV>;hY~j2DgiPFo=RC)VoV)BT&T@5~?Pj zVJ0l<*)TG!wrv;L8DW zh06fHu`1(uO@rlXVksc*vW+J3hIx2y)#%h_&xST;gN}jiBFza=M~H?bEFe-h!8QU- z#7tqBx134aq;1IUw@fejz+E(Ss*n95%L&l}hSW`{ zi(nPG5a3ykD}0ON!7>C@s8*-i)T4`p!DP(gFR@**{pTjN!Hq~3PkAXHo#a!q5Zw{c z6Nb|YY9x4BpjFJ(MmgDChVfobQzA{LoyJsdcF9{N+x{1iYFl4WY8tcY#HRUbKI<2u zSBT+&7$d|)6YeKGAxN#nt_n1rx!Np8(zbED+*1{IyP*m}fhbvb0tueei`LauXUJ)r zUp)6jYVo46VY{C5V?OB>sa1$ML@YUCWd;8(;QxfwORSN=B|!^4W5anL=1c_K;VAoJ zq=wcsnv~4}-KCyNx^-n%tvo-ZTG{(z9;kWHeC4G7^sQUaF|1jXl0j@tA@mk%D9}fs zie3hsIpcGAnaEERd!AahsN4Ni-x5=y8#Prv7j$*7du%s`Jd)crZj+P#TN90S49^FB zLhLc(fC~RZP&a`q1Fh0rZJ?t!Ss(Q9HjP)of>cniKxQnK%A=EyJBKLrP=6n~Uz3TA zob}(2v2==m8y4ccMO<9ruK;f(aAANmo=LhVbe;ploTgCsOS&ya9u~El{G@*}vX3aA zPxZ2R?1RUN=5h9{_%AFh(9A|OGN=(>IK>a*Lfp5Ar;2z{!9R=muLJrBTo?F&N7CJW zcPk^eSSMv{l+zqk*z?DXB<1j=sh>~blSEb7?w(Han1>ABRdf25*yxns<}=hUD$yXm z8^li${$!|h7V08C;Q6!7=fz|SnaDrb_Qq^(28X4kK*x=2UB=|`0cDh(%It;YDWU_( z>HLCU`fZy3K#uQ3V>#Srhj&W#g60IpkUP{mA6zQfDowFPzhjEK~htzL_ z>1<4gzrT}ePrZeJwwI0QMJ-cLhKDRFM~IQ{r?OgPxqbTdTl~G+oXy^+>o<(xCHQ$h zc@7!F;ko3c_Idpb-e-&1>;u|+_ANoAB0O8f$zgzh9yi;{WTYIGB}_ye)eh%x15(ht1 zI|ZKe8?}Ia6Z+evFnjzTqr3Gy^Z4v-er<1$MR{Q&kbF0x67_f|UB=C{i1lbp5xxoi z138)9b#;7)yJjE2mTpZy4|PzqLn&d8i4sNJ%q5)LR&?frZD)Co|0%cFY*XA6XrYNkDcFyUv>WVrSM@hVx!q? zbJwZ8y8OUsM@W{_ViOodL2;&*g}$na#3+juSl)$LT5m%?7Qg8HH2f(1AbdA`D}6b< ziHzCSvCUl+w~aQ8=H&yQC-K7a-Br7OM(55BX4t>N@`DSd^*Qmw@cryUWvrN8x7q{IFI?TXEKbJ|&wT_C4%%*!{HYVW-3P zr)>{gopMf2HfQCYvIq1B?zN(z$wl|eY8YB6AAt4++LKqc#Z|HIyIsjFr&)r;Q$mm( zWJEDRbPyFp2JVvCZVo79FB4@fwvf8J*O?Wt&dyZ*u*)1JpxYy1>k121{+{S4G91Sx&x6<3GFqvEqbP3z2 zsgN42!EAq$wime1=#GEFThY0J^tO;K3I>%#pQ3`u)AXZrg2+WgaQ*de>UcLg(U|w- zH@lx-zcE~!`bJ|OWk{O+)hi-vX(S_As@tG(k1o#k(ML>hJ28h{bLDlNM}aOWUrkf8 z`vN(;$;D?%IDk<5Whhviy(BU5XY}3v_Fs`q1Z|A%1l#Sw;1f!wzwq#+tSD<0VT3Qj zqOgU#N;Gvl+>l#EIbSw=Lwx2Zs-G~l_`Io6TBsD!P%X>F%ug4&SW8ihN|dCh(~r%e ziquV4zV%k?q`*xoR&)F zdntN@O$_O8rSDAf68h$~482nxv{p5u0T0(q+%#v@p9%yPihOQ^j}U+P37p@_8*6GY zZtu&u72U?z&a80+qXBFEq-9ze%%hK(5_5LZY5g zZb6QVIU0p_dlJzjZHAAc22Ok!ouF|jBz>7n_*U);>Ud$!0CX(Vh9PyZIBMlr0i&%AMz_;J6vfZMS+%{LsVjuZf zw9#BDjvsBoFF3jjI@{rJ4XjvnkHb-_0He17Vzqb`$&1zy-arfNd2eML{8)g5dw+7z z%U8}54>Jt1VE>$7pQ?bPF-w@<~Xx*SR7Mg9Je{(hwmSk}W z5h1$#uT<_YwH8T*GrIVQki|twR`Q^*a7N>Q$<~Kl8Zq*6-RVWxUerdisEVfiu^8Sx z%w5b}SJ7UqszV>4UgNAFN#mq%Fmon8_U)NpFt?iW!4XI~7;wNb%p6DqhY+8N5i@79 zhC398(g_B1TWn#Talq*?$-}zT#c*RBI<>S!!a@DVvTQhO&C8x~ zz&SI>x-je1Uzw^TV1%Z?MFp`HU`Qsr)#jcp77(hq_@F4T78#Wl1WNNJTZ?p}7(HU~ z|Nk=zi_JOluo1=xVVI8Y+34P|b;a1B7<)gWLm*Y?CtG_ms4>!JU8bn6gTBO26}sBW zXXxP|4tm6WeWkpphO*pYl2yK~j3(+JB_B~Z=OufmS%M5{>lwZJ6QgQM17&VwQ@9ib zv8gZSV#KRg?t_XhjgP{zH~Q9e@y-j@Q&Fw@yjqZH8;R__Pj(ko%|Q`itcv zt0=c4p(KtxDkxD8@d#~Ql#FQW7oFO_-dMI5KOJ3wiJvKl1FCRTJfe~%JqEq{yAN9ICQbl?92RdTv zd=pa9_wcS{$+IE8k)(nlrTq4V9{FsnvJ$jLuc8-*{O}xI!C7b zll;#TrG`>tDemJJTkcoI=zHlz_XzMw)}gNl35U~0@>lxzTj=A|SukHrKLWH0ilNAM z(bp~Y6kROY7MdU%jjmuL+WG`;>vFH(I8rr}UBh*@Ajp$HwsY_|2-kQJ{x2!OtsjPv zTLUus8{|{k+@Ckud%(YAsPI#vAyO(cu`{*sJ1Z2D{#of``Huzu=|t67#lF*ZWV4AI zAyG4AgYSPe(VeOlYg|xNQkKn+L2(sf$7v@nCGk1mcF~;4K zuYUEey~Ufz{W;e1g8xsxCC>Nn6C2426q)&~kJ?{dqYm3^;aaJ3&Pc8O^tgYoLulc! z%$^ZxYmcgH+oR{`&2 zBidwLIM~4&2R(g#7%@fHPP%NZ%gxZ{+&I8G~Hecu}9T zl=Z0mZkC$K9Mo!!8JVV1ZKu{g8ae$&^Sv{Cbg11*@0k0Xh8+>vSLq|J_$_PVD+9j$ z6mz-r+eG~ZGd~!Sh<@^ewN&cl-$~TBTR?c}cY{5?tqjDbEb7;Gq9&6$L3|?nF&5!v zMr=g(r4LdRuX{*T?}xZ8Mzo`!8KmzHPFNe)sPM{-#0o1{8)*E+AId5ksr};mhlHMf zazt3t7y-RSnRYfNVF2;QCHBE6THgW%H58 zn-<{jfj@U&a19K00s|Ku=o+M2Ml{q_o=YZl3AVIcL&NiG^0@s71<7VuSC4<`EF*l0 z^gD!W9#Zg*9AX8?EAnAE<`BP;UIy0FEI&CSh59GC7kyxQ*oqGFWr1}yT6ddQeEpqq zuFdCYbwkC@vOFS7_?DF463Mv0BXa1H^1L=8%_5 z*g9x=c`AuXMVGHOeW{2hGmkIJf3Vnm>YAGqOt!jv};^gPSigvOs z7hinZ%O$rUpkVnT4?&bM3v|^rlP{D_&S+XYBni*yuPa&da`|5ZTLL>&4VO}>dp>r! z`K#Pz>yC?o3(W3UY6f+db~5FbYLt9?pq&05>CLBHPJx{&hC7=vJ2N{n+cH}yn^Q|h>}v7$POA~O`3Au~&&l7^vpB2>c{$HH`?g?THzX$tI? zY%NYURj1`x?A^G5Lh}g^T9O*NZ<6xi$7^M{EE12RJwm>D`AZ{g6Oe|er!zB~fYS2V`W z=vbdTS2In4eU3ekjIV;gYq2H00nS$e;g~dxi|l7SRC9ok&@Vzma#08C4O%;g-zTu& zxyQ6NF-8`+H_y`0g&aDO3br}s3m`pr=fpMUnhwP6-ykEDYa`t>3!`Iq5F4&w_}mh1AL!B0QOY#Vi%nOABv#< zaVGp8EAE1>ZEQbPYa(01$KsTrgshVcf(rABKnH{9?5mP70{7I5HQD&z-P6hUMMjmDkl_FtvIDGcwz)9qWu*L;9HlNy)9LgM;A^1R1A z*=l~$tzl*;W)-;tPS6hrWtK%u!#2am6WNv`D&L`Yx)~K=e1LI~VGxEr$!coSJs_~GAvLKS`f50*6ZCOMI&%Mj zDYnWCTUbj3-fq)yZ?FV;o2$*bJHcQO#XVUu*>M5*5UV5#)_i7QMJTJ^Bv?XHfAY-U z27?&%*>!8rK3p67xgH|E0&WOS*)*a3=yMnq#%{S56q0-&_jt)_8-{$~ggEw1fEvD0 zT&SXbhhR(4lQj#XxdhM@C{`xpeLLj(d}I2 zNi*;5o#v7>?;=vdJ!K{@ZEvH(~o-FyCs5A%NFo) z4W9HoP$hAm1;Yna5G&jdoW7a+Cf*+0k~M3JN@IsX8unO*clmg}^PwARNCB@A?mB1n zikNmbet9ecqM8gcxTox$KAK|2of_Q&-C%2qlh8j8+j9lZ*`~klRl{g{_9?g@zn&d4NkC z!}#VZd18dO$C_1)*9?z@(l$FCx_I!?J-(JU7ne{P6G^!9&O1j%@^lek!{HjK3rLX( zST*1HM9|B%DJJJ$S}O)SZckj@`0E~jOW)1GUt@wvMy4cUi8L#UoHMde^O$^!uA?>O zP}EAHYz~VC7D>b#Pz3Qq zokYE~N}SG{DR1!}o(*R|b>Pf=wHw`+bkN$&`BQsmO&y#$wKx8jjwiRSr?>D6x*QO} zB#}sxLk7}u6UuRcp#&zV2(LClR8jEKCGg%8#2gtG5Gu?P+6;1XHvQL%YLps}%d9kr zOU5%VK?M^=N3zJk5Iq3ylC|ApsMP-1RrAMmb(IC@ggWMlXT4c`pFv*E#)&1P@tG$P z;w)2FG+|_wES*m5&T4qUarK%JcpbR%Q{*-#WcjfiG#0QTIz(+&0m`vh)EKYDL7d(o zUV;cFj8u|LKJnfSy9dk*-E^uwP)J_<@UmIpo@EuQCp@2tm^5mmBE?hDZ;_6n}f;;xrTSsP4)Jx9eRumfD(L_T4O4D^c#q2mS}7ZB>G&|0I$ z0xuO5q~zQhU5sV%nKcGQ+@qPe6NZEeRp8rYVp?mu%vi1`Z~{~f9g94HkMHR0SR==M zwU-7sdKGTW^WrhG0-0Po;^BkI2CNMh^%SuWvM&(V-ElRnNYq7MWVs z(_f=_q3rmf1%eS$-H$)Tx?}qm7!C_cVPxFctFnN*a`L@WJ_Pw{(`@w57b`s^;r0#aoU z$3}@+S&WeK#c4!VXCx7xAH2Iq{m-uNa+mQDx1TPNY6g3Pr9DOn;u9z0jXpe{<> z0&OU9D{|dEE?9H=a?cGXCH0F-iXeajadEM-IM|r3Yks#g6~a=EBM%ve$Jl%XhE2)> zk`lY~3t6f4`^cGI)N^Zz3uVBMXNcztc8+ZIZT^*qfdr0XBxA#$9Ev zWGYSxm;R6%G3~RgK&Dna^oQa2Ca$0biV?CMdvDd*?z6zL=~%P+$}i2s6IDKCd5{d( z;>GEjOoz(1)GeR8tTh?&zCP;`NCM!>QNPZVO$=u%HkPRU$2?d~1DKI!Km$l%-LI zbi?D$^4J=6bdBKF`q{Rzr)`g?L2>_5G|2{>b|Cp4+rJIE=r zcl~kZG5OpA7IACbriFBO#{J7Tt|h{t5_be3sosWWU)3@)2qAN04f(#L*k6!OFKS5! z1*(n`EPby>2+1o>9?qVISAZ6&qHb$6hjq z8H8`@4s9}}?fEYT8@2qkRHHCoY-AjZzQ(nBsIJTlBrN6QVzQNYkhy{g>VhNP>&)W+R zo>?F`+}yrD$me1tK;myX+$TmdW+CL=^-^ijf7)+pM3STsyQcVC7Ft$fja0%4A=Mop z9A+fRSC>3d&kf+2DU33xBnwpSJ1r+o!!0`4rEsq7k&L1gIy>A5Nd}+8des|rMA--comKiJ7)V5o7&;(a0r|syUkYumZt1h(^mT5P9 zspI#cSwQtk zKj#d@LptZBByEt`r$@Z^YG}0Fd+IaABZsYIiB{ zUe;sDXQ@QSF=8QX-_Pe}#7d>r2p5ngpk9jJ#mxR z(ZKHsB*Iopf>AR5_Uhk1pKG`xZGSBS*7JP1G3-Kzo>L^KT9-ioZ1TH+`qg)@WV5*${FN{_TAza+X;WTS9|wxrF>Fgay0i8`;q zQCQf~!sjC8r(6qK-;JuVLq0_}SPU>o3z8oo1Q>x0u$USAzU6Z#Y5GOXP zaDu!gi6Y}=b-7qsPNJkW6nB9LNtq_2_L887I-^j4c;7Dl0R`ZNwIg9hpN}J%6?to| zAW1tCX0>@ZDvP2ROULoVX7pJLaxW;R&}In|^4PH2EIGzY=G_drO~pe?49kOJGF4d$ ztd}e%(_}0N3>AyjW+}+?1DJ&@+i6QivVh7C-US8-eI|p7N+5v^Vn?E^HXlo}Q$<@{ z1-*oUDjqTD)J%~H*JpVPo$brILXk86gc0X6N|Mtw@KQrVdb~oq!3ll zD?bp^Xmbh*uwaWzvd`;tm1J3!DN8L3 zkEXw&old&=Yy7R9D`Ng=A!G?;GKl?q#V}=aU%1#hYQ9N>rZ^2@}QivA$P^|`ru+y zT-fk2t+Y+ek;q&2)xUt)rKy!0+7o9FNAHetK1wGE#U(k^;+0}DiVqj)(GD#ubCP*W z3P~1FR%+i)C8Z-4SK=e+K|P8q!o{l2ci^SIg@&%9q5cVf?WSfS3tUY&Fw}qhCUC4d zHogRHDITEB>vNUpTtrE0EMC>YV}EAP6<7!W3&ekH% zYhsa3=DoW%Quzf+Fl~Z`)6*pypARy{J zL?KqS_s{$!#a7NARD1|yDR}-FKI{Q!EJ!EdI$H;F1;LYskbm+w1t2VfBo$|hdkRy))${LwMNCUb|3G{eDh#UemgUS%zT?^LA?pqiL)n%ZI-hjw3q%wt zEZ4XD*siI7F#+hNK9?RnOgp9Qe_|!eSQHI-w&T!_l|^Dj=D8hS_+Yw3WDv=x;-Sd+ zRW!yn>|$V8*1-`-l3KrEomJ&uE#>JyApEe3p8IuswTZWOB3`=v9j07w-1ZIjN_Wz!K;% zw45%^?D~b%lPieSF(f?{8V;-eY)AFQ0I7N%1NaCfFx>glUz$oh6?3!QdK-Ho1^0$QK z8tWbXyZP4^#UN#(+3=yl2oOt1dSeU;uAJ-a;N!udq)ZfPv@*K&*s(h$Nmq5H9l-59 zDNezu+oZ>h_!YH)UB2_0gK4zAvoC8e5x2}Y-((rR-zD)Emmb}5vhnqgCW4Z3@ywc# za#TwA?$V!Az!JQ)mDfqbl-KGu2(fVN)7F9Ktt5*@Q4FTi2hML=kT@)CuN8Dte4(Oy zHOZ?>e@%{?_X8V!BQrjZ%!`;W5&xMP^%ov}^mKnG*T)^X?nbyX(Xz_N!V_1UBr7)0yDn|Ay`aleBHMh8VXIjojE@?)c8~YX=*Uwy`x{3g zcF*y*PU-a*_;k}5@qOC_?e0EdQV3VO3iKT|dvXo;XWvf2|z$P;9xzYU~P@LhPFxXbx0`e@>3qFE5=H zxdm^<)wVqxFyyc(>d0jCk&`2iZ6xykT={3K9oZg6<~*1g07OworaJZ>$EvUJZh7Rn z9GmlLq(vx-qJcPdcf7v*kNflbjrn4g8#$vUMBz|}e-ng` z+R5HqJMpsaixNd&-AnoDvpcaYfu_dA;OckvxuWQ+d#gQk`r=_{^!)OS@0Uts8;L(< zbe&65!mqBAZyF5@5ydT2I)aK00Dlj0`5HUpw3>lH6ve9>xI-2whMeKU81I7-ekb;@ z?D;xd2l8TdugRzL!8dS+x${G0rLc!)#16K=ox(=+5>ds6O(5d1345LS+?2%i`idDb zlk>+<1_9_pX(uD`O&vi3!B9%E_C)_M4fDNvECT9Uj z;TKg zP3;LN+5qc5f9}Z*SLH0ZEI28bX<8UDKm2{&u_q--?$Nn5m+D}}SF^r&CMC#S*7t~X z`l7&4A~5&41R*2aE{awaa{#v0Q$Lx)zJ{mSxw^5<=fzEhY%~)hb z0cl=fUAo_vlP-wkTh0sC<}yM>gZI9m5BW0Fmcv*Yw4-j=Lvj2`-DkO~%6m)lk|lM! zgtAf>QykGdf7(9;(@l91%aVUi0jHS z1ze_nsN0yxt^fr}rcsw|j3f@2_E{Pcnt@0zgH(_1y8^mW4oTJGwI?J+uhpImEGWd* z$-Zts!=~Mj93j<@p$7ug+YU=o_P&ld~J86(AFQiB!+@_ z63-KIoKR1!$U?_%LxQZRe5l#_ofV_XXs`3%?M#+ohB4>&N6}S^)+sApWY#) z>fzq8C6-96;o8Z*9zOWuMIaL~A4w{n&4+j->0OS_0DGaIJXTuDr96o;f4i`dlv8pRjgj9QifB1dq z*?XD8Sji%2kGbi2)x(AYidrCL7b z2SgP*>L!itR+8@6aMMngz?{0v@^!haC{;dJH!D*6D>b&RS&$fVMo+|;iwTxRXSKn~ zza{#GceoHzj%zAN4yn<_d*+ANyZxc0PAJVOTVxIOI}aWkoNduks3;q9GDsmm2aZ0x z!-Zw&W=dE>6XXmZ9>7-R3Z(fudk5mo*aJ_QnVo?b%AI3I(4!>wn9+41g_&prqCx|= zs!fea)Y$_bG(i-R%H$m|{kHfcfU>`5fkx5=-CG#S>(E0bK;P-0(f~15ism8o2!+1q za-Xmm33%77sRxS~;a65dtP&c>d3!_1tF$YR7~{;BZt?|<8Cq7FA#2O< zfoQB+4)dE*w4CZ0(vwFC?Vl!R2@EIElRENWV%v*k#SJeC)h@L}Vvbc{VlvI6*LrCr zRbq8p*vW)sIfWj6l?fc5tn(Jtuf-WEN|LnqrQ7gIMos#ODkxb%RabhRmP-wsu}$nJ z>H2vmE`d4k^wy|N569m68sMEecYaeWR)2-v*wUGvr{#Q!KUO6RNQ&%wsSF%E7F3vl zBt>Srb?Bbx>0N;rDk+7&xxr=wal5zUT9PE&;?Tm)x~p0CsX4y`&HTm{+rE+{?PwTq zGrVw!Gq4Hp?hK$8zAtC{w+U`r)%JTnn>G&rCX`EC_*^u|?&Dm0Qj(<3jW7FUda!nL zIrtKi-k96z$(wZcJ4upki<3T^#~D`<#%NlJU~)JG^1f9F$( z?Nfc$k2R~~a+f42MDt0$5ei8ackk@tp9dMKRQ!*aBuP+tkGxbI95)jnj8KvY$voIQ z`ciYck4?l9sG4riQw2ogxf5F+JsaK#1q5vwFclywpd{^R5cDvDz+Q#Nk1qxsE0$We zwBs2`l3tnjt|dTylwj!-c1Bl-))_u4uvjdh;waii!^$Bm5laP<*oJry;eWCKc7_iF z6!zV%CD&SpKs)ihg%%_pSSRvzHV@>P4xoRLSUj`qjFsTi9(*pJ(G^g%gRsCL-x9D5 z>2$4H|F}%dB2~^*eu-X{Gm4Pc?>C_6RQ%|YfH^?DrCH2MY|FpnrLqX-hKD%=+=haNe$NdLclbB4R~P>=BXD(H zp(`w)vNt_Xq2Kx3dt6Aj9_bnVm(#dzq!f=HLxkLty9ssa;a(>L_)w7*!b>zO{LS1s zH}R|6a7k{ds0DyakD{G--)?*>W;JL0rNRMT*A3qWB&Ec|Yl`OXq8hc%gR4(TZhZjv; zK?{`rOGx=G$LfhBsdK-5e`$`NTej394!o0m(HZr`O8V?JT$8aQexe2ftKmh4k&ox+ zv`@{i-DgLQ`G0t6M>C(>fLy0^-QODoeDMkt9#-{ZnCa{AHEyVXwl=>7 zfl;>C2zVJmXz2`a%k<$)@b*I_dvY6Y2(VkDm;HAo z?Wh;_azx@}c=B#LFtO|1;+7Bq&e`XpRv zbBQj1g_gIzC}iU~9xDA}>Q|M-@yhb93tA0I00K~nQZ+Twnj=fH?h@4x(B5$)iQT7n zUYXjC#(p;=R*sn2&m^Nv5IwW1kH5$S8Z_*pWT_<~zbLrueAM<^QRbJ`+1xU*>(b7^Yj)r1e603_YsYh#6W4K;qB0-xJzwjmyt*HeD2TY zVIkRNUAkYizxKVa4zS@LC*w1|%#2)l?7Lt~h(*RxFWY~Q4OoD$%H8pbW+2XzIG#BQ zv1_)!O-F5N>{-a-s_G8y5(vIB? zMD1f*i8Wb9xwH-Kq+zkdA1lCTO1pa;kiQgOU!u#>FMK&CZr-WeqQBHXRWOCvG||`h zMh&bf|C4Ncj6ZZw+wxuPyo|VOxG| z>vLoV)H?_aE%uUDef9?^D%zt^5WXC<0r3hNgsS z>*(Z0k^ZX8C&rw+=pq$?+4G-tfaI)dw2~2Ivq=he2E;*$L!b>!sIl)DyP3EBVuAD* z;N>^TAC+IqY|br5v$I-hH*|R$MMYFT8a{>nq|D>_aU^ywbA6bDZ-&x`QOPN%|9OBF zI(+v#XVtisgS?#@&NZHtl%~4+{>m>;1}v$~zTJyI{yMm?ZI-*2PWl@q?nS#>`wh)v zqc)~A=;yF)%9Y;{Xg?SOMtS={hZ|5X`sr&KYOuJZ3L#{%=e*gR&eK`p)H~h*slxgZ zvRUf6$b`=W{`&g%aSy)MdzOVc_MVxHZd&@bz(iqTK&nsZ(8V*|Sj9D3s_JDOM*kNL zBbiPGdhl@kvj(D+lIBc!CNOju1 z(^bfKygRQ~0T3XY>7jfdOuZCA19(9zj8p3b9z3bBXY!AT9?L;hVh|v}Lp(du!=P`9 z{Eyh!e@dH0f3^E$+hTZ)@|C>VTp;^X-b(WMcHFK(WH{9qF%(vlvU@}zaH5K(t8A{o zKvE(qE4V!`0P$eI1UehLh7sN4Iu7Ypd63|lBP{=pp-9#q^9*lG{aH2lxP1k^oEeQ8 zmvxtuzWr6ZGa*Eh=5Q6I<9q#gHX(%miJ`j!A9cq3id>f9{mu}4>O|oi?z)pwa9dbk z-}L3?hPYPl;QRuABpTd{UUMu-PiH&nuFtS_7~Iq=Sqwmq1;9GUKf#CY?1$~CP{BD! z)mMmM0gGim-KzLMfO%UbfwR9(Y(Lork+W2@%gtRu&Fu@`fd@t~N? zzIP(53AtLT>I**FtTh~L~o<%qMC+kRI8x*Bb$p6!taDbB$c zBR*Z2;krWogE2gh;(#3r>C?_*${>HpFAuz?;^yO^_VR*Z!EvfBlv=yo$@Ik}&pLWH zRwm|U7b>eVkz&^nR}J}%t8EpZSgUo+g{t<&YWC{2spORyRlmc3y0`VPR&?H3y&=N! zq>{VyPiKD^2GOb8)Drl)9$ia=SXyB~u1RxBj%=|(u9 z|2u=VyWKb}xlFq~+o3L-%2wT`!?{-djggQs2;|Y-^`ZZug^m z(OyGg_!ULd=jC9FBidSAg0N-a4kx}?p|wNP+&dq}E1==2Z-WE3Y>sa_|fmq0#cu(HTxJQRf(b92Z*rk456n-ZHWi6 zh5-rpy2kewi2V++QGPBnVlpLa{L#ghfB%$W}X$-azfo+$B4qGahO?C z&gOt1b&eq(0g@n(DHS+)lFpB|uOt1z>;yI{eV9DFOM3+g=IJwfisif%DMFB_BdO}@ zYlAi)PUqu?{@`A%7y$p(9Kmlxajy;XRh~>Kqk$KPg zM-HQxz-t&utB&nvT^sI28C?yw?H-0>m6$V$r!)K)g>Tka0 z=YVOYphyMc5B^|uO-}F(b^Cj`^JWc@8x`0;J>@NG2%cua{4?kf$#XUQlgniVU+t^g zK*wSm-^Q=hjZaOK$z zZq~Hhn;2SPdCOrI^5nO7lJ^5sI+AC0`zR7?fwk~_+%YAo6eMW4QYEe=l9E||x%0I_ zG^_!1kr|F?jH7J~2qT3%-)`5$F~l18r!GSU294 zzr+r#aHYI!9TMY3;MTLldr*qb!d$(OE=O()G#9dR`wtfF}d-72v z2u7{+)+Za*r-3PPW`A$Mq{me?y36Wm5)ZfUrfB+WiH>$HEcP9JaTVy=V7*^CKEEl# zN|ZekAxhf)hIweb{-EP&+kFnGjd((C21=mK{GT8cI{>kdQY=~EKOaQ|5*Rw`KH!%C zQ+wPVh+e|E(m&q`@ubqZmpfT)f3zyL1O7=cjk9#0t9-TN4Zi|ty#M8S=Dq?8h}1Nc zAh;CAkhm#n!sYg}2lUpGJZ7;}`?^pJUc5HE!KPkgBg}t-U9IHTyMw^3W`~EipvqF7 zm&s^_%HMgnMyZ!J$GKp!Nd~Dnh1iX^yYq1a;l5WZ$Y(S8m7}qrP}q=xih|xlY(bdN zMe0?PPo+jyN(U*GYTI{Ylh}{lf#}4K*`gj2OFMzFoVHEzc$8l>ci=I&4|O@`-HlVh z5hjEb+cjj=aM2pKb$S*APZe*V!|v~YlPIc}kZ!mOLG&jvL#{PZyX3N z<4K)u>~?Foui_9;z1IHHAB<0|KN(`Hu0fStMeiA2Zwna^h-QkbNyLZS{vum>mcy_k zz`C_qo#wUedw4={HqADKp$vkTapL$Xj;}qX7+Sp5U1yuu&f@}^2`FKFRrf{^uWrbx zdop zqnLAcK@y3-!}l1umg-<1yMd0WepTOy#Vq0B@{uf@SQ#+(xR8;3Bg z=v8vUFvX5^g<032Kg|5x9>E4P?BEnH;tV04`O#G@y=9KRZ2Ak4|9#u zV`uv@&SU{sWxMpF!7y146`Fg|y!=BoX#tttnvO|E-wx?;TD!BkVM>0T55Ht1Mfk-r zmFaNhX*Hs9+WO`cK0B=LQO!%!^|xzSSOpEEbWC^_{zVnF{tggZsq5Yom`A;LtO!WE zyxdZocM~?ReRDiP;|@~n#qJ(%&xT;uyxB3MaVcyPIIHIX7rEO->%%BlDnP{s zn|oK1SgU;$k~6i`p;0G8#jmRllVSs5F513inc*kr5JfMVaQ@NTR5G2!Jv|moy zglzm`3(T05KMpc=${cm-1F93D#L2KPbJw4~J2oA9mHcI<((!m$td4A*ltSqey!brs z^pwQ4!wJ5dKGeT!2sW{MYIxv1%yrAbj9?utX<>EI>Ho2o4b;X>{S$^+r9yn3oa zU&L+VC2G26;3@=FT3g{%`iJ@U7s4bY_FcmRB5a9)@5$VOCFY>C%!3)}^M}yNS*ARN zvJrFFl9%@LZaF_@f8SH1bu|`Yj4A2B6ZD@Hd#nEn4#S&G#mfw=?Ru&EO+X=CevP|O z5|QuLBa`*q5cf~%eZ`f%PhCJmx+fy;-!0v@lu9TNIbXY>;wluwxLp2F7f#QyIDNs% z&$nJ;?QN|w0}FjdruyyL_N91s` zwGyZGT&Kq}4N(iK9oKt~h9vv@ecn|ioK4}iH%LGbO7inSZE|3Rs{^n_QuQ7+j6V_u zm<~j(R^FmRyxYOZY_$G_rr`HXIPcDu;LBcQF2D)E($}Rs(f+#i*7t54|=C+T6~O$D4f20kZsPnI>FLhk@gV5agA&l;b?# zGe{&8oA7^{#9!7dvwE;P)IioWvr$d$tjrsoig*aI^2$^&c+QQ8wKp zW~V*Uaz=YK)&9>>y=kR)|F&f*mF||~xHyvE(ZE$^Q>Byadc$!wvC8jRtbS?1{5M2q z7W{QG-_3{%su_Am6E2lWxhklihI5jH7RHDz$9bBIbPFY^9mR^H+IpkdSo~hw<8P>? z)^)mgy73bZsi}7Xbfn%!m5bOf1m-aI)#@%{#B#+q&ok=ucQwHo!88ufvjECVo$Gw|{+%<~2rY_(F4yue0zq3#0n10Mh0X;>9ar~UX*urDOHz`C>pe7HU{-5 zqQM;Bk(eHlgrmoIJab)=I($YY?L7!38SxMaHRgSd6zWl0BdScmJ(DCToJDgbH@b95 z+@PB>7tVmzMm;xzH0p0-beR78mh@WVg)+{);!;XV!Uu;9psq$I)8 z92?Yn273^#3lnkC5M6boPvC1dcBYIf>F>~NAsE0a-TRNBp$tS)2$o$+kXf|hC{Yqi zLlY!nPn#B!K`=u}ft;SD%y=iiloDG10=2!&QZh~ogY68qHc;KefxnxiZlJDE4${A? zoYu*G&}5N{b1aLR1^}{BN@KQL>K24MPzcJ1qM{m0=*8=oBP^MQ+I#&3TM~HQ^ON`b z{l$;cz&;)DGYb|44{#_O?`HyYP%UZ`SI!UdJrwYivKYO zU4aZ$zgzenxl^L8wiGsZ=~%B+)2_O!TpTLOUb*{-2t+mUA709=$c;di38;dYr_u z>LC|N)2?Hd1gDX8o!y%Shy*?lhHaBT-L;n z`7j)9uh(|MoTRA?u&Fcu5hTz|JzVeddtiJ_7pb^r%D<(O^%S87VgGRFe}hyet^+{v zi0)zb^SgM)jye5^qC(%o(y8YyV&0UUY#I_U73+AAet(0U)=%HrX^x1im)Px@VW`YB+;ZEeD5jAdAVk(?fBhQYA7z~0w_zYlkTmL!69@=| z>v&1^oS3fokpBLRg6n$xlpP{Wq1s8AXFx!E*BhGP=CW}7Y(Te2%_b574_%T zxX@v`?p~@{{FUF-iG=Cob$iqPe6SMgffTvaDu{4oH&ngg7j+mm=G7s znEHjFGy;9hE}I|5{UW=_Bx3FM-cq`boD}wPT|I^@dA(iDhNrVP3q$>eEJ$S#ePXOh zK0~UCfxsZWM9BIl28hSTV^?SD`;QQ*roSGH`vBm{D?Ez!ZLNv8F%&D%jD87zZh~}VG>S{PjuL!ou^-FiYfqaY>>o$-WMy>!w4o?Sg;3m@ z6`I~iPeXDPH}-nRJJ5+hTAH9YWIg%&Mz7Bo#j+8p4~$Z?YiWc71v(n{?5f~-|lgJb~2hQ z9rJoV;PEiWLN1(r*0^;7V5^&EXDdZmgAc0>&u;Ter8L$~s_u$)JJ-MUu9i=~*}BxI zCnGa`XxBh!(qD?nz)NMUvA8U_4Wpyxp~lOZ$a99% z8omP-{MJ?(N+vNyiQvBMQIy|4K`1b$ld?6i7MQHTTOkN(U?qsu(O}B2kd)ef0?m_o za@s@VL*wo&1P_Qjw3THr2D-uHYqme*hp7d#ew9oyNSZIcdK!qf4j(ON)s{q6w_?Sz z{JS;Q^(XPy_*6N@1aC>3*HY8T=%uJ3YNcc^1h^Z^p_mRy%cq8bFh5t4bI^=SIovK5 zIdayGr&mI<_s|wAm_q*~5sXaL?I$Xk)+yu*i_fYKv{o1Of>}idi=IiuHigas7bmKl zf_Ld{HIpc0=A0vF1w#+{#1yv3^z&uPu8a%CL0#>HPifjVw94CyW6EivrU!3N8^$ka z=Ge@Jimy30gBxq+qa)jXZ5823&NxxXT{W6 z!YY6PYBoKbhaE$%8JPbP+^mC$1~CLHsr76$@*ROL`eV0*RlE4YH$un{OVopwX3Jrr zuh$S|5Se<`>!kL<7IU=w*bd(iY^1~eV*0{!r}SQKlbp|IrKTKoMncrCl-~~Rf>e|_ zxfMB}5`7_?OGQ$0teo0H5?Tp7OB$zWGZt>7P&>dBLsB6@j-n>C+X|0+|Hz)Q<`Zs=jC(%6Ak8 zMXg&q+YZ<5`+FESmY&KK(AYGC>1Z4{9Sgom^BBx=wIcPmk?WeUvKWrnqPw9#doKHG z>YdYLROtvr(OWIz__&LvcOx>zn27hk09 z8aJan++1UE#9VP?$-jjN4hCOiZ-rGBVSn+lzPhhoIyY}Hj>BR4DrGk;4V1;&Wu>h} zSNGtY#n{?-avrf9j(IRZOBHLUDvtX}{V#%2ZO0FyyA3*YsA2k`MXb2*=d)!J8ve!O zaN;Of)6_3=0=YU9m+IvGA1NZv@DO{+uf@32c`0!0v>WYFUz)o7c9iKuc2#D(KUg&@ z_q8KT91A&8@xO;1+M^j=qIn)e7DCPWJ?m#Gzq(h}r%zzZ*FcV1w1@Gj5!+WjF%6Su zel41k-MamH$98kvW&+NW%T3#E#c62?v^Og7i`Wek#_Ka%8U0xx#n6{Ra-!^GGTH1x z8p1SXcf7!_@cb7nCh@P~r+>yxrHLu*B{;a$FhjA0x~w-TPRMA=Hqqp znx=UPbNzQ`7(BJa-z~n^&=bHUUB$ng4PsiW<0~pt*H@*E{5WiE3}bbGx%jL6w=B3p zRr${6s?7RROTLAFl!N_c`)~dpe=h0`sE)}6eN~qMgaGCBCuxmH`vagfPdDB{;w4o7 zMk5fwQ1TVXZNDl`$td@A@K#Cz|Ekgi;z&##+{H=*!qp-7w#Td;HxuED6|Go^sYti; zhcmB;uUBWVG%y%u%ZJphkeG9cVC7r(h>f>tc&5QX>v3saZThVar^>3!Lt`m)XxBf^ zwLbPySrxo|E<0gLdLY;^otkvqg3z|JNrDCWk9FT?7W5M4#V@DY7L~eA6GCtI`88z!d(_+>(dKN}KFdV=zHRk@Rm%aVIW(N8MMS z;0LGxk3G}FWkW!cr_H^)M)LDd)W*%`c5hi#aAW@O>kfJop19RyN*+unLUFvLb;lVl zbM1G*yW*c9D2Kr(AdoB|bK0S#z;9DP(I6n7io`M#xmo&zSGDJZIpu85mLgiZ-`mF6 zo*gtaB;?0qT3$_TS8;c)6jOEsYQrl% zPvaL>kM@D$3ZARpSQqiZ*9oA&=sm;txk#I)mu*TopgYuYqliBr|9_tbJmNA!zDHdH z-UoG2~i6?2MxK1QRs)hPu1gIH z^`)+AhV1FSwahUj(ED~&^2ROsQP8@N^+8NvZDMg)J*DTm%k&HgVv1H4gcfCzs+FF= zaO+1J9XYGjy`5f`YslpA^rK68+P8(H4$v29)~d`_y{|Wr?7$g-!&X|MmigIGhe7CnJ4(OJ9{ZwpzO@_xC{<^S_A$#ermyxi)qo&eWv~{k zxdX4EKfBq%u*xpJd(B9rBzsmFO*hZ{+;2Yhpeyf9l3F8Tpv&VLLV%1>h6s5B zZ!vKl#N$Z{A%QZ)L5n}+b9TLO0?p^VJ6LRRSzfd2lzrDyQ)HJ231<1sx&^be>8CI< zLM8-u4lLRSLt~Td0BT6I@0<-8RC6^x(Qk;khzsDZWK%)`s+@J_q`Cq@2AqRE9-!h}BB0R9ZRFHbFxb89r6ME@(w27LuVB1`AK*5g+2*dgPU*EQ>8%HJH zHT*BvrFiex1H^unD~FURh8uMV9OfOn5PH5R5xt&d0l;(lQ;lc-V+$$h(`cmm*Nb(h z4QP|37)@g&f|hw9bNyppdUOpbb0GbEzwv8S%z0Z zx^wzGD~ld;X4}esA`Pi~egJb4?LQTJU`Ts}RDrzL3dAdr8J(k2pl2U6 zoY0|KNl^wi>Y?uLmqYk7r86vLQfo*i2kul!+KY>?3FhBUO!=l-!-h#J8_j{t>Z%YK z!AC7X%bg%;f8w2%RzXAOT%rEJ|IDA_2goa)a{3=hW(ZW4OGu*>MN8MK!Y z;af=7(n!OPStI0N| zIOVpHnF&~MXDTNTO``&148pIZAa#zAk|FHn7P(P0c}vS?Y3xB|W>>M(arXvmE`>xt z1wAvMkhvhGG98p@gh)w^iAN}!Z0&LE7GotqF2hSuWH3D>0twCqcJUVf-gK;Quhe)! z;%kZe;btC>_2$o1^@qUr&Zm25|J=c)FLq$V<$j+> z)TWF)Zt7_~=~2m;4T0$+^m2iGEmm)T?d@P+j>>wuY+u(v-S`5p0XFtEw(pO#4|srF zC)Iki0zNP_f~7~ouY4ttOwb*9D!6~k1X|r+0z;O^S^Ob$_)tj1Ej|v>zbnGS?P?GRYKaQ zvEWo(atMc4PfFeqpBHhAk})S>oYz@~(t&!bORwtlP(PLi_S z992fPcFUhBhQ~sG3h96A@5mv9>1$kz%Z>Jf2S@95QMDezW0z&(kdf!AKnzhbJUtPI z^|*7(3B)0Q*@%Gj(L8yCP9KVpc#S1SUJ>=3v3wcxU+&*=}}9-z>k}_*pw|RKMUb--W z^P@esVIE`CO$Ort{KQq=r6uMG05645NzY^^Kw^nEZYl?37}T>Gte8JedIkE#*lH;x z{L*DjfCxk^+0@ycBPVWBOwsNu@n*eBHrTB~;x;}AKeyoGC+=zTqI=!H1j?aBRdq4) z#L=7Y13!Y6l8-O_ot^Fyoi$Ho-`N?=<@pAnJRm6&3b72+ZDTA=*^_@?Qma zHI^HVTs8`XiD164+B1XP!=mGuD4N=2HxvS1Ief2ry%mM|y6soKJEH;R9WkhlsBm0- zCFKysGR6Y)E`Y!Jx1`<1goi_7XOCRr$QL|3M!Oy+!uD5BYwXNMLK)et-Qa zXt;PNFHYTA>J2HGuUcx49OB6PxeRoz7bs8tTBmz6#KFATU5zgA@q%*OMhL*1Ijlvb zoiAz~Fb$hShDOerJ))-y7bId)0a684Q+^4OBXO}t6k-`Qy%?g>^zE?YMTO&fu_+J+ z0kUGi1ETL z(!$z{W&^{@k->xck>=}4@)Fzguq88?) zzP)2_<2z?hu2e!XmYuXZS=0367QQXjZcCr{hj<-1M9yLu4;2GAX3=4+289Bi9vQO=VKCKI*e;9?B9k&%?V3ma10?P?0dhjDexd%7F})AVl4W441IW(U_Xo*W+xTL#RPq6Hz)s)+{=y5L?c-v6(;$*#8W9Co%+(V)5>h*vhTM^4ot>^ht`pUjChJw|v z>GfnAAMSo*{&Ana;|8s?B2*Ph^B;y~%T zVyifO_bq9nvZKH9#zbF7eAK@5JJwzr8lzQ-@ga@g=%jy&Di0qzG{veTYx2Ry^yt?4 zVao+p^WD#!Nx*|##_KHISPedF6$rpzVGxj-sHM-9)T5uR(=&r57p zQc!LQa|tRubxx0nY_Mgfj_55tc`))Q63JQlQkT=B2T3(yvg|DplK*v}-fimX(|bj% zlSs~?lgxDN2rk+XbG0L%7Gusos_;b1(}EFfMoAVS%LPj^=DSlAKNo`)m6UJH%GcOR zj^h~WD#J}gTn@hG89p9vq#nI+spTF&L6fZ85lzukmlv-AkPPfYb@Jm zpFdC}p~JM|Qz;QSoTavm`ovFR<9D9S#EcSoIYHK@8_vSZMK`a^J?Ouj6<}r@sl2+8 z@Al8ma!O*6c8u_GCYS0jt&8) zX%N{^zZ;tQRVxVAU8HEoJI3)i`MXernWA7u@2+^`L^o;pD)`E+{VVCf$%$RKX~$#E zbE8DlQ=;Ed>VE6HVfaIeaG25NGZ8+?a_BVle5j7ksxeT=$<}bGGFYuRomK;ro)JXN z2ENFFsya2_r7w`dLbL?zCq%9PV0NA&nHQ^NJz^p2;IoYDF@<;^odtIZkeyw0mmrSM z5%=Ffepd-IuVcum%aTK(}7dgb!6mrTbfjgLqjb_7>XyMF(37#t@?9_G#01y?bVd> zp``Fq;z(Gdb$=EKj+!e4^Zha;~YmNuMba%MIP>mxQnpaiG!GMcmNzVw+;X9WQ7gQ3D`gZh@eD$j6-ikw0I5vI$XL?n7|2!f82mcAdDK^DV^uhV@uBsj@Z9fp+aF*lr8 z3bgmb)VU+U$LAMD_c}k_NyPRn+WUb)QSI?&#f3k|JzC}lRc)`p70CLTN!5(ASZi3n1B>&VI7B0f*z?r!YSy*6)9K%AvB1Ih2RpKD z%#U{(B$9xsgV*m)&`J@>Tz&QG7< zNr!)cG+H&+L1^p&yY)FB(!>x93R{;-A8}~~N*_O>+PI(m-db?6S3w#q z#;=JpjwzkA6V=C8UqU=7|aOhkrRCOf57dl6&N3sik3~=p4ub$5S`$K$h8RE01Vd%ma?_e zU1}rlfB*Qh@Od+QUX_QaoRWXD!uCcO4m0_sL4W%{?yLJghSZfH1zn}%mV6#dy69O) z8CCWiu~ZWTjF>xcq!@I0{Q4KVJ3l8iC>k_-de%So?erpS#ypPlGU0k0N{=5$W?a8# z+iQX$if-!e&9gW$RcWAc1DD(Wh7+lVx61m8$znyC$%Gc6SPntHnX@9O^tzbvx@d6+ znT)L=(hIn8Z+<%J>A1gtLDEL4^Ha^-cbIC1HJGvLt#&(to?|ZS%*vmg3;T(O)OHLN zCzuo&Vvtw_Y~=3jj2GiuxDMSD`hkj8y z8A;(?@>PVsIf*UGv(!3+tuooRkBV`QD!OAX8z_JG$uOnns0t=EY%`_Hs($miZ(2LA zoS&|z#cZ`x$gxvBm+N059+t~zL%v1lb?!zGE*5gJpdGi}^_zhP2OTftJ#4AcsNj>} z&iZrMsW-zni)=y2L*453ym+y0ArU#WSzs(Rtl3G9^5{qJZgX+KlfKb}Q==PuxJkx< z;X6&WsVK{5V2wLZu$WHdiFr?-rw5PBLnpQfA$Y)mj*l0RNy$@pCh$IFn&IB%2PY3V zqwyu&7a{u#R&p~VyD0W~W6ChnPfspsJlmb%hZq<xT$b z{(-iml09$^h%lyzA8E|e(>gI752D1(p^V!fslEsFI3&FV!u@AnhVSF-x#`|97o19I z{wOh%dph?U;6Z#wD{4mM=oJsf_11Bx+{-&~t{PSpryVwt^I+=QpC0PY&D_z?`>WOF z`+F0nLxY&z5J9&%z0jR9O^(5#^%)9SLlE*lFv# z72=*t))Ix8VCLM7!mOH3~ieFHx{NiIomcYw@2`$=+}=T+0iHsYY9p#^@UOD{EH;s#yisjau$<;O-4 zQP};VMLpA#k9ftM*}Rc!(YoPm>>6?@k^GlF8TPJY{8o;VHyc4-2K}xV8$o#r6~Q?4 z9jDeC*^!y2utK_84P&af_`ioBoGj8sB%E}Rvl^gsvi9V!Iiiv@wPj;gsvrr!(HBUP zEk($UHR7;CtEF_4ji<7dXg@C`HI+@11Pnxt8{pZAW??KnH>A!giAMvW>7^u-C*Q0D zaNIh6O>}F`WKEWZO-o88%~hwaazrw9|1wrKBMs!0Y)fT@``)FvveKmj@!7QT`*e&d z;TY96@N)$5`fFMBPn!7{`j&1F+yVUDn@Jn-nmp|{Xd>Q@6UcV1rjwyF#b_p3FAQjR z5ND@#u6$aQs{ThzgQ(<2XHeR1j}`0D#>G?kI+WcZqXkSx*ce}h_MbJ z2R}yX68O&bP?J|1RZyt9yrJ}_9tmB*NZ|xpTKyf*U2X41=RDB(bXRndebt*mhQUW5 z<8dilWOz5P2|}KwuBs|u9e!2P04rKQ#_3j9wT%B)$=dB{_=F9Efgg$z zy22_qv`oT*F0NL`>VJMrWr03IaeW)Wk9u7zcps`NG`cFvn z#)7it@+ql|Ho3Er4jCsrxmd?kk%U1#_ho8?h0=03TIM7HRI`;n=RbRLFdux!jXfQrKs%!d!e8Y$!R_-`w(Rt8Fy5}aRtA6L*_M_`GQf3vqMli$9P zXC8+)(}GuJ6i43R=!q|P5xjXCTaLkXjhps~TxY-y{DnF#{rcNx*4-$y!)uV$bI z4e1Y}+l34LVBW}|Vkmabaq1fZ{#w4J!M$lEo)o*ii%5MSg}PK--X$nO$Qj4e$j z7IcliBr7qE{F76ZInH4qXi~r`Y%ILxGz0mq;{LFml@*FvL1JycYrb&;kEb4g{huKF zD6NYB;8}+^juMxhGPf4XW&4-#6)$Et7xDl5jbmDLzx|EJLOyX&vkR3=&2XGoha~oH z8$g2)iB=Aai}lbE8%QI{rPGi#vdmJxGpGf;Q}u6g3#3?=!)GeQOe z@BtG_<4Vhuzhs3n5qr&x?J42=YTFgG%j%BIyhs}!%b|}60bO}2kT1Hd+Zl`KlyTNp zasd~lvR&go+wzORX+9;ND?Q)+a#3y3@nKTV=c4EP{`oly}Cb&$@{!iM>|XH+vUX`6taO0d>ui@(xT0R}dq!nHzG*_t~> z*)Ou24t^Pm=Brp+0(OD*N2nJhwdi+~ z$c!8ib!#(J3`L!cqHMa%bDSGB?3+f}zjR*CVg--eiF2^?Zpw$mHlqS)$i?GmIvC~G zYWFO;8AqunsWgwCWi;lPDd^ln%wIX2#GLZGsbUO1C$Fb^JrXW|989bm;5wFPmS^I| zaeUNPd#n8@{VvXwCB7KNuBpztrXaYjjP5yPJ=u~n;K#x9;D)-Km^Wr@IdaKK_wor` zqcBaoH_MCbCxTnI2&gUPR4;~zXmo9|aMW$B6s(+NC@-$9fhqkHcAID8Jp@*%u_MGTjO=t+K3xq zn%j^s*qB>J?(zf96a#;e2d$F_O*OW3tcL|Li)_Z@?u~2tn(O@ipXnDJ zz~%@LS7e>0b16(CRtO$P>S~Alj5H8dZ2UDer;9Fsn=m z)eAbt*oXFeac5# zuIgc@#B<(cyr&((ajhOx$V7%BVMpbG#gbpTd~HyP9u?@@91Js|5J0x%yb|3yK)CK0 z3Zq5?Y~kI;(OrYH?XEpzw{2)CX|n&Ky2Hd5OT7A@ZWpbiDE8`1cXJxsAI7o66~^hJ zgg1eNcan4*(s74i%#7V+_-r`e0^XSO?5K;3+u5Y~_i!p%5|+{)AA?#75&LA5UFqcg zlp$5C^B&A*lffu15K!b4*rvUxkSkdw_lJx!56}*ku82ujrU<%1Ahy*Vu^W~igkgJC z2u=4DO$&&xKf0~yW#9_KG{thHQ1U`j<~=OP2K~9S{+;)tEaZBE7(rCsG@=M|Iq$us z0Ccw?ATZ>-6wcn4M>@9V1oe>lRN4#)n^>z~p1#mbMdJax03uLKUeVJJZdDOrM8tv0{Kx1`dtsaUm&w} zmH#G*p=K{pkrLXEg8qpwwiAnQ zm*0cb`R5ym*#7@(D~w!y#9a92A378X@mhG669qYRNUED&HJu{^Gn_YPuIJ3L2g)1< zd*9lv4l9{bi+A(Jsn6tuz~AMecb)Q}UA^mQWEsPELN?AR5tma+lPv<ZfO~7l?TzI0!S?|R65%PQPyzcLfmu&G<`{s9@?wL+6@_|!Gg#;wcj&2gSfuw zR49Q4+D~%$-&l>0k=JUB;T-aCYCT({8r!MHJ^+=rZMQf3Sr9C;)g{03>h-5lXgE`W z=HbMhu~vPt4u&W^*shN`!Kg}z{fFJ7bw!4;`*fb*`eLON zu1zr7TIIji%ggH5ZO{(bnKHvaJS547n<_1tP8w&8KY4N@u1kCS6DmygwrNK^9W>3L zC7!Q`UrJ4GHrT#Dc#-E4)AB|%uJI1gF6yzWTuutdH$a=4ChOy%Fnv)j2xlGJLg(M4<3S;jdy7LQZ*<#`3gvReHd_fcN|1STV5q7vRV8m7W`(?!m(7{oN>chf zUX9gM7^;pcd9G~YiDvY?N{H1ps*Q?2G||WA-77iHSi3x+6vFr@lA!o7h%Ewcn&8*E z`x#;m)33E^wOqCS4^!_P-C3~o?`C37Y}>YN+jb_lZQHhOJDE5W+qRwD?|IMpt#$v* z%1U-uRd;po-c`?M*|?N%ezeod#Oc6I*aOkP>uw@GQ3 zTrKx(*(xqkw#-zJrO;BwAl=KW%ZX>E&vusUB|BZ-vn9QB0yf0Q@a8>;5Wh$;vdHAY zQj_g@j#3DN*ZvEK>#0^te{i!F8z3YuKD#|;fpb2|@vl|+$H-n*h|>09!Iuq(L-CwI z3^1Lwx;p?%bdSBlgRA#gnlf@gWxsxanD)tQi!3ITb!}Pii^qUz*#_cWa_3uFL z|68q3OOa?M`9}(g#o*}pstXnlCI?O+H5&3N&J&mrXK}1>5^{-|nr_3P3ix3zzN*P* z_viAr3F`NHoa6A9f86=%DK(KwuuW-T^qQ4p(kCEk#9Pg`#dra|T`fDR%Mz*_rfsv! z{zje|28TS2(tafeop@A<v`vGQ0x30vg-9*{x>YK-O|rCUTHIhYRJGK=5szj)@x`_!)a5y-JI=hi;s~Q60YD_ox+QD2z>|zz>c{OW zC?XhQ?nW0~`A!#6sm)fUA0^YnW37#U*m-i>vNPtMbqX@bOu~t}k;ql9EpE!op827} z-iO+<0&SIHKW1rJU3nd}f~xF*vKHQ!LQ+hN7VqXe4pT0*1W_~{RbT{vkg}=qab|;V zV#JZ$@gyN)EWkTK5D*mePBK870Y9LP5n( z*H>g7L48Ev#xH*Dx$DX9_ z7FBz00x0M$CpWCXWOTd-{KmD2%Q0IYSl7n)A=VO$S~q2Os-io?!vP>L<4qpjPTj8} zC*cW|fh+f6<4*2g30#t=LARlcEpOk44fdPwnK!zS2-B`}1QCs5X_o8G`US(LTYTSr z>mM5zp+{uBC<@SnP)t$RniQZwOQvJgdCieaumP39BwS;}>{@r1#^0dIrZI;SslDU0 zJW~yS393!jpbreV*9cjfl#B>H{WY#$j?82rE-N?`pAgv@l?*v`lEuM|4r!^5#^Z8^ z#1C{z6gWKwk}fi$tKT7Y^U%U$VB1KRdeUYVfT??wfM*QhSt4-PVz? zqwzZUF0Gkw)2)p}{qHZ>@SMeHz|Sa?Q-l|a^Pqjd6C#qTQeLmxc1py=zhRkFL(^2Z zKG=Mh8QkocKbPlrC{-9z=2!+c{t(#yTel0L!hB@H*;&LSLa;_7a-~;7zpq${ei3m7 z7r#CtOKH=h-%M*2qJRC%@w`x4ns1Lqu$>)m-XT`-{bE{*RNuBGQSy$}_p~(KH$;Q|voHfgzSLHqZ9dX-*zyw>bdFL^=Fy)YiKc zChq%yIqYE-#VD;*t+vV|tw1dJx2049g$W4-jj^XOFz6iYJLk}M?(7~88Bj?uLRMdY zvXDSi`#V|SuEr7K4eR8PYg12=(hu5R^2#yIYW0hYEQGIV3@TBdIZ?>RRLdC(}*stY{h}EhEir;4=r= zBpFIW>VBa{!=$wk6n8x8F6~z$R;7_1p&O;;YVsy@aeT8d&jQJJ_SzGC!aMs|vdf$% zbv-e&4O5#W0@L?uj5z#=`^xM*^GszxbUdqb=uChao}579u8I(LJ2nfi$3U3^vBn}h zFHO6|gHBdSy-)yy?SOOm}UNjS&6bDGuL?{_0Rp!95^Ye;l$Z=~*BdYIOURvl9;uMiaW$Q`); z13&hym_=u`;3*ocN=Pzx!+hm$TZ{=N;Ese6mr#{k;Lzjr^S*CPt@}?qVV`g3+qef! zgjB5#psxzCjJB_pqIQ`-1#>bM9{yG&S^ojhPMS`P5p(y#n|rUIoghSlNmtw zO4``h;WZ_s*1j)Yni=izVK|rE3Oh1ha8@%I@SHkUH@TD$unfQuZ++y#gqpH}s_+C# zgFqCcQga$9oTB9Eik$$CJ654cnd4boF(&x-`FFe6w{G9eUC2(jfB__xWPfj3dFQs^bY8=~+VG3F> zJ1&Wc^0S^n)mv1cIA+2{7E%rV2@rhXp(6UJi24*M`Up~cLLzbI;LXq?oEP|#IRD$_ z{EV$Jt0FY?H{cgms+?^fl@*Px3k6=s6qRcVzZEwy)w!TD&pU zJTyk<@*n*B8HGZr)4nsNY&qx^)299Zi9%a9IlJILB~&63BvPYSS?6Hc79|MXyB^yC^}i%sp4%t0;S?z4V&i3Q#D-ovMmD7E#J)P%vb} zY4{I*Iqq;ER)B@SI=rw;j|wC#8eEmk-$CS9JM20mcOFxr<(G(^0cK3m9K8HWLw*5{ zUshTn`Ac?xPXF_O-a2oOMH49oSkP2>I7GhM1x;n$$E+9XYw_g`X|I5Gg zZ-h3&>9AWBWsbjrl6i6gt88tarlS&A#Y5Z|9(NMTC*1)LhdhGCmxOD}2mLXCsT*gGC({$JRE;MY z$43r72B#Howc*P-Icb4oL@_o*SgG(Y694|U1_0j-Xq=$|qU*dWX!@5vgL{$+3zVzV z!Hsv5(RJ}z%S-U#5a0z1RK6^L^^M|qV^Cs&BNkUz9d25kNq!>$1JEeF$1WAD40nP7 zK}ex}TS#=n(4gIj%g=$`6(;o5F&L9JEd~G-oe%M4Cgj)BGDrmm=D*NF_A30M#vR#v-t~qE2G2^zGG%AaBbo56C`N|} znBl`DkZ@qRtV%2}Pq7P4$H#@@*5+>f!2}oMNOq9Z&##Q^MuMJfHI{LO1x#3e^Cchb zA*fPROt(98Kkhit2Ws54@Un+mpn+5S#@cvpc3mrr#3;OlF|VzFL`yk6pCjB`c|7wj zwmBzn;oIct!LFLV&wkWY^u7gz&J7E0jbV6F2=r9wjtA_f(Ek0M=|n)QgNO>EC-xtU zt<$pf+ot8tU^Zn)S>%en(zFKIik#tRy%}15bVb?9a!_R4IbWuz^kO1RF{8LKSUayG z3UCCZq*eSsYY7s;!f=_MXz?=DhgnZ*mHqG*y{uG81O5~GU%8do|5+<@isC414+@qd z`}DcB%rvkH{E3hPlGuTk;ZfG-F59i4)Hov$9>U(Y1vv0w%>-V(i@paib*wc#x^>WLEKnSo*y$>D z5E=|P7GUW%WH`ydK7z!)IhiM#M5z&f|gb3J!GTe}MQ0rsEpz(M!=C*suB^_wZ|3%2aK>E`xuq5^Qc z*sI6z;eh{_9qvvh>^mD$?Q%q)?&WC;yu6hU>$2sfL`lcSZ4tmTEg6}O6<`>K@uz6+ zcyz(DdC;GtM89R?`8k{wT0GVn__>wjD>ZTX1))tD2w5%*@CT4NGH$-sl_^q6QZN-VDrG73(` zWnTr46(2w`?`{%UD%FYD%Py5sHG!Ob2>xM4sw0&y`rFc9EG1Y}Yp)eCx) zPb$%I(VPuT5E{lqp9tdPDt5?s`H=rNrRyN>S8nwTJ*YJ$LGjloo|a6S)}FUeXh9NR z$ge$)5X>F8>A%c-#IBc@z7{HwuBQ_qTj8HC7!iK=pn-_Iqc<3DuHO{Xw{`}vORDo}v&^wTU1 z+k3juvM~{Z>p=+I$m_V89yuKJ(dHjTioitBlc!1PBY`wienBIZMbP|-n~rjnQ)bjp zR6CzUyL1u$NUqpf5Mg#;l4|_`Z((FlBE~HDXyW_4j&XRF2KIa_pt)@V!7xXj{iR)1 ziod-8Oj4^8V*YWR;*jvR7{PpX_yi&R^!*2y@QGj&HM*kbhV;om{hmMI25h_crZb36 zcvU^5wD%<*(cTf8h3AfSbN-=TsPbHX_VrwT%=}}v8cI7xVz4~8cCD8UWbR6Zh>T>F%A%!!?rTi|}O!N(UFnmJ4%TXAN$h-Fb z|IuE~V?vYyd7_Svcr4Z@KuMwK^c-!kdYLrtwyRHyf@M&Z`*uKBtlHvsd{53tShb&t zHKTJ5k|yKeCaYd@$dlsdLIQ(J;+t)P7JgoaOE=C(y&20bp4N~$lZ3atuGyfMusKc@ zV#WQ{3rM{DoNsuUW6;9b_?MRNKf)tjH5Z^leN>74Pk7|kSNQo0&TAA^TNy~*C1r+g zQkUv7Th@)+I^abdkE%Ob7l3nEl<<~4mF3haN$YX>)<2~xN}{329&=epz=JA;(~dyB zXq6qNKLjLEo^_rPQP9W==OUExi$0xaAzDeI49i_>J(qo+yip4$j3`v%pz_bJGQ3n- zrjniQ#0)R-T+aQHCWZMCZN%<4j)JzT|mnaGgmOvRrACRMc#hn>6Ym7D^lEQ8) zK6D)~F(HEJfcnwAmijbn3Bq?nmNsL_jQp2#+VH1j1^x z(2Pa}IE_5T`Fk}w-hJPDgFhL`lihOmV2+}Dcz;Y~IV2F^l@&P5$Qws2CsQ<{yb&o3 zV;z(XY9>>ejD9k4FB^_DAKbBcz}RmlV?8MPwcpsd;;`Wmiy!0oJjRK382CRKKj zp~7@qZp7GR=78vGazX_-2O5wvjG;YaT|9~{7+VX?u%bixd)j9E zGcUKKvy<9W=+PfeD(+#X&{qtZGs{~l!-)<8QtdpcMC{HD6 zQv*P|gJ8xJ+c!@g7yH4sf8O|PB2)VnyQ*q}$`AyMyeqBcir02S3BEl6yfnW4N zsq;{+GQeyqvs z1y08E0@qjbow}7FyeM|cfBwKFyc4uBiA5CYTqh-BT8NK9;CHY#>m2OU*E_)iZC{a9 zHMMAWDGx=5it5z6LH7H$?6x6Ym&9B|9|W?$Wa5&0N(A~~nZl7OsK4pI$h>2!=2g>C z%-y~S0S1~$wN{!7SOuI!h$2^`aOT4wJVJ!9@+j&Pg7ezeQ4Dg&>50IqYe)@paY4AN4Pwj#wc>8w|}?f*1chB4*(O zlL3Kcy?PNb@xV=oYhXZy69q|BHQRZd$f+7(^Czjr^M(;evMq2Mmr*KU&bB!Vj$@>n zR#}_d-s8e$K2yVnCmk-8^c9=Ag5QWDG!vdf<6gAtrV>{u_bm9WY~u&1oUf^YtzNw` zFMYiKY8Zv88|yMy5&S{c_>4H;SY~(nk?L`Qn3l#(Ej;VhuHALfyF)fvK*1&ZLo9$1 zmdxv}KSO2&&UN>)iZ+&No&NP0*TU8JOeT=q*eEx{Lh`l8lM;N`4c&TTAFO=BO>W(C z7QSM%%nUpLu#7roj&W!Ov6x4${vNIrs-%F~JC-3(c#)LlQpZ?K?>J{=row}#zEDG( z2=58sYc4x#XtGt-_x%LiW~akmC0LPl0#n?iH!-GcjTkH0N5RT!$S3B!8(nN^oW-4A zZ9$?Tz~&FL0Gvt3!KkAE^F?>eu-%^*^y`{%qLeC&{Ur_b=is}^L zh~iH*V^xSIn&6iXNa4r?@@t~?xefCy_I&3e@nxUM2ZH&bBp*3J-T_-_L?;jOW+e7z zSFVBIjWm-UwO5DOc+6PKDg^oCy6x)bWB;g%M?0GfFDdx}@`O$ca#C%a=y_`^3k0WQ z82Fb!gccs;VkNRvS%>El@-`1cmxS~Tv6Ph5sI3vjuO)!Hx=zPXeRCV z@$?jrvM>M=`uRjuPxXnDiQk)z6$a?7)~S25Y-Tn*R|-9|{_**b`x8$zNvnQ@!;7Gs ziTScEh471=!{DVQS|cM8g2%&l}o48(m332eJLdQ z=mH~yJfXg5O<7~LaNJ)Zd4E{P{hMD}BCXQwZ;=o)^wcWhX%AEunN|7p_oz<~v2%`l z{V6S31&!9CKvp~XS^G_-TVcAVU`Rbbt&CXf2re0c-5VF{f?{{^Yw>{kK!{}x^h}Ty z0QbSrlxgHe&eh z)C}nPA|U_9i_<>oo;ulE`l}>GmnWk-2>^>O0${+!PV|v^4^$eNRl7t?TXf*Of73Eu z58}QIL}F`m)!jV#f`OV9YA<4;cfP8K;1tn;yG^53(MnkPX(_- zfdZK*Ney^7f<9`eaUbp23a2-Nkt%tCqjSp9ptP7nz7_rVe%$StnIKjn9Wlwrb(X!Z zaDxO&8%?cu-IAAaS%0H_Jl2KKeE6|42uL(d4j0b1#q>E|na=C*j`3ur5`(iAWOjuk z3(bk@=rjS}IE{8mmqSwAX|QIVP*^ZuH`+de3+7Tbrm2`(u4?GtzY{N1FgCYX7fk$L zwt}Dvcn29JhbD$Awu|r2fPQ-U5}$PVcGW3MI8C>R)oSg^u-@gw)e4m>bmg=0vh3DL ziU-@ZIGaC6jRe(973ZWo{kqMXuWmE^8-86{gJ%e29>Z8L4ELA|Fmb>mR&4#_Ku&OE zEA^5WYEXb9YCWyZ29vuEEQg$we}Z+WXs}>uix+kYl8N{7K^Q3`l-HyhdzXt+7%bM` zqdV(r{)V@^i3LV$(;$Ppq4iSR4`O@kodBIwt*Cg^W7l0nC=!!jw_&Ew=_2qQWzqar z3kGlo)D5J?{;vf(Z%66ErHx|OR|A^gt@L9wJOwi5AMpPLwZ6ZOE`a&bZ z@2(iR)_4X&l>AlZaR5!^C~;EMlGv9TpIYam9XT1tMcq4Hc{%$vC(0kG*nw8_nlux%7Lu@I0xJn{&56sZskfq2h$5rwh)MI= zYoZcdLf@)d$54YJ(ha8v5_oe)gQ45v-qr^+9FiDm`uQeH+}}ng0)Cmadz{Wl;NZN> zhjk7CxGywC;Bfjz2nu9P}jF4DkIbwjm+rYZna3dXsx>2R|s&N-r?$5_@v z{Pm%4I#W1;OzUa7Wyab`a!UY17U(Azxg+tOhY?9b4%MCCd^bs^>({*cr3!&S(^xQz zDj^b_ij#Kd0)UQ}Sy2!U8$uqe1Uj^j9OaahEs+PB?wJaSk>1fPWv`GyXpla7pB1$H z0;Nx6yb1a094zF|xP#o@XK9e8SC)L2*k*r*EpytgxsPPUm-Zh>vtghb``X zCkO7#@B$A#^haoF3K?jl4;?e=&`@|BX;@+;@miz!Pbn37+ybTaGF3ttkW6IqdK7W4 zh-4A<9kE=p;?ZvTCC5$m-@G6#B)evDsT6&Yvqeo*uzm9EcaTU3)}UN>-1Z94Q$~EJ z(RyZ)2FYA?G`-V~M=b7R=Q>vICnqOZI(3NXC^e``XG_^%lJ^QH*AZZ{`V8qBiua=}1 zR50`eqo4s|E1UZM8}GM-CQz4F3{o z$)L8{@QRVhya?0~4zSVgz%{ulAarzzmob^~{|Z2z9IvS_>Wk#b+R z3*C++hOn!j+akm)ivvJR*lG?;&`lGVC8_ zr|+&x=0Amu;;$R_`MP5HgSU}CCAj9tP@qPTnvE6;cPaDjrIY`b-mJr`%?d|O6y^7K zO0GUm_8@0>TIVu4It4G%$bUtmJqBH`TgqWEp{OhYyK3TKWOH>q*Mt(@NIG;#mlC2c zW4CHUb;GVEO5C$ybG_-{FQWg9-={kB607lx5Jja!@CD_r9$7^u+XHmIs9-{W6qZqU3g!hHtFV?Tp8aY(^sWk3(7*AF025h3UMu` z%*kLulV2Tr8+f)~84siA>ttJ1ZfMNKryja9vdZxMC`Bxv+acl(eHsjncj*gv5Gi4W*F}q~hoCzq=%fL-6MA=wCqMv}P`Y;P zAxq8LiyGs=`Q`T(uaB71c%`^e5eowR+Etn&MiuCTzz#!5u~cVkQT|XkOd|b9?9b-rhxrqHXm*BK1 zIa$pR-QmoAtXR~N4s~!eW8uP%KE3C2#*uSQy`4|H+myflf4X*m7fuE$VCactXOL5r z6Po;eZg1I|eR|~^bq`y!5uwD>4aFW@O2Qt^6}SD5D%dLu)o>9~r`gAbP?#aLiKK>8 zQ9;ry>)h7Q9p_#D$tE(%qK@a+%#+sb4oGN0eID?&ZoXp|uv>abYW-6H-sTW_%6{_VX_if3_V4;k9owyf+mDRAGR^>0p!$ z-AxClcm#z35pEq@(lN{*%i(d=nn825+aC2a5-tHeH3!PTfN z6UiYdU-6|@R}<^S8c&3*fu&?HP1fdD#Cy&53iO}o$DHG&xJ6!szgJ#S)P8QIVTmw* zn_>b)k@wE+!6GXUkciC?{2aXUw7qJ1n#`1$6UQ(V8Fb^R4)>*B_ZIUM4O$$xj!Q7Y zqfnm7>;0h>oz@~GFY2Y)CcE@~+{TM*I{u?twKST-v2Zm0{tKQKt*T2MP@aOI8_F?w zV4x4GgrP@ZFvBws38Ps{OnDM(FlDN85#;+To&q4{8?LE?-H4T1?^O8FoMfg2T*Z2p zaISNF?pe73Zp9!STFrxPI^!*xu{)p?K?v;n`oDPqh)*QNn-66n+J}0UF0_CImf=(EM;!vF>9j{{y#Oy^?tN(Y) zoX58qh0W;Ss>J4Ce7Y~p5s)k=`9pT80A?0~3+>fNe2v|@6~zmzKX`z|&ePC2|;$HniY^R*DB?EZ}Plq>O*MCqJ3n#Vv#MQi5-YM-D11(G~N z%rIbwM+0QjH^$S~?a_m)t&47>o(H2J>dN!DoCT@r9tq$^zh1=EBVC5PgIE%)jx_io zv>0^fs1Db+Cr*q=9E2wO{-GLqq>@zr3^z#Q9xT_8r1JM(6;z8+3{`pcxW3DDQAOY7$wucXp7GvzQgtO6UDBdZwMjhdSJP(N_yH8oPq%*P|THhNg-n+zESF{j^ z#I}kQ^mTzH^NZA%eQ1pm3vY3ZhznjkRW-qClxg8JL@Y}9^LCor11Sd8t(|qX@f-6) z?ELzRlRDHgE|9y03SvDSDC*QI@SbM6e|Mc6fTbZQ&*VJEB3%c@fFOyVkF))(AgNFF zTV*Scs{&ZdY~2k{dN9d7)I1ete3EeRVzJ<-coq1%GKYEEy;@U>KnsCwom#ZI#5shF za`+|{RX|9pminlO_*Aa9(rCwn3W_$J&K+>{rggSQmSE-Hdo6#E#ih$y%MV1!xVAZY zmgR)~Ri{9Q3^++{(A=0fyLMRaTvb+Obq>x0TxRUj+cI16 z&@goW1;=Hc3p6N{`bQ0;@b?$%mV751*wk}-|1It9fb757TEPTxTeDie{1X{fFosdO zyWDwnSr+&aKQpl{)y{zz;qIA~P)HS#%C=sIwx>%LE8gy>sTx`CA-kg6f28rNOaRt&8NYjthDQ~JfB;{>de z#Jc+h=m`Z0Lc%n;fqNL^Uoe^sdLwiPq`(MurLr)Fye2qZr!@zgLxyCmnvoK4DBCJv z#~S3iM4G;ziIEc!c6+On9Z4iH(G>k{U`{ zgGle9XJG+>^j4IBZsSQpLOh`0)FJ8~X7CnPcQ5KmX1~1pf>Wtf4y5i&(di=Vm{xc+BZm+^#;$0#K>=C1vj6?9p|4x%4fgL&rw}zWCWSQwKiyi#` z$mgByVhZj>-*E)ZaA9q!sFC>O4g|e?jZNLmX9$g(``#1-hl;=#ZWwqazD=$l|E8%b zmhV=9MEIHbEAN|BKDKz%Lw*SC|M#9A_A^zvm;yz&I;9zg(3~MLZ**p)F+DcBE^s&+ zr&(ItHpymg$mGWhHZBU;!82g4hjKeM1&4}Ue{1l(igx=~8i@D7{5VvHfuBRKdO;2- z1KqRQuL<$>sc#Y~8*I02qI#~XedMM?a2wl}i8o)t$lvac-a6d$b=DUK+J_MPSTc9u z??q2CT32k;9v z|CLbGnh4i$BDWre)Q8Q(cAw^!|(nXyy#8gv_EK7(JY*MWg+D#g`~>YI=T6Dlf)Al_7!)-@=M){q2)Nh(jf`_ki~ zD5HD$iPSv~by9uw6dqrAR5ql*e_)G&M*TIj2Nr{;P~gbowktR>Aj1%icM)VLFn<5v zlVHvDMCd9VaXiM|JBH7-a6`3Exb$tt|YO5#tR3-$9Ca$eXn!nvSa>eQM2EZa z7lKEMylv!@n{FE48G19sGGo1Ihan?1JI%;H8q?pIne579`xPJk_m{fofWiu4FAV{?v{7zcPyoCq)qX(OJx$fj$2dgwm_Ln}l zz%i_PP3MyMCkd{XQRz#MqZ&gASFV~N%~(-Cw+-`Z$B?voA=Q@v@*~In$=BtjzXAPO z;N9?3go|T_TXr5O^(F(RzX2pqKmkc}m%$(Eks-aWoEaxItp205Swf?msogdaP(rG&WlfH-|==6L$>& zI;6lWnp%^%bsDk-Gra6`lKrxzON<2`3Qj?yGtuP-IR7+_pi7GC*8}a4!vZ2VYbt$5YD2io#Nq^1E?u2|QhHi(sdj5tilgi%< z)Jx)Vii-^+Sojr#c z!uvr(N~G4|+ozw$K29Vq=betw26At7F=}6!tvh6rJ9yzV^nYkVN~KqSBRtv?V1(T= z+K(fTR4AbdgCca42Yzd9)Cc&5;{k{F-{ji-XCBlKRxLHuIA*Ehskim>(4I`Jx*auc z)SCaq(scly6;3PC81P~TCMeJ|gTaDn!Q~-i;5RMU z2?8JZZ;wC@)zA@yh5yR|k#T)TIYJAfIvb$F7{p;fg#v=YRiQe%v#p&OU7t5+d1Xh| zmK(V`j{C3w;@xpYXj4sFp8W$k^U6sJ0x{2PO*noft2*K{okExM5i5hbpqZr&TkpK+Gp9`)VZ zABP+lLg(zq+<3*?`TrW6dLI)THDaZ(%Uy|)=H;R>VQ>cQ5|A^^s>QEX)Rn)H;>=7v z+zP0%-vZ3r#G9uTmcx(t1_+_QXxbb{eJOVPSz~o?dN2O9BD0co17jTA{C9|V+lj{) z&uKee-cS6879v*6;pjczIYTp$;<$NHUQ&h!#?abvQGsLqgf~?}irG|`_xc_j4}*@1 zq$JYh4e9GczHZf0<*S-(hOMT=*Y;4tVL(LDyE57>{(%)>;bysS1qGD)dZk(9S24*blJNgsX_CpDwO>S$k%=;Y4Ye!rSLi=s9137By|(=`ZHOxP&9ZH@uhd z!<_Xjs0pfpMqj(&7*4$>4S*d3g@jMCmi?1;04L%KWL)hZE17TzCUh2p>^V#loLp<7uc3;U>W0r~&4;8+_xiPcLlqj%UO#ZW48WmlqKXU>0+{gtil$9;U) z>}I8X$6i-Am^nY5v%U6C9D<@4d?BT^Mc!1PKq`B;V_R0*L<4|A6-7D>-l|M0V)a*; zpd1itjNV(n`BBBg#A?0CC*n1mw1%zPV+S!!*fT`tJ=`;0OlQpAV_Ie^UQeZFk2tja zi*pY<s?(Txum!xl3dw@K1GZ99u2K9 z0Sng}$)<#?EB5DlZkn*drgI3hV~b|A9oq&t{(j!)Zn}_Vea%4;q}W}jL$jEX9a=(B z7r6>upyHiO?ZRKl#oWlnVZg78?Vq_z0?9mko-ceF_`cnEmi(;E?Xoy>jAjkGANZfQ zxISERtOhOqZ+9>07&6i2HGIr~;(yUwznr{mxtEjpE5&4kf)i_-$Woktxl;Ez)oAj(rKeJ}q!FmToxNDa^-U_~K$qNdiW zl~g>7RrL}9tvsr`;XsQQ(@W@tb+u4eWC&xTeCf3IlQF2VjlyWs1;TPKS`WLV5W)`P z5OKUH3~eWBp+drY*f!S1r06RwWveU7sq5sS+?0>BlX(!_Zl#@$7kT5u*QggWpEEg( zON+-mgZ5R_n3Wazi1sC#+_w(&*3 z2tjj253SjV7KRvJ4nrKozDzs$FcsvbK0C=+vII6UG!BCd0<>+b?UQl4HK1))*ImQD zHk}?v(1yrs;;c#TbB8=&$wP_QQ8f52QU=!qRaKKJ4R@-gCV@7kh5`Stv49owE3 z^5_%l>U$3QFi1LMHTajAQHs~qHjs39p1%An7?mGqRmXo6nN-hU?l*x<2&5TZMi|}( zegDsc<7?FyCsXGORJd<08u~nCNGP=Da^cR^WFES?MuHcabC$pk$SQ|HCIQ;k)%NMQ z)f&*KN~&S~G{lj}SwE<)hfKdbVnl{A zV?oOOyIjJFK$ky_)hp9v;wJ|Ck1JDwB4Zzk;H2Sfs4x49QDn*8$LKolq=Q#j3l>24 z$&?b{BM0%LV^C+te=E_1MC{;n?yxA}IODy@`2-W)x#4+Hu(0$$`B=SG42(5fa_6jL zf;9U4_+{ntIJxjU)KWW7KepB_fY!AQ-i*l8JgL)LJl?R9*kAVXyc1iU#{KlEfr0Y# zm80qua(oBp_N`S);}uq0D7u(*m(KT(np^pbLG!@OuF-VCzZtm&+gMNb0aQm%N9hsu zR)PzlhB}rB$#+db_d>**RD=#h?C|q=QLwCr{Yi$Tja|Z@ zkx|CT{s1dAYPO_VirrirnZru3Ke=1P)Bl*WfCp++*y;9pgcB7yqtwxAihbdDiPg@K zUl#>x8P0Zbm|gzV>B0c<`}FnMtv5UI^N+MOjj!hp_akDX*JzhRZ9wJ5%tAHR7d>qD z^QWbf07LI0j}8khHhYsm29=pLx4+37s#oV78M^v;zb4}k1C~7y2vDh!jqm$WLDpNeLGwIN_qXmdg6Efm84HB5~YZdiDkrDVR47BpQPu; zH$8Yr|LZ>42l)*^nO4it`_Jd8RD8};k(roK z7~$5lGsqjQ(U@42w={z*eH02XY9IM031N{%*nJ}Iy2uk`2;}kqZk#7Ke_KRB;%>1^~Td>HkPA~vpxHafU5$cR##gEZ`c&F1TeoT14B$uDfU_cj! zf~l`Hru$EUC_@Exy?UC#f97|Ty(+})ew%$htJH4#*Tk$|ul{A#z(uA4TL6bDqfy~4 zgz^7Er3d(iaq9FaIyMhGc`#7XRrGpUFgFKmGgZV7s84*a-5|Z!(Pnynk-@6(QmH!O z_Nay~+Qv>TNiBD5goM9YPc*%qWd!j}yN`o8C<&ygAY?Znvm^eISK8u%EeK<@_;Pf6 zn(&1V2A(BC_B}_+(($eKOX7AJ6|VBJpOcp%U+pob8@|(&=x)D~4*oaIR@!ci1GlYe>``#L zH=tC48Ylf%$I^E_4a@jP3fEKOIcE&89#H{lO6G}Gw%!}hdMZWfE`+c`aq+j$AJ6}f zyl?)lwCUQ6?T(#}ZCf35Y}>YN+qP|^~`|0IMH-mJnd9vWeBz|VOO z>zrqcH@Qw3ks8BzmjD9+QQ2#??~vFEv{#^#j9z4|%^GvZ!rt8NFD}IaHUD zTpFJC#L!M6$#o5%db2Yj)th$bo{tB#`bfO5u`k9j9D*DIDuU^s;J1(7Mk z>*|%cbNJ~=k$Ya@!`)s&mvrZ22_|)iqVZ)SQU-_s#r9MQ6gac;y=J@7b-f>zMN)s_ z2h)&#tN+??zSR(@p{4YpQcY-8y5j~sbrBfmZZB?$>%1Y0W2j}Gjf;{+d81ia0JkRH ztj9EMmfVYZR}k;wQ1U-L6SbAiqX!JrDvEVAexZlJiB_GF;O6}E%b8pk_fL*dLEWa+ zqk-H?@ViCqIS-FXh4z5 z8xV>0wjdk{`!^m6o=4P18^VHST~j!IJ+O^TG!pP_Lzpjoh`?y>cx(u<$pS&LpErX3oS(I00)4MYEt2zuxe`pt$ed1vM%GH`zKEz~=WK0RXJrE-(?i*LqK6qrW~U z#ARX92jSbs$Cr5_%o(xH9f%J!>GS1w(u}s1iiIpCke#VpIKs7)z;=Ci9BUQM7TJSM zd|j_+B2`BX!m`S*FS}Fary#c$VV)|yYjJZqw=y z>fU+uGR069mUCz=Areo_p1gzDEGm-NF4p{D;^ff&$D@wgmRruco$aFAvign<#MVSt zr?}1F0TCc2TeH<^f2a7V%GrL~qjQ+Kra%JZ8D#4pWUKR(NYNN7kpnynN@8T)KzKzu z?YDMSHj~s5S+Z{ZPnfuRnBk}jOx-n65>L5_SDLy!25buaq>Zof&KBA8nH_QY!eWwBz zuPB@W+{o!t;ArsMlMtI#f>~h1ymkW=!gjl?8(11Y(>>pOjxd(kdUXw=s0EiEgW3*! zrwgHLp><}|o#ik8RqbX&?sUO3ft#0V^D~WtLqVS9G_KIsT)8s$-V(fNXJJ9f!lu!= zz~SsBBScF_r`(MbbjBAPjXLg>YX~C`|2+Z?r^MR0vRns8Ry|xlS|FO>ftfh7$X2O; zjxLEy_ON}Zd?E{|SJo4i{(jB6c^AqvV#Mbxi#cXsEU4F*B~UWs*u)Tw4)6*&=-ceP z#~w}jWwYdpaQ&h82H=W9{5v8KU)JGY>7K%^NFSl_NrH_wK(`fLp-oSsQV2Hy7MP2# z$W{tFku98ELGw?i2}vRYZQR)PU(;QO$kZGX+L9~doa`A4u~7bNSdZm)GZo#oOqfIl zFrSQPa-BT}pZx~->qZM`?3Yq!D(vpC&)SW|pfGW^W9|Oi4IiK+`U3GY2F{|rA zpWX_5LO{5X7}LiN^@UILCfR)JLjEAc#i2PtD49^b-M4a6*-CDT&R=rjZx*Y#hTeRb z?8L`Xg?t4co9a+;N^FfQ3v_T~)Wf9*5IPu5Y>BUNv%mVusHyqDl=UI+H>uK|1PCLn z_-R2W8cZy);mg4M2tPC!N)LqRXwaDvhJ78cX{HD+x)PpFIH?Z3hiL!q3zQQd-pvW0 zaW|X)5Pa-dL&J6TW72Ekrs65S`WYkUYFOEs2rxr$Y!56a*WJ7n9aXbkGKDV2ghsf8 zFifk?m|nrjJDe^ulpAFBUmH@N{RBgmpc5@7mY#MG4MeqoM~x8AOjl<99x+b!Ugsw$ za9aXO+bzERAwh<*sDnxF+MXxzWlRQ=z*{%v{VAPOrCO=P1S>Oj+V0z>cV#zKl_LJnxdMa;N# zLHn1xlWP=X+2SVA#_UzVFgt!puDgCIdJ@3(k4Q>Ngj9kWsGpE67ty}`wTI6{xkg5sIN(ZbYc43RW-%Q7icVERmxaIjd)V~01i_KC74ZT zA&BA`9TC7^p+OZ_v28oCPD`L=Ka$IZfMJ!Ig8xJrcdfw{$S~s>(qa!PClCggQO47H z!Tu(tT3e6?gL(?rYR1Im!^a$bQFmcBa1E*cGR_I(H8>>pJt-L}f!iP{MTeXi?RT5% zU;L}ssX;j;fS17~3)&)X|9A;tCbtKNQxkV=v%f2R8w3epj#*k9&{z$zn7{=OW>UI| z0=&2Z<@Y*IL;p_j^1=8}aej=j)#@68pfzVWBP31{pjc?~Mmmc~Z_M|8zFP&)Ib-FG z3>6r)ncQ21s)guN&K?iCdK6 zrY6WzAi-aS;)=l* zIskC}l+GAi_}Xqx?0(f(F*`9XaLxZ;B2%?Tp;>wWkR7apy$b;jz&^07Vy# zAGGDYU{|X^dE%M*r|IWC#4~3&Ru@a5nTxv%%KF($%*Iuj$+wtm{o-bM?@~K}mT+B` z0GPfdEN6zmc?>h5g2yKUmXrM?#F#iJUN0WNCA+e|;Fx)xk=$-K++ZbqHxGMOiNw#&*ypihF$O%!@ZRFNy%YZ=-2QAM^9 z@GZiYFs~6CCI~JX@ay%B{wRDLf@1r1$NTw*GcVW0XM(<3?(1$k1z9qS!5n+|MpTh0 zM%KG8*$e1(7FZmS`tfY$Ki05ktxceu%wf5@hb8w(d)~m*rBgRij%me&4#?1n!&-5z z%;;=kP3nd=_#G-mg@1{BB53G=)#qMYO9g$D|E`D3xe0v7UfIBR!2WDS{%XeUnfCqn zOwyEK8fPbLLEMJyu$c1oU0#4qHXKx(D~w)}#;`hSU%&|V_HBMHJDqVFi`lcd$*-Iv z&M3)V!_V5NYs=V@({cE3FqHr$HFRkp39Sgh($r&Z@jx0KXz|y0WR-E3qqo)SY4ce? z(VXA`!tK-}V4YJYw)Iy$G1`u;vBAlb zdJ)LQB?JaWY77n9jtzU5aMA!H`)iXVF-`tO`ALyl6eg|Um zoI6Rtmwzy9dX>3^5aUKjh<)6=X7?9O`ke>gVj$r`%LBWAf&KWBXSdm-tVJEqse~?0 zL2BK4`y2DQ$OP>#V9C}!oN^x~ZR4>44j#k+z1w}%VmJzQ*da9Hw1%z0%F69Z*89p! z6ug=?Z1`s^Lc!9T$@6leS-G!`Uv8R>XyCJjIE7dBha@eLO?NW}e^Z|-fe>0Z^iH%N zcdw(Zh($M&emkG%gX*BJa+hO^JF%Ahd4_-|!6%X7ifU>`P`?-lXdGHqLVVw1;F}>j zZ59K#;#)Yu85=G16xqK|PvTYma7JxZwJv|{yY*PtFN*?OB^|7ntR1fN7R>FIGVY&n z$zb}qEg7aQlto)OsS$?(#DF8eWFbj&Lh=ZW!`}+#q|pYU6`QHMuZpPgfvCWViGS=n zTBdZ3$X}Zv2Ic|9i}#HYC}8ERU*vJEZKv?NFxbKOmm#5eoRK;+OG$PLdV9Yo8#LBc zE8cBtEw*0mn!~;S{$q=9MHFiPHo%rbmXgaAjwv&4OL}Ov!3KU(skpZ z{ospF-T0W?HwxG^H#I0_{t71Zl@P;&E8}78h z!!>IyB=xk1Q1H0_Ekm@^%QNC4iy~ZRj zxwA&GgC>X#y^mk%TT87VNvH!GESDm6e4sZ{yHNPNy_KB&5KuCvnd+->11VW{4$~ai zMeOlG+5K(>`gNnB*S77#aG|Ve!)Mp#Hd8+?o`BQh0@m;E!re+*b_Vg`Mcx0qB~p4; z_PzdcMHv^CRRYkVWZD{tn^p^yr}g`}@kOz~U#!5NV!G;OrF7qbzOc`xiu0i~6C#Ts zgwk&iiHUvgE}`>0MVG*kUnu7ZVTA4qKGT zQ>cCOTk*!jSTjW%uy2qE%Z4pC)ULAT5_&jb@>H;(1>u`C3AZIrw1u>~jJ6jB$RH%C z;jbq%_i9+vDWZ^}8d6x7DMC=84{ORbybPh|c1+1ym2 z_=UzpS6SK5oHM*H$1zU03?@W6WM!|+vbM9jU%uS8e%+MCI;RsN0mmy8;9@G*yS*2L zaRz-*SZo6h@!_BMlL~iz)&((jnkTnsJl6ZEh|R~_3e8RuE)~S9jy2aQU8S3#N}PhK z*G0hw_*+-ZcVRAuzVB|au)xChChQ!#@7Nbnwcmv?id(L}UvhDxfzw@lxy{<;UI;`4 zmeD#)-PeUs<*CJT9P#SCsW!oR-Ax<9R0;B@svdQ1qu9Ccg9*NG3q@`!s>O6{x#t$% z7glJX1E48aYu+(`AttVPdn}^`?B;4-G}(dIfLHL$Igvr}7t2x-E7UPKd@%4#rH-;c z7~g!)_U7SVdf%XZ!EJ%>a2ec#$@b=Kv^bJ-ETegtcxvtnSxNz-Vxg^zV`Bz@F%kgA z`LqgvA-l?-$1YL!f&yjna~VldhddNLzCNT2*v&6n!xknmzuJodG}>7t6myd2SoqY1 zgS#E{yK~{sMoswpIx;LH05|&du?~@AmEBssuD5ID(Biyq6=p!(!b|(NA6sFvh;tnb z{&^k2!_(=hf;RBnIy9dN#Wxj+9Inf#6RPhCIx0u)S$STKCM-M{T)C6Ik|?~i6|#Db z|HTEFv9@{C@N(E)7EwgjG( z;3qFlCZqOOh!>U+4SgLR3j8@r zRg4$?0mqJSh7*0yrIIdtbP{B%Zt_fOWY~o~!DUZzE~ymji-lw6RZQP5GLsdkovI8g zyE)gis&Bl*6~bLa7wtNlB&glvZj_Tchk7|3d$ZBtJ0VYCCPB{U`f0< zQ&wy-5<`XH@O1UM`EG?51={p5#-NjJBgGsA|2hi&ysHl_Jm7eq%fN8`Q)QcELWdbE zY;W`})X5vM4$`cCtl5RXxq-5YYttdo{-V8l1T7ElZhNK$sf$VVdA{UIXFY49-LZ5B z6jQ0QIWNBAX?ZnQX0P<+ezGlY|BKvrf1UH?^|u#+E*~C!FUHO5+RH0RPbIgnCrx3f z-_AaK54>cB-lerm#S}HTqb;W{XAMsn;qs>{^1#@TvF}4ShI*yz)|1%IyF(hP{0si# z6nF!%2$fr(LWFp*EHYuaQ(KrK%Gd~w_}Ti=1&!os95zIP1=U#?CMoy*(~1N*h4r?7 zYgv8thR6tcsf}eB3PrOf0}HD3k7a6!>4)@Kt5evFC&6N~-xVkGw-L#13C9gXf0fNY zk zK$`Y%4MpOMOa(()k0R?&T)QS^`kuOJ{w%8cbt4m6@2?`KhE}fL!_mX8)?c`}!nM9k z?)u%m9e*oc&7I(ubJ5_J6KYKd7Y=n}bkn}J^kk}s#`_hB4%YWOy{7I_S*w0ag0_dQ^T`Gs;KvSuc%LGRTZ!|Y&>8uJcw5PK`@>rMLhCxmg z6g@$IUs#<~!a zaezga8746hE@Zhc>oPH-Is}}6ux$E)&GHTV6m2F)(b3TYywYpPeaORPRo-$mi+f|G zcAg~19i241^pQnDMP49QFGjtK%%dIPq{U3MWGLZ=K<6jQJLl=WqgW0Qh~w#z`c7vr z?^+G<@mXgS{Z$&dfc>jq;AS`0{PTS2Gn(hVEa13}V@4EP_wyULNq?e3|7m159U{1l zzWP2pIUg-8RBcHVj`^@;_x1}U>$@0Ru`Z@VxO{j@JvekhRjq`PdMxW0n*HFLs}9`O z%WMb{&|`7owEneU+#=(c_xB{FsA%|<&cK3Fl~WXyVYk;AY}HfreNGislE4hVlC_uh zN>xn))ySeqqHZT{z_~$-1Om|MI(`eJMHpbTMD?oD|wyHpg|{p|za@LjVs6yxad%a59(Br~a#|=&&Jh{Q&P| z?hG>02nG%-Y{+Wob(%S%bN!Dfaj%!|Vu5&Jvb;6YMok%A)U92 zI}z}65R!4B0gg*fz=Gw23N9B&o@C=#K}1H-eAClsqanJ26(DztbiLT>8zoK*A*ib6 zg!3XVS`KHyw03uoOaax@a0`uM3S{)<_t`1=Xeps;hmhFCAXD47U-YrLLx$0~c9q5M zGj3YiYmDn%w{Hx*)`tgjZ#zTzCO3f0RQn0QsLo8)k(MeAek`( zhb$R@G(NFf7Z@qj{MBLo-cB>j(Exs#Cs^LX?SfBZmOnkk&2e>`@iXqsk!{d#9NEyc z*9AGPvARM)HSmncEw~epvumf}d}sF*sR}Kdf|fpQ5ng~^-x3+PBmRaH^NPJ{ciuGtjr(uQAmus*jR`hA4CjxLs3 zmD&1`4o&d@Wk}uQ>5?Zcd&Rw;7}juZP^x+tWD+Ka5+tWXcSp2ss=R#Wj;VS3c@GkO z&cYo7Yi>3pl#}f$z<$ZBP+r6xq6J?Nx`TG*a!_~GX;kFK1!gHaQhbP3SvTb%i2>r2 z8kUL#z;=D1Hu;*Y&{ZAlbIwir2|4E?RQS9x^Lj3T2e4UDumWB?L1?^7( z*KjvzMrfRrj?mRQ__V+(XstWp;{VHjON&HTESQorI6q|!4IfcpeVwb_KCGMF+n%W} zkDc+e09<=0<{7p%efK^TMkG^-OL~DDfoA&4lcV}Xvk%Ar+f>Q=E2Zna7%u15p8faB z1NFQ(dirJHpJp$O_XtFBm4c5*Jl{5AG3PzhVja(S7#TS7UT>%D1$KOk)?9f0GZ8Vr zCn5!^L{U%Zkm-rY^am84|2c3+R3vi@u-7GZc8BQzb0B|Rh zr=52ykfM{$#iN)xA4>$~=*1Y&Wzc<6nE3;EYKF6A2s#&jzu>KI($5bn!_#F;9}W;~ z+osd)%Tae%P6uCiGtyok^lo_X&8~&edBGqRr$jI=h_Gg;$Nt7VK)ML38#`2Z=4J{h zmoQ)gg%x__hrIst4~jqr%J24n{s%(&5#^R|M~*kT)W4pr+Lc*z>o<{vcs(@e3-wYo zgaq8XNPQfA3u57$o|gll5%eLtqg_stfCYR)<&cb*hh%D5$XGzh1jU=fo6@&^dRcr! zE8x*z5Az)qU;%Gr@L7;D7{x{xk;*qNN5^1evRrOGSCxTs?T3|tWa9YePmzSExqb|4 z1W}>gF+|-&iV6P%8U4hG;;YNqbWDqcOg3%JJS>J5{=5oE!Z|QHC^+(oSlGJ%9d$YY zc={@h!&X2D(nyc+O5;(ZVz>?}UPuczI#THZ--|N08T*O;=C#fuWH;FThqKr}GJq2) z1b`OnA8^CBN*uc$^N$|}dyQI5;UH+$5SAJDj1DX);-}|(CgPc6GN3eOUvZN@G6iZx zUC7GeRceORDSIkhIID`|s(93x*{~Ck1khZ95)=`^Srt}kTY1tIz zPapZ}h-~7=XHk#4K`% zqaC-=j?uQr>{@b1G9qj)WyAC#P$;cb!&{2C{01wtCydWJN!DxCzS#9a_ zs(&6;L`5_Q5d#^Rbu$10U@5D*4OF!Y!79;pCl!@)C!PD*p87G!B#(ru%ia_$W2r(U zfwoSzHD_0lSSWD89s}2jHEHL*YU3ZjX4VTERh&QoOT%b$SaHNUJ{O{@5+AFXBwC_G zc9;88;i@KVS=U3P7_m#Z8{_Y$u|uY3L7Px+m29;WMR0$oH+DmewPUpfX1c_G8Yfna zXKTe*X<@{g?=T(_N$<$%aZvEn^(BB!twsR;4PWfAxsSa6@v$~B+m)%#i8`*&5xbSb zhQgpgr1N58L<$4cFLd8?*ch6-g%SM~0MPs#`1fv}qi7(2-8nOGNg~0cB|gvYJ;TnO zry#?Ci6V5~0Eg6uCv|gSQ@V0ExN$n^7E-6?QgMngaRzmuHTXba<32n7(qyc0UDs`m zxXr_R!-x&JLb+u!OPnx{LGjhCI6i_DU3^S|jeVgnTq%S2ccZ7~qlG51Lqn`0#OPcO zSo>{x@(ZO@D4DL@*_!{3$lHSuU}A(a1Oj$-Jcxknf&fl1W$93ovj`861VPX`^;j}| zVcCZAa^rM$Tql$&E=I@zu%i~)WinKmkZeSWJf+ePyG6PuxICbF#b;`I-8?2?6?sn` z;LthQ{WYdk>&s)Us&@lXBxtLXN$Jx{C|gv|{imn=6!7Mp6jb`j3q+n!e!=~0{Udc3 z_Wfg^JPTuSr7Gk2umppBsP(fK$8nrt9$$!qT-)nbzgG4ecghJ&qD$pIRoP&h#Noo6@fHJlBsj^Y? z+a`!Sp$A3%SeV*RxLXqH+*x5CH224Qb&;gO>>$JwgsfDoadIeNBvC-TW^*lMCN*(% zB3{}MNV26+fzo9aU^e-C6;KojqGdrf#^mNp26;g`Xb`X@qPYFDqRt zp4skKbW~m81sJFyQN+M2#DOh97mT0d$r5U});~bAE2Fq?OXfg)Y7PLk%HaI>oQU?A zeqr1NsI;YSp&!kfYp)vu0OvrgmKfN#stq?8Qdewy4Ik6K{3`IRib^LR{;rrKl;qsg z>mo4??@FU~=P?=KLJK4z=_~%Ttj$YfP)BPagY=s%X>Aif)xfU9!RQl-Z6p@aBW$vs zHvS_-`r`u!U9T~u{niHWJj9xR@VY>+qREllqOeQtFh$;S6XK$<>yZK55DrI0Z%2&5 z)ZR!r10_s5cJWl|RpAR5mnjB$dKC-AQUOfR(oala4^An-xukbfw{@Q(6`3iDdX&S= z98qLIVBUd{VHYYLm$7)5br|#+NHeUP3eZ8w-A|uWr2n4{1Advh(2XsoWjxUD`c!0k zET+FrHfgH`_sz}&RJ_^Hw4@=~`z?Jx$ee;ytfNX%XuJaoWxWAq5}EqwR%-tF1pNq}oJc8lK_U^Diu>66{hofbCpyW{3Ryfmp$J>f$eBdI@-jU2X?Wt1K?5uhY7yO0 zZewx!CC&qX(X(yU*sEsd(`OV6UNo^KWif96_4K9DH>hb>qs^2N)c9CeQ7R|v?X|EO{X5y%{n1j(>>Y{5L4dAxZJXlaVEi?=u4Z{E(Mat zIHCC5UEPLN3&@-tu_ zQ)uY9pG5k@IL_jB)i_7ZCtmX%`oTFbf4z9x@vX1l z{LOFg^NOEjut|6gM60Sn|LY3J(CrM8&))~^$NVs(AAsTB6B7V5{2OBU8^Rx^dXv$# z@G1i^o3Mt-;;2x6FvZyJ+bPm$4%VUrgo_RZ!mNG&(r0)C{iS_XX1-s>N{aNJk~*J$7yJSG#6E+)BS=2Aqn%A)rdA5QP6LIx zs3i1_D8ysJf5`D*#@!Lpmy5(9<3IF2`m})i^3Ar&3)*a&i1%z@t$iP(zx#H}Zh3LL;& z!~Jn?+~7VOQ3aj8PUQ3O?9e-hT#41Qus6apgaZ)Z!lMe1_%QAeSL|XGI0C~W^ru0s z^#Lmb5cAF60zgb28c5rA$B`LDtyDd-Q4QoOHb#8Hzb=TF#9=TAdmn(Qp;{teKD?Ki z9n&Yvl(_9;sAlm|z)}&#?u+CPSc0Pf*;wP>Z0r`9zw$L|o<@1KHi#4NK4(qU^y&VX zPb=>~2Z?rdeD2P#z0LCea(^i_0R#65MTRc6^b+ttiy9z)h(}?6ux`Yxu`H%$qsr<4 zJs*s3)D^*j%f`=hYQ57ru`QE8d#F%z{*&&i)K~!7nQ@D^Pvr&s?t27Wr$@@@9~1Ry zQRWmbiuZzJK^5z5(q;?prT+(K{Kp@91K6J-E^Mug>a6910Z$CH{@98dMl+iH0?zG* z0F>oZ0t15fc|g#IODh3`n$W_|D_t=35Is8uR3BQ5qFm=6(ygk1 zS$^B^QPK_R&{p9bY2#@qc4q)s)|8|cw49$RDXxwF`P?o4>gke^=bd`wyNQ9Frm#%* zy?>J8Epgj~`v5%mm=~HOJ~GqR&8mzC*E|g7p{te=o9c28R(JjDvFa*WoJ|J#tgvi( zkm?J@RD2O{Q+Xu2TT61z)WiG3b_TARWO*=7zHbB#>!UeEKFiIDfm@UPMsv4ScyOjO z@rNa+SMGP$e=kjJf6xOIng88?0%sa*V`{)N)~42a1BWpM+axS`ZTMMZ#&ZYQ&lFe*3w(|CIPOc!-MCeqFkB&dDg z9RI81_%hUI3&Mvq%D)h}=vNyjFp93y;a7`uFQWZKQCm*RztE zU%TT-s(>cvhA+xF<0#YUF`vHN0B`AZI@YJ}9E-e#$fhR?w{APkL;DCvPcMr}vz7|V#95f5DU3kyNEnZwn_Q0ypazk!{~PP96Y%U?>wZg--GmO z-#W|ZDYi%FntumCKfv5p`I6g|ScF#A$o-jTPmwqkD><4&b({jAw z=8dOnKFg)*wj{6LL#X=2guaAwO}Ubi+2+nUQzw_Dz*n)% zpzac>ddZq&RdYUFMtr~mm)eH{deQ4{Nm+xp2sq*vaCmFbo<{;s!YnZi+9PQMQR7IsLKJ@*tt3^lFi)<=mw}&&U!Jd6}fNLj&6DyVO zJwZ=cZuq9MYfcsGWTan^fiuiB4^!ovlOKQKv;Vv+mudUe9{%(`aW65{MhoZvifqDk zL(|H8IknB4ns$dR_4K|C3>g9RXgD^-^WI_3FO7D!3g@?qt^ol{5ms@ zHtw6Jo4^&&iH*it2+5MR27&-Jy7;6m?H8BQ2mB&`iyo)z%aQA)+TV;DzS)rk^Dem| zs{EI9zLPU`b6$5@-Qz27HSFJ>F-OHYKSs(GGpco#yA!9+%#b4tppyAIUKwdinYvTL z_IX+iZ})ejV=h=o8xQJ0)+>>QcA0>u3bAek#pmmnZT6USCddcYM;qXOgn#2MeI}KZ z9ZB3TvRG7Kff?2?`W;GIeIA=!XIfy7E#UaRoJQi(V_uCl)daGXWh5U}I#XGDzmY;J zYBp{o(ylU}jv9@;Nd+@0o_E`fixShOuE%DV%2@tUX#jf)U>?fQQkQd;BsNm9kIBXc z@jtw;S>DKo_DP*BV<>&Q2eM`ZE%p1QVC@|*t{zf22`NnED zH*2*g7hRS2vc^|>+w}g{@`>2LD%P;l#o4mibXCJ%ZKume@ABd35x8F23+0WY7bt|u zN#o=I*Ou+-enJQtI?EuHw{&w!o(AP}v0Ub8T1pNg{@J464sfRkzi7&Q>oL%0YQAd4 ze2?R?)x`2Ft>sgr~`3c8HhhT`6%UV6$b$E4fj_pxCo@ zA!@-X%=`@vHE`n2UY$5Qur%u0cTlsD_ixp@A;uzs$4QbVFQ3N|Bo4^JG3VOOk`-d) zn>Up}GVU)0Va_+%@A*&%rfb=O+6Ak!PlgNUbQzLbXj9>Lh zRaL{*add{AZLK)t%wiIe=KMJz)}j!iU~>i+lZGGo6H7eH_iv8lonM66Ig@uRJr-gB z1?$by`{VDGj^@7CfZdF`78Om+Jd~T4@WKTw@7nKg3|ex_s2;1$j7xn%SAl6uz6UwV zfwQj@K5f65PFpcVhdZRe*1BJK0;*2qe+f0KuhKJwIYn8a6!I_{2!;a9n0ltbttY0d zc*RYPDuXdjNig|bZn{CA<&L}JBZUDC$wJemy(gBWep?{SDK}`gdU!qfnsVJSxyB;7 zJYcNEZ1FO98rIo~n4{Mkm6T(H4vXXaXZ@@v`ds-#e(e!+Ocfh|;^vofTkXS8rYBLAIAe|$~@J^nxPcnzEmb zW|L2w^=VTmH81xo-|n~m`EiSf*zdhleE3uE38_Tc`=ZXZS2V93$bnUj8!H`OVGzQF zeMIp02raX89S;**mKiAi%@1b|2!zqb>KPjgY9%?89;7NV^ z`S8h+^zb`rA-uoYV2%+Rw`p7DxW4$T^*CHhY+<^FUVUqePCBp$+F6ViG%w|}uaoG1 zC;G$;Rx^%%=YB8B{hTzS9t#@!;zx_H_+5hP4%^UVu8f&w1(S+Yd0npo62H8yn(Q)A zgX9R;)l3ue6Zpk_2j|auxmN|W;&D42Bf5NWkz8oa;0M*Xnt3-|GP*-#!6ElkO_s zA);^Q#I7uzyJs)=eO|0Iw=9rM%5h|U*5A{Izg2ZEPTax!*D>&luqt1_DIIZ5d``B_ zSSaGUa7vP=0wK+U2C$3PC{yd$y}u615LNoj@#9^$w&2oGJe56;9xH;W&|h|S?U6hk zXP6DL=^_eEuAA9rSCi9Y6dccFhgOo7giOY%r2=TzgYjXUE#Cl2njdm$#GJ%GCpVo&^vT`{CK@ugR&pM}IR7*;(#Dzk(pMlpcIePH{ofRR> zH(L>sZI$}*l8;IqL_d5Xib8(O;dB$sE>LWy&Me0-nbqxT;$!tyk?`|r3A z{_gf1T>i_=qIU{bx@^ii&L7ipo{gB>moI-ZuyoQ2ua0q^UepN9RaHH@8B=&z18oNn+1$UB++lhf$o)1MIuYSFN!G=7fU@LejjQ1}9A z^bGYpLL}-+h|4a~a@s%B(f^WxJ3tG%uI8>dnx5Sxw=y%d6 zRniaQ8p(jLYwdb3)$ML%n~S~m%fkIkBsx-DqCwoDwR`)eM5?ta!fWnhSQ?mLa@|1i zMtb|{%0)TaN1VDk#~R{}V9E6N?3IxnW6k$gB+WoBG_Q$Rdx6T8@hFhV9he64WkL=X zTh!iA23#=Jz0&-x98+;GGqZ@F;s+L((!qh%7lm)JmL^OBf}NN#fwZ<0%oEKVm@APIiYy|r|ue<wZ!*DHP-2$q_4yx{4uZCrKf?o&6YpkPtgBA4_Xt#W;lL zxSm|3cYK3rOUq!H$q`z#Rizv2#Xpt>d5y=|3_kqD;{)$2i7-7isRw{U0-i19=p`+>P9xTDUlzM%x>ahflpK@{|IqsvL<7{*XDlo_!%8 z%%xDmzrFcrc%3A4o{G4NT1^Mpp;CA8>VXg5LF8G|B4ZgNv#-doF#mDGQruL|w#0Zk zWa5OcC`m!^n8@<6m)Wjk^UaHsZHP zr&*K6+gOd-wOX<0Yh?v~Z!t1LrJa;=<+Y=}DFRsrFGpuX`O>BW^s=F(2N0xo-SWpr zQ~Tc&(WJ}B-hplRGqzt>!K{hDi%n?Z@@sl*3pa3(d$Yt0oqrAkU(aUxQCWc?)J39^ z0+CX%Hr3Lh`1HCv>rysbf2aVdULozb#K=|-P4R4<7!0#J&EW{8>X)b{^Geo*WL5$R zV7^EwVVC^cRg5)9EDnkLGtRmRUztd&*s(>{Bb=q%Dka0tmWUW4)X};n7Avn$OEK}& zm?0NR=Q!=MJXGfzlY=E+^ASGuLqbWWFRiz1#H$0FXtuawwa7F{dy`Q(vp2%w@CU@A zAVhSKcv+B4T99;GkZh2MRFQ~Gl1Osd4{6$2vJR14Osa53M$)4}Cgwyn&mWowt|(%A zA8Bnl{IVOr_S)@aOLm3WCvbqTtj5+!TYEbpaD2MLd`b>e7>?tH^kg^;74U$E*L0{!rz zde#wXGU3v+Oo43WzuDn)M=?dS7xwA}9TtxtuVhPf*V8V=?9{fJ`%s99Q`BnV;Ii_Z zOP)_opytNLV*BCT?e<|_@My-P4e)tp!u5S-@YB(|%c^U0b7G>@j;t=Wu0*kBD}5qM z5=}z$3pH!p2vBE7(LR6fdxZsf&Pr$~@Q+&ZGxOtf-z z=7(rb^U0M~^(2C{nCnE5@;&IO`(CfvuW2$A&)G%&>^lfM3i3T&2~&AdE4W&ESVdk| zXZUJLX=hsbON|)ZpfWyZC>#X+xH)gD?H;{NFOmm$6-6stVDt62rEKV;6YD)3CP%#UdDw(k1 z+k-?3=Lac=Khua74>Fqz$U}4fModPKN+GOkOdgb;H&xz{0hyRQ2qE2Lt0Wbs=|sVf zY+G{NM&?>s*SYpWdbeMEws<~|Hj45^9Z{He5muTT#I>b~Z)~V28TV6UA!E0Nl+y36 zpUj~L@#8g3l6IfOd;dwj{U*XOEalyeexh>R5XmYydktW76hmHvV z(~U<84yv$R@T%K1+Kt=lh%U7XuD!zcJS-G<9tiF{NHv}Gs2s^Q(A+obTkY_Qq7+D})3jVH*+(9dA2-C8U)&k$X3FcMbc;08u zNKh!sNh>1rzB}3%@4IaA(A*t;zKO%<6;{r|$uq0KqiLJ;Ygw-Hs0`f5EDOqqH2YUb zi*Kqv2NLaUerF?6tkIzi9t7;tPB^)&32z#cCVhI7R5>&H7DNQr7X|=d$Ui`T~i+ zR!*0|a6p@21TgxECq=+j$4A)c4+AZHhch)7T0z1^X^k5J^#)h=dUooDB0e0Cy=TYt zrNWLU7`cm!soQqVir3OqMYM9;%X7UGRQQ?CFt{V`IK#R6{KKZYPxYUJJosHJ|0@I# z`|p;6lfGsP0_bi9CgFLJ9a{T3eyCx)9JK01fL8%|3de}Dn|E-bl!>1Aec$dGtlZh# zXrR`*CjI*z_p#_0cff$z?9lgq6Fgw8q@!p0Y!l6I=PKZY5+1 zE0|AbLr;?M)3(Q~ywhWWw%e1gc>*Qb$$M+PZqfn{g_YccL*Y^h{QStzox9eaqPE>` zk29kYt+ulmwyJBXb)Y?HZ${jkussl(ex8AF76lr=&3OY4`{%3FEO?4PbZ9YQz;;VS zrKi}*`%+$R0ugm*O1R8Bm=fyFD@9NIhU{#@+S1Z~NBbF_(yYgSPHxF#)1juaJWZq@ zG10j4W-WbzL0Mxl!=s_1nj`=srP&m2Jw)x`lez$|V`Nt7&pVhEI4+za0KZntwR-9|T#x?`P5(vjW|a@w zb-Od4^<@4gH|)EU9QXD8{P-k1YSMpCeHU2Ulm0>p*MQFc(h^#?vC!dN;95(0 znwQW5!Et}VwLJ4LEy>bmReHT&e>+8o&w^KSTY%ZtrW2=Wi39n(e6;7EcV$lp42;ZI zD~f3=UIT=2pTpZ=A?8}n!9vV7Xt!lxzz-Xn3CpbZ z^w{f=HTNFgbniuf2zps>2@Q%ODy_ZRRx*YX@SP{fzE#ix+ce=l9g?)w2>+c2>H`V# z15k=}X)-6)u*V@7_5@0>#WrVk!s&E$h>SsA+ubI3ROqpBfN?&UE6 zU9Z2Kx_%8l>@~t2Ff{AYu$fL+OQcsLZYN{168R8KfoglrmVG@>rIX;(*}$5^VF8!( z1msqN+)JBY!aj!=0RhwaFECw5PhP<^D3}$&Szn-E6TR5FdyT)FE-$+;^taK%7l9s@ zM1)yx~sUUd>rG_&1$tuyQZ#n?&u(S zos$qui#y!aG#yNgDpxk|(Cce=|MpxX&seYN+h4@2iebs1@!AG5zMz~O&WdC~4P$9% z10F0o$kbT)iauEt9sEHRzo_ch;a17<)ytqPa-&%#_NN*`mCpHMuVu=DFdQ~vM<-B7Fv$bH&KaGLy z@=XKMMQ5~Vh!ioLb5IS52gazg=;#+x9T|bvdv)#ZU%mwW_LryVSxjYy+5CYQ zH@udYsI1z@@E?!RAT?UNP6X@XBe$m88qmSep74^jqI8?mBX;#HoxyGdu zzU<{f(f!du$Yi&@B3(@A!5{00FjfEK3EDm@xvk3`v_AG$BA0<^kaY7BqG1sn_YFDn z^U!Y~Q!17C?YZGKw(w>f7;zTbcB@;#sxP-4U=$6p0;N!@mdqyAV&vo<*cF4JAxB~! zrMDZn2Sj!SL!|Gxh_#%9<0AU{qJaV4M1HcgDa~VT6X>m9#(|!v5vf^woIlFpQ{G6K zL#17y)U+k%WRs%g6>{prx(o8R02fjJB9G#f5yX&M?7< z!sMZYL?HJs99fE6!A3+dNAeJYVG;3`XfJEmgS8F6d_hLM!NOKIi?XN8npCht%!O_i(*Ns?PSKs>b$H_H)ql10!gv@< z_oBP|vir6~${Xh!w`3 z|G1B5D}Pvp-HYHdK=wlJ$6U`lxF53@^8s*RJbVFuF|96buFBqBqPJKUu$pM1?O}c4 z0u7$FrAM-kS|ez{=6|y!2}A52D!=jnM-h9)+|Mi6y8=E$;1%~!3A9!#$hh7zK?~8Y zp_fvF45ZXmoDQo?Y=Ss=P;!uId`mkKEUmd}C|nD8l@8n*SKxFJmXFW(E%wZVXp?x= z$le#0(o;mjJ45gu&KhnHEL5>`_I6~`D)j!JM$;jO~D1viX_b9&NGzH0N$i2}3oVH4*G1n~byL5^OSdy}(3ZimYJ<7ENX_5!cocJoRbT&6b$MM2 zYBj*YQd1?{9n%yB3%z8aCG3t)aH4{gPktquMo#(_P1A0jg2#$W@E~XxhtHSjYr-{= z3P$?u3D}yBHPoHL*9A*>8Ne3;T1C4^z=`n*&IMdD>=`^C4Q(W^3~tn4J#h98(wtsu zo2~3bvk;qT6)4t#)ZpI2Lt1h5D*^5yWt5!yLdBO&4);oPzTaSFS*;OZtnk*#sExd4%0VxgZ}!);+2YTAP|; z)q|SC-R+)gNSiJLQWqhdAE)3-L!n;~#5d$^Hug6U--7O%PHwSA)MV-%mb_Tu4tz&d z#__J8%K&h7U=xYBGA6-(2K5Vo#=1>@Rhlhoc>BvVXquF>4U&h~Sgj>8cNIhdqa1hj zGFC;K2xF-S`{N2M^`$jkkhW@CF5zJ8g5?^5E$8*Y4eUP;?Ak%)h_xnj5IE$$ zjc&p+D}Y7Cb-+c!^7sW83G$228wTW~yyC02!tTYOy}??LhqG=-*`3R5B=RZ&7e_C+ z&R9%fn`x5&Fx)Mx@~cyD_exqC$_FgQMlwRd0L=o=`RS}b<@Lc$T{9r3(US@#MRaXx z#gtq%6tR-AICjBGhWrwQeB_&L^JK%jr>H4dkK8p#1^1!=p`|7=uE9p^7#0htNJYMp zxF8R)gpy&>fL>u!3@Vc=&vHsVgt1Y^c%(%Xx<$ETBww=CG|a52TLW2JJ^&&Gn^M~9 zWk9uuP#-B{W88tAGLAD=3ms!nTX+>q@;K60V-?dN?kXslis@1(8JpmE4XYKnuW1Hk zTK9CUaGrNVf0%^}rYyOxO%0UJy2!W(cT5!*kxRwKRiJk0P~^F$|`Fq&f09PwEZKq3Uj~9_m=@#&isW zwQgJn+%TALwrQTM8H{B=MuDPWilLAWdPu<9SO}LBZrq@J-M+3l1T1U`y%R}kr{s1G z@?yhwqcT<6nq){EBnaX?<2B^1v$oVRdh$Y^-qW%>D63~zbzq$ex7ITxP7(s~THvk5 zqq)A`se8$0qY+L;OT(>gUJ=Awn@2?af&OUZ_7XKvQCUSR2Nkd!Scyv3&lMVRS)Dgk{n4i#j zNARKb(Eq>ulB7H#8AM|(rQOwCb<1yg)vfCC+jVdGt#NmEcX#)h9$VjS!QI{6-Q69g z2Ya61_w)V!p8xYa|DF5$Z9lk6hsgTk9y)Z0)H#E@RfNyM_2LuaHl5Mg+QlcTQ@E{f zr*LlA*{mz>uYQ@BHCSmARf z!gYN+L<)Czw~o*XaSJ&e;%kLZG_0a4g*z192Y0Qcfw~*>#_15(!pWEr zSzlal*ko@1(`O@m>>_i{`r^928zL89ci+Nw_4vAN+q7+4+w!u_E3a*PUwQA}w}!TD z+cu_c+n%HM-dZau6;HQqo3^cOTkW-!F_&#`+g@{>%ly;(iW#9RozP|5wj5Xh2vE6f z``fl{+s;~>ZHyXgZS`KOZQHhco?zROBuSE_`|ukPpjl1EkmNaSo1Spk$p%`T6u07@b|0A$Ho zkjM()NaQTYBP#$T@^13T3IK_`n?&B#wM2FR$O@pI2ZOu;Ad$1lBX0mm0w{^B0FcO8 zS|U4ulE}MBWCu_Z*#RIc03@;lK$e`PEzZ}wt+j1U=Ewp`>Dp^$l_zu@cMaZA!XCN> z1Gq~GokRIMf^3_P?xV>2TsuXAWM;|v0>I^RV>$nYY`44g-FvG_Qb`wzRHc$iER|GZ zm824un5`0ng_dN=wj^5?*<#6(CD~%jvMfeh7E5*sEh<@32}@9P@BLs?-}n1|zwh2E z+1*ohhRPFW8fH)!Tj40o^acCOqcC%{O6D$lm2;Sx;W-?IGq}ru10810JK1tlp(S(T zFc0?0K%ZI7HaN_%qgB8eR+yRn0_|~ln0sD0+66lk?0I2k9MU4pOal&cGR!ktRG66= z2l~t^(;STd)nA159^*QgH0l#;S!*Q753k@^v!b24pP#7PCnW=jf&W=f8 zPIim~edZU=iW!E-VP<^KVTYqIGvmpcO*Q|pB5m8N$;~#Ln5lBkIp>^n&N=6tbIv(A z=bUrS$~otp6FTQR?|05o`oB5H*=TB@15`wABnx{9qka}3G#1rBn~jGHI{eF+GIRZS zxUrdQm=o%n1xQRo1qItQGg+|dtU(Kysvk|64mA{=E^}`oZy?*f1NRmLg;d&w%ml$LS67P-SC-g6C72p& zpab$Sg#{S4QCIy;YUZ$prVh+z4%@boB=_I%?maV-2qbOsx4r+8AW3qh$g2_!SA}M^ z-SggCg^K+r_Mg~)Vv%r?Vdh*XICHrcol~A}{W0B+Q2I36FHE;RlrDU)Z6d4Crl;Tf zoMgB;S6Y0R!1-K@!6m0DY_*Vj$7^G_<1}G*TS!rT)<|^`95c@5P{c;~WVT!gtnYP_ z5r$g9tu6v{gvI4L$w(upR66A#MWhiMmr}EXLJ-P^(65?KhaG^TY09jtkkT0c{jQUY zGQRTPAE$IBO4oSDn^JG)NONL7fy7_IsO>tT(mo7Q`m zh>J)?jJT{{Zr7~)V|me3tb}~sH`Br12%*OB7~wDEzIt9K8Do^?t26dJNw|`Z%<2dc zW14Axxm+h1Yn0`iQ`St9hfv~YjObq`HOlJwTqhZ4lBMO7b&86T{9K7b^OH%&S>X$j zU=?7EPm`CG`&}m)Z<-}{$h4?DNfP1TYIK-pUe5RW>2{rDf=QK+{+O*!Gs*uD8OEV! z{;nD1FlLP3fy2MV@R%PlTKSo>zPMW_nP_a~k7s6z%94Z;zO6>S`BI;gOfs1A=Uwzd zdGJDLQ$=qg|AkyFEA_qpcv~l#Y%b-CXO>nsNw=uzJ;IvkPpoc!_$`z#EBNY}QfF&Q zU9*-m=6_AE6i4V}2tJ`OHLrj5Imr}*DgTP9E1E$N83kc_iqKJPC9x6sJ;Oz6t4s2#`DE!AR21Q7sKFsj2vWrc|7gvuffy!DP?qt#!E&+Y(MdDzn9EAD zOWuiHWg|jVz_)c#4wzr^J(Q;5FP|d6>m)N+Imt|8D&Aj+95VA2m1dRvmM)9nLwNAh zYJ4*E3prnwxLrM`>m;)bsx)1)TAipUF3wh6t`|as-|N~j~G# zCz)eR1zm;2FLUq0{=QCsQI|&g7Xpgk>w-5ykb1d)l0;uaVH)pw88fIsBwQW;&6Hai z4XO=H2vG^GHTchy6LAdveO#%RPt)?ZPBPb=O3N>Uth8GCi#nTKO+p#?KV^q4F@;9| zX3gdo|3|g8IZ1$_la?dU@yjp?6lJOf5u`Zt$7~-%(9uej8p)yjjRxdb zVwf~qALn^x{?$nWb>t*LMow3)BblS-oU!uV6jw(gKz6c+4-VD-hJYh9Y5hzNWv?Ch zJ30Pm$??4J1zuO%w>n9%nUt=tj(X&{GZwn2nXsksjwM+URS81C(KGfC7e2=rkV8^8 z{2r>rkguP7Sq)$7Bq4@VI<7eijR&YygpYDkEh&3Dsu9e4@Necr2&LiJsw&RFA8AP1 zGe`B(U%{Dgpi-afB%#Jryi-mORpX)Qy;vcpR7<19L2y{K4VmV2qA(Y%J@O~Mcv4%!NQ%ux#mY%9;1zBZbK~$Swi86d-i&78# zTQ&KO{H-cw!SCQCFZY#Gm;$pQgSz)=#PU| zM1fG6bdoOAXVeTc_y8*Np+F#!me4cwM{E4glj|Eit)-iR*eU!k!vt8)u%YPWl0+NcCuAb0XeD76cC$0a?rZf81)zOwaD+|Bn`M; z=yzF%>m&(CPLgOOb>E>lw;cAzL2oRk#5`T^S>k!NI*jsGz)O>W;%!Ff@&)>8j8bJ|FJ~g(N}tJ{4-v zC=v*KTZeVfbAgQ_`!SL=?{{)#jg&|AqWaL+PULl+Bw3Y{q!?8#r7G%?!+|PW5m%X| zr`>VGQkzq&grTfVGci=uXsu5q>*TN2w3PP;Yq;jckTms|aWAi0A91{l({++mMNX22 zGPozTbEB z>$no5{0^?<1z$RW-*u7#DkmwF%1MgMoIbWtzm*C&SlB*jEdQeqtS zfQck7I_i#f?p~04m@tU~cP;1qiT15q35QcS1ttt7fiMYHF0U{!h%pHCGuqmuqyPE{p-i~rys4!_w2)FNug4RM3Ty8aAAxZBs({TjdB!M z=EhM|mP#GO+)~T*qN_^eQ<5Yl^4+fBC+p{a?Tf~nn?!&x^_i1^4vH?LmBB?=kSswN z<+{tGg{J(irgoB6Ec=sW06s2&7y0m~Dau1uh2Hy?@4Vf9xGj>TxZPJjNk>6l1v`7= z%Hc79;i1L@?$HRB(3JXVHl@yfa3C2ZPddZv#wcrH=$rSTGt=uq_F>Xrj@_Ijd~s5} z@{Ty5JZM#21P$rZH+$yP$h-Bj>yo6se#=@K>Hy!8q!8CAdwi2sVUSQ0Fr;rG$u!9q zYg8#5Bo~uMmbEtY$dWKI%NRq68O{m+~b(ed%b6t0)hfjH1x;CtAh~RQr zGfw%e-I1<4)OGv2 zZcpR3c6CKo1P|fUUlv@QO2PyZsssyR!nhQ}mzJih*HxJ@1J-cWmxk9b_`ZucfOUtv z?qJuCzCB&Hv+K4sZgb-{cI{bM5v+m3TUCM=MFKhMg-Z@J6$(>`m6zjMG~1Rxw3V`6 z@HyW1RYlz5uG`&pJGyRb<2HBQhOS%NxLMw~CMj2hfjIRzp(nhr8Nmi}0AOIL!JzBy z0mx^N@A=_iY?bv@--C#4H@0nUv#|~9K-PR>D^}0illG`~sgtYCq3WGcgQU4f+#ps5 zXMD9m>(qi*b#q%op1eI#_1|EDUru5dL8e9ky7Z{T+(7O*0=u6U+jhYhe2%NWhowYp zy|J~%R;}~hx7e51qWIqTdN7-$F0{ofh1O`+rqzt?_Aymv`UTzDs@p9?v-~#GSZ&q9 zhtg@sirXsNBJEydG;PpZQ!ig>TXICyT#F?2iBw!Nx&W0L6=k!VMXCo)OtdMBZFs9vbi0N{+Fc^$UNPSW+-EfJb*U5$Htu(}(0mH9mLd$^WsSw+MZ{p4@(aStdC2)0nwJr?T@?Fz7Ri&qMzg>R78 zN@P8jg_0SuV86}{Gqrk%nSb04u|U2-@)2VwD{U3IS-gWffM$vuD@`bRihLrxi6-+q zdIy;b0J+Q*AksNduC8A9jMA;wvdZ#2jn%-?tsLv)Zh?A7`=hpI{pS5t?bt1Ki~W9V z>R-f`=-n$S2j(4+qN$x)w2Fj+fhLLTk0m5LJqXJ;XX`3@jw%E%@sa#FsYG2ZfTB78tt0-qGe_9?238TH(}2U%r|QD z)OS4dclrgsz`myH_Sy|~gZ+N&{-N1lc0}x!Nj-S84_u~?F-;g{oVeV`?8cVfpx05% zNreDZ`k&tpX_z1>o!BJ+7T$U{X5$8hgtv6tU=Af{MoP5eZ$1I6yd9XV8(8((3N_>R z9$%P)6X&uUfO85cNTwU;(k%Z7*4mijo*Bo}8!bYhdjNTAn1Xs~QV}&Fpj-uBhdC(m zf+=AjyJtt@*}|yJ56Hf!_jE4jvfrupI}V#EbaU+*yS{Q8-#%+sa4D+?9zU@Kt!|$4 z)IIgP15~o5 ziI`!@RT&C>ZT-ZF=*-%op^`PFOt1mEpWC0k1S8npt1Tbt@H|@_vH4Nib9vgEpvYr{~O&b1S9)-tSa zvcRyZz2f+;$7XcrK#$#Lt1WEGiyKTTYzPTtpGNRHI1A$Ag2(FAB6&@oEsfa1sH|J> zsqb#W?xwnlF0Vi9@@PpKaylY1O5*o;9O0wEoiKr@yHFUS@WYs+Fl`eLFx9;fSCMq~l`H>lp)j3ydDg;gQ)dVKgvX^YcN50VLN)USS3$m$nD@X|g0JZ^a`2>yw3;v7cE+wgNsl>WwMq9e6`K+g zQ=PC|#6@=gM7o!Es^M$lj8aB(%hxOQt6ffl7}zKl*AL^e<}2XY_@wO&$nJi`frdKZ zP(S_vL(MnTe2W_Y>v&&>{GZ$X+Tu@39~df%VjGO8gjeky%2%0`fx`D1V)crmmOV^V zNcJYr#(>H_8-8IJcT4kP2!AvDZn}q#gIiBKfKN0=K6Kj`o7$T;u;`Y-rm0F&iiBpS z2LPfVti9_IV!xPjPAQBeL5VaDYX1-vmtc27D1KesIXsI0=-pUSXB}mtq^D!-*6>~K*tDk`$_`x_t`mYy zHA1y#1yC~RL$_VAslD&wr`kViQemYw8K};mx5D2}n&GmHo*4osiz0o!HEbWCJ2leW z$X51*C3KRVq=4tp$GfP)Qm4{h=5BG$sJw<#n0V=LW&7utfob0sS9e%>Ktj8Zdt{lF2GyF*;k2*y|N z2tKxx6bU%=?g#94)LUq(#%_96=R9ygp1MyxeC+yL#A4ndd|=eW9OJ+Pi=VzWKJ#dn z;Bu8tN@BhgIWZgO=isyO{J5>RD87pwcG~5d8MoI9OX5+{%x5k#5Ic-MarC@hTtAuE zApKu&-C?^Jb4ne(WQ&V`b;1d{m&fMr0eiD!_AcqM58bd9Zpw#QQc+>^DJ#q`wiz8u z`yNu94$S`AdVl8%Qy83AJNQfy@=L^xe#a`xUAx{I*wE6o2P`=bx|!Pkh~rw+rbf*( zp+%`VlY&xvzXpBi{8t{U5k4^YjEHj3YPq)IC({1QQhYvM6Xdh<0(b~>^fo5}IO*wj z7)JjIeZq;QAZzvY8$}4fB?BolvB8BW0k1KKH=45nMIW=B?v?Wo0BdiR#Oy+TcDeN4d1g3Vb1;J2&-0Ae7JaacYE)-)fEh2@`g#2wK2GZ@=uxc!~FH z^ePS>H7fMfI4rc^3)eKxnH@_SQT{Y1DU*@S4jg8-K3{V7FVf-IJ3+7f*mXt44Gy)*H3L<^e$2M@lURV@syR;X4zC; zxH;VPA}<*bWG09I1rTYiWmO)kJpg(lW?>P#la&5%F&i2udtS`!ZZWgIQMrIzHbu_V z_IzuJlp?IS@}??SL6X26y<`CF=8dTY1p~$uxST{!q)kB?*oWjWh^TauDk&S8w2wi@ z-0&oJMb!9sX|ue50tYB=wSgpZrVI3p-{o`>WXcI;N^XLb0^jyG5S7pGryb#cJ4vOJ zR7=_Tg#C_qufNSLp)o7wNiXKS;0D0R%z+9AnraU3@w}t*@om}mH!XIHIfA=%k{Ssc zFWr(+w{g_1A9bro-LgryXwpI>u5v!*X_E7fxEn&%3L_aK$y{`qfO7mFJuyT;;cI1H zb8y=qPlJd{C#jWCh&ET+>ZGkq+R~)Wmo|(3L|5lsoI1U4in}3HtiWZhd(xc^yK+hn zIOYX02BBoG2@*9Jw1YQF(NA>X`tB`@j_k_PN$Om*U~xkKQ;K zC(qJJ8tf11fE5PpdD-Hgm(|s)R!*xOc*e<5txE9vx?FQnBhO3Bmz1TGG}<4m^;SW= zA1rMgLh$uOK~RD}q~v}NMJZL_V3#w2Mar!Kc-QFdSmH}MNs|QvF3W}$Bc9%9kxMV& zOM)bUyXUzSz?7UqsKzPEvo{7GEP}l*dNK~L7xJ5a{g;-tK$!4LBVH=7*f89(;EUHW z>IuWDWK^UOVM7kU1OJ%PH@qa|BbE^DFyEp|2?5pfife<6?+QQ&Db+GdxrZAg^zPs~UOj z-i&Tkm-LoS(wZdGYz`TgC)TtmplF#J8oK4%|CZCBI>6vtSt8eCrYRpsc`>wjxztg1 z`!&BFcWHqzdN8q8DRIvWmwCGZ@8OeF%3WX}VANnHDbO9f)tmvVe$m%@ZKZ(g2Cjei z(oWK5f6#f*wN_~mV>Mu_4F+&cQh*!C{oDkdN$Lq9n2SvrjsTpP=*NWlqQ=CvleF6( z>@9b#^)_as%ME!CA6GW2jG6(?3*ns>0#g$r@GDXb9t}^F3;9yDQukQQNjfYLMm^Z! z1>l!FBL^@ce2f81K*+{FE8&TKf8|Y$Ud%~4?GWmf(xzYT8;&>POBI>`?_ng!l$WC$ z-{c`HuHAD#z?Xb1?rRH##m<8XT_M+{lW0wXxBt|=3XJ4uiILA#+Vv9dA3a;PAn zEWm)HT{uRO%T4tFv84dm^_sJ;xTur#S|AMX>B`0(UD-H5co{ip#=ueuO2U)lkSj9Z z3&7)J9V0tpIq*`BVu7&TzPFq>7XmPYtn%hhkwY#>s$6R&pztXG%NG&pZxuLpPlBw! z=v-_N=G%?5D{)57MhhHQRuc#l;4O>ff$+l!scW~k~`XrgV%j)kBZ!wEj}PrdY> zu^NI8-z2!IkrpQz5Yup&Y<}~ZeSQC#`ByG2^!k<1X~Cr{$NhyjcKN$|3QujBO_VZg z_C{@$78$n7HEjPA;8=*ET{nR%I5a$f7QVpf8=2b#EBsCeoD;UUw3~80V)~xgaonGO zZERSz+h5+-U_MjYyfV90mr8rIxeZ4tjw}@nJR*lLBxRvhRWnqinhJ($!bFaq zBYw=%kmGpWfj93(s~W$Tkj?EpwD+Gpu-l(JwCkTd5MJ%+rw{GzXAk8KlUk^>nOZ8% zF#|_AM>Y!FA{9W{%Nw6YmZ2h`z(*40Ye)qf#8L+#o1m}fO*+Y-jN%FHKrIkr)dhvt zrgj~uGfhgJ7wHZ-rZ5dCckOW1SFKhRYF1OPy|*f_WZu%+{ZU4UJ|q@Yyo1%8nZb5fzE zomEt-Gs&#dXMv0ESZQ#_OKq|^4FhC6|Fk_}0hjEFxTb^1O+ouFT6Bf)HNr{e3#pGn zO&c+3c41h#Kff)Q6&y#PM?#a99tbiuzA>bcD}@oD4y?H7X;>kg+=rvTsh)u~25x~W zEY#H0u#|b=lW8Z>?N~5W$aOAm$-nC)3oH;MupT%HA}SBu&;tl^Q?S8Bsf&~Z&I3h5 z%q5XF2zO^%HLxUs$HnPp09D$ojO}}5sj}v~pv_{5(8oZ>rUwEoPeV*$nFyedFi&hb z))ft4*fHV~>=5SVR0swB9To#Vb0T0O%ai~^FS0_hKepa6uu;UaMuBq)oMfT>!ITBI zFLq|Y+>rWA6$;NBQWY9T3%DJD%Npf+IGsAF5 zAm@jNozUIu_hd~Vlp(M$Lh+JP=grAw>GK6*22}+f+lNIpvji|fkv(|iM21$REAr+V z5$xGe(t+m|!~|@bERJ2p-NeOUfbx!GlK-F*!K+G$@?i5pqEf;P3cM58xq;xMFkk{F zg?V*3$--1%!5TeZ>rPD?my}ci0Quw65_xf0Rl1JxU1cbQBsq?}WDFip`w0vi6*EXm z?9MJ?!H<>}I#NOm|5wJOosM?YD z%f`Y!?$#Yrqi6gvtC6uO9{Pu2g+|UrGZZ7pcI>-DSDW7q$Hv2gF;;wQ92KwdDJugc zxB)MorOI^Dzqz!1nn~E4wfl#dIUPY+4+v!l=!+1<460kN|5^k~#aDLr7`minLc=6) zub#MZaoh=GM~MSBnZj$dA1A5tgo3*I;#$o$AI(ZFoQvn1Lb7MgAd~a8ZD7Q_yrc|( zz?Upd(`1gV{YcXKy$9&PO_sEGlT%aZ=;`$r0zin>C+;*)A}-ZGvL=(qj*rU10gHcQ zs?beV2-QR#i@fc7u^k&3F=MEJ%78OLPHl{+)D3vw)c3k~DNeH3cL+dIe+n>F9)M`G=WC^Ml%6JdH6z2hW{I{53H9toni=GJASep%00M zG3pf=4J{Q8c1B;+xf-hM)Y_d229d{31PB8(6hgEN@QsLU9Bu0NzFlvQiReNA)DWHJ#Vn=Jw@>jl%f89OSkdiC7*MAV`~ z&y(7p4PH_^2nm{mq2MN02lWeE7UhGoi47S*CR0eF&djaf)2!EAq*;vbF_~lnnYTA0kGDgmR8ifYl6;lfn)<4J%yFn@j-;zV38iFOB3IudK=_gyCUbFy$^P@?xBW zHcv>HBW^|I0C*XJBI0KZxfw++ylkT_5)gwZc$I5fTY!g|WLa~i%pnt14iyxS;IUj# zyQX#dMai)`8-*h@C4H6(lT(tCD)TZNg#^2r``o1Tlxs=9cB5j#h+ozKV3>AP4|-`< z?r!`0LXbqNOBI=JI>0R_NIYgfXIF&|5^$nq9y(PY|{FsskQQdwoi*czTkoQlz{p!9%JN_CbX zArDJNpEbvLNP@F2cYg8E0>cO(u__f=3#^AEC0Au0E0oxbK5IdlAHb|+S*0!+`k1$q zca8yK-|0n}9+<#@uq#nkpN}EgsiKvJL-&w5tFi;goDxlO%6hk=Dlfu0t8-j?B9#@D zy#&ok5qO@=p1~TNKi{-N%_y%vUnXdtS$-g;QRie7V1ad)$vSV$RZ_UgQ!&*@CaCOr ztS0yu#bL#;@d31;L=Z&hm?CWpdiRRL1Ci6q3YH4dILL&$iJsn7`bciY9Qg&BIfCbN z#Hy%1!Z;KU^o@p5*h@l83Za(Nj=R`PqKpKv#R4O4!S27!%;{KhYz6TlQj+|hZ|5V7 zEfZio|CgL!fEnajxk@%JSxj%hC7O4G3PnF}U zIFkv!03w~Evm1}uGsc(WSD}YthX_w2RPfQ+izpt+bI1g3+N{PyAUO%%QI$X6WQtR2 zn!4H*AYV&3Cq4{&2`DH@SYIU6aP}g87l1S(RTU;agx~IYI5}LQ%AthFfks#yF)9?4 z3pinl|F;c-^=@LeA!zmZ6Hc5rQ4rABLxetw5_%j=q>oyBhgC+gxVUKo4{p*_PMK z++UE)&m;36D=!xrM4Hun;nvZq-J(Ijv<4k@P%IL~RaH;<=B^wPJ*QnX(mWK!^{VF* z3uouESTc3(PrHLMv?y+wZ@A4lc7HK92v$D-weDLjiuXIH@4z!UNoPckm_T3qba4GQ zD~b#vOmDtSIrwTOVIFe6s^v*vV2Tz+k;F@<_N>TEz#x>l>2<%g{)z(!^S23!Q?zH? zW#exsiUIOOlhFfN6+rZm=}pzgc~9rrQO5%TNrfoVC^xSC$hJ3SGF{u<<0R4dY_21Y zxCNJXlb$#hkTn3df9JO@rcw9IzN)@l+_J!Un|1tQkBQ%1I&|Bf7U~_11tgW?IrU5O zaXI0qTX#+YJ!l3Mt-LN8raXRbfgn1^I^90_yqRRMD2jnp`iR91GZGtv)Q?{M6FPAv zpdk7e25P+g`wD#F+ z@XsnlQQY2>{`**e|NpeUYw2PhyK>zRbN{6+*T)J^U7v4ETyMSlS91DffG|P`WDIno zw~sg*@QW)&@qR~i9a(o}I2>c$!>^kz6GaLuk8V3l*!#sTH~)~Llg;mx>SzD6t?sxR zve8MiP-J81(%=8j6cbcbzvx^3U2%aZ>WO4=`_>-l0=S~l_MA3PiEON`3YpJ|p#a{Z zd}f}Pqbomk7lqv8T%%a=w3o zzb-(2=s0dLCXwRe@Fa<^R)5aT=fuQKB%;`2^wW;Q<5(-$g< zByr0-&T;CP3SaBjWIW`htb(rXV?UKeXZ8ja?ZD`mK~i|fM`h)s9KrK*9WPKZ`BlmMS;FVVBGIggpBF9ELu~{ z0oYbAePjx+)jiG5)l6u;C~hcZlbA*yecC9sLA_(Q^uw;24fXfaur##usz_BKJ7DU? zn%2DQ0%cD*tQUJsJ4zjRp8oRM`%3L!88K2US2f|LVJ!h^PGq^_kS!NokS4WV6l}<4 zgsS?Vy#Zg!<%Uh0i8RQrI;&oa6;ACv%T-g(Bq~dmv>oD=jRrUWbA!mUyFg{o=;^;P z^$3YNGqh;O7ASjfJovKJqfmMJRSOM^N6^b=1cvqy*OcWlxLo;IrzMeH1`3ocW3O5m zQ5rbok6DG#JkWAT_3XVbpef}LHO=36$%x7;@Se!`+JPB!K97XNh0q#ork-cd0Z4s6maeC zK>=M-JP?ZofDla{aYYHfH}F!qxap`^om^N#X=}e<6pYBsw~h~UdF^eb_U{Zh<(X)F z2Of70+r=IuV!;f1ui5m(XN~!Tm@35Q4$Bo_x%?4W0{!O$|BlIIlN#~ftJD+U?fT+* zlzbjm+xDYVmm=N`J2vBKZn=$}jL$u-o!R(MSD&va;v~(5ym983ixGww`-~qKM$yB| zsQ*6S45}JzIOq~sVtAb7XRLixhcXjL7^^DA+ZLZy2g*-M42lo05K@k3C_?d~&EjDUD_HC=V#r8t?>JL4oL9I{;4OdyViP z0;o@R&(TP_plcID@i_ESanOHeQLcj+%Z19}o?!}o&*eI1VMO5FxT+j3VvMs~y2&>@ zZYm(xL#*KICwhB=$m_J07{)lum4|#o<469=jgV!_sG&&g1|IW6F4#_Y59-Lngtkwk z6BC$D^^9xD^Ca|($($Wp9I9Sc7mhW-!H8999Jkg(BdHQUw}f3xh_=%_Lw|e%`zOnV ziH7A{+*1S4iGiaWCk_eJ+rh_s_$4n-(-pj%mch*m&3SlZhOSCk7u`p z5A;r4u)wq&dyr!vM|bti(o(*}A1fv^NQ&(Gs0^CNp$*MTGXtU<7EY_(R-vix(mZ;T0iA}XZz{7B2Q%CT8fJZXWGxyy& z*uIVM{9jGKml4D^_Q3fl%%GyV&rO5u!H(67O(tdT*Ye*MU)_dkAqVXt7BYr)DmS%7tP8it^{Jr5v04cR6LLEl6x#F0C?vp zxZf*+rrDiASvN2lD`J<%mTy?*w=O9LBvXoKx9*+{oDcjvD4}QsQ;LQ$SW6X%w#fUzVhhb@#&*~i8^S^Cra~O&ijWM8WpBDJ$SY}Tj~TB)Dkd* zs&*bb4NDE}(Z^~sU0ZL>NmrzfmVg8b8bq1U&#*O<4BQ#yn(&wV2RMDSXdpJn^rS3?gG$fTdrghf5 zb z;~x3v(l~ETDWARi2f~hlCeszicwGz-f{84*xFOsa}kN0?_1!nTU)gfXTD@Incm!9zvd}4mG9>kw1+sR3 z6{meSbv}kA#k9ntBhQoCpG`0#D+hfHBerq`&kucw{D7Pl+4j*{`ShOc_-$!8Li^&s zcxhi}LhC#GkD1Sg`R|B5RW{vZfPcS;U^>QI#gG$f2boF!QGTjH0Ns$krYJ0t*R{*h zXk%hNfNzmcMg97>u?3?Qe8UufFNGzC)Rp^7kc~4EHb#(pTmKR`j=TjUa+O`-C>9HL zVpYhnuw}`7K*ohO7w7_5RQJ{&g={`2LA7sGt0zvA+Fx0`8yC%oWdH(DiBeV7(z>=K z#R(!c0MOnsGl@N|YH)Uz(9GG?(Jw( z+_52J;OfVYx<1cm@Nki+vTp5fdcFF+zXq`B_mlA1kxEA5D*O!Zf%Opgu&_7%pBaIH z4ty1f?XPI`#M$%ZkO`f${ViH*Lv71Kx~sBlX^%kQofDbmesayDjzPpZ#;1c@pX1h) zjlvyAcz%&s+;iqFGeloXW=J~ik6&Hi6*5CH0_c+B179q{DX{g==kRy*Lm}Jt{!qO( zrh65M9j`{-hVGoGZS~f;Hm+q5c~0|=?NAD}1T<;)NBW`u^}rA}$=k0Z4;<}ZEQ_0# z?ptPqszio7e^NU?W3}C2RiUr&)cz+6Jy9<-q2)B3N`U|mx+T>hj(@y-ywjq zliR^SzNRxoNEicAGU#Ji@ufv8`0ly>CJM`*rID@#qS@5O&R`g^e9+Gb=2Ir%V>o$* zHZvW8Kt5BjSfc4qmN^}Zif+JR$HTeOg&;x_>!ZiTTr}Q6T z6CcNjTX#ZD9Q6|oki$0N)*jG2z_d8th{~?e9v(8Gdyc<3NVZ}{7lD)-dEHl6afSAj z4)|`~(h&qk(4wpV&=v8ji?2Q2?O>p=K%4(sff!u7{f+askC?Nj$}eqm!WKpZdLq}S z`%KfGGZ_@c*B0n9IA!T?Oa(&W81ek`e#*=YLI%>GE(wL_cK5(~2;BUPCSKn4LjwHq zzX$Nt*;HT8clU!qx~ufhunEqq;e+TLlO|i+?5S~OOvgxIqw=H4z=^z8HUiFJr}lyt z!I<3{kaYtPV1Rk~+n`H|4`Q(h=AeM@@w~6o5dgG(3ijwU^Jy}6sB%q1c6%8hbzcdX zDKKIQB=~mgPARbEujygwiOUrB7_g@hlxyE;3Q4_9NL~$;&~vdVCSdcuw2pnPr5Hq` z{KVF4*Z$`{JOuZJRdI6lrvB{KMfrgI0rdC$(c`i7j!V;dId?7vs5At8H8Z_&_6Ve1 z;3P|Zh5+QCb>CAQ_9GyxLVVb>DZXAEx#vJ9`I~cC4st~x6x#IB1^GBzfIr6aiEI$^ zJc)s0>&p5P#spwa{AD*jIgh+|7~OYK1BEpt_|PAE4GHzW@4nZ=T}u~3u7YOQp&{>+ z7&y8Xx3R=-hdAMv1LTi^pw76oJ2bdy*zzSDekLz`o{3B}maGqUf zoBxGyJhT6lJ!|cDLe_p@`^|h$IX+s(Jv7n+nBKLd=#mWLxjw^H`e>Y)G744J6||%H zO}=q-4+$rJ%%wY`0Dihujt5}V=t6(3mReQX@&U(Mwgdp;?3*d|Gh#9!7eJ`Q zWZID=(bWB+U7shux>M)*Hy(of;`)vrJBhqybDgNNGwXLWXZ8kU?ch8gZg|nnf6XB9 zopXxiQGY43hm$P!8?4MvtlBc@$XGV|DhdJtRNdY4w3II4+=>#0bJ+C^&*}{-+5nPg zbeeaB#IIfK4;W*aXddMmBk>1g6BB5Ad!|YBN2L~p;IxcZk($zR<1TLN6X zD|k~q`?$+DJr zuDvxWpoh>L=XO#^GSAN)j$DU6DvkhXG*|NH+8!3CFPHY5ey#E$8A<$@TX#%N81obL zkZb$to*^1d@h%2C2OjFon9r_xb@h^BRx%iKc3@GkW=++K)m(}D10suUd#N1gzT!7i zU{i_J|Gl#2j^Oz$@$z#Ux7nA!4Z5WGz!!^P*nfA<>cDMcDrN}H>3)f@m{SsttWYx%0hSGTU3&zZ8E`N%IkaoEppF}b4lhMTUym%k0R zq#!qgFBahtV$Em%o>a2#ybunVgpGM^O_7!<0f!l6s{MAp+CIyHmt7=7D!@yooVW7Dv@swsYFzoqkI}$5G&vuaj%8btIlSsqM9zf-eu~!%F%w@yebv ziv*4#-y9b3&^$zab97}-&}}@iCbn*D+qP|cCbsS5#tFpm$^Js9B@Sv|nwNpgucHIS>v5e-W6-N+HLzslI#^C9F0fnP{NetnZX+ zbYmY!)zDk6gIVm&b~CU66k}2)wa9)j)XNi8)iPdFI_xc1h(|b`d6e5eFwHCIWu-|o z_qCzX5%vPv`pX}XppwyzSVN7`I}{k$@*&a5A24&So#Zx79z;TJXmcfZwy;kuTj^y} zL$f@5W5nwvEF@6+d}`~l_u&(xcbV0)B}@7~m@=}y1Wd-mRbw$byH&zo7Lk;d z+Q$2AjZS&D-n`Qm4V_56AK1$9NdkPaf?uw*;aQ8j@FuM!M}o@5r6N}Nr{KC?P$ZI* zF$L6wS!4vvrHkIu*Sa1#$$i+MSzwdRo8ZG5Wn zC;QTvO(|y#{k?#LyIOb_aJo2Nn9H|9E*a5#Q}UA05)YRd7r-;l?I;{ zRKI*)98O67-zg_e`Hy@}`}|3S?bqW9HFYJ2` zw|DyU7NyG5y(*SEe@U%W>PSCchDg2LZr771;^57VpP&ds#%X=)mz^of6nk|glp{G7 zd-)o|+o|B1&faI-E~=X91BOaKO>NJCyPw8cP9~c7cvgQ_9Hb0p7tgT&Mi$lqLt zA0wzL!OX>8Kf4dMQ)awRa=Fpc*gH5!a4?hlb?CZ=o=nd@JVe2>w7lJ)x|1mqVi2jv zO{V>Nd4s`%QKH?zj2Y>~Qiw=mje1jS9>Pa!xTH3pVtRegTk4e%jnqhN?DSdQ%?%h2 zx&TO)2GeHiE_0d2q=1IK850Pi$bvW{DJDR=KcmGNH~vF?wRX7|HJeNFUH?-+0aFl} zS)1Fg9UXw^Mk>x)KyJ1COBa5C>?gdy<-EcNBuPZ-aLeD~OTW#57-=#4P>h~*ddz0i zih;NCl9kDOQYKiX8F5#P^JEOnXVbsk*o>AhJx+R3^EP+E_jk5yyd@FYSZ zF=%afhzHv|0B9o%2xfAPIGYKkuD`m6=@#AE?AOvvMIGL>mozeKM6~ezACNO>BK2cv zUl{f2`A=ZvIOsntfwhE!GS$U|HMo9S3U`V{jF-*}X7is&KXFw43d`g!JZ|g#?N-0r zv^*~B%?_J1bFXy^aEq0-NuL*(?;+rW}w6V9RSDg0#R(=6sA8L8+8NyKO=tFY{> zL*+@OTvfSn21xa_GDC@_${GS8@?ZE&tEtx)X&q7=m|>yuk?o|lF+sIyCK$#|-H}Q5 z6pd7*jd=kUyJE6=(we3{lbq57E#g)5HY!nMfN>ovv7cndVC25(atM;j%1ud8N?j3R3@kKIbcWfSR?GG7VQ=n5Of-zPFcgs-09O z4w#LYmZjg2Q4^IGHIrJ(7)YH$bl$YmZ|Wo1M5ta-RW0#AWRDSgqlO3{v!(u!1n@9cE!$teJY zaK+Z(hx*@0T&>QhB_wD1VEw@f2!{8@bb$A+3W6cA&-a=(59--HFJ;eOadK~E2q>=Cb`x(S z7QXhwXO0lKq0TaGpX+Ow-#k>ar#r>)PW#FrrBz~q&3$57auWy;R$(ON?)Br24^E`z zdk#t1G6>l3``Jzv&N(zzywO1O9;pHo;r9w7o(XbA&)F4CY+lmJ8v_+27wEV_M@SP4=avC+@G?;lWZ|YDAUbiv?JkweZymqqAV1PK+>4_G`57{`U|FY} z$!iZa=io`q?<%USv4}EPsU4H578cn;D1(1ywp1eg*=`e&ntbSYE?0J}k&^-UJbD+U zI$AhsGp`$*)2(h`M6{&S4Cw@-r>?EuF6q-$pznKC|9&}iZz*G@9l=ruzX;z1rYBUQ zxUb~-PV!(}H1k<1#drJr{_Am$jP>Jf)7D1&JqD(_O-E zDhky?WCa_d#uj}*38_FX66>1cw^US{M`DFi2me(9;T`ixtx!Ct4>gB~03p)?fdTFm z)VCAEW(Jh2w2plBCk_$s*UxKhi#U{Tuu}hJj(l7gx(3TyCCwdVyRIgY^p2qu@Tew* z^XYf|VJodjVMxP>#0G7)P>1L?*8+ygr&wh2s_{TS`1$iK&bp&z$KF|I>3-rsq=C3b-U|fXv6oEV;;m~5>0<=@!?<3xJoEqyCLnHvWs{c+pMU3h||~&(ycmOqf4TsnDmH+ z1z!njLXkytQH((8#a6E43{k!!Ecp;rWw9`d9%^lb%StrP^Xtre4*gqnB>hjBQ6_QX zpK=3#_X_iJ(>F{xw&V?Gy) zV%>0>Gh`;gPUihjiae!!#+!)!X#a|YcyjcqKN(N&lpH{V{OO|LIkd=)m3VM|&49ti zzMKlDG!_t@%v!Hry`6J_I3_+cd;)&kPP4i4+iRwpGZ-QhL5%~aB-{?TM}LMmJZTTJsyBst_@l&_!lhYp zxhQ>3$kU(jVo7B|%#d1xM7Min5Y4uVH;X7@pwJ#bGN>9I>Jk>572#Y|0yirwS0cwh z6}KI6okSy$5#J(Dx9}VSL}1V&XvX&yRZ%pR!OV&awWtAZS=*8U@o4^JB!g45%UR2O zwe(bZe^vX`i9x^l)2k5Jk+*r%Xn-a#m3o~DAmwSZVEQnGH6BFEMG3i;VP4R{k2HV= z+;@)LJ)@I~S5+&Z<`Mx2i2-BRjIjJ19;SklxT?Ake26e0fereH_ zV-$zN?iL<&!a%zvwX!nWP%zplSn6%JX!JNXCPyVCyN1F9M^g2hM^9q!lB?7Q|fCVf;8T_vw%ShG^Ad)Y(M2I^VCCeO-F_m6!6c@q7S+ zQso>oXjwFhP4Qolm+&r6#K;Ool<>PfsdfxlAR?U{L zGFr?ED7!^Bo7Y=aOy45th6f8ltkvAu3X;!6^hEpY|Ry6vL`sq=^U zJQ3?kZWB_NMPqiDA!iNgVroIZ73yBiT=%RX7NhSy&pRy6dTFO7EHdb2aG5VjR5+H~ zcC#OZ(8*q7!E&g!IRB1X;k5B_k6Nt$;mbJQB(hMNz>(i)Dmz(-sL#BsOC>;n=COYu@ivhLMsd11@N*ZX7@31DR z7Ec)|WZJPd8H>{xi-4$ntU`Z=ABJlA_CjGrrIWCw2CBA{`A=hncKBKp51oUO_X33BKd zQm9{7vv^;S5zJWdfNKcaB`$RT=zyf7xp|erl3<5#!X4P%=AeKpUgME3c=-_|inaEXgkhL|vfu2eeD5>sn(*678 z%!Z}nK$4Bm=1gf~gNwVr!Vmi?nXs?IpuMa}ZZ><1;!8peYtdvlD4WfG3YfO*#&ZW^u9J(rBr z?b}?=gr@cjE-$ZHJQb8GraGpy6g2WnQ=|2oY9*3!Tvz$=s*V3jc~S#L)xMk}wCfP` zE=r4qzj8VQx%+|^p8i}FNgJN;G;|==ACKl9AU_>PV5-21VJ}=~s%wKZ%0g}{thQ39 z3)7()(LnumnWatJ!d2oR!RQ=6u0R0qRFeD+ujIyhV=RxlPRiXxOe$D!)&(5Gk|4Nr zVKHv6qM4KkceVtRM0PllFB38sARgcxiqi2DA&-MVLjZ9SO)_|xi-wk5N)3%IUzaLdD!3?{M zfPXrkH*XHS{ z|0T%Yhr?mU^fVwF3&q!KwoluruR8HZMSeWUKgdj3TFQ+5nMHO{-LzK_<=A>q2h76_ z#fw&~vfNJURRk;P^n2U{rKk7ZEkZTiS!~dbB9o$1jYWii4+=S9!GKD5oeJ(Dm5MaL z(e5@|bG%g*E$#!FPPt6#*}U$lq^Z!x`DXcj>ySG$1jq*DSK+b0iL=Qt(@UhPv%5bi z=-K}$3BZa(M7{;~yak8DkS%ZuPoSozW3M%hT$o$ee8M?ERUU1xZzh|9!~2huE&ML^ z7@Gd#A4`79f&XT_wJ>HxYQR`(1$H=VOO@>LKTI_`v?VOK6U`8|G|+Anm501q1x$my zC`E=ODLyW1IsN@pZT13{;=^!p3e~bS^`?(Q8mWu=77NdXrF3eDDBvfxu46Mbbp8Hs z`PlsP*dx#{Mbw0g_KA|Yd;Q_bblp%>FOCc=XT!dOwzX9>r-!UO#Jtw9GS<72-=#2x z*k7jwVS0{HBVkOD- zLm!&Bu0=8GrXfy#-; zW&-iBiHD9yM34^NSXkvkBF91LViOoZ^JWmf99iU-NU<0;;Q6~WWoPlttfls#h7&jQ zM9PB%QivRL?zN{}vOfKSX@EjIVU{%T2v$$db$GZ`OG~ zyE2StJ2{(Q=p|-00N$+LM{AV`41Oiz{4#-pcs$)+N{m+u70G1&Ic?LHz5(^MTBE)X zefOsTs9aSR=ja!dcs0^!(34q+#Is%rz>dF}K&y#+%TEUEK3b|=y;mJ(AEGi#P!N;@ z^)6?zQ&X5foS=#<(qgKJ&sgfVW^kg7qmXBuPta~RPcO`OTyC6>gs)|so+GV&EN1NT zR{N|7{%oBaPscGUsf@S}fP?4_b6B5;I(?zpYda_5so6%v04^vDnhg$+@psobu@|o2 z7Ta7vA31isT9@l<`9N-Yp#91UM^MRR%h?2<5ddDGvitCLD?=-VLq>2_?S5%X2eT)` zH-5M=yr&eQ?yip_1@Q-_|851vEStt+>xDc@nNJ? zQ%dTO`#qAn1OeQ?YCGI43&DEcE_x}b9Qz)J3D4`v$^1#4pcXWz4NP=C5R^_W{j*j!WHq3^=T}mIzgS=E^tDU;vxLJNO4~{^IZM6uN}aybNyjx>2ve-8AaqEE z5-gAS#V5t2<6g;ydnn)`isf3q57i@W#;H+#SqyCCJoG}vyD;_tA@;|Ah^1RN>(cL1 zZ~ezP1Zra1u1AslqYJZN8asj7*8O|dO|%Y|iL-D0-d)x34mke8(|}-VY&rV0>rGBz zIt=J{_Wn(*vC-L}4S#xxo+Y}@dzp)ai;j1XK4A07Vr1^-zDL@x+6wQ$ma3z4-FbyJ zL|Xc3CZR!qwW2C!M{Xw7Pzlel(J+0fEiW+zu{k?XGC+-x;{N2|Z272~hna)h`!YEoiS5;#Ym*K3-7Pi}y zc79QkpgZ%~iHcS=`l-n(rFb$sOL@0P(;`RqxzzF1OawWOIk}f}YJnYvE1-n|7Jshs z=dpyh_|pg6zKO>+}myhmDmV^^WcrKbVoDG z43Qc?!@qLh9ZT!kvR${Ru0JowgeUQqb%wE(-e&xDUf^>|yg?HUyxcS<*$%8P4J6VV zsf%Tcn(JYL9M^y)ZcBKk4Evxikb{H&QZLs~3@X8A>FObLX5)fWaz8r+B+^)eG;81d zXU4CE$NsVIZZ};eq@8MGc0_i^jQGy%Q^La8qdzG&Td#&Avv_pqHVe4Y5v$CbcO2GM zO{_(C-38J$gB4!h9B=3g6CNxQ^NWkar0n6ZmUAC!`UMlz0&0$bYTwuX&|b?T%-EwyUvSsxYEjfyB*gu79g}JyDUKS`u5(FL9{9#~ z*prR$t_Yzdz$X{Mjm8^oq#&KH9b+rt2Vzs>^-nuH*KxwCW^ilnkH~LhpNfu(Z)O3V z2Az~3(@Oueqpgaho=ob5|6It86MBe0l6KK@oJIrxhLuKNhD28OqofByBz9* zt5#}d{=M7SPdMYEuk|TgP^}_j^g#F}9Z@D~@)TnrFa}&-!DwEq;N%ZB=`5X+Va~-) zH3$aMa^X5xU7tpj$x+JQ`TR61U{(^!)<)fI;%a)mpL0wk*FF4Up& z5w{MMpeFXt&Gc6D&}8T&gDT-*POMrORpcI02}#Jbl2#fPafzaPT6jlk22vk-4Yd15WLqKLA2xMv^VEa!-l$ zb_uAhwe#JoIGuFf2a9IA9D>RRU0Z-FovWg!@zn1l=Dxy5h|l$DT%(iW<6DK{MyIIf z(JOuv!~vDk-){Y6%M}kR4Vu8rX>2KOdoJ&6vI{zAzJ}usL2$}Qv|)wXxPueFZc*T3 zVEx0tcy@^hc#@_j@nq}OGB69w{NP*I6DR#jBa>pU8gK45{i&o4 zT-Z?r+m*w^!2;BW*)B`e)lZwbVB|~(O2e3eT}4QZG_cbI=~C*)5P$bD-zcUp`wJo; z7UddD27}P7D8M$0Et%a(?<;BarJLD7G>#q*Xn0N!dLOoUfIz$Gl^heBcxk#?reG8= zm?22ffkC0)b_&pl#O^Y3`3V#zd&J;zQ)X)4=x>k?9RU5kWO;Q=JvD=@R`Zj%C3IX# z3RkN?puye#&MYYb7?oxNM<#`o!tTW>h%;?Ig&6Q|PpYaR0D0z42-$w;4UW7=<28zuVGr zcLQHR8ghBQhsUI$s>+Yzcw(h#-C(iuiUw)P{#2jO9PKi^mN`s_9cr_Z%#-!{1UQ3d zts*326`&Aa&9%jjGuZQ=7YowMa9hYK5bj@}>1%iX)&AInM^hupOgwcMIWz!v!7o23 z!74Gw9It3Try%X5W`FEnYkwz@_p_`O0xvBmR$MbC-mtA0(9c|!h~pD8@Z$>sBtG&H z-vX4h$_mjS;P>^lWSNwi^N8y|KR{J|u)Dh1g1#Y1Pydg@bUUoh)Gw>Bx$wJ6cjI z*eQ$i5szVkpQpY(A?#%clyd4i_iJwzMI2=c$>WSwKO{Q}=Z_QU*4Ct8o}FCE=dsq& zfYX#Z)YYx=-jB*yr)5h~qB-L!@|Bp>piUL@n9H*3Ne#t|tSVA(-~V7?89q+$6s?+H zgL2C5L+p)-##6LaAhtBECO>?V^;J|Uq3XW|KZ69x8)~p^i}#+fl)PDG;Ne{FqeaLy zSE0l>cK#vbX1)vRtrgnH=z}v&_v{rm{O&atED@y@$4IAswse;nczccDawR|;v1En} zy-bdW9=>pRZldM&-am#i*~wxtD{_=h!os$(H(YEl(Acc+01c^kD(#FS`#iK4fQqOh zyk_J@<^mOA)?fP=sEYvz$Gb0>UVpmTf1$Tcjs1SReD2wBe-gmksTWwEW$AfrhA0!Y zTWO{ekH^63hRTPnRo?RXlt-PcF2~|@05~V0xF3~3@;nT7Wdh7)-ABIgmt(&w<|oJ! z2Xsy+rZ~M18BLy_Y5?2J3qf1lJ!`G_hmHHq>xeVw;(&x@> zn7gRdQJX>sX~^*!W%NtadfZlY&}63m0a^}CAlPR!zrXmxnU+9HgO2xC)p9j!p=74= z4vvx~xluI|%b7^~!m9!U4z|W_V-_sv@}m+8>Ep)%JdgectEuWgpRapPwBu!%TPp1$ zr{$eKWVZq=g(>Vop&6vsW6~=e}84~|2XZz z>zFo-&IeoPXA@L@{t-$KX+z*nMQ^axjxpr;ag(Fvw`PAk*7tRXzdh_`A0t~;<}i15 zS8PH?6zREJ8f?cC`HQ-VGQEuF+1PNZ^bt(yUae;thrf%?Jln8PB392LUFb(PE1Z}^ z*K76qV!3Q6XVYSfm%&5Q8IHDpL7V!WvhQm&5hENKPm{vj?*hpuD@=qehM8DAF2!Si zBg(jBZ+|~sZTIjwQX>}x;Er{U)KDD0D(Zcvo=gDHtC0eLfiPn}UI}+YhBVDZ4H=8X z%OwFIDVoBIh0g@btHlkj1;YuKRs~pulM+j}MDzd3p#u$Jt$0TOnog*D;{)>2twExRRD2z`_mYj_AuHg_z)m)<#XG8q8G3#7t#Ifj(lnwY?Z(GO;+ZL-nSk28t;V z%I0c9F{Ch~bWG%1c^FMx%Um_UY^6qD9tYRGZtHVVMSVD} zq?a+ajgG`4aP|U~P8pH5mVco^^Z`0cHj)E!)Lb$ zYv<5v{5pJR`5EH3VLHqDct?UwX3%`~2NlkC{GCN*>6ZF0*3YHm>u%66jq&dDKd7Oc zw=tK{oIpzY+`_g?rDZldw67RL&BJb~a9ZS%px$n)#(HHixJC`iaQxO}2aHK=l6vd= zOz&25+u^>r#dqE857Wr{7I|gxPcpAf0W_LuVo?9AXDg*8tJ*^^OI^-bD&Rz!!e6cU zyvvqJq@?f6R=(M0xllFk$pVP+$8VvRbZXI)kRf#*=w9hp$?afr@@-t9jR0GLWZ_UB zAJ1b<IwIiC{oMT9VV; zwbs1>TxI}@JpwXR=P4moh72Zo^UtHDt5)htPz**srM+tRN;!E5mbJB+}_3z>|glBKsX{lpaTDyy=^pVoI3p#~INz=ZT@)^xA%E1b+=|O3{(+K;) z{N(~NUZImOMFo1Z7ov)Qpt-l${HkoqlHFRg1>_ zhv1E7oiFjj)==74Knh*yJ9I;aj~D^YHRB)mB9jC`CSIN-g*n%z>vqfd>Ptz90LG(rmHtPnNdiU-K7s3sY9YQ zWzVg~#B^LBtYV2K*Ir3ZfboyJTNmC%;fqm42Jn!vsW`R@nFENW1P>9UQ{~OzA{`Z` z@?T-cPq5-GU5iQ)F3(ANg=PP2Bx)Y!l|4+~vP)}J1y$K1IcgBj0?Up9WjIpn{&3L{ zooqj7N>8DqHQDuN3t4#qj!p`Ar<`5lnR0Q zIGXozv6@Qe)9cq0)bihd@KaNLmCb3=uMT@ar7lVs$3VA8VFrg&3tiFh3=>2{?a%-* zl-PERzH`KUSTXHC{%WkahQPo`Z0(wltb^rgTlP)o8|T-l5+7lhlb)r=y$5bueaVZu zLgyBwJNdx9yL5LXw>1KynLt;!dJcUJkycv%>Gs8b-D3N#-yB|xDYDJ93AMaQACp87 zhA3pK;@xY*=#fE$!&>rMvg!nFZPH4u{g)0dnR_Q*zL)~;-|`VU7eAk{ULc!Z^+=oj zd+sZf>zdpaz29ri*j65^C%bsy{p}-ND3P)RMJDBS$2)1WeWI0(B8R(gDuT<2u5MLF z#y3sMacCuf$wBxDs^$A0nlgn;c7jBRj#V;S8+f1Ye;z6uyu?i=^@dZ+rEg8+v=2ok zW$n0G@2YecYQjJvC7s9VI5quySHo#Q?umlBfT~3tTIro|E4?YLd**vFQ6K)eDrjX^w>u)HuPXn96 zftrBdUuu~VO|zP6L16_#L#6EplZ#*Oje`DNmlHH*e^;A3^xH8vdDi7O+l*pS?@=coYWMdg;clx#Zdic%h@j^+0EWH9^`2v6w zk%*by!!o;EGO78G?DJgDNI+E>Dz0^(XNTW4=8UuYGD`H=Z{B3cSK-?Q=1 zYI>@usTWq1d8sf=nLC=ok4e>aSDb?8d_hOxq&zy5XxkLh$~6H63?_4 z_es-0?@4{f64)N_QfVUiLZlHaCPBbCXW)&zM(iDVcz>~+t^8jh1u6)zKrS_yq|qzX z36kga%%a}ndsc{6>t1&qRPMkwL=@qX$I>E0#tZ-5$w+fCL2b!REc^Hmh2raU<@?=U zfkcH~>DQ?rRqE7d0|gg__tN_i!!cA_yL&(Tv0zu4AlsLl+3Oqg&hibkZ6zz_={)?Q$xE^B z!!Yr-XCl9M2&mhz1)9u%);Tw;nOA0}Yl#WsgMf^C%Jx~p)E~@CsyIR~9m&J-h zXA!sA-jfTf?gyKHh#dzJGMC&b?l)voPgs9OHpXVVV(^o||2$;)kd%{U@g}!a_ay*~ zlJn`ah?ycF;H#|{4?GIpF4NZDAI$*Bw$ka|EG}aQ(4{94Gjv`z86_ zM)l?Fj{y(`sn8x3sqg0w)-GLJq}^xyB>cy5w?qKQc@yjI0ih zo9uZ`GOL7!y!{z*K8?Iu1TveiWGf|x4V<&1oz%<2 z-_Kd%NQ1sk{$4%8rD9bH-RgnpyO6)0@m4dl^GdBN3t2A@xZEaf1WXGTzC^ZM$Y}Zw z&7ABWMT6wv2X-y7>#>p&_TZ_b?gyY}ZB1B1>y%ooTv@f;Ya@=DLiaTzupe%3FLfLp zBCJtUT5Hx|5v-tVt_BK%R1DUuV3Nw%5aO~HMdr8Jmkhs6$r_iR-m?c7+s6%=g*)nR z`q-JYPzn=b+ucQ#HSNm~oOz&uxw}gKiq%Ty4)XC}uLr1?R;a3zG-KO+i5|$lguaB^ zQfAlS^Ne1O_^xgGJ#YLq&q4WKrc~~yo;;ynn#xr5WL;|DA_MRcw2ucc+jg5!555iQ z@G{dQTo-T%po*YVhHV$K3!Um0vZ$v+3m*3P`xF_=jm9fv((_wD%)6eI`|q?bOua3k z0M;B9ac8A*>+CNmNxc+O=|CcXi!edyBzzs8JU^C(sc!xL;!@D#l1~+z!3s%o>o@lj zs(rrJJ!sNihVpr}r+0>*M;{HcaH))9^RDiHpS-goKo(Hes6a>_!GKqpzZrDm zf_6J=;C~!Y_~lzwNRt#&;W`J^(`Fs?O1xqVzgp`6sTgPDRZ&Bg3ZB9L%T5*L1uGU9 zR|0^zK36=ibYzwwzZPH8NF6qHL0v{mV}~5b3NLw_KLr@AUlDf>bPtyNOJEr*lnutP zQc>@`X5?2RSBz$2>_~AH`~AmJ3Tq*O6bzLE%@i?GM>07Je@{UIaQ{c0GD!O$W;rt$FhU>^@Ko zDxv(7{W}aFn5Ye(rLjXFi(*1NRsI3+0_$cTBRP!npWNmg*s22sHhPKF9+wf+0H65{|SB5h67HJa~xz z2)Haql#Vi|L@%TKj7%cBlVKj-mHP8gGrHyjxEnF)U|B41A@~XkgdEK+UYAj*2D`Sywmu`g= zN$TnFTV57%QOl`c{OQ&qmV8xTQfZ7(PPcIM_G*muX7!hr&TjU6s~D>-N;=fC6IiC* zl|6)_D`&4z)oOmjsTujK`Bl4k*q-e4>q@r!j5g0%OQXM4BdP&z!(mH>zk+89 z@=u{VqJ)!tmwviH$qCsRlFsH;U`hf()qI2ul3gFTWdv{Yd!l><2_D#_d)2zvZMoHd z&Vp{%0`5ZWdb4&^dZtq-Gi#RM-A*ex$$H}Dwyg`G)E`7#{M7`(lbs>0y3x08 zsVe<{C3_b&$(uN@Mzz2mgV~d0Zn=z-7^4543zNG;s{rjK-`5%b{COti9@gu(_=$AXPaZMq$`R5;>FIDuroNx!z$lx`l+`&wod|e5Kl88Ub%R$3Q{`4N3ZmJU@ z(y=1*<|gJCGUoOs;d)v>8`4r38ECPSgFs9YNLr?_@6gcOZyI81!V^eb`~I>(sZ79; z$!n#ykG9DK7IG8P`Ey3o`y`Cf1vWJlgvg@qC)AG)Y6blWVjgomq)ty9hx?bnBv~@L zFRcE*W2+WesT%G#Mbt@${ok?S9-qeZ915-Fnl=5ajDSqtfp^bk14?=sjL^srq9u2; z`c>SZ0AtKWJ`=^}KQ+WAc|W@rj;ppA^3lX_=wi-!8!jgEB#}=DZWZxW3&b4WtnK~` z#zk2+NerL=yeO2<^b>J-8?SILkJykG3hSY@ZKoySy@HrROVABJJqDcA8B=>DqQSpl zmmrh3jZ5cp3<{ZepJQixB~X!oacHfD0_WIqH_mWA_S{M`SQ~PbqjE)=r98V(*m2*` zeZOmcfT-xv0yai}&a3DfIgb!R#${2W6)LExiJ1n?O^!_h6+(MM)c}~37P^1o_fyKM zJUhGX0~Y(^k|;66;nT|m#(1P;-XlzG9N>BP=N_3MH4FX-v~eYaOB6S%S!^x(9_wKW zw~B?YLb}XgsnXTjtdf-S7IFQP9}kI4+4=r$MNhdv1X1yKP-`Uw^@HYsO6HR&xX*?jmBur`rz$>C`mRb$cgn~m1xcc%Anx`Xs>Uc-XTf84cBM>p>8!G}5Z zjV3K7{s?s$H>+YeI+&`&ML_`+Rvgj#Nlj3STe_U(3ApQ@lNh&@EH=e7h)~^2uK#DT zYK5UE0!yG$3A89_Ir8}Ql>lnyi*^me;@KnCi@mJ_Sm7$Z-iLbiF-!;Llt=lru~Ih1?%H7kH%f^G0il$>b-^)R0s&&^SC2p9 zt_#0Y(b*pyoc|5vO%|xKgCUFY>w*H9x>3zazGm%&uR0P~XxncSqvN!qlpP$jurV!&e<1bE}IRDckGw3kZlweg#%q zjrwXDVxcuE8jt=Oo??O;>97QL+(i42R!Aic?9?qXD}x{x%z*%+HNE8ni*MPH*@zV8 z0m1ht+QHWvsamPJ%L^gQw`v5K7`v@(&pj-mhZN)AAd0sDfiD^AS8QP^Oli5xqW}PB0IP{(l@sS@WM`^=0Etx~~U`kCW-# zS8PO=K1ap=*@8jmpU0mhIT>ZfqTMwn5%G-Q3j(&=sG>(g;u36nnEA-_=*MY7FUt^a z>aOcOs*5I*O^x4J#*{+)(VzI#U{W>RCq_KKG`0>cXvxf&dRcw# zp&Xr`vG6+3KKM|pwz38bgXWBy96OL>)AO`G^`R0v?RM|>_~Kkr%=-|NMfg|7)9Gp?>9rtsfd+BUS-!ql>XNWl1d^AG1b z^hgL`ond*_Vk=dp=gp#^pgCFf%=K?iG35UYLHOuv3+1P{#YfWCS4I^DYC@)nPltR0 zz-`$}YN@ur`<9+=$am1P78YhcrL4IrdCa;19J5VVBhr|79^*>eDswnpTYPqGF1`F; z7=(;d!eK$TW$f(W#6?8Uh1)GAZRi;E8uZ)ljhJg6h{gm-U?q~Cys&d5ZVhB_o&qZ~ zu7)uQ;J?4cwd~DsaT|V@D84$a+G2iZUI~22k~mp-T<6wWnV+oGZt>dsyQ1`Y*tmtL z_3EGzJMLak(;AimLdwxSq>tFj4db_)dCi!gLY9mjx?$r%hm%!0BgjLgk%y6wUsaKx zs3ya9SDvaO#;n@oE%e+ai?~2AaB9`ki;9%*b@btQ!ULB{&Pt#R57(o7il(YQD3&l) zsl}Z|q`QT#eXEhIxw^+#|oAh-bvq$k+I|P9OJG^b28WWlAO5+ z_f8HR^|D*>OMsjjsp%4smMrS}QQMJY#>ki%b2Agqj{7tCcV-NXjWmadL+2hi3sR^5 z1BsHW<3P8kxrXLuB$XrC+ugWZ>Tp5#9B$Pk;w#-W2NXp!^ zL!)%&U1Ez=9{~Ik9{OcMZ!#)MJ?*w36)Rjz%s-=ytl9GCNl>eHG8LZO<|RE$N3u&( zXoecIyE9hM;cQkTcl0n&2(W`JB01=XE{*}Gb;hk;XsyT0jkgRA|5>=eZ0Q$jfET6G z?e@=pYRTZQdD7G{D%xR?E4oE1UC+ojCSZiW9q}NWS!TXr?fGVtz`G5ZpzG**?bPhT z#YsMh*%Y??c2McIjtgKincx;1f$8a6w$mB$u;hfG4%i$oXTV#6Wwpz<1J;yPy{yic@DS_<#Um!2G{EzFE zl2QSeiLGMQ##^}6HK1EUSJiVoBwi2yoJmvVYa zi3pOAM3xQ;dW@%h zh5XlTWwE})hIoyXZK$XtZEW?{l0XUbvJZgFDDH|FZkq)ERU|pn!{5U$DpKFDXkU3P zR-YSReKJ<9)I?PaFegO}TQ`t~P&uY)#B5T)2Y_i>OOrO$jXb3V?o(oljGLS6XAGJP zllWS>zxkv_y%;z$z+Mg$IO|F^#An4O5>_m{e(F4oCFCT3;U&%DUmX}gcD2NdK#TMA znDHNDD%J?|tW!#aNt58ygY52zU0UTO#zd07rV6w8dd}-=NV5`TfIR#(HQ5$~w0ANK z3A;f9d|k=;T4}-hW6IMObCg87;3IWkfIW>Tz88Cf>j8UfN~b+>{De={S}%=MkEhqK zUk!SzE#Uu=>_6WW&IRVAyR7C7yFsjCUj{D==c>~;-=FLE46;oQe>Op;9qm<(UtQkL)jRTG|J0m=7si7$aC$eIV!WO87R88lnN9*qOTYo%#-26h z@3VNx$naVu7jP$rKN&$cxSOfIDsR+Vx$kSI{|{yVz}#un{QJVOJ+V2lZQHh!iEZ1? zgcI8~Cbn(cHqUSFd;fPmRnOk1>b!xg*6M}sYjyYMD_sGhZP>acD<`{qiqh%W4mR}L zTi>)f@^(^c8rop~y{yef$;sEN{BVdY%3%}=Q5 z>3B-->uJZ>4LLf{4p4G9`=iCe#!ZM4>w&RyW~EMqki$Bm8Dlwymoxh^XVqCgra|-0 zc&mI*?Y^jq=W+%)DcVrq#gYqV8f+j#HGyaA%7#ah>j^&br${e19O#;J}IE9Anh;ozv+% z+iRu)Eo8<>B`kH8y5l&}a1wYZjsYX2q!hHmTE<{dxj1)Lk-U8s3J5=e$ik4q@`xE> zfMt!=w4p(U=@0?1%d6gWUvX#}6vLe5V;bsv5<-&nI9d!tGAZ)hy%W^V>fe5efjNVd z7&*0|B5H*|%Wfj!s3hD{*W9Ir8=e+}z`Z%Op-52B{q;YAjP;2S6xhg35nxkXcIs%U zMDCR!6C%pp9`NFZz;apOjAQQCUCHFnc{DD>&?}R88clH>#)mFEM13iWl#UO;P-p&d zZ~C|%=jX#xxG#~Fj1EduqH=N~Frur}Im2{$cKV&*&(Rk18FGuPj6Mq@#X+ri5^?t* z47`xm_lZZVrHJ%e={EfN02vK|l^gSB(dtW-IF8<(92Y#;D}CYidR==hm9iE>)>Pz4 zZ7m-72}V&J4S7XLCv=R)m zq~MJzoynA;Fu+C%xiMc;S=`FNwdCYH9Xn-hAWO)k$iKlWxi_tuc?=aGYOQ=JJoP7_ z%%*&{4?>XQg-j}}nuDw4I-y~@(q9J?9#?uj_bnDG-bkdk#sA0X!VForOoV~vwpY{+ z&*ZI*nh+CK--}-R+fR#lJAoQ5GO?F3;|c9HldJ=V65~6050X1s42a80JOPf_3exyaYSM*sc*j1 zgT*`mxNOxZ4=HOxUiEYzPSJ5xK&=G(Zp1RQ{YfgnopP13W5dv8ndGG+uTz-2pLvZJ zzXj9&Ol8*H`Wk(<#r+%;jYe|8;LN~*htPow)S6|4j7>w zJF2ANV)%KPG3$TkG5tgZ-{zQHt|Fh}$8YT+R)@cfP0+YY%S+2pa^7b_gMI5_l?Hb1H2Q)vMS^(C$xK4DeRvM8O*yQLRIy6roQ zhj6oz4n7J@@=GH*SjwNcdE*SpZBOMgqXg#`xe$#rBJb~Tj-0lo}uNi@FGmbBx)vV0W95blh0FZo>f|#TURv5#eLj-%6 z)1@g~4$WQr44k&-m*Cm^AwQEwgpTEyqV=otfAoN(*BK0}2g@Knbq@*vkwN~f+&gh~ zapevaXDsX@v8NQvm0uxhkbC9o*j4+RYpTkrv0xI~>1JI~5r^{m;$MVdHcmMYJku*6 z4nTN*G!jQ%{iC+>b(JyzMU&KTa5mL6s=F!70wYxgoQetM5df;P1kt437JW`fbRn%! zjDryat8K2+O8^ioPPi#99eXH&#U~HUJdHOqR8Zj5TGITF_Efr2;h#Zw*nro@)K9aPTs5NPTbez|v%?@uj*AZ;6fLepemU9lW zJr-WGI{b%7zr5gp45+ZMzfc`*jN1(GPhXqLJvoghX*>}BtYZ|A?k$*U_C&2USVXnGguf3y(?1DsznEcJrxi2+Fa;PR!+kB|3q`MbX#l?dIY#As@ zF@xNO6xin8Ex;z55q4ckb0kshMpyQ=M@rr1pd!>J$WoK1jho z(b^rt-D?EONJly@H8FyJ0^%M-lxdXrOTwuJ+PyN5&LO0AFMZr6<1-FdpOv87vS^WP zva+AoP3839G!*{Ag1Gcz~hse+yG z64h}J2McP?fCSRh$CkT7k`VK^x}t(pSkar%Z2(fQ&e2JHyMmxxC=v!B;f$9%)9L=fV)PaWta|6ph}nIQiT$Kdf;$! zGf&#gu4+4Fr_E|R_gyc5v<1UOv9n(VkD>h;Rvq3;s6~TOS>qLNy}p$w^>7N;p4+Y& z2qr0I`&MdH7RXG6VKsGwP`O+=q)ibrxtV~S3*7|+DU^uJW~BOXsJD*Jr;QnLU5k=9 ziew*J&cOvLAi)U2Eo@db3P-nAcDs1AjIqjDHQV~vwAb5B9u3&wy9DFditQ*G68I-^#`WWm?pOu#` z%3yVq6l@e!l&3~Xx>Awg?!oC|K8c-6TMbP;C#Q^1-G+K9}FD!oL8PZl}J8IgN!Du_XpXMGlec#N&`jFb6xzncVsrV4+`+!ZM7+x zN_6o^M;E7e2Ml-V|AvwGhuV=SB?67yt9Z#$p4{|(sthqbZnRGU;PHHDJ@-bly2AT3 z(yz5!HOIH$W{s>zqiNt()rTIG~jsN8iC(OR?jaAuG6$4pl;nNpYKx<5jC9?W$buFiKFh;<|VT%YkaXPZzbE z)jk(ZIt&P4Lf3Aw>%UUiw6W$sCvRfe+73}l|+ zGC?Bqf7~`J9Q9rVBs7eAn=_G5aue=Gp0wrR)g#TgeVSfUl*XyhF?-j$CE*~HAY+ff zxOGzX?|Ds7LjF$p2KM!ZQ#b>(FDUgV?~!drjWEm88>T!P=@badX~2Ul8G%`RHkfMy zL(>zhV<@73gz2_R-w6e_c!muAwc88mepw2XR$uBq9+60B|Gd{v9ipBC34o;m9C6R9 zW?t6;B)@sF2hh-rS zn~+kPIG3G0b2A3?crHp5FGe)ZdhWa72y|5zfPK#b0}6|F;9aV@QhiTXu^cRQ?sflk zEmK5W!t1c3m=Deo3A_+O84tUAZHI*d$PR4X&nxwv5PivH5hEU)%{${GvI5G=*!cBu zgZT<5DWwgvf2XxHjlm}?I;Q!a)>hANQbUN4{CT&ye}Em= zK0Q(x?&ylzg?4U7r$%WpZ93dAF#h9^{X41UgUF`Kn*ne-Rck8K$88wrGSH3SL~{;D zqJcez4*%W;E`Yo4BEz}5o}@Frp8049gP~}QddpGNRjNVki#fo74FG?6wRC>9B{il*l4=7Eu{ae2R_%N|I_>UTLBeW`Q;+^vi>UX)9u& z5wrCi%sw$RRfvDWSfYql>SCD(7b{h{sZJ6Sv~+ebtZ?S25L9$3lj5O{fi5Xyb)YyW z!%4ub@01i5SKiZB_xr+*Fr>TXoA$SV_V>xN>{gBhw%ABU_Vsv8H1F49+h6bRvdgd6 z*hw3XrgYh3|K_)89M|`G@%FFrS!u7&Am~(fJ;@9dDzc+OO}jwAIzMu-E%P|K-sCwOyDc%#{Hk)=%Zk;dE%I zYig__O#!mPx-$_}z>))Hm@ME=a87|;s*-jyT3ND5O)zMuDR4Qw7E#1?77o%qI;v`LP6}kXfz zj$Ax?NHDQEI7uk&RDntUV;`GK-|HM1BzhvZFYQh)KVZ~_Ob$1<=Yc!##w^0Uu@(9B z?v-1=G^_oIda|y*-l(($%|SAi0c#DdizZmT8{yKTMVpST*dJ46{`O#7vB04NZCxfu zGizFtNx6fD_DJuwtoYYTtt!*-j3F3e;ICL;8eutcc!mbA?RHOn7Zyvhh&xJk^%}t$mP6uxA%oHj;`` zW#g1Ylj8ku6WTUlz6H05q?7@Gi#Ojrgeo>1E18Tn0ElXJiS#(1(Jy^0>RwJtFHl7^ zKC~vgajk@8+Hs;dM?^_P#Rzpm1x4vl6@zl?7vpe1WumaT@CXna%{aD@P|yd;^S6)U z4-+hdQJET8i)D*`z^m_1phI7Nmdkl5hj8AmB2DBL>SrPVXKl}ef;SbM@b3HVqD>7X2jQs&&FGWkFT5Z`F^7vx2tf9b3I9$> zO>p_CE@$jNwS2DrRgneK>{LEYb=aHw=}_?{mDO1daPoc}9}+^&I{vb6JoZViv7_3w zT6;}tkI@1Qp_Ie9JL{d^Ho$iUU@3MtwXrxHLhHf6UNK;2o5=gadPh0x(`9jZin^7Q zD9gohKIXWQ!s9KpU2A~OzwI`AmBM_BH0HP|Z?YVj1~V3l_uPf(qcF=R55(y5l(Ku@ z<~fNvzQ1i)0??>!#=qoqGhDWW_S{$@VcqD6r4OmJ+=~qXA7-G08BoVtrP*Sm7gI{b~?>vcXd)N4TNSFt*4BllmoA^J@v{ zHK2ejAcW|Q6{VLUoW<2(vRW^R6xtw%SN;On!!p+UeH8~j2!rGa%)?TC5&?vaboDyx z0OvqfgJGkw)Jd*iEwHzqRMNv1_W%-~A74qGWXsO@4N!;L9Bo5boHzp&S@N`yt@S7i zNx5~X}XAev&B@>=Q zm5yES5c{Jw0Fp!sk9K^cE4q1NAr$`cV=25C7RFfrcYGFd0F;=$4?sJq>9i0lqUt%{ zXHv*ji)OK@%5Lfm!sH34=j4!F+SRI~9uQlg|KB7Q_P4u-cBAPeDJogo56kSwD}=xe zdWy7nm@P~SJ~v4xC9_fjnK=6>4lzygi%ZP@i0C`5$lp{q<3qwL59+Qff+)5-fK4Y3 zl|BOb=c1Qe`B9xqzX0PzE+r$1)l^r!arpK?(x^WcCmNF(oae}#Djf)ORGq%&7Q4lu z1X3>6S5XlGM{1ck+}FF%BMog?@4meO@$Y~>d0gc0sApUqfbtpmNJ=awC83y-FJD^$ zgkG%La|?IZk1JX26t2m#MnfSsUh&QZSCaoCX) zHGob-cYzZM)T8m)_yqlpdY3ruN!GUAK7z<$z*m`QJQ@Zx@iYABc!uyGPt#&&rMb#+$|sKiW&>rEr^Qr^jC@fmrnCo z_jaimTQ$lSCO}K&)&M0&*{~x02*8-))NW{5f>%uGLqVGm&uB}E4p(_u5F8YUE2>R2 z;DY=`c~DXMsFLUnl>w2h3Byw`-$`PvX<k!xtfz12=j6<>52e40!{r%E~vX#c|v7yU0bTyug`D^|$h zTI3Ur&x1^0gh757ywn-?hI`Hg0{x?U5xFk&!39;y4I*P<;*IywzwP>vJB8Wn^O*#* zYgqznfB4c>Z_(uD;MGaPsS#TgKvChtebeS~Cn_uqw-->ByczN1W5Mk#!IqOkF-L-y z^0c!oEhJ{**2lxzcjo5iX+YEaKNF}QV7gr{Jdgk6yz&&YX-Z8U|1PECJg*D`;Lnnr zFT`$Lbo?b-fXIpOH@$nJ9McWSzXlM+PNr@qw$r__Lw&BI!uyYj5NJ~ ztw$GJ`7RdGDIkE?)z9{d$ZH&R-CfF7T4M2xK7UkOlSYXq2#VN!N)P5qr^5*@7y`!R z@BVkZTDUoL+IGQyrBhMtbSnO_Pdv1)+lc+^F79SoFv>F~7?@Q4L9VMTACojvJLP2C z>S4RwL<8mDNGKMB4o?Go#S-NS;C*Cv1-953{}&yWX*(H1E&8Wvh#YJHsA_EJX{$k+ zGc4f5%x!v(m^qJS>K6+NZT}Dg#2#=kVUb)U1U=qE)5@-A~q=<3n-z|O!_;h;x zNlXmM;#SO9d$$NPCcd1n+|II;druUN3+{(Zd@E~dq5vRVeG0H?Uz2`!MZ%CvJQ=^Y zw-N*G7Xu`QaN6S#^j}`R5Cea;M+Q(3pZX_;j)ms^NM;e6l`u=5P&DnI0VBPHL0;7l zc~_l8s7x~}JE4D5&oXCuIz4G7H0x(*l>nVtu(Zx zw<4%|ar5cwXc4L2Cp2pNbFi-9C-np*-uV6PO>g19q~_w%{A%Ii2T&ASdG5+&aENf4 zhfc{pFha%)!YEKR(-Q?8)4@qWRtI9p4O^o~ghqT&>ZsnFbtJ2UM{=09?(Ll`DO%+T z!hrrvoQ!y#rET%1!$1r7YFloz#ZK2d`NYkwIi436o3smJ~_UCIXQVqlHz@?ro~;A@hx0 zrjsD(eZ#aqoWkF-X*66!M6SeL7n%irB^BjHrsuzr+kwnnAkcIL7!u&UZT*O87L1WY zapZ|9x@*UX28f`BzVV0h(62c1yfiJ^ufO_&{P=I}!z2W3FpyhT zSX`>81-g!SsD1kokTl{^*zvhc;5jva(vNXlI9`|oXSpc3FY+46>`OwW^+ z*d#AnET}ut?C{q^!gW&aWFD>dG-tFe3uv^1i+B~G?hBl`iXq9#o5PU^dI$Goe&jhC*RCWZy zhs38s@T8;THdq19=P2xX?gdlHhR+3(v~~*hK(uRAgfFBa4c9(5$toEnqpmL%Q z1TVjVcuCJg-!kA{1)HuzS#=!qMoAUO=(r&cgNc;BF|^zmXP8Ef=r(c5?!_YpuG0kPrt;#S1HWe*7jaEJZZ;{qZ83B^-e13r#|2vKYzx=@HiGuqjmd}K7Vw|u;nV#Gsz7& zvUJaD;(9HV(=gDlusGprI!JFC9nf_xQJ~}HbTa6$4P=#bGe!#hiy|DRfuJP2Q4tPh zkag|&?l*=$N~&q>a9&%S8U&EyhL6s6ohr#NFJHAU-w7UTEho=uudY{lGe{#jaXnAm zgkNQ+&IVJ(E0dR3m}^w1!T-jmA`J>?*1w)q>p(j6T?foxQ;#yCi{2tUn%#R7$Os&+ zhIfV_Y&z85JjVI{S9z7_UJ+}j{Qb{%`$73xwvX;)ad(eRhAJmgIi_>#%5rEANnvbX{4AJu#Q zY*@e(&_5JAlmGtTn4y9Gr7|e!*!EUrEVIt4?QA*liYjsJuRJ)CA03T0*Fw0vz7~it z3e}54XDxnhKXT1`IS#s#e;w|UL`6dMJPjiEM&!ZUEjoL+MNaG1!*!c?YeGuj4EA~w zpAJ9#M``qYB;Z9ntHtExapo#&!~_{2V4@ntcGkh_<53QqE~!DR>G!1js7!OT7Nc}n z9+_lca7;u6D;AB5-fNExrCd(oE8c&wYCu$^q3$9K^!sA%NiiU}D5<99FpoTuFaF`I zjlPt!BWex(dQ*_nGw6+GaF02Zsx!d%my0FNCF74kIko_jNZhtjOuaI{%GswZyrMBv z8?(*j%6QOr;?T0Z9qQPXtU^bFk$(;Dy9fz8)))bICZkQ4y!YD^hRvnnx7BY}v0)pd zxTF#jIW9^&|Gh_Yk4sP?fXAcX<$gd%@2>iAp1U?h{Yj;PAd4oUs`NOmcdn#u{S7*6 z0>(ft<4^Ijgw^%*OpoNcB6|>J~(Kp**J_v&75UlHjyKJ9XmSgiRWtm%izW z7E%{jgL{FKAFm>LtcJSKe;c1o=wBRW7MdazwpK8UIWBS!biHyo66J*F1;`Hmg1tBx zdYWqPk<$|=IauAnE-Bi3txVl;b;8$vn}jgY3cjrlB_f|3<4px+!V0A7%=?(w`3C*! zlVi)0&;gJP5dO zftsTP45r|H-n$EaafYpitH11b6x}lh(-e~$EJ+G#G4+)W{T7&#r)1Hp+>1s*844Hk zlmE**uP-Hc%;_qq{8pys6ED4p~_7mPPDjp2HoJn#8y`>qv75!Ug z|F7^x|98@~?I-PSCvsrjdqP-ret@)ZI>_z6=kZV4UbJ}7Q)pOM6N}tA`8H^lXTNut zc+&7zXYvKYhMagqFbWSgV!K#H=%FL!cg3+ z1H&JT-kLdJGp2AzeG^c`;}r_EFu*t-e-eUIj>xb=7{oY40?j(0Fxe%T3z>cL_!j2HL5TO`fs0l zD1|#~pqL;KTX?UNoW_*3#^MHr5cZSlXyOZ#AMzK-_~MZ6vB^-<@5TFNac%GG>YIbd z-Ib#q-&Co_p5b5vuE^dfzHQECsOHn*6<5;oI>n8=xA4lKE&rKpFJNW$KR}!=!kP`< z(ZSA_R7Cful1R?MI~x@$&mvJ!AOu*j`s!@Sz0ksc{B-AGR%5|n2_GXhWWIF{VLVa^ zeA&rCBOT{{4ND_~mp&?Bat(LOa+s5dGKit#71KPEme^GMY?p`caeG$b%Ft^UaJ2$e-m|yQ`2w5$o1pebH2p#S)e&Gp zi{q_8F;<>tIk9jvtLCrbSXy=Xvu7EmZxFp-HnN4_8Q1{T?(gS$=1g?iiktvzyO^O8 znEFnbtzXo%juVkLceKy-(opUs6wgMN4L^t$DJ=h1zFeVcIV-R;JP020LHKM zAuk9Emd9!i#G{VHeGVs9Q^Zy-Jw`OorgTr_qu#1Pwg=~P%!QuA366K2DzyEmE z*{kkqEiHn2%w&ckwL$)_b1uyI67l;BuTrqR|IKyu^5a;KNR2iCBS1bHZ6LzLo=kSF z7Of+FbGDp5H2`+Xg|X|&NnbbqIY8>?;s<9pfCGZL6@VO4OHgbI6CeK(82sKi3ZL_A zZnvDVUGd!ay^Bu_+@u?Ea>!`bqAzM_t$N1m^_LIs|XWPIU2$3-@wv-#nYrYzgaRFo+o(nx+h zR`8dJQuOP=IrV`_h&)ky^>i?WOF3J;mx~2((X4Y@*m8B@!*^inrIXU2ex%2#e57m} zFh?h_%c)x5iW)a4%J=9~<|VoF`AGt(s5ulmgqmiE zNeXk;MO(fhqe3J1Zmdk&nx0w~?3LT@R?o(M7?4k`c6Z>U(XYn5Tk6yxF*p8q`n(65 zBL=#)p1aWt1zrO^Hk3bUj2-sL$03(y89dm)aslCn0B`wzU0|~cuDP81X)cU;o8hz} zF|_(W)0@Yo$0O}JoGth$R~nO99?|GctBym7+#9VRw%IOpQpt~=5Qi=okow5vzwb`B z4!>h;PLg+(Jwp0HJ|RK3UJ~!2t%Y7TEAgOEUND#3BN>}^<;|;-WT^PlI0+4hG*N~T z_0VD&itI~D05+`axk}q;(>j`)%>|t3y&ww~_5Gxe{JNi;Lr2Y9#qEw_o;G{>G#IEu zAJ{?JVkQ0O{`S8|3&wb* zn2!>4L$NjT8G3{x%&boMMQw}X_Pl2xyXb$f0*j6B|L%K zXd(Y3i~`xpXS{os83)xC#k#dMb`(6-QRueA28SdKyD)F$!LfHf$S$Bow$NWF2JTVQ z>q08Nf%r=A1)Req85Pdsbd_*a^{IW73RoFY^BuU5&v0@81Pcr)#fTIh>tM50!Q-)Bp(c($E!jvV50eP=3tJH{KyF$ zgIX4xu_igj)YCCvkv_x8A{sMh2}=OYfE$@&iAM|I&sdpaYE^;*gjnJ`^e^{c)~d}> zI@YuaUmgv9N|FVyL*o@-A^o9z1z)2_L9u56L}>oaxp@*K_sWrq)W1!B9QQ+!BL2|m z7QUG{Ech!vz)(@RI%3Eh?>+jV@o82z_5Kd0|I!e}0|m%qlK)F+q6fr5lw*xxB$Tnw z=R%B!7}Ay+C5x0Jy#BIAkA3m_-F4>EELH`Bftt{M!Imp+D4@!O$V#&T)9)EjXqCqp zxdOde$t|^|(2BMePzWS)%P?CHNs$RNuf~6{C{C}wT|-6PW2gKAkVBb&|2vgzCRXw}0cbYxf%jiIAq&VJgk}Klr$UJ7y68b-Ep5bdN(VA?{-hSFMg~sClbo4WF)K}T^Hm(NNk6S{|9JXaNGRphOAdx?Rj

a-Rc_7}%J7ySpb*dyqAR%E#l z>H_;%JOaHBz=E)eyf~MlKt(E z{<9Yls?I)ElW1x)ej85~qs9YI)^dG)lgQz=4d|(Sq~1( z)(V16j%oVeDYk}2kCMB>`cB`?#JaPh=_h|jED{5L)z+wh-KuJxX9_p{uKAu0FTGkKEH`5s*bXMA*6hvvK#M7k{J8LW^9y_vW7PJ7N>5+M%iqlilIDx2g(~euyFrx_#MXew zs{!$P$Yjy7Zf}HHjTZ(|a$c4;-C0S97cB^8tdFG^*hPa=iUUqbvp4T~mok^SpCq^n zpg1SPR_nx~xai1#b#G{F>AAGtDd|(kv0L~Hcc`60OD->}f=wg2q%*wH^b^k`tuIq37i^3z&jb75OtX1~bvn2$0nMw}Wi3mD zA7(=Za>j?OZ~%(*-Fj(QU}%(#U<4g(VF$(@rYJY}K^3r@^Z3;G1r4A&nc4-GZow%! z0}am@fg-SmyjEv%eZMwH?HCzXZM~kF(c!M)`$}7~RJ4K&-0G zW-Y5~Z08-yX(SU-YCk{c0U9BK*CaRGNDj{bPMx5QJ-BVA0T9v~l|UREoZ4TE6Rs{G zgza&{M@)kVEc=GF2bkyZSAhQX#GKL<;d-pful3JEUtJ6bj>BXAxgGsv9+ak;3p8s` zKg7G13#2q-gEE-EL;2)%0OUS^thr#_FxvAy$BK7>taUtdae49dE=RdhhpVT(bM&hRU}by z)%?vha~0Q~C#$;m5{(Ok!W#{62&!9H2~4;oRBkZ$Q_ z6IKlX+3P=$wgBtA@Ihq9d3N+OgjDZeUuSba?7>@gT^GFmsN(H>?`Y?JB5%41bSKn~ z|HL*7qV9oC2n0xm0DR>MNyO(>*vlIh;goeGYbBLhz}PR3{sEPVUz9<4fI}`^>j_5) zv1M&K>6>_4`H#+QL*9LJF;!cPCS{rDsA3;4#Lr7>b}?24ug!1x_gpcxI4(KdrOIruS~98dFB$z&ncYi&Sw{SBXVc^o9(~jF!I)oP9(w5{A;1G6!aKP- zUfw+C?0;!*_P13`dkcO(f5!bA^S-XZ{~mK%7mQGBIfrXe`=IIiS!-y5KR}A~qW#gm zfb5^s!3v`imcM9Gd5|TzFl1Q^c!>&pEu)# zS)@t-*}b&o(z8q6x>0@6T{Le)gkCO~=+(WLi@IfiaV@D(H&TjRebXmWlOg<%dwHiRKrj2`^YK)C(1A z>2~L}sZucUx3JazHb-F6tz4~a(#)H0uY4lD53VB3zPPD2x?B&@?<`Uy+H~myUD_i_Zt>B-Sr>zmx+iTD!vtMyq8%C z`uZFs{Ok-A9-{8>!)&e-fkFubW6UMKG`n}$PVw+~6a%*Fk)C%M<+4#{uSVl|0$nqD z*8Pz$)(xXWMvcHe;Pk*VM2IXdGqkkR?4hQ0O)nvhwu&!{7{SGFBtbFIHR6iLAj4m? z<9|pT(MJT(CnTspDwd)U_+lQ3=L=2ZQgzB?I*WuIiJhfzwwlR6{D^`t~TrHb>~~O14k+fpE@=f303E> z3jkZ?V-I-o?g|sB#6A7-?<}3QUSdpAv^@N(bqb~M(|G11x6Hm9(ZfaL$Oj9{cix>N zpwOYFxWX9}rpFZ6n_wQwtSvzY!SxJ_0YC6&f-#T}Zv&S#MaCtppU(#&DnCVrjeytI z$AmoLpTOWv{LyN3Y)NV)fApKTicSxq!8mchY)XU%YLrjD&w>T>3@AA}JJ6?AU$+j0J8c;60ZW6kXC9{di^wecGxNCXn9>BmM8a3n2R*3Mno@pl+H zljwId$SZ+I5wVY8I*vb_31vz#CUMQD(*k46cF0V__^FrWq(ulo!J83jni5hpDpVPN zZ7DvGO}e^RBwKKw2xmf)W`PrX*UR4j^$!SgAP z*;gSUqidwAE+zVE`Vy_j&cokM7aJ_~g+!LDT0<+DR#~{_B?)t*yz2N|eDno2pR>C; zlU3-CUy-#6xo$oS^w*y$A00C!F~EzUUya*ALFcCI;{h8doL%Lbx?ebtQjm^6_^yMR?JXP_uhjmL zyo?22{rc|K70>2u%jU2haGQE)wpF3sS|P?AiJ`sM#%KmZz(wY)B+=VMW;OcS{wybI z9nvCc6{zc@^dVohl&%iUH&>izQ(Lq*|D1;#23mj7wdd_vIdu)p$`x1{={_%DI#JvL zzcR))O~FaXbw0ytE|_*_9u7a4znxSR20GjEkJ}xzWBMc7yDWeEB=m~MC-$|$A_U|@ z@Vw!bINgT$5;)|S${39qZ{l8212aq1c{X5@tS`k_u}d}i@=3CZ2RawCsfT?q{zZ!d zDo8`;cD2nWfu6D+^&Zt+*Dc1+PCopjC0omQ@qH^g=f&+C0_esG;br`*Op}|h_jwrl zf5z-iC$}q;arYlX!vi*vdy*V)zv}~*-4SMjH&+*@rEB9OM=w=t+nz{E&^NrLEq40Z zHE;X}NnI~Vt}de;4%c3#XIFcdSYJD_$*&H5c(8e^&vDs) zq4iUjzMc>_fu$E+ZxoS@_8&0L&(XSlgY8}r0Mjyz$J}^_BBmH~zeTem*~5GsrpC1^b{u|_lE;JYy_@B@0oNG+v#mnZdA%D@v)XnHPmf(d`Ety z&Yy2D5{Ha7f_*(>33HsHB3~eo* zbNee6d9-A|VZWlohZ4|FiDoR4e{FBzgbw5WWb3^PV5ugfZtJ=`$!op2@xz;Z1C0xr z)+JRpLyb|)QyGgXI=|I0?iYWrZ$qurar)Mm>tt8K4+^c>X}WN(UwxMrE(|=fLxj4w zZKkm%`&nk7Rhx+9lGp!jkE`Nh+Ql-!>4xof(!?!=*yP>!1*H1^*A{h6!7()WuMH*m z@N&Y-eGyv|sW7bfd4&-PqtCrMjs-#x_R)VW*;z#Q*oyX|wN~q_?D5-cY)nR3Lw*&^Dnsx8}a9k-EA=)bw!}}EM)Hl@EUPItN>h$y$$*E2fI@+ ztI$rGkF2!aw%yY&dxH7eh7G9YWty~Dz5>AY6(|qM*eeCdLH2|=wmFQu^7QY$9n5Vh zgG5l&9p*XO53J+^nv!BG+Yj^ZXE4q4^)`uE8`k{_@FRx5@?TA!Tk$*OKktp$5%2rL zpF?dlbw&7egG*Yv&2gTrRN}Tv-uCD0t7#rfMSkyvb8CD~XFu|oByrab56dH1#HCIaRAHYD`@gQTy~poM57+%99+Doy9vLq)YZNr(bYvMJwpK)m0pq0m;G z_j8gDW%^x5SB2={_lYI=eCxC4A5dnkwEnr|`)yi+U(aPX zz%F;T@t6vW9kYbLqt{$AsP?%Ux zbH9&}TvIZX2z>hp&0N0(UUMp{Zx!+Xq3)f(BaixS!PvHKvt!$~*|FKNZFg+jwrxA< zq+=UX{k+e;Gk2|-KVW`JWqoTU=i^g#&fXi#I@f(F=C>tsc+2@B<9OZHc5BSWh3ze}nGE*r1tep^T~WYQ6FK;3V|oPUX|kN-nzFf7z|gZ?nCF zr`@a7QQlM+B8@one$5?nMbtdgT(H{Cd~DcH3_ydBPC8D$o=QU~IMEqEq$zj6A{7Y? zueOC4)-`%iFLPEzClwe`e{43C!}AVYTvGI=l_g1BqPy1Z)mksFx&>mh@C#BdmDH~O zI64LaMh@NG4i(A1z&pHrDAxib!@>ghw?{QTJ#b)O{%Iq4vvkn=~|e6hA7-&rHNh_9(~xkIuM zKEWhg-apIS?6tSmNc6#99*zJNf`Gq2)T{kD)Q*JBwl{y*V`nRfVM8erjm)kV@vsf! z{Z;|tk8)Y$l)GqZ1FtRY`H+>1^15k>N+#U=+|u*NOeJWm#56-sln6=bfTxWxu8e`A z-JJqZ8K06O;L3mL&5A1+kDB3kO8DBYifPB?E0YZHuqJXX{m z`nHDv`R_B0R34cZz8^jNTY)mpCMO0xE_;kU^||&vb=UUYKra5ZT`u0%X>VVjD8NxmmxA3H z>0*`_4pF^Oz5G5zv<^)O`$Nj22rW*W=`mLL6`rDG87xe37RPmp7qPn@Z8jkOYHvc= z;*X!buJ|(TQK_^1z3gbo?uQ#4Zkn*duwMZV-rVc|+IX+{rGnT>tDn~HBgzfk5(4&T_Y+TS6Ud9pk`HuUO zhYtxS?az(^NT~D%mBbze*;g_Rea~aG3-Z5Hm5a}(!9T?o_b&~&tD1UmO~ zp7*Aco^RCATYocFA6tg`n005b-&B;;-92pN_JFaM6lg0i%?VoB!}k%1WQ>J5>WR*0 z`YQ*5XhMsRkQIz2ghj$iEE>&QG~IJbk>w0KBA^8%-1=K-8{?70-F09i$G>!T-i!7n zXBSMZE`72oc$I&mls5A&E%#ENM}ir~Jx(XwOb@!@p_`9jBCqwM9C*i?`Y~&4*#x5K zCh?%9mKpDuNK}rYK{poiLuXSjY)d3jtSwk(!`XE_k`s8HrtXSXKDP zh#evG#}RPJn0o<7_KkT6vePpoq{@C57*1#Kk$+Q))gJeK!UEhQ>*_<$qRqzCBLA(` zS(&-sY_UTfmQ7rb_{XOM9q&J!tMGu63?WpJNRH%)mjs2ODFy&t9|Osp6j_Kh778bD zv7|%?~G1>(Sq z;H@fbbIOVL_q$oY+p;@dOkthcyXNvVr?f~^=)^7^2bZ(Mdi7+bKD00Jvzx_Yt4v#k z9s^7cj(R6PaZj9Ii6JehQ6_Q$RvyX%Mal>#wCKtMHrroW*R*g5YETZ54Am9V0IuqF zi3J5o%;3?wdVg_q0GuQu_Y}`(;{iAF0OxX12z6bm@^g!$)q{U_0%={U&yd6Fb7xoS z6$ql!FKJB<=bdi^D~Ge|Ek^M!0Zm75%|DbLQ%rIh*C_fn4mA3S1Q^L4LeJGe+iJ7B z_Sb~#^a**SH9O;R>8w6pC<8FmGfN+9Iq6K|d~J$)H<}9n8ag>ybXJ4P%U;z_f;-el zEd(SdywH*Tt5f3!2V+9aRi@Abefc~21r)!7HEldlMpI+S+dk4@nEDI_Ll9cGHE2Cawm@LFP=t@jg z^H~XPd>n8?QeMAZQR35%2!Fmx>KDJ3>OuG!N8qGHV1+R@!V+fCo&_U{=zXkGuFemD zgiGMDzDtn_Gfq92M`ep^kpAyk4VN16aZy`?S+yoewE5(nqqep_E$P9DD8WpPmFfJa@Oh-1_stgV(_etONU<$JA$juH$-+%4 zU{8un%(KlAdqBw;jG1q)#vMk{BN*58ecq3F=4ZfP?t$L5|EXeSzMt^D&-&+W03KSU z2-tF8Qcyu3W+*_#;v*gFgBgGjt-3!?u^{t!m$YtyGRTyNCCJel!q=7Y)>BwjFnGuNa(yrp$8QIXd%Yt*pWXsNDody2re5k&^{JCz7H z6$noyMU7Dp8HXzsfEh2Dy=$>9UnE=M$VU=f-sDp-uC<$4tYg+T&}MxCGVrt{gP*fg zBVBW|lvBVBZWD9W#fF3n{F`&~agBXF5U)=%3yP_(UA47Jnad ztNh$#ow14+lQvQAd&W*I(RykOJL(VdZp((f1;|+Ye>@UyZf=8;qK)4>yVuup7+hsR z@vj4in3FLJC*0%hgH*SQ0e@2(UQ4m?U$r)V2})vdGZ#_4v$FuYHSi1rH54FCnC6U> zg8$iN^@~U)!laZzJavWthlM1%h~u_w%yVYOkn-~1ON(?W91NRD>;MED>NuO;$0dhi zkCsJ^D0}MWD&u{l@C!1BI^1@L6y-;VG7Q+Uq5Wn1U8uiU7rJf}VLo>A~ ztbrn?{Conxri{MuK}CEi=D^VHXz16Y6pvgw%#D8hd{?Q*1_vv>?q9sF?m#g|B8nu_ z=Po4vvqKmq4k!x(k0aFbymfN$>s2Vq1T?sG!1xUYj9-AgvOpoDKC`V7u!==Ww_a5I zE?&58f@EhlD%XwbEhEu?mbZTrdR<<)zDy1f{jW*%AFwBDaaN{M*--wnJsFS%GL}(R zkN^VHMiiJJ8+|~U7qU0BgYNu{NvY8rwdk$ElW@KPL97pFjl10)bX0-lfqPAhj!i|= zna`L6fHP@u%!3fNo8Ntpv6tdtu9y4mvwM8-TLCdNG*E+_j@1$@3kALU2*iAFZh~?E zu$k~ck?I#7ERfuS4VYWjM*|2&e3##rJ2e66N$6r7$YOXXd|*@YKx18qtCr_v2_Zg| zjpub?6rf;ge~JrN>_Bbc8#ZA=gDp0R-k>lUQ@y-NMHIq5MeN#o%SOIz|l<&R23v^y2Dg6(Uhszes!0WhS}9_Zp)*ZEEoNHZtcu z@bSHGufMO=U0-d@*<7!^=Gv|PJcP)b+@5^S{bkSaNs#2Lw&#p1Tzo;+QofJ)OWI(p zL5){~%&mRUy4lQVvBaDTGxe!`s`j{OH1?Qb>cedtFZUdY#*8vTGM()tFtDP+p(dQd zdS+Uv^vp#yePi}q@#lcQPgv|LR)X)J5ss{=X{uUOk;@h9`2zG zm@H;+*TEuy|H>-x6%M8V7>J_KOP76<&wAGsfQ`l`mgN|A(#Y7k!D`ftIx_8+^`v4! zxe8C5@6*#A;YHr_5AZH$m8w_&#DIGQ{tgY)l30QQu@Z>80T24ql^_>~h4i!20n%sA zccM0D#Kudp{&Z57v|Z${1swK)Gtny3z^aVQz(eS&8yPRTUgc!cF#KjkgecS5+MX7q zYwfr2r-Zv&dH2xFR|87{Zy{;HDeV9%n(|bhH>8+RKf#I}wyWs>81e}H`=$>ZWvYe* zMn8$7bY`?a+ElB24-D@{z;p)Ji2BnRTL&|GeNt7ut4cWqc>$8>PZx4!FH4gqWHYN8bCOKqo* zuM5n84+MO-Dg!O}A-sFvP+wUb1L`;mA;%uQg+Cg?#hAmTTd{XkmO#oLfEDAU)1B3- z<=;S5*xX-uf;u(O=>3nYb`+J&Eyg<&(6tQpw_QVTOR3->Rgl1C$w|3Qx!=N~`>s;I zjj86Ywgni!JzSW(Q?nu%%W^{wc* zw)ynU3 zNAif?LQy+5zPx19DU?pfRftWw>~A;VIEdQy!SN89h^YE5-cXMaX8D!fp*=Nc_u9MT4;7xtA^rhmFU3VI6Ue zjm`9cb*6&rzY#2wg^bnBSHYW|H$OSf(%OEK>wFxS6y@srRozPYz0K;ZPkvo9Li{rW z;kP{)Fap4g^mVmhHCjWl%bdX_#CXOJ|L^>bBA_sr%k4G@b-g)&sukaDF`~bhY9P>= z%2wm99>^PR7gmWFP>63EPaM)PS`kobA~L+OpxLv49vOzr`{-Z0RM7T-kev;+x4nRS zlJLPW1$QBM{a1GZ_M@EMhlkI&{a0-PP-dhd+)`^VOsss}&$wZCpq#uA2YDzdQYb?} zf*YG_Bme{i0XO@4NjQ%N5MKz#r?odR`zv67ueOw(f_wi3-6Kd@yPetXIUG{Y!pWJv zHng3&qazQXDj@>rOo_IrBbzaV}3TfWqeU(c+(&eZp6 z^6c;x75_NkN+iOT|03=+!hHV*HK~1n`UcPguDmji#k~AZ`WQ@pP#b9eL?A+GLYhIR z03;e1t3$wz$(P6yOy3RYS6E<02hmrkMY04r9k$By$qJVdEhz}f?9(N8qvd3NY^e%U zdf=WaOMwtv8ScX>-Kj_tXmF@hjxT*P#%K!Qls@q2K%# zKd02~E5)BvUz%`fKx)_*R3U>Q1qQ$df89?fyU_>z1pI4>`>MG-J{n?Ft>?JZ#VcG3 zVA*RJEf;AhupnwEc|d*5Z+|-l{SjtIJ-mq?dFTL|v)D!%d5E%hO ze#EtN*^4qc#7T<+VAE)mnVaXUgecu|)}11F&Mk&a;Q4^4mabjNO2C?eH93Ba@`25I zKOkZUZ2$fC8wB(adeUzk*ks#s8|c)};fZ;_n4O@Y`;bqo7Jji5nChRT?;4=M&@i4# zaF5vhm0A)2n=N|90Tsvzm1kAQtbn<1we5T#YJ-l(PNxAEcMd~m0}XHkpbL_~wMmde z^*zBy!&!Y)=&R9%ONDsKg~hq~pyV#MTkH^%BEgjq0h0dIfoPS3W3H{iT!Qbt+w1wu zcv*0kDx~Y=Wt0Cs*|Z!{4xJjcl)UjhB^dzjg8fih*^65LENt6pYo1+tnFlnGME7gR z2f5YKGUc9QZx=s&q{O^vI|TPK6BD?2TAyE#r%dOgUl9QJ5nKlX90=(vl~U7j;+KJi z%mlU8BaT1W=x)Dd_?dj}SoL?ib2_~x;tK&q#{D|NYhn($ z{H>XALr{w@=wXSxI&7pp%RxYuZ4v@N{H_#Cl8MLJCc zI}$c0!v(>D#QmH;ZSiyR#Qn`}vlYCu7YkBb(_F9o%J27jsSV_4Uok9*)gDf0UPi(( z%;c0IHpcJrLL$H@%FyH2RiV&98z?`V=*kTuxyCPl2%kb&Jz>5_EmzCin2jO`L~RrM zDNn(4edVOJ924j^g4a%Z7b{%LyYlYEFs}tYpF0${QVot^*$lk5X_cB`?(D9TblesQ zi~ls_nxBKgz7M~muZ%EGU=&_)gn09pAFw)5c*3B>rRlLLDX;r&QN&^^ny#6auJM4< z4C}VY%H^h-QL?g8J;zkJECy#E?&OBrtc02HisM@CP?cqq!)|Zl!D`6I*Xm?DC;gz5 z!Cz2%mLFKV1AqV^TG^#E=8PSmDNPGe-mrHl^=n|x$+LkBUJSU|h5yfmedBK~ViGv( z67EXjvqBQ|mJU!z|0!UY-qEDXjS0Bx;*MqpoKqRJh{*+^A`s3l0(e2>mwH>ZLuCSE zQ^>JhuM9rH{d=qx(1-lr1yzE6^Q3R)1IP0)rrPCIU@?;VUx*kCaXAI#C6i>?|q>r-lyVvLX6!d*Kl*KF&dxZFAttzJdK)l9wFY z4>mK8U;+(@xFx=03d8vHRCGkqV1u!NEIgKut7a>&XS~6I5Pf6rv<&6!B5T(^#odJM z$^qL1q|P?TO@J`JrY}nU2XP=;2Br%YhpYT zf~|#%Y6RS>{vG^d!9<_x@i~RG!~&+i0>WZZ={emq?vkY;M&uaX!h- z1fnLv<*ZAPIfb!02Y=}4qmeouIny4mj$4IgB`dP_5nX;uqXqv{XlqzF1{#b>zt7X zToi9wdioPeUBf*yiI~j;umwSm@t|2oG#m&BT{$acP?eTYGiF4*>d(NwtVou8kUM|1 z;qP59>t?uHa{M*Cg#nv3rnY#9MMCjK%&EZn4h8y+%E$Wa;vYVG(EnWmgn<`&SA=W~LnJdaJ`XI@IVL*}ccpk8 zpkA(+YQx__yDDUnk|5Yb3#?(@jXRi1N+N8FvWKPSsjKv8m?ImoFEXhP-;AUq2i1b< znhkA4nTaHSLJfe#=QEE;8J^_!?QTKMrW5qaT6)1u3WZ{C)W|8?)DI89aLn~D;|Xy~ z7-xXcDeVw$WlaPWF05Cu+FM~$x#&S{V*~*^8-Rfb0iuZ4O-fUtyBxM~>KQ%}h)fzL z#-s~202X@00Cn?2m?oGEM)#0=>fC(D*bJZohU4ls@!V>67Y`8V%j^3j1xC*S`?68} zUlvY=R0!cdZvXD#T@INdqf4j~c(3^_oHVT4sT5B`DrBi~;M*W5E=2oI5@1}mK?X&_ z7kA>y%-iG6Zl{B7TnRn?R8Yf848S=L{N)v!8>e6!;e@{UKwWbQpB;qKmHYWJP>1`b zMGBAbr<@m$8#{hga0*1j8SF0}G`;Jw@Mzn%M(UMT^O7ga8@Nf)I|&k0#;|hwJdd!z z8GhTqv_G)@zkmTj<>8;^P}K8iywjVnI`QdecABM7?&*SVV^Y3~e3<$yRA@v)3j$aG z%B9;w0qiSSFarW8{x@VFv*ICk%(a#l(9#|W=W8;7PwIS&q>_y4jq~OE3aTsQN%kLK?35n=t8i& zNsaex!DxcPMhN8-zVKT=@v8`P|g4`@eT zVokb5a8ov0WGvyp_X(i|Jy0wW6Y_MXtZ|eBQTU-r7`CC=$1W&MvC3FbivAgOku20( z0Br~e6_Z6gU7t4rc=}Gzeph)>hSCaTZalMqfCc-*2+bt)6>DIoN3P9ag#RCAxe0EL zRU)DA3v9Law$PYzks9M^8TD4L&1K7mlBkT}aCdE{7O{~H;T}h<_=I6VKp&D3GF+mw z8xniya6)}c0u3ZddWC~+8|yE|qa@d9))%+Rb33ZAE({v>OK=pgPc$BW9_J9!x z`~RDXBoGY9&_%+Mf^=*1WG-AvKwAPK}!CV1;ZCnbgr@y?Vm2>+993j`!Wtyl|e z$zbHjxu0B!6gbG;>;i*m-i*Rmqf5%vU_c*10jKdiv5#=CldYGji&!Gd6ahk@I|c&* zP({VMBIm!yB$~QSdx^CGeIu?21<*d`unx(}?iD=f`Tw+5aCh2{cPSt&wv%oy)jjvb z3>m;|$QLl_P9rBfll@nYtgjQ9vALNZE5^wH3@t2O$6XYh)D%O;Nc=kdMZjN_4A3CJ zG%EFAUp1pyg3by#$kmraE##8GQmcsM;>gsSJ`s9^)N+;x2iRix>)C*P)q^o z#hWPo-z@8!5eRVX>SDE!*V`I=*er#_F?nP7>}Q;c z(|S3ojMcOpY~cmn0H_lJDe`}$9slj#oUfJdCRps}X_iV@V2do^(&6}I!ur>D?}R<( zrL=da`*Vz7fbMpN2OaxNns!JMxgBNp88Tu}e^Qq?gmu{yJ~rr`liA$B5NShG`XY`E z6^P6dRlGOPL&6AQOWGtXso5scj+Qufz9r`9gE&iP_<UsscoKBEKxRTy)3X#eOd|q?y#gPsmkT2O@6{b0^q3!t(L>H7@1%5 z`!0+2U8UTtwGwuX;sTx_EVN?3a)Mr~MFzCJ^c%9%pCWlWaMm~=|DUjNSkN8fTn=pD z%PL@GlYe>H9QTY5`4+m{GLotmIN+@#SGOq>$GQaAQw0KM6`;5OcUD!cYgwdIUu{7p zdDPZWj$6W@wYa-yJ zO4E5>D0afv2##lB;#Jpu_MM)LNmx7Nz4?V1>_=uekd&7jBVElS)`GRc28PTAy^VWm$3xnsyI(XtE|C85+aMeC|5+GZ&BB`7lmzs~{8 zA;F9$SzvBo5m0geI3GLdA+H2%4xH7w0}sSE1A%ZQb%Et!Bk+uEmiB6iY#S2p%x1pT zxtw?%?Ak`}+NEQXs9rj5cXr?_7Kfs)Ic);D^D@W0Q+|Y)L(NXXy;3m~#ZlplsskN5 zt3l=2)a?_|8Vuuw1qaW5a&nYACTh!0T(ync)Wq77a#tNRN?HfO;^Y{mfEhab-?Y=d zpdU#t)SNBNIP=Y@S!Er)7b~1P8B(|7gc^NxA-JkJ&&j(2N#cvr(wOplF}~MJV20>b z1!TWaWUM_{XALoQxhMP&1NDE9+yAJj|9|x2B*1Z_tLuJqg450F%H`L@Z)wDw5422soLy{y>{PQg6>g+8OGl^u8+%c39o*V8Pl8s3=q$)(x`}cV_#;*}fu`sJ_|XmkrYAgamjhh6Lq0RV z*8val6xA?-KecwL;CAw1rq?r;qIx1cN20`bNX)-~Es$?m0@)wPmf@OupJvM{S{s(K z`btb<`;`?snOi54&eFsfi&IhTeGfxP?dq7=VdmGG)U-i)5#v_9T-i8H<4e0=uSrM8 zmg|tnD}zKS<(9ZKs9P^4Qtj2SCcEFDpO`enDYfNe;99Ph+G?%IDBsGa@bVBE)`lmQ zuw?pGHTGq$B~tmeEHq z<#0OvODFfL(^w@sIv1VGK<=2q#?R+C>CF5b7L1bh5+czzFDMD4jM{2|EcjP5=2CIp zFK7!5@?-7Ax+(1_Mqf*%@FbV&J+eg5ZBXhkxnZY-z9kihp#6T~A+wr_v#Vt@g!5Lr ziCZoLTT;j;2RxF$p$+-!%v8Y6#PEMIqkj@ujR@TTEB%`Xng?HL0ZWu##C1&Qk}(7;t38LqlKZ7cXWf_V!N%)8g8qs#n9FnlFC-g5 zK9K?(JMC(wX=IIX5@t3u6vm9WgeT(N4SFz}xPx*v3U?a2ByJT|(?(z#Y;&62LsK){ z>U!v|>>z4`Om@i&7lZ(vVz4n@kzHv@H#|{TzscCofl`<}Bn{1YE086JFL$8C_=^oC zYl{$0QGRcJ+<_h}dj4l|UY|^<_9Y5N#Pr?F*q8Kul+l4g7mUduNF#WwA6jXL)^drg zh&NCsg&lT1WKHKij<#30aATzS^+tcgAzRNXRMMaTuf;*lvcohxqbOy7b&VE$!q^Bb zbbKB`fZqy*%yH$>1iaU*0LG?&A)&5k%wLBI;#xC|s<5`E%2=Yvp@Ba((K1Y2-WnXc z?0(-X)nbV_vDPq@OTAmM0@kR-BE6D>4~3Z3QLLrUhV^AP^~=a9W%hns{GlGQyjk~2 zo&_|0mEgal&wy0ujVJ~~NfcZd>~f6<)Q`r=wUtgweEL+DxwL-7OMIobh0`D=Vpfzn zF<9zZoS4wsRN9EB%H<574PanfyGuIJDCvDv`x*{36&1k%jS*sE(7=FJBo_ZRP-C&N zQ7w3F>bv19(v~U-_7;~-QN)+OaRTmN`wA~?SOKqc;Im&Kt7ku3{Cv+hI7XoO*imJh zn4ZT7jhdk5N>R|418tvOGO{SWBe}%eB8q+)6B7sj%Ze`zAB4DJiJ+|MS;Fr{LyUm2 z2EGoX9S=Dps!D_RtKDU_MF^2G)~)&x2ZKA+KcGJzt^W1HNbB2C9ci|SL0?X+v;HJcsmK5NN571KFNz72gFR!@i`SHavq>cfe*g$>?oilmiv z1ODF}!RxQ5C+~b6_UIBEr&7{_YMcP5eN&z%kCDAnU><{ztAHtv#T=3U>0)s(gp-c-tv9)@YHyT;y zmqjl{5t_d*pBUm!v7kh6iL+K*($s`(r@vlCuLX}yIA!fs9g7eV8F%Zz#%i6O#&i}% zD`H=_4>65I6NHAiM$(L%#nRFlM71z)r(B*bPIo1(`rX9KatD-;tKX$1iHaiKVm%tb zQ!JIXdc^OQeebj*P^23Eq0dt&YeXmc;A`Q|v7p1@NIX|}POyD?g2{c`Th7g*3}TVR z9J}Ax9&G}r_k!+QDr^?$+bxY(wB*VKY+gOY;QdUXQw3JfuQuYl&_D+An zgcN79#EW2q_oUtC`>HRKjouuX2;JevxggFbGPRwv6b{{d`$0b6yi};FsMe^KRQj&Z za9SISmR}#ue`it{<3Cvkr}|dJjdE2~&&)$J{W2Ah)AAx5g(x{K;BDmB&rIY~32k}K z7TSHF`3&(Qg;GM;;>jk@js=yHe_i+IJLbL&9YmB5+)F0R_0+I2k@cjRXh${+s(pgb zwGud%s%R&R`le`q<L-p6h3!$!mP~cH;d4@9pfObjI)VfplGXlAC03 zFm?6-m1=HcGcR2{zwq|yvTPIX8^qmSwfI~@=-BI;Na*n&91tEN+(< zyq2C^VGP#(EiD;=TDUN37GsUP0$^q`!?d5U2=Bl!rLbz;&4#kvenA>lVEv{M6+~Ep?`Rvgkb2D!?%G>2R3)=?E0oC zpqs7hhg{L02Lqp9y!tLwoy+7_crPdR5RoTT?OY%b2QJGomCE=H8eGxj_>7(jrc#|( z!P>=f8_|m`Ry*hgu;cW9}Z$xSapVZFl>!9roLKR zgg(7e{g?ke70edTk|bu47hn61!k#eq-k0J=l(`## z`YYJ}MacL4Eu~FE$n6S#v5IxzjyCDy#TtABZ~1ZsZtaTplr{Pbl=!+??^_Imjj;3S zi;6hmiJuM1r7L_jNy84$<{?RhE1_ed`$a41QS|CC<(a7!_0&UIx8S zukC^Ak9Op+iP$)CRM&USem`mc{?FTwkVFb)f#t_TWbMy3&bL*z>6Eyv4w#4ZUfk;)7Ov2PbnhrhcK1rzz8kP1mP+pEZ(K*QVcSA?6cv?`c3(0TmjCp{Xp# z)m~}AP}N*;bkc{rOEY*qcr1H=2A$FA z;F_b3J+WPN*50e|r(Dc@X3;SKWP4Om7ivFsOxa{ib4mHG4HlMeB25+#PnqiND^on0 z;5OO?M4cv{8Mdm8kO;>0XF*p>*}AQlXUL=k(b^o8cOBH<-3FdW!la9qk+AU(olf1- z4h#CWs}mds<_Fjmv9zdAy*vA!S=2qgauCBYDXH7PfSOJuGqc@Pm8cW!Ap`aA zKuOt#(XMUk*cb>!N$gsczk{t^<|8zcP8IzdioH3&@fl4cYbHvTs9lDSeD;ZQ!ZsAQ zlwu`vTn|2&?81AiE3X_ea)sM#K|ojTW2=-|9eF6i+2Xa)MRuRz_&Qv66Qj~+;~x`H zirr*PguPrLuQ?6HTbW)}jkMeW&Jbu7TuyTRxc8uw)DtbH1R&zeST;z3w@fRtJ73}D z;8U5kvLFEH{mj&QGU#bs+?^!Xp81s#7S|fMQ)6g+`X=&2iJn+WJca~0yXBex|0PhNJtn7t}Hjp87?~dAkR8mI^ z8Z*rdSQK3f-bDxzZ!oFY+-j$Rc9ltJ>#w)YvJ@ zI*pSC7Egs~9-m6zFDPR2unx!@;IIqXBe6%c(U{G$aGD`LN6c@7DX{jqg%9^d>G~5w z#NhVHa{SJg8g3nFnla@GA=^)0G5cyxond(YXIw2%+3#h2m!5+*Ro#@jLU_eOdxG@TZt-rrfFAWj9P+fh@Jj{+r&8xbzOD}8NskbV!Kf}hBF#0Z(M69W zztyj{Kgn7f$j}Us3h~EoX)-EW@PhKC_%;=kj#)QWELJ9g9VV9K{UAn2x~>shgohGa zSOnQf#}!lifnCXBI}U8JG-}JB&vYmlJZboi$ERRgjavns>@?9Z0)B2Td@g9o_l=Qa z+hFgYJ>jYboMLU{(Jqd&$J{}kI$?s$vA}pY1uVdM0XqAZM#s~k-h{X9c*krPNKfL3 z6u%-q2c%t;u?E3HXoR_hwP5M&goqc1T@CZQs6!207@{_an$8$b*S*(kK9@wF(RA5O z%Y@glQYH)oVecNW2<}~rB4e{z;4sQA)-C+@a_q_{>@ees#P-paDyxE1=J(*Ze2bnc zcyKIEYtU0&Ql9%yr6+P?%eN1NxG(*b{WkhIy=w z+uGBB^qUX%CPwCWtI5*gTDlI$ezfF3@$sxV{2^qn-cN6$3C^COvdl9LF9x1v7Vr4U z3aqUbtS8*-&d{rssJ3Hgl+^!*c)51_&G5kANqvNtyW!O2OUYq`6IkR-eBnI_Z2TLl z7ek@y24k!|!b)#HC`T!CIO+N;%DpT3xUFutyJJ2FD9;Azy!QblR#w*3C_q zv+mlHv6`EO^NUb;f{n(*@9g!r7F1`r-y@2+F6GiSJVTZAFk(cO2xmapO{#4bj&NA% zu)VK}^itF+WfYwrVZqQapRvn89;=Z7gs&k3a!fe0ly3vSx3%jorzvAwit$HRyi7HE zlQtt2Y@zeta<&$}hgu#9H=3Jm0gqEIC2(dax12VR!(8(d2lcki{EBjsh4~hLj|HGq_z;W*z~LCD_Wk8R)TJp)J8uxvpZqo-`GH_mZV4bC{%{guOWP`OgBak=1jaj@PmCLO#p!l@pgL6_rgz+0>b2mU{K;nH+Wus zT_LG{*}F10Tr!gfL`0}^gEOIq$(pA0&;ACndvw}gM8U`TI!=n3n&l9CxMV%Nl_T>nL7~50@y980i3$1S+gK2SZ56ZQXs4)~GEC>u(IF|$q=Jtw z2AlCA1$I6W%wUTy?e*^-VfMtQ_xF4%F#OHRCBHSP7q~%z?Sg+Jr5R{!`q|Lh2*yZ< zgz&=iQ$YEJ<=VuN;Uu89sR~^fdgtAVZ?%Loq!kBe#F90jPbLgZVFl!b++Y^PfJN%8 z-!C(0Hac!q#J)!z2&zU(UeeXS??8})SAy2Z(7+GtBUisqoY~3uNt#?rx%S1x`DXI) z(0sH-TtqDcigCm*kBEsh52h=c2;vnIVKh}-(L*U{-&r}AzlG~1^3(N$@@)U< zE|vh5VpRbMwyQnqP*rJc_*qg<_IIwNy+^Df0}$b*A>)4IWL~`Ax9|^<&L|SD3^tqE zH9YT6U*<2+Z`S1g0`czDX@-Xm5D^K|ieXtq48V7@e{4gzal7IXM^+Ag!{T)&fpqI3 z`flQSdw%v_`tf{S_V%RQFf36(f6Y)$PwB@@obQR~gX{?hnPs$g{iV4^$QxVGHY4jBcI!`44yLcm%{=DHYocsk{vE9Jdlqi#O};fVG|2!jkHJLXf`S5J zry-e)1|qN-s*ONnLNe)7DMX6l0qU zwQB4WUaoFQCl-nNQmThQOe%1EQLen}xOGRG`Cb^w>C*^~am*zAJcmZr9g!jf_8;iW zt>ZN{$Ef)Q&Sn+iT5`|h@{IO_65_P6|8Bd+u+AG-GIvHM&V5PGfU0yMy;xp8s1M_` z&eZ)T)Yd0I6^_7W)4=~{1ra9JUh!A(@x8+epEn+oeJz_;;O=DGKU1DWpZDMs}y<>%AjboK#@0_`4 zxGK1;xCS^*%1$hfEdE$@U%7H^2&5Dy6`miEWoDV)$8e6P5 zACvLua*fNIP|s3+s3_FLIq-#?Gua)9&+NhRKHr-7PJOy(k4wC$As!laU8H?-ecv2< z+SXng$NI8R-qU{{^Z1kse3Z;S1aXc}U_M2}y;1d?=5prBymXTGtXft%Bs*(4)~EPB zo4h83odPRjW+7Q0<`F)JmepOiVKTW;s`(CnG5%O6#yAvs7XH7LB%)FN( zd5x3^{M>?sU1gK@{49e!_PCz#VkrR{0mp31#XT!tzO7nlvZ)#hu)0aq+NPpC_TnAECDEr>-C8H_oOs z-K^f}aCx(^B(*Dh{_*3ke@NSYd6T4&@fu-;O`K6PfP+4ePIOKWw|%>78N0U?vf{5~ z%FnYzHi6UsEB6x!>}l%o8k7jSdF2(*KmpSSOx|p+p!;*7`+JH^+C#Y!W2fH>MEhNl zpOV;r_E`6|c$<>D4VsrPJI_t8x%SZob+g<)Y}SLWwK|=gkuixijp1<+>`sk=1{Id= z=I!4wBIYACTZj}jS0OcUgrXaVk@~E9c*m9JUbreW?>B{ogZ8=SEc`z{K)N?`YzleZ z>vV`3%lkBR`Z2Nm6#88k?;tP+6+W4eCZ#au_rp-H|q%0<+=JZpSjJRw_w68;{AO%bSqm$LbTTib z8LyZU4iEA4=BAiTq4V^Qz2sta?2KiIir)B?qiDbTf&VaJH{pG+$8tXYn#pCieg39# zJCAD~Jwom7NuRh$t~N@ulI4@W^k5wQjZp$}pAIku)Eaz*iyI&gNVGUkr}~6b?73I# zeN-+Ty2B$hclGSqkMeQ$EAJN*X6k6=V@@Xn)c;7!=QMUocK|Z}4EtUTLSHr;d2LGW z@y-n%Heyl2vFN$W*eXHh7kx!K$%&GC9U}0qjqEWmzP2$@L}`ZsmAX+Zi;u)UJHBUv>e^o>6x^=k3BEv;U*Cu#-SfQ%f~e5-T{B%nVGpi$ksZ& zw$>}w4yk)v{7Cj>>E5HjvTV#Gf4KMlN^t2ZdiWp1n6fHHF{@Y>zI8|J@Vkv06Ky zTf?o|nDzPyBG6VsM;2a7PL0FbIJhn(756a09sbAOKD&Glr=cfoL3}1_lFDUG6PC=& zE3H;hcWdc_E8GNEnD8j)%I6dEipV=PhI&OL=p6z+AB6J0q}pDD?atxhC2F)Lt<{ag zT6L@BN#r>>7w55M+3J$I9s>|tKmnO2iu3bfadbUv8tL#|fT&1gfdk!55t&}ZeM`S_ zDPz+}Zn|6%xoJbFDGzour;IXx}CfXpA-JJYeh*9e6Rdjtfs+m|g;Dbl3k`NY&R6~N& zQ#G#89d|5UamnS7CJ)7A{T=5h54AtOD)OKWp{|Os-*q_$0pFuX9;@R}6OYG&?!kF- z?~SsNdc`<#PU6nUh-TK+3FQ&bOQeqO)W}+}sSqMx?tl=c9&Cq>63L_;BsS&`vQY`B zy(OQdpPa}%{Scw*>hcbibJ`~xL!A=|ItFwTkLY{NV_g^vUii)x04Gv~#EGnOLKqkmO@K>~GS_1U zj0-0Cer}lX5l`W7bfix}&^8BS(5@)+K^xW_DxI!?3AC7~&-A&RoM>-+DUw5xOE7{u z6uA@$x?Xe`eI_ytZEba5+At?Kjrp(DwU+lNGR`JqBFi9$P6a#Nx2?Fr_)FZx`g|Y$V}Y%wy|ahvS+qs z+?}j5zJZ!+g%bewo;ljT^AFTBLcsdPj zd5f+r1{FTN!Q-2}IY5D%mhQTSp=lTCq&KGQu}eNhDSH%l5bSu-_v#?jeX*3gTGbl4 zM~s_1sHHig2+e2S6lHQXX2v9?1I0LktdcOD$&?Zl(?vM2Ij@+)Xst5q541sB=`}&< zgiBYdH%`f8F@hQmCGL6AVW8_+lR>CY$l+UxGL8G=Sghxj z5vazxZv(!Yd1~Olq}=qNcCM|>w7Xu5vM%n9b!B`Uc^z;nFqI0yc4$pp>h0Ayx!0|s zEmB4f-9jCN!^Dv(T&vnj9kLe4L?BBTK}`g*7DyeUeQyx!zItoYpH~O|)(ZtSS9@N}#377zU(U#>Ifh1`)I>EoC6OH2*a96ik{%jx5y76`%=^%wN?+DP8aQy( zx8AbUNxHg@6=FK7M*#I(jiVj`)GMHpzL!&R@il=hipSy|c#wxt*H>9{vw`zKsD=)7 z5$)0#M)2X#BuvCXt)f3n*DrF#x6rhq0!0w+3w&sbT@`&^B;b$@qkz{%T2qz!($*c! z$oae)8sUbAYZ!GzEqY609*n^<$O4J%rB4C8?VqWaJ5V7GqL4{CpJ+qqs-e^yA8Jji z&nwU?Fmn350<8&jDEbW)zTq%5cu1pDa>V2IBx`1K9!8x4h}AJ=DR_&(A$|u@9(j0h zLmTUn%0;Wl;~PG|u?oV~q)%}~uGo|EF2Ea`PaU3jy|r$N%*O*w3*zC=6Tz^0C#(f- zN~|Cil&RFV0HMEHt-0z!*($1N11%qDn@q={>(TJ^FjtIpB*UpIMpFGQZ%Hz?sKZd_ z#f%*BzKStbTa_Bxn^CeZt1*OVhKUo|)f;fgL}O`}_blnkr#PV72!^MsR)Ja`>oA5; z%VVvAb$qPjPjtQHlP5Gj43&G6QhS`ugBGQtA%jNUQK#-q2|kfvyEf@fFi5L9E#l8jm+k(j&;@l{GB`H89KIB20#8t$GCx z8kBOt9ZRRRiqMKHLxa&NeHRT~i=op}LXrCLH&Bm-Z)ih2HF#nj*HX*66`SFQO%Yo# zpcM)LMTDzWY8X0{L~5l!MRQS1&#H;83{7^%idNOqdoXlbRZI6Bd0tM%T|(bmyGc#V zgO3w|hg!;8qq}wsOtR!+f(#S5RY~}FNoOR9druP-fon84RjMQJVp2tXFGc#^Hnjya z@-RMnP-FgbfAUGnlJs%GMi46e38R%DZJ^I*qD?C{kM{= z@&S}_8#gQkm7XItg`uRA-WWRMPmlGI45b*?a9PyvYRAjIH;xsXPRUVof8o(6Y#OP- zNB^zlfxa&(RHVx?mlFAi6d(E)(O?)#ag9Hx2|V7UHE@WF zmN6%e)g^#=P!J@dlgff!9K$x~9)3Y#MjQVl86?#rp(->rD(o zO=8~QF-=&DJs4Avt&7V92{!mw87ic_M@aL0P*|Pr?pI>M6Lll z-mvdY#_B_w=s8V_haC3otZ*Am#~TP^ z)rLMtY)MW0(7KF?@z(g-e6f_1+AxL-;?4>b!7N=}wHaxJy)o7)=;*2qolZeVjKh#l zA5dkYRV5;Nl>KV#pbEHVF(o?VnNxw@s*X;<&`HY?Oa=P* z$HTri;T!PA8m~n>RVYSiHPC`i%7P$6;Qo<>BH4_(raNP(speEOq32C>y^(KX7@E`| z{?*@1dB|hM#u5P`La@#;YAK-2YUb17ifK;Uz^OgL}qG z5SpnsHnf_M?0O|OkSw)~xtcSf2hb1{F)4wWg_c$%KEGY

X2I=5j$y`uE|*mo>Bs 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 M=s)_8{=-Kd05Z&DF#rGn literal 0 HcmV?d00001 diff --git a/docs/settings-shortcuts.webp b/docs/settings-shortcuts.webp new file mode 100644 index 0000000000000000000000000000000000000000..73ba99aa75e12b88db5ede80f49edb48d0429d6f GIT binary patch literal 59854 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

+whwauw*8euhuVa@~Zlj-F-`X?9R>g3~y-J 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%0Akxu)(Q8fMTiq&-B%5&3?}=rn<_~^# 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 Date: Sun, 2 Aug 2026 09:29:12 +0300 Subject: [PATCH 13/13] Make the audio file tab remember, and its Stop stop The two switches were written to disk by the Save button at the far end of the window, so a file transcribed with timestamps and cleanup was transcribed without either the next time. They belong to the run rather than to the form: they go to disk as they are ticked now, and the folder the last file came from goes with them. Stop only set a flag that was looked at between chunks, and a file under ten minutes is one chunk, so for most files it was looked at after the work it was meant to stop had already finished. Nothing that blocks is reached by a flag. The request is inside urlopen, ffmpeg is inside communicate, and a whisper on this machine is a process of ours that would grind on to the end of the chunk with nobody left to hand the answer to. So the socket is shut down under the read, ffmpeg is killed, and a local server is stopped and left for the next run to start again. Shutting the socket down rather than closing it is the point: close() alone leaves a thread already inside recv() waiting for bytes that are never coming now. The connection is registered before it has a socket, so a stop landing in the few lines between making a connection and blocking on it refuses the connection rather than missing it and letting urllib quietly open another. --- api.py | 169 ++++++++++++++++++++++++++++++++--- cleanup.py | 15 ++-- filetranscribe.py | 64 +++++++++---- settings_ui.py | 27 +++++- tests/test_api.py | 122 +++++++++++++++++++++++++ tests/test_filetranscribe.py | 37 +++++++- tests/test_ui.py | 37 ++++++++ 7 files changed, 438 insertions(+), 33 deletions(-) diff --git a/api.py b/api.py index cc27e66..1f35e60 100644 --- a/api.py +++ b/api.py @@ -11,10 +11,14 @@ is up, which is the one thing this module has to fill in for it. """ import collections +import contextlib +import http.client import json import mimetypes import os import secrets +import socket +import threading import urllib.error import urllib.request @@ -59,6 +63,142 @@ class ApiError(Exception): self.status = status +class Aborted(Exception): + """A request that was cut off from another thread rather than answered.""" + + +class Aborter: + """A Stop button that reaches the call a worker thread is blocked inside. + + urlopen() hands nothing back until the server has answered, and a whisper on + this machine is minutes away from answering, so a flag read between calls is + a Stop that does nothing until the work it was meant to stop is already + done. What is registered here is cut off where it stands instead. + """ + + def __init__(self): + self._lock = threading.Lock() + self._cancels = [] + self.aborted = False + + def abort(self): + with self._lock: + self.aborted = True + pending, self._cancels = self._cancels, [] + for cancel in pending: + cancel() + + def check(self): + if self.aborted: + raise Aborted + + @contextlib.contextmanager + def holding(self, cancel): + """Run `cancel` if an abort lands while this block is open.""" + with self._lock: + if self.aborted: + raise Aborted + self._cancels.append(cancel) + try: + yield + finally: + with self._lock: + with contextlib.suppress(ValueError): + self._cancels.remove(cancel) + + +class _Sockets: + """The connections one request is using, and whether it may still use any. + + A stop can land at any point of the handful of lines urllib takes to get + from "make a connection" to "wait for the reply", so this keeps the two + halves of the answer together: what is already open is cut, and anything + opened after that is refused rather than quietly left to block. + """ + + def __init__(self): + self._lock = threading.Lock() + self._conns = [] + self._cut = False + + def add(self, conn): + with self._lock: + if self._cut: + raise Aborted + self._conns.append(conn) + + def cut(self): + with self._lock: + self._cut = True + conns = list(self._conns) + for conn in conns: + _stop_using(conn) + + +def _stop_using(conn): + """Take a connection out of use, connected or not. + + A connection whose socket is not open yet would open one on the next line, + so the reconnect is turned off first. One that is open is being read from, + and close() alone leaves that read waiting for bytes which are never coming + now; the shutdown is what makes it return. + """ + conn.auto_open = 0 + sock = getattr(conn, "sock", None) + if sock is not None: + with contextlib.suppress(OSError): + sock.shutdown(socket.SHUT_RDWR) + with contextlib.suppress(OSError): + conn.close() + + +class _TrackedHTTP(urllib.request.HTTPHandler): + """urllib's own handler, handing the connection it opens to `sockets`. + + That connection is what a Stop is applied to, and urlopen() makes it out of + sight, inside the call that is about to block on it. + """ + + def __init__(self, sockets): + super().__init__() + self._sockets = sockets + + def http_open(self, req): + return self.do_open(self._connect, req) + + def _connect(self, host, **kwargs): + conn = http.client.HTTPConnection(host, **kwargs) + self._sockets.add(conn) + return conn + + +class _TrackedHTTPS(urllib.request.HTTPSHandler): + def __init__(self, sockets): + super().__init__() + self._sockets = sockets + + def https_open(self, req): + return self.do_open(self._connect, req, context=self._context) + + def _connect(self, host, **kwargs): + conn = http.client.HTTPSConnection(host, **kwargs) + self._sockets.add(conn) + return conn + + +@contextlib.contextmanager +def _opened(req, timeout, aborter): + """The response, left where `aborter` can cut it off.""" + if aborter is None: + with urllib.request.urlopen(req, timeout=timeout) as resp: + yield resp + return + sockets = _Sockets() + opener = urllib.request.build_opener(_TrackedHTTP(sockets), _TrackedHTTPS(sockets)) + with aborter.holding(sockets.cut), opener.open(req, timeout=timeout) as resp: + yield resp + + def explain(exc, service): """Turn an HTTP status into something the user can act on.""" if exc.status in (401, 403): @@ -74,16 +214,21 @@ def explain(exc, service): return ApiError(f"{service}: {exc}", exc.status) -def _request(url, data, headers, timeout=120): +def _request(url, data, headers, timeout=120, aborter=None): req = urllib.request.Request(url, data=data, headers=headers, method="POST") try: - with urllib.request.urlopen(req, timeout=timeout) as resp: + with _opened(req, timeout, aborter) as resp: return json.loads(resp.read().decode("utf-8")) except urllib.error.HTTPError as exc: body = exc.read().decode("utf-8", "replace") raise ApiError(f"HTTP {exc.code}: {_extract_error(body)}", exc.code) from exc - except urllib.error.URLError as exc: - raise ApiError(t("Could not connect: {reason}", reason=exc.reason)) from exc + except (OSError, http.client.HTTPException) as exc: + # A socket that went out from under the read is this run being stopped, + # not the network failing. URLError is an OSError, so both land here. + if aborter is not None and aborter.aborted: + raise Aborted from None + raise ApiError(t("Could not connect: {reason}", + reason=getattr(exc, "reason", exc))) from exc except json.JSONDecodeError as exc: raise ApiError(t("Could not parse the response: {error}", error=exc)) from exc @@ -165,7 +310,7 @@ def local_failure(service, server, exc): def _transcribe_request(target, wav_path, language, prompt, response_format, - granularity=None, timeout=300): + granularity=None, timeout=300, aborter=None): if target.provider == "local": # The timeouts here are sized for a hosted API, where a slow answer is a # bill running. Locally the only thing being spent is time. @@ -189,6 +334,7 @@ def _transcribe_request(target, wav_path, language, prompt, response_format, return _request( f"{target.base_url.rstrip('/')}/audio/transcriptions", body, _headers(target.provider, target.api_key, ctype), timeout=timeout, + aborter=aborter, ) except ApiError as exc: if target.provider == "local": @@ -235,9 +381,9 @@ def _merge_word_splits(segments): return merged -def transcribe(target, wav_path, language="", prompt="", timeout=300): +def transcribe(target, wav_path, language="", prompt="", timeout=300, aborter=None): data = _transcribe_request( - target, wav_path, language, prompt, "json", timeout=timeout + target, wav_path, language, prompt, "json", timeout=timeout, aborter=aborter ) text = data.get("text") or "" if target.provider == "local": @@ -248,12 +394,13 @@ def transcribe(target, wav_path, language="", prompt="", timeout=300): return text -def transcribe_segments(target, wav_path, language="", prompt="", timeout=300): +def transcribe_segments(target, wav_path, language="", prompt="", timeout=300, + aborter=None): """[(start_seconds, end_seconds, text)] using whisper-1's verbose response.""" data = _transcribe_request( target._replace(model=timestamp_model(target.provider, target.model)), wav_path, language, prompt, "verbose_json", - granularity="segment", timeout=timeout, + granularity="segment", timeout=timeout, aborter=aborter, ) segments = data.get("segments") or [] if target.provider == "local": @@ -311,7 +458,7 @@ def local_ceiling(text): def cleanup(text, api_key, model, system_prompt, reasoning="", base_url=OPENROUTER_URL, timeout=180, provider="openrouter", - service="OpenRouter"): + service="OpenRouter", aborter=None): if not api_key and provider != "local-llm": raise ApiError(t("{service} API key is empty. Add it in Settings.", service=service)) @@ -331,7 +478,7 @@ def cleanup(text, api_key, model, system_prompt, reasoning="", f"{base_url.rstrip('/')}/chat/completions", json.dumps(payload).encode("utf-8"), _headers(provider, api_key, "application/json"), - timeout=timeout, + timeout=timeout, aborter=aborter, ) except ApiError as exc: raise explain(exc, service) from None diff --git a/cleanup.py b/cleanup.py index 0dbb273..b6485b3 100644 --- a/cleanup.py +++ b/cleanup.py @@ -59,22 +59,27 @@ def model(conf): return conf["cleanup_model"] -def run(text, conf, system_prompt, timeout=180): - """Hand the transcript to whoever is set to clean it up.""" +def run(text, conf, system_prompt, timeout=180, aborter=None): + """Hand the transcript to whoever is set to clean it up. + + `aborter` is only of use to the two that answer over HTTP; a CLI is stopped + between blocks instead, which is close enough when a block is seconds. + """ name = provider(conf) if name == "openrouter": return api.cleanup( text, conf.openrouter_key(), conf["cleanup_model"], system_prompt, reasoning=conf["cleanup_reasoning"], base_url=conf["openrouter_base_url"], timeout=timeout, + aborter=aborter, ) if name == "local": - return _local(text, conf, system_prompt, timeout) + return _local(text, conf, system_prompt, timeout, aborter) runner = _claude if name == "claude" else _codex return runner(text, conf, system_prompt, timeout) -def _local(text, conf, system_prompt, timeout): +def _local(text, conf, system_prompt, timeout, aborter=None): """llama.cpp, on this machine, answering the request OpenRouter answers. No key and no bill, and the address does not exist until the server is up, @@ -88,7 +93,7 @@ def _local(text, conf, system_prompt, timeout): reasoning=conf["local_llm_reasoning"], base_url=api.serving(ggml.llm), timeout=max(timeout, api.LOCAL_TIMEOUT), - provider="local-llm", service=service, + provider="local-llm", service=service, aborter=aborter, ) except api.ApiError as exc: # A server that died mid-request would otherwise report only that the diff --git a/filetranscribe.py b/filetranscribe.py index f797d58..b336e3a 100644 --- a/filetranscribe.py +++ b/filetranscribe.py @@ -18,6 +18,7 @@ from PyQt6.QtCore import QObject, pyqtSignal import api import cleanup +import ggml from i18n import t CHUNK_SECONDS = 600 # 10 min ≈ 19 MB at 16 kHz mono s16 @@ -29,8 +30,9 @@ MIN_SUBTITLE_SECONDS = 1.5 # how long a cue with no end time of its own stays STAMP_RE = re.compile(r"^\[(?:(\d+):)?(\d{1,2}):(\d{2})\]\s*") -class Cancelled(Exception): - pass +# What a stopped run comes back with, wherever it was stopped: the request that +# was cut off raises it from api, and the steps in between raise it themselves. +Cancelled = api.Aborted class FileTranscriber(QObject): @@ -42,7 +44,9 @@ class FileTranscriber(QObject): super().__init__(parent) self.conf = conf self._thread = None - self._stop = threading.Event() + self._abort = api.Aborter() + # The server on this machine the work is with, when it is with one. + self._local = None @property def busy(self): @@ -51,18 +55,26 @@ class FileTranscriber(QObject): def start(self, path, timestamps, do_cleanup): if self.busy: return - self._stop.clear() + self._abort = api.Aborter() # the last one is spent self._thread = threading.Thread( target=self._work, args=(path, timestamps, do_cleanup), daemon=True ) self._thread.start() def stop(self): - self._stop.set() + """Cut the run off where it stands, rather than at the next step.""" + self._abort.abort() + # Closing the socket is nothing to a server on this machine: it is a + # process of ours, and it would grind on to the end of the chunk with + # nobody left to hand the answer to. Stopping it is what stops the + # work; the next run starts it again. Killing waits on the process, so + # not on the thread the window is drawn from. + local = self._local + if local is not None: + threading.Thread(target=local.stop, daemon=True).start() def _check(self): - if self._stop.is_set(): - raise Cancelled + self._abort.check() def _work(self, path, timestamps, do_cleanup): conf = self.conf @@ -73,7 +85,7 @@ class FileTranscriber(QObject): workdir = tempfile.mkdtemp(prefix="dikte-file-") self.progress.emit(t("Converting audio…")) - wav_path = _to_wav(path, workdir) + wav_path = _to_wav(path, workdir, self._abort) self._check() chunks = split_wav(wav_path, workdir) @@ -81,6 +93,7 @@ class FileTranscriber(QObject): self.progress.emit(t("Splitting into {count} chunks…", count=len(chunks))) target = conf.transcribe_target() + self._local = ggml.whisper if target.provider == "local" else None pieces = [] segments = [] for index, (chunk_path, offset) in enumerate(chunks, start=1): @@ -96,6 +109,7 @@ class FileTranscriber(QObject): chunk_path, language=conf["language"], prompt=conf["transcribe_prompt"], + aborter=self._abort, ) ) pieces = [f"[{format_timestamp(start)}] {line}" @@ -106,6 +120,7 @@ class FileTranscriber(QObject): chunk_path, language=conf["language"], prompt=conf["transcribe_prompt"], + aborter=self._abort, )) text = "\n".join(pieces) if timestamps else " ".join(pieces) @@ -122,16 +137,18 @@ class FileTranscriber(QObject): except (api.ApiError, OSError, subprocess.SubprocessError, wave.Error) as exc: self.failed.emit(str(exc)) finally: + self._local = None if workdir: shutil.rmtree(workdir, ignore_errors=True) def _cleanup(self, text, timestamps): conf = self.conf + self._local = ggml.llm if cleanup.provider(conf) == "local" else None prompt = conf.cleanup_prompt(with_timestamps=timestamps, subtitles=True) out = [] for block in split_text(text, timestamps): self._check() - out.append(cleanup.run(block, conf, prompt)) + out.append(cleanup.run(block, conf, prompt, aborter=self._abort)) return ("\n" if timestamps else "\n\n").join(out) @@ -194,17 +211,34 @@ def to_srt(text, segments): return "\n\n".join(blocks) + "\n" if blocks else "" -def _to_wav(path, workdir): +def _reap(proc): + """Leave nothing running behind a conversion that did not finish.""" + if proc.poll() is None: + proc.kill() + proc.wait() + + +def _to_wav(path, workdir, aborter=None): out = os.path.join(workdir, "audio.wav") - res = subprocess.run( + proc = subprocess.Popen( ["ffmpeg", "-nostdin", "-y", "-i", path, "-vn", "-ac", "1", "-ar", str(RATE), "-c:a", "pcm_s16le", out], - capture_output=True, text=True, + stdin=subprocess.DEVNULL, stdout=subprocess.PIPE, stderr=subprocess.PIPE, + text=True, ) - if res.returncode != 0 or not os.path.exists(out): - tail = (res.stderr or "").strip().splitlines() + # A two hour film is a minute of ffmpeg, which is a minute of a Stop button + # doing nothing unless the abort reaches the process itself. + with contextlib.ExitStack() as stack: + stack.callback(_reap, proc) + if aborter is not None: + stack.enter_context(aborter.holding(proc.kill)) + _stdout, stderr = proc.communicate() + if aborter is not None: + aborter.check() + if proc.returncode != 0 or not os.path.exists(out): + tail = (stderr or "").strip().splitlines() raise api.ApiError(t("Could not read the file: {error}", - error=tail[-1] if tail else res.returncode)) + error=tail[-1] if tail else proc.returncode)) return out diff --git a/settings_ui.py b/settings_ui.py index 239a049..c2ed2e6 100644 --- a/settings_ui.py +++ b/settings_ui.py @@ -512,6 +512,10 @@ class SettingsWindow(QDialog): self.meetings.finished.connect(self._on_minutes_finished) self.meetings.failed.connect(self._on_minutes_failed) self._load() + # Connected after the load, so that filling the boxes in is not taken + # for the user ticking them. + self.file_timestamps.toggled.connect(self._remember_file_choices) + self.file_cleanup.toggled.connect(self._remember_file_choices) # On a machine where nothing can transcribe yet, this window was opened # because of that, so open it on the tab that fixes it. if not conf.transcribe_ready(): @@ -1159,7 +1163,7 @@ class SettingsWindow(QDialog): self.file_run = QPushButton(t("Transcribe")) self.file_run.clicked.connect(self._run_file) self.file_stop = QPushButton(t("Stop")) - self.file_stop.clicked.connect(self.transcriber.stop) + self.file_stop.clicked.connect(self._stop_file) self.file_stop.setEnabled(False) run_row = QHBoxLayout() run_row.addWidget(self.file_run) @@ -1713,6 +1717,20 @@ class SettingsWindow(QDialog): self.file_path = path self.file_label.setText(os.path.basename(path)) self.conf["file_last_dir"] = os.path.dirname(path) + self._remember_file_choices() + + def _remember_file_choices(self): + """Keep this tab's choices without waiting for the Save button. + + The two switches and the folder belong to the run rather than to the + form: what was ticked before Transcribe is what the next file wants + too, and Save is at the far end of a window opened to transcribe one + file. Everything else on the tab is a button, so there is nothing here + an unsaved form could be caught by. + """ + self.conf["file_timestamps"] = self.file_timestamps.isChecked() + self.conf["file_cleanup"] = self.file_cleanup.isChecked() + self.conf.save() def _run_file(self): if not getattr(self, "file_path", "") or self.transcriber.busy: @@ -1728,6 +1746,13 @@ class SettingsWindow(QDialog): self.file_cleanup.isChecked(), ) + def _stop_file(self): + # The button goes dead here rather than when the run comes back, so a + # second press cannot land while the first one is still travelling. + self.file_stop.setEnabled(False) + self.file_status.setText(t("Stopping…")) + self.transcriber.stop() + def _on_file_progress(self, message): self.file_status.setText(message) if message == t("Stopped."): diff --git a/tests/test_api.py b/tests/test_api.py index 6019061..f45ca21 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -3,10 +3,17 @@ Nothing here reaches the network. What is checked is the request that would have gone out, because that is what a new provider changes and what an old one notices: the URL, the headers, the fields of the multipart body, the JSON. + +Stopping one is the exception. Cutting a request off is done to the socket it +is blocked on, and a faked urlopen has no socket to cut, so those tests talk to +a server of their own on the loopback interface. """ +import http.server import json import os +import threading +import time import unittest import api @@ -578,3 +585,118 @@ class TranscribeHere(DikteTest): with fake_urlopen({"segments": [{"start": 0, "end": 1, "text": " hi"}]}) as calls: api.transcribe_segments(LOCAL, self.wav) self.assertEqual(multipart_fields(calls[0])["model"], "ggml-base.bin") + + +class Stopping(unittest.TestCase): + """The Stop button, from the far end: a request already blocked on a reply. + + The one that matters is a whisper on this machine, which answers minutes + after it was asked, so it is a real socket here rather than a fake urlopen. + Nothing leaves the loopback interface. + """ + + def setUp(self): + answering = threading.Event() + + class Slow(http.server.BaseHTTPRequestHandler): + def do_POST(self): + self.rfile.read(int(self.headers.get("Content-Length") or 0)) + answering.set() + time.sleep(30) # the model, thinking + + def log_message(self, *args): + pass + + self.answering = answering + self.server = http.server.ThreadingHTTPServer(("127.0.0.1", 0), Slow) + threading.Thread(target=self.server.serve_forever, daemon=True).start() + self.addCleanup(self.server.server_close) + self.addCleanup(self.server.shutdown) + self.url = f"http://127.0.0.1:{self.server.server_address[1]}/v1/x" + + def post(self, aborter, out): + try: + api._request(self.url, b"{}", {}, timeout=30, aborter=aborter) + out.append("answered") + except BaseException as exc: # noqa: BLE001 - the type is the result + out.append(type(exc).__name__) + + def test_a_request_waiting_on_a_reply_is_cut_off(self): + aborter, out = api.Aborter(), [] + thread = threading.Thread(target=self.post, args=(aborter, out)) + thread.start() + self.assertTrue(self.answering.wait(10)) + aborter.abort() + thread.join(timeout=10) + self.assertFalse(thread.is_alive()) + self.assertEqual(out, ["Aborted"]) + + def test_a_request_that_starts_after_the_stop_never_goes_out(self): + aborter, out = api.Aborter(), [] + aborter.abort() + self.post(aborter, out) + self.assertEqual(out, ["Aborted"]) + self.assertFalse(self.answering.is_set()) + + def test_without_one_the_request_is_the_plain_urllib_one(self): + """Everything that is not stoppable keeps the opener it always had.""" + with fake_urlopen({"text": "hi"}) as calls: + api._request(self.url, b"{}", {}) + self.assertEqual(len(calls), 1) + + +class Sockets(unittest.TestCase): + """The few lines urllib takes between making a connection and blocking on + it. A stop that lands in there must not leave the request waiting out its + hour-long local timeout.""" + + class FakeConn: + auto_open = 1 + sock = None + closed = False + + def close(self): + self.closed = True + + def test_a_connection_opened_after_the_stop_is_refused(self): + sockets = api._Sockets() + sockets.cut() + with self.assertRaises(api.Aborted): + sockets.add(self.FakeConn()) + + def test_one_that_is_already_open_is_closed_where_it_stands(self): + sockets, conn = api._Sockets(), self.FakeConn() + sockets.add(conn) + sockets.cut() + self.assertTrue(conn.closed) + + def test_one_with_no_socket_yet_is_stopped_from_making_another(self): + """close() leaves auto_open on, and the next line would reconnect.""" + sockets, conn = api._Sockets(), self.FakeConn() + sockets.add(conn) + sockets.cut() + self.assertEqual(conn.auto_open, 0) + + +class Aborter(unittest.TestCase): + def test_what_was_registered_is_run_once_the_stop_lands(self): + aborter, cut = api.Aborter(), [] + with aborter.holding(lambda: cut.append(True)): + aborter.abort() + self.assertEqual(cut, [True]) + + def test_a_block_that_ended_is_not_cut_afterwards(self): + aborter, cut = api.Aborter(), [] + with aborter.holding(lambda: cut.append(True)): + pass + aborter.abort() + self.assertEqual(cut, []) + + def test_a_stop_that_already_landed_stops_the_next_step_too(self): + aborter = api.Aborter() + aborter.abort() + with self.assertRaises(api.Aborted): + aborter.check() + with self.assertRaises(api.Aborted): + with aborter.holding(lambda: None): + pass diff --git a/tests/test_filetranscribe.py b/tests/test_filetranscribe.py index def4f5c..b45a385 100644 --- a/tests/test_filetranscribe.py +++ b/tests/test_filetranscribe.py @@ -7,6 +7,7 @@ made up a stamp nobody recorded. """ import contextlib +import time import unittest import wave from unittest import mock @@ -170,7 +171,7 @@ class Transcriber(DikteTest): worker.failed.connect(failures.append) worker.progress.connect(progress.append) - def to_wav(path, workdir): + def to_wav(path, workdir, aborter=None): return make_wav(self.path("converted.wav"), tone(1.0)) with mock.patch.object(ft, "_to_wav", side_effect=to_wav), \ @@ -225,6 +226,40 @@ class Transcriber(DikteTest): _, _, _, cleanup_call = self.run_chain(cleanup=True, transcript="") cleanup_call.assert_not_called() + def test_a_stopped_run_is_not_a_failure(self): + def stopped(*args, **kwargs): + raise api.Aborted + done, failures, progress, _ = self.run_chain(fail=stopped) + self.assertEqual(failures, []) + self.assertEqual(done, []) + self.assertEqual(progress[-1], "Stopped.") + + def test_the_request_is_handed_the_stop_to_watch(self): + worker = ft.FileTranscriber(self.conf) + with mock.patch.object(ft, "_to_wav", side_effect=lambda *a: self.source), \ + mock.patch.object(ft.shutil, "which", return_value="/usr/bin/ffmpeg"), \ + mock.patch.object(api, "transcribe", return_value="text") as call: + worker._work(self.source, False, False) + self.assertIs(call.call_args.kwargs["aborter"], worker._abort) + + def test_stopping_a_local_run_stops_the_model_with_it(self): + """Closing the socket is nothing to a process of ours: it would grind on + to the end of the chunk with nobody left to hand the answer to.""" + worker = ft.FileTranscriber(self.conf) + worker._local = mock.Mock() + worker.stop() + self.assertTrue(worker._abort.aborted) + for _ in range(100): + if worker._local.stop.called: + break + time.sleep(0.01) + worker._local.stop.assert_called_once_with() + + def test_a_run_that_is_over_leaves_the_model_alone(self): + worker = ft.FileTranscriber(self.conf) + worker.stop() + self.assertTrue(worker._abort.aborted) + def test_a_second_start_while_one_is_running_is_ignored(self): worker = ft.FileTranscriber(self.conf) worker._thread = mock.Mock(is_alive=lambda: True) diff --git a/tests/test_ui.py b/tests/test_ui.py index 3ba334c..10554f2 100644 --- a/tests/test_ui.py +++ b/tests/test_ui.py @@ -266,6 +266,43 @@ class Settings(DikteTest): window = self.window(cfg.Config()) self.assertEqual(window.windowTitle(), "Dikte Ayarları") + def test_the_audio_file_switches_are_kept_without_the_save_button(self): + """They are ticked to transcribe one file, not to fill in a form.""" + self.write_config({"file_timestamps": False, "file_cleanup": True}) + window = self.window(cfg.Config()) + window.file_timestamps.setChecked(True) + window.file_cleanup.setChecked(False) + stored = self.read_config_file() + self.assertTrue(stored["file_timestamps"]) + self.assertFalse(stored["file_cleanup"]) + + def test_loading_the_audio_file_tab_is_not_taken_for_a_change(self): + self.write_config({"file_timestamps": True, "file_cleanup": False}) + conf = cfg.Config() + with mock.patch.object(conf, "save") as save: + window = self.window(conf) + save.assert_not_called() + self.assertTrue(window.file_timestamps.isChecked()) + self.assertFalse(window.file_cleanup.isChecked()) + + def test_the_run_button_comes_back_when_the_stop_lands(self): + """In whichever language, since the worker says so through t() too.""" + for language in ("auto", "tr"): + with self.subTest(language=language): + self.write_config({"ui_language": language}) + window = self.window(cfg.Config()) + window.file_run.setEnabled(False) + window._on_file_progress(settings_ui.t("Stopped.")) + self.assertTrue(window.file_run.isEnabled()) + + def test_stop_leaves_nothing_to_press_twice(self): + window = self.window(cfg.Config()) + with mock.patch.object(window.transcriber, "stop") as stop: + window.file_stop.setEnabled(True) + window._stop_file() + stop.assert_called_once_with() + self.assertFalse(window.file_stop.isEnabled()) + class Overlay(DikteTest): def overlay(self, **kwargs):

u?(cI6}a8Z zU2n=avSrg?!!hzyfdw0W1q2j>bczcGf_er%ehdpyS z!j48R9DK>n3MEb%={T2cEG2XjnK~2o70r{F5fvJUEw}~rSNWAn5-G|$ri=(xN8GU? zmiS93sSlK8)5I}w-QTsK5%hpoND`JY_PsbSjq%-7IP;~p0FshIf@)NeB#>49%@jCf zp-iZ^mHA!4w@{`mPE%uWtbe5h1W>*OE;}jCh-77o@+!ls5^AEcRFza^Wz4rvy|N&$ zMm_#pcvofB_!4v?IDc$ZRR+YxgwMhg^j1g)X?Bv87Nr`atumvkG1{60MBR@pZzXkH ze2i}vSos)0gdmA63aSInn9&&HtVx`zt5JR0d1*`vEWm^!R2%KU#)wRt6j{htwId`+ zqN0p5#va)$i}fkxP?b7)MKL~Fz_B|*HH+^C@YRAIq$|EA!J=|!j9s!(R=Gez-!nxs zzdS~6p^VgsfJrDTEUK+?vn+il1N{;H8j9BZwos75fbcaKdjnw8Kx!cg(g^>u!?$6a zvANfjDO`Qh{CY8B3;T*@5-!SBCy*g`yR7eJ%5r%%W5gCB?2jNZj(}LyMT~P1RL8nw zA7wJXZ2G4ffq1_(PB%ttE!_qKY*T!(6vjqOgb(i`aL0O@VtQ2rCG)(p`cfJbEn&KX zKh=p}Td!H_4VPNI? f<9mOC51DS5fi{` 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%0AQ_nff7h%8)Dc3UJ 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%0DWppbpz zgb`=~+FAXkm3cRMnFF7264v&^At>-*o(`#t(^d+MD2S2dL0PM;i+<)7nrI;B_SerO zWDvm<(9Q%Z1>=r%Xr_xTVk6i+c^Yg{+|$kMMMc!niiu&t-xi8Pt$Mam8OQQi z>MW5?gPD^2L|11)cY^W-#Y2}@t@QO(BkRmDHJ`<0DV8Iiy&CA!3v)bX8$)#5(Z(#{ z*0rESrYDYGr7Ho!Vm5YC#yB|!C35I+mso>7IU-= zi=yS!*@q?&ClJ@Cn5xg>&T_|HH=;1aFd<7AMnI+2b$rZ3Y%dN8{nmPlygk3djBvFh zrtY(}#B5FbWmLUyIunHT|;iS9-hBc1)za*}eUVB1?~%Nds=PPB2v6^yfWvC=P% zsr!8GO00M|++AW|qm5n7px2o&a@CFnMRgHuaW}1}VZq!xGc16KI1MkHV^jGo4M(Y2 zQ5r~2fAJIgD(>;=etpPt#?Fie%$RKv0;j5c7JppjVngtNhraQfq8K{NR6COlox_uy z!bs?WnJqN-mz^02P}Cf3`%>kz7|zNk)p0s0n@DNjBW;;+GCDI%)cAn*fXZjl z$K6bWt0~?L)nqqi&qs@#? zyeB*K?3(FOc*}kAW11)(Grn(%;7CzfDrsc=F*UGeS6L4t`wYAf%RXmLPo)(oj_k~U zI&&6VnfW~fQ%E&97@eXfGyb|WsuHxBhK`TbbBd}(C_lpdn5;LEEL)bsm_00-Lh_iy zv1zi9@AqNEG6TjA2VE11Tf4E$o`p7Fo|aDU+g+qyIq8&{vU1c!YleHA-g1RnEIa0< ze)Lb-+7cTKP!KM!)fC5@Qw^)%l2jEUQl5y1h{JvkuPKhhRZQ94xmCQ<`S*$`jR9uB z)N8w!>59AAs62@*bTofwY53YF9xS^zJx>8l3=_@Us$M0$BuzN=hvbw=uUQ!iZ)KK$ z(}LK-9WX_41Xh*>UsnC4X>!8g$I`(n+=&+#=rX;^-!ip)9yS-OLCegNHovk97%!q{ zU}U0{d(PgfT8>|*oO$2Pc-&6UN#Wma+u;obg+U5Hctxh?@o=8196PZUXFRpkc)q{a zK-^?;+(s5XjAvu96q6quO1WjkUd?ZJCV6D_ixWk!9S@m>BW9P(bZB>x@?&QC195iE znz9=h!4%THymkV8&*M2XrV`ABj(OoW3MtK~Nt~%@W+Mkl2KzULD|YHPwDVc