You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
AWF's host-side model validation (src/copilot-model.ts, validateCopilotModel()) rejects mai-code-1-flash before any container starts:
Error: model 'mai-code-1-flash' is retired or unsupported.
This is the same class of bug as #5752 (claude-sonnet-5 missing from the same allowlist, fixed in PR #5756 / AWF v0.27.21) — a model that exists and is already priced elsewhere in this same repo is missing from SUPPORTED_COPILOT_MODELS, and the generic "not in our list" case is worded as if the model were retired.
Root cause
mai-code-1-flash is not in SUPPORTED_COPILOT_MODELS (src/copilot-model.ts), so validateCopilotModel() falls through to the generic unsupported path. It doesn't hit RETIRED_COPILOT_MODEL_ALIASES either (that map only has real deprecation entries), and no fuzzy suggestion is offered (suggestionFor()'s Levenshtein cutoff is 6, and nothing in the current allowlist is close enough to mai-code-1-flash) — so the message says "retired or unsupported" with no alternative suggested, which is the least informative version of this failure mode.
Despite being absent from the CLI-validation allowlist, mai-code-1-flash is already a recognized, priced model elsewhere in this repo:
pkg/workflow/data/model_aliases.json (in github/gh-aw, the compiler repo): the mai-code family alias already matches copilot/MAI-Code*, copilot/mai-code*, openai/MAI-Code*
So two other parts of the toolchain already know this model exists and how to price/route it; only the host-side CLI gate doesn't.
Reproduction
Configure a workflow's Copilot engine with COPILOT_MODEL=mai-code-1-flash.
Given this is the second time a model has been priced/aliased elsewhere in the toolchain before making it into this specific allowlist, it might be worth having something (a lint check, a shared source of truth, or generating this list from the same data ai-credits-pricing.js/model_aliases.json already encode) so the three lists can't drift independently again. Sync Copilot model allowlist with model API mapping #5756's own description flagged the two-source-of-truth problem for docs/model-api-mapping.json vs. this allowlist — this is now a third list with its own version of the same model, so unifying feels increasingly worth it rather than patching each drift as it's found.
Version info
gh-aw-firewall: reproduced on v0.27.16 (container image tag; this ran on the atos-pr-review canary workflow, which deliberately tracks native/unpinned AWF rather than this fleet's usual v0.25.55 pin)
Summary
AWF's host-side model validation (
src/copilot-model.ts,validateCopilotModel()) rejectsmai-code-1-flashbefore any container starts:This is the same class of bug as #5752 (
claude-sonnet-5missing from the same allowlist, fixed in PR #5756 / AWF v0.27.21) — a model that exists and is already priced elsewhere in this same repo is missing fromSUPPORTED_COPILOT_MODELS, and the generic "not in our list" case is worded as if the model were retired.Root cause
mai-code-1-flashis not inSUPPORTED_COPILOT_MODELS(src/copilot-model.ts), sovalidateCopilotModel()falls through to the generic unsupported path. It doesn't hitRETIRED_COPILOT_MODEL_ALIASESeither (that map only has real deprecation entries), and no fuzzy suggestion is offered (suggestionFor()'s Levenshtein cutoff is 6, and nothing in the current allowlist is close enough tomai-code-1-flash) — so the message says "retired or unsupported" with no alternative suggested, which is the least informative version of this failure mode.Despite being absent from the CLI-validation allowlist,
mai-code-1-flashis already a recognized, priced model elsewhere in this repo:containers/api-proxy/ai-credits-pricing.js:'mai-code-1-flash': { input: 0.75, cachedInput: 0.075, cacheWrite: null, output: 4.50 }pkg/workflow/data/model_aliases.json(ingithub/gh-aw, the compiler repo): themai-codefamily alias already matchescopilot/MAI-Code*,copilot/mai-code*,openai/MAI-Code*So two other parts of the toolchain already know this model exists and how to price/route it; only the host-side CLI gate doesn't.
Reproduction
COPILOT_MODEL=mai-code-1-flash.copilot-model.tshost-side gate (reproduced on v0.27.16 — the same gate Sync Copilot model allowlist with model API mapping #5756 patched for other models).Suggested fix
mai-code-1-flashtoSUPPORTED_COPILOT_MODELS, following the same pattern as PR Sync Copilot model allowlist with model API mapping #5756.ai-credits-pricing.js/model_aliases.jsonalready encode) so the three lists can't drift independently again. Sync Copilot model allowlist with model API mapping #5756's own description flagged the two-source-of-truth problem fordocs/model-api-mapping.jsonvs. this allowlist — this is now a third list with its own version of the same model, so unifying feels increasingly worth it rather than patching each drift as it's found.Version info
gh-aw-firewall: reproduced on v0.27.16 (container image tag; this ran on theatos-pr-reviewcanary workflow, which deliberately tracks native/unpinned AWF rather than this fleet's usual v0.25.55 pin)gh-awcompiler: v0.82.1SUPPORTED_COPILOT_MODELSallowlist insrc/copilot-model.tsis out of sync withdocs/model-api-mapping.json— rejects valid models as "retired" #5752 / PR Sync Copilot model allowlist with model API mapping #5756 (same bug class, different model)