openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
134 lines (133 loc) • 5.83 kB
JavaScript
import { n as getCurrentPluginMetadataSnapshot } from "./current-plugin-metadata-snapshot-CmSX4G3W.js";
import { c as normalizeProviderId, r as findNormalizedProviderKey, s as normalizeModelRef } from "./model-ref-shared-Dz7QU0Lx.js";
import { t as modelKey } from "./model-key-CMdQNkZf.js";
import { a as normalizeOptionalAgentRuntimeId, r as isDefaultAgentRuntimeId } from "./agent-runtime-id-BpfvnoN1.js";
import { c as loadManifestMetadataSnapshot, n as isManifestPluginAvailableForControlPlane } from "./manifest-contract-eligibility-BbV7X6pV.js";
import { i as resolveSessionRuntimeOverrideForProvider, t as resolveCompatibleAgentRuntimeForProvider } from "./session-runtime-compat-DNAICzi6.js";
import "./model-selection-di2kjKCB.js";
import { t as RUNTIME_MODEL_VISIBILITY_NORMALIZATION } from "./model-visibility-policy-mYoB7nkk.js";
//#region src/auto-reply/reply/directive-handling.model-runtime.ts
/** Resolves and applies explicit runtime selections attached to `/model`. */
/** Validates a requested runtime against the provider selected by the same directive. */
function resolveModelRuntimeDirective(params) {
const rawRuntime = params.rawRuntime?.trim();
if (!rawRuntime) {
if (params.sessionEntry?.agentRuntimeOverride?.trim() && !resolveSessionRuntimeOverrideForProvider({
provider: params.provider,
entry: params.sessionEntry,
cfg: params.cfg
})) return { kind: "clear" };
return { kind: "unchanged" };
}
const runtime = normalizeOptionalAgentRuntimeId(rawRuntime);
if (isDefaultAgentRuntimeId(runtime)) return { kind: "clear" };
const provider = normalizeProviderId(params.provider);
const compatibleRuntime = resolveCompatibleAgentRuntimeForProvider({
provider,
runtime,
cfg: params.cfg
});
if (compatibleRuntime) return {
kind: "set",
runtime: compatibleRuntime
};
return {
kind: "invalid",
runtime: rawRuntime,
errorText: `Runtime "${rawRuntime}" is not supported for ${provider || params.provider}.`
};
}
/** Applies a validated runtime choice without disturbing existing pins when no choice was given. */
function applyModelRuntimeDirective(entry, resolution) {
if (resolution.kind === "clear") {
const updated = entry.agentRuntimeOverride !== void 0;
delete entry.agentRuntimeOverride;
return { updated };
}
if (resolution.kind === "set") {
const updated = entry.agentRuntimeOverride !== resolution.runtime;
entry.agentRuntimeOverride = resolution.runtime;
return { updated };
}
return { updated: false };
}
//#endregion
//#region src/auto-reply/reply/model-runtime-normalization.ts
/** Carries the Gateway-owned metadata snapshot through one model-selection run. */
function resolveRuntimeNormalization(cfg) {
return {
...RUNTIME_MODEL_VISIBILITY_NORMALIZATION,
manifestPlugins: getCurrentPluginMetadataSnapshot({
config: cfg,
allowWorkspaceScopedSnapshot: true
})
};
}
function normalizeRuntimeRef(provider, model, normalization = RUNTIME_MODEL_VISIBILITY_NORMALIZATION) {
return normalizeModelRef(provider, model, normalization);
}
function findSelectedCatalogEntry(params) {
const normalizedProvider = normalizeProviderId(params.provider);
const selectedKey = modelKey(normalizedProvider, params.model);
return params.catalog?.find((entry) => modelKey(entry.provider, entry.id) === selectedKey);
}
/** Provider identity comes from authored routes or prepared/plugin metadata, not model inventory. */
function isKnownModelSelectionProvider(params) {
const provider = normalizeProviderId(params.provider);
if (findNormalizedProviderKey(params.cfg.models?.providers, provider) || params.catalog.some((entry) => normalizeProviderId(entry.provider) === provider)) return true;
const snapshot = loadManifestMetadataSnapshot({ config: params.cfg });
return snapshot.plugins.some((plugin) => plugin.providers.some((id) => normalizeProviderId(id) === provider) && isManifestPluginAvailableForControlPlane({
snapshot,
plugin,
config: params.cfg
}));
}
/** Prepare runtime and capabilities for the selected route before any session mutation. */
async function prepareModelSelectionRuntime(params) {
const runtime = resolveModelRuntimeDirective(params);
if (runtime.kind === "invalid") return {
status: "rejected",
reason: "invalid-runtime",
message: runtime.errorText
};
const selected = findSelectedCatalogEntry(params);
if (!isKnownModelSelectionProvider(params)) return {
status: "rejected",
reason: "unknown-provider",
message: `Unknown provider "${params.provider}". Use /models to list providers.`
};
if (selected?.reasoning !== void 0) return {
status: "ready",
runtime,
catalog: [...params.catalog]
};
const { loadProviderScopedThinkingCatalog } = await import("./agents/model-catalog.runtime.js");
const catalog = await loadProviderScopedThinkingCatalog({
config: params.cfg,
agentId: params.agentId,
provider: params.provider,
model: params.model
});
const resolved = findSelectedCatalogEntry({
...params,
catalog
});
return {
status: "ready",
runtime,
catalog: resolved ? [resolved, ...params.catalog.filter((entry) => entry !== selected)] : [...params.catalog]
};
}
function mergePreparedConfiguredCatalog(params) {
if (!params.prepared?.length) return params.configured;
const preparedByKey = new Map(params.prepared.map((entry) => [modelKey(entry.provider, entry.id), entry]));
return params.configured.map((entry) => {
const prepared = preparedByKey.get(modelKey(entry.provider, entry.id));
return prepared ? {
...entry,
...prepared
} : entry;
});
}
//#endregion
export { prepareModelSelectionRuntime as a, resolveModelRuntimeDirective as c, normalizeRuntimeRef as i, isKnownModelSelectionProvider as n, resolveRuntimeNormalization as o, mergePreparedConfiguredCatalog as r, applyModelRuntimeDirective as s, findSelectedCatalogEntry as t };