Skip to content

HydraFusion (policy max): router returns models outside the policy universe, then silently falls back to gpt-5.6-luna #5097

Description

@neumaennl

Describe the bug

With HydraFusion selected (policy max), most turns fail at the routing step and silently continue on a lower-tier model. The UI only shows:

HydraFusion routing failed; continuing with gpt-5.6-luna

The session log records the reason:

{
  "type": "session.fusion_route_failed",
  "syntheticModel": "hydrafusion",
  "policy": "max",
  "reason": "invalid_response",
  "errorMessage": "fusion routing returned an invalid response: fusion route references a model outside the selected policy universe: gpt-6.1-sol",
  "fallbackModel": "gpt-5.6-luna"
}

In one session over two days there were 10 routing failures against 3 successful routes:

Model returned by the router Failures
gpt-6.1-sol 9
claude-sonnet-5.5 1

Both rejected models are enabled for the account. The model list the runtime publishes to VS Code in the same session lists gpt-6.1-sol (and claude-sonnet-5.5) with "policyState": "enabled". The server-side router (routeSource: "capi_plan") therefore seems to work with a different model set than the runtime's "policy universe" for max. I couldn't find out how the runtime builds that set.

There are two problems here:

  1. Router and runtime disagree on the allowed models. The router keeps choosing models the runtime then rejects, so most turns never run as HydraFusion.
  2. The fallback is a silent capability downgrade. When the route is rejected, the turn runs on gpt-5.6-luna instead. A user who picked HydraFusion with the max policy for a demanding task (planning, in my case) ends up on a much cheaper model, with only a transient warning.

A related observation: the routes that did succeed under max also only used gpt-5.6-luna (primary/fallback/follow-up) and gpt-5.6-terra (secondary) with the Critique pattern. Higher-tier models such as claude-opus-5.5, which is enabled for the account, were never chosen. Those resolved routes also report "policyVersion": null and "modelUniverseVersion": null, which may be relevant to the mismatch.

Affected version

Copilot runtime 1.0.92-4.unstable.r37397886721.gad270aa (bundled @github/copilot-sdk-linux-x64 1.0.17-unstable.37397886721.gad270aa)

Steps to reproduce the behavior

  1. In VS Code agent mode (Copilot SDK agent host), select HydraFusion as the model. The routing policy is max.
  2. Send a normal multi-step coding/planning request.
  3. The warning "HydraFusion routing failed; continuing with gpt-5.6-luna" appears for most turns.
  4. The session's events.jsonl contains session.fusion_route_failed events with reason: "invalid_response" and "fusion route references a model outside the selected policy universe: ".

This happened consistently over two days. I haven't tested other policies.

Expected behavior

  • The router only returns models that are inside the runtime's policy universe for the selected policy. Models the account has enabled (such as gpt-6.1-sol) should either be in the max universe or not be routed to.
  • If a route is invalid anyway, the fallback should not silently downgrade capability. Either fall back to a model of comparable tier for the selected policy, or fail the turn with a clear, retryable error so the user can pick a model.
  • Ideally, the UI makes it obvious that the turn did not run as HydraFusion.

Additional context

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions