97 lines
2.5 KiB
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
|
|
}
|