Skip to content
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
33 changes: 18 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,11 +112,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 @@ -125,7 +125,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 @@ -155,15 +155,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 @@ -189,13 +180,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 @@ -422,7 +425,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 @@ -560,7 +563,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

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