openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
55 lines (54 loc) • 2.21 kB
JavaScript
import { o as normalizeLowercaseStringOrEmpty } from "./string-coerce-CIXf7egm.js";
import { r as normalizeProviderId } from "./provider-id-DMd-TDFp.js";
//#region packages/model-catalog-core/src/model-catalog-refs.ts
function parseModelSourceSuffix(modelRef) {
const sourceSeparator = modelRef.lastIndexOf(":");
if (sourceSeparator < 0) return;
const source = modelRef.slice(sourceSeparator + 1);
if (source === "cloud" || source === "local") return {
base: modelRef.slice(0, sourceSeparator),
source
};
if (!source.includes("/") && source.endsWith("-cloud")) return {
base: modelRef.slice(0, -6),
source: "cloud"
};
}
/** Recognizes one unambiguous hosted source suffix on a bare or qualified model ref. */
function isCloudModelRef(modelRef) {
const normalized = modelRef?.trim().toLowerCase();
if (!normalized) return false;
const source = parseModelSourceSuffix(normalized);
return source?.source === "cloud" && parseModelSourceSuffix(source.base) === void 0;
}
/** Build a provider/model catalog reference. */
function buildModelCatalogRef(provider, modelId) {
return `${normalizeProviderId(provider)}/${modelId}`;
}
/** Parse a strict provider/model reference without normalizing either segment. */
function parseProviderModelRef(value) {
const trimmed = value.trim();
const slashIndex = trimmed.indexOf("/");
if (slashIndex <= 0 || slashIndex >= trimmed.length - 1) return null;
const provider = trimmed.slice(0, slashIndex).trim();
const model = trimmed.slice(slashIndex + 1).trim();
return provider && model ? {
provider,
model
} : null;
}
/** Parse a strict provider/model catalog reference. */
function parseModelCatalogRef(value) {
const parsed = parseProviderModelRef(value);
if (!parsed) return null;
return {
provider: normalizeProviderId(parsed.provider),
modelId: parsed.model
};
}
/** Build a case-insensitive merge key for provider/model rows. */
function buildModelCatalogMergeKey(provider, modelId) {
return `${normalizeProviderId(provider)}::${normalizeLowercaseStringOrEmpty(modelId)}`;
}
//#endregion
export { parseProviderModelRef as a, parseModelCatalogRef as i, buildModelCatalogRef as n, isCloudModelRef as r, buildModelCatalogMergeKey as t };