From 5811e677f12128ca8041b9b0b8cf42b29be98683 Mon Sep 17 00:00:00 2001 From: diegosouzapw Date: Wed, 25 Feb 2026 08:46:42 -0300 Subject: [PATCH] fix: strip antigravity/ prefix from model names sent to upstream API + sync package-lock.json --- CHANGELOG.md | 14 ++++++++++++++ open-sse/executors/antigravity.ts | 13 ++++++++++++- open-sse/translator/request/openai-to-gemini.ts | 8 ++++++-- package-lock.json | 4 ++-- package.json | 2 +- 5 files changed, 35 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42e8e0c62d..581017c1fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 --- +## [1.4.7] — 2026-02-25 + +> ### 🐛 Bugfix — Antigravity Model Prefix & Version Sync +> +> Fixes model name sent to Antigravity upstream API containing `antigravity/` prefix, causing 400 errors for non-opus models. Also syncs package-lock.json version. + +### 🐛 Bug Fixes + +- **Antigravity Model Prefix Stripping** — Model names sent to the Antigravity upstream API (Google Cloud Code) now have any `provider/` prefix defensively stripped. Previously, models like `antigravity/gemini-3-flash` were sent with the prefix intact, causing 400 errors from the upstream API. Only `claude-opus-4-6-thinking` worked because its routing path differed. Fix applied in 3 locations: `antigravity.ts` executor, and both `wrapInCloudCodeEnvelope` and `wrapInCloudCodeEnvelopeForClaude` in the translator +- **Package-lock.json Version Sync** — Fixed `package-lock.json` being stuck at `1.4.3` while `package.json` was at `1.4.6`, which prevented npm from publishing the correct version and caused the VPS deploy to stay on the old version + +--- + ## [1.4.6] — 2026-02-25 > ### ✨ Community Release — Security Fix, Multi-Platform Docker, Model Updates & Plus Tier @@ -618,6 +631,7 @@ New environment variables: --- +[1.4.7]: https://github.com/diegosouzapw/OmniRoute/releases/tag/v1.4.7 [1.4.6]: https://github.com/diegosouzapw/OmniRoute/releases/tag/v1.4.6 [1.4.5]: https://github.com/diegosouzapw/OmniRoute/releases/tag/v1.4.5 [1.4.4]: https://github.com/diegosouzapw/OmniRoute/releases/tag/v1.4.4 diff --git a/open-sse/executors/antigravity.ts b/open-sse/executors/antigravity.ts index d430209ce6..3f38ba184e 100644 --- a/open-sse/executors/antigravity.ts +++ b/open-sse/executors/antigravity.ts @@ -4,6 +4,15 @@ import { PROVIDERS, OAUTH_ENDPOINTS, HTTP_STATUS } from "../config/constants.ts" const MAX_RETRY_AFTER_MS = 10000; +/** + * Strip any provider prefix (e.g. "antigravity/model" → "model"). + * Ensures the model name sent to the upstream API never contains a routing prefix. + */ +function cleanModelName(model: string): string { + if (!model) return model; + return model.includes("/") ? model.split("/").pop()! : model; +} + export class AntigravityExecutor extends BaseExecutor { constructor() { super("antigravity", PROVIDERS.antigravity); @@ -60,10 +69,12 @@ export class AntigravityExecutor extends BaseExecutor { : body.request?.toolConfig, }; + const upstreamModel = cleanModelName(model); + return { ...body, project: projectId, - model: model, + model: upstreamModel, userAgent: "antigravity", requestType: "agent", requestId: `agent-${crypto.randomUUID()}`, diff --git a/open-sse/translator/request/openai-to-gemini.ts b/open-sse/translator/request/openai-to-gemini.ts index 7714481409..dcc06dca80 100644 --- a/open-sse/translator/request/openai-to-gemini.ts +++ b/open-sse/translator/request/openai-to-gemini.ts @@ -271,9 +271,11 @@ export function openaiToGeminiCLIRequest(model, body, stream) { function wrapInCloudCodeEnvelope(model, geminiCLI, credentials = null, isAntigravity = false) { const projectId = credentials?.projectId || generateProjectId(); + const cleanModel = model.includes("/") ? model.split("/").pop()! : model; + const envelope: Record = { project: projectId, - model: model, + model: cleanModel, userAgent: isAntigravity ? "antigravity" : "gemini-cli", requestId: isAntigravity ? `agent-${generateUUID()}` : generateRequestId(), request: { @@ -315,9 +317,11 @@ function wrapInCloudCodeEnvelope(model, geminiCLI, credentials = null, isAntigra function wrapInCloudCodeEnvelopeForClaude(model, claudeRequest, credentials = null) { const projectId = credentials?.projectId || generateProjectId(); + const cleanModel = model.includes("/") ? model.split("/").pop()! : model; + const envelope: Record = { project: projectId, - model: model, + model: cleanModel, userAgent: "antigravity", requestId: `agent-${generateUUID()}`, requestType: "agent", diff --git a/package-lock.json b/package-lock.json index dc43476856..43232c5a27 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "omniroute", - "version": "1.4.3", + "version": "1.4.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "omniroute", - "version": "1.4.3", + "version": "1.4.7", "license": "MIT", "workspaces": [ "open-sse" diff --git a/package.json b/package.json index 86f166dbc7..9b672ca244 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "omniroute", - "version": "1.4.6", + "version": "1.4.7", "description": "Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.", "type": "module", "bin": {