User Story
As a user, I can provide a min/max speaker count range during upload so that diarization has better constraints without requiring me to know the exact speaker count.
Spec: docs/specs/transcription-quality-improvements.md — US-4
Size: S
Acceptance Criteria
- The upload form includes optional "Min speakers" and "Max speakers" fields
- Given an exact speaker count is provided, when min/max are also set, then min/max are ignored
- Given only min speakers is provided, when diarization runs, then at least that many speakers are preserved
- Given no speaker hints are provided, then default diarization behavior is unchanged
min_speakers and max_speakers fields are persisted in MeetingMetadata
- Given
min_speakers exceeds the actual number of speakers, then diarization may split one speaker into multiple (acceptable tradeoff)
Truths
- T1:
min_speakers/max_speakers are mutually exclusive with num_speakers — exact count takes precedence (BR-2)
- T2: These values are pass-through to pyannote's diarization pipeline
Business Rules
- BR-2:
min_speakers/max_speakers are mutually exclusive with num_speakers. If exact count is set, range is ignored. Pyannote does not accept both simultaneously.
Edge Cases
min_speakers > actual speakers → diarization may over-split (acceptable tradeoff vs. merging)
- Both exact count and min/max provided → exact count wins, min/max ignored
Dependencies
None
User Story
As a user, I can provide a min/max speaker count range during upload so that diarization has better constraints without requiring me to know the exact speaker count.
Spec:
docs/specs/transcription-quality-improvements.md— US-4Size: S
Acceptance Criteria
min_speakersandmax_speakersfields are persisted inMeetingMetadatamin_speakersexceeds the actual number of speakers, then diarization may split one speaker into multiple (acceptable tradeoff)Truths
min_speakers/max_speakersare mutually exclusive withnum_speakers— exact count takes precedence (BR-2)Business Rules
min_speakers/max_speakersare mutually exclusive withnum_speakers. If exact count is set, range is ignored. Pyannote does not accept both simultaneously.Edge Cases
min_speakers> actual speakers → diarization may over-split (acceptable tradeoff vs. merging)Dependencies
None