Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions meet/gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,41 @@ def _on_mlx_model_changed(entry):
grid.attach(_label("MLX model:"), 0, 2, 1, 1)
grid.attach(self._mlx_model_entry, 1, 2, 1, 1)

# Language ---------------------------------------------------------
# Whisper auto-detect on sparse / quiet audio (long silences, short
# opening utterances) is unreliable and can mis-classify English as
# ja/zh, producing pages of CJK hallucinations. Letting the user
# set the meeting language up-front avoids that failure mode.
# The list mirrors the alignment-models registry plus a few common
# Whisper-supported languages.
language_values = [
"auto",
"en",
"de",
"fr",
"es",
"tr",
"fa",
"it",
"pt",
"nl",
"ja",
"zh",
"ko",
"ar",
"ru",
]
current_language = self._transcribe_kwargs.get("language", "auto")
self._language_combo = _combo(language_values, current_language)
self._language_combo.connect(
"changed",
lambda c: self._transcribe_kwargs.__setitem__(
"language", c.get_active_text() or "auto"
),
)
grid.attach(_label("Language:"), 0, 3, 1, 1)
grid.attach(self._language_combo, 1, 3, 1, 1)

expander.add(grid)
parent_vbox.pack_start(expander, False, False, 0)

Expand Down
34 changes: 34 additions & 0 deletions tests/test_gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,3 +98,37 @@ def show_all(self):
assert tk["device"] is None
assert tk["torch_device"] is None
assert tk["mlx_model"] is None
# Language defaults to "auto" so Whisper auto-detects. Users can override
# via --language on the CLI or the GUI Advanced panel dropdown.
assert tk["language"] == "auto"


def test_launch_passes_explicit_language(monkeypatch):
"""``launch(language='en')`` must thread into transcribe_kwargs so the
GUI Advanced panel dropdown can override Whisper's auto-detect."""
import meet.gui as gui_mod

captured: dict = {}

class _StubWindow:
_rec_btn_box = type("_X", (), {"hide": lambda self: None})()
_alignment_box = type("_X", (), {"hide": lambda self: None})()
_label_box = type("_X", (), {"hide": lambda self: None})()
_sync_box = type("_X", (), {"hide": lambda self: None})()
_progress_bar = type("_X", (), {"hide": lambda self: None})()
_open_transcript_btn = type("_X", (), {"hide": lambda self: None})()
_open_folder_btn = type("_X", (), {"hide": lambda self: None})()
_bg_label = type("_X", (), {"hide": lambda self: None})()

def __init__(self, capture_kwargs, transcribe_kwargs, **kwargs):
captured["transcribe_kwargs"] = transcribe_kwargs

def show_all(self):
pass

monkeypatch.setattr(gui_mod, "MeetRecorderWindow", _StubWindow)
monkeypatch.setattr(gui_mod.Gtk, "main", lambda: None)

gui_mod.launch(language="en")

assert captured["transcribe_kwargs"]["language"] == "en"
Loading