openclaw - ✅(Solved) Fix github-copilot: claude-opus-4.6 in DEFAULT_MODEL_IDS triggers 400 model_not_supported and cooldowns the entire provider [1 pull requests, 1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#75349Fetched 2026-05-01 05:34:51
View on GitHub
Comments
1
Participants
2
Timeline
8
Reactions
2
Timeline (top)
subscribed ×5commented ×1cross-referenced ×1mentioned ×1

Error Message

"error": { [agent/embedded] embedded run failover decision: stage=assistant decision=fallback_model reason=format from=github-copilot/claude-opus-4.6 rawError=400 {"error":{"message":"The requested model is not supported.","code":"model_not_supported","param":"model","type":"invalid_request_error"}}

Root Cause

extensions/github-copilot/models-defaults.js:

const DEFAULT_MODEL_IDS = [
    \"claude-haiku-4.5\",
    \"claude-opus-4.5\",
    \"claude-opus-4.6\",   // <-- no longer in Copilot's catalog
    \"claude-opus-4.7\",
    \"claude-sonnet-4\",
    \"claude-sonnet-4.6\",
    \"claude-sonnet-4.5\",
    ...
];

opus-4.6 was a valid Copilot Claude model when this list was authored but Copilot's offering rotates. The list is stale.

PR fix notes

PR #75391: fix(copilot): remove stale claude-opus-4.6 from default model IDs

Description (problem / solution / changelog)

Summary

Removes the stale claude-opus-4.6 model ID from the DEFAULT_MODEL_IDS array in the github-copilot extension.

Problem

GitHub Copilot no longer supports claude-opus-4.6. Having an unsupported model in the hardcoded defaults triggers a provider-wide cooldown when Copilot rejects the model, blocking the entire provider from working.

Fix

Remove "claude-opus-4.6" from the DEFAULT_MODEL_IDS array in extensions/github-copilot/models-defaults.ts.

Testing

  • Verified the change compiles cleanly against the extension's tsconfig.json
  • No other files reference claude-opus-4.6 in the github-copilot extension

Closes #75349

Changed files

  • extensions/github-copilot/models-defaults.ts (modified, +0/-1)

Code Example

{
  \"error\": {
    \"message\": \"The requested model is not supported.\",
    \"code\": \"model_not_supported\",
    \"param\": \"model\",
    \"type\": \"invalid_request_error\"
  }
}

---

$ openclaw --version
OpenClaw 2026.4.29 (a448042)

$ openclaw agent --agent main --model github-copilot/claude-opus-4.6 --message \"ping\"
EMBEDDED FALLBACK: Gateway agent failed; running embedded agent: ...

---

[agent/embedded] embedded run failover decision: stage=assistant decision=fallback_model reason=format from=github-copilot/claude-opus-4.6 rawError=400 {\"error\":{\"message\":\"The requested model is not supported.\",\"code\":\"model_not_supported\",\"param\":\"model\",\"type\":\"invalid_request_error\"}}
[agent/embedded] auth profile failure state updated: profile=sha256:... provider=github-copilot reason=format window=cooldown

---

const DEFAULT_MODEL_IDS = [
    \"claude-haiku-4.5\",
    \"claude-opus-4.5\",
    \"claude-opus-4.6\",   // <-- no longer in Copilot's catalog
    \"claude-opus-4.7\",
    \"claude-sonnet-4\",
    \"claude-sonnet-4.6\",
    \"claude-sonnet-4.5\",
    ...
];

---

if (errorCode === \"model_not_supported\") {
    markModelUnsupportedForProvider(provider, modelId);
    // do NOT cooldown the provider profile
} else {
    standardProviderCooldown(...);
}
RAW_BUFFERClick to expand / collapse

Bug

claude-opus-4.6 is listed in DEFAULT_MODEL_IDS in extensions/github-copilot/models-defaults.js (v2026.4.29), but GitHub Copilot's API has dropped the model from its supported list. Any request to github-copilot/claude-opus-4.6 returns:

{
  \"error\": {
    \"message\": \"The requested model is not supported.\",
    \"code\": \"model_not_supported\",
    \"param\": \"model\",
    \"type\": \"invalid_request_error\"
  }
}

OpenClaw's failure handling treats this 400 model_not_supported as a provider-level failure, marks the entire github-copilot profile in cooldown, and cascades the user's fallback chain through every other model — even though only opus-4.6 is the unsupported one.

Reproduction

$ openclaw --version
OpenClaw 2026.4.29 (a448042)

$ openclaw agent --agent main --model github-copilot/claude-opus-4.6 --message \"ping\"
EMBEDDED FALLBACK: Gateway agent failed; running embedded agent: ...

gateway.err.log:

[agent/embedded] embedded run failover decision: stage=assistant decision=fallback_model reason=format from=github-copilot/claude-opus-4.6 rawError=400 {\"error\":{\"message\":\"The requested model is not supported.\",\"code\":\"model_not_supported\",\"param\":\"model\",\"type\":\"invalid_request_error\"}}
[agent/embedded] auth profile failure state updated: profile=sha256:... provider=github-copilot reason=format window=cooldown

In my logs over a 7-day window:

  • 34 model_not_supported rejections, all for claude-opus-4.6
  • Each one triggered a provider-wide cooldown that cascaded to subsequent calls (haiku-4.5, sonnet-4.6, opus-4.7), which then logged No available auth profile for github-copilot (all in cooldown or unavailable) — making it look like every Copilot model was broken.

Root cause

extensions/github-copilot/models-defaults.js:

const DEFAULT_MODEL_IDS = [
    \"claude-haiku-4.5\",
    \"claude-opus-4.5\",
    \"claude-opus-4.6\",   // <-- no longer in Copilot's catalog
    \"claude-opus-4.7\",
    \"claude-sonnet-4\",
    \"claude-sonnet-4.6\",
    \"claude-sonnet-4.5\",
    ...
];

opus-4.6 was a valid Copilot Claude model when this list was authored but Copilot's offering rotates. The list is stale.

Two issues, really

  1. Stale catalog defaults. claude-opus-4.6 (and possibly claude-opus-4.5, claude-sonnet-4, claude-sonnet-4.5 — would need to verify on a fresh Copilot account) should be removed or made conditional on a runtime catalog probe.

  2. Disproportionate failure handling. A single model_not_supported response for one model should not cooldown the entire provider profile. model_not_supported is a per-model concern, not a per-profile one. Suggest classifying this rejection differently (model-level cooldown only) so the fallback chain can still try other models on the same provider.

Suggested fix

Short-term (catalog): Drop claude-opus-4.6 from DEFAULT_MODEL_IDS. Add a comment that this list is best-effort and intentionally conservative.

Better (catalog): Probe Copilot's /v1/models (or the equivalent) at agent init and dynamically populate the model list rather than hardcoding.

Failure handling: Special-case code: \"model_not_supported\" in the auth-state cooldown logic to mark just the model unavailable on this provider, not the whole provider profile. Pseudocode:

if (errorCode === \"model_not_supported\") {
    markModelUnsupportedForProvider(provider, modelId);
    // do NOT cooldown the provider profile
} else {
    standardProviderCooldown(...);
}

Severity

Combines with #75348 (eager_input_streaming) to make Copilot effectively unusable for Anthropic models on v2026.4.29 and silently bills paid providers in the fallback chain. A user reported ~$5/day OpenRouter costs traced to this chain reaction.

extent analysis

TL;DR

Remove claude-opus-4.6 from DEFAULT_MODEL_IDS and update failure handling to cooldown only the specific model, not the entire provider profile.

Guidance

  • Update extensions/github-copilot/models-defaults.js to remove claude-opus-4.6 from DEFAULT_MODEL_IDS.
  • Modify the auth-state cooldown logic to special-case model_not_supported errors, marking only the specific model as unavailable, not the entire provider profile.
  • Consider probing Copilot's model catalog at runtime to dynamically populate the model list, reducing the likelihood of stale defaults.
  • Verify the fix by checking the logs for model_not_supported errors and ensuring that only the specific model is marked as unavailable, without triggering a provider-wide cooldown.

Example

if (errorCode === "model_not_supported") {
    markModelUnsupportedForProvider(provider, modelId);
    // do NOT cooldown the provider profile
} else {
    standardProviderCooldown(...);
}

Notes

This fix assumes that the model_not_supported error is the primary cause of the issue. Additional logging or debugging may be necessary to confirm this.

Recommendation

Apply the suggested fix to update the DEFAULT_MODEL_IDS and modify the failure handling logic. This should prevent the disproportionate cooldown of the entire provider profile and allow the fallback chain to try other models on the same provider.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING