Treat language selection as meeting language
This commit is contained in:
@@ -1,5 +1,14 @@
|
|||||||
# Project Knowledge
|
# 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
|
## Vision
|
||||||
|
|
||||||
Meeting Assistant turns recorded meetings into reviewed, user-facing protocols
|
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
|
## 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
|
```text
|
||||||
Audio file
|
Audio file
|
||||||
-> FFmpeg preparation (mono, 16 kHz PCM WAV; normalization optional)
|
-> 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")
|
description = st.text_area("Description / context", height=100, key="meeting_description")
|
||||||
metadata_columns = st.columns(3)
|
metadata_columns = st.columns(3)
|
||||||
language = metadata_columns[0].selectbox(
|
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(
|
has_date = metadata_columns[1].checkbox(
|
||||||
"Meeting date is known", value=True, key="meeting_has_date"
|
"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(
|
def test_process_translates_configuration_and_disables_diarization(
|
||||||
tmp_path: Path,
|
tmp_path: Path,
|
||||||
|
language: str,
|
||||||
) -> None:
|
) -> None:
|
||||||
service, gateway = make_service(tmp_path)
|
service, gateway = make_service(tmp_path)
|
||||||
audio = tmp_path / "meeting.wav"
|
audio = tmp_path / "meeting.wav"
|
||||||
audio.write_bytes(b"audio")
|
audio.write_bytes(b"audio")
|
||||||
|
|
||||||
outcome = service.process(
|
outcome = service.process(
|
||||||
audio, meeting(), participants(), ProcessingOptions(diarization_enabled=False)
|
audio,
|
||||||
|
replace(meeting(), language=language),
|
||||||
|
participants(),
|
||||||
|
ProcessingOptions(diarization_enabled=False),
|
||||||
)
|
)
|
||||||
|
|
||||||
assert outcome.succeeded
|
assert outcome.succeeded
|
||||||
assert gateway.config_values is not None
|
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["diarization"] == "off"
|
||||||
assert gateway.config_values["model"] == "test:model"
|
assert gateway.config_values["model"] == "test:model"
|
||||||
assert gateway.config_values["protocol_num_ctx"] == 32_768
|
assert gateway.config_values["protocol_num_ctx"] == 32_768
|
||||||
|
|||||||
Reference in New Issue
Block a user