Treat language selection as meeting language

This commit is contained in:
2026-09-11 10:25:45 +02:00
parent dd8a618719
commit e55dd74c19
4 changed files with 30 additions and 2 deletions
+9
View File
@@ -1,5 +1,14 @@
# Project Knowledge
## Meeting language
The GUI's `meeting_language` is passed through `MeetingDetails.language` to both
Meeting Context `meeting.language` and `MvpMeetingConfig.language` (Whisper).
Meeting Lab derives explicit protocol output language from the persisted context,
also during regeneration, and records derived `output_language` provenance in
protocol runtime metadata. Missing context language defaults to German. There is
no separate protocol-language setting or automatic context/transcript translation.
## Vision
Meeting Assistant turns recorded meetings into reviewed, user-facing protocols
+7
View File
@@ -23,6 +23,13 @@ reference recorder, but imported audio is not tied to OBS-specific behavior.
## Processing Pipeline
The existing **Meeting language** selector controls both transcription and protocol
output: `de` means German for both, and `en` means English for both. The selection
is saved in Meeting Context (`meeting.language`) and reused for protocol-only
regeneration without retranscription. Older contexts without a language retain
German protocol output. Names, speaker mappings and authored Meeting Context are
preserved; no transcript translation stage is added.
```text
Audio file
-> FFmpeg preparation (mono, 16 kHz PCM WAV; normalization optional)
+4 -1
View File
@@ -458,7 +458,10 @@ def main() -> None:
description = st.text_area("Description / context", height=100, key="meeting_description")
metadata_columns = st.columns(3)
language = metadata_columns[0].selectbox(
"Meeting language", options=["de", "en"], key="meeting_language"
"Meeting language",
options=["de", "en"],
key="meeting_language",
help="Language for both transcription and the generated protocol.",
)
has_date = metadata_columns[1].checkbox(
"Meeting date is known", value=True, key="meeting_has_date"
+10 -1
View File
@@ -323,19 +323,28 @@ def test_build_context_translates_mentioned_only_person(tmp_path: Path) -> None:
]
@pytest.mark.parametrize("language", ["de", "en"])
def test_process_translates_configuration_and_disables_diarization(
tmp_path: Path,
language: str,
) -> None:
service, gateway = make_service(tmp_path)
audio = tmp_path / "meeting.wav"
audio.write_bytes(b"audio")
outcome = service.process(
audio, meeting(), participants(), ProcessingOptions(diarization_enabled=False)
audio,
replace(meeting(), language=language),
participants(),
ProcessingOptions(diarization_enabled=False),
)
assert outcome.succeeded
assert gateway.config_values is not None
assert gateway.config_values["language"] == language
assert service.build_context(replace(meeting(), language=language), participants()).data[
"meeting"
]["language"] == language
assert gateway.config_values["diarization"] == "off"
assert gateway.config_values["model"] == "test:model"
assert gateway.config_values["protocol_num_ctx"] == 32_768