fix: leaf alt name (#12390)

a leaf node with an alternative name gets all its alternatives names
added into the same branch rather than creating branches themselves
This commit is contained in:
Michael Yang
2025-09-23 17:50:53 -07:00
committed by GitHub
parent bf78ed6ee9
commit e1979c571a
2 changed files with 12 additions and 7 deletions

View File

@@ -187,15 +187,17 @@ func populateFields(base Base, v reflect.Value, tags ...Tag) reflect.Value {
names = append(names, prefix+n+suffix)
}
}
if childNames := fn(tags[1:], tags[0].prefix, tags[0].suffix); len(childNames) == 0 {
// no child names, append current names
fullNames = append(fullNames, names)
} else if len(names) == 0 {
// no current names, append child names
childNames := fn(tags[1:], tags[0].prefix, tags[0].suffix)
if len(names) == 0 {
// current tag has no name, use child names only
fullNames = append(fullNames, childNames...)
} else if len(childNames) == 0 {
// current tag has names but no children, create branches for each name
for _, name := range names {
fullNames = append(fullNames, []string{name})
}
} else {
// combine current and child names
// merge each name with each child
for _, name := range names {
for _, childName := range childNames {
fullNames = append(fullNames, append([]string{name}, childName...))

View File

@@ -125,6 +125,7 @@ func TestPopulateFieldsAlternateName(t *testing.T) {
Input *nn.Embedding `gguf:"input"`
Output *nn.Linear `gguf:"output,alt:input"`
Nested *nested `gguf:"nested"`
Tensor ml.Tensor `gguf:"leaf,alt:tensor"`
}
var m fakeModel
@@ -133,6 +134,7 @@ func TestPopulateFieldsAlternateName(t *testing.T) {
names: []string{
"input.weight",
"nested.b.weight",
"leaf",
},
}}, v.Elem()))
@@ -142,6 +144,7 @@ func TestPopulateFieldsAlternateName(t *testing.T) {
Nested: &nested{
Weight: &nn.Linear{Weight: &fakeTensor{Name: "nested.b.weight"}},
},
Tensor: &fakeTensor{Name: "leaf"},
}, m); diff != "" {
t.Errorf("populateFields() set incorrect values (-want +got):\n%s", diff)
}