diff --git a/.changeset/patch-model-inventory-2026-08-16.md b/.changeset/patch-model-inventory-2026-08-16.md new file mode 100644 index 00000000000..76d45d4f364 --- /dev/null +++ b/.changeset/patch-model-inventory-2026-08-16.md @@ -0,0 +1,5 @@ +--- +"gh-aw": patch +--- + +Model alias inventory update for 2026-08-16: add `grok-4.6` ($2/1M input, $6/1M output, $0.50/1M cache read) and `gemini-3.7-flash` ($0.75/1M input, $3.75/1M output, $0.075/1M cache read) to the `github-copilot` provider in `models.json`; add a `gemini-3.7-flash` version-specific alias for the Gemini 3.7 Flash family. diff --git a/actions/setup/js/models.json b/actions/setup/js/models.json index 0b5bcb6135e..3cc1e0c5db2 100644 --- a/actions/setup/js/models.json +++ b/actions/setup/js/models.json @@ -395,6 +395,15 @@ "provider_type": "openai", "wire_api": "completions" }, + "gemini-3.7-flash": { + "cost": { + "input": "7.5e-07", + "output": "3.75e-06", + "cache_read": "7.5e-08" + }, + "provider_type": "openai", + "wire_api": "completions" + }, "gpt-4.1": { "cost": { "input": "2e-06", @@ -557,6 +566,15 @@ }, "provider_type": "openai", "wire_api": "completions" + }, + "grok-4.6": { + "cost": { + "input": "2e-06", + "output": "6e-06", + "cache_read": "5e-07" + }, + "provider_type": "openai", + "wire_api": "completions" } } }, diff --git a/pkg/cli/data/models.json b/pkg/cli/data/models.json index 0b5bcb6135e..3cc1e0c5db2 100644 --- a/pkg/cli/data/models.json +++ b/pkg/cli/data/models.json @@ -395,6 +395,15 @@ "provider_type": "openai", "wire_api": "completions" }, + "gemini-3.7-flash": { + "cost": { + "input": "7.5e-07", + "output": "3.75e-06", + "cache_read": "7.5e-08" + }, + "provider_type": "openai", + "wire_api": "completions" + }, "gpt-4.1": { "cost": { "input": "2e-06", @@ -557,6 +566,15 @@ }, "provider_type": "openai", "wire_api": "completions" + }, + "grok-4.6": { + "cost": { + "input": "2e-06", + "output": "6e-06", + "cache_read": "5e-07" + }, + "provider_type": "openai", + "wire_api": "completions" } } }, diff --git a/pkg/cli/model_costs_test.go b/pkg/cli/model_costs_test.go index 0b1aadfe05f..6cd75b3e90a 100644 --- a/pkg/cli/model_costs_test.go +++ b/pkg/cli/model_costs_test.go @@ -42,6 +42,22 @@ func TestFindGrok45CacheReadPricing(t *testing.T) { assert.InDelta(t, 0.0000005, pricing["cache_read"], 1e-12) } +func TestFindGrok46Pricing(t *testing.T) { + pricing, ok := findModelPricing("github-copilot", "grok-4.6") + require.True(t, ok) + assert.InDelta(t, 0.000002, pricing["input"], 1e-12) + assert.InDelta(t, 0.000006, pricing["output"], 1e-12) + assert.InDelta(t, 0.0000005, pricing["cache_read"], 1e-12) +} + +func TestFindGemini37FlashPricing(t *testing.T) { + pricing, ok := findModelPricing("github-copilot", "gemini-3.7-flash") + require.True(t, ok) + assert.InDelta(t, 0.00000075, pricing["input"], 1e-12) + assert.InDelta(t, 0.00000375, pricing["output"], 1e-12) + assert.InDelta(t, 0.000000075, pricing["cache_read"], 1e-12) +} + func TestComputeModelInferenceAIC(t *testing.T) { aic := computeModelInferenceAIC("anthropic", "claude-sonnet-4.6", 1000, 200, 400, 50, 25) assert.InDelta(t, 0.54825, aic, 1e-9) diff --git a/pkg/workflow/data/model_aliases.json b/pkg/workflow/data/model_aliases.json index 5c6081f58ab..77605a0adc3 100644 --- a/pkg/workflow/data/model_aliases.json +++ b/pkg/workflow/data/model_aliases.json @@ -53,6 +53,7 @@ "gemini-3.1-flash": ["copilot/gemini-3.1*flash*", "google/gemini-3.1*flash*", "gemini/gemini-3.1*flash*"], "gemini-3.5-flash": ["copilot/gemini-3.5*flash*", "google/gemini-3.5*flash*", "gemini/gemini-3.5*flash*"], "gemini-3.6-flash": ["copilot/gemini-3.6*flash*", "google/gemini-3.6*flash*", "gemini/gemini-3.6*flash*"], + "gemini-3.7-flash": ["copilot/gemini-3.7*flash*", "google/gemini-3.7*flash*", "gemini/gemini-3.7*flash*"], "antigravity": ["copilot/antigravity*", "google/antigravity*", "gemini/antigravity*"], "nano-banana": ["copilot/nano-banana*", "google/nano-banana*", "gemini/nano-banana*"], "summarization": ["haiku", "gpt-5-mini", "gemini-flash-lite", "mini"], diff --git a/pkg/workflow/model_aliases_test.go b/pkg/workflow/model_aliases_test.go index 4e260dcf00a..50f38f9128c 100644 --- a/pkg/workflow/model_aliases_test.go +++ b/pkg/workflow/model_aliases_test.go @@ -18,7 +18,7 @@ func TestBuiltinModelAliases(t *testing.T) { expectedFamilies := []string{ "sonnet", "sonnet-6x", "haiku", "opus", "opusplan", "gpt-5", "gpt-5.5", "gpt-5.4", "gpt-5.3", "gpt-5.2", "gpt-5.1", "gpt-5-mini", "gpt-5-nano", "gpt-5-codex", "gpt-5-pro", "mai-code", "mai-code-1-flash-picker", "reasoning", - "gemini-flash", "gemini-flash-lite", "gemini-pro", "gemini-3-pro", "gemini-3-flash", "gemini-3.1-pro", "gemini-3.1-flash", "gemini-3.5-flash", "gemini-3.6-flash", "antigravity", "lyria", "computer-use", "robotics", "deep-research", + "gemini-flash", "gemini-flash-lite", "gemini-pro", "gemini-3-pro", "gemini-3-flash", "gemini-3.1-pro", "gemini-3.1-flash", "gemini-3.5-flash", "gemini-3.6-flash", "gemini-3.7-flash", "antigravity", "lyria", "computer-use", "robotics", "deep-research", "nano-banana", "vision", "image-generation", "grok", @@ -33,7 +33,7 @@ func TestBuiltinModelAliases(t *testing.T) { // Vendor aliases should include at least one copilot/* pattern. // Meta-aliases (mini, large, auto) reference other alias names and are excluded here. - vendorFamilies := []string{"sonnet", "sonnet-6x", "haiku", "opus", "gpt-5", "gpt-5.5", "gpt-5.4", "gpt-5.3", "gpt-5.2", "gpt-5-mini", "gpt-5-nano", "gpt-5-codex", "gpt-5-pro", "mai-code", "mai-code-1-flash-picker", "reasoning", "gemini-flash", "gemini-flash-lite", "gemini-pro", "gemini-3-pro", "gemini-3-flash", "gemini-3.1-pro", "gemini-3.1-flash", "gemini-3.5-flash", "gemini-3.6-flash", "antigravity", "lyria", "nano-banana", "computer-use", "robotics", "deep-research", "raptor-mini", "grok"} + vendorFamilies := []string{"sonnet", "sonnet-6x", "haiku", "opus", "gpt-5", "gpt-5.5", "gpt-5.4", "gpt-5.3", "gpt-5.2", "gpt-5-mini", "gpt-5-nano", "gpt-5-codex", "gpt-5-pro", "mai-code", "mai-code-1-flash-picker", "reasoning", "gemini-flash", "gemini-flash-lite", "gemini-pro", "gemini-3-pro", "gemini-3-flash", "gemini-3.1-pro", "gemini-3.1-flash", "gemini-3.5-flash", "gemini-3.6-flash", "gemini-3.7-flash", "antigravity", "lyria", "nano-banana", "computer-use", "robotics", "deep-research", "raptor-mini", "grok"} for _, family := range vendorFamilies { patterns := aliases[family] hasCopilot := false @@ -60,6 +60,7 @@ func TestBuiltinModelAliases(t *testing.T) { assert.Equal(t, []string{"copilot/gpt-5.1*", "openai/gpt-5.1*"}, aliases["gpt-5.1"], "gpt-5.1 should map to copilot/openai gpt-5.1 family") assert.Equal(t, []string{"copilot/gemini-3.5*flash*", "google/gemini-3.5*flash*", "gemini/gemini-3.5*flash*"}, aliases["gemini-3.5-flash"], "gemini-3.5-flash should map to provider-specific Gemini 3.5 Flash patterns") assert.Equal(t, []string{"copilot/gemini-3.6*flash*", "google/gemini-3.6*flash*", "gemini/gemini-3.6*flash*"}, aliases["gemini-3.6-flash"], "gemini-3.6-flash should map to provider-specific Gemini 3.6 Flash patterns") + assert.Equal(t, []string{"copilot/gemini-3.7*flash*", "google/gemini-3.7*flash*", "gemini/gemini-3.7*flash*"}, aliases["gemini-3.7-flash"], "gemini-3.7-flash should map to provider-specific Gemini 3.7 Flash patterns") assert.Contains(t, aliases["antigravity"], "copilot/antigravity*", "antigravity should include copilot/ provider pattern") assert.Equal(t, []string{"google/lyria*", "gemini/lyria*", "copilot/lyria*"}, aliases["lyria"], "lyria should map to provider-specific Lyria patterns") assert.Equal(t, []string{"copilot/nano-banana*", "google/nano-banana*", "gemini/nano-banana*"}, aliases["nano-banana"], "nano-banana should map to provider-specific patterns")