2023-07-21 20:33:56 +00:00
|
|
|
package llm
|
|
|
|
|
2024-07-05 23:34:21 +00:00
|
|
|
// #cgo CFLAGS: -Illama.cpp -Illama.cpp/include -Illama.cpp/ggml/include
|
2024-07-06 16:54:02 +00:00
|
|
|
// #cgo LDFLAGS: -lllama -lggml -lstdc++ -lpthread
|
2024-07-05 23:34:21 +00:00
|
|
|
// #cgo darwin,arm64 LDFLAGS: -L${SRCDIR}/build/darwin/arm64_static -L${SRCDIR}/build/darwin/arm64_static/src -L${SRCDIR}/build/darwin/arm64_static/ggml/src -framework Accelerate -framework Metal
|
|
|
|
// #cgo darwin,amd64 LDFLAGS: -L${SRCDIR}/build/darwin/x86_64_static -L${SRCDIR}/build/darwin/x86_64_static/src -L${SRCDIR}/build/darwin/x86_64_static/ggml/src
|
2024-07-09 18:17:44 +00:00
|
|
|
// #cgo windows,amd64 LDFLAGS: -static-libstdc++ -static-libgcc -static -L${SRCDIR}/build/windows/amd64_static -L${SRCDIR}/build/windows/amd64_static/src -L${SRCDIR}/build/windows/amd64_static/ggml/src
|
|
|
|
// #cgo windows,arm64 LDFLAGS: -static-libstdc++ -static-libgcc -static -L${SRCDIR}/build/windows/arm64_static -L${SRCDIR}/build/windows/arm64_static/src -L${SRCDIR}/build/windows/arm64_static/ggml/src
|
2024-07-05 23:34:21 +00:00
|
|
|
// #cgo linux,amd64 LDFLAGS: -L${SRCDIR}/build/linux/x86_64_static -L${SRCDIR}/build/linux/x86_64_static/src -L${SRCDIR}/build/linux/x86_64_static/ggml/src
|
|
|
|
// #cgo linux,arm64 LDFLAGS: -L${SRCDIR}/build/linux/arm64_static -L${SRCDIR}/build/linux/arm64_static/src -L${SRCDIR}/build/linux/arm64_static/ggml/src
|
2024-04-05 15:49:04 +00:00
|
|
|
// #include <stdlib.h>
|
2024-03-14 17:24:13 +00:00
|
|
|
// #include "llama.h"
|
|
|
|
import "C"
|
2024-08-01 21:52:15 +00:00
|
|
|
|
2024-04-05 15:49:04 +00:00
|
|
|
import (
|
2024-08-01 21:52:15 +00:00
|
|
|
"errors"
|
2024-04-05 15:49:04 +00:00
|
|
|
"unsafe"
|
|
|
|
)
|
2024-03-14 17:24:13 +00:00
|
|
|
|
|
|
|
// SystemInfo is an unused example of calling llama.cpp functions using CGo
|
|
|
|
func SystemInfo() string {
|
|
|
|
return C.GoString(C.llama_print_system_info())
|
2023-12-20 18:36:01 +00:00
|
|
|
}
|
2024-04-05 15:49:04 +00:00
|
|
|
|
2024-04-23 22:18:45 +00:00
|
|
|
func Quantize(infile, outfile string, ftype fileType) error {
|
2024-04-05 15:49:04 +00:00
|
|
|
cinfile := C.CString(infile)
|
|
|
|
defer C.free(unsafe.Pointer(cinfile))
|
|
|
|
|
|
|
|
coutfile := C.CString(outfile)
|
|
|
|
defer C.free(unsafe.Pointer(coutfile))
|
|
|
|
|
|
|
|
params := C.llama_model_quantize_default_params()
|
|
|
|
params.nthread = -1
|
2024-04-12 20:55:12 +00:00
|
|
|
params.ftype = ftype.Value()
|
2024-04-05 15:49:04 +00:00
|
|
|
|
2024-04-12 20:55:12 +00:00
|
|
|
if rc := C.llama_model_quantize(cinfile, coutfile, ¶ms); rc != 0 {
|
2024-08-01 21:52:15 +00:00
|
|
|
return errors.New("failed to quantize model. This model architecture may not be supported, or you may need to upgrade Ollama to the latest version")
|
2024-04-05 15:49:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|