llm-cluster
LLM plugin for clustering embeddings.
Installation
Install this plugin in the same environment as LLM.
llm install llm-cluster
Usage
The plugin adds a new command, llm cluster. This command takes the name of an embedding collection and the number of clusters to return.
First, use paginate-json and jq to populate a collection. I this case we are embedding the title and body of every issue in the llm repository, and storing the result in a issues.db database:
paginate-json 'https://api.github.com/repos/simonw/llm/issues?state=all&filter=all' \
| jq '[.[] | {id: .id, title: .title}]' \
| llm embed-multi llm-issues - \
--database issues.db --store
The --store flag causes the content to be stored in the database along with the embedding vectors.
Now we can cluster those embeddings into 10 groups:
llm cluster llm-issues 10 \
-d issues.db
If you omit the -d option the default embeddings database will be used.
The output should look something like this (truncated):
[
{
"id": "2",
"items": [
{
"id": "1650662628",
"content": "Initial design"
},
{
"id": "1650682379",
"content": "Log prompts and responses to SQLite"
}
]
},
{
"id": "4",
"items": [
{
"id": "1650760699",
"content": "llm web command - launches a web server"
},
{
"id": "1759659476",
"content": "`llm models` command"
},
{
"id": "1784156919",
"content": "`llm.get_model(alias)` helper"
}
]
},
{
"id": "7",
"items": [
{
"id": "1650765575",
"content": "--code mode for outputting code"
},
{
"id": "1659086298",
"content": "Accept PROMPT from --stdin"
},
{
"id": "1714651657",
"content": "Accept input from standard in"
}
]
}
]
The content displayed is truncated to 100 characters. Pass --truncate 0 to disable truncation, or --truncate X to truncate to X characters.
Generating summaries for each cluster
The --summary flag will cause the plugin to generate a summary for each cluster, by passing the content of the items (truncated according to the --truncate option) through a prompt to a Large Language Model.
This feature is still experimental. You should experiment with custom prompts to improve the quality of your summaries.
Since this can run a large amount of text through a LLM this can be expensive, depending on which model you are using.
This feature only works for embeddings that have had their associated content stored in the database using the --store flag.
You can use it like this:
llm cluster llm-issues 10 \
-d issues.db \
--summary
This uses the default prompt and the default model.
To use a different model, e.g. GPT-4, pass the --model option:
llm cluster llm-issues 10 \
-d issues.db \
--summary \
--model gpt-4
The default prompt used is:
Short, concise title for this cluster of related documents.
To use a custom prompt, pass --prompt:
llm cluster llm-issues 10 \
-d issues.db \
--summary \
--model gpt-4 \
--prompt 'Summarize this in a short line in the style of a bored, angry panda'
A "summary" key will be added to each cluster, containing the generated summary.
Development
To set up this plugin locally, first checkout the code. Then create a new virtual environment:
cd llm-cluster
python3 -m venv venv
source venv/bin/activate
Now install the dependencies and test dependencies:
pip install -e '.[test]'
To run the tests:
pytest
Metadata
Release files for llm-cluster 0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| llm-cluster-0.2.tar.gz | 9.2 kB | Without provenance | Details for llm-cluster-0.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| llm_cluster-0.2-py3-none-any.whl | Python 3 | none | any | Details for llm_cluster-0.2-py3-none-any.whl |
Total release size: 18.2 kB
Release files / llm-cluster-0.2.tar.gz
| Download URL | llm-cluster-0.2.tar.gz |
|---|---|
| Size | 9.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9e79db0bd3f7feb3f73afdac1caf5947da5fb2f43bdfced36549cc349d26bc28
|
|
BLAKE2b-256 checksum How to use checksums |
4871f7f96688d4935ee20c89058365eea875273a361df00350a8d5f5f59bd721
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.4
|
Release files / llm_cluster-0.2-py3-none-any.whl
| Download URL | llm_cluster-0.2-py3-none-any.whl |
|---|---|
| Size | 9.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ffabb64eb97a264a414b9312d82d8a649e05c3d73b93e943fafc46975ada42cb
|
|
BLAKE2b-256 checksum How to use checksums |
56ff3d156c6ed478fdd095b398fce8f50e95b23deecafbfd4372666f4b98fa08
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.4
|
Security for llm-cluster 0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.