First upload version 0.0.1

This commit is contained in:
Neyra
2026-02-05 15:27:49 +08:00
commit 8e9b7201ed
4182 changed files with 593136 additions and 0 deletions

View File

@@ -0,0 +1,6 @@
export declare class GgufReadOffset {
offset: number;
constructor(offset: number | GgufReadOffset);
moveBy(amount: number): void;
static resolveReadOffset(offset: number | GgufReadOffset): GgufReadOffset;
}

View File

@@ -0,0 +1,18 @@
export class GgufReadOffset {
offset;
constructor(offset) {
if (offset instanceof GgufReadOffset)
this.offset = offset.offset;
else
this.offset = offset;
}
moveBy(amount) {
this.offset += amount;
}
static resolveReadOffset(offset) {
if (offset instanceof GgufReadOffset)
return offset;
return new GgufReadOffset(offset);
}
}
//# sourceMappingURL=GgufReadOffset.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"GgufReadOffset.js","sourceRoot":"","sources":["../../../src/gguf/utils/GgufReadOffset.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAc;IAChB,MAAM,CAAS;IAEtB,YAAmB,MAA+B;QAC9C,IAAI,MAAM,YAAY,cAAc;YAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;;YAE5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAC7B,CAAC;IAEM,MAAM,CAAC,MAAc;QACxB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC;IAC1B,CAAC;IAEM,MAAM,CAAC,iBAAiB,CAAC,MAA+B;QAC3D,IAAI,MAAM,YAAY,cAAc;YAChC,OAAO,MAAM,CAAC;QAElB,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;CACJ"}

View File

@@ -0,0 +1,6 @@
import { MetadataKeyValueRecord, MetadataValue } from "../types/GgufFileInfoTypes.js";
export declare function convertMetadataKeyValueRecordToNestedObject(keyValueRecord: MetadataKeyValueRecord, { logOverrideWarnings, ignoreKeys, noDirectSubNestingKeys }?: {
logOverrideWarnings?: boolean;
ignoreKeys?: readonly string[];
noDirectSubNestingKeys?: readonly string[];
}): Record<string, MetadataValue>;

View File

@@ -0,0 +1,76 @@
import { getConsoleLogPrefix } from "../../utils/getConsoleLogPrefix.js";
export function convertMetadataKeyValueRecordToNestedObject(keyValueRecord, { logOverrideWarnings = true, ignoreKeys = [], noDirectSubNestingKeys } = {}) {
const nestedObject = {};
const ignoreKeySet = new Set(ignoreKeys);
const noDirectSubNestingKeysSet = new Set(noDirectSubNestingKeys);
for (const [key, value] of Object.entries(keyValueRecord)) {
if (ignoreKeySet.has(key))
continue;
const { lastObject, lastKey } = getNestedObject(key, nestedObject, noDirectSubNestingKeysSet);
if (Object.hasOwn(lastObject, lastKey)) {
const currentValue = lastObject[lastKey];
delete lastObject[lastKey];
flattenNestedKeys(lastObject, lastKey, currentValue, logOverrideWarnings);
if (Object.hasOwn(lastObject, lastKey) && logOverrideWarnings)
console.warn(getConsoleLogPrefix() + `Metadata key "${key}" is already occupied by a value. Overwriting it.`);
}
lastObject[lastKey] = value;
}
return nestedObject;
}
function getNestedObject(key, nestedObject, noDirectSubNestingKeysSet) {
const nestedKey = key.split(".");
let lastKey = "";
let currentObject = nestedObject;
const previousKeys = [];
while (nestedKey.length > 0) {
let currentKey = nestedKey.shift();
while (noDirectSubNestingKeysSet.has([...previousKeys, currentKey].join(".")) && nestedKey.length > 0)
currentKey += "." + nestedKey.shift();
if (nestedKey.length === 0) {
lastKey = currentKey;
break;
}
if (!Object.hasOwn(currentObject, currentKey)) {
const nextCurrentObject = {};
currentObject[currentKey] = nextCurrentObject;
currentObject = nextCurrentObject;
}
else {
const value = currentObject[currentKey];
if (value instanceof Array || value == null || typeof value !== "object") {
if (nestedKey.length > 0) {
nestedKey.unshift(currentKey + "." + nestedKey.shift());
continue;
}
throw new Error(`Cannot create nested object for key "${key}". The key "${currentKey}" is already occupied by a non-object value.`);
}
currentObject = value;
}
previousKeys.push(currentKey);
}
return {
lastObject: currentObject,
lastKey
};
}
function flattenNestedKeys(parent, newParentKey, keyValue, logOverrideWarnings = false) {
if (keyValue === undefined)
return;
if (typeof keyValue !== "object" || keyValue instanceof Array) {
parent[newParentKey] = keyValue;
return;
}
for (const [key, subValue] of Object.entries(keyValue)) {
const newKey = newParentKey + "." + key;
if (Object.hasOwn(parent, newKey)) {
const currentValue = parent[newKey];
delete parent[newKey];
flattenNestedKeys(parent, newKey, currentValue, logOverrideWarnings);
if (Object.hasOwn(parent, newKey) && logOverrideWarnings)
console.warn(getConsoleLogPrefix() + `Metadata key "${newKey}" is already occupied by a value. Overwriting it.`);
}
parent[newKey] = subValue;
}
}
//# sourceMappingURL=convertMetadataKeyValueRecordToNestedObject.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"convertMetadataKeyValueRecordToNestedObject.js","sourceRoot":"","sources":["../../../src/gguf/utils/convertMetadataKeyValueRecordToNestedObject.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,4 @@
/**
* Convert a GGUF file type number to its corresponding type name
*/
export declare function getGgufFileTypeName(fileType?: number): "ALL_F32" | "MOSTLY_F16" | "MOSTLY_Q4_0" | "MOSTLY_Q4_1" | "MOSTLY_Q4_1_SOME_F16" | "MOSTLY_Q4_2" | "MOSTLY_Q4_3" | "MOSTLY_Q8_0" | "MOSTLY_Q5_0" | "MOSTLY_Q5_1" | "MOSTLY_Q2_K" | "MOSTLY_Q3_K_S" | "MOSTLY_Q3_K_M" | "MOSTLY_Q3_K_L" | "MOSTLY_Q4_K_S" | "MOSTLY_Q4_K_M" | "MOSTLY_Q5_K_S" | "MOSTLY_Q5_K_M" | "MOSTLY_Q6_K" | "MOSTLY_IQ2_XXS" | "MOSTLY_IQ2_XS" | "MOSTLY_Q2_K_S" | "MOSTLY_IQ3_XS" | "MOSTLY_IQ3_XXS" | "MOSTLY_IQ1_S" | "MOSTLY_IQ4_NL" | "MOSTLY_IQ3_S" | "MOSTLY_IQ3_M" | "MOSTLY_IQ2_S" | "MOSTLY_IQ2_M" | "MOSTLY_IQ4_XS" | "MOSTLY_IQ1_M" | "MOSTLY_BF16" | "MOSTLY_Q4_0_4_4" | "MOSTLY_Q4_0_4_8" | "MOSTLY_Q4_0_8_8" | "MOSTLY_TQ1_0" | "MOSTLY_TQ2_0" | "MOSTLY_MXFP4_MOE" | undefined;

View File

@@ -0,0 +1,13 @@
import { GgufFileType } from "../types/GgufMetadataTypes.js";
const fileTypeNumberToNameMap = new Map();
for (const [key, value] of Object.entries(GgufFileType)) {
if (typeof value === "number")
fileTypeNumberToNameMap.set(value, key);
}
/**
* Convert a GGUF file type number to its corresponding type name
*/
export function getGgufFileTypeName(fileType) {
return fileTypeNumberToNameMap.get(fileType) ?? undefined;
}
//# sourceMappingURL=getGgufFileTypeName.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"getGgufFileTypeName.js","sourceRoot":"","sources":["../../../src/gguf/utils/getGgufFileTypeName.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,+BAA+B,CAAC;AAE3D,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAqC,CAAC;AAC7E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ;QACzB,uBAAuB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAgC,CAAC,CAAC;AAC7E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAiB;IACjD,OAAO,uBAAuB,CAAC,GAAG,CAAC,QAAS,CAAC,IAAI,SAAS,CAAC;AAC/D,CAAC"}

View File

@@ -0,0 +1,3 @@
import { GgufArchitectureType, GgufMetadata } from "../types/GgufMetadataTypes.js";
import { MergeOptionalUnionTypes } from "../../utils/mergeUnionTypes.js";
export declare function getGgufMetadataArchitectureData<const T extends GgufArchitectureType>(ggufMetadata: GgufMetadata<T>): (GgufArchitectureType extends T ? MergeOptionalUnionTypes<Exclude<GgufMetadata[T], undefined>> : GgufMetadata<T>[T]);

View File

@@ -0,0 +1,4 @@
export function getGgufMetadataArchitectureData(ggufMetadata) {
return ggufMetadata[ggufMetadata.general?.architecture] ?? {};
}
//# sourceMappingURL=getGgufMetadataArchitectureData.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"getGgufMetadataArchitectureData.js","sourceRoot":"","sources":["../../../src/gguf/utils/getGgufMetadataArchitectureData.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,+BAA+B,CAAuC,YAA6B;IAK/G,OAAO,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,EAAS,CAAC;AACzE,CAAC"}

View File

@@ -0,0 +1 @@
export declare function getGgufMetadataKeyValue(metadata: Record<string, any>, key: string): any;

View File

@@ -0,0 +1,27 @@
export function getGgufMetadataKeyValue(metadata, key) {
return readMedataKey(metadata, key.split("."));
}
function readMedataKey(metadata, keyParts) {
for (const [metadataKey, value] of Object.entries(metadata)) {
const matchLength = checkMatchLength(metadataKey, keyParts);
if (matchLength === 0)
continue;
if (matchLength === keyParts.length)
return value;
const res = readMedataKey(value, keyParts.slice(matchLength));
if (res !== undefined)
return res;
}
return undefined;
}
function checkMatchLength(metadataKey, keyParts) {
const metadataKeyParts = metadataKey.split(".");
if (metadataKeyParts.length > keyParts.length)
return 0;
for (let i = 0; i < metadataKeyParts.length; i++) {
if (metadataKeyParts[i] !== keyParts[i])
return 0;
}
return metadataKeyParts.length;
}
//# sourceMappingURL=getGgufMetadataKeyValue.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"getGgufMetadataKeyValue.js","sourceRoot":"","sources":["../../../src/gguf/utils/getGgufMetadataKeyValue.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,uBAAuB,CAAC,QAA6B,EAAE,GAAW;IAC9E,OAAO,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,aAAa,CAAC,QAA6B,EAAE,QAAkB;IACpE,KAAK,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1D,MAAM,WAAW,GAAG,gBAAgB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC5D,IAAI,WAAW,KAAK,CAAC;YACjB,SAAS;QAEb,IAAI,WAAW,KAAK,QAAQ,CAAC,MAAM;YAC/B,OAAO,KAAK,CAAC;QAEjB,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QAC9D,IAAI,GAAG,KAAK,SAAS;YACjB,OAAO,GAAG,CAAC;IACnB,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAmB,EAAE,QAAkB;IAC7D,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEhD,IAAI,gBAAgB,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM;QACzC,OAAO,CAAC,CAAC;IAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,IAAI,gBAAgB,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;YACnC,OAAO,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,gBAAgB,CAAC,MAAM,CAAC;AACnC,CAAC"}

View File

@@ -0,0 +1,2 @@
import { GgufFileType } from "../types/GgufMetadataTypes.js";
export declare const ggufQuantNames: Map<string, GgufFileType>;

View File

@@ -0,0 +1,41 @@
import { GgufFileType } from "../types/GgufMetadataTypes.js";
export const ggufQuantNames = new Map([
["Q4_0", GgufFileType.MOSTLY_Q4_0],
["Q4_1", GgufFileType.MOSTLY_Q4_1],
["MXFP4", GgufFileType.MOSTLY_MXFP4_MOE],
["Q5_0", GgufFileType.MOSTLY_Q5_0],
["Q5_1", GgufFileType.MOSTLY_Q5_1],
["IQ2_XXS", GgufFileType.MOSTLY_IQ2_XXS],
["IQ2_XS", GgufFileType.MOSTLY_IQ2_XS],
["IQ2_S", GgufFileType.MOSTLY_IQ2_S],
["IQ2_M", GgufFileType.MOSTLY_IQ2_M],
["IQ1_S", GgufFileType.MOSTLY_IQ1_S],
["IQ1_M", GgufFileType.MOSTLY_IQ1_M],
["TQ1_0", GgufFileType.MOSTLY_TQ1_0],
["TQ2_0", GgufFileType.MOSTLY_TQ2_0],
["Q2_K", GgufFileType.MOSTLY_Q2_K],
["Q2_K_S", GgufFileType.MOSTLY_Q2_K_S],
["IQ3_XXS", GgufFileType.MOSTLY_IQ3_XXS],
["IQ3_S", GgufFileType.MOSTLY_IQ3_S],
["IQ3_M", GgufFileType.MOSTLY_IQ3_M],
["Q3_K", GgufFileType.MOSTLY_Q3_K_M],
["IQ3_XS", GgufFileType.MOSTLY_IQ3_XS],
["Q3_K_S", GgufFileType.MOSTLY_Q3_K_S],
["Q3_K_M", GgufFileType.MOSTLY_Q3_K_M],
["Q3_K_L", GgufFileType.MOSTLY_Q3_K_L],
["IQ4_NL", GgufFileType.MOSTLY_IQ4_NL],
["IQ4_XS", GgufFileType.MOSTLY_IQ4_XS],
["Q4_K", GgufFileType.MOSTLY_Q4_K_M],
["Q4_K_S", GgufFileType.MOSTLY_Q4_K_S],
["Q4_K_M", GgufFileType.MOSTLY_Q4_K_M],
["Q5_K", GgufFileType.MOSTLY_Q5_K_M],
["Q5_K_S", GgufFileType.MOSTLY_Q5_K_S],
["Q5_K_M", GgufFileType.MOSTLY_Q5_K_M],
["Q6_K", GgufFileType.MOSTLY_Q6_K],
["Q8_0", GgufFileType.MOSTLY_Q8_0],
["F16", GgufFileType.MOSTLY_F16],
["BF16", GgufFileType.MOSTLY_BF16],
["F32", GgufFileType.ALL_F32],
["COPY", GgufFileType.ALL_F32]
]);
//# sourceMappingURL=ggufQuantNames.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"ggufQuantNames.js","sourceRoot":"","sources":["../../../src/gguf/utils/ggufQuantNames.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,+BAA+B,CAAC;AAE3D,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAuB;IACxD,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC;IAClC,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC;IAClC,CAAC,OAAO,EAAE,YAAY,CAAC,gBAAgB,CAAC;IACxC,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC;IAClC,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC;IAClC,CAAC,SAAS,EAAE,YAAY,CAAC,cAAc,CAAC;IACxC,CAAC,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC;IACtC,CAAC,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC;IACpC,CAAC,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC;IACpC,CAAC,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC;IACpC,CAAC,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC;IACpC,CAAC,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC;IACpC,CAAC,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC;IACpC,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC;IAClC,CAAC,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC;IACtC,CAAC,SAAS,EAAE,YAAY,CAAC,cAAc,CAAC;IACxC,CAAC,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC;IACpC,CAAC,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC;IACpC,CAAC,MAAM,EAAE,YAAY,CAAC,aAAa,CAAC;IACpC,CAAC,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC;IACtC,CAAC,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC;IACtC,CAAC,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC;IACtC,CAAC,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC;IACtC,CAAC,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC;IACtC,CAAC,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC;IACtC,CAAC,MAAM,EAAE,YAAY,CAAC,aAAa,CAAC;IACpC,CAAC,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC;IACtC,CAAC,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC;IACtC,CAAC,MAAM,EAAE,YAAY,CAAC,aAAa,CAAC;IACpC,CAAC,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC;IACtC,CAAC,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC;IACtC,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC;IAClC,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC;IAClC,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC;IAChC,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC;IAClC,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC;IAC7B,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC;CACjC,CAAC,CAAC"}

View File

@@ -0,0 +1,2 @@
import { ModelDownloadEndpoints } from "../../utils/modelDownloadEndpoints.js";
export declare function normalizeGgufDownloadUrl(url: string, endpoints?: ModelDownloadEndpoints): string;

View File

@@ -0,0 +1,18 @@
import { resolveHuggingFaceEndpoint } from "../../utils/modelDownloadEndpoints.js";
export function normalizeGgufDownloadUrl(url, endpoints) {
const parsedUrl = new URL(url);
if (parsedUrl.hostname === "huggingface.co" || parsedUrl.hostname === "hf.co" ||
parsedUrl.hostname === (new URL(resolveHuggingFaceEndpoint(endpoints))).hostname) {
const pathnameParts = parsedUrl.pathname.split("/");
if (pathnameParts.length > 3 && pathnameParts[3] === "blob") {
const newUrl = new URL(url);
pathnameParts[3] = "resolve";
newUrl.pathname = pathnameParts.join("/");
if (newUrl.searchParams.get("download") !== "true")
newUrl.searchParams.set("download", "true");
return newUrl.href;
}
}
return url;
}
//# sourceMappingURL=normalizeGgufDownloadUrl.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"normalizeGgufDownloadUrl.js","sourceRoot":"","sources":["../../../src/gguf/utils/normalizeGgufDownloadUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,0BAA0B,EAAC,MAAM,uCAAuC,CAAC;AAEzG,MAAM,UAAU,wBAAwB,CAAC,GAAW,EAAE,SAAkC;IACpF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAE/B,IAAI,SAAS,CAAC,QAAQ,KAAK,gBAAgB,IAAI,SAAS,CAAC,QAAQ,KAAK,OAAO;QACzE,SAAS,CAAC,QAAQ,KAAK,CAAC,IAAI,GAAG,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAClF,CAAC;QACC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEpD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;YAC7B,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAE1C,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,MAAM;gBAC9C,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAEhD,OAAO,MAAM,CAAC,IAAI,CAAC;QACvB,CAAC;IACL,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC"}

View File

@@ -0,0 +1,2 @@
export declare function resolveBinarySplitGgufPartUrls(ggufUrl: string): string | string[];
export declare function getFilenameForBinarySplitGgufPartUrls(urls: string[]): string | undefined;

View File

@@ -0,0 +1,38 @@
import filenamify from "filenamify";
const binarySplitGgufPartsRegex = /\.gguf\.part(?<part>\d+)of(?<parts>\d+)$/;
export function resolveBinarySplitGgufPartUrls(ggufUrl) {
const parsedGgufUrl = new URL(ggufUrl);
const binaryPartsMatch = parsedGgufUrl.pathname.match(binarySplitGgufPartsRegex);
if (binaryPartsMatch != null) {
const partString = binaryPartsMatch.groups?.part;
const part = Number(partString);
const partsString = binaryPartsMatch.groups?.parts;
const parts = Number(partsString);
if (partString == null || !Number.isFinite(part) || partsString == null || !Number.isFinite(parts) || part > parts || part === 0 ||
parts === 0)
return ggufUrl;
const ggufIndex = parsedGgufUrl.pathname.indexOf(".gguf");
const pathnameWithoutPart = parsedGgufUrl.pathname.slice(0, ggufIndex + ".gguf".length);
const res = [];
for (let i = 1; i <= parts; i++) {
const url = new URL(parsedGgufUrl.href);
url.pathname = pathnameWithoutPart + `.part${String(i).padStart(partString.length, "0")}of${partsString}`;
res.push(url.href);
}
return res;
}
return ggufUrl;
}
export function getFilenameForBinarySplitGgufPartUrls(urls) {
if (urls.length === 0)
return undefined;
const firstParsedUrl = new URL(urls[0]);
if (binarySplitGgufPartsRegex.test(firstParsedUrl.pathname)) {
const ggufIndex = firstParsedUrl.pathname.toLowerCase().indexOf(".gguf");
const urlWithoutPart = firstParsedUrl.pathname.slice(0, ggufIndex + ".gguf".length);
const filename = decodeURIComponent(urlWithoutPart.split("/").pop());
return filenamify(filename);
}
return undefined;
}
//# sourceMappingURL=resolveBinarySplitGgufPartUrls.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"resolveBinarySplitGgufPartUrls.js","sourceRoot":"","sources":["../../../src/gguf/utils/resolveBinarySplitGgufPartUrls.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,MAAM,yBAAyB,GAAG,0CAA0C,CAAC;AAE7E,MAAM,UAAU,8BAA8B,CAAC,OAAe;IAC1D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,gBAAgB,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACjF,IAAI,gBAAgB,IAAI,IAAI,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QAElC,IAAI,UAAU,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,WAAW,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC;YAC5H,KAAK,KAAK,CAAC;YAEX,OAAO,OAAO,CAAC;QAEnB,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,mBAAmB,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAExF,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACxC,GAAG,CAAC,QAAQ,GAAG,mBAAmB,GAAG,QAAQ,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,WAAW,EAAE,CAAC;YAC1G,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,GAAG,CAAC;IACf,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,qCAAqC,CAAC,IAAc;IAChE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QACjB,OAAO,SAAS,CAAC;IAErB,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC;IAEzC,IAAI,yBAAyB,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1D,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzE,MAAM,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAEpF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC,CAAC;QACtE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC"}

View File

@@ -0,0 +1,7 @@
export declare function resolveSplitGgufParts(ggufPathOrUri: string): string[];
export declare function getGgufSplitPartsInfo(ggufPath: string): {
part: number;
parts: number;
matchLength: number;
} | null;
export declare function createSplitPartFilename(filename: string, part: number, parts: number): string;

View File

@@ -0,0 +1,64 @@
import { isUrl } from "../../utils/isUrl.js";
const splitGgufPartRegex = /-(?<part>\d{5})-of-(?<parts>\d{5})\.gguf$/;
export function resolveSplitGgufParts(ggufPathOrUri) {
if (isUrl(ggufPathOrUri)) {
const parsedUrl = new URL(ggufPathOrUri);
return resolveParts(parsedUrl.pathname).map((part) => {
const url = new URL(ggufPathOrUri);
url.pathname = part;
return url.href;
});
}
return resolveParts(ggufPathOrUri);
}
function resolveParts(ggufPath) {
const splitPartMatch = ggufPath.match(splitGgufPartRegex);
if (splitPartMatch != null) {
const partsInfo = getGgufSplitPartsInfo(ggufPath);
if (partsInfo == null)
return [ggufPath];
const { parts, matchLength } = partsInfo;
const commonPath = ggufPath.slice(0, ggufPath.length - matchLength);
const res = [];
for (let i = 1; i <= parts; i++)
res.push(commonPath + `-${String(i).padStart(5, "0")}-of-${String(parts).padStart(5, "0")}.gguf`);
return res;
}
return [ggufPath];
}
export function getGgufSplitPartsInfo(ggufPath) {
let checkPath = ggufPath;
if (isUrl(checkPath)) {
const parsedUrl = new URL(checkPath);
checkPath = parsedUrl.pathname;
}
const splitPartMatch = checkPath.match(splitGgufPartRegex);
if (splitPartMatch != null) {
const part = Number(splitPartMatch.groups?.part);
const parts = Number(splitPartMatch.groups?.parts);
const matchLength = splitPartMatch[0]?.length;
if (matchLength == null || !Number.isFinite(part) || !Number.isFinite(parts) || part > parts || part === 0 || parts === 0)
return null;
return {
part,
parts,
matchLength
};
}
return null;
}
export function createSplitPartFilename(filename, part, parts) {
const splitPartMatch = filename.match(splitGgufPartRegex);
if (splitPartMatch != null) {
const partsInfo = getGgufSplitPartsInfo(filename);
if (partsInfo != null) {
const { matchLength } = partsInfo;
const commonPath = filename.slice(0, filename.length - matchLength);
filename = commonPath + ".gguf";
}
}
if (filename.toLowerCase().endsWith(".gguf"))
filename = filename.slice(0, -".gguf".length);
return `${filename}-${String(part).padStart(5, "0")}-of-${String(parts).padStart(5, "0")}.gguf`;
}
//# sourceMappingURL=resolveSplitGgufParts.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"resolveSplitGgufParts.js","sourceRoot":"","sources":["../../../src/gguf/utils/resolveSplitGgufParts.ts"],"names":[],"mappings":"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"}