





















@@ -1,4 +1,8 @@
11import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "../agents/defaults.js";
2+import {
3+inferUniqueProviderFromConfiguredModels,
4+isCliProvider,
5+} from "../agents/model-selection.js";
26import { resolveAgentModelPrimaryValue } from "../config/model-input.js";
37import type { OpenClawConfig } from "../config/types.openclaw.js";
48@@ -14,7 +18,9 @@ type SessionDisplayDefaults = {
1418model: string;
1519};
162017-function parseModelRef(raw: string, defaultProvider: string): { provider: string; model: string } {
21+type SessionDisplayModelRef = { provider: string; model: string };
22+23+function parseModelRef(raw: string, defaultProvider: string): SessionDisplayModelRef {
1824const trimmed = raw.trim();
1925if (!trimmed) {
2026return { provider: defaultProvider, model: DEFAULT_MODEL };
@@ -59,10 +65,7 @@ function normalizeStoredOverrideModel(params: {
5965};
6066}
616762-function resolveDefaultModelRef(
63-cfg: OpenClawConfig,
64-agentId?: string,
65-): { provider: string; model: string } {
68+function resolveDefaultModelRef(cfg: OpenClawConfig, agentId?: string): SessionDisplayModelRef {
6669const primary =
6770resolveAgentPrimaryModel(cfg, agentId) ??
6871resolveAgentModelPrimaryValue(cfg.agents?.defaults?.model) ??
@@ -79,10 +82,48 @@ export function resolveSessionDisplayDefaults(
7982};
8083}
818485+function normalizeCliRuntimeDisplayRef(
86+cfg: OpenClawConfig,
87+ref: SessionDisplayModelRef,
88+defaultRef: SessionDisplayModelRef,
89+): SessionDisplayModelRef {
90+if (!isCliProvider(ref.provider, cfg)) {
91+return ref;
92+}
93+if (ref.model.includes("/")) {
94+const parsed = parseModelRef(ref.model, defaultRef.provider);
95+if (!isCliProvider(parsed.provider, cfg)) {
96+return parsed;
97+}
98+}
99+const inferredProvider = inferUniqueProviderFromConfiguredModels({
100+ cfg,
101+model: ref.model,
102+});
103+if (inferredProvider && !isCliProvider(inferredProvider, cfg)) {
104+return { provider: inferredProvider, model: ref.model };
105+}
106+const parsed = parseModelRef(ref.model, defaultRef.provider);
107+if (!isCliProvider(parsed.provider, cfg)) {
108+return parsed;
109+}
110+return {
111+provider: defaultRef.provider || ref.provider,
112+model: parsed.model || ref.model,
113+};
114+}
115+82116export function resolveSessionDisplayModel(
83117cfg: OpenClawConfig,
84118row: SessionDisplayModelRow,
85119): string {
120+return resolveSessionDisplayModelRef(cfg, row).model;
121+}
122+123+export function resolveSessionDisplayModelRef(
124+cfg: OpenClawConfig,
125+row: SessionDisplayModelRow,
126+): SessionDisplayModelRef {
86127const agentId = row.key.startsWith("agent:") ? row.key.split(":")[1] : undefined;
87128const defaultRef = resolveDefaultModelRef(cfg, agentId);
88129const normalizedOverride = normalizeStoredOverrideModel({
@@ -94,10 +135,14 @@ export function resolveSessionDisplayModel(
94135return parseModelRef(
95136normalizedOverride.modelOverride,
96137normalizedOverride.providerOverride ?? defaultRef.provider,
97-).model;
138+);
98139}
99140if (row.model) {
100-return parseModelRef(row.model, row.modelProvider ?? defaultRef.provider).model;
141+return normalizeCliRuntimeDisplayRef(
142+cfg,
143+parseModelRef(row.model, row.modelProvider ?? defaultRef.provider),
144+defaultRef,
145+);
101146}
102-return defaultRef.model;
147+return defaultRef;
103148}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。