From 6a89b76d3368c4c80626c1ef009a7e2b83f122a2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 11 Jun 2026 20:38:22 +0000 Subject: [PATCH 1/6] Plan hero slide scaling fix Co-authored-by: mnkiefer <8320933+mnkiefer@users.noreply.github.com> --- .../content/docs/reference/model-tables.md | 201 +----------------- 1 file changed, 3 insertions(+), 198 deletions(-) diff --git a/docs/src/content/docs/reference/model-tables.md b/docs/src/content/docs/reference/model-tables.md index 22ee0430a40..50ae2aeb6ed 100644 --- a/docs/src/content/docs/reference/model-tables.md +++ b/docs/src/content/docs/reference/model-tables.md @@ -1,14 +1,11 @@ --- -title: Model Aliases & Multipliers -description: Reference tables for the built-in model alias map and legacy per-model Effective Token multipliers used by GitHub Agentic Workflows. +title: Model Aliases +description: Reference tables for the built-in model alias map used by GitHub Agentic Workflows. sidebar: order: 297 --- -This page lists the built-in model aliases and the legacy per-model Effective Token (ET) multipliers used by GitHub Agentic Workflows. AI Credits (AIC) is the primary cost metric. - -> [!CAUTION] -> The multiplier values shown on this page are **approximations** for legacy ET normalization only. gh-aw uses AI Credits (AIC) as the primary billing metric. Do not use ET multipliers for billing or financial calculations. +This page lists the built-in model aliases used by GitHub Agentic Workflows. ## Model Aliases @@ -72,195 +69,3 @@ Meta-aliases reference other aliases by name. They are resolved recursively unti | `codex` | `agent` | | `gemini` | `agent` | | `summarization` | `haiku` → `gpt-5-mini` → `gemini-flash-lite` → `mini` | - -## Model Multipliers - -Legacy Effective Token multipliers scale the weighted token total for each model relative to the reference model (`claude-sonnet-4.5`, multiplier = 1.0). A multiplier of 5.0 means that a run on that model counts as five times as many Effective Tokens as the same run on the reference model. - -See the [AI Credits Specification](/gh-aw/specs/ai-credits-specification/) for primary billing details and the [Effective Tokens Specification](/gh-aw/specs/effective-tokens-specification/) for legacy ET formulas. - -### Token Class Weights - -Before per-model multipliers are applied, raw token counts are weighted by token class: - -| Token class | Default weight | -|-------------|---------------| -| Input | 1 | -| Cached Input | 0.1 | -| Output | 4 | -| Reasoning | 4 | -| Cache Write | 1 | - -### Per-Model Multipliers - -### Anthropic - -| Model | Multiplier | -|-------|-----------| -| `claude-haiku-4-5` | 0.33 | -| `claude-haiku-4.5` | 0.33 | -| `claude-haiku-4-5-20251001` | 0.33 | -| `claude-3-5-haiku` | 0.1 | -| `claude-3-haiku` | 0.1 | -| `claude-sonnet-4` | 1 | -| `claude-sonnet-4-20250514` | 1 | -| `claude-sonnet-4-5` | 6 | -| `claude-sonnet-4.5` | 6 | -| `claude-sonnet-4-5-20250929` | 6 | -| `claude-sonnet-4-6` | 9 | -| `claude-sonnet-4.6` | 9 | -| `claude-3-5-sonnet` | 1 | -| `claude-3-7-sonnet` | 1 | -| `claude-3-sonnet` | 1 | -| `claude-opus-4` | 5 | -| `claude-opus-4-20250514` | 5 | -| `claude-opus-4-1` | 5 | -| `claude-opus-4-1-20250805` | 5 | -| `claude-opus-4-5` | 15 | -| `claude-opus-4-5-20251101` | 15 | -| `claude-opus-4-6` | 27 | -| `claude-opus-4-7` | 27 | -| `claude-opus-4-8` | 27 | -| `claude-opus-4.5` | 15 | -| `claude-opus-4.6` | 27 | -| `claude-opus-4.6-fast` | 27 | -| `claude-opus-4.7` | 27 | -| `claude-opus-4.8` | 27 | -| `claude-3-5-opus` | 5 | -| `claude-3-opus` | 5 | - -### OpenAI - -| Model | Multiplier | -|-------|-----------| -| `gpt-4o-2024-05-13` | 0.33 | -| `gpt-4o-2024-08-06` | 0.33 | -| `gpt-4o-2024-11-20` | 0.33 | -| `gpt-4o-mini-2024-07-18` | 0.33 | -| `gpt-4.1-2025-04-14` | 1 | -| `gpt-41-copilot` | 1 | -| `gpt-4.1-mini` | 1 | -| `gpt-4.1-nano` | 1 | -| `gpt-4-turbo` | 1 | -| `gpt-4` | 1 | -| `gpt-4-0613` | 1 | -| `gpt-4-o-preview` | 1 | -| `gpt-3.5-turbo` | 0 | -| `gpt-3.5-turbo-0613` | 0 | -| `gpt-5` | 1 | -| `gpt-5-2025-08-07` | 1 | -| `gpt-5-search-api` | 1 | -| `gpt-5-search-api-2025-10-14` | 1 | -| `gpt-5-chat-latest` | 1 | -| `gpt-5-mini` | 0.33 | -| `gpt-5-mini-2025-08-07` | 0.33 | -| `gpt-5-nano` | 0.05 | -| `gpt-5-nano-2025-08-07` | 0.05 | -| `gpt-5-pro` | 2 | -| `gpt-5-pro-2025-10-06` | 2 | -| `gpt-5.1` | 3 | -| `gpt-5.1-2025-11-13` | 3 | -| `gpt-5.1-chat-latest` | 3 | -| `gpt-5-codex` | 1 | -| `gpt-5.1-codex` | 3 | -| `gpt-5.1-codex-mini` | 0.33 | -| `gpt-5.1-codex-max` | 3 | -| `gpt-5.1-codex-max-customsummarizer` | 3 | -| `gpt-5.2` | 3 | -| `gpt-5.2-2025-12-11` | 3 | -| `gpt-5.2-chat-latest` | 3 | -| `gpt-5.2-codex` | 3 | -| `gpt-5.2-pro` | 3 | -| `gpt-5.2-pro-2025-12-11` | 3 | -| `gpt-5.3-chat-latest` | 3 | -| `gpt-5.3-codex` | 6 | -| `gpt-5.3-codex-api-preview` | 6 | -| `gpt-5.3-codex-api-preview-preambles` | 6 | -| `gpt-5.4` | 6 | -| `gpt-5.4-2026-03-05` | 6 | -| `gpt-5.4-mini` | 6 | -| `gpt-5.4-mini-2026-03-17` | 6 | -| `gpt-5.4-nano-2026-03-17` | 6 | -| `gpt-5.4-pro` | 6 | -| `gpt-5.4-pro-2026-03-05` | 6 | -| `gpt-5.5` | 57 | -| `gpt-5.5-2026-04-23` | 57 | -| `gpt-5.5-pro` | 2 | -| `gpt-5.5-pro-2026-04-23` | 2 | - -### OpenAI Reasoning - -| Model | Multiplier | -|-------|-----------| -| `o1` | 3 | -| `o1-2024-12-17` | 3 | -| `o1-mini` | 0.5 | -| `o1-pro` | 10 | -| `o1-pro-2025-03-19` | 10 | -| `o3` | 3 | -| `o3-2025-04-16` | 3 | -| `o3-mini` | 0.5 | -| `o3-mini-2025-01-31` | 0.5 | -| `o3-pro` | 10 | -| `o3-pro-2025-06-10` | 10 | -| `o3-deep-research` | 3 | -| `o3-deep-research-2025-06-26` | 3 | -| `o4-mini` | 0.5 | -| `o4-mini-2025-04-16` | 0.5 | -| `o4-mini-deep-research` | 0.5 | -| `o4-mini-deep-research-2025-06-26` | 0.5 | - -### Google - -| Model | Multiplier | -|-------|-----------| -| `gemini-2.5-pro` | 1 | -| `gemini-2.5-pro-preview-tts` | 1 | -| `gemini-2.5-flash` | 0.2 | -| `gemini-2.5-flash-native-audio-latest` | 0.2 | -| `gemini-2.5-flash-native-audio-preview-09-2025` | 0.2 | -| `gemini-2.5-flash-native-audio-preview-12-2025` | 0.2 | -| `gemini-2.5-flash-preview-tts` | 0.2 | -| `gemini-2.5-flash-image` | 0.2 | -| `gemini-2.5-flash-lite` | 0.1 | -| `gemini-2.0-flash` | 0.1 | -| `gemini-2.0-flash-001` | 0.1 | -| `gemini-2.0-flash-lite` | 0.1 | -| `gemini-2.0-flash-lite-001` | 0.1 | -| `gemini-1.5-pro` | 1 | -| `gemini-1.5-flash` | 0.1 | -| `gemini-flash-latest` | 0.2 | -| `gemini-flash-lite-latest` | 0.1 | -| `gemini-pro-latest` | 1 | -| `gemini-3-flash-preview` | 0.33 | -| `gemini-3-pro-preview` | 6 | -| `gemini-3-pro-image` | 6 | -| `gemini-3-pro-image-preview` | 6 | -| `gemini-3.1-pro-preview` | 6 | -| `gemini-3.1-pro-preview-customtools` | 6 | -| `gemini-3.1-flash-live-preview` | 0.1 | -| `gemini-3.1-flash-lite` | 0.1 | -| `gemini-3.1-flash-lite-preview` | 0.1 | -| `gemini-3.1-flash-image` | 0.33 | -| `gemini-3.1-flash-image-preview` | 0.33 | -| `gemini-3.1-flash-tts-preview` | 0.1 | -| `gemini-3.5-flash` | 14 | -| `gemini-2.5-computer-use-preview` | 0.2 | -| `gemini-2.5-computer-use-preview-10-2025` | 0.2 | -| `gemini-robotics-er-1.5-preview` | 0.2 | -| `gemini-robotics-er-1.6-preview` | 0.2 | - -### Other - -| Model | Multiplier | -|-------|-----------| -| `antigravity-preview-05-2026` | 1 | -| `nano-banana-pro-preview` | 0.2 | -| `deep-research-max-preview-04-2026` | 1 | -| `deep-research-preview-04-2026` | 1 | -| `deep-research-pro-preview-12-2025` | 1 | -| `MAI-Code-1-Flash` | 0.33 | -| `gemma-4-26b-a4b-it` | 0.1 | -| `gemma-4-31b-it` | 0.2 | -| `grok-code-fast-1` | 0.33 | -| `raptor-mini` | 0.33 | From e21cf92281645824d76b7459987792e0f6beaa89 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 11 Jun 2026 20:44:11 +0000 Subject: [PATCH 2/6] Fix hero slide scaling on mobile Co-authored-by: mnkiefer <8320933+mnkiefer@users.noreply.github.com> --- docs/src/components/WorkflowHero.astro | 15 ++++++++++++--- docs/tests/slide-preview.spec.ts | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/docs/src/components/WorkflowHero.astro b/docs/src/components/WorkflowHero.astro index e0511217ce2..ad349f3348d 100644 --- a/docs/src/components/WorkflowHero.astro +++ b/docs/src/components/WorkflowHero.astro @@ -103,8 +103,12 @@ function unmountFromHero() { const devicePixelRatio = window.devicePixelRatio || 1; const baseViewport = page.getViewport({ scale: 1 }); - const availableWidth = stage.clientWidth - 16; - const scale = Math.max(availableWidth / baseViewport.width, 0.5); + const availableWidth = Math.max(stage.clientWidth - 16, 1); + const availableHeight = Math.max(stage.clientHeight - 16, 1); + const scale = Math.max( + Math.min(availableWidth / baseViewport.width, availableHeight / baseViewport.height), + 0.1, + ); const viewport = page.getViewport({ scale }); bufferCanvas.width = Math.floor(viewport.width * devicePixelRatio); @@ -130,7 +134,10 @@ function unmountFromHero() { canvasContext.drawImage(bufferCanvas, 0, 0); activePage = pageNumber; - loading?.setAttribute('hidden', 'hidden'); + if (loading) { + loading.setAttribute('hidden', 'hidden'); + loading.style.display = 'none'; + } root.classList.add('is-ready'); } @@ -242,6 +249,8 @@ function unmountFromHero() { z-index: 2; width: 100%; height: 100%; + max-width: 100%; + max-height: 100%; border-radius: 1rem; border: 0; background: transparent; diff --git a/docs/tests/slide-preview.spec.ts b/docs/tests/slide-preview.spec.ts index 8c00cca14fa..c40b1718230 100644 --- a/docs/tests/slide-preview.spec.ts +++ b/docs/tests/slide-preview.spec.ts @@ -38,6 +38,26 @@ test.describe('Slide Preview on Homepage', () => { await expect(slideHero).toHaveClass(/is-ready/); }); + test('should keep the rendered slide within the frame on mobile screens', async ({ page }) => { + await page.setViewportSize({ width: 390, height: 844 }); + await page.goto('/gh-aw/'); + await page.waitForLoadState('networkidle'); + + const loading = page.locator('[data-slide-loading]'); + await expect(loading).toBeHidden({ timeout: 10000 }); + + const stage = page.locator('[data-slide-stage]'); + const canvas = page.locator('[data-slide-canvas]'); + const stageBox = await stage.boundingBox(); + const canvasBox = await canvas.boundingBox(); + + expect(stageBox).not.toBeNull(); + expect(canvasBox).not.toBeNull(); + + expect(canvasBox!.width).toBeLessThanOrEqual(stageBox!.width); + expect(canvasBox!.height).toBeLessThanOrEqual(stageBox!.height); + }); + test('should be keyboard accessible', async ({ page }) => { // Wait for slides to load const loading = page.locator('[data-slide-loading]'); From 6fc4a831052d50dc60b31e06117241ffb8b35137 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 11 Jun 2026 20:50:42 +0000 Subject: [PATCH 3/6] Tidy hero slide follow-up changes Co-authored-by: mnkiefer <8320933+mnkiefer@users.noreply.github.com> --- docs/src/components/WorkflowHero.astro | 8 +- .../content/docs/reference/model-tables.md | 201 +++++++++++++++++- 2 files changed, 203 insertions(+), 6 deletions(-) diff --git a/docs/src/components/WorkflowHero.astro b/docs/src/components/WorkflowHero.astro index ad349f3348d..ef13985d77a 100644 --- a/docs/src/components/WorkflowHero.astro +++ b/docs/src/components/WorkflowHero.astro @@ -76,6 +76,8 @@ function unmountFromHero() { let renderVersion = 0; /** @type {number | undefined} */ let autoplayTimer; + const stageInset = 16; + const minScale = 0.1; function stopCarousel() { window.clearInterval(autoplayTimer); @@ -103,11 +105,11 @@ function unmountFromHero() { const devicePixelRatio = window.devicePixelRatio || 1; const baseViewport = page.getViewport({ scale: 1 }); - const availableWidth = Math.max(stage.clientWidth - 16, 1); - const availableHeight = Math.max(stage.clientHeight - 16, 1); + const availableWidth = Math.max(stage.clientWidth - stageInset, 1); + const availableHeight = Math.max(stage.clientHeight - stageInset, 1); const scale = Math.max( Math.min(availableWidth / baseViewport.width, availableHeight / baseViewport.height), - 0.1, + minScale, ); const viewport = page.getViewport({ scale }); diff --git a/docs/src/content/docs/reference/model-tables.md b/docs/src/content/docs/reference/model-tables.md index 50ae2aeb6ed..22ee0430a40 100644 --- a/docs/src/content/docs/reference/model-tables.md +++ b/docs/src/content/docs/reference/model-tables.md @@ -1,11 +1,14 @@ --- -title: Model Aliases -description: Reference tables for the built-in model alias map used by GitHub Agentic Workflows. +title: Model Aliases & Multipliers +description: Reference tables for the built-in model alias map and legacy per-model Effective Token multipliers used by GitHub Agentic Workflows. sidebar: order: 297 --- -This page lists the built-in model aliases used by GitHub Agentic Workflows. +This page lists the built-in model aliases and the legacy per-model Effective Token (ET) multipliers used by GitHub Agentic Workflows. AI Credits (AIC) is the primary cost metric. + +> [!CAUTION] +> The multiplier values shown on this page are **approximations** for legacy ET normalization only. gh-aw uses AI Credits (AIC) as the primary billing metric. Do not use ET multipliers for billing or financial calculations. ## Model Aliases @@ -69,3 +72,195 @@ Meta-aliases reference other aliases by name. They are resolved recursively unti | `codex` | `agent` | | `gemini` | `agent` | | `summarization` | `haiku` → `gpt-5-mini` → `gemini-flash-lite` → `mini` | + +## Model Multipliers + +Legacy Effective Token multipliers scale the weighted token total for each model relative to the reference model (`claude-sonnet-4.5`, multiplier = 1.0). A multiplier of 5.0 means that a run on that model counts as five times as many Effective Tokens as the same run on the reference model. + +See the [AI Credits Specification](/gh-aw/specs/ai-credits-specification/) for primary billing details and the [Effective Tokens Specification](/gh-aw/specs/effective-tokens-specification/) for legacy ET formulas. + +### Token Class Weights + +Before per-model multipliers are applied, raw token counts are weighted by token class: + +| Token class | Default weight | +|-------------|---------------| +| Input | 1 | +| Cached Input | 0.1 | +| Output | 4 | +| Reasoning | 4 | +| Cache Write | 1 | + +### Per-Model Multipliers + +### Anthropic + +| Model | Multiplier | +|-------|-----------| +| `claude-haiku-4-5` | 0.33 | +| `claude-haiku-4.5` | 0.33 | +| `claude-haiku-4-5-20251001` | 0.33 | +| `claude-3-5-haiku` | 0.1 | +| `claude-3-haiku` | 0.1 | +| `claude-sonnet-4` | 1 | +| `claude-sonnet-4-20250514` | 1 | +| `claude-sonnet-4-5` | 6 | +| `claude-sonnet-4.5` | 6 | +| `claude-sonnet-4-5-20250929` | 6 | +| `claude-sonnet-4-6` | 9 | +| `claude-sonnet-4.6` | 9 | +| `claude-3-5-sonnet` | 1 | +| `claude-3-7-sonnet` | 1 | +| `claude-3-sonnet` | 1 | +| `claude-opus-4` | 5 | +| `claude-opus-4-20250514` | 5 | +| `claude-opus-4-1` | 5 | +| `claude-opus-4-1-20250805` | 5 | +| `claude-opus-4-5` | 15 | +| `claude-opus-4-5-20251101` | 15 | +| `claude-opus-4-6` | 27 | +| `claude-opus-4-7` | 27 | +| `claude-opus-4-8` | 27 | +| `claude-opus-4.5` | 15 | +| `claude-opus-4.6` | 27 | +| `claude-opus-4.6-fast` | 27 | +| `claude-opus-4.7` | 27 | +| `claude-opus-4.8` | 27 | +| `claude-3-5-opus` | 5 | +| `claude-3-opus` | 5 | + +### OpenAI + +| Model | Multiplier | +|-------|-----------| +| `gpt-4o-2024-05-13` | 0.33 | +| `gpt-4o-2024-08-06` | 0.33 | +| `gpt-4o-2024-11-20` | 0.33 | +| `gpt-4o-mini-2024-07-18` | 0.33 | +| `gpt-4.1-2025-04-14` | 1 | +| `gpt-41-copilot` | 1 | +| `gpt-4.1-mini` | 1 | +| `gpt-4.1-nano` | 1 | +| `gpt-4-turbo` | 1 | +| `gpt-4` | 1 | +| `gpt-4-0613` | 1 | +| `gpt-4-o-preview` | 1 | +| `gpt-3.5-turbo` | 0 | +| `gpt-3.5-turbo-0613` | 0 | +| `gpt-5` | 1 | +| `gpt-5-2025-08-07` | 1 | +| `gpt-5-search-api` | 1 | +| `gpt-5-search-api-2025-10-14` | 1 | +| `gpt-5-chat-latest` | 1 | +| `gpt-5-mini` | 0.33 | +| `gpt-5-mini-2025-08-07` | 0.33 | +| `gpt-5-nano` | 0.05 | +| `gpt-5-nano-2025-08-07` | 0.05 | +| `gpt-5-pro` | 2 | +| `gpt-5-pro-2025-10-06` | 2 | +| `gpt-5.1` | 3 | +| `gpt-5.1-2025-11-13` | 3 | +| `gpt-5.1-chat-latest` | 3 | +| `gpt-5-codex` | 1 | +| `gpt-5.1-codex` | 3 | +| `gpt-5.1-codex-mini` | 0.33 | +| `gpt-5.1-codex-max` | 3 | +| `gpt-5.1-codex-max-customsummarizer` | 3 | +| `gpt-5.2` | 3 | +| `gpt-5.2-2025-12-11` | 3 | +| `gpt-5.2-chat-latest` | 3 | +| `gpt-5.2-codex` | 3 | +| `gpt-5.2-pro` | 3 | +| `gpt-5.2-pro-2025-12-11` | 3 | +| `gpt-5.3-chat-latest` | 3 | +| `gpt-5.3-codex` | 6 | +| `gpt-5.3-codex-api-preview` | 6 | +| `gpt-5.3-codex-api-preview-preambles` | 6 | +| `gpt-5.4` | 6 | +| `gpt-5.4-2026-03-05` | 6 | +| `gpt-5.4-mini` | 6 | +| `gpt-5.4-mini-2026-03-17` | 6 | +| `gpt-5.4-nano-2026-03-17` | 6 | +| `gpt-5.4-pro` | 6 | +| `gpt-5.4-pro-2026-03-05` | 6 | +| `gpt-5.5` | 57 | +| `gpt-5.5-2026-04-23` | 57 | +| `gpt-5.5-pro` | 2 | +| `gpt-5.5-pro-2026-04-23` | 2 | + +### OpenAI Reasoning + +| Model | Multiplier | +|-------|-----------| +| `o1` | 3 | +| `o1-2024-12-17` | 3 | +| `o1-mini` | 0.5 | +| `o1-pro` | 10 | +| `o1-pro-2025-03-19` | 10 | +| `o3` | 3 | +| `o3-2025-04-16` | 3 | +| `o3-mini` | 0.5 | +| `o3-mini-2025-01-31` | 0.5 | +| `o3-pro` | 10 | +| `o3-pro-2025-06-10` | 10 | +| `o3-deep-research` | 3 | +| `o3-deep-research-2025-06-26` | 3 | +| `o4-mini` | 0.5 | +| `o4-mini-2025-04-16` | 0.5 | +| `o4-mini-deep-research` | 0.5 | +| `o4-mini-deep-research-2025-06-26` | 0.5 | + +### Google + +| Model | Multiplier | +|-------|-----------| +| `gemini-2.5-pro` | 1 | +| `gemini-2.5-pro-preview-tts` | 1 | +| `gemini-2.5-flash` | 0.2 | +| `gemini-2.5-flash-native-audio-latest` | 0.2 | +| `gemini-2.5-flash-native-audio-preview-09-2025` | 0.2 | +| `gemini-2.5-flash-native-audio-preview-12-2025` | 0.2 | +| `gemini-2.5-flash-preview-tts` | 0.2 | +| `gemini-2.5-flash-image` | 0.2 | +| `gemini-2.5-flash-lite` | 0.1 | +| `gemini-2.0-flash` | 0.1 | +| `gemini-2.0-flash-001` | 0.1 | +| `gemini-2.0-flash-lite` | 0.1 | +| `gemini-2.0-flash-lite-001` | 0.1 | +| `gemini-1.5-pro` | 1 | +| `gemini-1.5-flash` | 0.1 | +| `gemini-flash-latest` | 0.2 | +| `gemini-flash-lite-latest` | 0.1 | +| `gemini-pro-latest` | 1 | +| `gemini-3-flash-preview` | 0.33 | +| `gemini-3-pro-preview` | 6 | +| `gemini-3-pro-image` | 6 | +| `gemini-3-pro-image-preview` | 6 | +| `gemini-3.1-pro-preview` | 6 | +| `gemini-3.1-pro-preview-customtools` | 6 | +| `gemini-3.1-flash-live-preview` | 0.1 | +| `gemini-3.1-flash-lite` | 0.1 | +| `gemini-3.1-flash-lite-preview` | 0.1 | +| `gemini-3.1-flash-image` | 0.33 | +| `gemini-3.1-flash-image-preview` | 0.33 | +| `gemini-3.1-flash-tts-preview` | 0.1 | +| `gemini-3.5-flash` | 14 | +| `gemini-2.5-computer-use-preview` | 0.2 | +| `gemini-2.5-computer-use-preview-10-2025` | 0.2 | +| `gemini-robotics-er-1.5-preview` | 0.2 | +| `gemini-robotics-er-1.6-preview` | 0.2 | + +### Other + +| Model | Multiplier | +|-------|-----------| +| `antigravity-preview-05-2026` | 1 | +| `nano-banana-pro-preview` | 0.2 | +| `deep-research-max-preview-04-2026` | 1 | +| `deep-research-preview-04-2026` | 1 | +| `deep-research-pro-preview-12-2025` | 1 | +| `MAI-Code-1-Flash` | 0.33 | +| `gemma-4-26b-a4b-it` | 0.1 | +| `gemma-4-31b-it` | 0.2 | +| `grok-code-fast-1` | 0.33 | +| `raptor-mini` | 0.33 | From 3c76496f265a1656a993d7f61631c9cfc3ad9b74 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 11 Jun 2026 20:54:19 +0000 Subject: [PATCH 4/6] Polish hero slide scaling logic Co-authored-by: mnkiefer <8320933+mnkiefer@users.noreply.github.com> --- docs/src/components/WorkflowHero.astro | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/src/components/WorkflowHero.astro b/docs/src/components/WorkflowHero.astro index ef13985d77a..85952efe28b 100644 --- a/docs/src/components/WorkflowHero.astro +++ b/docs/src/components/WorkflowHero.astro @@ -77,6 +77,7 @@ function unmountFromHero() { /** @type {number | undefined} */ let autoplayTimer; const stageInset = 16; + const minViewportDimension = 1; const minScale = 0.1; function stopCarousel() { @@ -105,8 +106,8 @@ function unmountFromHero() { const devicePixelRatio = window.devicePixelRatio || 1; const baseViewport = page.getViewport({ scale: 1 }); - const availableWidth = Math.max(stage.clientWidth - stageInset, 1); - const availableHeight = Math.max(stage.clientHeight - stageInset, 1); + const availableWidth = Math.max(stage.clientWidth - stageInset, minViewportDimension); + const availableHeight = Math.max(stage.clientHeight - stageInset, minViewportDimension); const scale = Math.max( Math.min(availableWidth / baseViewport.width, availableHeight / baseViewport.height), minScale, @@ -251,8 +252,6 @@ function unmountFromHero() { z-index: 2; width: 100%; height: 100%; - max-width: 100%; - max-height: 100%; border-radius: 1rem; border: 0; background: transparent; From 6ea4e1a459f61daeeb8b829a4f6f276e33ef2eb4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 11 Jun 2026 20:58:00 +0000 Subject: [PATCH 5/6] Refine hero slide sizing cleanup Co-authored-by: mnkiefer <8320933+mnkiefer@users.noreply.github.com> --- docs/src/components/WorkflowHero.astro | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/src/components/WorkflowHero.astro b/docs/src/components/WorkflowHero.astro index 85952efe28b..b1b0099867a 100644 --- a/docs/src/components/WorkflowHero.astro +++ b/docs/src/components/WorkflowHero.astro @@ -76,9 +76,8 @@ function unmountFromHero() { let renderVersion = 0; /** @type {number | undefined} */ let autoplayTimer; - const stageInset = 16; - const minViewportDimension = 1; - const minScale = 0.1; + const minimumStageDimension = 1; + const minimumRenderScale = 0.1; function stopCarousel() { window.clearInterval(autoplayTimer); @@ -106,11 +105,14 @@ function unmountFromHero() { const devicePixelRatio = window.devicePixelRatio || 1; const baseViewport = page.getViewport({ scale: 1 }); - const availableWidth = Math.max(stage.clientWidth - stageInset, minViewportDimension); - const availableHeight = Math.max(stage.clientHeight - stageInset, minViewportDimension); + const stageStyles = window.getComputedStyle(stage); + const horizontalInset = parseFloat(stageStyles.paddingLeft) + parseFloat(stageStyles.paddingRight); + const verticalInset = parseFloat(stageStyles.paddingTop) + parseFloat(stageStyles.paddingBottom); + const availableWidth = Math.max(stage.clientWidth - horizontalInset, minimumStageDimension); + const availableHeight = Math.max(stage.clientHeight - verticalInset, minimumStageDimension); const scale = Math.max( Math.min(availableWidth / baseViewport.width, availableHeight / baseViewport.height), - minScale, + minimumRenderScale, ); const viewport = page.getViewport({ scale }); From 0a0d597a0e968199de8b26af01dbed621f4cc8b3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 11 Jun 2026 21:01:31 +0000 Subject: [PATCH 6/6] Address hero review feedback Co-authored-by: mnkiefer <8320933+mnkiefer@users.noreply.github.com> --- docs/src/components/WorkflowHero.astro | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/src/components/WorkflowHero.astro b/docs/src/components/WorkflowHero.astro index b1b0099867a..d85c0b17fa9 100644 --- a/docs/src/components/WorkflowHero.astro +++ b/docs/src/components/WorkflowHero.astro @@ -76,8 +76,8 @@ function unmountFromHero() { let renderVersion = 0; /** @type {number | undefined} */ let autoplayTimer; - const minimumStageDimension = 1; - const minimumRenderScale = 0.1; + const MINIMUM_STAGE_DIMENSION = 1; + const MINIMUM_RENDER_SCALE = 0.1; function stopCarousel() { window.clearInterval(autoplayTimer); @@ -106,13 +106,14 @@ function unmountFromHero() { const devicePixelRatio = window.devicePixelRatio || 1; const baseViewport = page.getViewport({ scale: 1 }); const stageStyles = window.getComputedStyle(stage); - const horizontalInset = parseFloat(stageStyles.paddingLeft) + parseFloat(stageStyles.paddingRight); - const verticalInset = parseFloat(stageStyles.paddingTop) + parseFloat(stageStyles.paddingBottom); - const availableWidth = Math.max(stage.clientWidth - horizontalInset, minimumStageDimension); - const availableHeight = Math.max(stage.clientHeight - verticalInset, minimumStageDimension); + const parseInset = (value) => Number.parseFloat(value) || 0; + const horizontalInset = parseInset(stageStyles.paddingLeft) + parseInset(stageStyles.paddingRight); + const verticalInset = parseInset(stageStyles.paddingTop) + parseInset(stageStyles.paddingBottom); + const availableWidth = Math.max(stage.clientWidth - horizontalInset, MINIMUM_STAGE_DIMENSION); + const availableHeight = Math.max(stage.clientHeight - verticalInset, MINIMUM_STAGE_DIMENSION); const scale = Math.max( Math.min(availableWidth / baseViewport.width, availableHeight / baseViewport.height), - minimumRenderScale, + MINIMUM_RENDER_SCALE, ); const viewport = page.getViewport({ scale });