fix(Gemini Node): Allow Nano Banana model to be selected (#19080)

Co-authored-by: Jonathan Bennetts <jonathan.bennetts@gmail.com>
This commit is contained in:
Jake Ranallo
2025-09-02 12:02:30 +02:00
committed by GitHub
parent a10a14bc79
commit 238fe84540
3 changed files with 22 additions and 3 deletions

View File

@@ -103,7 +103,7 @@ export async function execute(this: IExecuteFunctions, i: number): Promise<INode
});
return await Promise.all(promises);
} else if (model.includes('imagen')) {
} else if (model.includes('imagen') || model.includes('flash-image')) {
// Imagen models use a different endpoint and request/response structure
const sampleCount = this.getNodeParameter('options.sampleCount', i, 1) as number;
const body = {

View File

@@ -38,6 +38,9 @@ const mockResponse = {
{
name: 'models/gemini-2.5-flash-preview-native-audio-dialog',
},
{
name: 'models/gemini-2.5-flash-image',
},
],
};
@@ -126,6 +129,11 @@ describe('GoogleGemini -> listSearch', () => {
name: 'models/imagen-3.0-generate-002',
value: 'models/imagen-3.0-generate-002',
},
{
// eslint-disable-next-line n8n-nodes-base/node-param-display-name-miscased
name: 'models/gemini-2.5-flash-image (Nano Banana)',
value: 'models/gemini-2.5-flash-image',
},
],
});
});

View File

@@ -64,11 +64,22 @@ export async function imageGenerationModelSearch(
this: ILoadOptionsFunctions,
filter?: string,
): Promise<INodeListSearchResult> {
return await baseModelSearch.call(
const results = await baseModelSearch.call(
this,
(model) => model.includes('imagen') || model.includes('image-generation'),
(model) =>
model.includes('imagen') ||
model.includes('image-generation') ||
model.includes('flash-image'),
filter,
);
return {
results: results.results.map((r) =>
r.name.includes('gemini-2.5-flash-image')
? { name: `${r.name} (Nano Banana)`, value: r.value }
: r,
),
};
}
export async function videoGenerationModelSearch(