mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-18 21:22:28 +03:00
* feat(oauth): add gemini-3.7-flash models with reasoning tiers for antigravity Support gemini-3.7-flash and its thinking tiers (low/medium/high) for antigravity and agy providers. - Define public models, pricing, modelSpecs, and CLI tool definitions - Map tiers to live upstream id gemini-3.7-flash-tiered - Configure defaultThinkingBudget (low: 1024, medium: 8192, high: 32768) - Allow executor fallback on upstream 404 and 5xx errors - Add unit tests in antigravity-model-aliases.test.ts * fix(oauth): expose gemini-3.7-flash as one callable antigravity/agy model Upstream (fetchAvailableModels on daily-cloudcode-pa) only accepts the single upstream id gemini-3.7-flash-tiered; the high/medium/low suffixed tier ids 404. Registering all four as distinct public model ids violates the base #3696 uniqueness invariant (no two ANTIGRAVITY_PUBLIC_MODELS entries may resolve to the same upstream id). Collapse to the single live gemini-3.7-flash public model (aliased to gemini-3.7-flash-tiered) and drop the tiered specs, pricing, free-catalog and CLI entries accordingly, keeping the leading public model order (Gemini 3.6 tiers first) intact. Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com> --------- Co-authored-by: adevwithpurpose <adevwithpurpose@users.noreply.github.com> Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com> Co-authored-by: Chewji9875 <Chewji9875@users.noreply.github.com> Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
183 lines
5.1 KiB
TypeScript
183 lines
5.1 KiB
TypeScript
// Antigravity CLI (`agy`) model catalog.
|
|
//
|
|
// These models are pinned from the live `:fetchAvailableModels` endpoint
|
|
// (https://daily-cloudcode-pa.googleapis.com/v1internal:fetchAvailableModels) using a
|
|
// real `agy` consumer-OAuth token. The public catalog exposes the upstream Gemini 3.6
|
|
// and 3.5 Flash ids verbatim; the shared Antigravity executor dispatches them unchanged.
|
|
//
|
|
// The `agy` provider reuses the `antigravity` executor/translator (identical backend),
|
|
// but keeps its own catalog so the CLI and IDE model surfaces can evolve independently.
|
|
// Both currently expose the same callable Claude/Gemini/GPT set. Tab-completion models
|
|
// (`tab_flash_lite_preview`, `tab_jump_flash_lite_preview`) are intentionally excluded —
|
|
// they are not chat-callable.
|
|
|
|
export const AGY_PUBLIC_MODELS = Object.freeze([
|
|
// Gemini 3.6 Flash tiers. The live endpoint selects High by default and advertises
|
|
// all three ids to both the IDE 2.1.1 and CLI 1.1.x clients.
|
|
{
|
|
id: "gemini-3.6-flash-high",
|
|
name: "Gemini 3.6 Flash (High)",
|
|
contextLength: 1048576,
|
|
maxOutputTokens: 65536,
|
|
supportsReasoning: true,
|
|
supportsVision: true,
|
|
toolCalling: true,
|
|
},
|
|
{
|
|
id: "gemini-3.6-flash-medium",
|
|
name: "Gemini 3.6 Flash (Medium)",
|
|
contextLength: 1048576,
|
|
maxOutputTokens: 65536,
|
|
supportsReasoning: true,
|
|
supportsVision: true,
|
|
toolCalling: true,
|
|
},
|
|
{
|
|
id: "gemini-3.6-flash-low",
|
|
name: "Gemini 3.6 Flash (Low)",
|
|
contextLength: 1048576,
|
|
maxOutputTokens: 65536,
|
|
supportsReasoning: true,
|
|
supportsVision: true,
|
|
toolCalling: true,
|
|
},
|
|
// Claude (Antigravity backend).
|
|
{
|
|
id: "claude-opus-4-6-thinking",
|
|
name: "Claude Opus 4.6 (Thinking)",
|
|
contextLength: 1048576,
|
|
maxOutputTokens: 65536,
|
|
supportsReasoning: true,
|
|
supportsVision: true,
|
|
toolCalling: true,
|
|
},
|
|
{
|
|
id: "claude-sonnet-4-6",
|
|
name: "Claude Sonnet 4.6 (Thinking)",
|
|
contextLength: 1048576,
|
|
maxOutputTokens: 65536,
|
|
supportsReasoning: true,
|
|
supportsVision: true,
|
|
toolCalling: true,
|
|
},
|
|
// Gemini 3.1 Pro
|
|
{
|
|
id: "gemini-pro-agent",
|
|
name: "Gemini 3.1 Pro (High)",
|
|
contextLength: 1048576,
|
|
maxOutputTokens: 65535,
|
|
supportsReasoning: true,
|
|
supportsVision: true,
|
|
toolCalling: true,
|
|
},
|
|
{
|
|
id: "gemini-3.1-pro-low",
|
|
name: "Gemini 3.1 Pro (Low)",
|
|
contextLength: 1048576,
|
|
maxOutputTokens: 65535,
|
|
supportsReasoning: true,
|
|
supportsVision: true,
|
|
toolCalling: true,
|
|
},
|
|
{
|
|
id: "gemini-3-flash-agent",
|
|
name: "Gemini 3.5 Flash (High)",
|
|
contextLength: 1048576,
|
|
maxOutputTokens: 65536,
|
|
supportsReasoning: true,
|
|
supportsVision: true,
|
|
toolCalling: true,
|
|
},
|
|
{
|
|
id: "gemini-3.5-flash-low",
|
|
name: "Gemini 3.5 Flash (Medium)",
|
|
contextLength: 1048576,
|
|
maxOutputTokens: 65536,
|
|
supportsReasoning: true,
|
|
supportsVision: true,
|
|
toolCalling: true,
|
|
},
|
|
{
|
|
id: "gemini-3.5-flash-extra-low",
|
|
name: "Gemini 3.5 Flash (Low)",
|
|
contextLength: 1048576,
|
|
maxOutputTokens: 65536,
|
|
supportsReasoning: true,
|
|
supportsVision: true,
|
|
toolCalling: true,
|
|
},
|
|
// Gemini 3.7 Flash: single callable public model (upstream exposes only
|
|
// gemini-3.7-flash-tiered; suffixed tier ids 404). One entry so it does not
|
|
// collide under the #3696 public-id uniqueness invariant.
|
|
{
|
|
id: "gemini-3.7-flash",
|
|
name: "Gemini 3.7 Flash",
|
|
contextLength: 1048576,
|
|
maxOutputTokens: 65536,
|
|
supportsReasoning: true,
|
|
supportsVision: true,
|
|
toolCalling: true,
|
|
},
|
|
{
|
|
id: "gemini-3.1-flash-lite",
|
|
name: "Gemini 3.1 Flash Lite",
|
|
contextLength: 1048576,
|
|
maxOutputTokens: 65535,
|
|
toolCalling: true,
|
|
},
|
|
// Gemini 2.5
|
|
{
|
|
id: "gemini-2.5-flash-thinking",
|
|
name: "Gemini 2.5 Flash Thinking",
|
|
contextLength: 1048576,
|
|
maxOutputTokens: 65535,
|
|
supportsReasoning: true,
|
|
toolCalling: true,
|
|
},
|
|
{
|
|
id: "gemini-2.5-flash",
|
|
name: "Gemini 2.5 Flash",
|
|
contextLength: 1048576,
|
|
maxOutputTokens: 65535,
|
|
toolCalling: true,
|
|
},
|
|
{
|
|
id: "gemini-2.5-flash-lite",
|
|
name: "Gemini 2.5 Flash Lite",
|
|
contextLength: 1048576,
|
|
maxOutputTokens: 65535,
|
|
toolCalling: true,
|
|
},
|
|
// GPT-OSS
|
|
{
|
|
id: "gpt-oss-120b-medium",
|
|
name: "GPT-OSS 120B (Medium)",
|
|
contextLength: 131072,
|
|
maxOutputTokens: 32768,
|
|
supportsReasoning: true,
|
|
toolCalling: true,
|
|
},
|
|
]);
|
|
|
|
const AGY_PUBLIC_MODEL_IDS = new Set(AGY_PUBLIC_MODELS.map((model) => model.id));
|
|
const AGY_NON_CHAT_MODEL_IDS = new Set(["tab_flash_lite_preview", "tab_jump_flash_lite_preview"]);
|
|
|
|
const AGY_CLIENT_VISIBLE_MODEL_NAMES = Object.freeze(
|
|
AGY_PUBLIC_MODELS.reduce<Record<string, string>>((acc, model) => {
|
|
acc[model.id] = model.name;
|
|
return acc;
|
|
}, {})
|
|
);
|
|
|
|
export function getClientVisibleAgyModelName(modelId: string, fallbackName?: string): string {
|
|
return AGY_CLIENT_VISIBLE_MODEL_NAMES[modelId] || fallbackName || modelId;
|
|
}
|
|
|
|
export function isUserCallableAgyModelId(modelId: string): boolean {
|
|
return !!modelId && AGY_PUBLIC_MODEL_IDS.has(modelId);
|
|
}
|
|
|
|
export function isDiscoverableAgyModelId(modelId: string): boolean {
|
|
return !!modelId && !AGY_NON_CHAT_MODEL_IDS.has(modelId);
|
|
}
|