@@ -2,8 +2,9 @@ import { createFileRoute } from '@tanstack/react-router'
22import { generateImage , createImageOptions } from '@tanstack/ai'
33import { geminiImage } from '@tanstack/ai-gemini'
44import { openaiImage } from '@tanstack/ai-openai'
5+ import { openRouterImage } from '@tanstack/ai-openrouter'
56
6- type Provider = 'openai' | 'gemini'
7+ type Provider = 'openai' | 'gemini' | 'openrouter'
78
89export const Route = createFileRoute ( '/api/image' ) ( {
910 server : {
@@ -13,21 +14,28 @@ export const Route = createFileRoute('/api/image')({
1314 const { prompt, numberOfImages = 1 , size = '1024x1024' } = body
1415 const data = body . data || { }
1516 const provider : Provider = data . provider || body . provider || 'openai'
16- const model : string = data . model || body . model || 'gpt-image-1'
17+
18+ const defaultModels : Record < Provider , string > = {
19+ openai : 'gpt-image-1' ,
20+ gemini : 'gemini-2.0-flash-preview-image-generation' ,
21+ openrouter : 'google/gemini-3.1-flash-image-preview' ,
22+ }
23+ const model : string =
24+ data . model || body . model || defaultModels [ provider ]
1725
1826 try {
19- // Pre-define typed adapter configurations with full type inference
20- // Model is passed to the adapter factory function for type-safe autocomplete
2127 const adapterConfig = {
2228 gemini : ( ) =>
2329 createImageOptions ( {
24- adapter : geminiImage (
25- ( model || 'gemini-2.0-flash-preview-image-generation' ) as any ,
26- ) ,
30+ adapter : geminiImage ( model as any ) ,
2731 } ) ,
2832 openai : ( ) =>
2933 createImageOptions ( {
30- adapter : openaiImage ( ( model || 'gpt-image-1' ) as any ) ,
34+ adapter : openaiImage ( model as any ) ,
35+ } ) ,
36+ openrouter : ( ) =>
37+ createImageOptions ( {
38+ adapter : openRouterImage ( model as any ) ,
3139 } ) ,
3240 }
3341
@@ -46,8 +54,7 @@ export const Route = createFileRoute('/api/image')({
4654 } )
4755
4856 console . log (
49- '>> image generation result:' ,
50- JSON . stringify ( result , null , 2 ) ,
57+ `>> image generation complete: ${ result . images . length } image(s)` ,
5158 )
5259
5360 return new Response (
0 commit comments