| 1 | import type { OrchestrationV2Run, OrchestrationV2ThreadProjection } from "@t3tools/contracts"; |
| 2 | |
| 3 | export function isAutomaticCompletionRun( |
| 4 | projection: Pick<OrchestrationV2ThreadProjection, "runs" | "messages">, |
| 5 | run: OrchestrationV2Run, |
| 6 | ): boolean { |
| 7 | return projection.messages.some( |
| 8 | (message) => message.id === run.userMessageId && message.delegatedCompletion !== undefined, |
| 9 | ); |
| 10 | } |
| 11 | |
| 12 | export function queuedRunsInDeliveryOrder( |
| 13 | projection: Pick<OrchestrationV2ThreadProjection, "runs" | "messages">, |
| 14 | ): ReadonlyArray<OrchestrationV2Run> { |
| 15 | const automaticCompletionMessageIds = new Set( |
| 16 | projection.messages |
| 17 | .filter((message) => message.delegatedCompletion !== undefined) |
| 18 | .map((message) => message.id), |
| 19 | ); |
| 20 | return projection.runs |
| 21 | .filter((run) => run.status === "queued") |
| 22 | .toSorted((left, right) => { |
| 23 | const deliveryPriority = |
| 24 | Number(automaticCompletionMessageIds.has(right.userMessageId)) - |
| 25 | Number(automaticCompletionMessageIds.has(left.userMessageId)); |
| 26 | return ( |
| 27 | deliveryPriority || |
| 28 | (left.queuePosition ?? left.ordinal) - (right.queuePosition ?? right.ordinal) || |
| 29 | left.ordinal - right.ordinal |
| 30 | ); |
| 31 | }); |
| 32 | } |