52 lines
1.3 KiB
TypeScript
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));
|
|
}
|