Skip to content
This repository was archived by the owner on Mar 30, 2026. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 20 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![X (Twitter)](https://img.shields.io/badge/X-@dopesalmon-000000?style=flat&logo=x)](https://x.com/dopesalmon)

Enable Opencode to authenticate against **Antigravity** (Google's IDE) via OAuth so you can use Antigravity rate limits and access models like `gemini-3-pro` and `claude-opus-4-6-thinking` with your Google credentials.
Enable Opencode to authenticate against **Antigravity** (Google's IDE) via OAuth so you can use Antigravity rate limits and access models like `gemini-3.1-pro` and `claude-opus-4-6-thinking` with your Google credentials.

## What You Get

- **Claude Opus 4.6, Sonnet 4.6** and **Gemini 3 Pro/Flash** via Google OAuth
- **Claude Opus 4.6, Sonnet 4.6** and **Gemini 3.1 Pro/Flash** via Google OAuth
- **Multi-account support** — add multiple Google accounts, auto-rotates when rate-limited
- **Dual quota system** — access both Antigravity and Gemini CLI quotas from one plugin
- **Thinking models** — extended thinking for Claude and Gemini 3 with configurable budgets
Expand Down Expand Up @@ -117,11 +117,11 @@ opencode run "Hello" --model=google/antigravity-claude-opus-4-6-thinking --varia

| Model | Variants | Notes |
|-------|----------|-------|
| `antigravity-gemini-3-pro` | low, high | Gemini 3 Pro with thinking |
| `antigravity-gemini-3.1-pro` | low, high | Gemini 3.1 Pro with thinking (rollout-dependent) |
| `antigravity-gemini-3-flash` | minimal, low, medium, high | Gemini 3 Flash with thinking |
| `antigravity-claude-sonnet-4-6` | — | Claude Sonnet 4.6 |
| `antigravity-claude-opus-4-6-thinking` | low, max | Claude Opus 4.6 with extended thinking |
| `antigravity-claude-sonnet-4-6-thinking` | low, medium, high | Claude Sonnet 4.6 with extended thinking |
| `antigravity-claude-opus-4-6-thinking` | low, medium, high, max | Claude Opus 4.6 with extended thinking |

**Gemini CLI quota** (separate from Antigravity; used when `cli_first` is true or as fallback):

Expand All @@ -130,7 +130,7 @@ opencode run "Hello" --model=google/antigravity-claude-opus-4-6-thinking --varia
| `gemini-2.5-flash` | Gemini 2.5 Flash |
| `gemini-2.5-pro` | Gemini 2.5 Pro |
| `gemini-3-flash-preview` | Gemini 3 Flash (preview) |
| `gemini-3-pro-preview` | Gemini 3 Pro (preview) |
| `gemini-3-pro-preview` | Gemini 3 Pro Preview |
| `gemini-3.1-pro-preview` | Gemini 3.1 Pro (preview, rollout-dependent) |
| `gemini-3.1-pro-preview-customtools` | Gemini 3.1 Pro Preview Custom Tools (preview, rollout-dependent) |

Expand Down Expand Up @@ -160,15 +160,6 @@ Add this to your `~/.config/opencode/opencode.json`:
"provider": {
"google": {
"models": {
"antigravity-gemini-3-pro": {
"name": "Gemini 3 Pro (Antigravity)",
"limit": { "context": 1048576, "output": 65535 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
"variants": {
"low": { "thinkingLevel": "low" },
"high": { "thinkingLevel": "high" }
}
},
"antigravity-gemini-3.1-pro": {
"name": "Gemini 3.1 Pro (Antigravity)",
"limit": { "context": 1048576, "output": 65535 },
Expand All @@ -194,13 +185,25 @@ Add this to your `~/.config/opencode/opencode.json`:
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"antigravity-claude-sonnet-4-6-thinking": {
"name": "Claude Sonnet 4.6 Thinking (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
"variants": {
"low": { "thinkingConfig": { "thinkingBudget": 8192 } },
"medium": { "thinkingConfig": { "thinkingBudget": 16384 } },
"high": { "thinkingConfig": { "thinkingBudget": 32768 } }
}
},
"antigravity-claude-opus-4-6-thinking": {
"name": "Claude Opus 4.6 Thinking (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
"variants": {
"low": { "thinkingConfig": { "thinkingBudget": 8192 } },
"max": { "thinkingConfig": { "thinkingBudget": 32768 } }
"medium": { "thinkingConfig": { "thinkingBudget": 16384 } },
"high": { "thinkingConfig": { "thinkingBudget": 32768 } },
"max": { "thinkingConfig": { "thinkingBudget": 65536 } }
}
},
"gemini-2.5-flash": {
Expand Down Expand Up @@ -427,7 +430,7 @@ If you encounter errors during a session:
{
"google_auth": false,
"agents": {
"frontend-ui-ux-engineer": { "model": "google/antigravity-gemini-3-pro" },
"frontend-ui-ux-engineer": { "model": "google/antigravity-gemini-3.1-pro" },
"document-writer": { "model": "google/antigravity-gemini-3-flash" }
}
}
Expand Down Expand Up @@ -565,7 +568,7 @@ Disable built-in auth and override agent models in `oh-my-opencode.json`:
{
"google_auth": false,
"agents": {
"frontend-ui-ux-engineer": { "model": "google/antigravity-gemini-3-pro" },
"frontend-ui-ux-engineer": { "model": "google/antigravity-gemini-3.1-pro" },
"document-writer": { "model": "google/antigravity-gemini-3-flash" },
"multimodal-looker": { "model": "google/antigravity-gemini-3-flash" }
}
Expand Down
3 changes: 1 addition & 2 deletions docs/ANTIGRAVITY_API_SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,8 @@ Accept: text/event-stream
| Model Name | Model ID | Type | Status |
|------------|----------|------|--------|
| Claude Sonnet 4.6 | `claude-sonnet-4-6` | Anthropic | ✅ Verified |
| Claude Sonnet 4.6 Thinking | `claude-sonnet-4-6-thinking` | Anthropic | ⏳ Pending Rollout |
| Claude Opus 4.6 Thinking | `claude-opus-4-6-thinking` | Anthropic | ✅ Verified |
| Gemini 3 Pro High | `gemini-3-pro-high` | Google | ✅ Verified |
| Gemini 3 Pro Low | `gemini-3-pro-low` | Google | ✅ Verified |
| GPT-OSS 120B Medium | `gpt-oss-120b-medium` | Other | ✅ Verified |

---
Expand Down
49 changes: 23 additions & 26 deletions docs/MODEL-VARIANTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,31 +50,15 @@ The plugin accepts different variant formats depending on the model family:

Gemini 3 models use string-based thinking levels. Available levels differ by model:

| Level | Flash | Pro | Description |
|-------|-------|-----|-------------|
| Level | Flash | Pro (3.1) | Description |
|-------|-------|-------------|-------------|
| `minimal` | ✅ | ❌ | Minimal thinking, lowest latency |
| `low` | ✅ | ✅ | Light thinking |
| `medium` | ✅ | ❌ | Balanced thinking |
| `high` | ✅ | ✅ | Maximum thinking (default) |

> **Note:** The API rejects invalid levels (e.g., `"minimal"` on Pro). Configure variants accordingly.

### Gemini 3 Pro Example

```json
{
"antigravity-gemini-3-pro": {
"name": "Gemini 3 Pro (Antigravity)",
"limit": { "context": 1048576, "output": 65535 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
"variants": {
"low": { "thinkingLevel": "low" },
"high": { "thinkingLevel": "high" }
}
}
}
```

### Gemini 3 Flash Example

```json
Expand All @@ -99,22 +83,34 @@ Gemini 3 models use string-based thinking levels. Available levels differ by mod

Claude models use token-based thinking budgets:

| Variant | Budget | Description |
|---------|--------|-------------|
| `low` | 8192 | Light thinking |
| `max` | 32768 | Maximum thinking |
| Model | Variants | Budgets |
|-------|----------|---------|
| `antigravity-claude-opus-4-6-thinking` | `low`, `medium`, `high`, `max` | 8192, 16384, 32768, 65536 |
| `antigravity-claude-sonnet-4-6-thinking` | `low`, `medium`, `high` | 8192, 16384, 32768 |

### Claude Example

```json
{
"antigravity-claude-sonnet-4-6-thinking": {
"name": "Claude Sonnet 4.6 Thinking (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
"variants": {
"low": { "thinkingConfig": { "thinkingBudget": 8192 } },
"medium": { "thinkingConfig": { "thinkingBudget": 16384 } },
"high": { "thinkingConfig": { "thinkingBudget": 32768 } }
}
},
"antigravity-claude-opus-4-6-thinking": {
"name": "Claude Opus 4.6 Thinking (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
"variants": {
"low": { "thinkingConfig": { "thinkingBudget": 8192 } },
"max": { "thinkingConfig": { "thinkingBudget": 32768 } }
"medium": { "thinkingConfig": { "thinkingBudget": 16384 } },
"high": { "thinkingConfig": { "thinkingBudget": 32768 } },
"max": { "thinkingConfig": { "thinkingBudget": 65536 } }
}
}
}
Expand Down Expand Up @@ -157,9 +153,10 @@ Tier-suffixed model names are still accepted:
- `antigravity-claude-opus-4-6-thinking-low`
- `antigravity-claude-opus-4-6-thinking-medium`
- `antigravity-claude-opus-4-6-thinking-high`
- `antigravity-gemini-3-pro-low`
- `antigravity-gemini-3-pro-high`
- `gemini-3-pro-low`
- `antigravity-claude-opus-4-6-thinking-max`
- `antigravity-claude-sonnet-4-6-thinking-low`
- `antigravity-claude-sonnet-4-6-thinking-medium`
- `antigravity-claude-sonnet-4-6-thinking-high`
- `gemini-3-flash-medium`

However, **we recommend using simplified model names with variants** for:
Expand Down
2 changes: 1 addition & 1 deletion docs/TROUBLESHOOTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,7 @@ v1.2.7+ uses explicit `antigravity-` prefix:

| Old Name | New Name |
|----------|----------|
| `gemini-3-pro-low` | `antigravity-gemini-3-pro` |
| `gemini-3.1-pro-low` | `antigravity-gemini-3.1-pro` |
| `claude-sonnet-4-6` | `antigravity-claude-sonnet-4-6` |

Use the `antigravity-` prefixed model names shown above.
Expand Down
12 changes: 6 additions & 6 deletions script/test-cross-model-e2e.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# Tests fix for "Invalid `signature` in `thinking` block" error
#
# Models tested:
# 1. Gemini (google/antigravity-gemini-3-pro-low, gemini-3-flash)
# 1. Gemini (google/antigravity-gemini-3.1-pro-low, gemini-3-flash)
# 2. Claude via Anthropic (anthropic/claude-opus-4-5)
# 3. Claude via Google (google/antigravity-claude-*-thinking-*)
# 4. OpenAI (openai/gpt-5.2-medium)
Expand Down Expand Up @@ -42,7 +42,7 @@ echo ""
# Test 1: Gemini → Anthropic Claude (original bug + direct Anthropic API)
echo "Test 1: Gemini Pro → Anthropic Claude Opus (direct API)"
log_info "Step 1: Gemini with thinking + tool..."
opencode run -m google/antigravity-gemini-3-pro-low \
opencode run -m google/antigravity-gemini-3.1-pro-low \
"Run: echo 'Test1-Gemini'. Think about sequences." \
> /tmp/e2e-t1-s1.log 2>&1 || true

Expand All @@ -67,7 +67,7 @@ echo ""
# Test 2: Gemini → Google Claude (Google-hosted Claude)
echo "Test 2: Gemini Pro → Google Claude Opus Thinking"
log_info "Step 1: Gemini with thinking + tool..."
opencode run -m google/antigravity-gemini-3-pro-low \
opencode run -m google/antigravity-gemini-3.1-pro-low \
"Run: echo 'Test2-Gemini'. Think about this." \
> /tmp/e2e-t2-s1.log 2>&1 || true

Expand All @@ -92,7 +92,7 @@ echo ""
# Test 3: Gemini → OpenAI
echo "Test 3: Gemini Pro → OpenAI GPT-5.2"
log_info "Step 1: Gemini with thinking + tool..."
opencode run -m google/antigravity-gemini-3-pro-low \
opencode run -m google/antigravity-gemini-3.1-pro-low \
"Run: echo 'Test3-Gemini'. Think about AI models." \
> /tmp/e2e-t3-s1.log 2>&1 || true

Expand Down Expand Up @@ -129,7 +129,7 @@ if [ -z "$SID" ]; then
else
log_info "Session: $SID"
log_info "Step 2: Gemini + thinking + tool..."
opencode run -s "$SID" -m google/antigravity-gemini-3-pro-low \
opencode run -s "$SID" -m google/antigravity-gemini-3.1-pro-low \
"Run: echo 'Test4-Gemini'. Think about reversal." \
> /tmp/e2e-t4-s2.log 2>&1 || true

Expand Down Expand Up @@ -173,7 +173,7 @@ echo ""
# Test 6: 5-Model Round-Robin (all models in sequence)
echo "Test 6: 5-Model Round-Robin"
log_info "Turn 1: Gemini Pro Low..."
opencode run -m google/antigravity-gemini-3-pro-low \
opencode run -m google/antigravity-gemini-3.1-pro-low \
"Run: echo 'Turn1'. Think about the chain." \
> /tmp/e2e-t6-s1.log 2>&1 || true

Expand Down
2 changes: 1 addition & 1 deletion script/test-cross-model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ function runTests(): void {
let failed = 0;

console.log('Test 1: Model family detection');
const geminiFamily = getModelFamily('gemini-3-pro-low');
const geminiFamily = getModelFamily('gemini-3.1-pro-low');
const claudeFamily = getModelFamily('claude-opus-4-6-thinking-medium');
if (geminiFamily === 'gemini' && claudeFamily === 'claude') {
console.log(' ✅ PASS: Model families detected correctly');
Expand Down
33 changes: 19 additions & 14 deletions script/test-gemini-cli-e2e.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
# Models tested:
# 1. google/gemini-2.5-pro
# 2. google/gemini-2.5-flash
# 3. google/gemini-3-pro-preview
# 4. google/gemini-3-flash-preview
# 3. google/gemini-3-flash-preview
# 4. google/gemini-3-pro-preview
# 5. google/gemini-3.1-pro-preview

set -euo pipefail

Expand Down Expand Up @@ -98,8 +99,12 @@ echo "Test 4: google/gemini-3-pro-preview"
test_model "google/gemini-3-pro-preview" "gemini-3-pro-preview" || true
echo ""

# Test 5: Cross-model session (gemini-cli → antigravity)
echo "Test 5: Cross-model session (gemini-cli → antigravity-gemini)"
echo "Test 5: google/gemini-3.1-pro-preview"
test_model "google/gemini-3.1-pro-preview" "gemini-3.1-pro-preview" || true
echo ""

# Test 6: Cross-model session (gemini-cli → antigravity)
echo "Test 6: Cross-model session (gemini-cli → antigravity-gemini)"
log_info "Step 1: Start with gemini-2.5-flash..."
timeout 60 opencode run -m google/gemini-2.5-flash \
"Say: SESSION_START" \
Expand All @@ -110,7 +115,7 @@ sleep 1
SID=$(opencode session list 2>/dev/null | grep -oP 'ses_[a-zA-Z0-9]+' | head -1 || true)

if [ -z "$SID" ]; then
log_fail "Test 5 - No session ID created"
log_fail "Test 6 - No session ID created"
else
log_info "Session: $SID"
log_info "Step 2: Switch to antigravity-gemini-3-flash..."
Expand All @@ -119,25 +124,25 @@ else
2>&1 > /tmp/gemini-cli-e2e-cross-s2.log || true

if check_auth_error /tmp/gemini-cli-e2e-cross-s2.log; then
log_fail "Test 5 - Auth error on cross-model switch"
log_fail "Test 6 - Auth error on cross-model switch"
else
log_pass "Test 5 - Cross-model session (gemini-cli → antigravity)"
log_pass "Test 6 - Cross-model session (gemini-cli → antigravity)"
fi
fi
echo ""

# Test 6: Reverse cross-model (antigravity → gemini-cli)
echo "Test 6: Cross-model session (antigravity → gemini-cli)"
log_info "Step 1: Start with antigravity-gemini-3-pro-low..."
timeout 60 opencode run -m google/antigravity-gemini-3-pro-low \
# Test 7: Reverse cross-model (antigravity → gemini-cli)
echo "Test 7: Cross-model session (antigravity → gemini-cli)"
log_info "Step 1: Start with antigravity-gemini-3.1-pro-low..."
timeout 60 opencode run -m google/antigravity-gemini-3.1-pro-low \
"Say: ANTIGRAVITY_START" \
2>&1 > /tmp/gemini-cli-e2e-reverse-s1.log || true
Comment on lines +136 to 139
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Stderr redirect order is wrong — error logs may be lost to terminal instead of captured in file.

2>&1 > file redirects stderr to stdout's current destination (the terminal) and then redirects stdout to the file, so only stdout lands in the log file. The check_auth_error / check_quota_error / check_model_error helpers would miss any errors written to stderr.

This same pattern exists in the pre-existing code at lines 53, 111, 124, and 151; fixing it here makes the new test consistent with the correct behaviour rather than the existing incorrect pattern.

🐛 Proposed fix
-timeout 60 opencode run -m google/antigravity-gemini-3.1-pro-low \
-  "Say: ANTIGRAVITY_START" \
-  2>&1 > /tmp/gemini-cli-e2e-reverse-s1.log || true
+timeout 60 opencode run -m google/antigravity-gemini-3.1-pro-low \
+  "Say: ANTIGRAVITY_START" \
+  > /tmp/gemini-cli-e2e-reverse-s1.log 2>&1 || true

The same fix (> file 2>&1) should be applied consistently to lines 53, 111, 124, and 151 as well.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
log_info "Step 1: Start with antigravity-gemini-3.1-pro-low..."
timeout 60 opencode run -m google/antigravity-gemini-3.1-pro-low \
"Say: ANTIGRAVITY_START" \
2>&1 > /tmp/gemini-cli-e2e-reverse-s1.log || true
log_info "Step 1: Start with antigravity-gemini-3.1-pro-low..."
timeout 60 opencode run -m google/antigravity-gemini-3.1-pro-low \
"Say: ANTIGRAVITY_START" \
> /tmp/gemini-cli-e2e-reverse-s1.log 2>&1 || true
🧰 Tools
🪛 Shellcheck (0.11.0)

[warning] 139-139: To redirect stdout+stderr, 2>&1 must be last (or use '{ cmd > file; } 2>&1' to clarify).

(SC2069)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@script/test-gemini-cli-e2e.sh` around lines 136 - 139, The stderr/stdout
redirection order is wrong for the timeout opencode run invocation (e.g., the
line with timeout 60 opencode run -m google/antigravity-gemini-3.1-pro-low "Say:
ANTIGRAVITY_START" 2>&1 > /tmp/gemini-cli-e2e-reverse-s1.log || true); change
the redirect to send both stdout and stderr into the log file by using >
/tmp/gemini-cli-e2e-reverse-s1.log 2>&1 instead of 2>&1 > ..., and apply the
same fix consistently to the other opencode run invocations that use the same
pattern so helpers like check_auth_error / check_quota_error / check_model_error
can see stderr output.


sleep 1
SID=$(opencode session list 2>/dev/null | grep -oP 'ses_[a-zA-Z0-9]+' | head -1 || true)

if [ -z "$SID" ]; then
log_fail "Test 6 - No session ID created"
log_fail "Test 7 - No session ID created"
else
log_info "Session: $SID"
log_info "Step 2: Switch to gemini-2.5-pro..."
Expand All @@ -146,9 +151,9 @@ else
2>&1 > /tmp/gemini-cli-e2e-reverse-s2.log || true

if check_auth_error /tmp/gemini-cli-e2e-reverse-s2.log; then
log_fail "Test 6 - Auth error on reverse cross-model switch"
log_fail "Test 7 - Auth error on reverse cross-model switch"
else
log_pass "Test 6 - Cross-model session (antigravity → gemini-cli)"
log_pass "Test 7 - Cross-model session (antigravity → gemini-cli)"
fi
fi
echo ""
Expand Down
9 changes: 7 additions & 2 deletions script/test-models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,24 @@ const MODELS: ModelTest[] = [
// Gemini CLI (direct Google API)
{ model: "google/gemini-3-flash-preview", category: "gemini-cli" },
{ model: "google/gemini-3-pro-preview", category: "gemini-cli" },
{ model: "google/gemini-3.1-pro-preview", category: "gemini-cli" },
{ model: "google/gemini-2.5-pro", category: "gemini-cli" },
{ model: "google/gemini-2.5-flash", category: "gemini-cli" },

// Antigravity Gemini
{ model: "google/antigravity-gemini-3-pro-low", category: "antigravity-gemini" },
{ model: "google/antigravity-gemini-3-pro-high", category: "antigravity-gemini" },
{ model: "google/antigravity-gemini-3.1-pro-low", category: "antigravity-gemini" },
{ model: "google/antigravity-gemini-3.1-pro-high", category: "antigravity-gemini" },
{ model: "google/antigravity-gemini-3-flash", category: "antigravity-gemini" },

// Antigravity Claude
{ model: "google/antigravity-claude-sonnet-4-6", category: "antigravity-claude" },
{ model: "google/antigravity-claude-sonnet-4-6-thinking-low", category: "antigravity-claude" },
{ model: "google/antigravity-claude-sonnet-4-6-thinking-medium", category: "antigravity-claude" },
{ model: "google/antigravity-claude-sonnet-4-6-thinking-high", category: "antigravity-claude" },
{ model: "google/antigravity-claude-opus-4-6-thinking-low", category: "antigravity-claude" },
{ model: "google/antigravity-claude-opus-4-6-thinking-medium", category: "antigravity-claude" },
{ model: "google/antigravity-claude-opus-4-6-thinking-high", category: "antigravity-claude" },
{ model: "google/antigravity-claude-opus-4-6-thinking-max", category: "antigravity-claude" },
];

const TEST_PROMPT = "Reply with exactly one word: WORKING";
Expand Down
4 changes: 2 additions & 2 deletions scripts/setup-opencode-pi.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ if [ ! -f "$CONFIG_FILE" ]; then
"provider": {
"google": {
"models": {
"antigravity-gemini-3-pro": {
"name": "Gemini 3 Pro (Antigravity)",
"antigravity-gemini-3.1-pro": {
"name": "Gemini 3.1 Pro (Antigravity)",
"limit": { "context": 1048576, "output": 65535 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
"variants": {
Expand Down
2 changes: 1 addition & 1 deletion src/plugin/accounts.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1863,6 +1863,6 @@ describe("resolveQuotaGroup", () => {
it("model takes precedence over family", () => {
// Even if family says claude, model determines the quota group
expect(resolveQuotaGroup("gemini", "gemini-2.5-flash")).toBe("gemini-flash");
expect(resolveQuotaGroup("gemini", "gemini-3-pro")).toBe("gemini-pro");
expect(resolveQuotaGroup("gemini", "gemini-3.1-pro")).toBe("gemini-pro");
});
});
Loading