fix(telegram): allow fallback models in /model validation (#40105)

Merged via squash.

Prepared head SHA: de07585e03
Co-authored-by: avirweb <257412074+avirweb@users.noreply.github.com>
Co-authored-by: velvet-shark <126378+velvet-shark@users.noreply.github.com>
Reviewed-by: @velvet-shark
This commit is contained in:
avirweb
2026-03-12 07:55:51 -05:00
committed by GitHub
parent 171d2df9e0
commit f2e28fc30f
12 changed files with 313 additions and 45 deletions

View File

@@ -1,8 +1,16 @@
import type { OpenClawConfig } from "../config/config.js";
import { resolveAgentModelPrimaryValue, toAgentModelListLike } from "../config/model-input.js";
import {
resolveAgentModelFallbackValues,
resolveAgentModelPrimaryValue,
toAgentModelListLike,
} from "../config/model-input.js";
import { createSubsystemLogger } from "../logging/subsystem.js";
import { sanitizeForLog } from "../terminal/ansi.js";
import { resolveAgentConfig, resolveAgentEffectiveModelPrimary } from "./agent-scope.js";
import {
resolveAgentConfig,
resolveAgentEffectiveModelPrimary,
resolveAgentModelFallbacksOverride,
} from "./agent-scope.js";
import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "./defaults.js";
import type { ModelCatalogEntry } from "./model-catalog.js";
import { splitTrailingAuthProfile } from "./model-ref-profile.js";
@@ -382,6 +390,16 @@ export function resolveDefaultModelForAgent(params: {
});
}
function resolveAllowedFallbacks(params: { cfg: OpenClawConfig; agentId?: string }): string[] {
if (params.agentId) {
const override = resolveAgentModelFallbacksOverride(params.cfg, params.agentId);
if (override !== undefined) {
return override;
}
}
return resolveAgentModelFallbackValues(params.cfg.agents?.defaults?.model);
}
export function resolveSubagentConfiguredModelSelection(params: {
cfg: OpenClawConfig;
agentId: string;
@@ -419,6 +437,7 @@ export function buildAllowedModelSet(params: {
catalog: ModelCatalogEntry[];
defaultProvider: string;
defaultModel?: string;
agentId?: string;
}): {
allowAny: boolean;
allowedCatalog: ModelCatalogEntry[];
@@ -469,6 +488,25 @@ export function buildAllowedModelSet(params: {
}
}
for (const fallback of resolveAllowedFallbacks({
cfg: params.cfg,
agentId: params.agentId,
})) {
const parsed = parseModelRef(String(fallback), params.defaultProvider);
if (parsed) {
const key = modelKey(parsed.provider, parsed.model);
allowedKeys.add(key);
if (!catalogKeys.has(key) && !syntheticCatalogEntries.has(key)) {
syntheticCatalogEntries.set(key, {
id: parsed.model,
name: parsed.model,
provider: parsed.provider,
});
}
}
}
if (defaultKey) {
allowedKeys.add(defaultKey);
}