feat(harness): add information gain stop and audit
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
package com.superbiz.agent.harness.progress;
|
||||
|
||||
import com.superbiz.agent.harness.contract.EvidenceStatus;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class DiagnosisProgressTrackerTest {
|
||||
|
||||
@Test
|
||||
void gainedResetsConsecutiveNoGainAndConsumesPendingCallOnce() {
|
||||
DiagnosisProgressTracker tracker = new DiagnosisProgressTracker(2);
|
||||
tracker.recordDuplicateScope();
|
||||
tracker.recordCompleted(call("call-1", "scope-1"), EvidenceStatus.EVIDENCE_FOUND);
|
||||
|
||||
tracker.applyPreviousObservation(new PreviousObservation("call-1", InformationGain.GAINED));
|
||||
|
||||
DiagnosisProgressSnapshotState state = tracker.snapshot();
|
||||
assertEquals(0, state.consecutiveNoGain());
|
||||
assertEquals(DiagnosisCollectionState.COLLECTING, state.collectionState());
|
||||
assertThrows(IllegalArgumentException.class, () -> tracker.applyPreviousObservation(
|
||||
new PreviousObservation("call-1", InformationGain.NO_GAIN)));
|
||||
}
|
||||
|
||||
@Test
|
||||
void rejectsMissingOrOutOfOrderEvaluation() {
|
||||
DiagnosisProgressTracker tracker = new DiagnosisProgressTracker(2);
|
||||
tracker.recordCompleted(call("call-1", "scope-1"), EvidenceStatus.EVIDENCE_FOUND);
|
||||
|
||||
assertThrows(IllegalArgumentException.class, () -> tracker.applyPreviousObservation(null));
|
||||
assertThrows(IllegalArgumentException.class, () -> tracker.applyPreviousObservation(
|
||||
new PreviousObservation("call-other", InformationGain.GAINED)));
|
||||
assertEquals("call-1", tracker.snapshot().pendingToolCallId());
|
||||
}
|
||||
|
||||
@Test
|
||||
void deterministicNoEvidenceSaturatesAndStopInstructionIsClaimedOnce() {
|
||||
DiagnosisProgressTracker tracker = new DiagnosisProgressTracker(2);
|
||||
tracker.recordCompleted(call("call-1", "scope-1"), EvidenceStatus.NO_EVIDENCE);
|
||||
tracker.recordCompleted(call("call-2", "scope-2"), EvidenceStatus.NO_EVIDENCE);
|
||||
|
||||
DiagnosisProgressSnapshotState state = tracker.snapshot();
|
||||
assertEquals(DiagnosisCollectionState.SATURATED, state.collectionState());
|
||||
assertEquals(DiagnosisStopReason.INFORMATION_SATURATED, state.stopReason());
|
||||
assertTrue(tracker.claimStopInstruction());
|
||||
assertFalse(tracker.claimStopInstruction());
|
||||
}
|
||||
|
||||
@Test
|
||||
void onlySuccessfulCompletedScopesParticipateInDuplicateDetection() {
|
||||
DiagnosisProgressTracker tracker = new DiagnosisProgressTracker(3);
|
||||
assertFalse(tracker.isDuplicate("lookup_knowledge", "scope-1"));
|
||||
|
||||
tracker.recordCompleted(call("call-1", "scope-1"), EvidenceStatus.EVIDENCE_FOUND);
|
||||
|
||||
assertTrue(tracker.isDuplicate("lookup_knowledge", "scope-1"));
|
||||
assertFalse(tracker.isDuplicate("query_logs", "scope-1"));
|
||||
assertFalse(tracker.isDuplicate("lookup_knowledge", "scope-2"));
|
||||
}
|
||||
|
||||
private CompletedToolCall call(String id, String scope) {
|
||||
return new CompletedToolCall(id, "lookup_knowledge", scope);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user