Ctrl K
ComunidadGuías…

internal/learning/reviewer_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package learning

import (
	"context"
	"testing"

	"github.com/yeomyeonggeori/blueprotocol/model"
)

type syntheticReviewerModel struct {
	responses []string
	calls     int
}

func (model *syntheticReviewerModel) GenerateResponse(context.Context, string) (string, error) {
	return "", nil
}
func (reviewModel *syntheticReviewerModel) GenerateStructuredResponse(context.Context, model.StructuredResponseRequest) (model.StructuredResponse, error) {
	response := reviewModel.responses[reviewModel.calls]
	reviewModel.calls++
	return model.StructuredResponse{Content: response}, nil
}

func TestReviewerKeepsWithoutMutationProposal(t *testing.T) {
	model := &syntheticReviewerModel{responses: []string{`{"action":"keep","skillID":"","expectedVersion":0,"replaceID":"","replaceVersion":0,"description":"","instruction":"","soulDocument":"","evidenceIDs":[],"reason":"no durable improvement"}`}}
	decision, traces, errorValue := (Reviewer{Model: model}).Review(context.Background(), ReviewInput{Experience: []Experience{{TaskID: "task-1", Audience: "company"}}, Soul: []byte(`{"schemaVersion":1}`)})
	if errorValue != nil || decision.Action != "keep" || len(traces) != 1 || model.calls != 1 {
		t.Fatalf("unexpected keep review: %+v %v %d %d", decision, errorValue, len(traces), model.calls)
	}
}

func TestReviewerRejectsUnsupportedEvidenceProposal(t *testing.T) {
	model := &syntheticReviewerModel{responses: []string{`{"action":"create","skillID":"new","expectedVersion":0,"replaceID":"","replaceVersion":0,"description":"procedure","instruction":"---\nname: procedure\n---\nsteps","soulDocument":"","evidenceIDs":["invented"],"reason":"supported"}`}}
	_, _, errorValue := (Reviewer{Model: model}).Review(context.Background(), ReviewInput{Experience: []Experience{{TaskID: "task-1", Audience: "company"}}, Soul: []byte(`{"schemaVersion":1}`)})
	if errorValue == nil {
		t.Fatal("expected invented evidence to be rejected")
	}
}

func TestReviewerSecondAssessmentRejectsProposal(t *testing.T) {
	model := &syntheticReviewerModel{responses: []string{
		`{"action":"soul","skillID":"","expectedVersion":0,"replaceID":"","replaceVersion":0,"description":"","instruction":"","soulDocument":"{\"schemaVersion\":1}","evidenceIDs":["task-1"],"reason":"observed pattern"}`,
		`{"supported":false,"reason":"isolated evidence"}`,
	}}
	decision, traces, errorValue := (Reviewer{Model: model}).Review(context.Background(), ReviewInput{Experience: []Experience{{TaskID: "task-1", Audience: "company"}}, Soul: []byte(`{"schemaVersion":1}`)})
	if errorValue != nil || decision.Action != "keep" || len(traces) != 2 || model.calls != 2 {
		t.Fatalf("unexpected assessment result: %+v %v", decision, errorValue)
	}
}