2023-08-25 08:26:05 +02:00
## gguf
This is a Python package for writing binary files in the [GGUF ](https://github.com/ggerganov/ggml/pull/302 )
(GGML Universal File) format.
2024-07-05 06:53:33 +02:00
See [convert_hf_to_gguf.py ](https://github.com/ggerganov/llama.cpp/blob/master/convert_hf_to_gguf.py )
2023-08-25 08:26:05 +02:00
as an example for its usage.
## Installation
```sh
pip install gguf
```
2023-11-11 06:04:50 +01:00
## API Examples/Simple Tools
[examples/writer.py ](https://github.com/ggerganov/llama.cpp/blob/master/gguf-py/examples/writer.py ) — Generates `example.gguf` in the current directory to demonstrate generating a GGUF file. Note that this file cannot be used as a model.
2024-07-05 06:53:33 +02:00
[scripts/gguf_dump.py ](https://github.com/ggerganov/llama.cpp/blob/master/gguf-py/scripts/gguf_dump.py ) — Dumps a GGUF file's metadata to the console.
2023-11-11 06:04:50 +01:00
2024-07-05 06:53:33 +02:00
[scripts/gguf_set_metadata.py ](https://github.com/ggerganov/llama.cpp/blob/master/gguf-py/scripts/gguf_set_metadata.py ) — Allows changing simple metadata values in a GGUF file by key.
2023-11-11 06:04:50 +01:00
2024-07-05 06:53:33 +02:00
[scripts/gguf_convert_endian.py ](https://github.com/ggerganov/llama.cpp/blob/master/gguf-py/scripts/gguf_convert_endian.py ) — Allows converting the endianness of GGUF files.
2023-11-11 06:04:50 +01:00
2024-07-05 06:53:33 +02:00
[scripts/gguf_new_metadata.py ](https://github.com/ggerganov/llama.cpp/blob/master/gguf-py/scripts/gguf_new_metadata.py ) — Copies a GGUF file with added/modified/removed metadata values.
2024-04-18 13:49:01 +02:00
2023-08-25 08:26:05 +02:00
## Development
Maintainers who participate in development of this package are advised to install it in editable mode:
```sh
cd /path/to/llama.cpp/gguf-py
pip install --editable .
```
**Note**: This may require to upgrade your Pip installation, with a message saying that editable installation currently requires `setup.py` .
In this case, upgrade Pip to the latest:
```sh
pip install --upgrade pip
```
2023-08-30 11:47:40 +02:00
## Automatic publishing with CI
There's a GitHub workflow to make a release automatically upon creation of tags in a specified format.
1. Bump the version in `pyproject.toml` .
2. Create a tag named `gguf-vx.x.x` where `x.x.x` is the semantic version number.
```sh
git tag -a gguf-v1.0.0 -m "Version 1.0 release"
```
3. Push the tags.
```sh
git push origin --tags
```
## Manual publishing
If you want to publish the package manually for any reason, you need to have `twine` and `build` installed:
2023-08-25 08:26:05 +02:00
```sh
pip install build twine
```
2023-12-12 10:53:36 +01:00
Then, follow these steps to release a new version:
2023-08-25 08:26:05 +02:00
2023-08-30 11:47:40 +02:00
1. Bump the version in `pyproject.toml` .
2023-08-25 08:26:05 +02:00
2. Build the package:
```sh
python -m build
```
3. Upload the generated distribution archives:
```sh
python -m twine upload dist/*
```
2024-07-18 12:40:15 +02:00
## Run Unit Tests
From root of this repository you can run this command to run all the unit tests
```bash
python -m unittest discover ./gguf-py -v
```
2023-08-25 08:26:05 +02:00
## TODO
- [ ] Include conversion scripts as command line entry points in this package.