Files
seriatim/internal/render/normalize.go

97 lines
2.5 KiB
Go

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
}