mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-28 09:33:06 +00:00
fix(model): infer provider from allowlist for bare model IDs to prevent prefix drift (#48369)
This commit is contained in:
@@ -569,6 +569,34 @@ describe("model-selection", () => {
|
||||
ref: { provider: "openai", model: "@cf/openai/gpt-oss-20b" },
|
||||
});
|
||||
});
|
||||
|
||||
it("infers provider from allowlist for bare model ids to prevent prefix drift (#48369)", () => {
|
||||
const cfg = {
|
||||
agents: {
|
||||
defaults: {
|
||||
models: {
|
||||
"openai-codex/gpt-5.4": {},
|
||||
"opencode-go/kimi-k2.5": {},
|
||||
"opencode-go/glm-5": {},
|
||||
},
|
||||
},
|
||||
},
|
||||
} as OpenClawConfig;
|
||||
|
||||
// When session default is openai-codex, switching to a bare "kimi-k2.5"
|
||||
// should resolve to opencode-go/kimi-k2.5, not openai-codex/kimi-k2.5
|
||||
const result = resolveAllowedModelRef({
|
||||
cfg,
|
||||
catalog: [],
|
||||
raw: "kimi-k2.5",
|
||||
defaultProvider: "openai-codex", // session's current provider
|
||||
});
|
||||
|
||||
expect(result).toEqual({
|
||||
key: "opencode-go/kimi-k2.5",
|
||||
ref: { provider: "opencode-go", model: "kimi-k2.5" },
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("resolveModelRefFromString", () => {
|
||||
|
||||
@@ -660,9 +660,19 @@ export function resolveAllowedModelRef(params: {
|
||||
cfg: params.cfg,
|
||||
defaultProvider: params.defaultProvider,
|
||||
});
|
||||
|
||||
// When the model string has no provider prefix ("/"), try to infer the
|
||||
// correct provider from the configured allowlist before falling back to the
|
||||
// session's current default provider. This prevents provider prefix drift
|
||||
// when switching models across different providers (see #48369).
|
||||
const effectiveDefaultProvider = !trimmed.includes("/")
|
||||
? (inferUniqueProviderFromConfiguredModels({ cfg: params.cfg, model: trimmed }) ??
|
||||
params.defaultProvider)
|
||||
: params.defaultProvider;
|
||||
|
||||
const resolved = resolveModelRefFromString({
|
||||
raw: trimmed,
|
||||
defaultProvider: params.defaultProvider,
|
||||
defaultProvider: effectiveDefaultProvider,
|
||||
aliasIndex,
|
||||
});
|
||||
if (!resolved) {
|
||||
|
||||
Reference in New Issue
Block a user