Skip to content

Conversation

@simonw
Copy link
Contributor

@simonw simonw commented Feb 13, 2024

Add project links and the README file to the Python package that gets published to PyPI.

Refs:

Signed-off-by: Simon Willison <swillison@gmail.com>
@simonw
Copy link
Contributor Author

simonw commented Feb 13, 2024

I manually tested like this:

cd gpt4all/gpt4all-bindings/python 
python -m build

This gave me a dist directory containing:

gpt4all-2.2.1-py3-none-any.whl
gpt4all-2.2.1.tar.gz

In a separate virtual environment I ran:

pip install gpt4all-2.2.1-py3-none-any.whl

I navigated in that virtual environment to lib/python3.10/site-packages/gpt4all-2.2.1.dist-info and had a look in METADATA which contained this:

Metadata-Version: 2.1
Name: gpt4all
Version: 2.2.1
Summary: Python bindings for GPT4All
Home-page: https://gpt4all.io/
Author: Nomic and the Open Source Community
Author-email: support@nomic.ai
Project-URL: Documentation, https://docs.gpt4all.io/gpt4all_python.html
Project-URL: Source code, https://github.com/nomic-ai/gpt4all/tree/main/gpt4all-bindings/python
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE.txt
Requires-Dist: requests
Requires-Dist: tqdm
Provides-Extra: dev
Requires-Dist: pytest ; extra == 'dev'
Requires-Dist: twine ; extra == 'dev'
Requires-Dist: wheel ; extra == 'dev'
Requires-Dist: setuptools ; extra == 'dev'
Requires-Dist: mkdocs-material ; extra == 'dev'
Requires-Dist: mkautodoc ; extra == 'dev'
Requires-Dist: mkdocstrings[python] ; extra == 'dev'
Requires-Dist: mkdocs-jupyter ; extra == 'dev'
Requires-Dist: black ; extra == 'dev'
Requires-Dist: isort ; extra == 'dev'

# Python GPT4All

This package contains a set of Python bindings around the `llmodel` C-API.

Package on PyPI: https://pypi.org/project/gpt4all/

## Documentation
https://docs.gpt4all.io/gpt4all_python.html

## Installation

The easiest way to install the Python bindings for GPT4All is to use pip:

```
pip install gpt4all
```

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.

### Prerequisites

On Windows and Linux, building GPT4All requires the complete Vulkan SDK. You may download it from here: https://vulkan.lunarg.com/sdk/home

macOS users do not need Vulkan, as GPT4All will use Metal instead.

### Building the python bindings

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.

If you are using Windows and have Visual Studio installed:
```
cmake -B build
cmake --build build --parallel --config RelWithDebInfo
```

For all other platforms:
```
cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build --parallel
```

`RelWithDebInfo` is a good default, but you can also use `Release` or `Debug` depending on the situation.

2. Install the Python package:
```
cd ../../gpt4all-bindings/python
pip install -e .
```

## Usage

Test it out! In a Python script or console:

```python
from gpt4all import GPT4All
model = GPT4All("orca-mini-3b-gguf2-q4_0.gguf")
output = model.generate("The capital of France is ", max_tokens=3)
print(output)
```


GPU Usage
```python
from gpt4all import GPT4All
model = GPT4All("orca-mini-3b-gguf2-q4_0.gguf", device='gpu') # device='amd', device='intel'
output = model.generate("The capital of France is ", max_tokens=3)
print(output)
```

## 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.

simonw and others added 3 commits February 13, 2024 14:02
Co-authored-by: Jared Van Bortel <cebtenzzre@gmail.com>
Signed-off-by: Simon Willison <swillison@gmail.com>
Signed-off-by: Simon Willison <swillison@gmail.com>
Signed-off-by: Jared Van Bortel <jared@nomic.ai>
@cebtenzzre cebtenzzre merged commit f2024a1 into nomic-ai:main Feb 13, 2024
@simonw simonw deleted the pypi branch February 14, 2024 15:31
@simonw
Copy link
Contributor Author

simonw commented Feb 14, 2024

Screenshot of the new https://pypi.org/project/gpt4all/ now that this has shipped:

CleanShot 2024-02-14 at 07 32 54@2x

dpsalvatierra pushed a commit to dpsalvatierra/gpt4all that referenced this pull request Feb 16, 2024
Signed-off-by: Simon Willison <swillison@gmail.com>
Signed-off-by: Jared Van Bortel <jared@nomic.ai>
Co-authored-by: Jared Van Bortel <jared@nomic.ai>
johannesploetner pushed a commit to johannesploetner/gpt4all that referenced this pull request Feb 18, 2024
Signed-off-by: Simon Willison <swillison@gmail.com>
Signed-off-by: Jared Van Bortel <jared@nomic.ai>
Co-authored-by: Jared Van Bortel <jared@nomic.ai>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants