2023-05-10 13:38:32 -04:00
# Python GPT4All
2023-05-11 11:02:44 -04:00
This package contains a set of Python bindings around the `llmodel` C-API.
2023-05-10 13:38:32 -04:00
2023-06-08 13:43:31 -04:00
Package on PyPI: https://pypi.org/project/gpt4all/
2023-05-12 10:30:03 -04:00
## Documentation
2023-06-08 13:43:31 -04:00
https://docs.gpt4all.io/gpt4all_python.html
2023-05-12 10:30:03 -04:00
2023-05-11 14:29:17 -04:00
## Installation
2024-01-21 19:53:55 -05:00
The easiest way to install the Python bindings for GPT4All is to use pip:
2023-05-11 14:29:17 -04:00
```
pip install gpt4all
```
2023-05-10 13:38:32 -04:00
2024-01-21 19:53:55 -05:00
This will download the latest version of the `gpt4all` package from PyPI.
## Local Build
As an alternative to downloading via pip, you may build the Python bindings from source.
2023-05-10 13:38:32 -04:00
2023-10-18 12:09:52 -04:00
### Prerequisites
2024-05-15 15:27:50 -04:00
You will need a compiler. On Windows, you should install Visual Studio with the C++ Development components. On macOS, you will need the full version of Xcode— Xcode Command Line Tools lacks certain required tools. On Linux, you will need a GCC or Clang toolchain with C++ support.
2023-10-18 12:09:52 -04:00
2024-05-15 15:27:50 -04:00
On Windows and Linux, building GPT4All with full GPU support requires the [Vulkan SDK ](https://vulkan.lunarg.com/sdk/home ) and the latest [CUDA Toolkit ](https://developer.nvidia.com/cuda-downloads ).
2023-10-18 12:09:52 -04:00
### Building the python bindings
2024-01-21 19:53:55 -05:00
1. Clone GPT4All and change directory:
```
git clone --recurse-submodules https://github.com/nomic-ai/gpt4all.git
cd gpt4all/gpt4all-backend
```
2. Build the backend.
2023-05-16 15:29:27 -04:00
2024-01-21 19:53:55 -05:00
If you are using Windows and have Visual Studio installed:
```
cmake -B build
cmake --build build --parallel --config RelWithDebInfo
```
2023-05-10 13:38:32 -04:00
2024-01-21 19:53:55 -05:00
For all other platforms:
2023-05-10 13:38:32 -04:00
```
2024-01-21 19:53:55 -05:00
cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build --parallel
2023-05-10 13:38:32 -04:00
```
2024-01-21 19:53:55 -05:00
`RelWithDebInfo` is a good default, but you can also use `Release` or `Debug` depending on the situation.
2023-05-10 13:38:32 -04:00
2024-01-21 19:53:55 -05:00
2. Install the Python package:
2023-05-10 13:38:32 -04:00
```
2024-05-31 17:20:41 -04:00
cd ../gpt4all-bindings/python
2024-01-21 19:53:55 -05:00
pip install -e .
2023-05-10 13:38:32 -04:00
```
2023-06-09 04:13:35 -04:00
## Usage
Test it out! In a Python script or console:
2023-05-10 13:38:32 -04:00
```python
from gpt4all import GPT4All
2023-10-22 11:58:28 -04:00
model = GPT4All("orca-mini-3b-gguf2-q4_0.gguf")
2023-07-01 18:52:39 -04:00
output = model.generate("The capital of France is ", max_tokens=3)
2023-09-01 13:01:40 -04:00
print(output)
```
GPU Usage
```python
from gpt4all import GPT4All
2023-10-22 11:58:28 -04:00
model = GPT4All("orca-mini-3b-gguf2-q4_0.gguf", device='gpu') # device='amd', device='intel'
2023-09-01 13:01:40 -04:00
output = model.generate("The capital of France is ", max_tokens=3)
2023-07-01 18:52:39 -04:00
print(output)
2023-05-10 13:38:32 -04:00
```
2023-06-18 14:08:43 -04:00
## Troubleshooting a Local Build
- If you're on Windows and have compiled with a MinGW toolchain, you might run into an error like:
```
FileNotFoundError: Could not find module '< ... > \gpt4all-bindings\python\gpt4all\llmodel_DO_NOT_MODIFY\build\libllmodel.dll'
(or one of its dependencies). Try using the full path with constructor syntax.
```
The key phrase in this case is _"or one of its dependencies"_ . The Python interpreter you're using
probably doesn't see the MinGW runtime dependencies. At the moment, the following three are required:
`libgcc_s_seh-1.dll` , `libstdc++-6.dll` and `libwinpthread-1.dll` . You should copy them from MinGW
into a folder where Python will see them, preferably next to `libllmodel.dll` .
- Note regarding the Microsoft toolchain: Compiling with MSVC is possible, but not the official way to
go about it at the moment. MSVC doesn't produce DLLs with a `lib` prefix, which the bindings expect.
You'd have to amend that yourself.