Files
recap-relay/startos/versions/v0.2.111.ts
T

14 lines
2.1 KiB
TypeScript

import { VersionInfo } from '@start9labs/start-sdk'
export const v_0_2_111 = VersionInfo.of({
version: '0.2.111:0',
releaseNotes: {
en_US:
"Diarization speaker-time accounting fix. Two bugs in the cluster-summary builder were producing dramatically deflated speaker totals on real meetings — a 1.5-hour team call was showing as '34% speech detected' when in reality 70%+ of the audio was speech. (1) Unfingerprinted segments were silently dropped. Sortformer routinely emits diarization segments for speakers whose voice TitaNet didn't aggregate a fingerprint for (very brief utterances, soft speech, overlapped speech). The speaking-time accumulator only counted segments whose speaker_local had a fingerprint — every other segment fell through to `globalId === undefined → continue` and disappeared from the totals entirely. Now unmapped segments bucket into Speaker_Unknown so the time is still accounted for. The per-line chip on the transcript still shows '?' for those lines — they just aren't claimed by a wrong cluster, and the Unknown legend entry reflects the real total of un-clusterable speech. (2) Chunk-overlap double-counting. Transcribe segments were already deduped at the 30s overlap boundary between consecutive chunks (handled in hardware.js), but diarization segments weren't — the same speech in an overlap zone was counted toward BOTH chunks, inflating speaker totals. Now diar segments are deduped using the same overlapBoundarySec the transcribe path uses; the relay backend stamps the global boundary onto each chunk's diarization data so the clustering module can drop overlap-zone duplicates. Net effect: speaker totals on a real meeting should jump from ~30-40% of audio duration to 70-90%, with Speaker_Unknown absorbing legitimately un-clusterable speech. Note: existing saved records keep their pre-fix totals (the clustering pass runs once during pipeline execution, not on every read). To see the corrected totals on an old meeting, re-upload the audio.",
},
migrations: {
up: async ({ effects }) => {},
down: async ({ effects }) => {},
},
})