Skip to content
Merged
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
19 changes: 19 additions & 0 deletions actions/setup/js/models.json
Original file line number Diff line number Diff line change
Expand Up @@ -515,6 +515,16 @@
"provider_type": "openai",
"wire_api": "responses"
},
"gpt-6-astra": {
"cost": {
"input": "0.001",
"output": "0.005",
Comment on lines +520 to +521
"cache_read": "0.0001",
"cache_write": "0.00125"
},
"provider_type": "openai",
"wire_api": "responses"
},
"raptor-mini": {
"cost": {
"input": "2.5e-07",
Expand Down Expand Up @@ -892,6 +902,15 @@
},
"provider_type": "openai"
},
"gpt-6-astra": {
"cost": {
"input": "0.001",
"output": "0.005",
"cache_read": "0.0001"
},
"provider_type": "openai",
"wire_api": "responses"
},
"gpt-image-1": {
"cost": {},
"provider_type": "openai"
Expand Down
19 changes: 19 additions & 0 deletions pkg/cli/data/models.json
Original file line number Diff line number Diff line change
Expand Up @@ -515,6 +515,16 @@
"provider_type": "openai",
"wire_api": "responses"
},
"gpt-6-astra": {
"cost": {
"input": "0.001",
"output": "0.005",
Comment on lines +520 to +521
"cache_read": "0.0001",
"cache_write": "0.00125"
},
"provider_type": "openai",
"wire_api": "responses"
},
"raptor-mini": {
"cost": {
"input": "2.5e-07",
Expand Down Expand Up @@ -892,6 +902,15 @@
},
"provider_type": "openai"
},
"gpt-6-astra": {
"cost": {
"input": "0.001",
"output": "0.005",
"cache_read": "0.0001"
},
"provider_type": "openai",
"wire_api": "responses"
},
"gpt-image-1": {
"cost": {},
"provider_type": "openai"
Expand Down
17 changes: 17 additions & 0 deletions pkg/cli/model_costs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,23 @@ func TestFindMaiCode11FlashPricing(t *testing.T) {
assert.InDelta(t, 0.00000025, pricing["cache_write"], 1e-12)
}

func TestFindGPT6AstraPricing(t *testing.T) {
t.Parallel()
for _, provider := range []string{"github-copilot", "openai"} {
t.Run(provider, func(t *testing.T) {
t.Parallel()
pricing, ok := findModelPricing(provider, "gpt-6-astra")
require.True(t, ok)
assert.InDelta(t, 0.001, pricing["input"], 1e-12)
assert.InDelta(t, 0.005, pricing["output"], 1e-12)
assert.InDelta(t, 0.0001, pricing["cache_read"], 1e-12)
if provider == "github-copilot" {
assert.InDelta(t, 0.00125, pricing["cache_write"], 1e-12)
}
})
}
}

func TestFindGrok45CacheReadPricing(t *testing.T) {
t.Parallel()
pricing, ok := findModelPricing("github-copilot", "grok-4.5")
Expand Down
5 changes: 3 additions & 2 deletions pkg/workflow/data/model_aliases.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"gpt-5": ["copilot/gpt-5*", "openai/gpt-5*"],
"gpt-5.5": ["copilot/gpt-5.5*", "openai/gpt-5.5*"],
"gpt-5.6": ["copilot/gpt-5.6*", "openai/gpt-5.6*"],
"gpt-6": ["copilot/gpt-6*", "openai/gpt-6*"],
"gpt-5.4": ["copilot/gpt-5.4*", "openai/gpt-5.4*"],
"gpt-5.3": ["copilot/gpt-5.3*", "openai/gpt-5.3*"],
"gpt-5.2": ["copilot/gpt-5.2*", "openai/gpt-5.2*"],
Expand Down Expand Up @@ -38,10 +39,10 @@
"evals": ["small"],
"mini": ["haiku", "gpt-5-mini", "gpt-5-nano", "gemini-flash-lite"],
"fable": ["copilot/*fable*", "anthropic/*fable*"],
"large": ["sonnet", "gpt-5-pro", "gpt-5", "gemini-pro"],
"large": ["sonnet", "gpt-6", "gpt-5-pro", "gpt-5", "gemini-pro"],
"auto": ["copilot/auto", "large"],
"any": ["copilot/*", "anthropic/*", "openai/*", "google/*", "gemini/*"],
"agent": ["sonnet-6x", "gpt-5.4", "gpt-5.5", "gpt-5.6", "gpt-5.3", "gemini-pro", "any"],
"agent": ["sonnet-6x", "gpt-6", "gpt-5.4", "gpt-5.5", "gpt-5.6", "gpt-5.3", "gemini-pro", "any"],
"small-agent": ["haiku", "gpt-5-mini", "gemini-flash"],
"copilot": ["agent"],
"claude": ["agent"],
Expand Down
9 changes: 5 additions & 4 deletions pkg/workflow/model_aliases_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,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",
"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", "gpt-6", "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", "computer-use", "robotics", "deep-research",
"nano-banana",
"vision", "image-generation",
Expand All @@ -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", "gemini-3.7-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", "gpt-6", "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
Expand Down Expand Up @@ -79,13 +79,14 @@ func TestBuiltinModelAliases(t *testing.T) {
// Meta-aliases reference other alias names (resolved recursively by AWF).
assert.Equal(t, []string{"haiku", "gpt-5-mini", "gpt-5-nano", "gemini-flash-lite"}, aliases["mini"], "mini should reference haiku, gpt-5-mini, gpt-5-nano, and gemini-flash-lite")
assert.Equal(t, []string{"haiku", "gpt-5-mini", "gemini-flash-lite", "mini"}, aliases["summarization"], "summarization should reference fast/lightweight models")
assert.Equal(t, []string{"sonnet", "gpt-5-pro", "gpt-5", "gemini-pro"}, aliases["large"], "large should list sonnet-range pricing models: sonnet, gpt-5-pro, gpt-5, and gemini-pro")
assert.Equal(t, []string{"copilot/gpt-6*", "openai/gpt-6*"}, aliases["gpt-6"], "gpt-6 should map to copilot/openai gpt-6 family")
assert.Equal(t, []string{"sonnet", "gpt-6", "gpt-5-pro", "gpt-5", "gemini-pro"}, aliases["large"], "large should list sonnet-range pricing models including gpt-6")
assert.Equal(t, []string{"copilot/auto", "large"}, aliases["auto"], "auto should pass copilot/auto as-is to the Copilot API and fall back to large for other providers")
assert.Equal(t, []string{"copilot/*fable*", "anthropic/*fable*"}, aliases["fable"], "fable should map to provider-specific fable patterns")
assert.Equal(t, []string{"copilot/gpt-5.6*", "openai/gpt-5.6*"}, aliases["gpt-5.6"], "gpt-5.6 should map to provider-specific gpt-5.6 patterns")
assert.Equal(t, []string{"copilot/gemini-omni*", "google/gemini-omni*", "gemini/gemini-omni*"}, aliases["gemini-omni"], "gemini-omni should map to provider-specific gemini-omni patterns")
assert.Equal(t, []string{"copilot/*", "anthropic/*", "openai/*", "google/*", "gemini/*"}, aliases["any"], "any should provide a provider-wide catch-all fallback chain")
assert.Equal(t, []string{"sonnet-6x", "gpt-5.4", "gpt-5.5", "gpt-5.6", "gpt-5.3", "gemini-pro", "any"}, aliases["agent"], "agent should default to the configured high-capability fallback chain before any-model fallback")
assert.Equal(t, []string{"sonnet-6x", "gpt-6", "gpt-5.4", "gpt-5.5", "gpt-5.6", "gpt-5.3", "gemini-pro", "any"}, aliases["agent"], "agent should default to the configured high-capability fallback chain before any-model fallback")
assert.Equal(t, []string{"haiku", "gpt-5-mini", "gemini-flash"}, aliases["small-agent"], "small-agent should default to the small/fast model fallback chain")
assert.Equal(t, []string{"small"}, aliases["detection"], "detection should resolve through small-sized models")
assert.Equal(t, []string{"small"}, aliases["evals"], "evals should resolve through small-sized models")
Expand Down
Loading