Add meeting assistant speech and summary automation

This commit is contained in:
2026-05-21 09:55:39 +02:00
parent 1e97d2b9ff
commit 48d98d9cbb
63 changed files with 5143 additions and 151 deletions
@@ -0,0 +1,64 @@
using MeetingAssistant.MeetingNotes;
using MeetingAssistant.Transcription;
namespace MeetingAssistant.Speakers;
public sealed record SpeakerIdentificationRequest(
string AudioPath,
MeetingNote MeetingNote,
IReadOnlyList<TranscriptionSegment> Segments,
IReadOnlyList<SpeakerAudioSample>? Samples = null);
public sealed record SpeakerAudioSample(
string Speaker,
TranscriptionSegment Segment,
byte[] WavBytes,
double Score);
public sealed record SpeakerIdentificationResult(
IReadOnlyList<TranscriptionSegment> Segments,
IReadOnlyDictionary<string, string> SpeakerMappings,
IReadOnlyList<SpeakerIdentityAttendeeMatch>? AttendeeMatches = null);
public sealed record SpeakerIdentityAttendeeMatch(
string DisplayName,
IReadOnlyList<string> AcceptedNames);
public sealed record SpeakerIdentityMatchRequest(
string DiarizedSpeaker,
byte[] UnknownSnippet,
IReadOnlyList<SpeakerIdentityMatchCandidate> Candidates);
public sealed record SpeakerIdentityMatchCandidate(
int IdentityId,
string? CanonicalName,
int TranscriptionCount,
IReadOnlyList<byte[]> Snippets);
public sealed record SpeakerIdentityMatch(int IdentityId);
public interface ISpeakerIdentityMatcher
{
Task<SpeakerIdentityMatch?> MatchAsync(
SpeakerIdentityMatchRequest request,
CancellationToken cancellationToken);
}
public interface ISpeakerSnippetExtractor
{
Task<byte[]> ExtractSnippetAsync(
string audioPath,
IReadOnlyList<TranscriptionSegment> speakerSegments,
CancellationToken cancellationToken);
}
public interface ISpeakerIdentificationService
{
Task<SpeakerIdentificationResult> IdentifyKnownSpeakersAsync(
SpeakerIdentificationRequest request,
CancellationToken cancellationToken);
Task<SpeakerIdentificationResult> ProcessFinishedTranscriptAsync(
SpeakerIdentificationRequest request,
CancellationToken cancellationToken);
}