Files
meeting-assistant/MeetingAssistant/Workflow/MeetingWorkflowModels.cs
T

154 lines
4.3 KiB
C#

using MeetingAssistant.MeetingNotes;
using YamlDotNet.Serialization;
namespace MeetingAssistant.Workflow;
public sealed class MeetingWorkflowRulesFile
{
[YamlMember(Alias = "rules")]
public List<MeetingWorkflowRule> Rules { get; set; } = [];
}
public sealed class MeetingWorkflowRule
{
[YamlMember(Alias = "name")]
public string Name { get; set; } = "";
[YamlMember(Alias = "on")]
public List<MeetingWorkflowTrigger> On { get; set; } = [];
[YamlMember(Alias = "if")]
public List<MeetingWorkflowCondition> If { get; set; } = [];
[YamlMember(Alias = "steps")]
public List<MeetingWorkflowStep> Steps { get; set; } = [];
}
public sealed class MeetingWorkflowTrigger
{
[YamlMember(Alias = "created")]
public object? Created { get; set; }
[YamlMember(Alias = "state_transition")]
public MeetingWorkflowStateTransitionTrigger? StateTransition { get; set; }
[YamlMember(Alias = "speaker_identified")]
public MeetingWorkflowSpeakerIdentifiedTrigger? SpeakerIdentified { get; set; }
[YamlMember(Alias = "transcript_line")]
public MeetingWorkflowTranscriptLineTrigger? TranscriptLine { get; set; }
[YamlMember(Alias = "attendee_added")]
public MeetingWorkflowAttendeeAddedTrigger? AttendeeAdded { get; set; }
}
public sealed class MeetingWorkflowStateTransitionTrigger
{
[YamlMember(Alias = "from")]
public string? From { get; set; }
[YamlMember(Alias = "to")]
public string? To { get; set; }
}
public sealed class MeetingWorkflowSpeakerIdentifiedTrigger
{
[YamlMember(Alias = "name")]
public string? Name { get; set; }
}
public sealed class MeetingWorkflowTranscriptLineTrigger
{
[YamlMember(Alias = "speaker")]
public string? Speaker { get; set; }
}
public sealed class MeetingWorkflowAttendeeAddedTrigger
{
[YamlMember(Alias = "equals")]
public string? EqualsValue { get; set; }
[YamlMember(Alias = "contains")]
public string? Contains { get; set; }
[YamlMember(Alias = "regex")]
public string? Regex { get; set; }
}
public sealed class MeetingWorkflowCondition
{
[YamlMember(Alias = "condition")]
public string? Condition { get; set; }
[YamlMember(Alias = "and")]
public List<MeetingWorkflowCondition>? And { get; set; }
[YamlMember(Alias = "or")]
public List<MeetingWorkflowCondition>? Or { get; set; }
[YamlMember(Alias = "not")]
public MeetingWorkflowCondition? Not { get; set; }
}
public sealed class MeetingWorkflowStep
{
[YamlMember(Alias = "uses")]
public string Uses { get; set; } = "";
[YamlMember(Alias = "property")]
public string? Property { get; set; }
[YamlMember(Alias = "name")]
public string? Name { get; set; }
[YamlMember(Alias = "value")]
public string? Value { get; set; }
}
public sealed record MeetingWorkflowTemplateModel(
MeetingWorkflowMeetingModel Meeting,
MeetingWorkflowEventModel Event,
MeetingWorkflowSpeakerModel? Speaker,
MeetingWorkflowTranscriptModel? Transcript,
MeetingWorkflowAttendeeModel? Attendee);
public sealed record MeetingWorkflowMeetingModel(
string Title,
IReadOnlyList<string> Attendees,
IReadOnlyList<string> Projects,
string State);
public sealed record MeetingWorkflowEventModel(
string Type,
string? From,
string? To);
public sealed record MeetingWorkflowSpeakerModel(string Name);
public sealed record MeetingWorkflowTranscriptModel(string Line, string Speaker);
public sealed record MeetingWorkflowAttendeeModel(string Name);
internal static class MeetingWorkflowStateNames
{
public static string ToRuleName(AssistantContextState state)
{
return state switch
{
AssistantContextState.CollectingMetadata => "collecting metadata",
AssistantContextState.Transcribing => "transcribing",
AssistantContextState.SpeakerRecognition => "speaker recognition",
AssistantContextState.Summarizing => "summarizing",
AssistantContextState.Finished => "finished",
AssistantContextState.Error => "error",
_ => "error"
};
}
public static bool EqualsRuleName(AssistantContextState state, string? value)
{
return string.IsNullOrWhiteSpace(value) ||
string.Equals(ToRuleName(state), value.Trim(), StringComparison.OrdinalIgnoreCase);
}
}