router-for-me/CLIProxyAPI · error
unsupported Codex Alpha Search model route target %q (%q)
Error message
unsupported Codex Alpha Search model route target %q (%q)
What it means
Thrown while resolving the model for a Codex Alpha Search request. A plugin handled RouteModel, but the route target it returned is not a provider route pointing at the 'codex' provider. The server only accepts TargetKind == pluginapi.ModelRouteTargetProvider with Target == "codex" for this endpoint, so any other target kind (e.g. a model rewrite or a different provider) is rejected.
Source
Thrown at internal/api/server_routes.go:237
metadata := map[string]any{
coreexecutor.RequestedModelMetadataKey: model,
}
if requestPath != "" {
metadata[coreexecutor.RequestPathMetadataKey] = requestPath
}
resp, handled := host.RouteModel(ctx, pluginapi.ModelRouteRequest{
SourceFormat: codexAlphaSearchSourceFormat,
RequestedModel: model,
Headers: headers,
Query: queryValues,
Body: body,
Metadata: metadata,
})
if !handled || !resp.Handled {
return model, nil
}
if resp.TargetKind != pluginapi.ModelRouteTargetProvider || !strings.EqualFold(strings.TrimSpace(resp.Target), "codex") {
return "", fmt.Errorf("unsupported Codex Alpha Search model route target %q (%q)", resp.TargetKind, resp.Target)
}
if targetModel := strings.TrimSpace(resp.TargetModel); targetModel != "" {
return targetModel, nil
}
return model, nil
}
func sanitizeCodexAlphaSearchBody(body []byte) []byte {
var payload map[string]json.RawMessage
if errUnmarshal := json.Unmarshal(body, &payload); errUnmarshal != nil || payload == nil {
return body
}
removed := false
for _, field := range []string{"prompt_cache_key", "prompt_cache_retention"} {
if _, exists := payload[field]; exists {
delete(payload, field)
removed = trueView on GitHub (pinned to 78f0c4079e)
Solutions
- Update the plugin's route rules so requests sourced from Codex Alpha Search either return Target 'codex' with TargetKind ModelRouteTargetProvider, or return handled=false to let the server use the original model
- Check the plugin configuration for model-route entries whose source pattern accidentally matches the alpha search endpoint
- Temporarily disable the routing plugin to confirm it is the source of the redirect
Example fix
// before (plugin)
return ModelRouteResponse{Handled: true, TargetKind: "model", Target: "gpt-5"}, true
// after (plugin)
return ModelRouteResponse{Handled: true, TargetKind: pluginapi.ModelRouteTargetProvider, Target: "codex", TargetModel: "gpt-5"}, true Defensive patterns
Strategy: validation
Try / catch
if _, err := resolveCodexAlphaSearchModel(...); err != nil && strings.Contains(err.Error(), "unsupported Codex Alpha Search model route target") {
// plugin misroute: log target kind/target and bypass plugin routing for this request
} Prevention
- Keep Codex-sourced routes out of cross-provider plugin rule patterns
- Pin plugin versions and test route tables after plugin upgrades
- Log TargetKind/Target on route rejection to identify the offending rule quickly
When it happens
Trigger: A loaded plugin's RouteModel hook returns handled=true with TargetKind other than ModelRouteTargetProvider, or Target set to a provider name other than 'codex' (e.g. 'gemini', 'openrouter'), while a Codex Alpha Search request is being routed.
Common situations: Installing a third-party routing plugin that rewrites all model requests to a different provider; misconfiguring a plugin's route table so the codex alpha search path matches a cross-provider rule; plugin version change that altered TargetKind semantics.
Related errors
- codex.live-media-relay.max-sessions must not be negative
- codex.live-media-relay UDP port minimum and maximum must bot
- codex.live-media-relay.udp-port-min must not exceed udp-port
- codex-api-key[%d].weight: %w
- decode host auth list request: %w
AI-assisted analysis of router-for-me/CLIProxyAPI@78f0c4079e (2026-08-15).
Data as JSON: /api/errors/76bf0e93800f79dc.
Report an issue: GitHub.