Standardized the grammar and spoken_word modules on a shared editorial_review validator
This commit is contained in:
@@ -15,8 +15,6 @@ Built-in validator construction is package-owned under `internal/validators/<val
|
|||||||
- `internal/validators/spoken_form_plausibility`
|
- `internal/validators/spoken_form_plausibility`
|
||||||
- `internal/validators/meaning_reversal_review`
|
- `internal/validators/meaning_reversal_review`
|
||||||
- `internal/validators/editorial_review`
|
- `internal/validators/editorial_review`
|
||||||
- `internal/validators/grammar_review`
|
|
||||||
- `internal/validators/spoken_word_review`
|
|
||||||
|
|
||||||
Registry and chain wiring stay in:
|
Registry and chain wiring stay in:
|
||||||
- `internal/validators/registry.go`
|
- `internal/validators/registry.go`
|
||||||
@@ -67,10 +65,6 @@ Current 1.0 boundary:
|
|||||||
- checks for likely meaning reversal or semantic contradiction.
|
- checks for likely meaning reversal or semantic contradiction.
|
||||||
- `editorial_review`
|
- `editorial_review`
|
||||||
- performs conservative editorial safety review.
|
- performs conservative editorial safety review.
|
||||||
- `grammar_review`
|
|
||||||
- checks grammar-stage proposals for grammar-focused safety constraints.
|
|
||||||
- `spoken_word_review`
|
|
||||||
- checks spoken-word-stage proposals for dysfluency-cleanup safety constraints.
|
|
||||||
|
|
||||||
## Built-in module chains
|
## Built-in module chains
|
||||||
|
|
||||||
@@ -100,7 +94,7 @@ Current built-in chains resolved from `internal/validators/chains.go`:
|
|||||||
- `confidence_threshold`
|
- `confidence_threshold`
|
||||||
- `protected_terms`
|
- `protected_terms`
|
||||||
- `non_empty_corrected_text`
|
- `non_empty_corrected_text`
|
||||||
- `spoken_word_review`
|
- `editorial_review`
|
||||||
- `meaning_reversal_review`
|
- `meaning_reversal_review`
|
||||||
|
|
||||||
- `grammar`
|
- `grammar`
|
||||||
@@ -109,7 +103,7 @@ Current built-in chains resolved from `internal/validators/chains.go`:
|
|||||||
- `confidence_threshold`
|
- `confidence_threshold`
|
||||||
- `protected_terms`
|
- `protected_terms`
|
||||||
- `non_empty_corrected_text`
|
- `non_empty_corrected_text`
|
||||||
- `grammar_review`
|
- `editorial_review`
|
||||||
- `meaning_reversal_review`
|
- `meaning_reversal_review`
|
||||||
|
|
||||||
## Protected terms construction
|
## Protected terms construction
|
||||||
|
|||||||
@@ -52,8 +52,6 @@ func buildCorrectionLedger(runDirPath string, runOutput *runner.RunOutput) []cor
|
|||||||
"spoken_form_plausibility": true,
|
"spoken_form_plausibility": true,
|
||||||
"meaning_reversal_review": true,
|
"meaning_reversal_review": true,
|
||||||
"editorial_review": true,
|
"editorial_review": true,
|
||||||
"grammar_review": true,
|
|
||||||
"spoken_word_review": true,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, module := range runOutput.ModuleResults {
|
for _, module := range runOutput.ModuleResults {
|
||||||
|
|||||||
@@ -3564,8 +3564,8 @@ func TestRunProcessExplicitSpokenWordMeaningChangingCleanupRejected(t *testing.T
|
|||||||
if len(module.ValidatorRejected) != 1 {
|
if len(module.ValidatorRejected) != 1 {
|
||||||
t.Fatalf("expected one semantic guardrail rejection, got %+v", module.ValidatorRejected)
|
t.Fatalf("expected one semantic guardrail rejection, got %+v", module.ValidatorRejected)
|
||||||
}
|
}
|
||||||
if module.ValidatorRejected[0].ValidatorName != "spoken_word_review" {
|
if module.ValidatorRejected[0].ValidatorName != "editorial_review" {
|
||||||
t.Fatalf("expected spoken_word_review rejection, got %+v", module.ValidatorRejected[0])
|
t.Fatalf("expected editorial_review rejection, got %+v", module.ValidatorRejected[0])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,6 @@
|
|||||||
"total_skipped_changes": 1,
|
"total_skipped_changes": 1,
|
||||||
"validator_rejected_reason_codes": ["llm_rejected"],
|
"validator_rejected_reason_codes": ["llm_rejected"],
|
||||||
"expected_proposal_calls": ["grammar:proposal"],
|
"expected_proposal_calls": ["grammar:proposal"],
|
||||||
"expected_validation_calls": ["grammar:section-0000:grammar_review:batch-0000"]
|
"expected_validation_calls": ["grammar:section-0000:editorial_review:batch-0000"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -136,7 +136,7 @@ func TestGrammarModuleValidatorChain(t *testing.T) {
|
|||||||
"confidence_threshold",
|
"confidence_threshold",
|
||||||
"protected_terms",
|
"protected_terms",
|
||||||
"non_empty_corrected_text",
|
"non_empty_corrected_text",
|
||||||
"grammar_review",
|
"editorial_review",
|
||||||
"meaning_reversal_review",
|
"meaning_reversal_review",
|
||||||
}
|
}
|
||||||
if strings.Join(got, ",") != strings.Join(want, ",") {
|
if strings.Join(got, ",") != strings.Join(want, ",") {
|
||||||
|
|||||||
@@ -137,7 +137,7 @@ func TestSpokenWordModuleValidatorChain(t *testing.T) {
|
|||||||
"confidence_threshold",
|
"confidence_threshold",
|
||||||
"protected_terms",
|
"protected_terms",
|
||||||
"non_empty_corrected_text",
|
"non_empty_corrected_text",
|
||||||
"spoken_word_review",
|
"editorial_review",
|
||||||
"meaning_reversal_review",
|
"meaning_reversal_review",
|
||||||
}
|
}
|
||||||
if strings.Join(got, ",") != strings.Join(want, ",") {
|
if strings.Join(got, ",") != strings.Join(want, ",") {
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ var builtInChains = map[string][]string{
|
|||||||
KeyConfidenceThreshold,
|
KeyConfidenceThreshold,
|
||||||
KeyProtectedTerms,
|
KeyProtectedTerms,
|
||||||
KeyNonEmptyCorrectedText,
|
KeyNonEmptyCorrectedText,
|
||||||
KeySpokenWordReview,
|
KeyEditorialReview,
|
||||||
KeyMeaningReversalReview,
|
KeyMeaningReversalReview,
|
||||||
},
|
},
|
||||||
"grammar": {
|
"grammar": {
|
||||||
@@ -41,7 +41,7 @@ var builtInChains = map[string][]string{
|
|||||||
KeyConfidenceThreshold,
|
KeyConfidenceThreshold,
|
||||||
KeyProtectedTerms,
|
KeyProtectedTerms,
|
||||||
KeyNonEmptyCorrectedText,
|
KeyNonEmptyCorrectedText,
|
||||||
KeyGrammarReview,
|
KeyEditorialReview,
|
||||||
KeyMeaningReversalReview,
|
KeyMeaningReversalReview,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
package grammar_review
|
|
||||||
|
|
||||||
import (
|
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/framework/contracts"
|
|
||||||
frameworkvalidators "gitea.maximumdirect.net/eric/audita/internal/framework/validators"
|
|
||||||
validatormetadata "gitea.maximumdirect.net/eric/audita/internal/validators/metadata"
|
|
||||||
)
|
|
||||||
|
|
||||||
const Key = "grammar_review"
|
|
||||||
|
|
||||||
func New() (contracts.Validator, error) {
|
|
||||||
v, err := frameworkvalidators.NewLLMBackedValidator(Key, frameworkvalidators.LLMValidatorTypeGrammarReview, "")
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return validatormetadata.Wrap(v, validatormetadata.ExecutionClassLLMBacked), nil
|
|
||||||
}
|
|
||||||
@@ -7,14 +7,12 @@ import (
|
|||||||
"gitea.maximumdirect.net/eric/audita/internal/framework/contracts"
|
"gitea.maximumdirect.net/eric/audita/internal/framework/contracts"
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/confidence_threshold"
|
"gitea.maximumdirect.net/eric/audita/internal/validators/confidence_threshold"
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/editorial_review"
|
"gitea.maximumdirect.net/eric/audita/internal/validators/editorial_review"
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/grammar_review"
|
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/meaning_reversal_review"
|
"gitea.maximumdirect.net/eric/audita/internal/validators/meaning_reversal_review"
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/no_effect"
|
"gitea.maximumdirect.net/eric/audita/internal/validators/no_effect"
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/non_empty_corrected_text"
|
"gitea.maximumdirect.net/eric/audita/internal/validators/non_empty_corrected_text"
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/original_text_presence"
|
"gitea.maximumdirect.net/eric/audita/internal/validators/original_text_presence"
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/protected_terms"
|
"gitea.maximumdirect.net/eric/audita/internal/validators/protected_terms"
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/spoken_form_plausibility"
|
"gitea.maximumdirect.net/eric/audita/internal/validators/spoken_form_plausibility"
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/spoken_word_review"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -27,8 +25,6 @@ const (
|
|||||||
KeySpokenFormPlausibility = "spoken_form_plausibility"
|
KeySpokenFormPlausibility = "spoken_form_plausibility"
|
||||||
KeyMeaningReversalReview = "meaning_reversal_review"
|
KeyMeaningReversalReview = "meaning_reversal_review"
|
||||||
KeyEditorialReview = "editorial_review"
|
KeyEditorialReview = "editorial_review"
|
||||||
KeyGrammarReview = "grammar_review"
|
|
||||||
KeySpokenWordReview = "spoken_word_review"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type BuiltInValidatorDefinition struct {
|
type BuiltInValidatorDefinition struct {
|
||||||
@@ -51,8 +47,6 @@ func NewBuiltInRegistry() *Registry {
|
|||||||
{Key: KeySpokenFormPlausibility, LLMBacked: true, Build: spoken_form_plausibility.New},
|
{Key: KeySpokenFormPlausibility, LLMBacked: true, Build: spoken_form_plausibility.New},
|
||||||
{Key: KeyMeaningReversalReview, LLMBacked: true, Build: meaning_reversal_review.New},
|
{Key: KeyMeaningReversalReview, LLMBacked: true, Build: meaning_reversal_review.New},
|
||||||
{Key: KeyEditorialReview, LLMBacked: true, Build: editorial_review.New},
|
{Key: KeyEditorialReview, LLMBacked: true, Build: editorial_review.New},
|
||||||
{Key: KeyGrammarReview, LLMBacked: true, Build: grammar_review.New},
|
|
||||||
{Key: KeySpokenWordReview, LLMBacked: true, Build: spoken_word_review.New},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m := make(map[string]BuiltInValidatorDefinition, len(defs))
|
m := make(map[string]BuiltInValidatorDefinition, len(defs))
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import (
|
|||||||
"gitea.maximumdirect.net/eric/audita/internal/framework/proposals"
|
"gitea.maximumdirect.net/eric/audita/internal/framework/proposals"
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/confidence_threshold"
|
"gitea.maximumdirect.net/eric/audita/internal/validators/confidence_threshold"
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/editorial_review"
|
"gitea.maximumdirect.net/eric/audita/internal/validators/editorial_review"
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/grammar_review"
|
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/meaning_reversal_review"
|
"gitea.maximumdirect.net/eric/audita/internal/validators/meaning_reversal_review"
|
||||||
validatormetadata "gitea.maximumdirect.net/eric/audita/internal/validators/metadata"
|
validatormetadata "gitea.maximumdirect.net/eric/audita/internal/validators/metadata"
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/no_effect"
|
"gitea.maximumdirect.net/eric/audita/internal/validators/no_effect"
|
||||||
@@ -17,7 +16,6 @@ import (
|
|||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/original_text_presence"
|
"gitea.maximumdirect.net/eric/audita/internal/validators/original_text_presence"
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/protected_terms"
|
"gitea.maximumdirect.net/eric/audita/internal/validators/protected_terms"
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/spoken_form_plausibility"
|
"gitea.maximumdirect.net/eric/audita/internal/validators/spoken_form_plausibility"
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/validators/spoken_word_review"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestBuiltInRegistryRegistersAllKeys(t *testing.T) {
|
func TestBuiltInRegistryRegistersAllKeys(t *testing.T) {
|
||||||
@@ -31,8 +29,6 @@ func TestBuiltInRegistryRegistersAllKeys(t *testing.T) {
|
|||||||
KeySpokenFormPlausibility,
|
KeySpokenFormPlausibility,
|
||||||
KeyMeaningReversalReview,
|
KeyMeaningReversalReview,
|
||||||
KeyEditorialReview,
|
KeyEditorialReview,
|
||||||
KeyGrammarReview,
|
|
||||||
KeySpokenWordReview,
|
|
||||||
} {
|
} {
|
||||||
def, ok := r.Lookup(key)
|
def, ok := r.Lookup(key)
|
||||||
if !ok {
|
if !ok {
|
||||||
@@ -64,8 +60,6 @@ func TestBuiltInValidatorPackagesConstruct(t *testing.T) {
|
|||||||
{name: "spoken_form_plausibility", key: KeySpokenFormPlausibility, build: spoken_form_plausibility.New, wantClass: validatormetadata.ExecutionClassLLMBacked},
|
{name: "spoken_form_plausibility", key: KeySpokenFormPlausibility, build: spoken_form_plausibility.New, wantClass: validatormetadata.ExecutionClassLLMBacked},
|
||||||
{name: "meaning_reversal_review", key: KeyMeaningReversalReview, build: meaning_reversal_review.New, wantClass: validatormetadata.ExecutionClassLLMBacked},
|
{name: "meaning_reversal_review", key: KeyMeaningReversalReview, build: meaning_reversal_review.New, wantClass: validatormetadata.ExecutionClassLLMBacked},
|
||||||
{name: "editorial_review", key: KeyEditorialReview, build: editorial_review.New, wantClass: validatormetadata.ExecutionClassLLMBacked},
|
{name: "editorial_review", key: KeyEditorialReview, build: editorial_review.New, wantClass: validatormetadata.ExecutionClassLLMBacked},
|
||||||
{name: "grammar_review", key: KeyGrammarReview, build: grammar_review.New, wantClass: validatormetadata.ExecutionClassLLMBacked},
|
|
||||||
{name: "spoken_word_review", key: KeySpokenWordReview, build: spoken_word_review.New, wantClass: validatormetadata.ExecutionClassLLMBacked},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range cases {
|
for _, tc := range cases {
|
||||||
@@ -88,8 +82,6 @@ func TestRegistryBuildsClassifiedValidators(t *testing.T) {
|
|||||||
KeySpokenFormPlausibility: true,
|
KeySpokenFormPlausibility: true,
|
||||||
KeyMeaningReversalReview: true,
|
KeyMeaningReversalReview: true,
|
||||||
KeyEditorialReview: true,
|
KeyEditorialReview: true,
|
||||||
KeyGrammarReview: true,
|
|
||||||
KeySpokenWordReview: true,
|
|
||||||
}
|
}
|
||||||
for _, key := range r.RegisteredKeys() {
|
for _, key := range r.RegisteredKeys() {
|
||||||
v, err := r.MustBuild(key)
|
v, err := r.MustBuild(key)
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
package spoken_word_review
|
|
||||||
|
|
||||||
import (
|
|
||||||
"gitea.maximumdirect.net/eric/audita/internal/framework/contracts"
|
|
||||||
frameworkvalidators "gitea.maximumdirect.net/eric/audita/internal/framework/validators"
|
|
||||||
validatormetadata "gitea.maximumdirect.net/eric/audita/internal/validators/metadata"
|
|
||||||
)
|
|
||||||
|
|
||||||
const Key = "spoken_word_review"
|
|
||||||
|
|
||||||
func New() (contracts.Validator, error) {
|
|
||||||
v, err := frameworkvalidators.NewLLMBackedValidator(Key, frameworkvalidators.LLMValidatorTypeSpokenWordReview, "")
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return validatormetadata.Wrap(v, validatormetadata.ExecutionClassLLMBacked), nil
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user