mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 12:47:39 +00:00
Channels: add thread-aware model overrides
This commit is contained in:
@@ -2,10 +2,15 @@ import fs from "node:fs";
|
||||
import { lookupContextTokens } from "../agents/context.js";
|
||||
import { DEFAULT_CONTEXT_TOKENS, DEFAULT_MODEL, DEFAULT_PROVIDER } from "../agents/defaults.js";
|
||||
import { resolveModelAuthMode } from "../agents/model-auth.js";
|
||||
import { resolveConfiguredModelRef } from "../agents/model-selection.js";
|
||||
import {
|
||||
buildModelAliasIndex,
|
||||
resolveConfiguredModelRef,
|
||||
resolveModelRefFromString,
|
||||
} from "../agents/model-selection.js";
|
||||
import { resolveSandboxRuntimeStatus } from "../agents/sandbox.js";
|
||||
import type { SkillCommandSpec } from "../agents/skills.js";
|
||||
import { derivePromptTokens, normalizeUsage, type UsageLike } from "../agents/usage.js";
|
||||
import { resolveChannelModelOverride } from "../channels/model-overrides.js";
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import {
|
||||
resolveMainSessionKey,
|
||||
@@ -66,6 +71,7 @@ type StatusArgs = {
|
||||
agentId?: string;
|
||||
sessionEntry?: SessionEntry;
|
||||
sessionKey?: string;
|
||||
parentSessionKey?: string;
|
||||
sessionScope?: SessionScope;
|
||||
sessionStorePath?: string;
|
||||
groupActivation?: "mention" | "always";
|
||||
@@ -531,7 +537,46 @@ export function buildStatusMessage(args: StatusArgs): string {
|
||||
state: entry,
|
||||
});
|
||||
const selectedAuthLabel = selectedAuthLabelValue ? ` · 🔑 ${selectedAuthLabelValue}` : "";
|
||||
const modelLine = `🧠 Model: ${selectedModelLabel}${selectedAuthLabel}`;
|
||||
const channelModelNote = (() => {
|
||||
if (!args.config || !entry) {
|
||||
return undefined;
|
||||
}
|
||||
if (entry.modelOverride?.trim() || entry.providerOverride?.trim()) {
|
||||
return undefined;
|
||||
}
|
||||
const channelOverride = resolveChannelModelOverride({
|
||||
cfg: args.config,
|
||||
channel: entry.channel ?? entry.origin?.provider,
|
||||
groupId: entry.groupId,
|
||||
groupChannel: entry.groupChannel,
|
||||
groupSubject: entry.subject,
|
||||
parentSessionKey: args.parentSessionKey,
|
||||
});
|
||||
if (!channelOverride) {
|
||||
return undefined;
|
||||
}
|
||||
const aliasIndex = buildModelAliasIndex({
|
||||
cfg: args.config,
|
||||
defaultProvider: DEFAULT_PROVIDER,
|
||||
});
|
||||
const resolvedOverride = resolveModelRefFromString({
|
||||
raw: channelOverride.model,
|
||||
defaultProvider: DEFAULT_PROVIDER,
|
||||
aliasIndex,
|
||||
});
|
||||
if (!resolvedOverride) {
|
||||
return undefined;
|
||||
}
|
||||
if (
|
||||
resolvedOverride.ref.provider !== selectedProvider ||
|
||||
resolvedOverride.ref.model !== selectedModel
|
||||
) {
|
||||
return undefined;
|
||||
}
|
||||
return "channel override";
|
||||
})();
|
||||
const modelNote = channelModelNote ? ` · ${channelModelNote}` : "";
|
||||
const modelLine = `🧠 Model: ${selectedModelLabel}${selectedAuthLabel}${modelNote}`;
|
||||
const showFallbackAuth = activeAuthLabelValue && activeAuthLabelValue !== selectedAuthLabelValue;
|
||||
const fallbackLine = fallbackState.active
|
||||
? `↪️ Fallback: ${activeModelLabel}${
|
||||
|
||||
Reference in New Issue
Block a user