похуй

This commit is contained in:
TheK0tYaRa 2026-04-08 23:02:56 +03:00
parent e439700992
commit 0591e57dfd
8 changed files with 503 additions and 0 deletions

23
.gear/check Executable file
View file

@ -0,0 +1,23 @@
#!/bin/bash -efu
RET=0
f=tools/server/public/bundle.js
email=$(git log -1 --pretty=%ae -- "$f")
if [[ $email != *@altlinux.org ]]; then
echo >&2 "$f is not updated by ALT. Perhaps, run .gear/generate"
(set -x; git l -1 -- "$f")
RET=1
fi
ts_f=$(git log -1 --date=unix --pretty='%cd' "$f")
s=tools/server/webui
ts_s=$(git log -1 --date=unix --pretty='%cd' "$s")
if (( ts_f < ts_s )); then
echo >&2 "$f is not updated after $s update."
(set -x; git l -1 -- "$f")
(set -x; git l -1 -- "$s")
RET=1
fi
exit $RET

60
.gear/gen-manpage Executable file
View file

@ -0,0 +1,60 @@
#!/bin/bash -e
#
# Wrapper around llama-cli to massage the output to be more palatable to
# help2man for generating a manual page.
#
# Invoke as:
# gen-manpage build/bin/llama-cli --name='LLM inference in C/C++'
#
# This script is in the public domain and may be distributed or modified
# without restriction.
#
: ${HELP2MAN:=help2man}
tmp=$(mktemp -d)
trap "rm -rf $tmp" EXIT HUP INT
cmd="${1?}"
shift
# --version goes to stderr?
$cmd --version 2>$tmp/version
# --help to stdout, some diagnostics to stderr
$cmd --help >$tmp/help 2>/dev/null
# Ensure we got something from both.
test -s $tmp/version && test -s $tmp/help
cmd="${cmd##*/}"
# Strip out just version.
sed -i -n "s/^version: /$cmd /p" $tmp/version
# Convert ---thing--- to subheadings, and clean up args.
sed -i \
-e 's/^----- \([A-Za-z].*\) -----/\1:/' \
-e 's/^[a-z].*:$/\u&/' \
-e '/^[A-Za-z].*:$/s/ [a-z]/\U&/g' \
-e 's/^-\(-\?[a-zA-Z0-9][^ ]*,\)\( *\)\(-.*\) /-\1 \3\2 /' \
-e 's/^-\(.*\) / -\1 /' \
-e '/ *[^ ].*: [^ ]/s/:/: /' \
$tmp/help
cat <<EOT >$tmp/${cmd##*/}
#!/bin/bash
for arg; do
case "\$arg" in
--version) cat $tmp/version;;
--help) cat $tmp/help;;
esac
done
EOT
chmod a+x "$tmp/$cmd"
${HELP2MAN} --no-info "$@" "$tmp/$cmd"
exit $?

View file

@ -0,0 +1,354 @@
# SPDX-License-Identifier: GPL-2.0-only
%define _unpackaged_files_terminate_build 1
%define _stripped_files_terminate_build 1
%set_verify_elf_method strict
%ifarch x86_64
%def_with cuda
%else
%def_without cuda
%endif
%def_with vulkan
Name: llama-cpp-turboquant
Version: 8659
Release: alt1
Epoch: 1
Summary: LLM inference in C/C++
License: MIT
Group: Sciences/Computer science
# https://ggml.ai/
Url: https://github.com/ggerganov/llama.cpp
ExcludeArch: %ix86
Requires: %name-cpu = %EVR
%if_with cuda
Requires: %name-cuda = %EVR
%filter_from_requires /(libcudart\.so\.12)/d
%filter_from_requires /debug64(libcuda\.so\.1)/d
%endif
%if_with vulkan
Requires: %name-vulkan = %EVR
%endif
Source: %name-%version.tar
Patch: %name-%version.patch
BuildRequires(pre): rpm-macros-cmake
BuildRequires: cmake
BuildRequires: gcc-c++
BuildRequires: help2man
BuildRequires: libcurl-devel
BuildRequires: libgomp-devel
BuildRequires: libssl-devel
BuildRequires: libstdc++-devel-static
%if_with cuda
BuildRequires: gcc12-c++
BuildRequires: nvidia-cuda-devel-static
%endif
%if_with vulkan
BuildRequires: glslc
BuildRequires: libvulkan-devel
%endif
%{?!_without_check:%{?!_disable_check:
BuildRequires: ctest
BuildRequires: python3-module-jinja2
BuildRequires: tinyllamas-gguf
}}
%description
Plain C/C++ implementation (of inference of many LLM models) without
dependencies. AVX, AVX2, AVX512, and AMX support for x86 architectures.
Mixed F16/F32 precision. 1.5-bit, 2-bit, 3-bit, 4-bit, 5-bit, 6-bit, and
8-bit integer quantization for faster inference and reduced memory use.
Supports CPU, GPU, and hybrid CPU+GPU inference.
Supported models:
LLaMA models, Mistral 7B, Mixtral MoE, Falcon, Chinese LLaMA /
Alpaca and Chinese LLaMA-2 / Alpaca-2, Vigogne (French), Koala,
Baichuan 1 & 2 + derivations, Aquila 1 & 2, Starcoder models, Refact,
Persimmon 8B, MPT, Bloom, Yi models, StableLM models, Deepseek models,
Qwen models, PLaMo-13B, Phi models, GPT-2, Orion 14B, InternLM2,
CodeShell, Gemma, Mamba, Grok-1, Xverse, Command-R models, SEA-LION,
GritLM-7B + GritLM-8x7B, OLMo, GPT-NeoX + Pythia, Snowflake-Arctic
MoE, Smaug, Poro 34B, Bitnet b1.58 models, Flan T5, Open Elm models,
ChatGLM3-6b + ChatGLM4-9b + GLMEdge-1.5b + GLMEdge-4b, SmolLM,
EXAONE-3.0-7.8B-Instruct, FalconMamba Models, Jais, Bielik-11B-v2.3,
RWKV-6, QRWKV-6, GigaChat-20B-A3B, Trillion-7B-preview, Ling models,
LFM2 models, Hunyuan models, BailingMoeV2 (Ring/Ling 2.0) models
Multimodal models:
LLaVA 1.5 models, BakLLaVA, Obsidian, ShareGPT4V, MobileVLM 1.7B/3B
models, Yi-VL, Mini CPM, Moondream, Bunny, GLM-EDGE, Qwen2-VL,
LFM2-VL
NOTE:
MODELS ARE NOT PROVIDED. You'll need to download them from the original
sites (or Hugging Face Hub).
Overall this is all raw and EXPERIMENTAL, no warranty, no support.
%package -n libllama-turboquant
Summary: Shared libraries for llama-cpp-turboquant
Group: System/Libraries
%description -n libllama-turboquant
%summary.
%package -n libllama-turboquant-devel
Summary: Development files for llama.cpp
Group: Development/C
Requires: libllama = %EVR
Conflicts: libwhisper-cpp-devel
%description -n libllama-turboquant-devel
%summary.
%package cpu
Summary: %name tools including backend for CPU
Group: Sciences/Computer science
Requires: libllama-turboquant = %EVR
Conflicts: %name-convert < %EVR
AutoReqProv: nopython3
%add_findreq_skiplist %_datadir/%name/examples/*
%description cpu
%summary.
%package cuda
Summary: %name backend for NVIDIA GPU
Group: Sciences/Computer science
Requires: libnvidia-ptxjitcompiler
Requires: %name-cpu = %EVR
%description cuda
%summary.
%package vulkan
Summary: %name backend for GPU
Group: Sciences/Computer science
Requires: %name-cpu = %EVR
%description vulkan
%summary.
%prep
%setup
%autopatch -p1
commit=$(awk '$2=="b%version"{print$1}' .gear/tags/list)
cat <<-EOF >> cmake/build-info.cmake
set(BUILD_NUMBER %version)
set(GGML_BUILD_NUMBER %version)
set(BUILD_COMMIT "${commit::8} [%release]")
EOF
sed -i '/POSITION_INDEPENDENT_CODE/s/PROPERTIES/& SOVERSION 0.0.%version/' src/CMakeLists.txt
sed -i 's/POSITION_INDEPENDENT_CODE/SOVERSION 0.0.%version &/' tools/mtmd/CMakeLists.txt
# We do not have Internet access (issues/13371).
perl -00 -ni -e 'print unless /_URL/' tests/test-arg-parser.cpp
# This test requires GPU.
sed /test-thread-safety/d -i tests/CMakeLists.txt
%build
%define optflags_debug -g1
# Unless -DCMAKE_SKIP_BUILD_RPATH=yes CMake fails to strip build time RPATH
# from (installed) binaries.
export NVCC_PREPEND_FLAGS=-ccbin=g++-12
%cmake \
-DCMAKE_SKIP_BUILD_RPATH=yes \
-DLLAMA_BUILD_TESTS=ON \
-DGGML_BACKEND_DL=ON \
-DGGML_BACKEND_DIR=%_libexecdir/llama-tq \
-DGGML_CPU=ON \
-DGGML_RPC=ON \
%ifarch x86_64
-DGGML_CPU_ALL_VARIANTS=ON \
%endif
%if_with cuda
-DGGML_CUDA=ON \
-DCMAKE_CUDA_ARCHITECTURES='52-virtual;80-virtual' \
%endif
%if_with vulkan
-DGGML_VULKAN=ON \
%endif
%nil
grep -E 'LLAMA|GGML' %_cmake__builddir/CMakeCache.txt | sort | tee build-options.txt
%cmake_build
find -name '*.py' | xargs sed -i '1s|#!/usr/bin/env python3|#!%__python3|'
LD_LIBRARY_PATH=%_cmake__builddir/bin %_cmake__builddir/bin/llama-tq-server --completion-bash > llama-tq.bash
LD_LIBRARY_PATH=%_cmake__builddir/bin .gear/gen-manpage %_cmake__builddir/bin/llama-tq-server > llama-tq-server.1
%install
%cmake_install
# Python requirements files.
install -Dpm644 requirements.txt -t %buildroot%_datadir/%name
cp -a requirements -t %buildroot%_datadir/%name
# Additional data.
cp -rp grammars -t %buildroot%_datadir/%name
# Not all examples.
install -Dp examples/*.sh -t %buildroot%_datadir/%name/examples
install -Dp examples/*.py -t %buildroot%_datadir/%name/examples
# We need to run the tests, not install them.
rm %buildroot%_bindir/test-*
rm %buildroot%_bindir/export-graph-ops
# Completions.
install -Dpm644 llama.bash %buildroot%_datadir/bash-completion/completions/llama-server
printf '%%s\n' llama-tq-cli llama-tq-simple llama-tq-run llama-tq-mtmd-cli |
xargs -ti ln -s llama-tq-server %buildroot%_datadir/bash-completion/completions/{}
mv %buildroot%_bindir/rpc-server %buildroot%_bindir/llama-tq-rpc-server
install -Dpm644 llama-tq-server.1 -t %buildroot%_man1dir
%check
( ! cuobjdump --list-elf %buildroot%_libexecdir/llama-tq/libggml-cuda.so | grep -F -v -e .cubin )
( ! cuobjdump --list-ptx %buildroot%_libexecdir/llama-tq/libggml-cuda.so | grep -F -v -e .sm_80.ptx -e .sm_52.ptx )
# Local path are more useful for debugging becasue they are not stripped by default.
export LD_LIBRARY_PATH=$PWD/%_cmake__builddir/bin PATH+=:$PWD/%_cmake__builddir/bin
llama-tq-server --version
llama-tq-server --version |& grep -Ex 'version: %version \(\S+ \[%release\]\)'
# test-eval-callback wants network.
%ctest -E 'test-download-model|test-eval-callback|test-state-restore-fragmented|test-llama-archs'
# It broke so it can suck my dick
#llama-completion -m /usr/share/tinyllamas/stories260K.gguf -p "Hello" -s 42 -n 500 2>/dev/null
#llama-completion -m /usr/share/tinyllamas/stories260K.gguf -p "Once upon a time" -s 55 -n 33 2>/dev/null |
# grep 'Once upon a time, there was a boy named Tom. Tom had a big box of colors.'
# We do not provide convert tools.
mv %buildroot%_bindir/convert*.py -t %buildroot%_datadir/%name/examples
%files
%files -n libllama-turboquant
%_libdir/libllama-tq.so.0.0.%version
%_libdir/libggml-tq.so.0
%_libdir/libggml-tq.so.0.*
%_libdir/libggml-tq-base.so.0
%_libdir/libggml-tq-base.so.0.*
%_libdir/libmtmd-tq.so.0.0.%version
%files -n libllama-turboquant-devel
%_libdir/libllama-tq.so
%_libdir/libggml-tq.so
%_libdir/libggml-tq-base.so
%_libdir/libmtmd-tq.so
%_includedir/llama-tq*.h
%_includedir/gguf-tq.h
%_includedir/ggml-tq*.h
%_includedir/mtmd-tq*.h
%_cmakedir/ggml-tq
%_cmakedir/llama-tq
%_pkgconfigdir/llama-tq.pc
%files cpu
%define _customdocdir %_docdir/%name
%doc LICENSE README.md docs build-options.txt
%_bindir/llama-tq-*
%dir %_datadir/%name
%dir %_datadir/%name/examples
%_datadir/%name/examples/*.sh
%_datadir/%name/examples/*.py
%_datadir/%name/requirements*
%_datadir/%name/grammars
%dir %_libexecdir/llama-tq
%_libexecdir/llama-tq/libggml-cpu*.so
%_libexecdir/llama-tq/libggml-rpc.so
%_datadir/bash-completion/completions/llama-tq-*
%_man1dir/llama-tq-server.1*
%if_with cuda
%files cuda
%dir %_libexecdir/llama
%_libexecdir/llama-tq/libggml-cuda.so
%endif
%if_with vulkan
%files vulkan
%dir %_libexecdir/llama-tq
%_libexecdir/llama-tq/libggml-vulkan.so
%endif
%changelog
* Tue Apr 07 2026 Arseniy Romenskiy <romenskiy@altlinux.org> 1:8659-alt1
- Update to b8659 (2026-04-07).
* Mon Apr 06 2026 Vitaly Chikunov <vt@altlinux.org> 1:8681-alt1
- Update to b8681 (2026-04-06).
* Sun Mar 22 2026 Vitaly Chikunov <vt@altlinux.org> 1:8470-alt1
- Update to b8470 (2026-03-22).
* Tue Mar 03 2026 Vitaly Chikunov <vt@altlinux.org> 1:8192-alt1
- Update to b8192 (2026-03-03).
* Fri Feb 13 2026 Vitaly Chikunov <vt@altlinux.org> 1:8018-alt1
- Update to b8018 (2026-02-12).
* Sat Jan 24 2026 Vitaly Chikunov <vt@altlinux.org> 1:7819-alt1
- Update to b7819 (2026-01-23).
- Responses API support (partial).
* Sun Dec 14 2025 Vitaly Chikunov <vt@altlinux.org> 1:7388-alt1
- Update to b7388 (2025-12-13).
- llama-cli: New CLI experience (with the old moved to llama-completion).
- llama-server: Live model switching.
- Messages API support.
* Fri Nov 21 2025 Vitaly Chikunov <vt@altlinux.org> 1:7127-alt1
- Update to b7127 (2025-11-21).
- spec: Remove llama.cpp-convert package.
- model: detect GigaChat3-10-A1.8B as deepseek lite.
* Tue Oct 28 2025 Vitaly Chikunov <vt@altlinux.org> 1:6869-alt1
- Update to b6869 (2025-10-28).
* Sat Sep 06 2025 Vitaly Chikunov <vt@altlinux.org> 1:6397-alt1
- Update to b6397 (2025-09-06).
- Python-based model conversion scripts are sub-packaged. Note that they are
not supported and are provided as-is.
* Sat Aug 09 2025 Vitaly Chikunov <vt@altlinux.org> 1:6121-alt1
- Update to b6121 (2025-08-08).
* Wed Jun 25 2025 Vitaly Chikunov <vt@altlinux.org> 1:5753-alt1
- Update to b5753 (2025-06-24).
- Install an experimental rpc backend and server. The rpc code is a
proof-of-concept, fragile, and insecure.
* Sat May 10 2025 Vitaly Chikunov <vt@altlinux.org> 1:5332-alt1
- Update to b5332 (2025-05-09), with vision support in llama-server.
- Enable Vulkan backend (for GPU) in llama.cpp-vulkan package.
* Mon Mar 10 2025 Vitaly Chikunov <vt@altlinux.org> 1:4855-alt1
- Update to b4855 (2025-03-07).
- Enable CUDA backend (for NVIDIA GPU) in llama.cpp-cuda package.
- Disable BLAS backend (issues/12282).
- Install bash-completions.
* Tue Jul 23 2024 Vitaly Chikunov <vt@altlinux.org> 1:3441-alt1
- Update to b3441 (2024-07-23).
- spec: Package libllama and libllama-devel (ALT#50962).
- spec: Use upstream install procedure; as a consequence, some binary names are
changed.
* Mon Jun 03 2024 Vitaly Chikunov <vt@altlinux.org> 1:3072-alt1.20240603
- Update to b3072 (2024-06-03).
- The version scheme now matches the upstream build number more closely,
instead of using the commit date.
- Build with libcurl and OpenBLAS support.
* Tue May 28 2024 Vitaly Chikunov <vt@altlinux.org> 20240527-alt1
- Update to b3012 (2024-05-27).
* Mon Feb 26 2024 Vitaly Chikunov <vt@altlinux.org> 20240225-alt1
- Update to b2259 (2024-02-25).
* Fri Oct 20 2023 Vitaly Chikunov <vt@altlinux.org> 20231019-alt1
- Update to b1400 (2023-10-19).
- Install experimental converters (convert- prefixed tools).
* Sun Jul 30 2023 Vitaly Chikunov <vt@altlinux.org> 20230728-alt1
- Update to master-8a88e58 (2023-07-28).
* Sun May 14 2023 Vitaly Chikunov <vt@altlinux.org> 20230513-alt1
- Build master-bda4d7c (2023-05-13).
* Wed Apr 19 2023 Vitaly Chikunov <vt@altlinux.org> 20230419-alt1
- Build master-6667401 (2023-04-19).

14
.gear/llama.service Normal file
View file

@ -0,0 +1,14 @@
[Unit]
Description=Llama.cpp server, CPU only (no GPU support in this build).
After=syslog.target network.target local-fs.target remote-fs.target nss-lookup.target
[Service]
Type=simple
DynamicUser=true
EnvironmentFile=-/etc/sysconfig/llama
ExecStart=llama-server $LLAMA_ARGS
ExecReload=/bin/kill -HUP $MAINPID
Restart=never
[Install]
WantedBy=default.target

5
.gear/npm-build Executable file
View file

@ -0,0 +1,5 @@
workdir=tools/server/webui
target=tools/server/public
aikido-npm ci --ignore-scripts
aikido-npm audit --audit-level=critical fix
npm run build

5
.gear/rules Normal file
View file

@ -0,0 +1,5 @@
# The diff is only to detect commit hash of release tag `gear-update-tag -ac`
# for version output.
tar: b@version@:.
diff: b@version@:. . name=@name@-@version@.patch
spec: .gear/llama-cpp-turboquant.spec

1
.gear/tags/list Normal file
View file

@ -0,0 +1 @@
e43970099269b5b6da36b8977ad47697602e4e54 b8659

View file

@ -0,0 +1,41 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=QeVw
-----END PGP PUBLIC KEY BLOCK-----