Implement artifact-level render command with Markdown output and update docs
This commit is contained in:
96
internal/render/normalize.go
Normal file
96
internal/render/normalize.go
Normal file
@@ -0,0 +1,96 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user