3D間取りの生成エンジンを
ChatGPT へ切り替えた際、生成結果の保存処理
(apps/user/app/api/solid-floor-plans/[solidFloorPlanId]/generate/route.ts)で
instructions.kind を "chatgpt" にハードコードしている。
data: {
instructions: {
version: 1,
kind: "chatgpt", // ← 実際に使ったエンジンと無関係に固定
instructions: JSON.parse(JSON.stringify(instructions)),
},
...
}
一方で実際のエンジン選択は generate-image/index.ts 側にあり、
Gemini 実装も lib/gemini/ にコメントアウトで温存されている。
エンジンを Gemini に戻すと、保存される kind は "chatgpt" のままで、
中身は Gemini 形式(parts[].fileData 系)となりデシンクする。
stringifyInstructions が kind="chatgpt" 分岐に入り、Gemini 形式の中身を解釈できず空文字を返す。instructionsSchema のパースが失敗し得る(詳細画面の指示表示が空になる等)。
generateImage の戻り値に kind を含め、
route.ts はその kind を保存する(ハードコードを廃止)。
あわせて instructionsSchema を z.discriminatedUnion("kind", ...) 化すると型・エラーメッセージが安全になる。
低〜中。ChatGPT 固定の間は実害なし。エンジンを切り替える前に必ず対応すること。