UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

58 lines (57 loc) • 2.5 kB
import { r as normalizeProviderId } from "./provider-id-D1VImdKk.mjs"; import { t as createModelCatalogIdentityKeyResolver } from "./openai-model-routes-C1mdGNT1.mjs"; //#region src/agents/model-catalog-order.ts /** * Provider catalogs declare models strongest-first. Preserve that owner order * after registry/config merges instead of falling back to alphabetical names. */ function assignProviderModelOrder(entries, existingEntries = [], options = {}) { const keyOf = createModelCatalogIdentityKeyResolver(); const orderByModel = /* @__PURE__ */ new Map(); const nextOrderByProvider = /* @__PURE__ */ new Map(); for (const entry of existingEntries) { if (entry.providerOrder === void 0) continue; const provider = normalizeProviderId(entry.provider); const key = keyOf(entry); orderByModel.set(key, entry.providerOrder); nextOrderByProvider.set(provider, Math.max(nextOrderByProvider.get(provider) ?? 0, entry.providerOrder + 1)); } return entries.map((entry) => { const provider = normalizeProviderId(entry.provider); const key = keyOf(entry); const existingOrder = orderByModel.get(key); if (existingOrder !== void 0) return { ...entry, providerOrder: existingOrder }; if (options.appendUnknown === false) return entry; const providerOrder = nextOrderByProvider.get(provider) ?? 0; nextOrderByProvider.set(provider, providerOrder + 1); orderByModel.set(key, providerOrder); return { ...entry, providerOrder }; }); } function compareModelCatalogEntries(a, b) { const providerComparison = normalizeProviderId(a.provider).localeCompare(normalizeProviderId(b.provider)); if (providerComparison !== 0) return providerComparison; return (a.providerOrder ?? Number.MAX_SAFE_INTEGER) - (b.providerOrder ?? Number.MAX_SAFE_INTEGER) || a.id.localeCompare(b.id) || a.name.localeCompare(b.name); } /** Keep a session's selected row reachable without changing the provider-owned remainder. */ function orderModelCatalogForPicker(entries, selected) { const ordered = entries.toSorted(compareModelCatalogEntries); if (selected) { const keyOf = createModelCatalogIdentityKeyResolver(); const selectedKey = keyOf({ provider: selected.provider, id: selected.model }); const index = ordered.findIndex((entry) => keyOf(entry) === selectedKey); if (index > 0) ordered.unshift(...ordered.splice(index, 1)); } return ordered; } //#endregion export { compareModelCatalogEntries as n, orderModelCatalogForPicker as r, assignProviderModelOrder as t };