mirror of
https://github.com/nomic-ai/gpt4all.git
synced 2026-07-17 10:58:08 +00:00
Compare commits
15 Commits
v3.4.2
...
cmake/besp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e642185034 | ||
|
|
e1e56d2723 | ||
|
|
75136ce217 | ||
|
|
9c50c6cbe6 | ||
|
|
62f90ff7d5 | ||
|
|
6df252bdcd | ||
|
|
d224a9d3a5 | ||
|
|
1764fca192 | ||
|
|
044ceec7fb | ||
|
|
adf7225f1c | ||
|
|
7f5f0869e7 | ||
|
|
9cafd38dcf | ||
|
|
c3357b7625 | ||
|
|
eed92fd5b2 | ||
|
|
80cfac7ece |
@@ -1,7 +1,7 @@
|
||||
version: 2.1
|
||||
setup: true
|
||||
orbs:
|
||||
path-filtering: circleci/path-filtering@0.0.1
|
||||
path-filtering: circleci/path-filtering@1.1.0
|
||||
|
||||
workflows:
|
||||
version: 2.1
|
||||
|
||||
@@ -19,6 +19,13 @@ parameters:
|
||||
default: false
|
||||
|
||||
jobs:
|
||||
# work around CircleCI-Public/path-filtering-orb#20
|
||||
noop:
|
||||
docker:
|
||||
- image: cimg/base:current
|
||||
steps:
|
||||
- run: "true"
|
||||
|
||||
build-offline-chat-installer-macos:
|
||||
macos:
|
||||
xcode: 15.4.0
|
||||
@@ -37,11 +44,11 @@ jobs:
|
||||
command: softwareupdate --install-rosetta --agree-to-license # needed for QtIFW
|
||||
- run:
|
||||
name: Install dependencies
|
||||
command: brew install ccache
|
||||
command: brew install ccache wget
|
||||
- run:
|
||||
name: Installing Qt
|
||||
command: |
|
||||
curl -o qt-unified-macOS-x64-4.6.0-online.dmg https://gpt4all.io/ci/qt-unified-macOS-x64-4.6.0-online.dmg
|
||||
wget "https://gpt4all.io/ci/qt-unified-macOS-x64-4.6.0-online.dmg"
|
||||
hdiutil attach qt-unified-macOS-x64-4.6.0-online.dmg
|
||||
/Volumes/qt-unified-macOS-x64-4.6.0-online/qt-unified-macOS-x64-4.6.0-online.app/Contents/MacOS/qt-unified-macOS-x64-4.6.0-online --no-force-installations --no-default-installations --no-size-checking --default-answer --accept-licenses --confirm-command --accept-obligations --email $QT_EMAIL --password $QT_PASSWORD install qt.tools.cmake qt.tools.ifw.48 qt.tools.ninja qt.qt6.651.clang_64 qt.qt6.651.qt5compat qt.qt6.651.debug_info qt.qt6.651.addons.qtpdf qt.qt6.651.addons.qthttpserver
|
||||
hdiutil detach /Volumes/qt-unified-macOS-x64-4.6.0-online
|
||||
@@ -175,11 +182,11 @@ jobs:
|
||||
command: softwareupdate --install-rosetta --agree-to-license # needed for QtIFW
|
||||
- run:
|
||||
name: Install dependencies
|
||||
command: brew install ccache
|
||||
command: brew install ccache wget
|
||||
- run:
|
||||
name: Installing Qt
|
||||
command: |
|
||||
curl -o qt-unified-macOS-x64-4.6.0-online.dmg https://gpt4all.io/ci/qt-unified-macOS-x64-4.6.0-online.dmg
|
||||
wget "https://gpt4all.io/ci/qt-unified-macOS-x64-4.6.0-online.dmg"
|
||||
hdiutil attach qt-unified-macOS-x64-4.6.0-online.dmg
|
||||
/Volumes/qt-unified-macOS-x64-4.6.0-online/qt-unified-macOS-x64-4.6.0-online.app/Contents/MacOS/qt-unified-macOS-x64-4.6.0-online --no-force-installations --no-default-installations --no-size-checking --default-answer --accept-licenses --confirm-command --accept-obligations --email $QT_EMAIL --password $QT_PASSWORD install qt.tools.cmake qt.tools.ifw.48 qt.tools.ninja qt.qt6.651.clang_64 qt.qt6.651.qt5compat qt.qt6.651.debug_info qt.qt6.651.addons.qtpdf qt.qt6.651.addons.qthttpserver
|
||||
hdiutil detach /Volumes/qt-unified-macOS-x64-4.6.0-online
|
||||
@@ -312,9 +319,9 @@ jobs:
|
||||
- run:
|
||||
name: Setup Linux and Dependencies
|
||||
command: |
|
||||
wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
|
||||
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-jammy.list https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-jammy.list
|
||||
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
|
||||
wget -qO- "https://packages.lunarg.com/lunarg-signing-key-pub.asc" | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
|
||||
wget -qO- "https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-jammy.list" | sudo tee /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-jammy.list
|
||||
wget "https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb"
|
||||
sudo dpkg -i cuda-keyring_1.1-1_all.deb
|
||||
packages=(
|
||||
bison build-essential ccache cuda-compiler-11-8 flex g++-12 gperf libcublas-dev-11-8 libfontconfig1
|
||||
@@ -329,7 +336,7 @@ jobs:
|
||||
- run:
|
||||
name: Installing Qt
|
||||
command: |
|
||||
wget https://gpt4all.io/ci/qt-unified-linux-x64-4.6.0-online.run
|
||||
wget "https://gpt4all.io/ci/qt-unified-linux-x64-4.6.0-online.run"
|
||||
chmod +x qt-unified-linux-x64-4.6.0-online.run
|
||||
./qt-unified-linux-x64-4.6.0-online.run --no-force-installations --no-default-installations --no-size-checking --default-answer --accept-licenses --confirm-command --accept-obligations --email $QT_EMAIL --password $QT_PASSWORD install qt.tools.cmake qt.tools.ifw.48 qt.tools.ninja qt.qt6.651.gcc_64 qt.qt6.651.qt5compat qt.qt6.651.debug_info qt.qt6.651.addons.qtpdf qt.qt6.651.addons.qthttpserver
|
||||
- run:
|
||||
@@ -388,9 +395,9 @@ jobs:
|
||||
- run:
|
||||
name: Setup Linux and Dependencies
|
||||
command: |
|
||||
wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
|
||||
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-jammy.list https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-jammy.list
|
||||
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
|
||||
wget -qO- "https://packages.lunarg.com/lunarg-signing-key-pub.asc" | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
|
||||
wget -qO- "https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-jammy.list" | sudo tee /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-jammy.list
|
||||
wget "https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb"
|
||||
sudo dpkg -i cuda-keyring_1.1-1_all.deb
|
||||
packages=(
|
||||
bison build-essential ccache cuda-compiler-11-8 flex g++-12 gperf libcublas-dev-11-8 libfontconfig1
|
||||
@@ -405,7 +412,7 @@ jobs:
|
||||
- run:
|
||||
name: Installing Qt
|
||||
command: |
|
||||
wget https://gpt4all.io/ci/qt-unified-linux-x64-4.6.0-online.run
|
||||
wget "https://gpt4all.io/ci/qt-unified-linux-x64-4.6.0-online.run"
|
||||
chmod +x qt-unified-linux-x64-4.6.0-online.run
|
||||
./qt-unified-linux-x64-4.6.0-online.run --no-force-installations --no-default-installations --no-size-checking --default-answer --accept-licenses --confirm-command --accept-obligations --email $QT_EMAIL --password $QT_PASSWORD install qt.tools.cmake qt.tools.ifw.48 qt.tools.ninja qt.qt6.651.gcc_64 qt.qt6.651.qt5compat qt.qt6.651.debug_info qt.qt6.651.addons.qtpdf qt.qt6.651.addons.qthttpserver
|
||||
- run:
|
||||
@@ -466,21 +473,21 @@ jobs:
|
||||
- ccache-gpt4all-win-amd64-
|
||||
- run:
|
||||
name: Install dependencies
|
||||
command: choco install -y ccache
|
||||
command: choco install -y ccache wget
|
||||
- run:
|
||||
name: Installing Qt
|
||||
command: |
|
||||
Invoke-WebRequest -Uri https://gpt4all.io/ci/qt-unified-windows-x64-4.6.0-online.exe -OutFile qt-unified-windows-x64-4.6.0-online.exe
|
||||
wget.exe "https://gpt4all.io/ci/qt-unified-windows-x64-4.6.0-online.exe"
|
||||
& .\qt-unified-windows-x64-4.6.0-online.exe --no-force-installations --no-default-installations --no-size-checking --default-answer --accept-licenses --confirm-command --accept-obligations --email ${Env:QT_EMAIL} --password ${Env:QT_PASSWORD} install qt.tools.cmake qt.tools.ifw.48 qt.tools.ninja qt.qt6.651.win64_msvc2019_64 qt.qt6.651.qt5compat qt.qt6.651.debug_info qt.qt6.651.addons.qtpdf qt.qt6.651.addons.qthttpserver
|
||||
- run:
|
||||
name: Install VulkanSDK
|
||||
command: |
|
||||
Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/1.3.261.1/windows/VulkanSDK-1.3.261.1-Installer.exe -OutFile VulkanSDK-1.3.261.1-Installer.exe
|
||||
wget.exe "https://sdk.lunarg.com/sdk/download/1.3.261.1/windows/VulkanSDK-1.3.261.1-Installer.exe"
|
||||
.\VulkanSDK-1.3.261.1-Installer.exe --accept-licenses --default-answer --confirm-command install
|
||||
- run:
|
||||
name: Install CUDA Toolkit
|
||||
command: |
|
||||
Invoke-WebRequest -Uri https://developer.download.nvidia.com/compute/cuda/11.8.0/network_installers/cuda_11.8.0_windows_network.exe -OutFile cuda_11.8.0_windows_network.exe
|
||||
wget.exe "https://developer.download.nvidia.com/compute/cuda/11.8.0/network_installers/cuda_11.8.0_windows_network.exe"
|
||||
.\cuda_11.8.0_windows_network.exe -s cudart_11.8 nvcc_11.8 cublas_11.8 cublas_dev_11.8
|
||||
- run:
|
||||
name: "Install Dotnet 8"
|
||||
@@ -488,7 +495,7 @@ jobs:
|
||||
mkdir dotnet
|
||||
cd dotnet
|
||||
$dotnet_url="https://download.visualstudio.microsoft.com/download/pr/5af098e1-e433-4fda-84af-3f54fd27c108/6bd1c6e48e64e64871957289023ca590/dotnet-sdk-8.0.302-win-x64.zip"
|
||||
Invoke-WebRequest -Uri $dotnet_url -Outfile dotnet-sdk-8.0.302-win-x64.zip
|
||||
wget "$dotnet_url"
|
||||
Expand-Archive -LiteralPath .\dotnet-sdk-8.0.302-win-x64.zip
|
||||
$Env:DOTNET_ROOT="$($(Get-Location).Path)\dotnet-sdk-8.0.302-win-x64"
|
||||
$Env:PATH="$Env:DOTNET_ROOT;$Env:PATH"
|
||||
@@ -549,13 +556,16 @@ jobs:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: build
|
||||
- run:
|
||||
name: Install dependencies
|
||||
command: choco install -y wget
|
||||
- run:
|
||||
name: "Install Dotnet 8 && Azure Sign Tool"
|
||||
command: |
|
||||
mkdir dotnet
|
||||
cd dotnet
|
||||
$dotnet_url="https://download.visualstudio.microsoft.com/download/pr/5af098e1-e433-4fda-84af-3f54fd27c108/6bd1c6e48e64e64871957289023ca590/dotnet-sdk-8.0.302-win-x64.zip"
|
||||
Invoke-WebRequest -Uri $dotnet_url -Outfile dotnet-sdk-8.0.302-win-x64.zip
|
||||
wget.exe "$dotnet_url"
|
||||
Expand-Archive -LiteralPath .\dotnet-sdk-8.0.302-win-x64.zip
|
||||
$Env:DOTNET_ROOT="$($(Get-Location).Path)\dotnet-sdk-8.0.302-win-x64"
|
||||
$Env:PATH="$Env:DOTNET_ROOT;$Env:PATH"
|
||||
@@ -587,21 +597,21 @@ jobs:
|
||||
- ccache-gpt4all-win-amd64-
|
||||
- run:
|
||||
name: Install dependencies
|
||||
command: choco install -y ccache
|
||||
command: choco install -y ccache wget
|
||||
- run:
|
||||
name: Installing Qt
|
||||
command: |
|
||||
Invoke-WebRequest -Uri https://gpt4all.io/ci/qt-unified-windows-x64-4.6.0-online.exe -OutFile qt-unified-windows-x64-4.6.0-online.exe
|
||||
wget.exe "https://gpt4all.io/ci/qt-unified-windows-x64-4.6.0-online.exe"
|
||||
& .\qt-unified-windows-x64-4.6.0-online.exe --no-force-installations --no-default-installations --no-size-checking --default-answer --accept-licenses --confirm-command --accept-obligations --email ${Env:QT_EMAIL} --password ${Env:QT_PASSWORD} install qt.tools.cmake qt.tools.ifw.48 qt.tools.ninja qt.qt6.651.win64_msvc2019_64 qt.qt6.651.qt5compat qt.qt6.651.debug_info qt.qt6.651.addons.qtpdf qt.qt6.651.addons.qthttpserver
|
||||
- run:
|
||||
name: Install VulkanSDK
|
||||
command: |
|
||||
Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/1.3.261.1/windows/VulkanSDK-1.3.261.1-Installer.exe -OutFile VulkanSDK-1.3.261.1-Installer.exe
|
||||
wget.exe "https://sdk.lunarg.com/sdk/download/1.3.261.1/windows/VulkanSDK-1.3.261.1-Installer.exe"
|
||||
.\VulkanSDK-1.3.261.1-Installer.exe --accept-licenses --default-answer --confirm-command install
|
||||
- run:
|
||||
name: Install CUDA Toolkit
|
||||
command: |
|
||||
Invoke-WebRequest -Uri https://developer.download.nvidia.com/compute/cuda/11.8.0/network_installers/cuda_11.8.0_windows_network.exe -OutFile cuda_11.8.0_windows_network.exe
|
||||
wget.exe "https://developer.download.nvidia.com/compute/cuda/11.8.0/network_installers/cuda_11.8.0_windows_network.exe"
|
||||
.\cuda_11.8.0_windows_network.exe -s cudart_11.8 nvcc_11.8 cublas_11.8 cublas_dev_11.8
|
||||
- run:
|
||||
name: "Install Dotnet 8"
|
||||
@@ -609,7 +619,7 @@ jobs:
|
||||
mkdir dotnet
|
||||
cd dotnet
|
||||
$dotnet_url="https://download.visualstudio.microsoft.com/download/pr/5af098e1-e433-4fda-84af-3f54fd27c108/6bd1c6e48e64e64871957289023ca590/dotnet-sdk-8.0.302-win-x64.zip"
|
||||
Invoke-WebRequest -Uri $dotnet_url -Outfile dotnet-sdk-8.0.302-win-x64.zip
|
||||
wget.exe "$dotnet_url"
|
||||
Expand-Archive -LiteralPath .\dotnet-sdk-8.0.302-win-x64.zip
|
||||
$Env:DOTNET_ROOT="$($(Get-Location).Path)\dotnet-sdk-8.0.302-win-x64"
|
||||
$Env:PATH="$Env:DOTNET_ROOT;$Env:PATH"
|
||||
@@ -677,13 +687,16 @@ jobs:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: build
|
||||
- run:
|
||||
name: Install dependencies
|
||||
command: choco install -y wget
|
||||
- run:
|
||||
name: "Install Dotnet 8"
|
||||
command: |
|
||||
mkdir dotnet
|
||||
cd dotnet
|
||||
$dotnet_url="https://download.visualstudio.microsoft.com/download/pr/5af098e1-e433-4fda-84af-3f54fd27c108/6bd1c6e48e64e64871957289023ca590/dotnet-sdk-8.0.302-win-x64.zip"
|
||||
Invoke-WebRequest -Uri $dotnet_url -Outfile dotnet-sdk-8.0.302-win-x64.zip
|
||||
wget.exe "$dotnet_url"
|
||||
Expand-Archive -LiteralPath .\dotnet-sdk-8.0.302-win-x64.zip
|
||||
$Env:DOTNET_ROOT="$($(Get-Location).Path)\dotnet-sdk-8.0.302-win-x64"
|
||||
$Env:PATH="$Env:DOTNET_ROOT;$Env:PATH"
|
||||
@@ -719,9 +732,9 @@ jobs:
|
||||
- run:
|
||||
name: Setup Linux and Dependencies
|
||||
command: |
|
||||
wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
|
||||
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-jammy.list https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-jammy.list
|
||||
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
|
||||
wget -qO- "https://packages.lunarg.com/lunarg-signing-key-pub.asc" | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
|
||||
wget -qO- "https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-jammy.list" | sudo tee /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-jammy.list
|
||||
wget "https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb"
|
||||
sudo dpkg -i cuda-keyring_1.1-1_all.deb
|
||||
packages=(
|
||||
bison build-essential ccache cuda-compiler-11-8 flex g++-12 gperf libcublas-dev-11-8 libfontconfig1
|
||||
@@ -736,7 +749,7 @@ jobs:
|
||||
- run:
|
||||
name: Installing Qt
|
||||
command: |
|
||||
wget https://gpt4all.io/ci/qt-unified-linux-x64-4.6.0-online.run
|
||||
wget "https://gpt4all.io/ci/qt-unified-linux-x64-4.6.0-online.run"
|
||||
chmod +x qt-unified-linux-x64-4.6.0-online.run
|
||||
./qt-unified-linux-x64-4.6.0-online.run --no-force-installations --no-default-installations --no-size-checking --default-answer --accept-licenses --confirm-command --accept-obligations --email $QT_EMAIL --password $QT_PASSWORD install qt.tools.cmake qt.tools.ifw.48 qt.tools.ninja qt.qt6.651.gcc_64 qt.qt6.651.qt5compat qt.qt6.651.debug_info qt.qt6.651.addons.qtpdf qt.qt6.651.addons.qthttpserver
|
||||
- run:
|
||||
@@ -780,21 +793,21 @@ jobs:
|
||||
- ccache-gpt4all-win-amd64-
|
||||
- run:
|
||||
name: Install dependencies
|
||||
command: choco install -y ccache
|
||||
command: choco install -y ccache wget
|
||||
- run:
|
||||
name: Installing Qt
|
||||
command: |
|
||||
Invoke-WebRequest -Uri https://gpt4all.io/ci/qt-unified-windows-x64-4.6.0-online.exe -OutFile qt-unified-windows-x64-4.6.0-online.exe
|
||||
wget.exe "https://gpt4all.io/ci/qt-unified-windows-x64-4.6.0-online.exe"
|
||||
& .\qt-unified-windows-x64-4.6.0-online.exe --no-force-installations --no-default-installations --no-size-checking --default-answer --accept-licenses --confirm-command --accept-obligations --email ${Env:QT_EMAIL} --password ${Env:QT_PASSWORD} install qt.tools.cmake qt.tools.ifw.48 qt.tools.ninja qt.qt6.651.win64_msvc2019_64 qt.qt6.651.qt5compat qt.qt6.651.debug_info qt.qt6.651.addons.qtpdf qt.qt6.651.addons.qthttpserver
|
||||
- run:
|
||||
name: Install VulkanSDK
|
||||
command: |
|
||||
Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/1.3.261.1/windows/VulkanSDK-1.3.261.1-Installer.exe -OutFile VulkanSDK-1.3.261.1-Installer.exe
|
||||
wget.exe "https://sdk.lunarg.com/sdk/download/1.3.261.1/windows/VulkanSDK-1.3.261.1-Installer.exe"
|
||||
.\VulkanSDK-1.3.261.1-Installer.exe --accept-licenses --default-answer --confirm-command install
|
||||
- run:
|
||||
name: Install CUDA Toolkit
|
||||
command: |
|
||||
Invoke-WebRequest -Uri https://developer.download.nvidia.com/compute/cuda/11.8.0/network_installers/cuda_11.8.0_windows_network.exe -OutFile cuda_11.8.0_windows_network.exe
|
||||
wget.exe "https://developer.download.nvidia.com/compute/cuda/11.8.0/network_installers/cuda_11.8.0_windows_network.exe"
|
||||
.\cuda_11.8.0_windows_network.exe -s cudart_11.8 nvcc_11.8 cublas_11.8 cublas_dev_11.8
|
||||
- run:
|
||||
name: Build
|
||||
@@ -842,11 +855,11 @@ jobs:
|
||||
command: softwareupdate --install-rosetta --agree-to-license # needed for QtIFW
|
||||
- run:
|
||||
name: Install dependencies
|
||||
command: brew install ccache
|
||||
command: brew install ccache wget
|
||||
- run:
|
||||
name: Installing Qt
|
||||
command: |
|
||||
curl -o qt-unified-macOS-x64-4.6.0-online.dmg https://gpt4all.io/ci/qt-unified-macOS-x64-4.6.0-online.dmg
|
||||
wget "https://gpt4all.io/ci/qt-unified-macOS-x64-4.6.0-online.dmg"
|
||||
hdiutil attach qt-unified-macOS-x64-4.6.0-online.dmg
|
||||
/Volumes/qt-unified-macOS-x64-4.6.0-online/qt-unified-macOS-x64-4.6.0-online.app/Contents/MacOS/qt-unified-macOS-x64-4.6.0-online --no-force-installations --no-default-installations --no-size-checking --default-answer --accept-licenses --confirm-command --accept-obligations --email $QT_EMAIL --password $QT_PASSWORD install qt.tools.cmake qt.tools.ifw.48 qt.tools.ninja qt.qt6.651.clang_64 qt.qt6.651.qt5compat qt.qt6.651.debug_info qt.qt6.651.addons.qtpdf qt.qt6.651.addons.qthttpserver
|
||||
hdiutil detach /Volumes/qt-unified-macOS-x64-4.6.0-online
|
||||
@@ -932,9 +945,9 @@ jobs:
|
||||
- run:
|
||||
name: Install dependencies
|
||||
command: |
|
||||
wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
|
||||
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-jammy.list https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-jammy.list
|
||||
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
|
||||
wget -qO- "https://packages.lunarg.com/lunarg-signing-key-pub.asc" | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
|
||||
wget -qO- "https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-jammy.list" | sudo tee /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-jammy.list
|
||||
wget "https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb"
|
||||
sudo dpkg -i cuda-keyring_1.1-1_all.deb
|
||||
packages=(
|
||||
build-essential ccache cmake cuda-compiler-11-8 g++-12 libcublas-dev-11-8 libnvidia-compute-550-server
|
||||
@@ -1041,20 +1054,20 @@ jobs:
|
||||
- restore_cache:
|
||||
keys:
|
||||
- ccache-gpt4all-win-amd64-
|
||||
- run:
|
||||
name: Install dependencies
|
||||
command:
|
||||
choco install -y ccache cmake ninja wget --installargs 'ADD_CMAKE_TO_PATH=System'
|
||||
- run:
|
||||
name: Install VulkanSDK
|
||||
command: |
|
||||
Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/1.3.261.1/windows/VulkanSDK-1.3.261.1-Installer.exe -OutFile VulkanSDK-1.3.261.1-Installer.exe
|
||||
wget.exe "https://sdk.lunarg.com/sdk/download/1.3.261.1/windows/VulkanSDK-1.3.261.1-Installer.exe"
|
||||
.\VulkanSDK-1.3.261.1-Installer.exe --accept-licenses --default-answer --confirm-command install
|
||||
- run:
|
||||
name: Install CUDA Toolkit
|
||||
command: |
|
||||
Invoke-WebRequest -Uri https://developer.download.nvidia.com/compute/cuda/11.8.0/network_installers/cuda_11.8.0_windows_network.exe -OutFile cuda_11.8.0_windows_network.exe
|
||||
wget.exe "https://developer.download.nvidia.com/compute/cuda/11.8.0/network_installers/cuda_11.8.0_windows_network.exe"
|
||||
.\cuda_11.8.0_windows_network.exe -s cudart_11.8 nvcc_11.8 cublas_11.8 cublas_dev_11.8
|
||||
- run:
|
||||
name: Install dependencies
|
||||
command:
|
||||
choco install -y ccache cmake ninja --installargs 'ADD_CMAKE_TO_PATH=System'
|
||||
- run:
|
||||
name: Install Python dependencies
|
||||
command: pip install setuptools wheel cmake
|
||||
@@ -1132,9 +1145,9 @@ jobs:
|
||||
- run:
|
||||
name: Install dependencies
|
||||
command: |
|
||||
wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
|
||||
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-jammy.list https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-jammy.list
|
||||
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
|
||||
wget -qO- "https://packages.lunarg.com/lunarg-signing-key-pub.asc" | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
|
||||
wget -qO- "https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-jammy.list" | sudo tee /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-jammy.list
|
||||
wget "https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb"
|
||||
sudo dpkg -i cuda-keyring_1.1-1_all.deb
|
||||
packages=(
|
||||
build-essential ccache cmake cuda-compiler-11-8 g++-12 libcublas-dev-11-8 libnvidia-compute-550-server
|
||||
@@ -1238,20 +1251,20 @@ jobs:
|
||||
- restore_cache:
|
||||
keys:
|
||||
- ccache-gpt4all-win-amd64-
|
||||
- run:
|
||||
name: Install dependencies
|
||||
command: |
|
||||
choco install -y ccache cmake ninja wget --installargs 'ADD_CMAKE_TO_PATH=System'
|
||||
- run:
|
||||
name: Install VulkanSDK
|
||||
command: |
|
||||
Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/1.3.261.1/windows/VulkanSDK-1.3.261.1-Installer.exe -OutFile VulkanSDK-1.3.261.1-Installer.exe
|
||||
wget.exe "https://sdk.lunarg.com/sdk/download/1.3.261.1/windows/VulkanSDK-1.3.261.1-Installer.exe"
|
||||
.\VulkanSDK-1.3.261.1-Installer.exe --accept-licenses --default-answer --confirm-command install
|
||||
- run:
|
||||
name: Install CUDA Toolkit
|
||||
command: |
|
||||
Invoke-WebRequest -Uri https://developer.download.nvidia.com/compute/cuda/11.8.0/network_installers/cuda_11.8.0_windows_network.exe -OutFile cuda_11.8.0_windows_network.exe
|
||||
wget.exe "https://developer.download.nvidia.com/compute/cuda/11.8.0/network_installers/cuda_11.8.0_windows_network.exe"
|
||||
.\cuda_11.8.0_windows_network.exe -s cudart_11.8 nvcc_11.8 cublas_11.8 cublas_dev_11.8
|
||||
- run:
|
||||
name: Install dependencies
|
||||
command: |
|
||||
choco install -y ccache cmake ninja --installargs 'ADD_CMAKE_TO_PATH=System'
|
||||
- run:
|
||||
name: Build Libraries
|
||||
no_output_timeout: 30m
|
||||
@@ -1361,14 +1374,14 @@ jobs:
|
||||
at: /tmp/gpt4all-backend
|
||||
- run: choco install wget -y
|
||||
- run:
|
||||
command: wget https://nodejs.org/dist/v18.16.0/node-v18.16.0-x86.msi -P C:\Users\circleci\Downloads\
|
||||
shell: cmd.exe
|
||||
- run: MsiExec.exe /i C:\Users\circleci\Downloads\node-v18.16.0-x86.msi /qn
|
||||
command: |
|
||||
wget.exe "https://nodejs.org/dist/v18.16.0/node-v18.16.0-x86.msi" -P C:\Users\circleci\Downloads\
|
||||
MsiExec.exe /i C:\Users\circleci\Downloads\node-v18.16.0-x86.msi /qn
|
||||
- run:
|
||||
command: |
|
||||
Start-Process powershell -verb runAs -Args "-start GeneralProfile"
|
||||
nvm install 18.16.0
|
||||
nvm use 18.16.0
|
||||
Start-Process powershell -verb runAs -Args "-start GeneralProfile"
|
||||
nvm install 18.16.0
|
||||
nvm use 18.16.0
|
||||
- run: node --version
|
||||
- run: corepack enable
|
||||
- run:
|
||||
@@ -1451,6 +1464,16 @@ jobs:
|
||||
|
||||
workflows:
|
||||
version: 2
|
||||
noop:
|
||||
when:
|
||||
not:
|
||||
or:
|
||||
- << pipeline.parameters.run-all-workflows >>
|
||||
- << pipeline.parameters.run-python-workflow >>
|
||||
- << pipeline.parameters.run-ts-workflow >>
|
||||
- << pipeline.parameters.run-chat-workflow >>
|
||||
jobs:
|
||||
- noop
|
||||
build-chat-offline-installers:
|
||||
when:
|
||||
or:
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
[codespell]
|
||||
ignore-words-list = blong, afterall, som, assistent, crasher
|
||||
skip = .git,*.pdf,*.svg,*.lock,*.ts
|
||||
ignore-words-list = blong, afterall, assistent, crasher, requestor
|
||||
skip = ./.git,./gpt4all-chat/translations,*.pdf,*.svg,*.lock
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -182,6 +182,7 @@ gpt4all-chat/models/*
|
||||
build_*
|
||||
build-*
|
||||
cmake-build-*
|
||||
/gpt4all-chat/tests/python/config.py
|
||||
|
||||
# IntelliJ
|
||||
.idea/
|
||||
|
||||
@@ -11,7 +11,6 @@ function(gpt4all_add_warning_options target)
|
||||
-Wextra-semi
|
||||
-Wformat=2
|
||||
-Wmissing-include-dirs
|
||||
-Wnull-dereference
|
||||
-Wstrict-overflow=2
|
||||
-Wvla
|
||||
# errors
|
||||
@@ -22,8 +21,6 @@ function(gpt4all_add_warning_options target)
|
||||
# disabled warnings
|
||||
-Wno-sign-compare
|
||||
-Wno-unused-parameter
|
||||
-Wno-unused-function
|
||||
-Wno-unused-variable
|
||||
)
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
target_compile_options("${target}" PRIVATE
|
||||
|
||||
Submodule gpt4all-backend/deps/llama.cpp-mainline updated: b3b5c0571e...58a55efc4a
@@ -213,7 +213,7 @@ public:
|
||||
protected:
|
||||
// These are pure virtual because subclasses need to implement as the default implementation of
|
||||
// 'prompt' above calls these functions
|
||||
virtual std::vector<Token> tokenize(PromptContext &ctx, std::string_view str, bool special = false) = 0;
|
||||
virtual std::vector<Token> tokenize(std::string_view str, bool special = false) = 0;
|
||||
virtual bool isSpecialToken(Token id) const = 0;
|
||||
virtual std::string tokenToString(Token id) const = 0;
|
||||
virtual void initSampler(PromptContext &ctx) = 0;
|
||||
|
||||
@@ -511,7 +511,7 @@ size_t LLamaModel::restoreState(std::span<const uint8_t> src)
|
||||
return llama_state_set_data(d_ptr->ctx, src.data(), src.size());
|
||||
}
|
||||
|
||||
std::vector<LLModel::Token> LLamaModel::tokenize(PromptContext &ctx, std::string_view str, bool special)
|
||||
std::vector<LLModel::Token> LLamaModel::tokenize(std::string_view str, bool special)
|
||||
{
|
||||
bool atStart = m_tokenize_last_token == -1;
|
||||
bool insertSpace = atStart || isSpecialToken(m_tokenize_last_token);
|
||||
|
||||
@@ -54,7 +54,7 @@ private:
|
||||
bool m_supportsCompletion = false;
|
||||
|
||||
protected:
|
||||
std::vector<Token> tokenize(PromptContext &ctx, std::string_view str, bool special) override;
|
||||
std::vector<Token> tokenize(std::string_view str, bool special) override;
|
||||
bool isSpecialToken(Token id) const override;
|
||||
std::string tokenToString(Token id) const override;
|
||||
void initSampler(PromptContext &ctx) override;
|
||||
|
||||
@@ -90,41 +90,33 @@ void LLModel::prompt(const std::string &prompt,
|
||||
}
|
||||
}
|
||||
|
||||
auto old_n_past = promptCtx.n_past; // prepare to fake n_past for tokenize
|
||||
|
||||
// tokenize the user prompt
|
||||
std::vector<Token> embd_inp;
|
||||
if (placeholders.empty()) {
|
||||
// this is unusual, but well-defined
|
||||
std::cerr << __func__ << ": prompt template has no placeholder\n";
|
||||
embd_inp = tokenize(promptCtx, promptTemplate, true);
|
||||
embd_inp = tokenize(promptTemplate, true);
|
||||
} else {
|
||||
// template: beginning of user prompt
|
||||
const auto &phUser = placeholders[0];
|
||||
std::string userPrefix(phUser.prefix());
|
||||
if (!userPrefix.empty()) {
|
||||
embd_inp = tokenize(promptCtx, userPrefix, true);
|
||||
promptCtx.n_past += embd_inp.size();
|
||||
}
|
||||
if (!userPrefix.empty())
|
||||
embd_inp = tokenize(userPrefix, true);
|
||||
|
||||
// user input (shouldn't have special token processing)
|
||||
auto tokens = tokenize(promptCtx, prompt, special);
|
||||
auto tokens = tokenize(prompt, special);
|
||||
embd_inp.insert(embd_inp.end(), tokens.begin(), tokens.end());
|
||||
promptCtx.n_past += tokens.size();
|
||||
|
||||
// template: end of user prompt + start of assistant prompt
|
||||
size_t start = phUser.position() + phUser.length();
|
||||
size_t end = placeholders.size() >= 2 ? placeholders[1].position() : promptTemplate.length();
|
||||
auto userToAsst = promptTemplate.substr(start, end - start);
|
||||
if (!userToAsst.empty()) {
|
||||
tokens = tokenize(promptCtx, userToAsst, true);
|
||||
tokens = tokenize(userToAsst, true);
|
||||
embd_inp.insert(embd_inp.end(), tokens.begin(), tokens.end());
|
||||
promptCtx.n_past += tokens.size();
|
||||
}
|
||||
}
|
||||
|
||||
promptCtx.n_past = old_n_past; // restore n_past so decodePrompt can increment it
|
||||
|
||||
// decode the user prompt
|
||||
if (!decodePrompt(promptCallback, responseCallback, allowContextShift, promptCtx, embd_inp))
|
||||
return; // error
|
||||
@@ -133,7 +125,7 @@ void LLModel::prompt(const std::string &prompt,
|
||||
if (!fakeReply) {
|
||||
generateResponse(responseCallback, allowContextShift, promptCtx);
|
||||
} else {
|
||||
embd_inp = tokenize(promptCtx, *fakeReply, false);
|
||||
embd_inp = tokenize(*fakeReply, false);
|
||||
if (!decodePrompt(promptCallback, responseCallback, allowContextShift, promptCtx, embd_inp, true))
|
||||
return; // error
|
||||
}
|
||||
@@ -148,7 +140,7 @@ void LLModel::prompt(const std::string &prompt,
|
||||
asstSuffix = "\n\n"; // default to a blank link, good for e.g. Alpaca
|
||||
}
|
||||
if (!asstSuffix.empty()) {
|
||||
embd_inp = tokenize(promptCtx, asstSuffix, true);
|
||||
embd_inp = tokenize(asstSuffix, true);
|
||||
decodePrompt(promptCallback, responseCallback, allowContextShift, promptCtx, embd_inp);
|
||||
}
|
||||
}
|
||||
|
||||
5
gpt4all-chat/.flake8
Normal file
5
gpt4all-chat/.flake8
Normal file
@@ -0,0 +1,5 @@
|
||||
# vim: set syntax=dosini:
|
||||
[flake8]
|
||||
exclude = .*,__pycache__
|
||||
max-line-length = 120
|
||||
extend-ignore = B001,C408,D,DAR,E221,E303,E722,E741,E800,N801,N806,P101,S101,S324,S404,S406,S410,S603,WPS100,WPS110,WPS111,WPS113,WPS114,WPS115,WPS120,WPS2,WPS300,WPS301,WPS304,WPS305,WPS306,WPS309,WPS316,WPS317,WPS318,WPS319,WPS322,WPS323,WPS326,WPS329,WPS330,WPS332,WPS336,WPS337,WPS347,WPS360,WPS361,WPS414,WPS420,WPS421,WPS429,WPS430,WPS431,WPS432,WPS433,WPS437,WPS440,WPS440,WPS441,WPS442,WPS457,WPS458,WPS460,WPS462,WPS463,WPS473,WPS501,WPS504,WPS505,WPS508,WPS509,WPS510,WPS515,WPS516,WPS519,WPS529,WPS531,WPS602,WPS604,WPS605,WPS608,WPS609,WPS613,WPS615
|
||||
@@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Changed
|
||||
- Implement Qt 6.8 compatibility ([#3121](https://github.com/nomic-ai/gpt4all/pull/3121))
|
||||
|
||||
## [3.4.2] - 2024-10-16
|
||||
|
||||
### Fixed
|
||||
@@ -164,6 +169,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
||||
- Fix several Vulkan resource management issues ([#2694](https://github.com/nomic-ai/gpt4all/pull/2694))
|
||||
- Fix crash/hang when some models stop generating, by showing special tokens ([#2701](https://github.com/nomic-ai/gpt4all/pull/2701))
|
||||
|
||||
[Unreleased]: https://github.com/nomic-ai/gpt4all/compare/v3.4.2...HEAD
|
||||
[3.4.2]: https://github.com/nomic-ai/gpt4all/compare/v3.4.1...v3.4.2
|
||||
[3.4.1]: https://github.com/nomic-ai/gpt4all/compare/v3.4.0...v3.4.1
|
||||
[3.4.0]: https://github.com/nomic-ai/gpt4all/compare/v3.3.0...v3.4.0
|
||||
|
||||
@@ -4,9 +4,9 @@ include(../common/common.cmake)
|
||||
|
||||
set(APP_VERSION_MAJOR 3)
|
||||
set(APP_VERSION_MINOR 4)
|
||||
set(APP_VERSION_PATCH 2)
|
||||
set(APP_VERSION_PATCH 3)
|
||||
set(APP_VERSION_BASE "${APP_VERSION_MAJOR}.${APP_VERSION_MINOR}.${APP_VERSION_PATCH}")
|
||||
set(APP_VERSION "${APP_VERSION_BASE}")
|
||||
set(APP_VERSION "${APP_VERSION_BASE}-dev0")
|
||||
|
||||
project(gpt4all VERSION ${APP_VERSION_BASE} LANGUAGES CXX C)
|
||||
|
||||
@@ -22,6 +22,9 @@ if(APPLE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
find_package(Python3 3.12 QUIET COMPONENTS Interpreter)
|
||||
|
||||
option(GPT4ALL_TEST "Build the tests" ${Python3_FOUND})
|
||||
option(GPT4ALL_LOCALHOST "Build installer for localhost repo" OFF)
|
||||
option(GPT4ALL_OFFLINE_INSTALLER "Build an offline installer" OFF)
|
||||
option(GPT4ALL_SIGN_INSTALL "Sign installed binaries and installers (requires signing identities)" OFF)
|
||||
@@ -72,7 +75,11 @@ configure_file(
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/config.h"
|
||||
)
|
||||
|
||||
find_package(Qt6 6.4 COMPONENTS Core HttpServer LinguistTools Pdf Quick QuickDialogs2 Sql Svg REQUIRED)
|
||||
find_package(Qt6 6.5 COMPONENTS Core HttpServer LinguistTools Pdf Quick QuickDialogs2 Sql Svg REQUIRED)
|
||||
|
||||
if (QT_KNOWN_POLICY_QTP0004)
|
||||
qt_policy(SET QTP0004 NEW) # generate extra qmldir files on Qt 6.8+
|
||||
endif()
|
||||
|
||||
# Get the Qt6Core target properties
|
||||
get_target_property(Qt6Core_INCLUDE_DIRS Qt6::Core INTERFACE_INCLUDE_DIRECTORIES)
|
||||
@@ -93,6 +100,14 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||
add_subdirectory(deps)
|
||||
add_subdirectory(../gpt4all-backend llmodel)
|
||||
|
||||
if (GPT4ALL_TEST)
|
||||
enable_testing()
|
||||
add_subdirectory(tests)
|
||||
|
||||
# The 'check' target makes sure the tests and their dependencies are up-to-date before running them
|
||||
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure DEPENDS chat gpt4all_tests)
|
||||
endif()
|
||||
|
||||
set(CHAT_EXE_RESOURCES)
|
||||
|
||||
# Metal shader library
|
||||
@@ -412,6 +427,10 @@ if (LLMODEL_CUDA)
|
||||
LIBRARY DESTINATION lib COMPONENT ${COMPONENT_NAME_MAIN} # .so/.dylib
|
||||
RUNTIME DESTINATION lib COMPONENT ${COMPONENT_NAME_MAIN} # .dll
|
||||
)
|
||||
if (APPLE AND GPT4ALL_SIGN_INSTALL)
|
||||
sign_target_osx(llamamodel-mainline-cuda)
|
||||
sign_target_osx(llamamodel-mainline-cuda-avxonly)
|
||||
endif()
|
||||
if (WIN32)
|
||||
install(
|
||||
RUNTIME_DEPENDENCY_SET llama-cuda-deps
|
||||
@@ -420,6 +439,11 @@ if (LLMODEL_CUDA)
|
||||
DIRECTORIES "${CUDAToolkit_BIN_DIR}"
|
||||
DESTINATION lib COMPONENT ${COMPONENT_NAME_MAIN}
|
||||
)
|
||||
if (GPT4ALL_SIGN_INSTALL)
|
||||
sign_target_windows(llamamodel-mainline-cuda)
|
||||
sign_target_windows(llamamodel-mainline-avxonly)
|
||||
sign_target_windows(llama-cuda-deps)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -429,85 +453,4 @@ if (NOT APPLE)
|
||||
COMPONENT ${COMPONENT_NAME_MAIN})
|
||||
endif()
|
||||
|
||||
set(CPACK_GENERATOR "IFW")
|
||||
set(CPACK_VERBATIM_VARIABLES YES)
|
||||
set(CPACK_IFW_VERBOSE ON)
|
||||
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES Linux)
|
||||
find_program(LINUXDEPLOYQT linuxdeployqt HINTS "$ENV{HOME}/dev/linuxdeployqt/build/tools/linuxdeployqt" "$ENV{HOME}/project/linuxdeployqt/bin")
|
||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/deploy-qt-linux.cmake.in"
|
||||
"${CMAKE_BINARY_DIR}/cmake/deploy-qt-linux.cmake" @ONLY)
|
||||
set(CPACK_PRE_BUILD_SCRIPTS ${CMAKE_BINARY_DIR}/cmake/deploy-qt-linux.cmake)
|
||||
set(CPACK_IFW_ROOT "~/Qt/Tools/QtInstallerFramework/4.6")
|
||||
set(CPACK_PACKAGE_FILE_NAME "${COMPONENT_NAME_MAIN}-installer-linux")
|
||||
set(CPACK_IFW_TARGET_DIRECTORY "@HomeDir@/${COMPONENT_NAME_MAIN}")
|
||||
elseif(${CMAKE_SYSTEM_NAME} MATCHES Windows)
|
||||
find_program(WINDEPLOYQT windeployqt HINTS ${_qt_bin_dir})
|
||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/deploy-qt-windows.cmake.in"
|
||||
"${CMAKE_BINARY_DIR}/cmake/deploy-qt-windows.cmake" @ONLY)
|
||||
set(CPACK_PRE_BUILD_SCRIPTS ${CMAKE_BINARY_DIR}/cmake/deploy-qt-windows.cmake)
|
||||
set(CPACK_IFW_ROOT "C:/Qt/Tools/QtInstallerFramework/4.6")
|
||||
set(CPACK_IFW_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/resources/gpt4all.ico")
|
||||
set(CPACK_PACKAGE_FILE_NAME "${COMPONENT_NAME_MAIN}-installer-win64")
|
||||
set(CPACK_IFW_TARGET_DIRECTORY "@HomeDir@\\${COMPONENT_NAME_MAIN}")
|
||||
elseif(${CMAKE_SYSTEM_NAME} MATCHES Darwin)
|
||||
find_program(MACDEPLOYQT macdeployqt HINTS ${_qt_bin_dir})
|
||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/deploy-qt-mac.cmake.in"
|
||||
"${CMAKE_BINARY_DIR}/cmake/deploy-qt-mac.cmake" @ONLY)
|
||||
set(CPACK_PRE_BUILD_SCRIPTS ${CMAKE_BINARY_DIR}/cmake/deploy-qt-mac.cmake)
|
||||
set(CPACK_IFW_ROOT "~/Qt/Tools/QtInstallerFramework/4.6")
|
||||
set(CPACK_IFW_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/resources/gpt4all.icns")
|
||||
set(CPACK_PACKAGE_FILE_NAME "${COMPONENT_NAME_MAIN}-installer-darwin")
|
||||
set(CPACK_IFW_TARGET_DIRECTORY "@ApplicationsDir@/${COMPONENT_NAME_MAIN}")
|
||||
set(CPACK_BUNDLE_NAME ${COMPONENT_NAME_MAIN})
|
||||
set(CPACK_BUNDLE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/resources/gpt4all.icns")
|
||||
endif()
|
||||
|
||||
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${COMPONENT_NAME_MAIN})
|
||||
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
|
||||
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
|
||||
SET(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
|
||||
set(CPACK_PACKAGE_HOMEPAGE_URL "https://www.nomic.ai/gpt4all")
|
||||
set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icons/gpt4all-48.png")
|
||||
set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE)
|
||||
set(CPACK_RESOURCE_FILE_README ${CMAKE_CURRENT_SOURCE_DIR}/README.md)
|
||||
set(CPACK_PACKAGE_EXECUTABLES "GPT4All")
|
||||
set(CPACK_CREATE_DESKTOP_LINKS "GPT4All")
|
||||
set(CPACK_IFW_PACKAGE_NAME "GPT4All")
|
||||
set(CPACK_IFW_PACKAGE_TITLE "GPT4All Installer")
|
||||
set(CPACK_IFW_PACKAGE_PUBLISHER "Nomic, Inc.")
|
||||
set(CPACK_IFW_PRODUCT_URL "https://www.nomic.ai/gpt4all")
|
||||
set(CPACK_IFW_PACKAGE_WIZARD_STYLE "Aero")
|
||||
set(CPACK_IFW_PACKAGE_LOGO "${CMAKE_CURRENT_SOURCE_DIR}/icons/gpt4all-48.png")
|
||||
set(CPACK_IFW_PACKAGE_WINDOW_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icons/gpt4all-32.png")
|
||||
set(CPACK_IFW_PACKAGE_WIZARD_SHOW_PAGE_LIST OFF)
|
||||
set(CPACK_IFW_PACKAGE_CONTROL_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/cmake/installer_control.qs")
|
||||
|
||||
include(InstallRequiredSystemLibraries)
|
||||
include(CPack)
|
||||
include(CPackIFW)
|
||||
if(GPT4ALL_OFFLINE_INSTALLER)
|
||||
cpack_add_component(${COMPONENT_NAME_MAIN})
|
||||
else()
|
||||
cpack_add_component(${COMPONENT_NAME_MAIN} DOWNLOADED)
|
||||
endif()
|
||||
cpack_ifw_configure_component(${COMPONENT_NAME_MAIN} ESSENTIAL FORCED_INSTALLATION)
|
||||
cpack_ifw_configure_component(${COMPONENT_NAME_MAIN} VERSION ${APP_VERSION})
|
||||
cpack_ifw_configure_component(${COMPONENT_NAME_MAIN} LICENSES "MIT LICENSE" ${CPACK_RESOURCE_FILE_LICENSE})
|
||||
cpack_ifw_configure_component(${COMPONENT_NAME_MAIN} SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/cmake/installer_component.qs")
|
||||
cpack_ifw_configure_component(${COMPONENT_NAME_MAIN} REPLACES "gpt4all-chat") #Was used in very earliest prototypes
|
||||
|
||||
if (GPT4ALL_LOCALHOST)
|
||||
cpack_ifw_add_repository("GPT4AllRepository" URL "http://localhost/repository")
|
||||
elseif(GPT4ALL_OFFLINE_INSTALLER)
|
||||
add_compile_definitions(GPT4ALL_OFFLINE_INSTALLER)
|
||||
else()
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES Linux)
|
||||
cpack_ifw_add_repository("GPT4AllRepository" URL "https://gpt4all.io/installer_repos/linux/repository")
|
||||
elseif(${CMAKE_SYSTEM_NAME} MATCHES Windows)
|
||||
#To sign the target on windows have to create a batch script add use it as a custom target and then use CPACK_IFW_EXTRA_TARGETS to set this extra target
|
||||
cpack_ifw_add_repository("GPT4AllRepository" URL "https://gpt4all.io/installer_repos/windows/repository")
|
||||
elseif(${CMAKE_SYSTEM_NAME} MATCHES Darwin)
|
||||
cpack_ifw_add_repository("GPT4AllRepository" URL "https://gpt4all.io/installer_repos/mac/repository")
|
||||
endif()
|
||||
endif()
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/Gpt4allCPack.cmake)
|
||||
|
||||
101
gpt4all-chat/cmake/Gpt4allCPack.cmake
Normal file
101
gpt4all-chat/cmake/Gpt4allCPack.cmake
Normal file
@@ -0,0 +1,101 @@
|
||||
# Setup Generic CPack options
|
||||
include(InstallRequiredSystemLibraries)
|
||||
set(CPACK_VERBATIM_VARIABLES YES)
|
||||
|
||||
set(CPACK_PACKAGE_NAME "gpt4all")
|
||||
set(CPACK_PACKAGE_VERSION ${APP_VERSION_BASE})
|
||||
set(CPACK_PACKAGE_VERSION_MAJOR )
|
||||
set(CPACK_PACKAGE_VERSION_MINOR )
|
||||
set(CPACK_PACKAGE_VERSION_PATCH )
|
||||
set(CPACK_PACKAGE_VENDOR "nomic")
|
||||
set(CPACK_PACKAGE_DESCRIPTION
|
||||
"GPT4All runs large language models (LLMs) privately on everyday desktops & laptops.")
|
||||
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${COMPONENT_NAME_MAIN})
|
||||
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
|
||||
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
|
||||
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
|
||||
set(CPACK_PACKAGE_HOMEPAGE_URL "https://www.nomic.ai/gpt4all")
|
||||
set(CPACK_PACKAGE_EXECUTABLES chat;gpt4all)
|
||||
set(CPACK_CREATE_DESKTOP_LINKS "gpt4all")
|
||||
# TODO: Is there another intro message we want?
|
||||
set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/../README.md")
|
||||
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/../LICENSE.txt")
|
||||
# TODO: ask Adam if there's a better email to use here
|
||||
set(CPACK_PACKAGE_CONTACT "adam@nomic.ai")
|
||||
|
||||
# Why are we creating components here? There's only one... gpt4all is installed monolithically
|
||||
# unless we want to start vendoring models for the downloaded version?
|
||||
if(GPT4ALL_OFFLINE_INSTALLER)
|
||||
cpack_add_component(${COMPONENT_NAME_MAIN})
|
||||
else()
|
||||
cpack_add_component(${COMPONENT_NAME_MAIN} DOWNLOADED)
|
||||
endif()
|
||||
|
||||
# Setup platform specific CPack options
|
||||
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES Linux)
|
||||
find_program(LINUXDEPLOYQT linuxdeployqt HINTS "$ENV{HOME}/dev/linuxdeployqt/build/tools/linuxdeployqt" "$ENV{HOME}/project/linuxdeployqt/bin")
|
||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/deploy-qt-linux.cmake.in"
|
||||
"${CMAKE_BINARY_DIR}/cmake/deploy-qt-linux.cmake" @ONLY)
|
||||
set(CPACK_PRE_BUILD_SCRIPTS ${CMAKE_BINARY_DIR}/cmake/deploy-qt-linux.cmake)
|
||||
# Still using IFW on Linux
|
||||
set(CPACK_GENERATOR "IFW")
|
||||
set(CPACK_IFW_VERBOSE ON)
|
||||
set(CPACK_IFW_PACKAGE_NAME "GPT4All")
|
||||
set(CPACK_IFW_PACKAGE_TITLE "GPT4All Installer")
|
||||
set(CPACK_IFW_PACKAGE_PUBLISHER "Nomic, Inc.")
|
||||
set(CPACK_IFW_PRODUCT_URL "https://www.nomic.ai/gpt4all")
|
||||
set(CPACK_IFW_PACKAGE_WIZARD_STYLE "Aero")
|
||||
set(CPACK_IFW_PACKAGE_LOGO "${CMAKE_CURRENT_SOURCE_DIR}/icons/gpt4all-48.png")
|
||||
set(CPACK_IFW_PACKAGE_WINDOW_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icons/gpt4all-32.png")
|
||||
set(CPACK_IFW_PACKAGE_WIZARD_SHOW_PAGE_LIST OFF)
|
||||
set(CPACK_IFW_PACKAGE_CONTROL_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/cmake/installer_control.qs")
|
||||
set(CPACK_IFW_ROOT "~/Qt/Tools/QtInstallerFramework/4.6")
|
||||
set(CPACK_PACKAGE_FILE_NAME "${COMPONENT_NAME_MAIN}-installer-linux")
|
||||
set(CPACK_IFW_TARGET_DIRECTORY "@HomeDir@/${COMPONENT_NAME_MAIN}")
|
||||
elseif(${CMAKE_SYSTEM_NAME} MATCHES Windows)
|
||||
find_program(WINDEPLOYQT windeployqt HINTS ${_qt_bin_dir})
|
||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/deploy-qt-windows.cmake.in"
|
||||
"${CMAKE_BINARY_DIR}/cmake/deploy-qt-windows.cmake" @ONLY)
|
||||
set(CPACK_PRE_BUILD_SCRIPTS ${CMAKE_BINARY_DIR}/cmake/deploy-qt-windows.cmake)
|
||||
set(CPACK_PACKAGE_FILE_NAME "${COMPONENT_NAME_MAIN}-installer-win64")
|
||||
set(CPACK_GENERATOR "INNOSETUP")
|
||||
set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icons/gpt4all-48.bmp")
|
||||
# Todo - extend this to all languages we want to support
|
||||
set(GPT4ALL_DIST_LANGUAGES english)
|
||||
set(GPT4ALL_ICON_FILE "${CMAKE_CURRENT_SOURCE_DIR}/icons/gpt4all-48.ico")
|
||||
if (CMAKE_SIZEOF_VOID_P GREATER 4)
|
||||
set(GPT4ALL_INSTALLER_ARCH x64)
|
||||
else()
|
||||
set(GPT4ALL_INSTALLER_ARCH x86)
|
||||
endif()
|
||||
elseif(${CMAKE_SYSTEM_NAME} MATCHES Darwin)
|
||||
find_program(MACDEPLOYQT macdeployqt HINTS ${_qt_bin_dir})
|
||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/deploy-qt-mac.cmake.in"
|
||||
"${CMAKE_BINARY_DIR}/cmake/deploy-qt-mac.cmake" @ONLY)
|
||||
set(CPACK_PRE_BUILD_SCRIPTS ${CMAKE_BINARY_DIR}/cmake/deploy-qt-mac.cmake)
|
||||
set(CPACK_PACKAGE_FILE_NAME "${COMPONENT_NAME_MAIN}-installer-darwin")
|
||||
set(CPACK_GENERATOR "DragNDrop")
|
||||
set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/resources/gpt4all.icns")
|
||||
set(CPACK_PACKAGING_INSTALL_PREFIX "/gpt4all")
|
||||
set(CPACK_DMG_DISABLE_APPLICATIONS_SYMLINK OFF)
|
||||
# set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE ON)
|
||||
# set(CPACK_COMPONENTS_GROUPING ALL_IN_ONE)
|
||||
endif()
|
||||
|
||||
# Setup vars for CPack option config
|
||||
|
||||
# Configure CPack options file (this sets up generator specfic behavior)
|
||||
configure_file(${CMAKE_SOURCE_DIR}/cmake/gpt4allCPackOptions.cmake.in ${CMAKE_BINARY_DIR}/gpt4allCPackOptions.cmake)
|
||||
set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_BINARY_DIR}/gpt4allCPackOPtions.cmake)
|
||||
|
||||
# Setup Cpack
|
||||
include(CPack)
|
||||
if(LINUX)
|
||||
include(CPackIFW)
|
||||
cpack_ifw_configure_component(${COMPONENT_NAME_MAIN} ESSENTIAL FORCED_INSTALLATION)
|
||||
cpack_ifw_configure_component(${COMPONENT_NAME_MAIN} VERSION ${APP_VERSION})
|
||||
cpack_ifw_configure_component(${COMPONENT_NAME_MAIN} LICENSES "MIT LICENSE" ${CPACK_RESOURCE_FILE_LICENSE})
|
||||
cpack_ifw_configure_component(${COMPONENT_NAME_MAIN} SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/cmake/installer_component.qs")
|
||||
cpack_ifw_configure_component(${COMPONENT_NAME_MAIN} REPLACES "gpt4all-chat") #Was used in very earliest prototypes
|
||||
endif()
|
||||
@@ -5,16 +5,16 @@ set(GPT4ALL_SIGNING_ID "@MAC_SIGNING_IDENTITY@")
|
||||
if (GPT4ALL_SIGNING_ID)
|
||||
set(MAC_NOTARIZE -sign-for-notarization=${GPT4ALL_SIGNING_ID})
|
||||
endif()
|
||||
execute_process(COMMAND ${MACDEPLOYQT} ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data/bin/gpt4all.app -qmldir=${CMAKE_CURRENT_SOURCE_DIR} -verbose=2 ${MAC_NOTARIZE})
|
||||
file(GLOB MYLLAMALIBS ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data/lib/libllama*)
|
||||
file(GLOB MYLLMODELLIBS ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data/lib/libllmodel.*)
|
||||
execute_process(COMMAND ${MACDEPLOYQT} ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/${COMPONENT_NAME_MAIN}/bin/gpt4all.app -qmldir=${CMAKE_CURRENT_SOURCE_DIR} -verbose=2 ${MAC_NOTARIZE})
|
||||
file(GLOB MYLLAMALIBS ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/${COMPONENT_NAME_MAIN}/lib/libllama*)
|
||||
file(GLOB MYLLMODELLIBS ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/${COMPONENT_NAME_MAIN}/lib/libllmodel.*)
|
||||
file(COPY ${MYLLAMALIBS}
|
||||
DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data/bin/gpt4all.app/Contents/Frameworks)
|
||||
DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/${COMPONENT_NAME_MAIN}/bin/gpt4all.app/Contents/Frameworks)
|
||||
file(COPY ${MYLLMODELLIBS}
|
||||
DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data/bin/gpt4all.app/Contents/Frameworks)
|
||||
DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/${COMPONENT_NAME_MAIN}/bin/gpt4all.app/Contents/Frameworks)
|
||||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/icons/gpt4all-32.png"
|
||||
DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data)
|
||||
DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/${COMPONENT_NAME_MAIN})
|
||||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/icons/gpt4all-48.png"
|
||||
DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data)
|
||||
DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/${COMPONENT_NAME_MAIN})
|
||||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/resources/gpt4all.icns"
|
||||
DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data)
|
||||
DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/${COMPONENT_NAME_MAIN})
|
||||
|
||||
4
gpt4all-chat/cmake/generate_gpt4all_alias.cmake
Normal file
4
gpt4all-chat/cmake/generate_gpt4all_alias.cmake
Normal file
@@ -0,0 +1,4 @@
|
||||
execute_process(
|
||||
COMMAND ln -s bin/gpt4all.app gpt4all
|
||||
WORKING_DIRECTORY ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE
|
||||
)
|
||||
34
gpt4all-chat/cmake/gpt4allCPackOptions.cmake.in
Normal file
34
gpt4all-chat/cmake/gpt4allCPackOptions.cmake.in
Normal file
@@ -0,0 +1,34 @@
|
||||
|
||||
|
||||
# Configure Windows Installer Options
|
||||
|
||||
#Setup innosetup
|
||||
if(CPACK_GENERATOR )
|
||||
# Should be one of x86, x64, arm64, ia64
|
||||
set(CPACK_INNOSETUP_ARCHITECTURE @GPT4ALL_INSTALLER_ARCH@)
|
||||
|
||||
# TODO (john): ask adam about this
|
||||
set(CPACK_INNOSETUP_INSTALL_ROOT {%USERPROFILE})
|
||||
set(CPACK_INNOSETUP_ALLOW_CUSTOM_DIRECTORY ON)
|
||||
set(CPACK_INNOSETUP_PROGRAM_MENU_FOLDER "gpt4all")
|
||||
# ask adam if we want to support all options gpt4all supports
|
||||
set(CPACK_INNOSETUP_LANGUAGES @GPT4ALL_DIST_LANGUAGES@)
|
||||
set(CPACK_INNOSETUP_IGNORE_LICENSE_PAGE OFF)
|
||||
set(CPACK_INNOSETUP_USE_MODERN_WIZARD ON)
|
||||
set(CPACK_INNOSETUP_ICON_FILE @GPT4ALL_ICON_FILE@)
|
||||
set(CPACK_INNOSETUP_CREATE_UNINSTALL_LINK ON)
|
||||
set(CPACK_INNOSETUP_RUN_EXECUTABLES gpt4all)
|
||||
set(CPACK_INNOSETUP_VERIFY_DOWNLOADS ON)
|
||||
endif()
|
||||
|
||||
# Configure MacOs installer Options
|
||||
|
||||
# Setup DragNDrop (preferred)
|
||||
if(CPACK_GENERATOR MATCHES "DragNDrop")
|
||||
set(CPACK_DMG_FORMAT "UDBZ")
|
||||
set(VERSION "${CPACK_PACKAGE_VERSION}")
|
||||
# TODO: uncomment the line below when we have an image
|
||||
# maybe we want an applescript to mange ths instead?
|
||||
# set(CPACK_DMG_BACKGROUND_IMAGE @CMAKE_SOURCE_DIR@/icons/<need background image>)
|
||||
endif()
|
||||
|
||||
Submodule gpt4all-chat/deps/usearch updated: 1f0618a86f...9e59f10366
11
gpt4all-chat/dev-requirements.txt
Normal file
11
gpt4all-chat/dev-requirements.txt
Normal file
@@ -0,0 +1,11 @@
|
||||
-r test-requirements.txt
|
||||
|
||||
# dev tools
|
||||
flake8~=7.1
|
||||
mypy~=1.12
|
||||
pytype>=2024.10.11
|
||||
wemake-python-styleguide~=0.19.2
|
||||
|
||||
# type stubs and other optional modules
|
||||
types-requests~=2.32
|
||||
urllib3[socks]
|
||||
BIN
gpt4all-chat/icons/gpt4all-48.bmp
Normal file
BIN
gpt4all-chat/icons/gpt4all-48.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.1 KiB |
BIN
gpt4all-chat/icons/gpt4all-48.ico
Normal file
BIN
gpt4all-chat/icons/gpt4all-48.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.4 KiB |
@@ -2,7 +2,9 @@
|
||||
|
||||
GPT4All v3.4.1 was released on October 11th, and fixes several issues with LocalDocs from the previous release.
|
||||
|
||||
* **IMPORTANT NOTE:** If you are coming from v3.4.0, be sure to "Rebuild" your collections at least once after updating!
|
||||
GPT4All v3.4.2 was released on October 16th, and fixes more issues with LocalDocs.
|
||||
|
||||
**IMPORTANT NOTE:** If you are coming from v3.4.0, be sure to "Rebuild" your collections at least once after updating!
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -223,5 +223,10 @@
|
||||
"version": "3.4.1",
|
||||
"notes": "* **LocalDocs Fixes:** Several issues with LocalDocs in v3.4.0 have been fixed, including missing words and very slow indexing.\n* **Syntax Highlighting:** Go code is now highlighted with the correct colors.\n* **Cache Fixes:** The model list cache is now stored with a version number, and in a more appropriate directory.\n* **Translation Updates:** The Italian translation has been improved.\n",
|
||||
"contributors": "* Jared Van Bortel (Nomic AI)\n* Adam Treat (Nomic AI)\n* John Parent (Kitware)\n* Riccardo Giovanetti (`@Harvester62`)"
|
||||
},
|
||||
{
|
||||
"version": "3.4.2",
|
||||
"notes": "* **LocalDocs Fixes:** Several issues with LocalDocs, some of which were introduced in v3.4.0, have been fixed.\n * Fixed the possible use of references from unselected collections.\n * Fixed unnecessary reindexing of files with uppercase extensions.\n * Fixed hybrid search failure due to inconsistent database state.\n * Fully fixed the blank Embeddings Device selection in LocalDocs settings.\n * Fixed LocalDocs indexing of large PDFs making very slow progress or even stalling.\n",
|
||||
"contributors": "* Adam Treat (Nomic AI)\n* Jared Van Bortel (Nomic AI)"
|
||||
}
|
||||
]
|
||||
|
||||
29
gpt4all-chat/pyproject.toml
Normal file
29
gpt4all-chat/pyproject.toml
Normal file
@@ -0,0 +1,29 @@
|
||||
[tool.pytest.ini_options]
|
||||
addopts = ['--import-mode=importlib']
|
||||
|
||||
[tool.mypy]
|
||||
files = 'tests/python'
|
||||
pretty = true
|
||||
strict = true
|
||||
warn_unused_ignores = false
|
||||
|
||||
[tool.pytype]
|
||||
inputs = ['tests/python']
|
||||
jobs = 'auto'
|
||||
bind_decorated_methods = true
|
||||
none_is_not_bool = true
|
||||
overriding_renamed_parameter_count_checks = true
|
||||
strict_none_binding = true
|
||||
precise_return = true
|
||||
# protocols:
|
||||
# - https://github.com/google/pytype/issues/1423
|
||||
# - https://github.com/google/pytype/issues/1424
|
||||
strict_import = true
|
||||
strict_parameter_checks = true
|
||||
strict_primitive_comparisons = true
|
||||
# strict_undefined_checks: too many false positives
|
||||
|
||||
[tool.isort]
|
||||
src_paths = ['tests/python']
|
||||
line_length = 120
|
||||
combine_as_imports = true
|
||||
@@ -2,6 +2,7 @@ import QtCore
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Controls.Basic
|
||||
import QtQuick.Controls.impl
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Dialogs
|
||||
import Qt.labs.folderlistmodel
|
||||
|
||||
@@ -31,7 +31,7 @@ Chat::Chat(QObject *parent)
|
||||
connectLLM();
|
||||
}
|
||||
|
||||
Chat::Chat(bool isServer, QObject *parent)
|
||||
Chat::Chat(server_tag_t, QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_id(Network::globalInstance()->generateUniqueId())
|
||||
, m_name(tr("Server Chat"))
|
||||
|
||||
@@ -45,6 +45,10 @@ class Chat : public QObject
|
||||
QML_UNCREATABLE("Only creatable from c++!")
|
||||
|
||||
public:
|
||||
// tag for constructing a server chat
|
||||
struct server_tag_t { explicit server_tag_t() = default; };
|
||||
static inline constexpr server_tag_t server_tag = server_tag_t();
|
||||
|
||||
enum ResponseState {
|
||||
ResponseStopped,
|
||||
LocalDocsRetrieval,
|
||||
@@ -56,7 +60,7 @@ public:
|
||||
Q_ENUM(ResponseState)
|
||||
|
||||
explicit Chat(QObject *parent = nullptr);
|
||||
explicit Chat(bool isServer, QObject *parent = nullptr);
|
||||
explicit Chat(server_tag_t, QObject *parent = nullptr);
|
||||
virtual ~Chat();
|
||||
void destroy() { m_llmodel->destroy(); }
|
||||
void connectLLM();
|
||||
|
||||
@@ -98,9 +98,8 @@ protected:
|
||||
// them as they are only called from the default implementation of 'prompt' which we override and
|
||||
// completely replace
|
||||
|
||||
std::vector<Token> tokenize(PromptContext &ctx, std::string_view str, bool special) override
|
||||
std::vector<Token> tokenize(std::string_view str, bool special) override
|
||||
{
|
||||
(void)ctx;
|
||||
(void)str;
|
||||
(void)special;
|
||||
throw std::logic_error("not implemented");
|
||||
|
||||
@@ -147,7 +147,7 @@ public:
|
||||
if (m_serverChat)
|
||||
return;
|
||||
|
||||
m_serverChat = new Chat(true /*isServer*/, this);
|
||||
m_serverChat = new Chat(Chat::server_tag, this);
|
||||
beginInsertRows(QModelIndex(), m_chats.size(), m_chats.size());
|
||||
m_chats.append(m_serverChat);
|
||||
endInsertRows();
|
||||
|
||||
@@ -179,6 +179,8 @@ void ChatLLM::handleForceMetalChanged(bool forceMetal)
|
||||
reloadModel();
|
||||
m_reloadingToChangeVariant = false;
|
||||
}
|
||||
#else
|
||||
Q_UNUSED(forceMetal);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -196,7 +198,7 @@ bool ChatLLM::loadDefaultModel()
|
||||
{
|
||||
ModelInfo defaultModel = ModelList::globalInstance()->defaultModelInfo();
|
||||
if (defaultModel.filename().isEmpty()) {
|
||||
emit modelLoadingError(u"Could not find any model to load"_qs);
|
||||
emit modelLoadingError(u"Could not find any model to load"_s);
|
||||
return false;
|
||||
}
|
||||
return loadModel(defaultModel);
|
||||
|
||||
@@ -51,7 +51,7 @@ enum class LLModelTypeV1 { // since chat version 6 (v2.5.0)
|
||||
NONE = -1, // no state
|
||||
};
|
||||
|
||||
static LLModelTypeV1 parseLLModelTypeV1(int type)
|
||||
inline LLModelTypeV1 parseLLModelTypeV1(int type)
|
||||
{
|
||||
switch (LLModelTypeV1(type)) {
|
||||
case LLModelTypeV1::GPTJ:
|
||||
@@ -68,7 +68,7 @@ static LLModelTypeV1 parseLLModelTypeV1(int type)
|
||||
}
|
||||
}
|
||||
|
||||
static LLModelTypeV1 parseLLModelTypeV0(int v0)
|
||||
inline LLModelTypeV1 parseLLModelTypeV0(int v0)
|
||||
{
|
||||
switch (LLModelTypeV0(v0)) {
|
||||
case LLModelTypeV0::MPT: return LLModelTypeV1::MPT;
|
||||
|
||||
@@ -967,8 +967,6 @@ void ChatViewTextProcessor::handleCodeBlocks()
|
||||
cursor.setPosition(matchesCode[index].capturedEnd(), QTextCursor::KeepAnchor);
|
||||
cursor.removeSelectedText();
|
||||
|
||||
int startPos = cursor.position();
|
||||
|
||||
QTextFrameFormat frameFormat = frameFormatBase;
|
||||
QString capturedText = matchesCode[index].captured(1);
|
||||
QString codeLanguage;
|
||||
@@ -1004,7 +1002,7 @@ void ChatViewTextProcessor::handleCodeBlocks()
|
||||
QTextFrame *mainFrame = cursor.currentFrame();
|
||||
cursor.setCharFormat(textFormat);
|
||||
|
||||
QTextFrame *frame = cursor.insertFrame(frameFormat);
|
||||
cursor.insertFrame(frameFormat);
|
||||
QTextTable *table = cursor.insertTable(codeLanguage.isEmpty() ? 1 : 2, 1, tableFormat);
|
||||
|
||||
if (!codeLanguage.isEmpty()) {
|
||||
@@ -1016,7 +1014,6 @@ void ChatViewTextProcessor::handleCodeBlocks()
|
||||
headerCursor.insertText(codeLanguage);
|
||||
QTextTableCell copy = headerTable->cellAt(0, 1);
|
||||
QTextCursor copyCursor = copy.firstCursorPosition();
|
||||
int startPos = copyCursor.position();
|
||||
CodeCopy newCopy;
|
||||
newCopy.text = lines.join("\n");
|
||||
newCopy.startPos = copyCursor.position();
|
||||
|
||||
@@ -290,7 +290,7 @@ static bool selectCountChunks(QSqlQuery &q, int folder_id, int &count)
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool selectChunk(QSqlQuery &q, const QList<int> &chunk_ids, int retrievalSize)
|
||||
static bool selectChunk(QSqlQuery &q, const QList<int> &chunk_ids)
|
||||
{
|
||||
QString chunk_ids_str = QString::number(chunk_ids[0]);
|
||||
for (size_t i = 1; i < chunk_ids.size(); ++i)
|
||||
@@ -307,10 +307,6 @@ static const QString INSERT_COLLECTION_SQL = uR"(
|
||||
returning id;
|
||||
)"_s;
|
||||
|
||||
static const QString DELETE_COLLECTION_SQL = uR"(
|
||||
delete from collections where name = ? and folder_id = ?;
|
||||
)"_s;
|
||||
|
||||
static const QString SELECT_FOLDERS_FROM_COLLECTIONS_SQL = uR"(
|
||||
select f.id, f.path
|
||||
from collections c
|
||||
@@ -379,15 +375,6 @@ static bool addCollection(QSqlQuery &q, const QString &collection_name, const QD
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool removeCollection(QSqlQuery &q, const QString &collection_name, int folder_id)
|
||||
{
|
||||
if (!q.prepare(DELETE_COLLECTION_SQL))
|
||||
return false;
|
||||
q.addBindValue(collection_name);
|
||||
q.addBindValue(folder_id);
|
||||
return q.exec();
|
||||
}
|
||||
|
||||
static bool selectFoldersFromCollection(QSqlQuery &q, const QString &collection_name, QList<QPair<int, QString>> *folders)
|
||||
{
|
||||
if (!q.prepare(SELECT_FOLDERS_FROM_COLLECTIONS_SQL))
|
||||
@@ -520,10 +507,6 @@ static const QString GET_FOLDER_EMBEDDING_MODEL_SQL = uR"(
|
||||
where ci.folder_id = ?;
|
||||
)"_s;
|
||||
|
||||
static const QString SELECT_ALL_FOLDERPATHS_SQL = uR"(
|
||||
select path from folders;
|
||||
)"_s;
|
||||
|
||||
static const QString FOLDER_REMOVE_ALL_DOCS_SQL[] = {
|
||||
uR"(
|
||||
delete from embeddings
|
||||
@@ -598,17 +581,6 @@ static bool sqlGetFolderEmbeddingModel(QSqlQuery &q, int id, QString &embedding_
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool selectAllFolderPaths(QSqlQuery &q, QList<QString> *folder_paths)
|
||||
{
|
||||
if (!q.prepare(SELECT_ALL_FOLDERPATHS_SQL))
|
||||
return false;
|
||||
if (!q.exec())
|
||||
return false;
|
||||
while (q.next())
|
||||
folder_paths->append(q.value(0).toString());
|
||||
return true;
|
||||
}
|
||||
|
||||
static const QString INSERT_COLLECTION_ITEM_SQL = uR"(
|
||||
insert into collection_items(collection_id, folder_id)
|
||||
values(?, ?)
|
||||
@@ -2499,7 +2471,7 @@ void Database::retrieveFromDB(const QList<QString> &collections, const QString &
|
||||
return;
|
||||
|
||||
QSqlQuery q(m_db);
|
||||
if (!selectChunk(q, searchResults, retrievalSize)) {
|
||||
if (!selectChunk(q, searchResults)) {
|
||||
qDebug() << "ERROR: selecting chunks:" << q.lastError();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -58,11 +58,6 @@ Download::Download()
|
||||
m_startTime = QDateTime::currentDateTime();
|
||||
}
|
||||
|
||||
static bool operator==(const ReleaseInfo& lhs, const ReleaseInfo& rhs)
|
||||
{
|
||||
return lhs.version == rhs.version;
|
||||
}
|
||||
|
||||
std::strong_ordering Download::compareAppVersions(const QString &a, const QString &b)
|
||||
{
|
||||
static QRegularExpression versionRegex(R"(^(\d+(?:\.\d+){0,2})(-.+)?$)");
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
|
||||
#ifdef Q_OS_WINDOWS
|
||||
# include <windows.h>
|
||||
#else
|
||||
# include <signal.h>
|
||||
#endif
|
||||
|
||||
using namespace Qt::Literals::StringLiterals;
|
||||
@@ -130,6 +132,17 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef Q_OS_WINDOWS
|
||||
// handle signals gracefully
|
||||
struct sigaction sa;
|
||||
sa.sa_handler = [](int s) { QCoreApplication::exit(s == SIGINT ? 0 : 1); };
|
||||
sa.sa_flags = SA_RESETHAND;
|
||||
sigemptyset(&sa.sa_mask);
|
||||
sigaction(SIGINT, &sa, nullptr);
|
||||
sigaction(SIGTERM, &sa, nullptr);
|
||||
sigaction(SIGHUP, &sa, nullptr);
|
||||
#endif
|
||||
|
||||
int res = app.exec();
|
||||
|
||||
// Make sure ChatLLM threads are joined before global destructors run.
|
||||
|
||||
@@ -37,6 +37,10 @@
|
||||
#include <unordered_map>
|
||||
#include <utility>
|
||||
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
|
||||
# include <QTcpServer>
|
||||
#endif
|
||||
|
||||
using namespace std::string_literals;
|
||||
using namespace Qt::Literals::StringLiterals;
|
||||
|
||||
@@ -435,7 +439,6 @@ T &parseRequest(T &request, QJsonObject &&obj)
|
||||
Server::Server(Chat *chat)
|
||||
: ChatLLM(chat, true /*isServer*/)
|
||||
, m_chat(chat)
|
||||
, m_server(nullptr)
|
||||
{
|
||||
connect(this, &Server::threadStarted, this, &Server::start);
|
||||
connect(this, &Server::databaseResultsChanged, this, &Server::handleDatabaseResultsChanged);
|
||||
@@ -457,10 +460,23 @@ static QJsonObject requestFromJson(const QByteArray &request)
|
||||
void Server::start()
|
||||
{
|
||||
m_server = std::make_unique<QHttpServer>(this);
|
||||
if (!m_server->listen(QHostAddress::LocalHost, MySettings::globalInstance()->networkPort())) {
|
||||
qWarning() << "ERROR: Unable to start the server";
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
|
||||
auto *tcpServer = new QTcpServer(m_server.get());
|
||||
#else
|
||||
auto *tcpServer = m_server.get();
|
||||
#endif
|
||||
|
||||
auto port = MySettings::globalInstance()->networkPort();
|
||||
if (!tcpServer->listen(QHostAddress::LocalHost, port)) {
|
||||
qWarning() << "Server ERROR: Failed to listen on port" << port;
|
||||
return;
|
||||
}
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
|
||||
if (!m_server->bind(tcpServer)) {
|
||||
qWarning() << "Server ERROR: Failed to HTTP server to socket" << port;
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
m_server->route("/v1/models", QHttpServerRequest::Method::Get,
|
||||
[](const QHttpServerRequest &) {
|
||||
@@ -600,10 +616,19 @@ void Server::start()
|
||||
}
|
||||
);
|
||||
|
||||
m_server->afterRequest([] (QHttpServerResponse &&resp) {
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
|
||||
m_server->addAfterRequestHandler(this, [](const QHttpServerRequest &req, QHttpServerResponse &resp) {
|
||||
Q_UNUSED(req);
|
||||
auto headers = resp.headers();
|
||||
headers.append("Access-Control-Allow-Origin"_L1, "*"_L1);
|
||||
resp.setHeaders(std::move(headers));
|
||||
});
|
||||
#else
|
||||
m_server->afterRequest([](QHttpServerResponse &&resp) {
|
||||
resp.addHeader("Access-Control-Allow-Origin", "*");
|
||||
return std::move(resp);
|
||||
});
|
||||
#endif
|
||||
|
||||
connect(this, &Server::requestServerNewPromptResponsePair, m_chat,
|
||||
&Chat::serverNewPromptResponsePair, Qt::BlockingQueuedConnection);
|
||||
|
||||
2
gpt4all-chat/test-requirements.txt
Normal file
2
gpt4all-chat/test-requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
pytest~=8.3
|
||||
requests~=2.32
|
||||
30
gpt4all-chat/tests/CMakeLists.txt
Normal file
30
gpt4all-chat/tests/CMakeLists.txt
Normal file
@@ -0,0 +1,30 @@
|
||||
include(FetchContent)
|
||||
|
||||
find_package(Python3 3.12 REQUIRED COMPONENTS Interpreter)
|
||||
|
||||
# Google test download and setup
|
||||
FetchContent_Declare(
|
||||
googletest
|
||||
URL https://github.com/google/googletest/archive/refs/tags/v1.15.2.zip
|
||||
)
|
||||
FetchContent_MakeAvailable(googletest)
|
||||
|
||||
configure_file(python/config.py.in "${CMAKE_CURRENT_SOURCE_DIR}/python/config.py")
|
||||
|
||||
add_test(NAME ChatPythonTests
|
||||
COMMAND ${Python3_EXECUTABLE} -m pytest --color=yes "${CMAKE_CURRENT_SOURCE_DIR}/python"
|
||||
)
|
||||
set_tests_properties(ChatPythonTests PROPERTIES
|
||||
ENVIRONMENT "CHAT_EXECUTABLE=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/chat"
|
||||
TIMEOUT 60
|
||||
)
|
||||
|
||||
add_executable(gpt4all_tests
|
||||
cpp/test_main.cpp
|
||||
cpp/basic_test.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(gpt4all_tests PRIVATE gtest gtest_main)
|
||||
|
||||
include(GoogleTest)
|
||||
gtest_discover_tests(gpt4all_tests)
|
||||
5
gpt4all-chat/tests/cpp/basic_test.cpp
Normal file
5
gpt4all-chat/tests/cpp/basic_test.cpp
Normal file
@@ -0,0 +1,5 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
TEST(BasicTest, TestInitialization) {
|
||||
EXPECT_TRUE(true);
|
||||
}
|
||||
6
gpt4all-chat/tests/cpp/test_main.cpp
Normal file
6
gpt4all-chat/tests/cpp/test_main.cpp
Normal file
@@ -0,0 +1,6 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
||||
0
gpt4all-chat/tests/python/__init__.py
Normal file
0
gpt4all-chat/tests/python/__init__.py
Normal file
1
gpt4all-chat/tests/python/config.py.in
Normal file
1
gpt4all-chat/tests/python/config.py.in
Normal file
@@ -0,0 +1 @@
|
||||
APP_VERSION = '@APP_VERSION@'
|
||||
87
gpt4all-chat/tests/python/test_server_api.py
Normal file
87
gpt4all-chat/tests/python/test_server_api.py
Normal file
@@ -0,0 +1,87 @@
|
||||
import os
|
||||
import signal
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import textwrap
|
||||
from pathlib import Path
|
||||
from subprocess import CalledProcessError
|
||||
from typing import Any, Iterator
|
||||
|
||||
import pytest
|
||||
import requests
|
||||
from urllib3 import Retry
|
||||
|
||||
from . import config
|
||||
|
||||
|
||||
class Requestor:
|
||||
def __init__(self) -> None:
|
||||
self.session = requests.Session()
|
||||
self.http_adapter = self.session.adapters['http://']
|
||||
|
||||
def get(self, path: str, *, wait: bool = False) -> Any:
|
||||
return self._request('GET', path, wait)
|
||||
|
||||
def _request(self, method: str, path: str, wait: bool) -> Any:
|
||||
if wait:
|
||||
retry = Retry(total=None, connect=10, read=False, status=0, other=0, backoff_factor=.01)
|
||||
else:
|
||||
retry = Retry(total=False)
|
||||
self.http_adapter.max_retries = retry # type: ignore[attr-defined]
|
||||
|
||||
resp = self.session.request(method, f'http://localhost:4891/v1/{path}')
|
||||
resp.raise_for_status()
|
||||
return resp.json()
|
||||
|
||||
|
||||
request = Requestor()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def chat_server_config() -> Iterator[dict[str, str]]:
|
||||
if os.name != 'posix' or sys.platform == 'darwin':
|
||||
pytest.skip('Need non-Apple Unix to use alternate config path')
|
||||
|
||||
with tempfile.TemporaryDirectory(prefix='gpt4all-test') as td:
|
||||
tmpdir = Path(td)
|
||||
xdg_confdir = tmpdir / 'config'
|
||||
app_confdir = xdg_confdir / 'nomic.ai'
|
||||
app_confdir.mkdir(parents=True)
|
||||
with open(app_confdir / 'GPT4All.ini', 'w') as conf:
|
||||
conf.write(textwrap.dedent(f"""\
|
||||
[General]
|
||||
serverChat=true
|
||||
|
||||
[download]
|
||||
lastVersionStarted={config.APP_VERSION}
|
||||
|
||||
[network]
|
||||
isActive=false
|
||||
usageStatsActive=false
|
||||
"""))
|
||||
yield dict(
|
||||
os.environ,
|
||||
XDG_CACHE_HOME=str(tmpdir / 'cache'),
|
||||
XDG_DATA_HOME=str(tmpdir / 'share'),
|
||||
XDG_CONFIG_HOME=str(xdg_confdir),
|
||||
APPIMAGE=str(tmpdir), # hack to bypass SingleApplication
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def chat_server(chat_server_config: dict[str, str]) -> Iterator[None]:
|
||||
chat_executable = Path(os.environ['CHAT_EXECUTABLE']).absolute()
|
||||
with subprocess.Popen(chat_executable, env=chat_server_config) as process:
|
||||
try:
|
||||
yield
|
||||
except:
|
||||
process.kill()
|
||||
raise
|
||||
process.send_signal(signal.SIGINT)
|
||||
if retcode := process.wait():
|
||||
raise CalledProcessError(retcode, process.args)
|
||||
|
||||
|
||||
def test_list_models_empty(chat_server: None) -> None:
|
||||
assert request.get('models', wait=True) == {'object': 'list', 'data': []}
|
||||
Reference in New Issue
Block a user