Commit 0e79e52d authored by Michael Yang's avatar Michael Yang
Browse files

override ggml-metal if the file is different

parent 6fbb3800
package llama package llama
import ( import (
"bytes"
"crypto/sha256"
"errors" "errors"
"io" "io"
"log" "log"
...@@ -27,26 +29,51 @@ func initBackend() error { ...@@ -27,26 +29,51 @@ func initBackend() error {
} }
metal := filepath.Join(filepath.Dir(exec), "ggml-metal.metal") metal := filepath.Join(filepath.Dir(exec), "ggml-metal.metal")
if _, err := os.Stat(metal); err != nil { fi, err := os.Stat(metal)
if !errors.Is(err, os.ErrNotExist) { if err != nil && !errors.Is(err, os.ErrNotExist) {
return err
}
if fi != nil {
actual, err := os.Open(metal)
if err != nil {
return err return err
} }
dst, err := os.Create(filepath.Join(filepath.Dir(exec), "ggml-metal.metal")) actualSum := sha256.New()
if err != nil { if _, err := io.Copy(actualSum, actual); err != nil {
return err return err
} }
defer dst.Close()
src, err := fs.Open("ggml-metal.metal") expect, err := fs.Open("ggml-metal.metal")
if err != nil { if err != nil {
return err return err
} }
defer src.Close()
if _, err := io.Copy(dst, src); err != nil { expectSum := sha256.New()
if _, err := io.Copy(expectSum, expect); err != nil {
return err return err
} }
if bytes.Equal(actualSum.Sum(nil), expectSum.Sum(nil)) {
return nil
}
}
dst, err := os.Create(filepath.Join(filepath.Dir(exec), "ggml-metal.metal"))
if err != nil {
return err
}
defer dst.Close()
src, err := fs.Open("ggml-metal.metal")
if err != nil {
return err
}
defer src.Close()
if _, err := io.Copy(dst, src); err != nil {
return err
} }
return nil return nil
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment