(define-module (machinelearning) #:use-module ((guix licenses) :prefix license:) #:use-module (gnu packages base) #:use-module (gnu packages bash) #:use-module (gnu packages check) #:use-module (gnu packages wxwidgets) #:use-module (gnu packages commencement) #:use-module (gnu packages crates-io) #:use-module (gnu packages golang) #:use-module (gnu packages golang-build) #:use-module (gnu packages golang-check) #:use-module (gnu packages golang-maths) #:use-module (gnu packages golang-compression) #:use-module (gnu packages golang-crypto) #:use-module (gnu packages gtk) #:use-module (gnu packages prometheus) #:use-module (gnu packages golang-web) #:use-module (gnu packages golang-xyz) #:use-module (gnu packages image) #:use-module (gnu packages llvm) #:use-module (gnu packages machine-learning) #:use-module (gnu packages maths) #:use-module (gnu packages opencl) #:use-module (gnu packages pkg-config) #:use-module (gnu packages protobuf) #:use-module (gnu packages python) #:use-module (gnu packages python-build) #:use-module (gnu packages version-control) #:use-module (gnu packages python-check) #:use-module (gnu packages python-crypto) #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) #:use-module (gnu packages curl) #:use-module (gnu packages rust) #:use-module (gnu packages rust-apps) #:use-module (gnu packages vulkan) #:use-module (gnu packages tls) #:use-module (gnu packages) #:use-module (guix build utils) #:use-module (guix build-system cargo) #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) #:use-module (guix build-system go) #:use-module (guix build-system pyproject) #:use-module (guix build-system python) #:use-module (guix download) #:use-module (guix gexp) #:use-module (guix git-download) #:use-module (guix packages) #:use-module (guix utils) ) (define-public poetry-plugin-export (package (name "poetry-plugin-export") (version "1.7.1") (source (origin (method url-fetch) (uri (pypi-uri "poetry_plugin_export" version)) (sha256 (base32 "0bp2640l7v9digjccj0wz086s1xa4hdbrcvdpa84544a46vcyqng")))) (build-system pyproject-build-system) (propagated-inputs (list python-poetry-core-1.9.0)) (home-page "https://python-poetry.org/") (synopsis "Poetry plugin to export the dependencies to various formats") (description "Poetry plugin to export the dependencies to various formats") (license license:expat))) (define-public python-poetry-core-1.9.0 (package (inherit python-poetry-core) (name "python-poetry-core") (version "1.9.0") )) (define-public poetry-1.8.2 (package (inherit poetry) (name "poetry") (version "1.8.2") )) (define-public poetry-1.3 (package (inherit poetry) (name "poetry") (version "1.3") )) (define-public python-installer (package (name "python-installer") (version "0.7.0") (source (origin (method url-fetch) (uri (pypi-uri "installer" version)) (sha256 (base32 "0cdnqh3a3amw8k4s1pzfjh0hpvzw4pczgl702s1b16r82qqkwvd2")))) (build-system pyproject-build-system) (inputs (list python-flit-core)) (home-page "") (synopsis "A library for installing Python wheels.") (description "This package provides a library for installing Python wheels.") (license #f))) (define-public python-rclip (package (name "rclip") (version "1.10.2") (source (origin (method url-fetch) (uri (pypi-uri "rclip" version)) (sha256 (base32 "05cv5hp63x6ym12s1a5lb7najjyzrqk40rvmj8x2y32hxsf6ampn")))) (build-system pyproject-build-system) (native-inputs (list python-poetry-core-1.9.0)) (propagated-inputs (list python-open-clip-torch python-pillow python-requests python-pytorch python-torchvision python-tqdm)) (arguments '( #:phases (modify-phases %standard-phases (delete 'check) ;#TODO: see why this is broke (delete 'sanity-check) ;TODO: Fix broken sanity-check ))) (home-page "https://github.com/yurijmikhalevich/rclip") (synopsis "AI-Powered Command-Line Photo Search Tool") (description "AI-Powered Command-Line Photo Search Tool") (license license:expat))) (define-public python-open-clip-torch (package (name "python-open-clip-torch") (version "2.24.0") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/mlfoundations/open_clip") (commit (string-append "v" version)) )) (file-name (git-file-name name version)) (sha256 (base32 "0mby632z2qpahb8pd8cmn14bz4w1q0cngz7s6rmx2qwfg2fxf1ms")))) (build-system pyproject-build-system) (inputs (list python-ftfy python-huggingface-hub python-protobuf python-regex python-sentencepiece python-timm python-pytorch python-torchvision python-tqdm python-wheel )) (arguments '( #:phases (modify-phases %standard-phases (delete 'check) ;Networking required for checks, so disable them (delete 'sanity-check) ;TODO: Fix broken sanity-check ))) (home-page "https://github.com/mlfoundations/open_clip") (synopsis "OpenCLIP") (description "@code{OpenCLIP}") (license license:expat))) (define-public python-ftfy (package (name "python-ftfy") ;(version "6.2.0") (version "5.5.1") (source (origin (method url-fetch) (uri (pypi-uri "ftfy" version)) (sha256 ;(base32 "1h3m9i1c2qp874fpg62gcp39yqdhc5mrsqd29ja9gvr5f0y18hjy")))) (base32 "1ci6xrj4g01a97nymxpv9nj820nlmgzc4ybaz9k46i6bnxzpax7s")))) (build-system pyproject-build-system) (native-inputs (list poetry)) (propagated-inputs (list python-wcwidth)) (arguments '( #:phases (modify-phases %standard-phases (delete 'check) ))) (home-page "") (synopsis "Fixes mojibake and other problems with Unicode, after the fact") (description "Fixes mojibake and other problems with Unicode, after the fact") (license license:asl2.0))) (define-public python-expecttest (package (name "python-expecttest") (version "0.2.1") (source (origin (method url-fetch) (uri (pypi-uri "expecttest" version)) (sha256 (base32 "1xbkpcp3477ccgr4ks16v0j22i7a939bs2rajvk0cigqlvw1qaz5")))) (build-system pyproject-build-system) (arguments (list #:phases #~(modify-phases %standard-phases (delete 'check)))) (native-inputs (list poetry)) (home-page "https://github.com/ezyang/expecttest") (synopsis "") (description "") (license license:expat))) (define-public python-timm (package (name "python-timm") (version "0.9.16") (source (origin (method url-fetch) (uri (pypi-uri "timm" version)) (sha256 (base32 "1rkif1mkgryirn78aw9rkwplf3hzfqbw3c0slwqxynnmfprm87l9")))) (build-system pyproject-build-system) (arguments (list #:phases #~(modify-phases %standard-phases (delete 'check) ;takes FOREVER for some reason (delete 'sanity-check ;Crashes; #TODO: fix this )))) (inputs (list python-huggingface-hub python-pyyaml python-safetensors python-pytorch python-torchvision python-pdm-backend python-pytest python-pytest-timeout python-expecttest python-pytest-xdist)) (home-page "https://github.com/huggingface/pytorch-image-models") (synopsis "PyTorch Image Models") (description "@code{PyTorch} Image Models") (license license:asl2.0))) (define-public rust-memmap2-0.5 (package (name "rust-memmap2") (version "0.5.0") (source (origin (method url-fetch) (uri (crate-uri "memmap2" version)) (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 "0vp9pxd20gyq8196v73chxdw6gfxz3g4lkdkvffd5slgawds2is6")))) (build-system cargo-build-system) (arguments `(#:cargo-inputs (("rust-libc" ,rust-libc-0.2) ("rust-stable-deref-trait" ,rust-stable-deref-trait-1)) #:cargo-development-inputs (("rust-owning-ref" ,rust-owning-ref-0.4) ("rust-tempdir" ,rust-tempdir-0.3)))) (home-page "https://github.com/RazrFalcon/memmap2-rs") (synopsis "Cross-platform Rust API for memory-mapped file IO") (description "Cross-platform Rust API for memory-mapped file IO") (license (list license:expat license:asl2.0)))) (define-public rust-safetensors-0.4 (package (name "rust-safetensors") (version "0.4.2") (source (origin (method url-fetch) (uri (crate-uri "safetensors" version)) (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 "1vb9wsmsm7wfyvkl795wpc2iiwa3mx0vqhhym2q6yhrlzdmhx64d")))) (build-system cargo-build-system) (arguments `(#:cargo-inputs (("rust-serde" ,rust-serde-1) ("rust-serde-json" ,rust-serde-json-1)) #:cargo-development-inputs (("rust-criterion" ,rust-criterion-0.4) ("rust-memmap2" ,rust-memmap2-0.5) ("rust-proptest" ,rust-proptest-1)))) (home-page "https://github.com/huggingface/safetensors") (synopsis "Provides functions to read and write safetensors which aim to be safer than their PyTorch counterpart. The format is 8 bytes which is an unsized int, being the size of a JSON header, the JSON header refers the `dtype` the `shape` and `data_offsets` which are the offsets for the values in the rest of the file. ") (description "This package provides functions to read and write safetensors which aim to be safer than their @code{PyTorch} counterpart. The format is 8 bytes which is an unsized int, being the size of a JSON header, the JSON header refers the `dtype` the `shape` and `data_offsets` which are the offsets for the values in the rest of the file.") (license license:asl2.0))) (define-public python-safetensors (package (name "python-safetensors") (version "0.4.2") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/huggingface/safetensors.git") (commit (string-append "v" version)) )) (file-name (git-file-name name version)) (sha256 (base32 "1gs0ivd5m95jyy6j1yqvm8pq068xsk405gv0nwq2821vr4ix9lw5")))) (build-system cargo-build-system) (arguments (list #:imported-modules `(,@%cargo-build-system-modules ,@%pyproject-build-system-modules) #:modules '((guix build cargo-build-system) ((guix build pyproject-build-system) #:prefix py:) (guix build utils)) #:phases #~(modify-phases %standard-phases (add-before 'configure 'get-safetensor-cargo (lambda _ (copy-recursively "bindings/python/Cargo.toml" "./Cargo.toml") (substitute* "./Cargo.toml" ( ("name = \"safetensors_rust\"") "name = \"safetensors_rust\"\npath = \"bindings/python//src/lib.rs\"" ) ) (substitute* "./Cargo.toml" ( ("path = \"../../safetensors\"") "path = \"safetensors\"" ) ) )) (add-after 'prepare-python-module 'build-python-module (assoc-ref py:%standard-phases 'build)) (add-after 'build-python-module 'install-python-module (assoc-ref py:%standard-phases 'install)) (add-after 'compress-documentation 'remove-bloat (lambda _ (delete-file-recursively "target") (delete-file-recursively "attacks") (delete-file-recursively "safetensors") )) ) #:cargo-inputs `( ;("rust-safetensors" ,rust-safetensors-0.4) ("rust-pyo3" ,rust-pyo3-0.20) ("rust-criterion" ,rust-criterion-0.5) ("rust-memmap2" ,rust-memmap2-0.5) ("rust-proptest" ,rust-proptest-1) ("rust-serde" ,rust-serde-1) ("rust-serde-json" ,rust-serde-json-1) ) #:install-source? #false)) (inputs (list maturin rust-safetensors-0.4 python-wheel)) (native-inputs (list python-wrapper)) (home-page "https://github.com/huggingface/safetensors") (synopsis "a new simple format for storing tensors safely") (description "This repository implements a new simple format for storing tensors safely (as opposed to pickle) and that is still fast (zero-copy).") (license license:asl2.0))) (define-public ggml (package (name "ggml") (version "589fed13a77d7e54435c2182384955706b60b841") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/ggerganov/ggml") (recursive? #t) (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "1qzydmiqsdxhj7gmaxbzllhhnb7rw49ykkj03jm044spk9nnn56s")))) (build-system cmake-build-system) (inputs (list openblas)) (arguments '( #:tests? #f ;#:cmake "--config Release" #:configure-flags (list "-DGGML_OPENBLAS=ON -DGGML_BUILD_TESTS=OFF -DGGML_BUILD_EXAMPLES=OFF --config Release") )) (home-page "https://github.com/ggerganov/ggml/") (synopsis "Tensor library for machine learning") (description "Tensor library for machine learning in pure C/C++") (license license:expat))) (define-public ggml-vulkan (package (inherit ggml) (name "ggml-vulkan") (build-system cmake-build-system) (inputs (list shaderc vulkan-headers vulkan-loader openlibm glibc)) (arguments '( #:tests? #f ;#:cmake "--config Release" #:configure-flags (list "-DGGML_VULKAN=ON -DGGML_BUILD_TESTS=OFF -DGGML_BUILD_EXAMPLES=OFF --config Release") )) (home-page "https://github.com/ggerganov/ggml/") (synopsis "Tensor library for machine learning") (description "Tensor library for machine learning in pure C/C++") (license license:expat))) (define-public mlimgsynth (package (name "mlimgsynth") (version "fd351102a0c6719fe4437cb1bb834a87735861a1") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/aagdev/mlimgsynth") (recursive? #t) (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "1gbppz9r0mjdis6gcvpkx3f4v0px7zz05k0cxkjq9s4v63xzr1p3")))) (build-system gnu-build-system) (inputs (list openblas ggml-vulkan libpng ijg-libjpeg)) (arguments '( #:tests? #f #:make-flags (let* ((ggml-dir (assoc-ref %build-inputs "ggml-vulkan"))) (list (string-append "CC=gcc") (string-append "GGML_INCLUDE_PATH=" ggml-dir "/include") (string-append "GGML_LIB_PATH=" ggml-dir "/lib"))) #:phases (modify-phases %standard-phases (delete 'check) (delete 'configure) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (let ((out (assoc-ref outputs "out"))) (install-file "mlimgsynth" (string-append out "/bin"))))) ) ) ) (home-page "https://github.com/aagdev/mlimgsynth") (synopsis " Image synthesis using machine learning") (description "Generate images using Stable Diffusion (SD) models. This program is completely written in C and uses the GGML library. It is largely based in stable-diffusion.cpp, but with a focus in more concise and clear code.") (license license:expat))) (define-public stable-diffusion-cpp (package (name "stable-diffusion-cpp") (version "dcf91f9e0f2cbf9da472ee2a556751ed4bab2d2a") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/leejet/stable-diffusion.cpp.git") (recursive? #t) (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "0dhh4m710kiwrs4yc64saab5rkjg5psxr15cm6fsl64pv4ssk7v5")))) (build-system cmake-build-system) (inputs (list openblas)) (arguments '( #:tests? #f ;#:cmake "--config Release" ;#:configure-flags (list "-DSD_CUBLAS=ON -DGGML_OPENBLAS=ON --config Release") #:configure-flags (list "-DGGML_OPENBLAS=ON -DSD_FLASH_ATTN=ON --config Release") ) ) (home-page "https://github.com/leejet/stable-diffusion.cpp") (synopsis "Inference of Stable Diffusion in pure C/C++") (description "Inference of Stable Diffusion in pure C/C++") (license license:expat))) (define-public stable-diffusion-cpp-vulkan (package (inherit stable-diffusion-cpp) (name "stable-diffusion-cpp-vulkan") (arguments `( #:tests? #f #:configure-flags (list "-DSD_VULKAN=ON --config Release") #:phases (modify-phases %standard-phases (add-after 'install 'rename-binary (lambda* (#:key outputs #:allow-other-keys) (let ((bin (string-append (assoc-ref outputs "out") "/bin/sd"))) (when (file-exists? bin) (rename-file bin (string-append (dirname bin) "/sd-vulkan"))))))))) (inputs (list vulkan-headers vulkan-loader shaderc libomp)))) (define-public exiv2-staticlibs (package (inherit exiv2) (arguments `(#:test-target "tests" #:configure-flags (list "-DEXIV2_BUILD_UNIT_TESTS=ON" ;; darktable needs BMFF to support ;; CR3 files. "-DEXIV2_ENABLE_BMFF=ON") #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-gcc-reference (lambda _ ;; _GLIBCXX_ASSERTIONS brings reference to GCC. (substitute* "cmake/compilerFlags.cmake" (("add_compile_options[(]-Wp,-D_GLIBCXX_ASSERTIONS[)]") "")))) ,@(if (or (target-ppc64le?) (target-aarch64?) (target-riscv64?)) '((add-after 'unpack 'adjust-tests (lambda _ ;; Adjust test on ppc64 and aarch64, where no exception ;; is raised and thus the return value is different. See ;; and ;; . (substitute* "tests/bugfixes/github/test_CVE_2018_12265.py" (("\\$uncaught_exception \\$addition_overflow_message\n") "") (("retval = \\[1\\]") "retval = [0]"))))) '())))) )) (define-public stable-diffusion-cpp-gui-wx (package (name "stable-diffusion-cpp-gui-wx") (version "6f604f836961002fbce72a205c1e6cc6d6a531e9") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/fszontagh/sd.cpp.gui.wx") (recursive? #t) (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "035zqhjnwdb07ag4chj9zijl70wk81kinqwlnvs9ixb2fzl1z374")))) (build-system cmake-build-system) (arguments '( #:tests? #f #:configure-flags (list "-DSD_AVX=ON" "-DWXWIDGETS_VERSION=3.2.5" (string-append "-DWXWIDGETS_EXTRA_PATH=" (assoc-ref %build-inputs "wxwidgets")) ) #:substitutable? #f ) ) (native-inputs (list pkg-config)) (inputs (list openblas openssl curl exiv2-staticlibs wxwidgets gtk+ pangomm git stable-diffusion-cpp)) (synopsis "cross-platform GUI for Stable Diffusion C++") (description "A cross-platform GUI for Stable Diffusion C++, built using wxWidgets.") (home-page "https://stable-diffusion.fsociety.hu") (license license:expat) )) (define-public bark-cpp (package (name "bark-cpp") (version "03d70997620ab4d1130be68ef2ab3c763ba09576") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/PABannier/bark.cpp.git") (recursive? #t) (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "02s3nwpbq87r3l11bm2psc9lnra650rf87659kwx41p6kzsl536m")))) (build-system cmake-build-system) (inputs (list openblas)) (arguments '( #:tests? #f #:configure-flags (list "-DGGML_OPENBLAS=ON --config Release") #:phases (modify-phases %standard-phases (add-after 'install 'install-server (lambda _ (with-directory-excursion (string-append #$output "/bin") (symlink "server" "bark-server") ) )) ;(add-after 'install 'install-main ; (lambda _ ; (with-directory-excursion (string-append #$output "/bin") ; (symlink "main" "bark") ; ) ; )) ; ) )) (home-page "https://github.com/PABannier/bark.cpp") (synopsis "Real-time realistic multilingual text-to-speech generation to the community.") (description "With bark.cpp, our goal is to bring real-time realistic multilingual text-to-speech generation to the community.") (license license:expat))) (define-public clip-cpp (package (name "clip-cpp") (version "f4ee24bb86680a27f83c8e8c70adbcf4cb776615") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/monatis/clip.cpp") (recursive? #t) (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "0wybslxzygs1bwdmiy9la0fzids112iiajb3ca6sjkhjp7nwakky")))) (build-system cmake-build-system) ;(inputs (list openblas)) (arguments (list #:tests? #f ;#:configure-flags #~(list "-DCLIP_BUILD_IMAGE_SEARCH=ON -DCLIP_OPENBLAS=ON") #:configure-flags #~(list "-DCLIP_OPENBLAS=ON") #:modules '((ice-9 textual-ports) (guix build utils) ((guix build python-build-system) #:prefix python:) (guix build cmake-build-system)) #:imported-modules `(,@%cmake-build-system-modules (guix build python-build-system)) #:phases #~(modify-phases %standard-phases (add-before 'install 'install-python-scripts (lambda _ (let ((bin (string-append #$output "/bin/"))) (define (make-script script) (let ((suffix (if (string-suffix? ".py" script) "" ".py"))) (call-with-input-file (string-append "../source/models/" script suffix) (lambda (input) (call-with-output-file (string-append bin script) (lambda (output) (format output "#!~a/bin/python3\n~a" #$(this-package-input "python") (get-string-all input)))))) (chmod (string-append bin script) #o555))) (mkdir-p bin) (make-script "convert_hf_to_gguf") ))) (add-after 'install-python-scripts 'wrap-python-scripts (assoc-ref python:%standard-phases 'wrap)) (replace 'install (lambda _ (copy-file "bin/main" (string-append #$output "/bin/clip")) (copy-file "bin/zsl" (string-append #$output "/bin/clip-zsl")) (copy-file "bin/extract" (string-append #$output "/bin/clip-extract")) ))))) (inputs `( ("python", python) ("openblas", openblas) ; ("ursearch" ; ,(origin ; (method git-fetch) ; (uri (git-reference ; (url "https://github.com/unum-cloud/usearch") ; (recursive? #t) ; (commit "v2.11.4"))) ; (sha256 ; (base32 "0l4gm6z5dal3146izqs7x82yf3sh4bsfwa9rkmnm2m4yc2snfbhp")) ; ) ; ))) ) ) ; (native-inputs (list git-minimal)) (home-page "https://github.com/leejet/stable-diffusion.cpp") (synopsis "Inference of Stable Diffusion in pure C/C++") (description "Inference of Stable Diffusion in pure C/C++") (license license:expat))) (define-public clblast (package (name "clblast") (version "1.6.3") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/CNugteren/CLBlast.git") (commit version) )) (file-name (git-file-name name version)) (sha256 (base32 "1zp8rfkscnh4l9x71kp39hsg5zxfhkkf88886mv40hw0a1hafdvz")) )) (build-system cmake-build-system) (arguments (list #:phases #~(modify-phases %standard-phases (delete 'check) ))) (inputs (list opencl-clhpp opencl-icd-loader)) (home-page "https://cnugteren.github.io/clblast") (synopsis "Tuned OpenCL BLAS") (description "CLBlast is a lightweight, performant and tunable OpenCL BLAS library written in C++11. It is designed to leverage the full performance potential of a wide variety of OpenCL devices from different vendors, including desktop and laptop GPUs, embedded GPUs, and other accelerators. CLBlast implements BLAS routines: basic linear algebra subprograms operating on vectors and matrices. See the CLBlast website for performance reports on some devices.") (license license:asl2.0))) (define-public kobold-cpp (package (name "kobold-cpp") (version "1.76") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/LostRuins/koboldcpp.git") (commit (string-append "v" version)) )) (file-name (git-file-name name version)) (sha256 (base32 "155207vyxl2gh156gf0zs6ylkixrgr563cdfzkapcdhzj9lpsdfk")) )) (build-system gnu-build-system) (arguments (list #:make-flags #~(list "LLAMA_OPENBLAS=1" "LLAMA_CLBLAST=1" "LLAMA_VULKAN=1" (string-append "CC=" #$(cc-for-target)) ) #:modules '((ice-9 textual-ports) (guix build utils) ((guix build python-build-system) #:prefix python:) (guix build gnu-build-system)) #:imported-modules `(,@%default-gnu-imported-modules (guix build python-build-system)) #:phases #~(modify-phases %standard-phases ;(add-after 'unpack 'disable-unrunable-tests ; ;; test-eval-callback downloads ML model from network, cannot ; ;; run in Guix build environment ; (lambda _ ; (substitute* '("examples/eval-callback/CMakeLists.txt") ; (("add_test") "#add_test")) ; (substitute* '("examples/eval-callback/CMakeLists.txt") ; (("set_property") "#set_property")))) (add-after 'build 'install-python-scripts (lambda _ (let ((bin (string-append #$output "/bin/"))) (define (make-script script) (let ((suffix (if (string-suffix? ".py" script) "" ".py"))) (call-with-input-file (string-append script suffix) (lambda (input) (call-with-output-file (string-append bin script) (lambda (output) (format output "#!~a/bin/python3\n~a" #$(this-package-input "python") (get-string-all input)))))) (chmod (string-append bin script) #o555))) (make-script "koboldcpp.py") ;(make-script "convert-hf-to-gguf") ;(make-script "convert-llama-ggml-to-gguf") ;(make-script "convert-hf-to-gguf-update.py") ))) (add-after 'build 'install-compiled (lambda _ (mkdir-p (string-append #$output "/lib")) (mkdir-p (string-append #$output "/bin")) (for-each (lambda (f) (install-file f (string-append #$output "/lib"))) (find-files "." "\\.so$")) (for-each (lambda (f) (install-file f (string-append #$output "/bin"))) (find-files "." "\\.py$")))) ;(add-after 'install-compiled 'wrap-python-scripts ; ;(assoc-ref python:%standard-phases 'wrap) ; (add-after 'wrap-python-scripts 'wrap-for-local-libs ; (lambda _ ; (wrap-program (string-append #$output "/bin/koboldcpp.py") ; '("PATH" ":" suffix (string-append #$output "/lib/"))) ; ) ; ) (delete 'configure) (delete 'check) (delete 'install) ;Only running "make" is necssary for install. ))) (inputs (list python)) (native-inputs (list pkg-config gcc-toolchain)) (propagated-inputs (list python-numpy python-pytorch python-sentencepiece openblas clblast opencl-clhpp opencl-icd-loader vulkan-headers vulkan-loader python-gguf python-customtkinter findutils)) (properties '((tunable? . #true))) ;use AVX512, FMA, etc. when available (home-page "https://github.com/lostruins/koboldcpp") (synopsis " A simple one-file way to run various GGML and GGUF models with a KoboldAI UI.") (description "KoboldCpp is an easy-to-use AI text-generation software for GGML and GGUF models, inspired by the original KoboldAI. It's a single self-contained distributable from Concedo, that builds off llama.cpp, and adds a versatile KoboldAI API endpoint, additional format support, Stable Diffusion image generation, speech-to-text, backward compatibility, as well as a fancy UI with persistent stories, editing tools, save formats, memory, world info, author's note, characters, scenarios and everything KoboldAI and KoboldAI Lite have to offer.") (license license:agpl3))) (define-public python-gguf (package (name "python-gguf") (version "0.9.1") (source (origin (method url-fetch) (uri (pypi-uri "gguf" version)) (sha256 (base32 "0fyk7x6b2a7xjmf3q7zb61ik1yrk80xm7xx9yr2wa6avw63hkrzm")))) (build-system pyproject-build-system) (arguments '( #:phases (modify-phases %standard-phases (delete 'check) ;#TODO: see why this is broke (delete 'sanity-check) ;TODO: Fix broken sanity-check ))) (native-inputs (list poetry)) (propagated-inputs (list python-numpy python-tqdm)) (home-page "https://ggml.ai") (synopsis "Read and write ML models in GGUF for GGML") (description "Read and write ML models in GGUF for GGML.") (license #f))) (define-public python-darkdetect (package (name "python-darkdetect") (version "0.8.0") (source (origin (method url-fetch) (uri (pypi-uri "darkdetect" version)) (sha256 (base32 "1cgqgpz36dfn7hsqc29ha9pmxmzdjlwdq9aclkgbagi6f08qwhmm")))) (build-system pyproject-build-system) (arguments '( #:phases (modify-phases %standard-phases (delete 'check) ;#TODO: see why this is broke (delete 'sanity-check) ;TODO: Fix broken sanity-check ))) (home-page "") (synopsis "Detect OS Dark Mode from Python") (description "Detect OS Dark Mode from Python.") (license #f))) (define-public python-customtkinter (package (name "python-customtkinter") (version "5.2.2") (source (origin (method url-fetch) (uri (pypi-uri "customtkinter" version)) (sha256 (base32 "01yjv09r3cbdk09vamh7cdc5iqn2nj0bl383wqp9h74nzaxb73gx")))) (build-system pyproject-build-system) (arguments '( #:phases (modify-phases %standard-phases (delete 'check) ;#TODO: see why this is broke (delete 'sanity-check) ;TODO: Fix broken sanity-check ))) (propagated-inputs (list python-darkdetect python-packaging python-typing-extensions)) (home-page "https://customtkinter.tomschimansky.com") (synopsis "Create modern looking GUIs with Python") (description "Create modern looking GUIs with Python.") (license #f))) (define-public python-rubbrband (package (name "python-rubbrband") (version "0.2.19") (source (origin (method url-fetch) (uri (pypi-uri "rubbrband" version)) (sha256 (base32 "1sv7y2wvnmb0mabdbzwg0q6cf9mjkrik68dnbl3qa0slf8z7biy7")))) (build-system pyproject-build-system) (propagated-inputs (list python-pillow python-requests)) (home-page "https://github.com/rubbrband/rubbrband") (synopsis "") (description #f) (license #f)))