local-ai: 2.23.0 -> 2.24.2 (#368296)

This commit is contained in:
Christian Kögler
2024-12-30 12:31:28 +01:00
committed by GitHub
3 changed files with 75 additions and 69 deletions
+1 -1
View File
@@ -10,7 +10,7 @@ let
in
{
options.services.local-ai = {
enable = lib.mkEnableOption "local-ai";
enable = lib.mkEnableOption "Enable service";
package = lib.mkPackageOption pkgs "local-ai" { };
+66 -57
View File
@@ -147,8 +147,8 @@ let
src = fetchFromGitHub {
owner = "ggerganov";
repo = "llama.cpp";
rev = "6423c65aa8be1b98f990cf207422505ac5a441a1";
hash = "sha256-DI3VhXEeok/wIFuM/l1hJJZlpxvyKY6Kmi97o3g0Ppk=";
rev = "26a8406ba9198eb6fdd8329fa717555b4f77f05f";
hash = "sha256-WFkg4ZhL5x55JdeFmAGBFKjWd31XyfGPtQkn+9b7GF4=";
fetchSubmodules = true;
};
postPatch =
@@ -275,32 +275,14 @@ let
'';
};
go-rwkv = stdenv.mkDerivation {
name = "go-rwkv";
src = fetchFromGitHub {
owner = "donomii";
repo = "go-rwkv.cpp";
rev = "661e7ae26d442f5cfebd2a0881b44e8c55949ec6";
hash = "sha256-byTNZQSnt7qpBMng3ANJmpISh3GJiz+F15UqfXaz6nQ=";
fetchSubmodules = true;
};
buildFlags = [ "librwkv.a" ];
dontUseCmakeConfigure = true;
nativeBuildInputs = [ cmake ];
installPhase = ''
cp -r --no-preserve=mode $src $out
cp *.a $out
'';
};
# try to merge with openai-whisper-cpp in future
whisper-cpp = effectiveStdenv.mkDerivation {
name = "whisper-cpp";
src = fetchFromGitHub {
owner = "ggerganov";
repo = "whisper.cpp";
rev = "31aea563a83803c710691fed3e8d700e06ae6788";
hash = "sha256-YCYRx+DHhxazJ3ZAdmuqeYHOX5v6JEZhU9eo487yEtk=";
rev = "6266a9f9e56a5b925e9892acf650f3eb1245814d";
hash = "sha256-y30ZccpF3SCdRGa+P3ddF1tT1KnvlI4Fexx81wZxfTk=";
};
nativeBuildInputs = [
@@ -338,25 +320,6 @@ let
'';
};
go-bert = stdenv.mkDerivation {
name = "go-bert";
src = fetchFromGitHub {
owner = "go-skynet";
repo = "go-bert.cpp";
rev = "710044b124545415f555e4260d16b146c725a6e4";
hash = "sha256-UNrs3unYjvSzCVaVISFFBDD+s37lmN6/7ajmGNcYgrU=";
fetchSubmodules = true;
};
buildFlags = [ "libgobert.a" ];
dontUseCmakeConfigure = true;
nativeBuildInputs = [ cmake ];
env.NIX_CFLAGS_COMPILE = "-Wformat";
installPhase = ''
cp -r --no-preserve=mode $src $out
cp *.a $out
'';
};
go-stable-diffusion = stdenv.mkDerivation {
name = "go-stable-diffusion";
src = fetchFromGitHub {
@@ -417,6 +380,45 @@ let
meta.broken = lib.versionOlder go-tiny-dream.stdenv.cc.version "13";
};
bark = stdenv.mkDerivation {
name = "bark";
src = fetchFromGitHub {
owner = "PABannier";
repo = "bark.cpp";
rev = "v1.0.0";
hash = "sha256-wOcggRWe8lsUzEj/wqOAUlJVypgNFmit5ISs9fbwoCE=";
fetchSubmodules = true;
};
installPhase = ''
mkdir -p $out/build
cp -ra $src/* $out
find . \( -name '*.a' -or -name '*.c.o' \) -print0 \
| tar cf - --null --files-from - \
| tar xf - -C $out/build
'';
nativeBuildInputs = [ cmake ];
};
stable-diffusion = stdenv.mkDerivation {
name = "stable-diffusion";
src = fetchFromGitHub {
owner = "leejet";
repo = "stable-diffusion.cpp";
rev = "4570715727f35e5a07a76796d823824c8f42206c";
hash = "sha256-1w7OokrQflasvauDEADLDJf2530m5a7WP+X1KgwxCks=";
fetchSubmodules = true;
};
installPhase = ''
mkdir -p $out/build
cp -ra $src/* $out
find . \( -name '*.a' -or -name '*.c.o' \) -print0 \
| tar cf - --null --files-from - \
| tar xf - -C $out/build
'';
nativeBuildInputs = [ cmake ];
buildInputs = [ opencv ];
};
GO_TAGS =
lib.optional with_tinydream "tinydream"
++ lib.optional with_tts "tts"
@@ -431,12 +433,12 @@ let
stdenv;
pname = "local-ai";
version = "2.23.0";
version = "2.24.2";
src = fetchFromGitHub {
owner = "go-skynet";
repo = "LocalAI";
rev = "v${version}";
hash = "sha256-7i2qW9yh++YQrEnjjxkHB7GJZSIIJQFJ9GyU2Rp9+kk=";
hash = "sha256-nJYeNwx6G3WhrTZYi1yoPzYtofx1H7bTkK0T9ld5wcE=";
};
prepare-sources =
@@ -447,30 +449,32 @@ let
mkdir sources
${cp} ${go-llama} sources/go-llama.cpp
${cp} ${if with_tts then go-piper else go-piper.src} sources/go-piper
${cp} ${go-rwkv} sources/go-rwkv.cpp
${cp} ${whisper-cpp.src} sources/whisper.cpp
cp ${whisper-cpp}/lib/lib*.a sources/whisper.cpp
${cp} ${go-bert} sources/go-bert.cpp
${cp} ${
if with_stablediffusion then go-stable-diffusion else go-stable-diffusion.src
} sources/go-stable-diffusion
${cp} ${if with_tinydream then go-tiny-dream else go-tiny-dream.src} sources/go-tiny-dream
${cp} ${bark} sources/bark.cpp
${cp} ${stable-diffusion} sources/stablediffusion-ggml.cpp
'';
self = buildGo123Module.override { stdenv = effectiveStdenv; } {
inherit pname version src;
vendorHash = "sha256-bLeKh0aKSQrD5jTydG0ZLW5RCNb3oKvjCSeA9juI3B8=";
vendorHash = "sha256-QmOoICJ11SY8xXE0g1+1mWRUZ3kQPtCcpM6aZiBkHQ0=";
env.NIX_CFLAGS_COMPILE = lib.optionalString with_stablediffusion " -isystem ${opencv}/include/opencv4";
postPatch =
''
# TODO: add silero-vad
sed -i Makefile \
-e '/mod download/ d' \
-e '/^ALL_GRPC_BACKENDS+=backend-assets\/grpc\/llama-cpp-fallback/ d' \
-e '/^ALL_GRPC_BACKENDS+=backend-assets\/grpc\/llama-cpp-avx/ d' \
-e '/^ALL_GRPC_BACKENDS+=backend-assets\/grpc\/llama-cpp-cuda/ d' \
-e '/^ALL_GRPC_BACKENDS+=backend-assets\/grpc\/silero-vad/ d' \
''
+ lib.optionalString with_cublas ''
@@ -492,7 +496,8 @@ let
cp ${llama-cpp-rpc}/bin/llama-rpc-server backend-assets/util/llama-cpp-rpc-server
# avoid rebuild of prebuilt make targets
touch backend-assets/grpc/* backend-assets/util/* sources/**/lib*.a
touch backend-assets/grpc/* backend-assets/util/*
find sources -name "lib*.a" -exec touch {} +
'';
buildInputs =
@@ -511,14 +516,17 @@ let
++ lib.optionals with_stablediffusion go-stable-diffusion.buildInputs
++ lib.optionals with_tts go-piper.buildInputs;
nativeBuildInputs = [
protobuf
protoc-gen-go
protoc-gen-go-grpc
makeWrapper
ncurses # tput
which
] ++ lib.optional enable_upx upx ++ lib.optionals with_cublas [ cuda_nvcc ];
nativeBuildInputs =
[
protobuf
protoc-gen-go
protoc-gen-go-grpc
makeWrapper
ncurses # tput
which
]
++ lib.optional enable_upx upx
++ lib.optionals with_cublas [ cuda_nvcc ];
enableParallelBuilding = false;
@@ -599,8 +607,6 @@ let
passthru.local-packages = {
inherit
go-tiny-dream
go-rwkv
go-bert
go-llama
go-piper
llama-cpp-grpc
@@ -610,6 +616,9 @@ let
piper-phonemize
piper-tts'
llama-cpp-rpc
go-stable-diffusion
bark
stable-diffusion
;
};
+8 -11
View File
@@ -51,18 +51,17 @@ in
};
}
// lib.optionalAttrs (!self.features.with_cublas) {
# https://localai.io/features/embeddings/#bert-embeddings
bert =
// lib.optionalAttrs (!self.features.with_cublas && !self.features.with_clblas) {
# https://localai.io/features/embeddings/#llamacpp-embeddings
llamacpp-embeddings =
let
model = "embedding";
model-configs.${model} = {
# Note: q4_0 and q4_1 models can not be loaded
parameters.model = fetchurl {
url = "https://huggingface.co/skeskinen/ggml/resolve/main/all-MiniLM-L6-v2/ggml-model-f16.bin";
hash = "sha256-nBlbJFOk/vYKT2vjqIo5IRNmIU32SYpP5IhcniIxT1A=";
url = "https://huggingface.co/hugging-quants/Llama-3.2-1B-Instruct-Q4_K_M-GGUF/resolve/main/llama-3.2-1b-instruct-q4_k_m.gguf";
sha256 = "1d0e9419ec4e12aef73ccf4ffd122703e94c48344a96bc7c5f0f2772c2152ce3";
};
backend = "bert-embeddings";
backend = "llama-cpp";
embeddings = true;
};
@@ -74,7 +73,7 @@ in
};
in
testers.runNixOSTest {
name = self.name + "-bert";
name = self.name + "-llamacpp-embeddings";
nodes.machine = {
imports = [ common-config ];
virtualisation.cores = 2;
@@ -103,8 +102,6 @@ in
'';
};
}
// lib.optionalAttrs (!self.features.with_cublas && !self.features.with_clblas) {
# https://localai.io/docs/getting-started/manual/
llama =
let
@@ -118,7 +115,7 @@ in
# https://ai.meta.com/blog/meta-llama-3-1/
model = fetchurl {
url = "https://huggingface.co/lmstudio-community/Meta-Llama-3.1-8B-Instruct-GGUF/resolve/main/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf";
hash = "sha256-8r4+GiOcEsnz8BqWKxH7KAf4Ay/bY7ClUC6kLd71XkQ=";
sha256 = "f2be3e1a239c12c9f3f01a962b11fb2807f8032fdb63b0a5502ea42ddef55e44";
};
# defaults from:
# https://deepinfra.com/meta-llama/Meta-Llama-3.1-8B-Instruct