UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

145 lines (144 loc) 5.58 kB
import { c as normalizeOptionalString } from "./string-coerce-mnp54Vah.js"; import { i as normalizeProviderId } from "./provider-id-Dq06Bcx6.js"; import { r as resolveAgentModelFallbackValues } from "./model-input-B2zxl6MM.js"; import { t as buildAllowedModelSetWithFallbacks, u as isModelKeyAllowedBySet } from "./model-selection-shared-b32cUYts.js"; import { t as applyModelOverrideToSessionEntry } from "./model-overrides-D5WaLvcp.js"; import { n as resolveModelDirectiveSelection, r as resolveModelRefFromDirectiveString, t as modelKey } from "./model-selection-directive-qQ0EudS-.js"; //#region src/auto-reply/reply/session-reset-model.ts /** Applies model override tokens embedded in reset/new command text. */ function splitBody(body) { const tokens = body.split(/\s+/).filter(Boolean); return { tokens, first: tokens[0], second: tokens[1], rest: tokens.slice(2) }; } async function loadResetModelCatalog(cfg) { const { loadModelCatalog } = await import("./model-catalog-BflZHqiC.js"); return loadModelCatalog({ config: cfg }); } async function resolveResetFallbackModels(params) { if (params.agentId) { const { resolveAgentModelFallbacksOverride } = await import("./agent-scope-Do4dPjL6.js"); const override = resolveAgentModelFallbacksOverride(params.cfg, params.agentId); if (override !== void 0) return override; } return resolveAgentModelFallbackValues(params.cfg.agents?.defaults?.model); } async function buildResetAllowedModelKeys(params) { if (Object.keys(params.cfg.agents?.defaults?.models ?? {}).length > 0 || params.cfg.models?.providers) return buildAllowedModelSetWithFallbacks(params).allowedKeys; const allowedKeys = /* @__PURE__ */ new Set(); for (const entry of params.catalog) allowedKeys.add(modelKey(entry.provider, entry.id)); const defaultModel = params.defaultModel?.trim(); if (defaultModel) allowedKeys.add(modelKey(normalizeProviderId(params.defaultProvider), defaultModel)); return allowedKeys; } function buildSelectionFromExplicit(params) { const resolved = resolveModelRefFromDirectiveString({ raw: params.raw, defaultProvider: params.defaultProvider, aliasIndex: params.aliasIndex }); if (!resolved) return; const key = modelKey(resolved.ref.provider, resolved.ref.model); if (params.allowedModelKeys.size > 0 && !isModelKeyAllowedBySet(params.allowedModelKeys, key)) return; const isDefault = resolved.ref.provider === params.defaultProvider && resolved.ref.model === params.defaultModel; return { provider: resolved.ref.provider, model: resolved.ref.model, isDefault, ...resolved.alias ? { alias: resolved.alias } : void 0 }; } function applySelectionToSession(params) { const { selection, sessionEntry, sessionStore, sessionKey, storePath } = params; if (!sessionEntry || !sessionStore || !sessionKey) return; const { updated } = applyModelOverrideToSessionEntry({ entry: sessionEntry, selection }); if (!updated) return; sessionStore[sessionKey] = sessionEntry; if (storePath) import("./sessions-Aq-OTiB6.js").then(({ updateSessionStore }) => updateSessionStore(storePath, (store) => { store[sessionKey] = sessionEntry; })).catch(() => {}); } /** Applies a model override embedded in a reset command body. */ /** Applies a valid reset model override to session state and returns the cleaned body. */ async function applyResetModelOverride(params) { if (!params.resetTriggered) return {}; const rawBody = normalizeOptionalString(params.bodyStripped); if (!rawBody) return {}; const { tokens, first, second } = splitBody(rawBody); if (!first) return {}; const catalog = params.modelCatalog ?? await loadResetModelCatalog(params.cfg); const allowedModelKeys = await buildResetAllowedModelKeys({ cfg: params.cfg, catalog, defaultProvider: params.defaultProvider, defaultModel: params.defaultModel, fallbackModels: await resolveResetFallbackModels({ cfg: params.cfg, agentId: params.agentId }) }); if (allowedModelKeys.size === 0) return {}; const providers = /* @__PURE__ */ new Set(); for (const key of allowedModelKeys) { const slash = key.indexOf("/"); if (slash <= 0) continue; providers.add(normalizeProviderId(key.slice(0, slash))); } const resolveSelection = (raw) => resolveModelDirectiveSelection({ raw, defaultProvider: params.defaultProvider, defaultModel: params.defaultModel, aliasIndex: params.aliasIndex, allowedModelKeys }); let selection; let consumed = 0; if (providers.has(normalizeProviderId(first)) && second) { const resolved = resolveSelection(`${normalizeProviderId(first)}/${second}`); if (resolved.selection) { selection = resolved.selection; consumed = 2; } } if (!selection) { selection = buildSelectionFromExplicit({ raw: first, defaultProvider: params.defaultProvider, defaultModel: params.defaultModel, aliasIndex: params.aliasIndex, allowedModelKeys }); if (selection) consumed = 1; } if (!selection) { const resolved = resolveSelection(first); if (providers.has(normalizeProviderId(first)) || first.trim().length >= 6) { selection = resolved.selection; if (selection) consumed = 1; } } if (!selection) return {}; const cleanedBody = tokens.slice(consumed).join(" ").trim(); params.sessionCtx.BodyStripped = cleanedBody; params.sessionCtx.BodyForCommands = cleanedBody; applySelectionToSession({ selection, sessionEntry: params.sessionEntry, sessionStore: params.sessionStore, sessionKey: params.sessionKey, storePath: params.storePath }); return { selection, cleanedBody }; } //#endregion export { applyResetModelOverride };