Open1

ai-sdk めも

shuntakashuntaka
export const exec = async (question: string) => {
  try {
    const response = createUIMessageStreamResponse({
      status: 200,
      stream: createUIMessageStream({
        async execute({ writer }) {
          // 進捗メッセージのバリエーション
          const progressMessages = [
            "まだ考えてるよ...",
            "もうちょっと待って...",
            "分析中です...",
            "計画を練っています...",
            "最適な方法を検討中...",
          ];
          let messageIndex = 0;

          // 一定間隔で進捗メッセージを送信
          const progressInterval = setInterval(() => {
            writer.write({
              type: "text-delta",
              id: "plan",
              delta:
                progressMessages[messageIndex % progressMessages.length] + "\n",
            });
            messageIndex++;
          }, 1000); // 1秒ごとに送信

          try {
            // 計画を作成
            const plan = await createPlan(question);

            // インターバルをクリア
            clearInterval(progressInterval);

            // 計画完了メッセージ
            writer.write({
              type: "text-delta",
              id: "plan",
              delta: "\n計画が完成しました!実行中...\n",
            });

            // 最終回答を生成
            const response = await createAnswer(question, plan);
            writer.merge(response.toUIMessageStream());
          } catch (error) {
            // エラー時もインターバルをクリア
            clearInterval(progressInterval);
            throw error;
          }
        },
      }),
    });

    return response;
  } catch (error) {
    console.error("エラーが発生しました:", error);
    throw error;
  }
};