llm.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package llm
  2. // #cgo CFLAGS: -Illama.cpp -Illama.cpp/include -Illama.cpp/ggml/include
  3. // #cgo LDFLAGS: -lllama -lggml -lstdc++ -lpthread
  4. // #cgo windows LDFLAGS: -static-libstdc++ -static-libgcc -static
  5. // #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
  6. // #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
  7. // #cgo windows,amd64 LDFLAGS: -L${SRCDIR}/build/windows/amd64_static -L${SRCDIR}/build/windows/amd64_static/src -L${SRCDIR}/build/windows/amd64_static/ggml/src
  8. // #cgo windows,arm64 LDFLAGS: -L${SRCDIR}/build/windows/arm64_static -L${SRCDIR}/build/windows/arm64_static/src -L${SRCDIR}/build/windows/arm64_static/ggml/src
  9. // #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
  10. // #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
  11. // #include <stdlib.h>
  12. // #include "llama.h"
  13. import "C"
  14. import (
  15. "fmt"
  16. "unsafe"
  17. )
  18. // SystemInfo is an unused example of calling llama.cpp functions using CGo
  19. func SystemInfo() string {
  20. return C.GoString(C.llama_print_system_info())
  21. }
  22. func Quantize(infile, outfile string, ftype fileType) error {
  23. cinfile := C.CString(infile)
  24. defer C.free(unsafe.Pointer(cinfile))
  25. coutfile := C.CString(outfile)
  26. defer C.free(unsafe.Pointer(coutfile))
  27. params := C.llama_model_quantize_default_params()
  28. params.nthread = -1
  29. params.ftype = ftype.Value()
  30. if rc := C.llama_model_quantize(cinfile, coutfile, &params); rc != 0 {
  31. return fmt.Errorf("llama_model_quantize: %d", rc)
  32. }
  33. return nil
  34. }