mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 08:51:23 +00:00
fix(models): synthesize antigravity Gemini 3.1 pro high/low models (#22899)
* Models: add antigravity Gemini 3.1 forward-compat * models: propagate availability to Gemini 3.1 dot IDs * test(models): format Gemini 3.1 forward-compat test * test(models): type Gemini 3.1 forward-compat fixtures * models: add changelog note for antigravity gemini 3.1 forward-compat --------- Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
This commit is contained in:
72
src/agents/model-forward-compat.antigravity-gemini31.test.ts
Normal file
72
src/agents/model-forward-compat.antigravity-gemini31.test.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
import type { Api, Model } from "@mariozechner/pi-ai";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { resolveForwardCompatModel } from "./model-forward-compat.js";
|
||||
import type { ModelRegistry } from "./pi-model-discovery.js";
|
||||
|
||||
function makeRegistry(): ModelRegistry {
|
||||
const templates = new Map<string, Model<Api>>();
|
||||
templates.set("google-antigravity/gemini-3-pro-high", {
|
||||
id: "gemini-3-pro-high",
|
||||
name: "Gemini 3 Pro High",
|
||||
provider: "google-antigravity",
|
||||
api: "google-antigravity",
|
||||
input: ["text", "image"],
|
||||
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
||||
contextWindow: 200000,
|
||||
maxTokens: 64000,
|
||||
reasoning: true,
|
||||
} as Model<Api>);
|
||||
templates.set("google-antigravity/gemini-3-pro-low", {
|
||||
id: "gemini-3-pro-low",
|
||||
name: "Gemini 3 Pro Low",
|
||||
provider: "google-antigravity",
|
||||
api: "google-antigravity",
|
||||
input: ["text", "image"],
|
||||
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
||||
contextWindow: 200000,
|
||||
maxTokens: 64000,
|
||||
reasoning: true,
|
||||
} as Model<Api>);
|
||||
|
||||
const registry = {
|
||||
find: (provider: string, modelId: string) => templates.get(`${provider}/${modelId}`) ?? null,
|
||||
} as unknown as ModelRegistry;
|
||||
return registry;
|
||||
}
|
||||
|
||||
describe("resolveForwardCompatModel (google-antigravity Gemini 3.1)", () => {
|
||||
it("resolves gemini-3-1-pro-high from gemini-3-pro-high template", () => {
|
||||
const model = resolveForwardCompatModel(
|
||||
"google-antigravity",
|
||||
"gemini-3-1-pro-high",
|
||||
makeRegistry(),
|
||||
);
|
||||
expect(model?.provider).toBe("google-antigravity");
|
||||
expect(model?.id).toBe("gemini-3-1-pro-high");
|
||||
});
|
||||
|
||||
it("resolves gemini-3-1-pro-low from gemini-3-pro-low template", () => {
|
||||
const model = resolveForwardCompatModel(
|
||||
"google-antigravity",
|
||||
"gemini-3-1-pro-low",
|
||||
makeRegistry(),
|
||||
);
|
||||
expect(model?.provider).toBe("google-antigravity");
|
||||
expect(model?.id).toBe("gemini-3-1-pro-low");
|
||||
});
|
||||
|
||||
it("supports dot-notation model ids", () => {
|
||||
const high = resolveForwardCompatModel(
|
||||
"google-antigravity",
|
||||
"gemini-3.1-pro-high",
|
||||
makeRegistry(),
|
||||
);
|
||||
const low = resolveForwardCompatModel(
|
||||
"google-antigravity",
|
||||
"gemini-3.1-pro-low",
|
||||
makeRegistry(),
|
||||
);
|
||||
expect(high?.id).toBe("gemini-3.1-pro-high");
|
||||
expect(low?.id).toBe("gemini-3.1-pro-low");
|
||||
});
|
||||
});
|
||||
@@ -26,6 +26,12 @@ const ANTIGRAVITY_OPUS_THINKING_TEMPLATE_MODEL_IDS = [
|
||||
"claude-opus-4-5-thinking",
|
||||
"claude-opus-4.5-thinking",
|
||||
] as const;
|
||||
const ANTIGRAVITY_GEMINI_31_PRO_HIGH_MODEL_ID = "gemini-3-1-pro-high";
|
||||
const ANTIGRAVITY_GEMINI_31_PRO_DOT_HIGH_MODEL_ID = "gemini-3.1-pro-high";
|
||||
const ANTIGRAVITY_GEMINI_31_PRO_LOW_MODEL_ID = "gemini-3-1-pro-low";
|
||||
const ANTIGRAVITY_GEMINI_31_PRO_DOT_LOW_MODEL_ID = "gemini-3.1-pro-low";
|
||||
const ANTIGRAVITY_GEMINI_31_PRO_HIGH_TEMPLATE_MODEL_IDS = ["gemini-3-pro-high"] as const;
|
||||
const ANTIGRAVITY_GEMINI_31_PRO_LOW_TEMPLATE_MODEL_IDS = ["gemini-3-pro-low"] as const;
|
||||
|
||||
export const ANTIGRAVITY_OPUS_46_FORWARD_COMPAT_CANDIDATES = [
|
||||
{
|
||||
@@ -34,10 +40,25 @@ export const ANTIGRAVITY_OPUS_46_FORWARD_COMPAT_CANDIDATES = [
|
||||
"google-antigravity/claude-opus-4-5-thinking",
|
||||
"google-antigravity/claude-opus-4.5-thinking",
|
||||
],
|
||||
availabilityAliasIds: [] as const,
|
||||
},
|
||||
{
|
||||
id: ANTIGRAVITY_OPUS_46_MODEL_ID,
|
||||
templatePrefixes: ["google-antigravity/claude-opus-4-5", "google-antigravity/claude-opus-4.5"],
|
||||
availabilityAliasIds: [] as const,
|
||||
},
|
||||
] as const;
|
||||
|
||||
export const ANTIGRAVITY_GEMINI_31_FORWARD_COMPAT_CANDIDATES = [
|
||||
{
|
||||
id: ANTIGRAVITY_GEMINI_31_PRO_HIGH_MODEL_ID,
|
||||
templatePrefixes: ["google-antigravity/gemini-3-pro-high"],
|
||||
availabilityAliasIds: [ANTIGRAVITY_GEMINI_31_PRO_DOT_HIGH_MODEL_ID],
|
||||
},
|
||||
{
|
||||
id: ANTIGRAVITY_GEMINI_31_PRO_LOW_MODEL_ID,
|
||||
templatePrefixes: ["google-antigravity/gemini-3-pro-low"],
|
||||
availabilityAliasIds: [ANTIGRAVITY_GEMINI_31_PRO_DOT_LOW_MODEL_ID],
|
||||
},
|
||||
] as const;
|
||||
|
||||
@@ -278,6 +299,40 @@ function resolveAntigravityOpus46ForwardCompatModel(
|
||||
});
|
||||
}
|
||||
|
||||
function resolveAntigravityGemini31ForwardCompatModel(
|
||||
provider: string,
|
||||
modelId: string,
|
||||
modelRegistry: ModelRegistry,
|
||||
): Model<Api> | undefined {
|
||||
const normalizedProvider = normalizeProviderId(provider);
|
||||
if (normalizedProvider !== "google-antigravity") {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const trimmedModelId = modelId.trim();
|
||||
const lower = trimmedModelId.toLowerCase();
|
||||
const isGemini31High =
|
||||
lower === ANTIGRAVITY_GEMINI_31_PRO_HIGH_MODEL_ID ||
|
||||
lower === ANTIGRAVITY_GEMINI_31_PRO_DOT_HIGH_MODEL_ID;
|
||||
const isGemini31Low =
|
||||
lower === ANTIGRAVITY_GEMINI_31_PRO_LOW_MODEL_ID ||
|
||||
lower === ANTIGRAVITY_GEMINI_31_PRO_DOT_LOW_MODEL_ID;
|
||||
if (!isGemini31High && !isGemini31Low) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const templateIds = isGemini31High
|
||||
? [...ANTIGRAVITY_GEMINI_31_PRO_HIGH_TEMPLATE_MODEL_IDS]
|
||||
: [...ANTIGRAVITY_GEMINI_31_PRO_LOW_TEMPLATE_MODEL_IDS];
|
||||
|
||||
return cloneFirstTemplateModel({
|
||||
normalizedProvider,
|
||||
trimmedModelId,
|
||||
templateIds,
|
||||
modelRegistry,
|
||||
});
|
||||
}
|
||||
|
||||
export function resolveForwardCompatModel(
|
||||
provider: string,
|
||||
modelId: string,
|
||||
@@ -288,6 +343,7 @@ export function resolveForwardCompatModel(
|
||||
resolveAnthropicOpus46ForwardCompatModel(provider, modelId, modelRegistry) ??
|
||||
resolveAnthropicSonnet46ForwardCompatModel(provider, modelId, modelRegistry) ??
|
||||
resolveZaiGlm5ForwardCompatModel(provider, modelId, modelRegistry) ??
|
||||
resolveAntigravityOpus46ForwardCompatModel(provider, modelId, modelRegistry)
|
||||
resolveAntigravityOpus46ForwardCompatModel(provider, modelId, modelRegistry) ??
|
||||
resolveAntigravityGemini31ForwardCompatModel(provider, modelId, modelRegistry)
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user