prefer-inference-core 0.0.0-g0be6ef9

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 (45) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +166 -0
  3. package/dist/catalog.d.ts +27 -0
  4. package/dist/catalog.d.ts.map +1 -0
  5. package/dist/catalog.js +547 -0
  6. package/dist/catalog.js.map +1 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +412 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/huggingface.d.ts +18 -0
  12. package/dist/huggingface.d.ts.map +1 -0
  13. package/dist/huggingface.js +296 -0
  14. package/dist/huggingface.js.map +1 -0
  15. package/dist/index.d.ts +8 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +8 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/planning.d.ts +11 -0
  20. package/dist/planning.d.ts.map +1 -0
  21. package/dist/planning.js +610 -0
  22. package/dist/planning.js.map +1 -0
  23. package/dist/prefer.mjs +9493 -0
  24. package/dist/prefer.mjs.map +7 -0
  25. package/dist/releases.d.ts +33 -0
  26. package/dist/releases.d.ts.map +1 -0
  27. package/dist/releases.js +288 -0
  28. package/dist/releases.js.map +1 -0
  29. package/dist/resources.d.ts +10 -0
  30. package/dist/resources.d.ts.map +1 -0
  31. package/dist/resources.js +250 -0
  32. package/dist/resources.js.map +1 -0
  33. package/dist/types.d.ts +409 -0
  34. package/dist/types.d.ts.map +1 -0
  35. package/dist/types.js +2 -0
  36. package/dist/types.js.map +1 -0
  37. package/dist/utils.d.ts +20 -0
  38. package/dist/utils.d.ts.map +1 -0
  39. package/dist/utils.js +112 -0
  40. package/dist/utils.js.map +1 -0
  41. package/package.json +58 -0
  42. package/schemas/prefer-model-catalog-extension.schema.json +25 -0
  43. package/schemas/prefer-model-catalog.schema.json +54 -0
  44. package/schemas/prefer-model-plan.schema.json +115 -0
  45. package/schemas/prefer-resource-profile.schema.json +70 -0
@@ -0,0 +1,296 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { dirname, resolve } from "node:path";
3
+ import { globMatch, isObject, repositoryKey, requireString, sha256, stableStringify, validateRepository, validateRevision } from "./utils.js";
4
+ const DEFAULT_API = "https://huggingface.co";
5
+ const MAX_RESPONSE_BYTES = 50 * 1024 * 1024;
6
+ export async function resolveHuggingFaceRepository(selection, options = {}) {
7
+ const repository = validateRepository(selection.repository);
8
+ const requestedRevision = validateRevision(selection.revision ?? "main");
9
+ const include = selection.include?.length ? [...new Set(selection.include)].sort() : undefined;
10
+ const cacheIdentity = { repository, requestedRevision, include: include ?? null };
11
+ const cachePath = options.cacheDir ? resolve(options.cacheDir, `${sha256(stableStringify(cacheIdentity))}.json`) : undefined;
12
+ if (cachePath && options.preferCache) {
13
+ try {
14
+ const cached = JSON.parse(await readFile(cachePath, "utf8"));
15
+ if (cached.repository === repository && cached.requested_revision === requestedRevision)
16
+ return cached;
17
+ }
18
+ catch (error) {
19
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT"))
20
+ throw error;
21
+ }
22
+ }
23
+ const fetchImpl = options.fetch ?? fetch;
24
+ const base = (options.apiBaseUrl ?? DEFAULT_API).replace(/\/+$/u, "");
25
+ const encodedRepository = repository.split("/").map(encodeURIComponent).join("/");
26
+ const encodedRevision = requestedRevision.split("/").map(encodeURIComponent).join("/");
27
+ const headers = { accept: "application/json", "user-agent": "prefer-inference-core" };
28
+ if (options.token?.trim())
29
+ headers.authorization = `Bearer ${options.token.trim()}`;
30
+ const model = await fetchJson(`${base}/api/models/${encodedRepository}/revision/${encodedRevision}`, fetchImpl, headers, options.timeoutMs);
31
+ const modelObject = objectValue(model, `Hugging Face model ${repository}`);
32
+ const resolvedRevision = requireString(modelObject.sha, `${repository} resolved revision`).toLowerCase();
33
+ if (!/^[0-9a-f]{40}$/u.test(resolvedRevision))
34
+ throw new Error(`${repository} did not resolve to an immutable commit`);
35
+ if (/^[0-9a-f]{40}$/u.test(requestedRevision) && resolvedRevision !== requestedRevision.toLowerCase()) {
36
+ throw new Error(`${repository} resolved revision does not match the requested immutable commit`);
37
+ }
38
+ const treeEntries = [];
39
+ let next = `${base}/api/models/${encodedRepository}/tree/${encodeURIComponent(resolvedRevision)}?recursive=true&expand=true`;
40
+ while (next) {
41
+ const response = await fetchResponse(next, fetchImpl, headers, options.timeoutMs);
42
+ const payload = await responseJson(response, `Hugging Face tree ${repository}`);
43
+ if (!Array.isArray(payload))
44
+ throw new Error(`${repository} tree response is not an array`);
45
+ treeEntries.push(...payload);
46
+ next = nextLink(response.headers.get("link"));
47
+ }
48
+ const files = treeEntries.flatMap((entry) => {
49
+ if (!isObject(entry) || entry.type !== "file")
50
+ return [];
51
+ const path = typeof entry.path === "string" ? entry.path : "";
52
+ const size = typeof entry.size === "number" ? entry.size : -1;
53
+ if (!path || !Number.isSafeInteger(size) || size < 0 || (include && !include.some((pattern) => globMatch(path, pattern))))
54
+ return [];
55
+ const lfs = isObject(entry.lfs) ? entry.lfs : undefined;
56
+ const lfsOid = typeof lfs?.oid === "string" && /^[0-9a-f]{64}$/iu.test(lfs.oid) ? lfs.oid.toLowerCase() : undefined;
57
+ return [{
58
+ path,
59
+ size,
60
+ ...(typeof entry.oid === "string" ? { blob_oid: entry.oid } : {}),
61
+ ...(lfsOid ? { lfs_sha256: lfsOid } : {}),
62
+ ...(typeof entry.xetHash === "string" ? { xet_hash: entry.xetHash } : {})
63
+ }];
64
+ }).sort((left, right) => left.path.localeCompare(right.path));
65
+ const tags = Array.isArray(modelObject.tags) ? modelObject.tags.filter((tag) => typeof tag === "string") : [];
66
+ const cardData = isObject(modelObject.cardData) ? modelObject.cardData : {};
67
+ const result = {
68
+ repository,
69
+ requested_revision: requestedRevision,
70
+ resolved_revision: resolvedRevision,
71
+ base_models: baseModels(cardData.base_model, tags),
72
+ ...(typeof modelObject.pipeline_tag === "string" ? { pipeline_tag: modelObject.pipeline_tag } : {}),
73
+ ...(typeof modelObject.library_name === "string" ? { library_name: modelObject.library_name } : {}),
74
+ ...(typeof cardData.license === "string" ? { license: cardData.license } : {}),
75
+ gated: typeof modelObject.gated === "string" || typeof modelObject.gated === "boolean" ? modelObject.gated : false,
76
+ private: modelObject.private === true,
77
+ tags: [...new Set(tags)].sort(),
78
+ files_complete: include === undefined,
79
+ ...(include ? { include_patterns: include } : {}),
80
+ files,
81
+ retrieved_at: (options.now?.() ?? new Date()).toISOString()
82
+ };
83
+ if (cachePath) {
84
+ await mkdir(dirname(cachePath), { recursive: true });
85
+ await writeFile(cachePath, `${JSON.stringify(result, null, 2)}\n`, "utf8");
86
+ }
87
+ return result;
88
+ }
89
+ export async function resolveHuggingFaceSelections(selections, options = {}) {
90
+ const concurrency = options.concurrency ?? 4;
91
+ if (!Number.isInteger(concurrency) || concurrency < 1 || concurrency > 8)
92
+ throw new Error("Hugging Face concurrency must be between 1 and 8");
93
+ const deduplicated = new Map();
94
+ for (const selection of selections) {
95
+ const repository = validateRepository(selection.repository);
96
+ const revision = validateRevision(selection.revision ?? "main");
97
+ const key = repositoryKey(repository, revision);
98
+ const previous = deduplicated.get(key);
99
+ const include = !previous
100
+ ? selection.include?.length ? [...new Set(selection.include)].sort() : undefined
101
+ : previous.include && selection.include
102
+ ? [...new Set([...previous.include, ...selection.include])].sort()
103
+ : undefined;
104
+ deduplicated.set(key, {
105
+ repository,
106
+ revision,
107
+ ...(include ? { include } : {})
108
+ });
109
+ }
110
+ const normalized = [...deduplicated.values()];
111
+ const result = new Array(normalized.length);
112
+ let cursor = 0;
113
+ await Promise.all(Array.from({ length: Math.min(concurrency, normalized.length) }, async () => {
114
+ while (cursor < normalized.length) {
115
+ const index = cursor++;
116
+ result[index] = await resolveHuggingFaceRepository(normalized[index], options);
117
+ }
118
+ }));
119
+ return result;
120
+ }
121
+ export async function createCatalogExtension(selections, options = {}) {
122
+ const normalizedSelections = selections.map((selection) => ({
123
+ ...selection,
124
+ repository: validateRepository(selection.repository),
125
+ revision: validateRevision(selection.revision ?? "main")
126
+ }));
127
+ const repositories = await resolveHuggingFaceSelections(normalizedSelections, options);
128
+ const byRequestedKey = Object.fromEntries(repositories.map((entry) => [repositoryKey(entry.repository, entry.requested_revision), entry]));
129
+ const models = {};
130
+ for (const selection of normalizedSelections) {
131
+ if (!selection.model_id)
132
+ continue;
133
+ if (!/^[a-z0-9]+(?:[.-][a-z0-9]+)*$/u.test(selection.model_id))
134
+ throw new Error(`invalid extension model id ${selection.model_id}`);
135
+ if (models[selection.model_id])
136
+ throw new Error(`duplicate extension model id ${selection.model_id}`);
137
+ const requestedRevision = selection.revision ?? "main";
138
+ const resolved = byRequestedKey[repositoryKey(selection.repository, requestedRevision)];
139
+ if (!resolved)
140
+ throw new Error(`could not bind extension model ${selection.model_id}`);
141
+ models[selection.model_id] = { repository: resolved.repository, resolved_revision: resolved.resolved_revision };
142
+ }
143
+ return {
144
+ schema_version: "prefer.model-catalog-extension.v1",
145
+ generated_at: (options.now?.() ?? new Date()).toISOString(),
146
+ repositories: Object.fromEntries(repositories.map((entry) => [repositoryKey(entry.repository, entry.resolved_revision), entry])),
147
+ models
148
+ };
149
+ }
150
+ export function mergeCatalogExtensions(base, overlay, conflict = "error") {
151
+ validateCatalogExtension(base);
152
+ validateCatalogExtension(overlay);
153
+ const repositories = { ...base.repositories };
154
+ for (const [key, value] of Object.entries(overlay.repositories)) {
155
+ const existing = repositories[key];
156
+ if (existing && JSON.stringify(existing) !== JSON.stringify(value) && conflict === "error")
157
+ throw new Error(`extension repository conflict for ${key}`);
158
+ if (!existing || conflict === "replace")
159
+ repositories[key] = value;
160
+ }
161
+ const models = { ...base.models };
162
+ for (const [key, value] of Object.entries(overlay.models)) {
163
+ const existing = models[key];
164
+ if (existing && (existing.repository !== value.repository || existing.resolved_revision !== value.resolved_revision)) {
165
+ if (conflict === "error")
166
+ throw new Error(`extension model id conflict for ${key}`);
167
+ if (conflict === "keep")
168
+ continue;
169
+ }
170
+ models[key] = value;
171
+ }
172
+ return { ...base, generated_at: overlay.generated_at, repositories, models };
173
+ }
174
+ export function createRuntimeModelCatalog(base, extensions = [], conflict = "error") {
175
+ const repositories = {};
176
+ for (const repository of Object.values(base.repositories)) {
177
+ repositories[repositoryKey(repository.repository, repository.resolved_revision)] = repository;
178
+ }
179
+ const models = Object.fromEntries(Object.entries(base.models).map(([id, definition]) => [id, { source: "prefer", definition }]));
180
+ let generatedAt = base.generated_at;
181
+ for (const extension of extensions) {
182
+ validateCatalogExtension(extension);
183
+ generatedAt = extension.generated_at > generatedAt ? extension.generated_at : generatedAt;
184
+ for (const [key, repository] of Object.entries(extension.repositories)) {
185
+ const existing = repositories[key];
186
+ if (existing && JSON.stringify(existing) !== JSON.stringify(repository)) {
187
+ if (conflict === "error")
188
+ throw new Error(`runtime catalog repository conflict for ${key}`);
189
+ if (conflict === "keep")
190
+ continue;
191
+ }
192
+ repositories[key] = repository;
193
+ }
194
+ for (const [id, binding] of Object.entries(extension.models)) {
195
+ const existing = models[id];
196
+ if (existing) {
197
+ if (conflict === "error")
198
+ throw new Error(`runtime catalog model id conflict for ${id}`);
199
+ if (conflict === "keep")
200
+ continue;
201
+ }
202
+ models[id] = { source: "extension", ...binding };
203
+ }
204
+ }
205
+ return {
206
+ schema_version: "prefer.runtime-model-catalog.v1",
207
+ generated_at: generatedAt,
208
+ base_catalog_fingerprint: base.catalog_fingerprint,
209
+ defaults: base.defaults,
210
+ models,
211
+ repositories
212
+ };
213
+ }
214
+ export function validateCatalogExtension(value) {
215
+ const extension = objectValue(value, "catalog extension");
216
+ if (extension.schema_version !== "prefer.model-catalog-extension.v1")
217
+ throw new Error("catalog extension schema is incompatible");
218
+ const generatedAt = requireString(extension.generated_at, "catalog extension generated_at");
219
+ if (!Number.isFinite(new Date(generatedAt).getTime()))
220
+ throw new Error("catalog extension generated_at is invalid");
221
+ const repositories = objectValue(extension.repositories, "catalog extension repositories");
222
+ const models = objectValue(extension.models, "catalog extension models");
223
+ for (const [key, rawRepository] of Object.entries(repositories)) {
224
+ const repository = objectValue(rawRepository, `catalog extension repository ${key}`);
225
+ const repositoryId = validateRepository(requireString(repository.repository, `${key} repository`));
226
+ const resolvedRevision = validateRevision(requireString(repository.resolved_revision, `${key} resolved_revision`), { immutable: true });
227
+ if (key !== repositoryKey(repositoryId, resolvedRevision))
228
+ throw new Error(`catalog extension repository key ${key} is invalid`);
229
+ }
230
+ for (const [id, rawBinding] of Object.entries(models)) {
231
+ if (!/^[a-z0-9]+(?:[.-][a-z0-9]+)*$/u.test(id))
232
+ throw new Error(`invalid extension model id ${id}`);
233
+ const binding = objectValue(rawBinding, `catalog extension model ${id}`);
234
+ const repository = validateRepository(requireString(binding.repository, `${id} repository`));
235
+ const resolvedRevision = validateRevision(requireString(binding.resolved_revision, `${id} resolved_revision`), { immutable: true });
236
+ if (!repositories[repositoryKey(repository, resolvedRevision)])
237
+ throw new Error(`extension model ${id} has no matching repository metadata`);
238
+ }
239
+ }
240
+ async function fetchJson(url, fetchImpl, headers, timeoutMs = 30_000) {
241
+ return responseJson(await fetchResponse(url, fetchImpl, headers, timeoutMs), url);
242
+ }
243
+ async function fetchResponse(url, fetchImpl, headers, timeoutMs = 30_000) {
244
+ const response = await fetchImpl(url, { headers, signal: AbortSignal.timeout(timeoutMs) });
245
+ if (!response.ok) {
246
+ const retry = response.headers.get("retry-after");
247
+ const suffix = response.status === 429 ? `; rate limited${retry ? `, retry after ${retry}s` : ""}` : "";
248
+ throw new Error(`${url} returned HTTP ${response.status}${suffix}`);
249
+ }
250
+ return response;
251
+ }
252
+ async function responseJson(response, label) {
253
+ const declared = Number(response.headers.get("content-length") ?? "0");
254
+ if (declared > MAX_RESPONSE_BYTES)
255
+ throw new Error(`${label} exceeds the response size limit`);
256
+ const bytes = new Uint8Array(await response.arrayBuffer());
257
+ if (bytes.byteLength > MAX_RESPONSE_BYTES)
258
+ throw new Error(`${label} exceeds the response size limit`);
259
+ try {
260
+ return JSON.parse(new TextDecoder().decode(bytes));
261
+ }
262
+ catch {
263
+ throw new Error(`${label} returned invalid JSON`);
264
+ }
265
+ }
266
+ function objectValue(value, label) {
267
+ if (!isObject(value))
268
+ throw new Error(`${label} is not an object`);
269
+ return value;
270
+ }
271
+ function baseModels(value, tags) {
272
+ const result = new Set();
273
+ if (typeof value === "string")
274
+ result.add(value);
275
+ if (Array.isArray(value))
276
+ for (const entry of value)
277
+ if (typeof entry === "string")
278
+ result.add(entry);
279
+ for (const tag of tags) {
280
+ const match = /^base_model(?::(?:quantized|finetune|adapter))?:(.+)$/u.exec(tag);
281
+ if (match?.[1])
282
+ result.add(match[1]);
283
+ }
284
+ return [...result].sort();
285
+ }
286
+ function nextLink(value) {
287
+ if (!value)
288
+ return undefined;
289
+ for (const item of value.split(",")) {
290
+ const match = /<([^>]+)>\s*;\s*rel="next"/u.exec(item);
291
+ if (match?.[1])
292
+ return match[1];
293
+ }
294
+ return undefined;
295
+ }
296
+ //# sourceMappingURL=huggingface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"huggingface.js","sourceRoot":"","sources":["../src/huggingface.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export * from "./types.js";
2
+ export * from "./utils.js";
3
+ export * from "./catalog.js";
4
+ export * from "./huggingface.js";
5
+ export * from "./releases.js";
6
+ export * from "./resources.js";
7
+ export * from "./planning.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export * from "./types.js";
2
+ export * from "./utils.js";
3
+ export * from "./catalog.js";
4
+ export * from "./huggingface.js";
5
+ export * from "./releases.js";
6
+ export * from "./resources.js";
7
+ export * from "./planning.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ModelCatalogSnapshot, ModelPlanRequest, ModelSetPlan, PlanModelSetOptions, QuantQuality, ResolvedModelVariant, ResourceProfile, VariantFitEstimate, VariantFitOptions, WorkloadTuningRequest, WorkloadTuningResult } from "./types.js";
2
+ export declare function quantQuality(quant: string): QuantQuality;
3
+ export declare function estimateVariantFit(variant: ResolvedModelVariant, resources: ResourceProfile, options?: VariantFitOptions): VariantFitEstimate;
4
+ export declare function planModelSet(catalog: ModelCatalogSnapshot, options: PlanModelSetOptions): ModelSetPlan;
5
+ /** Convert a generated engine deployment's existing model or bundle members
6
+ * into planner requests. Bundle members are optional by default; single-model
7
+ * deployments remain required. A deployment quant is a starting point, not an
8
+ * exact lock, so constrained hardware may choose a smaller published lane. */
9
+ export declare function modelRequestsFromDeployment(value: unknown): ModelPlanRequest[];
10
+ export declare function tuneWorkloadToFit(variant: ResolvedModelVariant, resources: ResourceProfile, request: WorkloadTuningRequest, options?: Omit<VariantFitOptions, "workload">): WorkloadTuningResult;
11
+ //# sourceMappingURL=planning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planning.d.ts","sourceRoot":"","sources":["../src/planning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAIhB,YAAY,EACZ,mBAAmB,EACnB,YAAY,EAEZ,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAmBpB,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAkBxD;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,eAAe,EAC1B,OAAO,GAAE,iBAAsB,GAC9B,kBAAkB,CAmEpB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAmHtG;AAED;;;8EAG8E;AAC9E,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,EAAE,CA2B9E;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,qBAAqB,EAC9B,OAAO,GAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAM,GAChD,oBAAoB,CAqDtB"}