(controller)
| 546 | // Set up Server-Sent Events response |
| 547 | const stream = new ReadableStream({ |
| 548 | start(controller) { |
| 549 | // Helper function to send SSE events |
| 550 | const sendEvent = (eventType: string, data: any) => { |
| 551 | controller.enqueue( |
| 552 | `event: ${eventType}\ndata: ${JSON.stringify(data)}\n\n` |
| 553 | ); |
| 554 | }; |
| 555 | |
| 556 | // Self-invoking async function to handle the report generation process |
| 557 | (async () => { |
| 558 | try { |
| 559 | sendEvent("status", { message: "Checking for cached report..." }); |
| 560 | |
| 561 | // If force_regen is true, delete any existing report |
| 562 | if (forceRegen) { |
| 563 | try { |
| 564 | await redisClient.del(`report:${reportKey}`); |
| 565 | sendEvent("status", { |
| 566 | message: "Forced regeneration, cleared cache.", |
| 567 | }); |
| 568 | } catch (err) { |
| 569 | console.error("Error deleting cached report:", err); |
| 570 | sendEvent("generate_error", { |
| 571 | message: "服务器出现错误,请稍后再试。", |
| 572 | }); |
| 573 | } |
| 574 | } |
| 575 | |
| 576 | // Check if we already have a report for this data |
| 577 | const existingReport = await getReport(reportKey); |
| 578 | if (existingReport && !forceRegen) { |
| 579 | console.log("Returning cached report"); |
| 580 | sendEvent("complete", { message: existingReport }); |
| 581 | controller.close(); |
| 582 | return; |
| 583 | } |
| 584 | |
| 585 | // Check if a report is already being generated for this data |
| 586 | if (await isReportGenerationPending(reportKey)) { |
| 587 | sendEvent("generate_error", { |
| 588 | message: "报告正在生成中,请等待上次生成结束后再试。", |
| 589 | }); |
| 590 | controller.close(); |
| 591 | return; |
| 592 | } |
| 593 | |
| 594 | // Mark this report as pending |
| 595 | await setReportGenerationPending(reportKey); |
| 596 | |
| 597 | // Get the prompt from presets |
| 598 | const initialPrompt = presets[presetKey].prompt; |
| 599 | if (!initialPrompt) { |
| 600 | await clearReportGenerationPending(reportKey); |
| 601 | sendEvent("generate_error", { |
| 602 | message: `Preset '${presetKey}' not found.`, |
| 603 | }); |
| 604 | controller.close(); |
| 605 | return; |
nothing calls this directly
no test coverage detected