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) names = append(names, prefix+n+suffix)
} }
} }
childNames := fn(tags[1:], tags[0].prefix, tags[0].suffix)
if childNames := fn(tags[1:], tags[0].prefix, tags[0].suffix); len(childNames) == 0 { if len(names) == 0 {
// no child names, append current names // current tag has no name, use child names only
fullNames = append(fullNames, names)
} else if len(names) == 0 {
// no current names, append child names
fullNames = append(fullNames, childNames...) 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 { } else {
// combine current and child names // merge each name with each child
for _, name := range names { for _, name := range names {
for _, childName := range childNames { for _, childName := range childNames {
fullNames = append(fullNames, append([]string{name}, childName...)) fullNames = append(fullNames, append([]string{name}, childName...))

View File

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