namespace GB5Shared.RecordingIntelligence;
///
/// Result of transcribing an audio/video recording to text.
///
public class TranscriptDTO
{
public string TranscriptText { get; set; } = string.Empty;
/// Provider-reported language code (e.g. "en-US"), when the provider exposes one.
public string? LanguageCode { get; set; }
/// Provider-reported confidence score (0.0-1.0), when the provider exposes one.
public double? Confidence { get; set; }
}
///
/// Result of summarizing a transcript.
///
public class SummaryDTO
{
public string SummaryText { get; set; } = string.Empty;
}
///
/// A single AI-suggested action item extracted from a transcript. Per the plan's open items,
/// whether these are auto-created as FBCK ActionItem rows or require human confirmation first is
/// a distinct future product decision — this DTO only carries the suggestion itself.
///
public class ActionItemSuggestionDTO
{
public string ActionText { get; set; } = string.Empty;
public string? SuggestedOwner { get; set; }
public DateTime? SuggestedDueDate { get; set; }
}
///
/// Provider-agnostic capability-based integration point for AI-backed transcription,
/// summarization, and action-item extraction (plan: "New shared capability:
/// Recording/Transcript/Summary" — this is the reusable interface PIE's Signal BLL already
/// forward-references in comments as "IAICapabilityService"/OI-18; this phase becomes its first
/// real consumer, not a competing interface).
///
/// Lives in GB5Shared (not owned by Meeting, CRM, or Recruitment) so any future consumer can
/// depend on this interface alone. No real LLM/STT provider is wired behind it in this phase —
/// see , the default DI registration, which fails
/// loudly rather than silently no-op'ing. A real provider-backed implementation (Claude/Azure
/// Speech/Whisper/etc., possibly per-tenant) is swapped in later via DI without touching any
/// consumer code.
///
public interface IAICapabilityService
{
/// Transcribes an audio/video recording to text.
Task TranscribeAsync(byte[] audioBytes, string mimeType, CancellationToken ct);
/// Produces a concise summary of a transcript's text.
Task SummarizeAsync(string transcriptText, CancellationToken ct);
/// Extracts candidate action items from a transcript's text.
Task> ExtractActionItemsAsync(string transcriptText, CancellationToken ct);
}