32 lines
1.3 KiB
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}
|
|
}
|