@cherrystudio/provider-registry 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +166 -2
  3. package/data/models.json +22694 -0
  4. package/data/provider-models.json +41090 -0
  5. package/data/providers.json +2716 -0
  6. package/dist/bundled-catalog.cjs +12 -0
  7. package/dist/bundled-catalog.d.cts +5 -0
  8. package/dist/bundled-catalog.d.mts +5 -0
  9. package/dist/bundled-catalog.mjs +11 -0
  10. package/dist/bundled-models--P3b6A6o.mjs +25220 -0
  11. package/dist/bundled-models-uS9C7ldF.cjs +25224 -0
  12. package/dist/bundled-models.cjs +3 -0
  13. package/dist/bundled-models.d.cts +5 -0
  14. package/dist/bundled-models.d.mts +5 -0
  15. package/dist/bundled-models.mjs +2 -0
  16. package/dist/bundled-provider-models-CT2Ha5w2.cjs +37586 -0
  17. package/dist/bundled-provider-models-y-RYjBUH.mjs +37582 -0
  18. package/dist/bundled-provider-models.cjs +3 -0
  19. package/dist/bundled-provider-models.d.cts +5 -0
  20. package/dist/bundled-provider-models.d.mts +5 -0
  21. package/dist/bundled-provider-models.mjs +2 -0
  22. package/dist/bundled-providers-BZisTfNC.cjs +2174 -0
  23. package/dist/bundled-providers-BiPpU5W4.mjs +2170 -0
  24. package/dist/bundled-providers.cjs +3 -0
  25. package/dist/bundled-providers.d.cts +5 -0
  26. package/dist/bundled-providers.d.mts +5 -0
  27. package/dist/bundled-providers.mjs +2 -0
  28. package/dist/catalog-DElG_l-8.mjs +369 -0
  29. package/dist/catalog-DurdOhD0.cjs +442 -0
  30. package/dist/catalog-XJyrtwI9.d.cts +53 -0
  31. package/dist/catalog-XJyrtwI9.d.mts +53 -0
  32. package/dist/index.cjs +2620 -0
  33. package/dist/index.d.cts +3932 -0
  34. package/dist/index.d.mts +3932 -0
  35. package/dist/index.mjs +2549 -0
  36. package/dist/model-NFEbqWMs.mjs +665 -0
  37. package/dist/model-kwW2vWDI.cjs +855 -0
  38. package/dist/provider-D14qMZsE.mjs +431 -0
  39. package/dist/provider-DkSIaann.cjs +527 -0
  40. package/dist/provider-models-BjKC53mr.cjs +85 -0
  41. package/dist/provider-models-BkxD9T17.mjs +67 -0
  42. package/dist/provider-models-DuZBXGmP.d.cts +28692 -0
  43. package/dist/provider-models-DuZBXGmP.d.mts +28692 -0
  44. package/dist/registry-BjETdicx.d.mts +35 -0
  45. package/dist/registry-Di5ULW6Z.d.cts +35 -0
  46. package/dist/registry-loader.cjs +170 -0
  47. package/dist/registry-loader.d.cts +64 -0
  48. package/dist/registry-loader.d.mts +64 -0
  49. package/dist/registry-loader.mjs +156 -0
  50. package/package.json +146 -3
@@ -0,0 +1,3 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_bundled_providers = require("./bundled-providers-BZisTfNC.cjs");
3
+ exports.bundledProviders = require_bundled_providers.bundledProviders;
@@ -0,0 +1,5 @@
1
+ import { r as RegistryCatalog } from "./registry-Di5ULW6Z.cjs";
2
+ //#region src/bundled-providers.d.ts
3
+ declare const bundledProviders: RegistryCatalog['providers'];
4
+ //#endregion
5
+ export { bundledProviders };
@@ -0,0 +1,5 @@
1
+ import { r as RegistryCatalog } from "./registry-BjETdicx.mjs";
2
+ //#region src/bundled-providers.d.ts
3
+ declare const bundledProviders: RegistryCatalog['providers'];
4
+ //#endregion
5
+ export { bundledProviders };
@@ -0,0 +1,2 @@
1
+ import { t as bundledProviders } from "./bundled-providers-BiPpU5W4.mjs";
2
+ export { bundledProviders };
@@ -0,0 +1,369 @@
1
+ import * as z from "zod";
2
+ //#region src/utils/normalize.ts
3
+ /**
4
+ * Model ID normalization utilities.
5
+ *
6
+ * Extracted from base-transformer.ts so that both the importer pipeline
7
+ * and the runtime registry lookup can share the same logic without
8
+ * pulling in the entire importer dependency tree.
9
+ */
10
+ const COMMON_AGGREGATOR_PREFIXES = [
11
+ "aihubmix-",
12
+ "aihub-",
13
+ "ahm-",
14
+ "alicloud-",
15
+ "azure-",
16
+ "baidu-",
17
+ "cbs-",
18
+ "cc-",
19
+ "sf-",
20
+ "s-",
21
+ "bai-",
22
+ "web-",
23
+ "deepinfra-",
24
+ "groq-",
25
+ "nvidia-",
26
+ "sophnet-",
27
+ "zai-org-",
28
+ "zai-",
29
+ "lucidquery-",
30
+ "lucidnova-",
31
+ "lucid-",
32
+ "siliconflow-",
33
+ "chutes-",
34
+ "huoshan-",
35
+ "meta-",
36
+ "cohere-",
37
+ "coding-",
38
+ "dmxapi-",
39
+ "perplexity-",
40
+ "ai21-",
41
+ "openai-",
42
+ "dmxapi_",
43
+ "aistudio_"
44
+ ];
45
+ const PREFIX_EXPANSIONS = [["mm-", "minimax-"]];
46
+ const COLON_VARIANT_SUFFIXES = [
47
+ ":free",
48
+ ":nitro",
49
+ ":extended",
50
+ ":beta",
51
+ ":preview",
52
+ ":thinking",
53
+ ":exacto",
54
+ ":latest",
55
+ ":cloud"
56
+ ];
57
+ const HYPHEN_VARIANT_SUFFIXES = [
58
+ "-free",
59
+ "-search",
60
+ "-online",
61
+ "-think",
62
+ "-reasoning",
63
+ "-classic",
64
+ "-low",
65
+ "-high",
66
+ "-minimal",
67
+ "-nothink",
68
+ "-no-think",
69
+ "-ssvip",
70
+ "-thinking",
71
+ "-nothinking",
72
+ "-aliyun",
73
+ "-huoshan",
74
+ "-tee",
75
+ "-cc",
76
+ "-fw",
77
+ "-di",
78
+ "-t",
79
+ "-reverse"
80
+ ];
81
+ const PAREN_VARIANT_SUFFIXES = [
82
+ "(free)",
83
+ "(beta)",
84
+ "(preview)",
85
+ "(thinking)"
86
+ ];
87
+ const PROTECTED_COMPOUND_PREFIXES = [
88
+ "non",
89
+ "no",
90
+ "pre",
91
+ "anti",
92
+ "post"
93
+ ];
94
+ const PARAMETER_SIZE_PATTERN = /-(\d+(?:\.\d+)?b)(?=-|$)/i;
95
+ const COLON_VARIANT_TAG_PATTERN = /^(?:\d+(?:[.x]\d+)*b(?:$|[-.])|q\d|iq\d|fp16|bf16|f16)/i;
96
+ const QUANTIZATION_SUFFIXES = [
97
+ "-fp8",
98
+ "-fp16",
99
+ "-bf16",
100
+ "-awq",
101
+ "-int4",
102
+ "-int8",
103
+ "-gguf",
104
+ "-gptq"
105
+ ];
106
+ const DATE_SNAPSHOT_PATTERN = /-20\d{2}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$|-20\d{2}(?:0[1-9]|1[0-2])(?:[0-2]\d|3[01])$|-2\d(?:0[1-9]|1[0-2])(?:[0-2]\d|3[01])$|-(?:0[1-9]|1[0-2])(?:[0-2]\d|3[01])$|-2\d(?:0[1-9]|1[0-2])$/;
107
+ const BEDROCK_VENDOR = "anthropic|amazon|meta|google|mistralai|cohere|openai|ai21|microsoft|nvidia";
108
+ const BEDROCK_VENDOR_DOTTED = new RegExp(`^(?:[a-z]+\\.)*(?:${`${BEDROCK_VENDOR}|deepseek|minimax|mistral|moonshot|moonshotai|qwen|writer|xai|zai`})\\.`);
109
+ const BEDROCK_VENDOR_DASH = new RegExp(`^(?:${BEDROCK_VENDOR})-{1,2}`);
110
+ const BEDROCK_REVISION_PATTERN = /(?:[-_]v?\d+)?:\d+$/i;
111
+ function stripAggregatorPrefixes(modelId, additionalPrefixes = []) {
112
+ const allPrefixes = [...additionalPrefixes, ...COMMON_AGGREGATOR_PREFIXES];
113
+ let result = modelId;
114
+ for (const prefix of allPrefixes) if (result.startsWith(prefix)) {
115
+ result = result.slice(prefix.length);
116
+ break;
117
+ }
118
+ return result;
119
+ }
120
+ /**
121
+ * Strip a Bedrock cross-vendor ARN's leading vendor prefix: region(s)+vendor dotted segments
122
+ * (`us.anthropic.claude-…` → `claude-…`) then a vendor dash prefix (`meta-llama-…` → `llama-…`).
123
+ * The final dotted segment must be a known Bedrock vendor, so native dotted model ids such as
124
+ * `flux.2-pro` and versions such as `qwen3.7` are never touched.
125
+ */
126
+ function stripBedrockVendorPrefix(modelId) {
127
+ return stripBedrockDottedVendorPrefix(modelId).replace(BEDROCK_VENDOR_DASH, "");
128
+ }
129
+ /**
130
+ * The dotted half of {@link stripBedrockVendorPrefix} (`us.anthropic.claude-…` → `claude-…`), split out
131
+ * so display-name derivation can tell how much of a raw id normalization folded away and keep the
132
+ * prefix as a distinguishing decoration (`MiniMax.MiniMax-M2.1` vs the bare `MiniMax-M2.1`).
133
+ */
134
+ function stripBedrockDottedVendorPrefix(modelId) {
135
+ return modelId.replace(BEDROCK_VENDOR_DOTTED, "");
136
+ }
137
+ /** Strip a Bedrock ARN model revision: `claude-…-v1:0` / `…:0` → bare id (keeps `whisper-v3`, no colon). */
138
+ function stripBedrockRevision(modelId) {
139
+ return modelId.replace(BEDROCK_REVISION_PATTERN, "");
140
+ }
141
+ function expandKnownPrefixes(modelId) {
142
+ for (const [abbrev, canonical] of PREFIX_EXPANSIONS) if (modelId.startsWith(abbrev)) return canonical + modelId.slice(abbrev.length);
143
+ return modelId;
144
+ }
145
+ function stripVariantSuffixes(modelId, options = {}) {
146
+ const colonSuffixes = options.colonSuffixes ?? COLON_VARIANT_SUFFIXES;
147
+ const hyphenSuffixes = options.hyphenSuffixes ?? HYPHEN_VARIANT_SUFFIXES;
148
+ const parenSuffixes = options.parenSuffixes ?? PAREN_VARIANT_SUFFIXES;
149
+ if ((options.officialModelsWithSuffix ?? /* @__PURE__ */ new Set()).has(modelId)) return modelId;
150
+ const colonIdx = modelId.lastIndexOf(":");
151
+ if (colonIdx > 0) {
152
+ const suffix = modelId.slice(colonIdx);
153
+ if (colonSuffixes.includes(suffix)) return modelId.slice(0, colonIdx);
154
+ }
155
+ for (const suffix of hyphenSuffixes) if (modelId.endsWith(suffix)) {
156
+ const remaining = modelId.slice(0, -suffix.length);
157
+ if (PROTECTED_COMPOUND_PREFIXES.some((p) => remaining === p || remaining.endsWith(`-${p}`))) continue;
158
+ return remaining;
159
+ }
160
+ for (const suffix of parenSuffixes) if (modelId.endsWith(suffix)) {
161
+ let result = modelId.slice(0, -suffix.length);
162
+ if (result.endsWith(" ")) result = result.slice(0, -1);
163
+ return result;
164
+ }
165
+ return modelId;
166
+ }
167
+ function normalizeVersionSeparators(modelId) {
168
+ return modelId.replace(/(\d)[,._p](?=\d)/g, "$1-");
169
+ }
170
+ function stripQuantization(modelId) {
171
+ for (const suffix of QUANTIZATION_SUFFIXES) if (modelId.endsWith(suffix)) return modelId.slice(0, -suffix.length);
172
+ return modelId;
173
+ }
174
+ function stripDateSnapshot(modelId) {
175
+ return modelId.replace(/@.*$/, "").replace(DATE_SNAPSHOT_PATTERN, "");
176
+ }
177
+ /**
178
+ * Iterate variant → quantization → date stripping to a fixpoint. A single pass is order-dependent —
179
+ * a trailing date shields an inner variant from the `endsWith` check (`…-thinking-2507` only exposes
180
+ * `-thinking` after the date is gone) — so without the loop canonicalization is not idempotent.
181
+ * SHARED by the build canonicalizer (`scripts/canonicalize.ts`) and the runtime resolver below.
182
+ */
183
+ function stripVariantQuantDateSuffixes(modelId) {
184
+ let result = modelId;
185
+ for (;;) {
186
+ const next = stripDateSnapshot(stripQuantization(stripVariantSuffixes(result)));
187
+ if (next === result) return result;
188
+ result = next;
189
+ }
190
+ }
191
+ function extractParameterSize(modelId) {
192
+ const match = modelId.match(PARAMETER_SIZE_PATTERN);
193
+ return match ? match[1].toLowerCase() : void 0;
194
+ }
195
+ function stripParameterSize(modelId) {
196
+ return modelId.replace(PARAMETER_SIZE_PATTERN, "");
197
+ }
198
+ /**
199
+ * Realign a registry-tag colon size/quant tag to the catalog's hyphen spelling: `gpt-oss:20b` →
200
+ * `gpt-oss-20b`, `qwen2.5:7b` → `qwen2.5-7b`. Only a size/quant LEADER is realigned (see
201
+ * COLON_VARIANT_TAG_PATTERN), so a word tag (`:free`) or a Bedrock revision (`:0`) is returned unchanged.
202
+ * This keeps the SIZE inside the id so a size-preserving match can tell a `:20b` pull apart from its
203
+ * `120b` sibling, instead of both collapsing to the bare family name.
204
+ */
205
+ function colonVariantTagToHyphen(modelId) {
206
+ const colonIdx = modelId.lastIndexOf(":");
207
+ if (colonIdx > 0 && COLON_VARIANT_TAG_PATTERN.test(modelId.slice(colonIdx + 1))) return `${modelId.slice(0, colonIdx)}-${modelId.slice(colonIdx + 1)}`;
208
+ return modelId;
209
+ }
210
+ /**
211
+ * Normalize a model ID to its canonical form.
212
+ * This is the single source of truth for model ID normalization.
213
+ *
214
+ * `keepParameterSize` produces the SIZE-PRESERVING key: the parameter size is realigned from any colon
215
+ * tag and kept (not stripped), so `qwen2.5:7b` → `qwen2-5-7b` and `gpt-oss-20b`/`gpt-oss-120b` stay
216
+ * distinct. The registry loader indexes on this to resolve a registry-tagged id to its exact-size row
217
+ * before the default (size-agnostic) key would collapse it onto a same-family sibling.
218
+ */
219
+ function normalizeModelId(modelId, options = {}) {
220
+ const parts = modelId.split("/");
221
+ let baseName = parts[parts.length - 1].toLowerCase();
222
+ baseName = stripAggregatorPrefixes(baseName);
223
+ baseName = stripBedrockVendorPrefix(baseName);
224
+ baseName = stripBedrockRevision(baseName);
225
+ baseName = expandKnownPrefixes(baseName);
226
+ if (options.keepParameterSize) baseName = colonVariantTagToHyphen(baseName);
227
+ for (;;) {
228
+ const stripped = stripVariantQuantDateSuffixes(baseName);
229
+ const next = options.keepParameterSize ? stripped : stripParameterSize(stripped);
230
+ if (next === baseName) break;
231
+ baseName = next;
232
+ }
233
+ baseName = normalizeVersionSeparators(baseName);
234
+ baseName = baseName.replace(/_/g, "-");
235
+ return baseName;
236
+ }
237
+ //#endregion
238
+ //#region src/registry-index.ts
239
+ var ModelIndex = class {
240
+ constructor(models) {
241
+ this.modelById = /* @__PURE__ */ new Map();
242
+ this.modelByNormId = /* @__PURE__ */ new Map();
243
+ this.modelBySizedNorm = /* @__PURE__ */ new Map();
244
+ for (const m of models) {
245
+ this.modelById.set(m.id, m);
246
+ const nid = normalizeModelId(m.id);
247
+ if (!this.modelByNormId.has(nid)) this.modelByNormId.set(nid, m);
248
+ const sid = normalizeModelId(m.id, { keepParameterSize: true });
249
+ if (!this.modelBySizedNorm.has(sid)) this.modelBySizedNorm.set(sid, m);
250
+ }
251
+ }
252
+ findModel(modelId) {
253
+ const exact = this.modelById.get(modelId);
254
+ if (exact) return exact;
255
+ if (colonVariantTagToHyphen(modelId) !== modelId) return this.modelBySizedNorm.get(normalizeModelId(modelId, { keepParameterSize: true })) ?? null;
256
+ const sizedModelId = normalizeModelId(modelId, { keepParameterSize: true });
257
+ const sizedHit = this.modelBySizedNorm.get(sizedModelId);
258
+ if (sizedHit) return sizedHit;
259
+ if (extractParameterSize(sizedModelId)) return null;
260
+ return this.modelByNormId.get(normalizeModelId(modelId)) ?? null;
261
+ }
262
+ };
263
+ var ProviderModelIndex = class {
264
+ constructor(overrides) {
265
+ this.overrideByKey = /* @__PURE__ */ new Map();
266
+ this.overrideByNormKey = /* @__PURE__ */ new Map();
267
+ this.overrideBySizedNormKey = /* @__PURE__ */ new Map();
268
+ this.overrideByApiKey = /* @__PURE__ */ new Map();
269
+ this.overrideByNormApiKey = /* @__PURE__ */ new Map();
270
+ this.overrideBySizedNormApiKey = /* @__PURE__ */ new Map();
271
+ this.overridesByProvider = /* @__PURE__ */ new Map();
272
+ for (const pm of overrides) {
273
+ const key = `${pm.providerId}::${pm.modelId}`;
274
+ if (!this.overrideByKey.has(key) || pm.apiModelId === pm.modelId) this.overrideByKey.set(key, pm);
275
+ const normKey = `${pm.providerId}::${normalizeModelId(pm.modelId)}`;
276
+ if (!this.overrideByNormKey.has(normKey)) this.overrideByNormKey.set(normKey, pm);
277
+ const sizedNormKey = `${pm.providerId}::${normalizeModelId(pm.modelId, { keepParameterSize: true })}`;
278
+ if (!this.overrideBySizedNormKey.has(sizedNormKey) || pm.apiModelId === pm.modelId) this.overrideBySizedNormKey.set(sizedNormKey, pm);
279
+ if (pm.apiModelId) {
280
+ const apiKey = `${pm.providerId}::${pm.apiModelId}`;
281
+ this.overrideByApiKey.set(apiKey, pm);
282
+ const normApiKey = `${pm.providerId}::${normalizeModelId(pm.apiModelId)}`;
283
+ if (!this.overrideByNormApiKey.has(normApiKey)) this.overrideByNormApiKey.set(normApiKey, pm);
284
+ const sizedNormApiKey = `${pm.providerId}::${normalizeModelId(pm.apiModelId, { keepParameterSize: true })}`;
285
+ if (!this.overrideBySizedNormApiKey.has(sizedNormApiKey)) this.overrideBySizedNormApiKey.set(sizedNormApiKey, pm);
286
+ }
287
+ let arr = this.overridesByProvider.get(pm.providerId);
288
+ if (!arr) {
289
+ arr = [];
290
+ this.overridesByProvider.set(pm.providerId, arr);
291
+ }
292
+ arr.push(pm);
293
+ }
294
+ }
295
+ findOverride(providerId, modelId) {
296
+ const key = `${providerId}::${modelId}`;
297
+ const exact = this.overrideByKey.get(key) ?? this.overrideByApiKey.get(key);
298
+ if (exact) return exact;
299
+ const sizedModelId = normalizeModelId(modelId, { keepParameterSize: true });
300
+ const sizedNormKey = `${providerId}::${sizedModelId}`;
301
+ const sizedHit = this.overrideBySizedNormKey.get(sizedNormKey) ?? this.overrideBySizedNormApiKey.get(sizedNormKey);
302
+ if (sizedHit) return sizedHit;
303
+ if (extractParameterSize(sizedModelId)) return null;
304
+ const normKey = `${providerId}::${normalizeModelId(modelId)}`;
305
+ return this.overrideByNormKey.get(normKey) ?? this.overrideByNormApiKey.get(normKey) ?? null;
306
+ }
307
+ getOverridesForProvider(providerId) {
308
+ return this.overridesByProvider.get(providerId) ?? [];
309
+ }
310
+ };
311
+ //#endregion
312
+ //#region src/catalog.ts
313
+ /**
314
+ * Schema-compatibility version of the registry JSON contract.
315
+ *
316
+ * The remote updater fetches from a `v{REGISTRY_SCHEMA_VERSION}/` path and the
317
+ * sync CI publishes to the matching dir, so an app only ever receives data its
318
+ * bundled schema can parse. The sync CI derives its publish dir from this
319
+ * constant (single source of truth).
320
+ *
321
+ * Bump on ANY change older clients cannot parse. Since v2 that is a narrow set:
322
+ * the schemas drop what they do not recognize instead of failing the document
323
+ * (`schemas/forwardCompat.ts`), so **enum-vocabulary growth no longer bumps** —
324
+ * a new modality / capability / effort is dropped by v2 clients and honored by
325
+ * newer ones. New optional fields were always safe (`z.object` strips unknown
326
+ * keys). Structural changes (field rename / retype / required-field removal)
327
+ * still bump. New runtime wire behavior also gets a new stream when it requires
328
+ * raising {@link REGISTRY_MIN_APP_VERSION}, so older streams keep their existing
329
+ * version floor and continue receiving compatible catalog updates.
330
+ */
331
+ const REGISTRY_SCHEMA_VERSION = 3;
332
+ /**
333
+ * Oldest application version whose runtime understands the semantic values in
334
+ * the current remote catalog. Bump when data starts using a new adapter family,
335
+ * endpoint type, wire behavior, or other value that older runtime code cannot execute.
336
+ */
337
+ const REGISTRY_MIN_APP_VERSION = "2.1.4";
338
+ /**
339
+ * The three JSON data files this package emits (`packages/provider-registry/data/`).
340
+ * The canonical definition of what a full catalog consists of — consumed by the
341
+ * app's loader-path resolution and by the remote updater's fetch loop.
342
+ */
343
+ const REGISTRY_FILES = [
344
+ "models.json",
345
+ "providers.json",
346
+ "provider-models.json"
347
+ ];
348
+ /** Unsigned branch data permitted to shadow the bundle. Provider routing stays bundled. */
349
+ const REMOTE_REGISTRY_FILES = ["models.json", "provider-models.json"];
350
+ /**
351
+ * Manifest published alongside each `v{N}/` catalog set (written last as the
352
+ * completion marker). Consumed by the app's remote updater — to validate a
353
+ * downloaded manifest and to gate a persisted override — so both parse against
354
+ * this one schema instead of hand-rolled checks.
355
+ */
356
+ const CatalogManifestSchema = z.object({
357
+ /** Oldest app whose runtime can interpret this catalog's semantic values. */
358
+ minAppVersion: z.string().min(1),
359
+ /** Latest released bundle this snapshot is known to be at least as new as. */
360
+ sourceAppVersion: z.string().min(1),
361
+ /** Monotonic workflow revision; clients never replace an active snapshot with an older/equal revision. */
362
+ revision: z.number().int().nonnegative(),
363
+ /** Schema version the set targets; must equal {@link REGISTRY_SCHEMA_VERSION} to be usable. */
364
+ schemaVersion: z.number().int(),
365
+ /** filename → content-hash `version`, binding the set to one published snapshot. */
366
+ files: z.record(z.string(), z.string())
367
+ });
368
+ //#endregion
369
+ export { REMOTE_REGISTRY_FILES as a, normalizeModelId as c, stripDateSnapshot as d, stripVariantQuantDateSuffixes as f, REGISTRY_SCHEMA_VERSION as i, stripBedrockDottedVendorPrefix as l, REGISTRY_FILES as n, ModelIndex as o, REGISTRY_MIN_APP_VERSION as r, ProviderModelIndex as s, CatalogManifestSchema as t, stripBedrockRevision as u };