mirror of
https://github.com/openclaw/openclaw.git
synced 2026-02-19 18:39:20 -05:00
refactor(models): dedupe fallback key parsing
This commit is contained in:
@@ -7,6 +7,7 @@ import {
|
||||
ensureFlagCompatibility,
|
||||
modelKey,
|
||||
resolveModelTarget,
|
||||
resolveModelKeysFromEntries,
|
||||
updateConfig,
|
||||
} from "./shared.js";
|
||||
|
||||
@@ -47,21 +48,8 @@ export async function modelsFallbacksAddCommand(modelRaw: string, runtime: Runti
|
||||
if (!nextModels[targetKey]) {
|
||||
nextModels[targetKey] = {};
|
||||
}
|
||||
const aliasIndex = buildModelAliasIndex({
|
||||
cfg,
|
||||
defaultProvider: DEFAULT_PROVIDER,
|
||||
});
|
||||
const existing = cfg.agents?.defaults?.model?.fallbacks ?? [];
|
||||
const existingKeys = existing
|
||||
.map((entry) =>
|
||||
resolveModelRefFromString({
|
||||
raw: String(entry ?? ""),
|
||||
defaultProvider: DEFAULT_PROVIDER,
|
||||
aliasIndex,
|
||||
}),
|
||||
)
|
||||
.filter((entry): entry is NonNullable<typeof entry> => Boolean(entry))
|
||||
.map((entry) => modelKey(entry.ref.provider, entry.ref.model));
|
||||
const existingKeys = resolveModelKeysFromEntries({ cfg, entries: existing });
|
||||
|
||||
if (existingKeys.includes(targetKey)) {
|
||||
return cfg;
|
||||
|
||||
@@ -7,6 +7,7 @@ import {
|
||||
ensureFlagCompatibility,
|
||||
modelKey,
|
||||
resolveModelTarget,
|
||||
resolveModelKeysFromEntries,
|
||||
updateConfig,
|
||||
} from "./shared.js";
|
||||
|
||||
@@ -47,21 +48,8 @@ export async function modelsImageFallbacksAddCommand(modelRaw: string, runtime:
|
||||
if (!nextModels[targetKey]) {
|
||||
nextModels[targetKey] = {};
|
||||
}
|
||||
const aliasIndex = buildModelAliasIndex({
|
||||
cfg,
|
||||
defaultProvider: DEFAULT_PROVIDER,
|
||||
});
|
||||
const existing = cfg.agents?.defaults?.imageModel?.fallbacks ?? [];
|
||||
const existingKeys = existing
|
||||
.map((entry) =>
|
||||
resolveModelRefFromString({
|
||||
raw: String(entry ?? ""),
|
||||
defaultProvider: DEFAULT_PROVIDER,
|
||||
aliasIndex,
|
||||
}),
|
||||
)
|
||||
.filter((entry): entry is NonNullable<typeof entry> => Boolean(entry))
|
||||
.map((entry) => modelKey(entry.ref.provider, entry.ref.model));
|
||||
const existingKeys = resolveModelKeysFromEntries({ cfg, entries: existing });
|
||||
|
||||
if (existingKeys.includes(targetKey)) {
|
||||
return cfg;
|
||||
|
||||
@@ -91,6 +91,26 @@ export function resolveModelTarget(params: { raw: string; cfg: OpenClawConfig })
|
||||
return resolved.ref;
|
||||
}
|
||||
|
||||
export function resolveModelKeysFromEntries(params: {
|
||||
cfg: OpenClawConfig;
|
||||
entries: readonly unknown[];
|
||||
}): string[] {
|
||||
const aliasIndex = buildModelAliasIndex({
|
||||
cfg: params.cfg,
|
||||
defaultProvider: DEFAULT_PROVIDER,
|
||||
});
|
||||
return params.entries
|
||||
.map((entry) =>
|
||||
resolveModelRefFromString({
|
||||
raw: String(entry ?? ""),
|
||||
defaultProvider: DEFAULT_PROVIDER,
|
||||
aliasIndex,
|
||||
}),
|
||||
)
|
||||
.filter((entry): entry is NonNullable<typeof entry> => Boolean(entry))
|
||||
.map((entry) => modelKey(entry.ref.provider, entry.ref.model));
|
||||
}
|
||||
|
||||
export function buildAllowlistSet(cfg: OpenClawConfig): Set<string> {
|
||||
const allowed = new Set<string>();
|
||||
const models = cfg.agents?.defaults?.models ?? {};
|
||||
|
||||
Reference in New Issue
Block a user