File size: 1,762 Bytes
0d0b668
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from __future__ import annotations

from typing import Any

try:
    from .config import VoiceRuntimeConfig
    from .diarization import (
        attach_speakers_to_segments,
        attach_speakers_to_words,
        build_diarization_summary,
        run_diarization,
    )
except ImportError:  # HF flat-root execution fallback
    from config import VoiceRuntimeConfig
    from diarization import (
        attach_speakers_to_segments,
        attach_speakers_to_words,
        build_diarization_summary,
        run_diarization,
    )


def apply_diarization(

    wav_path: str,

    config: VoiceRuntimeConfig,

    sample_rate: int,

    segments: list[dict[str, Any]],

    words: list[dict[str, Any]],

) -> tuple[list[dict[str, Any]], dict[str, Any]]:
    """Run diarization and project speaker labels onto words and segments."""
    diarization_segments = run_diarization(
        wav_path=wav_path,
        config=config,
        sample_rate=sample_rate,
    )

    attach_speakers_to_words(words=words, diarization_segments=diarization_segments)
    attach_speakers_to_segments(segments=segments, words=words, sample_rate=sample_rate)
    summary = build_diarization_summary(diarization_segments)
    return diarization_segments, summary


def run_diarization_only(

    wav_path: str,

    config: VoiceRuntimeConfig,

    sample_rate: int,

) -> tuple[list[dict[str, Any]], dict[str, Any]]:
    """Run diarization without any transcription/alignment dependencies."""
    diarization_segments = run_diarization(
        wav_path=wav_path,
        config=config,
        sample_rate=sample_rate,
    )
    summary = build_diarization_summary(diarization_segments)
    return diarization_segments, summary