Public Access
136 lines
3.8 KiB
C#
136 lines
3.8 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; }
|
|
}
|
|
|
|
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 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);
|
|
|
|
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);
|
|
|
|
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);
|
|
}
|
|
}
|