package convert import ( "encoding/binary" "fmt" "io" "log/slog" "strings" "github.com/pdevine/tensor" "github.com/pdevine/tensor/native" "github.com/sbinet/npyio/npz" ) type adapterTensor struct { path string dtype string *tensorBase } func DetectNPZ(fn string) (bool, error) { f, err := npz.Open(fn) if err != nil { return false, err } defer f.Close() if len(f.Keys()) > 0 && strings.HasSuffix(f.Keys()[0], ".npy") { return true, nil } return false, nil } func parseNPZ(fn string) ([]Tensor, error) { var ts []Tensor f, err := npz.Open(fn) if err != nil { return nil, err } defer f.Close() for _, name := range f.Keys() { slog.Info(fmt.Sprintf("reading layer '%s'", name)) h := f.Header(name) shape := make([]uint64, 2) for cnt, v := range h.Descr.Shape { // llamacpp expects the loraB layer to be reversed if strings.Contains(name, "lora_b") { shape[len(shape)-cnt-1] = uint64(v) } else { shape[cnt] = uint64(v) } } dtypeMap := map[string]string{ "