ai-chatbot/lib/agents/pending-generation-guard.ts

52 lines
1.3 KiB
TypeScript

export const AGENT_PENDING_SERVER_ACCEPTANCE_TIMEOUT_MS = 60 * 1000;
interface PendingGenerationAcceptanceState {
requestMessageId?: string | null;
serverUserTurnCountAtStart?: number;
userTurnCountAtStart: number;
}
interface ServerMessageIdentity {
id: string;
role: string;
}
export function isAgentGenerationRequestAccepted(params: {
pending: PendingGenerationAcceptanceState;
serverMessages: ServerMessageIdentity[];
}) {
const requestMessageId = String(
params.pending.requestMessageId || ""
).trim();
if (
requestMessageId &&
params.serverMessages.some(
(message) =>
message.role === "user" && message.id === requestMessageId
)
) {
return true;
}
const serverUserMessageCount = params.serverMessages.filter(
(message) => message.role === "user"
).length;
const baseline =
params.pending.serverUserTurnCountAtStart ??
params.pending.userTurnCountAtStart;
return serverUserMessageCount > baseline;
}
export function getAgentGenerationAcceptanceRemainingMs(params: {
startedAt: number;
now?: number;
timeoutMs?: number;
}) {
const now = params.now ?? Date.now();
const timeoutMs = Math.max(
0,
params.timeoutMs ?? AGENT_PENDING_SERVER_ACCEPTANCE_TIMEOUT_MS
);
return Math.max(0, timeoutMs - Math.max(0, now - params.startedAt));
}