Files
audita/internal/framework/proposal_generation/repair.go

32 lines
1.3 KiB
Go

package proposal_generation
import (
"encoding/json"
"gitea.maximumdirect.net/eric/audita/v3/internal/framework/outcomes"
"gitea.maximumdirect.net/eric/audita/v3/internal/framework/structuredoutput"
)
// RepairResponse is one model response for an original proposal reference.
type RepairResponse struct {
ProposalRef int `json:"proposal_ref"`
Action string `json:"action"`
Correction *StructuredCorrectionProposal `json:"correction"`
}
// DecodeRepairResponse checks correspondence after structural schema validation.
func DecodeRepairResponse(content []byte, expectedRef int) (RepairResponse, error) {
var response RepairResponse
if err := json.Unmarshal(content, &response); err != nil {
return RepairResponse{}, invalidRepairResponse(err)
}
if response.ProposalRef != expectedRef || (response.Action != "revise" || response.Correction == nil) && (response.Action != "withdraw" || response.Correction != nil) {
return RepairResponse{}, invalidRepairResponse(nil)
}
return response, nil
}
func invalidRepairResponse(cause error) error {
return &structuredoutput.Failure{Class: structuredoutput.FailureRecoverable, Reason: outcomes.ReasonInvalidOutput, Message: "correction repair response is unusable", Cause: cause}
}