mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 02:38:26 +00:00
fix(cli): display correct model for sub-agents in sessions list (#18660)
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: ba54c5a351
Co-authored-by: robbyczgw-cla <239660374+robbyczgw-cla@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import { resolveAgentModelPrimary } from "./agent-scope.js";
|
||||
import { resolveAgentConfig, resolveAgentModelPrimary } from "./agent-scope.js";
|
||||
import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "./defaults.js";
|
||||
import type { ModelCatalogEntry } from "./model-catalog.js";
|
||||
import { normalizeGoogleModelId } from "./models-config.providers.js";
|
||||
@@ -146,6 +146,22 @@ export function parseModelRef(raw: string, defaultProvider: string): ModelRef |
|
||||
return normalizeModelRef(providerRaw, model);
|
||||
}
|
||||
|
||||
export function normalizeModelSelection(value: unknown): string | undefined {
|
||||
if (typeof value === "string") {
|
||||
const trimmed = value.trim();
|
||||
return trimmed || undefined;
|
||||
}
|
||||
if (!value || typeof value !== "object") {
|
||||
return undefined;
|
||||
}
|
||||
const primary = (value as { primary?: unknown }).primary;
|
||||
if (typeof primary === "string") {
|
||||
const trimmed = primary.trim();
|
||||
return trimmed || undefined;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
export function resolveAllowlistModelKey(raw: string, defaultProvider: string): string | null {
|
||||
const parsed = parseModelRef(raw, defaultProvider);
|
||||
if (!parsed) {
|
||||
@@ -300,6 +316,38 @@ export function resolveDefaultModelForAgent(params: {
|
||||
});
|
||||
}
|
||||
|
||||
export function resolveSubagentConfiguredModelSelection(params: {
|
||||
cfg: OpenClawConfig;
|
||||
agentId: string;
|
||||
}): string | undefined {
|
||||
const agentConfig = resolveAgentConfig(params.cfg, params.agentId);
|
||||
return (
|
||||
normalizeModelSelection(agentConfig?.subagents?.model) ??
|
||||
normalizeModelSelection(params.cfg.agents?.defaults?.subagents?.model) ??
|
||||
normalizeModelSelection(agentConfig?.model)
|
||||
);
|
||||
}
|
||||
|
||||
export function resolveSubagentSpawnModelSelection(params: {
|
||||
cfg: OpenClawConfig;
|
||||
agentId: string;
|
||||
modelOverride?: unknown;
|
||||
}): string {
|
||||
const runtimeDefault = resolveDefaultModelForAgent({
|
||||
cfg: params.cfg,
|
||||
agentId: params.agentId,
|
||||
});
|
||||
return (
|
||||
normalizeModelSelection(params.modelOverride) ??
|
||||
resolveSubagentConfiguredModelSelection({
|
||||
cfg: params.cfg,
|
||||
agentId: params.agentId,
|
||||
}) ??
|
||||
normalizeModelSelection(params.cfg.agents?.defaults?.model?.primary) ??
|
||||
`${runtimeDefault.provider}/${runtimeDefault.model}`
|
||||
);
|
||||
}
|
||||
|
||||
export function buildAllowedModelSet(params: {
|
||||
cfg: OpenClawConfig;
|
||||
catalog: ModelCatalogEntry[];
|
||||
@@ -316,10 +364,11 @@ export function buildAllowedModelSet(params: {
|
||||
})();
|
||||
const allowAny = rawAllowlist.length === 0;
|
||||
const defaultModel = params.defaultModel?.trim();
|
||||
const defaultKey =
|
||||
const defaultRef =
|
||||
defaultModel && params.defaultProvider
|
||||
? modelKey(params.defaultProvider, defaultModel)
|
||||
: undefined;
|
||||
? parseModelRef(defaultModel, params.defaultProvider)
|
||||
: null;
|
||||
const defaultKey = defaultRef ? modelKey(defaultRef.provider, defaultRef.model) : undefined;
|
||||
const catalogKeys = new Set(params.catalog.map((entry) => modelKey(entry.provider, entry.id)));
|
||||
|
||||
if (allowAny) {
|
||||
|
||||
Reference in New Issue
Block a user