diff --git a/fs/ggml/ggml.go b/fs/ggml/ggml.go index 8e16f67bc..bae403cc2 100644 --- a/fs/ggml/ggml.go +++ b/fs/ggml/ggml.go @@ -663,18 +663,22 @@ func MakeMetaGGML(ggmls []GGML, ggmlPaths []string) MetaGGML { return cmp.Compare(a.weight, b.weight) }) metaGgml := MetaGGML{} + var param_counts uint64 = 0 for i := range wrappers { + param_counts += wrappers[i].ggml.KV().ParameterCount() if i == 0 { kv := maps.Clone(wrappers[i].ggml.KV()) // remove the keys contained in split gguf files. add more if needed. delete(kv, "slice.no") delete(kv, "slice.count") delete(kv, "slice.tensors.count") + delete(kv, "general.parameter_count") metaGgml.kv = kv } metaGgml.Shards = append(metaGgml.Shards, wrappers[i].ggml) metaGgml.ShardPaths = append(metaGgml.ShardPaths, wrappers[i].path) } + metaGgml.kv["general.parameter_count"] = param_counts ft, _ := BuildForeignTensors(metaGgml.Shards, metaGgml.ShardPaths) metaGgml.Tensors = *ft return metaGgml diff --git a/fs/ggml/gguf.go b/fs/ggml/gguf.go index 3081a2def..b694deadb 100644 --- a/fs/ggml/gguf.go +++ b/fs/ggml/gguf.go @@ -138,7 +138,7 @@ func (llm *gguf) numKV() uint64 { } } -func (llm *gguf) Decode(rs io.ReadSeeker, mainKV ...KV) error { +func (llm *gguf) Decode(rs io.ReadSeeker) error { // decode key-values for i := 0; uint64(i) < llm.numKV(); i++ { k, err := readGGUFString(llm, rs) @@ -235,11 +235,7 @@ func (llm *gguf) Decode(rs io.ReadSeeker, mainKV ...KV) error { // patch KV with parameter count llm.kv["general.parameter_count"] = llm.parameters - alignment := llm.kv.Uint("general.alignment", 0xffffffff) - if alignment == 0xffffffff { - // try to get alignment from main shard instead. - alignment = append(mainKV, make(KV))[0].Uint("general.alignment", 32) - } + alignment := llm.kv.Uint("general.alignment", 32) offset, err := rs.Seek(0, io.SeekCurrent) if err != nil {