(pathname: string)
| 591 | } |
| 592 | |
| 593 | function waitStreamingRequest(pathname: string) { |
| 594 | const request = deferred<Capture>() |
| 595 | const requestAborted = deferred<void>() |
| 596 | const responseCanceled = deferred<void>() |
| 597 | const encoder = new TextEncoder() |
| 598 | |
| 599 | state.queue.push({ |
| 600 | path: pathname, |
| 601 | resolve: request.resolve, |
| 602 | response(req: Request) { |
| 603 | req.signal.addEventListener("abort", () => requestAborted.resolve(), { once: true }) |
| 604 | |
| 605 | return new Response( |
| 606 | new ReadableStream<Uint8Array>({ |
| 607 | start(controller) { |
| 608 | controller.enqueue( |
| 609 | encoder.encode( |
| 610 | [ |
| 611 | `data: ${JSON.stringify({ |
| 612 | id: "chatcmpl-abort", |
| 613 | object: "chat.completion.chunk", |
| 614 | choices: [{ delta: { role: "assistant" } }], |
| 615 | })}`, |
| 616 | ].join("\n\n") + "\n\n", |
| 617 | ), |
| 618 | ) |
| 619 | }, |
| 620 | cancel() { |
| 621 | responseCanceled.resolve() |
| 622 | }, |
| 623 | }), |
| 624 | { |
| 625 | status: 200, |
| 626 | headers: { "Content-Type": "text/event-stream" }, |
| 627 | }, |
| 628 | ) |
| 629 | }, |
| 630 | }) |
| 631 | |
| 632 | return { |
| 633 | request: request.promise, |
| 634 | requestAborted: requestAborted.promise, |
| 635 | responseCanceled: responseCanceled.promise, |
| 636 | } |
| 637 | } |
| 638 | |
| 639 | beforeAll(() => { |
| 640 | state.server = Bun.serve({ |
no test coverage detected