mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-20 19:46:32 +08:00
feat(server): refactor record schema (#14729)
#### PR Dependency Tree * **PR #14729** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Transcriptions now produce structured meeting summaries (strict JSON) and a normalized, speaker‑tagged, non‑overlapping transcript with legacy projection support. * **API** * Submission accepts richer transcription input; results return source‑audio metadata, slice manifest, quality indicators, normalized segments/transcript, and structured summary JSON. * **Frontend** * Recording flow stores transcription metadata and uploads preprocessed audio slices with slice/quality info; UI-side result normalization applied. * **Tests** * Expanded unit, contract, and e2e coverage for normalization, payload parsing, persistence/retry, and end‑to‑end transcription flows. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
@@ -230,6 +230,24 @@ type AppConfigValidateResult {
|
||||
value: JSON!
|
||||
}
|
||||
|
||||
input AudioSliceManifestItemInput {
|
||||
byteSize: Int
|
||||
durationSec: Float!
|
||||
fileName: String!
|
||||
index: Int!
|
||||
mimeType: String!
|
||||
startSec: Float!
|
||||
}
|
||||
|
||||
type AudioSliceManifestItemType {
|
||||
byteSize: Int
|
||||
durationSec: Float!
|
||||
fileName: String!
|
||||
index: Int!
|
||||
mimeType: String!
|
||||
startSec: Float!
|
||||
}
|
||||
|
||||
type BlobNotFoundDataType {
|
||||
blobId: String!
|
||||
spaceId: String!
|
||||
@@ -1049,6 +1067,7 @@ enum FeatureType {
|
||||
FreePlan
|
||||
LifetimeProPlan
|
||||
ProPlan
|
||||
QuotaExceededReadonlyWorkspace
|
||||
TeamPlan
|
||||
UnlimitedCopilot
|
||||
UnlimitedWorkspace
|
||||
@@ -1406,6 +1425,23 @@ input ManageUserInput {
|
||||
name: String
|
||||
}
|
||||
|
||||
type MeetingActionItemType {
|
||||
deadline: String
|
||||
description: String!
|
||||
owner: String
|
||||
}
|
||||
|
||||
type MeetingSummaryV2Type {
|
||||
actionItems: [MeetingActionItemType!]!
|
||||
attendees: [String!]!
|
||||
blockers: [String!]!
|
||||
decisions: [String!]!
|
||||
durationMinutes: Float!
|
||||
keyPoints: [String!]!
|
||||
openQuestions: [String!]!
|
||||
title: String!
|
||||
}
|
||||
|
||||
type MemberNotFoundInSpaceDataType {
|
||||
spaceId: String!
|
||||
}
|
||||
@@ -1613,7 +1649,7 @@ type Mutation {
|
||||
sendVerifyChangeEmail(callbackUrl: String!, email: String!, token: String!): Boolean!
|
||||
sendVerifyEmail(callbackUrl: String!): Boolean!
|
||||
setBlob(blob: Upload!, workspaceId: String!): String!
|
||||
submitAudioTranscription(blob: Upload, blobId: String!, blobs: [Upload!], workspaceId: String!): TranscriptionResultType
|
||||
submitAudioTranscription(blob: Upload, blobId: String!, blobs: [Upload!], input: SubmitAudioTranscriptionInput, workspaceId: String!): TranscriptionResultType
|
||||
|
||||
"""Trigger cleanup of trashed doc embeddings"""
|
||||
triggerCleanupTrashedDocEmbeddings: Boolean!
|
||||
@@ -1671,6 +1707,15 @@ type NoMoreSeatDataType {
|
||||
spaceId: String!
|
||||
}
|
||||
|
||||
type NormalizedTranscriptSegmentType {
|
||||
end: String!
|
||||
endSec: Float!
|
||||
speaker: String!
|
||||
start: String!
|
||||
startSec: Float!
|
||||
text: String!
|
||||
}
|
||||
|
||||
type NotInSpaceDataType {
|
||||
spaceId: String!
|
||||
}
|
||||
@@ -2213,6 +2258,12 @@ type StreamObject {
|
||||
type: String!
|
||||
}
|
||||
|
||||
input SubmitAudioTranscriptionInput {
|
||||
quality: TranscriptionQualityInput
|
||||
sliceManifest: [AudioSliceManifestItemInput!]
|
||||
sourceAudio: TranscriptionSourceAudioInput
|
||||
}
|
||||
|
||||
type SubscriptionAlreadyExistsDataType {
|
||||
plan: String!
|
||||
}
|
||||
@@ -2319,15 +2370,46 @@ type TranscriptionItemType {
|
||||
transcription: String!
|
||||
}
|
||||
|
||||
input TranscriptionQualityInput {
|
||||
degraded: Boolean
|
||||
overflowCount: Int
|
||||
}
|
||||
|
||||
type TranscriptionQualityType {
|
||||
degraded: Boolean
|
||||
overflowCount: Int
|
||||
}
|
||||
|
||||
type TranscriptionResultType {
|
||||
actions: String
|
||||
id: ID!
|
||||
normalizedSegments: [NormalizedTranscriptSegmentType!]
|
||||
normalizedTranscript: String
|
||||
quality: TranscriptionQualityType
|
||||
sliceManifest: [AudioSliceManifestItemType!]
|
||||
sourceAudio: TranscriptionSourceAudioType
|
||||
status: AiJobStatus!
|
||||
summary: String
|
||||
summaryJson: MeetingSummaryV2Type
|
||||
title: String
|
||||
transcription: [TranscriptionItemType!]
|
||||
}
|
||||
|
||||
input TranscriptionSourceAudioInput {
|
||||
channels: Int
|
||||
durationMs: Int
|
||||
mimeType: String
|
||||
sampleRate: Int
|
||||
}
|
||||
|
||||
type TranscriptionSourceAudioType {
|
||||
blobId: String
|
||||
channels: Int
|
||||
durationMs: Int
|
||||
mimeType: String
|
||||
sampleRate: Int
|
||||
}
|
||||
|
||||
union UnionNotificationBodyType = InvitationAcceptedNotificationBodyType | InvitationBlockedNotificationBodyType | InvitationNotificationBodyType | InvitationReviewApprovedNotificationBodyType | InvitationReviewDeclinedNotificationBodyType | InvitationReviewRequestNotificationBodyType | MentionNotificationBodyType
|
||||
|
||||
type UnknownOauthProviderDataType {
|
||||
|
||||
Reference in New Issue
Block a user