Treat language selection as meeting language
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user