forked from Manuel/meeting-assistant
fix: unify pyannote validation toggle
This commit is contained in:
@@ -96,14 +96,18 @@ public sealed class PyannoteDiarizationWarmupHostedService : IHostedService
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerable<PyannoteDiarizationOptions> GetEnabledDiarizationOptions()
|
||||
private IEnumerable<PyannoteRuntimeOptions> GetEnabledDiarizationOptions()
|
||||
{
|
||||
return launchProfiles.GetProfiles()
|
||||
.SelectMany(profile => GetEnabledDiarizationOptions(profile.Options))
|
||||
var transcriptionRuntimes = launchProfiles.GetProfiles()
|
||||
.SelectMany(profile => GetEnabledTranscriptionDiarizationOptions(profile.Options));
|
||||
var speakerValidationRuntimes = GetEnabledSpeakerValidationDiarizationOptions(
|
||||
launchProfiles.GetRequiredProfile(null).Options);
|
||||
return transcriptionRuntimes
|
||||
.Concat(speakerValidationRuntimes)
|
||||
.DistinctBy(CreateWarmUpKey);
|
||||
}
|
||||
|
||||
private static IEnumerable<PyannoteDiarizationOptions> GetEnabledDiarizationOptions(
|
||||
private static IEnumerable<PyannoteRuntimeOptions> GetEnabledTranscriptionDiarizationOptions(
|
||||
MeetingAssistantOptions options)
|
||||
{
|
||||
if (options.Recording.TranscriptionProvider.Equals("whisper-local", StringComparison.OrdinalIgnoreCase) &&
|
||||
@@ -111,15 +115,18 @@ public sealed class PyannoteDiarizationWarmupHostedService : IHostedService
|
||||
{
|
||||
yield return options.WhisperLocal.Diarization;
|
||||
}
|
||||
}
|
||||
|
||||
if (options.SpeakerIdentification.PyannoteValidation.Enabled &&
|
||||
options.SpeakerIdentification.PyannoteValidation.Diarization.Enabled)
|
||||
private static IEnumerable<PyannoteRuntimeOptions> GetEnabledSpeakerValidationDiarizationOptions(
|
||||
MeetingAssistantOptions options)
|
||||
{
|
||||
if (options.SpeakerIdentification.PyannoteValidation.Enabled)
|
||||
{
|
||||
yield return options.SpeakerIdentification.PyannoteValidation.Diarization;
|
||||
}
|
||||
}
|
||||
|
||||
private static string CreateWarmUpKey(PyannoteDiarizationOptions diarization)
|
||||
private static string CreateWarmUpKey(PyannoteRuntimeOptions diarization)
|
||||
{
|
||||
return string.Join(
|
||||
'\u001f',
|
||||
|
||||
@@ -28,7 +28,12 @@ public sealed class PyannoteTranscriptFinalizer
|
||||
SpeechRecognitionPipelineOptions pipelineOptions,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
return await FinalizeAsync(
|
||||
if (!options.WhisperLocal.Diarization.Enabled)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
return await FinalizeEnabledAsync(
|
||||
audioPath,
|
||||
liveSegments,
|
||||
options.WhisperLocal.Diarization,
|
||||
@@ -36,14 +41,14 @@ public sealed class PyannoteTranscriptFinalizer
|
||||
cancellationToken);
|
||||
}
|
||||
|
||||
public async Task<IReadOnlyList<TranscriptionSegment>> FinalizeAsync(
|
||||
internal async Task<IReadOnlyList<TranscriptionSegment>> FinalizeEnabledAsync(
|
||||
string audioPath,
|
||||
IReadOnlyList<TranscriptionSegment> liveSegments,
|
||||
PyannoteDiarizationOptions diarization,
|
||||
PyannoteRuntimeOptions diarization,
|
||||
SpeechRecognitionPipelineOptions pipelineOptions,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
if (!diarization.Enabled || liveSegments.Count == 0)
|
||||
if (liveSegments.Count == 0)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
@@ -83,14 +88,9 @@ public sealed class PyannoteTranscriptFinalizer
|
||||
}
|
||||
|
||||
public async Task WarmUpAsync(
|
||||
PyannoteDiarizationOptions diarization,
|
||||
PyannoteRuntimeOptions diarization,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
if (!diarization.Enabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var token = ResolveToken(diarization);
|
||||
if (string.IsNullOrWhiteSpace(token))
|
||||
{
|
||||
@@ -137,7 +137,7 @@ public sealed class PyannoteTranscriptFinalizer
|
||||
private async Task<CommandResult> RunDiarizationAsync(
|
||||
string fullAudioPath,
|
||||
string token,
|
||||
PyannoteDiarizationOptions diarization,
|
||||
PyannoteRuntimeOptions diarization,
|
||||
SpeechRecognitionPipelineOptions pipelineOptions,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
@@ -171,7 +171,7 @@ public sealed class PyannoteTranscriptFinalizer
|
||||
}
|
||||
|
||||
private async Task EnsureDockerImageAsync(
|
||||
PyannoteDiarizationOptions diarization,
|
||||
PyannoteRuntimeOptions diarization,
|
||||
string modelsFolder,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
@@ -198,7 +198,7 @@ public sealed class PyannoteTranscriptFinalizer
|
||||
}
|
||||
}
|
||||
|
||||
private static string BuildDockerfile(PyannoteDiarizationOptions diarization)
|
||||
private static string BuildDockerfile(PyannoteRuntimeOptions diarization)
|
||||
{
|
||||
return
|
||||
$"FROM {diarization.BaseImage}\n"
|
||||
@@ -211,7 +211,7 @@ public sealed class PyannoteTranscriptFinalizer
|
||||
}
|
||||
|
||||
private string[] BuildDockerArguments(
|
||||
PyannoteDiarizationOptions diarization,
|
||||
PyannoteRuntimeOptions diarization,
|
||||
string fullAudioPath,
|
||||
string modelsFolder,
|
||||
SpeechRecognitionPipelineOptions pipelineOptions)
|
||||
@@ -242,7 +242,7 @@ public sealed class PyannoteTranscriptFinalizer
|
||||
}
|
||||
|
||||
private string[] BuildWarmUpDockerArguments(
|
||||
PyannoteDiarizationOptions diarization,
|
||||
PyannoteRuntimeOptions diarization,
|
||||
string modelsFolder)
|
||||
{
|
||||
return
|
||||
@@ -269,7 +269,7 @@ public sealed class PyannoteTranscriptFinalizer
|
||||
}
|
||||
|
||||
private static string BuildPythonCommand(
|
||||
PyannoteDiarizationOptions diarization,
|
||||
PyannoteRuntimeOptions diarization,
|
||||
SpeechRecognitionPipelineOptions pipelineOptions)
|
||||
{
|
||||
var model = diarization.Model;
|
||||
@@ -296,7 +296,7 @@ public sealed class PyannoteTranscriptFinalizer
|
||||
+ "python /tmp/meeting_assistant_pyannote.py";
|
||||
}
|
||||
|
||||
private static string BuildWarmUpPythonCommand(PyannoteDiarizationOptions diarization)
|
||||
private static string BuildWarmUpPythonCommand(PyannoteRuntimeOptions diarization)
|
||||
{
|
||||
var model = diarization.Model;
|
||||
return
|
||||
@@ -475,7 +475,7 @@ public sealed class PyannoteTranscriptFinalizer
|
||||
return turns;
|
||||
}
|
||||
|
||||
private static string ResolveToken(PyannoteDiarizationOptions options)
|
||||
private static string ResolveToken(PyannoteRuntimeOptions options)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(options.Token))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user