Public Access
Add meeting workflow automation
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
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; }
|
||||
}
|
||||
|
||||
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 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);
|
||||
|
||||
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);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user