86 lines
4.5 KiB
Go
86 lines
4.5 KiB
Go
|
|
package cli
|
||
|
|
|
||
|
|
import (
|
||
|
|
"strconv"
|
||
|
|
|
||
|
|
commandkit "go.maximumdirect.net/commandkit"
|
||
|
|
ck "go.maximumdirect.net/configkit"
|
||
|
|
)
|
||
|
|
|
||
|
|
type processInput struct {
|
||
|
|
Config commandkit.Supplied[string]
|
||
|
|
Overlay commandkit.Supplied[string]
|
||
|
|
Transcript string
|
||
|
|
Output commandkit.Supplied[string]
|
||
|
|
Debug commandkit.Supplied[bool]
|
||
|
|
Overrides []ck.Override
|
||
|
|
}
|
||
|
|
|
||
|
|
func processCommand() commandkit.Command {
|
||
|
|
stringValue := func(s string) (string, error) { return s, nil }
|
||
|
|
flags := []commandkit.Flag[processInput]{
|
||
|
|
commandkit.ValueFlag(commandkit.FlagMeta{Name: "config", Usage: "Application configuration file."}, (*string)(nil), stringValue, func(in *processInput, v commandkit.Supplied[string]) { in.Config = v }),
|
||
|
|
commandkit.ValueFlag(commandkit.FlagMeta{Name: "overlay", Usage: "Configuration overlay."}, (*string)(nil), stringValue, func(in *processInput, v commandkit.Supplied[string]) { in.Overlay = v }),
|
||
|
|
commandkit.ValueFlag(commandkit.FlagMeta{Name: "output", Usage: "Transcript output file."}, (*string)(nil), stringValue, func(in *processInput, v commandkit.Supplied[string]) { in.Output = v }),
|
||
|
|
commandkit.BoolFlag(commandkit.FlagMeta{Name: "debug", Usage: "Capture diagnostic artifacts."}, false, func(in *processInput, v commandkit.Supplied[bool]) { in.Debug = v }),
|
||
|
|
}
|
||
|
|
for _, item := range []struct {
|
||
|
|
name string
|
||
|
|
path ck.Path
|
||
|
|
}{
|
||
|
|
{"proposal-profile", ck.Keys("llm", "proposal_profile")}, {"validation-profile", ck.Keys("llm", "validation_profile")},
|
||
|
|
{"output-schema", ck.Keys("output", "schema")}, {"transcript-description", ck.Keys("context", "description")},
|
||
|
|
{"report-dir", ck.Keys("reporting", "stdout_dir")}, {"work-dir", ck.Keys("diagnostics", "work_dir")},
|
||
|
|
} {
|
||
|
|
name, path := item.name, item.path
|
||
|
|
flags = append(flags, commandkit.ValueFlag(commandkit.FlagMeta{Name: name, Usage: "Override application setting."}, (*string)(nil), stringValue,
|
||
|
|
func(in *processInput, v commandkit.Supplied[string]) {
|
||
|
|
if v.Set {
|
||
|
|
in.Overrides = append(in.Overrides, ck.Override{Path: path, Value: v.Value, Flag: "--" + name})
|
||
|
|
}
|
||
|
|
}))
|
||
|
|
}
|
||
|
|
for _, item := range []struct {
|
||
|
|
name string
|
||
|
|
path ck.Path
|
||
|
|
}{
|
||
|
|
{"validation-max-prompt-tokens", ck.Keys("validation", "max_prompt_tokens")}, {"target-sections", ck.Keys("chunking", "target_sections")},
|
||
|
|
{"max-section-tokens", ck.Keys("chunking", "max_section_tokens")}, {"min-section-tokens", ck.Keys("chunking", "min_section_tokens")},
|
||
|
|
{"normalize-max-segment-tokens", ck.Keys("normalization", "max_segment_tokens")},
|
||
|
|
} {
|
||
|
|
name, path := item.name, item.path
|
||
|
|
flags = append(flags, commandkit.ValueFlag(commandkit.FlagMeta{Name: name, Usage: "Override application setting."}, (*int)(nil), strconv.Atoi,
|
||
|
|
func(in *processInput, v commandkit.Supplied[int]) {
|
||
|
|
if v.Set {
|
||
|
|
in.Overrides = append(in.Overrides, ck.Override{Path: path, Value: v.Value, Flag: "--" + name})
|
||
|
|
}
|
||
|
|
}))
|
||
|
|
}
|
||
|
|
for _, item := range []struct {
|
||
|
|
name string
|
||
|
|
path ck.Path
|
||
|
|
}{
|
||
|
|
{"normalize-max-segment-gap", ck.Keys("normalization", "max_segment_gap")}, {"normalize-ellipsis-gap", ck.Keys("normalization", "ellipsis_gap")},
|
||
|
|
{"normalize-max-segment-duration", ck.Keys("normalization", "max_segment_duration")}, {"glossary-confidence-threshold", ck.Keys("thresholds", "glossary")},
|
||
|
|
{"homophones-confidence-threshold", ck.Keys("thresholds", "homophones")}, {"spoken-word-confidence-threshold", ck.Keys("thresholds", "spoken_word")},
|
||
|
|
{"grammar-confidence-threshold", ck.Keys("thresholds", "grammar")},
|
||
|
|
} {
|
||
|
|
name, path := item.name, item.path
|
||
|
|
flags = append(flags, commandkit.ValueFlag(commandkit.FlagMeta{Name: name, Usage: "Override application setting."}, (*float64)(nil), func(s string) (float64, error) { return strconv.ParseFloat(s, 64) },
|
||
|
|
func(in *processInput, v commandkit.Supplied[float64]) {
|
||
|
|
if v.Set {
|
||
|
|
in.Overrides = append(in.Overrides, ck.Override{Path: path, Value: v.Value, Flag: "--" + name})
|
||
|
|
}
|
||
|
|
}))
|
||
|
|
}
|
||
|
|
flags = append(flags, commandkit.BoolFlag(commandkit.FlagMeta{Name: "reporting", Usage: "Enable ordinary reports."}, false,
|
||
|
|
func(in *processInput, v commandkit.Supplied[bool]) {
|
||
|
|
if v.Set {
|
||
|
|
in.Overrides = append(in.Overrides, ck.Override{Path: ck.Keys("reporting", "enabled"), Value: v.Value, Flag: "--reporting"})
|
||
|
|
}
|
||
|
|
}))
|
||
|
|
return commandkit.NewCommand(commandkit.CommandSpec[processInput]{Name: "process", Summary: "Polish a transcript.", Flags: flags,
|
||
|
|
Arguments: []commandkit.Argument[processInput]{commandkit.ValueArgument(commandkit.ArgumentMeta{Name: "transcript", Usage: "Transcript JSON file."}, true, stringValue, func(in *processInput, v commandkit.Supplied[string]) { in.Transcript = v.Value })},
|
||
|
|
})
|
||
|
|
}
|