Add output validation against a defined JSON schema

This commit is contained in:
2026-04-27 21:27:19 -05:00
parent 8a95dba276
commit 6cb739be55
14 changed files with 638 additions and 30 deletions

View File

@@ -6,6 +6,7 @@ import (
"gitea.maximumdirect.net/eric/seriatim/internal/config"
"gitea.maximumdirect.net/eric/seriatim/internal/model"
"gitea.maximumdirect.net/eric/seriatim/internal/report"
"gitea.maximumdirect.net/eric/seriatim/schema"
)
// ModelState identifies which representation a preprocessing module consumes.
@@ -52,5 +53,5 @@ type Postprocessor interface {
// OutputWriter emits final artifacts.
type OutputWriter interface {
Name() string
Write(ctx context.Context, out model.FinalTranscript, rpt report.Report, cfg config.Config) ([]report.Event, error)
Write(ctx context.Context, out schema.Transcript, rpt report.Report, cfg config.Config) ([]report.Event, error)
}

View File

@@ -4,14 +4,16 @@ import (
"context"
"fmt"
"gitea.maximumdirect.net/eric/seriatim/internal/artifact"
"gitea.maximumdirect.net/eric/seriatim/internal/config"
"gitea.maximumdirect.net/eric/seriatim/internal/model"
"gitea.maximumdirect.net/eric/seriatim/internal/report"
"gitea.maximumdirect.net/eric/seriatim/schema"
)
const (
applicationName = "seriatim"
version = "dev"
applicationName = artifact.ApplicationName
version = artifact.Version
)
// Run validates module composition, executes the pipeline, and emits outputs.
@@ -139,29 +141,8 @@ func validatePreprocessors(modules []Preprocessor) error {
return nil
}
func finalizeTranscript(cfg config.Config, merged model.MergedTranscript) model.FinalTranscript {
segments := make([]model.Segment, len(merged.Segments))
copy(segments, merged.Segments)
for index := range segments {
segments[index].Words = nil
segments[index].DerivedFrom = append([]string(nil), segments[index].DerivedFrom...)
}
overlapGroups := make([]model.OverlapGroup, len(merged.OverlapGroups))
copy(overlapGroups, merged.OverlapGroups)
return model.FinalTranscript{
Metadata: model.OutputMetadata{
Application: applicationName,
Version: version,
InputReader: cfg.InputReader,
InputFiles: append([]string(nil), cfg.InputFiles...),
PreprocessingModules: append([]string(nil), cfg.PreprocessingModules...),
PostprocessingModules: append([]string(nil), cfg.PostprocessingModules...),
OutputModules: append([]string(nil), cfg.OutputModules...),
},
Segments: segments,
OverlapGroups: overlapGroups,
}
func finalizeTranscript(cfg config.Config, merged model.MergedTranscript) schema.Transcript {
return artifact.FromMerged(cfg, merged)
}
func finalizeReport(cfg config.Config, events []report.Event) report.Report {