Skip to content

Commit 723ca1f

Browse files
authored
Merge pull request #8 from ahoylabs/dk/fix-license-field
fix: refactor metadata keying and fix license type
2 parents 6ed4b2d + 98f3cb6 commit 723ca1f

File tree

2 files changed

+67
-32
lines changed

2 files changed

+67
-32
lines changed

src/index.ts

Lines changed: 12 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -444,39 +444,19 @@ export const parseRawMetadata = async (
444444
const metadata: Record<string, any> = {}
445445

446446
const setKey = (keyName: string, value: MetadataValue) => {
447-
// this is a bad way to write this and should be clean it up
448-
// but since there are never more than 3 layers currently, it's fine for now
449-
const [key1, key2, key3, key4, key5] = keyName.split('.')
450-
451-
if (!key2) {
452-
metadata[key1] = value
453-
return
454-
}
455-
if (!key3) {
456-
if (!metadata[key1]) metadata[key1] = {}
457-
metadata[key1][key2] = value
458-
return
459-
}
460-
if (!key4) {
461-
if (!metadata[key1]) metadata[key1] = {}
462-
if (!metadata[key1][key2]) metadata[key1][key2] = {}
463-
metadata[key1][key2][key3] = value
464-
return
465-
}
466-
if (!key5) {
467-
if (!metadata[key1]) metadata[key1] = {}
468-
if (!metadata[key1][key2]) metadata[key1][key2] = {}
469-
if (!metadata[key1][key2][key3]) metadata[key1][key2][key3] = {}
470-
metadata[key1][key2][key3][key4] = value
471-
return
472-
}
473-
if (!metadata[key1]) metadata[key1] = {}
474-
if (!metadata[key1][key2]) metadata[key1][key2] = {}
475-
if (!metadata[key1][key2][key3]) metadata[key1][key2][key3] = {}
476-
if (!metadata[key1][key2][key3][key4]) {
477-
metadata[key1][key2][key3][key4] = {}
447+
const keys = keyName.split('.')
448+
let obj = metadata
449+
for (const [index, key] of keys.entries()) {
450+
if (!index) continue
451+
const prevKey = keys[index - 1]
452+
if (!obj[prevKey]) obj[prevKey] = {}
453+
if (index === keys.length - 1) {
454+
if (typeof obj[prevKey] === 'object') {
455+
obj[prevKey][key] = value
456+
}
457+
}
458+
obj = obj[prevKey]
478459
}
479-
metadata[key1][key2][key3][key4][key5] = value
480460
}
481461

482462
for (let i = 0; i < numKv.value; ++i) {

test/index.test.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,4 +283,59 @@ describe('gguf', () => {
283283
},
284284
1000 * 30,
285285
)
286+
287+
test(
288+
'DarkForest-20B-v3.0.IQ1_M.gguf',
289+
async () => {
290+
const file = await fetchPartialFile(
291+
'https://huggingface.co/backyardai/DarkForest-20B-v3.0-GGUF/resolve/main/DarkForest-20B-v3.0.IQ1_M.gguf',
292+
0,
293+
// 10mb
294+
1024 * 1024 * 10,
295+
)
296+
297+
const fileName = path.join(
298+
__dirname,
299+
'models',
300+
'DarkForest-20B-v3.0.IQ1_M.gguf',
301+
)
302+
303+
await writeFile(fileName, Buffer.from(file))
304+
305+
const { error, metadata } = await gguf(fileName)
306+
307+
expect(error).toBe(undefined)
308+
expect(metadata).not.toBe(undefined)
309+
if (!metadata) return // for types
310+
311+
expect(metadata.general.architecture).toBe('llama')
312+
if (!isLlamaMetadata(metadata)) return // for types
313+
314+
expect(metadata.llama).toBeTruthy()
315+
316+
expect(metadata).toEqual({
317+
general: {
318+
architecture: 'llama',
319+
license: 'other',
320+
name: 'F:\\merger\\mergekit\\V3_ultraperecision\\V3_u_4_scaling',
321+
quantization_version: 2,
322+
},
323+
llama: {
324+
attention: {
325+
head_count: 40,
326+
head_count_kv: 40,
327+
layer_norm_rms_epsilon: 0.000009999999747378752,
328+
},
329+
context_length: 4096,
330+
embedding_length: 5120,
331+
feed_forward_length: 13824,
332+
rope: {
333+
dimension_count: 128,
334+
freq_base: 10000,
335+
},
336+
},
337+
})
338+
},
339+
1000 * 30,
340+
)
286341
})

0 commit comments

Comments
 (0)