Resolve structured output repair configuration

This commit is contained in:
2026-08-25 19:55:39 +00:00
parent 9a92212632
commit 63c397d86a
12 changed files with 289 additions and 29 deletions

View File

@@ -117,6 +117,38 @@ func preparedAttemptDebugPipeline(t *testing.T) *PreparedPipeline {
return prepared
}
func TestRunnerForwardsDetachedStructuredOutputRepairAttempts(t *testing.T) {
prepared := preparedAttemptDebugPipeline(t)
lane := &prepared.Steps[0].lanes[0]
producerAttempts := 2
validatorAttempts := 0
lane.resolved.Extract.StructuredOutputRepairAttempts = &producerAttempts
if len(lane.extractValidators.validators) == 0 {
t.Fatal("extract validators are empty")
}
lane.extractValidators.validators[0].resolved.Binding.StructuredOutputRepairAttempts = &validatorAttempts
var observedProducer, observedValidator *int
installExtractOperation(prepared, 0, func(_ context.Context, request contracts.TypedExtractionRequest) (erasedTypedResult, error) {
observedProducer = request.StructuredOutputRepairAttempts
return erasedTypedResult{Value: codecNotes{Items: []string{"extract"}}}, nil
})
lane.extractValidators.validators[0].typedValidate = func(_ context.Context, _ any, target typedValidationTarget) (contracts.ValidationResult, error) {
observedValidator = target.structuredOutputRepairAttempts
return contracts.ValidationResult{Approved: true}, nil
}
if _, err := New().Run(context.Background(), RunInput{Prepared: prepared, RawInput: []byte("input")}); err != nil {
t.Fatalf("Run() error = %v, want nil", err)
}
if observedProducer == nil || *observedProducer != producerAttempts || observedProducer == lane.resolved.Extract.StructuredOutputRepairAttempts {
t.Fatalf("producer repair attempts = %v, want detached value %d", observedProducer, producerAttempts)
}
if observedValidator == nil || *observedValidator != validatorAttempts || observedValidator == lane.extractValidators.validators[0].resolved.Binding.StructuredOutputRepairAttempts {
t.Fatalf("validator repair attempts = %v, want detached value %d", observedValidator, validatorAttempts)
}
}
func callAttemptDebugLLM(ctx context.Context, client contracts.StructuredLLMClient, name string) error {
_, err := client.CompleteStructured(ctx, contracts.StructuredCompletionRequest{StageName: "unscoped-" + name, PromptID: name, ProfileID: "test"}, nil)
return err