package render import ( "fmt" "gitea.maximumdirect.net/eric/seriatim/internal/artifact" ) // FromOutputArtifact converts a parsed output artifact into the internal render model. func FromOutputArtifact(input artifact.OutputArtifact) (Transcript, error) { switch input.Schema { case artifact.OutputSchemaFull: payload, err := input.FullPayload() if err != nil { return Transcript{}, err } segments := make([]Segment, len(payload.Segments)) for index, segment := range payload.Segments { segments[index] = Segment{ ID: segment.ID, Start: segment.Start, End: segment.End, Speaker: segment.Speaker, Text: segment.Text, Categories: normalizeCategories(segment.Categories), } } return Transcript{ Schema: input.Schema, Metadata: Metadata{ Application: payload.Metadata.Application, Version: payload.Metadata.Version, }, Segments: segments, }, nil case artifact.OutputSchemaIntermediate: payload, err := input.IntermediatePayload() if err != nil { return Transcript{}, err } segments := make([]Segment, len(payload.Segments)) for index, segment := range payload.Segments { segments[index] = Segment{ ID: segment.ID, Start: segment.Start, End: segment.End, Speaker: segment.Speaker, Text: segment.Text, Categories: normalizeCategories(segment.Categories), } } return Transcript{ Schema: input.Schema, Metadata: Metadata{ Application: payload.Metadata.Application, Version: payload.Metadata.Version, }, Segments: segments, }, nil case artifact.OutputSchemaMinimal: payload, err := input.MinimalPayload() if err != nil { return Transcript{}, err } segments := make([]Segment, len(payload.Segments)) for index, segment := range payload.Segments { segments[index] = Segment{ ID: segment.ID, Start: segment.Start, End: segment.End, Speaker: segment.Speaker, Text: segment.Text, Categories: []string{}, } } return Transcript{ Schema: input.Schema, Metadata: Metadata{ Application: payload.Metadata.Application, Version: payload.Metadata.Version, }, Segments: segments, }, nil default: return Transcript{}, fmt.Errorf("unsupported artifact schema %q", input.Schema) } } func normalizeCategories(categories []string) []string { if categories == nil { return []string{} } out := make([]string, len(categories)) copy(out, categories) return out }