feat(antigravity): map image size to aspect-ratio model suffix
Resolve body.size through sizeToAspectRatio and append the ratio as a -WxH suffix so the executor's parseImageConfig picks it up. Also fall back to gemini-3.1-flash-image when a non-image model reaches the image handler.
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
// Antigravity image adapter - delegates to the executor for correct request
|
// Antigravity image adapter - delegates to the executor for correct request
|
||||||
// envelope (project, model, requestType, sessionId) and auth headers.
|
// envelope (project, model, requestType, sessionId) and auth headers.
|
||||||
import { nowSec } from "./_base.js";
|
import { nowSec, sizeToAspectRatio } from "./_base.js";
|
||||||
import { getExecutor } from "../../executors/index.js";
|
import { getExecutor } from "../../executors/index.js";
|
||||||
|
|
||||||
// Convert image input (data URI or raw base64) to Gemini inlineData part
|
// Convert image input (data URI or raw base64) to Gemini inlineData part
|
||||||
@@ -31,6 +31,19 @@ export default {
|
|||||||
const executor = getExecutor("antigravity");
|
const executor = getExecutor("antigravity");
|
||||||
if (!executor) throw new Error("Antigravity executor not found");
|
if (!executor) throw new Error("Antigravity executor not found");
|
||||||
|
|
||||||
|
// Ensure we use an image model for image generation
|
||||||
|
const isImageModel = (m) => /image|imagen|image-generation/i.test(m || "");
|
||||||
|
let targetModel = isImageModel(model) ? model : "gemini-3.1-flash-image";
|
||||||
|
|
||||||
|
// If body.size is provided, resolve aspect ratio and append to model
|
||||||
|
if (body.size && typeof body.size === "string") {
|
||||||
|
const ratio = sizeToAspectRatio(body.size);
|
||||||
|
const suffix = ratio.replace(":", "x");
|
||||||
|
if (!targetModel.includes(suffix)) {
|
||||||
|
targetModel = `${targetModel}-${suffix}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Build parts: text prompt + optional input image for editing
|
// Build parts: text prompt + optional input image for editing
|
||||||
const parts = [{ text: body.prompt }];
|
const parts = [{ text: body.prompt }];
|
||||||
const imageInput = body.image || (Array.isArray(body.images) && body.images[0]);
|
const imageInput = body.image || (Array.isArray(body.images) && body.images[0]);
|
||||||
@@ -44,7 +57,7 @@ export default {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const result = await executor.execute({
|
const result = await executor.execute({
|
||||||
model,
|
model: targetModel,
|
||||||
body: chatBody,
|
body: chatBody,
|
||||||
stream: false,
|
stream: false,
|
||||||
credentials,
|
credentials,
|
||||||
|
|||||||
Reference in New Issue
Block a user