Volver al índice

src/main/java/ar/com/companeros/decision/DecisionResponse.java

package ar.com.companeros.decision;

import java.math.BigDecimal;
import java.util.UUID;

public record DecisionResponse(UUID requestId, UUID actorUUID, long sessionEpoch, long observationSeq,
        Status status, String model, ToolDecision decision, Usage usage, String reason, java.util.List<String> webSources) {
    public DecisionResponse { webSources = java.util.List.copyOf(webSources); }
    public DecisionResponse(UUID requestId, UUID actorUUID, long sessionEpoch, long observationSeq,
            Status status, String model, ToolDecision decision, Usage usage, String reason) {
        this(requestId, actorUUID, sessionEpoch, observationSeq, status, model, decision, usage, reason, java.util.List.of());
    }
    public enum Status {
        ACCEPTED, DISABLED, CLOSED, CANCELLED, STALE, THROTTLED, BUDGET_EXHAUSTED,
        STRATEGIC_DENIED, HTTP_ERROR, NETWORK_ERROR, INVALID_RESPONSE, REFUSED, INCOMPLETE
    }
    public record Usage(long inputTokens, long outputTokens, long reasoningTokens,
            long cachedTokens, long cacheWriteTokens, boolean estimatedBillable, BigDecimal usd) {
        public static Usage zero() { return new Usage(0, 0, 0, 0, 0, false, BigDecimal.ZERO); }
    }

    public boolean accepted() { return status == Status.ACCEPTED && decision != null; }
    public boolean validFor(UUID actor, long epoch, long observation) {
        return accepted() && actorUUID.equals(actor) && sessionEpoch == epoch && observationSeq == observation;
    }
}