Name | pyllms JSON |
Version |
0.6.1
JSON |
| download |
home_page | None |
Summary | Minimal Python library to connect to LLMs (OpenAI, Anthropic, Google, Mistral, OpenRouter, Reka, Groq, Together, Ollama, AI21, Cohere, Aleph-Alpha, HuggingfaceHub), with a built-in model performance benchmark. |
upload_time | 2024-10-22 20:26:56 |
maintainer | None |
docs_url | None |
author | Vladimir Prelovac |
requires_python | >=3.7 |
license | None |
keywords |
llm
llms
large language model
ai
nlp
natural language processing
gpt
chatgpt
openai
anthropic
ai21
cohere
aleph alpha
huggingface hub
vertex ai
palm
palm2
|
VCS |
|
bugtrack_url |
|
requirements |
openai
tiktoken
anthropic
anthropic_bedrock
ai21
cohere
aleph-alpha-client
huggingface_hub
prettytable
aiohttp
google-cloud-aiplatform
einops
accelerate
protobuf
grpcio
google-generativeai
ollama
reka-api
together
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# PyLLMs
[![PyPI version](https://badge.fury.io/py/pyllms.svg)](https://badge.fury.io/py/pyllms)
[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/license/mit/)
[![](https://dcbadge.vercel.app/api/server/aDNg6E9szy?compact=true&style=flat)](https://discord.gg/aDNg6E9szy)
[![Twitter](https://img.shields.io/twitter/follow/KagiHQ?style=social)](https://twitter.com/KagiHQ)
PyLLMs is a minimal Python library to connect to various Language Models (LLMs) with a built-in model performance benchmark.
## Table of Contents
- [Features](#features)
- [Installation](#installation)
- [Quick Start](#quick-start)
- [Usage](#usage)
- [Basic Usage](#basic-usage)
- [Multi-model Usage](#multi-model-usage)
- [Async Support](#async-support)
- [Streaming Support](#streaming-support)
- [Chat History and System Message](#chat-history-and-system-message)
- [Other Methods](#other-methods)
- [Configuration](#configuration)
- [Model Benchmarks](#model-benchmarks)
- [Supported Models](#supported-models)
- [Advanced Usage](#advanced-usage)
- [Using OpenAI API on Azure](#using-openai-api-on-azure)
- [Using Google Vertex LLM models](#using-google-vertex-llm-models)
- [Using Local Ollama LLM models](#using-local-ollama-llm-models)
- [Contributing](#contributing)
- [License](#license)
## Features
- Connect to top LLMs in a few lines of code
- Response meta includes tokens processed, cost, and latency standardized across models
- Multi-model support: Get completions from different models simultaneously
- LLM benchmark: Evaluate models on quality, speed, and cost
- Async and streaming support for compatible models
## Installation
Install the package using pip:
```bash
pip install pyllms
```
## Quick Start
```python
import llms
model = llms.init('gpt-4o')
result = model.complete("What is 5+5?")
print(result.text)
```
## Usage
### Basic Usage
```python
import llms
model = llms.init('gpt-4o')
result = model.complete(
"What is the capital of the country where Mozart was born?",
temperature=0.1,
max_tokens=200
)
print(result.text)
print(result.meta)
```
### Multi-model Usage
```python
models = llms.init(model=['gpt-3.5-turbo', 'claude-instant-v1'])
result = models.complete('What is the capital of the country where Mozart was born?')
print(result.text)
print(result.meta)
```
### Async Support
```python
result = await model.acomplete("What is the capital of the country where Mozart was born?")
```
### Streaming Support
```python
model = llms.init('claude-v1')
result = model.complete_stream("Write an essay on the Civil War")
for chunk in result.stream:
if chunk is not None:
print(chunk, end='')
```
### Chat History and System Message
```python
history = []
history.append({"role": "user", "content": user_input})
history.append({"role": "assistant", "content": result.text})
model.complete(prompt=prompt, history=history)
# For OpenAI chat models
model.complete(prompt=prompt, system_message=system, history=history)
```
### Other Methods
```python
count = model.count_tokens('The quick brown fox jumped over the lazy dog')
```
## Configuration
PyLLMs will attempt to read API keys and the default model from environment variables. You can set them like this:
```bash
export OPENAI_API_KEY="your_api_key_here"
export ANTHROPIC_API_KEY="your_api_key_here"
export AI21_API_KEY="your_api_key_here"
export COHERE_API_KEY="your_api_key_here"
export ALEPHALPHA_API_KEY="your_api_key_here"
export HUGGINFACEHUB_API_KEY="your_api_key_here"
export GOOGLE_API_KEY="your_api_key_here"
export MISTRAL_API_KEY="your_api_key_here"
export REKA_API_KEY="your_api_key_here"
export TOGETHER_API_KEY="your_api_key_here"
export GROQ_API_KEY="your_api_key_here"
export DEEPSEEK_API_KEY="your_api_key_here"
export LLMS_DEFAULT_MODEL="gpt-3.5-turbo"
```
Alternatively, you can pass initialization values to the `init()` method:
```python
model = llms.init(openai_api_key='your_api_key_here', model='gpt-4')
```
## Model Benchmarks
PyLLMs includes an automated benchmark system. The quality of models is evaluated using a powerful model (e.g., GPT-4) on a range of predefined questions, or you can supply your own.
```python
model = llms.init(model=['claude-3-haiku-20240307', 'gpt-4o-mini', 'claude-3-5-sonnet-20240620', 'gpt-4o', 'mistral-large-latest', 'open-mistral-nemo', 'gpt-4', 'gpt-3.5-turbo', 'deepseek-coder', 'deepseek-chat', 'llama-3.1-8b-instant', 'llama-3.1-70b-versatile'])
gpt4 = llms.init('gpt-4o')
models.benchmark(evaluator=gpt4)
```
Check [Kagi LLM Benchmarking Project](https://help.kagi.com/kagi/ai/llm-benchmark.html) for the latest benchmarks!
To evaluate models on your own prompts:
```python
models.benchmark(prompts=[("What is the capital of Finland?", "Helsinki")], evaluator=gpt4)
```
## Supported Models
To get a full list of supported models:
```python
model = llms.init()
model.list()
model.list("gpt") # lists only models with 'gpt' in name/provider name
```
Currently supported models (may be outdated):
| **Provider** | **Models** |
|---------------------------|---------------------------------------------------------------------------------------------------------|
| HuggingfaceHubProvider | hf_pythia, hf_falcon40b, hf_falcon7b, hf_mptinstruct, hf_mptchat, hf_llava, hf_dolly, hf_vicuna |
| GroqProvider | llama-3.1-8b-instant, llama-3.1-405b-reasoning, llama-3.1-70b-versatile |
| DeepSeekProvider | deepseek-chat, deepseek-coder |
| MistralProvider | mistral-tiny, open-mistral-7b, open-mistral-nemo, mistral-small, open-mixtral-8x7b, mistral-small-latest, mistral-medium-latest, mistral-large-latest |
| OpenAIProvider | gpt-4o-mini, gpt-3.5-turbo, gpt-3.5-turbo-1106, gpt-3.5-turbo-instruct, gpt-4o, gpt-4-1106-preview, gpt-4-turbo-preview, gpt-4-turbo |
| GoogleProvider | gemini-1.5-pro-preview-0514, gemini-1.5-flash-preview-0514, chat-bison, text-bison, text-bison-32k, code-bison, code-bison-32k, codechat-bison, codechat-bison-32k, gemini-pro |
| GoogleGenAIProvider | chat-bison-genai, text-bison-genai, gemini-1.5-pro-latest |
| AnthropicProvider | claude-3-haiku-20240307, claude-instant-v1.1, claude-instant-v1, claude-instant-1, claude-instant-1.2, claude-3-sonnet-20240229, claude-3-5-sonnet-20240620, claude-2.1, claude-v1, claude-v1-100k, claude-3-opus-20240229 |
| BedrockAnthropicProvider | anthropic.claude-3-haiku-20240307-v1:0, anthropic.claude-instant-v1, anthropic.claude-v1, anthropic.claude-v2, anthropic.claude-3-sonnet-20240229-v1:0 |
| TogetherProvider | meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo |
| RekaProvider | reka-edge, reka-flash, reka-core |
| AlephAlphaProvider | luminous-base, luminous-extended, luminous-supreme, luminous-supreme-control |
| AI21Provider | j2-grande-instruct, j2-jumbo-instruct, command, command-nightly |
| CohereProvider | command, command-nightly |
## Advanced Usage
### Using OpenAI API on Azure
```python
import llms
AZURE_API_BASE = "{insert here}"
AZURE_API_KEY = "{insert here}"
model = llms.init('gpt-4')
azure_args = {
"engine": "gpt-4", # Azure deployment_id
"api_base": AZURE_API_BASE,
"api_type": "azure",
"api_version": "2023-05-15",
"api_key": AZURE_API_KEY,
}
azure_result = model.complete("What is 5+5?", **azure_args)
```
### Using Google Vertex LLM models
1. Set up a GCP account and create a project
2. Enable Vertex AI APIs in your GCP project
3. Install gcloud CLI tool
4. Set up Application Default Credentials
Then:
```python
model = llms.init('chat-bison')
result = model.complete("Hello!")
```
### Using Local Ollama LLM models
1. Ensure Ollama is running and you've pulled the desired model
2. Get the name of the LLM you want to use
3. Initialize PyLLMs:
```python
model = llms.init("tinyllama:latest")
result = model.complete("Hello!")
```
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## License
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
Raw data
{
"_id": null,
"home_page": null,
"name": "pyllms",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "llm, llms, large language model, AI, NLP, natural language processing, gpt, chatgpt, openai, anthropic, ai21, cohere, aleph alpha, huggingface hub, vertex ai, palm, palm2",
"author": "Vladimir Prelovac",
"author_email": "vlad@kagi.com",
"download_url": "https://files.pythonhosted.org/packages/71/a8/cf0b0bfa298cc5e70bdc556d07e77a0593026a4aeda0de998ecbd34bc696/pyllms-0.6.1.tar.gz",
"platform": null,
"description": "# PyLLMs\n\n[![PyPI version](https://badge.fury.io/py/pyllms.svg)](https://badge.fury.io/py/pyllms)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/license/mit/)\n[![](https://dcbadge.vercel.app/api/server/aDNg6E9szy?compact=true&style=flat)](https://discord.gg/aDNg6E9szy)\n[![Twitter](https://img.shields.io/twitter/follow/KagiHQ?style=social)](https://twitter.com/KagiHQ)\n\nPyLLMs is a minimal Python library to connect to various Language Models (LLMs) with a built-in model performance benchmark.\n\n## Table of Contents\n\n- [Features](#features)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Usage](#usage)\n - [Basic Usage](#basic-usage)\n - [Multi-model Usage](#multi-model-usage)\n - [Async Support](#async-support)\n - [Streaming Support](#streaming-support)\n - [Chat History and System Message](#chat-history-and-system-message)\n - [Other Methods](#other-methods)\n- [Configuration](#configuration)\n- [Model Benchmarks](#model-benchmarks)\n- [Supported Models](#supported-models)\n- [Advanced Usage](#advanced-usage)\n - [Using OpenAI API on Azure](#using-openai-api-on-azure)\n - [Using Google Vertex LLM models](#using-google-vertex-llm-models)\n - [Using Local Ollama LLM models](#using-local-ollama-llm-models)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Features\n\n- Connect to top LLMs in a few lines of code\n- Response meta includes tokens processed, cost, and latency standardized across models\n- Multi-model support: Get completions from different models simultaneously\n- LLM benchmark: Evaluate models on quality, speed, and cost\n- Async and streaming support for compatible models\n\n## Installation\n\nInstall the package using pip:\n\n```bash\npip install pyllms\n```\n\n## Quick Start\n\n```python\nimport llms\n\nmodel = llms.init('gpt-4o')\nresult = model.complete(\"What is 5+5?\")\n\nprint(result.text)\n```\n\n## Usage\n\n### Basic Usage\n\n```python\nimport llms\n\nmodel = llms.init('gpt-4o')\nresult = model.complete(\n \"What is the capital of the country where Mozart was born?\",\n temperature=0.1,\n max_tokens=200\n)\n\nprint(result.text)\nprint(result.meta)\n```\n\n### Multi-model Usage\n\n```python\nmodels = llms.init(model=['gpt-3.5-turbo', 'claude-instant-v1'])\nresult = models.complete('What is the capital of the country where Mozart was born?')\n\nprint(result.text)\nprint(result.meta)\n```\n\n### Async Support\n\n```python\nresult = await model.acomplete(\"What is the capital of the country where Mozart was born?\")\n```\n\n### Streaming Support\n\n```python\nmodel = llms.init('claude-v1')\nresult = model.complete_stream(\"Write an essay on the Civil War\")\nfor chunk in result.stream:\n if chunk is not None:\n print(chunk, end='')\n```\n\n### Chat History and System Message\n\n```python\nhistory = []\nhistory.append({\"role\": \"user\", \"content\": user_input})\nhistory.append({\"role\": \"assistant\", \"content\": result.text})\n\nmodel.complete(prompt=prompt, history=history)\n\n# For OpenAI chat models\nmodel.complete(prompt=prompt, system_message=system, history=history)\n```\n\n### Other Methods\n\n```python\ncount = model.count_tokens('The quick brown fox jumped over the lazy dog')\n```\n\n## Configuration\n\nPyLLMs will attempt to read API keys and the default model from environment variables. You can set them like this:\n\n```bash\nexport OPENAI_API_KEY=\"your_api_key_here\"\nexport ANTHROPIC_API_KEY=\"your_api_key_here\"\nexport AI21_API_KEY=\"your_api_key_here\"\nexport COHERE_API_KEY=\"your_api_key_here\"\nexport ALEPHALPHA_API_KEY=\"your_api_key_here\"\nexport HUGGINFACEHUB_API_KEY=\"your_api_key_here\"\nexport GOOGLE_API_KEY=\"your_api_key_here\"\nexport MISTRAL_API_KEY=\"your_api_key_here\"\nexport REKA_API_KEY=\"your_api_key_here\"\nexport TOGETHER_API_KEY=\"your_api_key_here\"\nexport GROQ_API_KEY=\"your_api_key_here\"\nexport DEEPSEEK_API_KEY=\"your_api_key_here\"\n\nexport LLMS_DEFAULT_MODEL=\"gpt-3.5-turbo\"\n```\n\nAlternatively, you can pass initialization values to the `init()` method:\n\n```python\nmodel = llms.init(openai_api_key='your_api_key_here', model='gpt-4')\n```\n\n## Model Benchmarks\n\nPyLLMs includes an automated benchmark system. The quality of models is evaluated using a powerful model (e.g., GPT-4) on a range of predefined questions, or you can supply your own.\n\n```python\nmodel = llms.init(model=['claude-3-haiku-20240307', 'gpt-4o-mini', 'claude-3-5-sonnet-20240620', 'gpt-4o', 'mistral-large-latest', 'open-mistral-nemo', 'gpt-4', 'gpt-3.5-turbo', 'deepseek-coder', 'deepseek-chat', 'llama-3.1-8b-instant', 'llama-3.1-70b-versatile'])\n\ngpt4 = llms.init('gpt-4o')\n\nmodels.benchmark(evaluator=gpt4)\n```\n\nCheck [Kagi LLM Benchmarking Project](https://help.kagi.com/kagi/ai/llm-benchmark.html) for the latest benchmarks!\n\nTo evaluate models on your own prompts:\n\n```python\nmodels.benchmark(prompts=[(\"What is the capital of Finland?\", \"Helsinki\")], evaluator=gpt4)\n```\n\n## Supported Models\n\nTo get a full list of supported models:\n\n```python\nmodel = llms.init()\nmodel.list()\nmodel.list(\"gpt\") # lists only models with 'gpt' in name/provider name\n```\nCurrently supported models (may be outdated):\n\n| **Provider** | **Models** |\n|---------------------------|---------------------------------------------------------------------------------------------------------|\n| HuggingfaceHubProvider | hf_pythia, hf_falcon40b, hf_falcon7b, hf_mptinstruct, hf_mptchat, hf_llava, hf_dolly, hf_vicuna |\n| GroqProvider | llama-3.1-8b-instant, llama-3.1-405b-reasoning, llama-3.1-70b-versatile |\n| DeepSeekProvider | deepseek-chat, deepseek-coder |\n| MistralProvider | mistral-tiny, open-mistral-7b, open-mistral-nemo, mistral-small, open-mixtral-8x7b, mistral-small-latest, mistral-medium-latest, mistral-large-latest |\n| OpenAIProvider | gpt-4o-mini, gpt-3.5-turbo, gpt-3.5-turbo-1106, gpt-3.5-turbo-instruct, gpt-4o, gpt-4-1106-preview, gpt-4-turbo-preview, gpt-4-turbo |\n| GoogleProvider | gemini-1.5-pro-preview-0514, gemini-1.5-flash-preview-0514, chat-bison, text-bison, text-bison-32k, code-bison, code-bison-32k, codechat-bison, codechat-bison-32k, gemini-pro |\n| GoogleGenAIProvider | chat-bison-genai, text-bison-genai, gemini-1.5-pro-latest |\n| AnthropicProvider | claude-3-haiku-20240307, claude-instant-v1.1, claude-instant-v1, claude-instant-1, claude-instant-1.2, claude-3-sonnet-20240229, claude-3-5-sonnet-20240620, claude-2.1, claude-v1, claude-v1-100k, claude-3-opus-20240229 |\n| BedrockAnthropicProvider | anthropic.claude-3-haiku-20240307-v1:0, anthropic.claude-instant-v1, anthropic.claude-v1, anthropic.claude-v2, anthropic.claude-3-sonnet-20240229-v1:0 |\n| TogetherProvider | meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo |\n| RekaProvider | reka-edge, reka-flash, reka-core |\n| AlephAlphaProvider | luminous-base, luminous-extended, luminous-supreme, luminous-supreme-control |\n| AI21Provider | j2-grande-instruct, j2-jumbo-instruct, command, command-nightly |\n| CohereProvider | command, command-nightly |\n\n\n\n## Advanced Usage\n\n### Using OpenAI API on Azure\n\n```python\nimport llms\nAZURE_API_BASE = \"{insert here}\"\nAZURE_API_KEY = \"{insert here}\"\n\nmodel = llms.init('gpt-4')\n\nazure_args = {\n \"engine\": \"gpt-4\", # Azure deployment_id\n \"api_base\": AZURE_API_BASE,\n \"api_type\": \"azure\",\n \"api_version\": \"2023-05-15\",\n \"api_key\": AZURE_API_KEY,\n}\n\nazure_result = model.complete(\"What is 5+5?\", **azure_args)\n```\n\n### Using Google Vertex LLM models\n\n1. Set up a GCP account and create a project\n2. Enable Vertex AI APIs in your GCP project\n3. Install gcloud CLI tool\n4. Set up Application Default Credentials\n\nThen:\n\n```python\nmodel = llms.init('chat-bison')\nresult = model.complete(\"Hello!\")\n```\n\n### Using Local Ollama LLM models\n\n1. Ensure Ollama is running and you've pulled the desired model\n2. Get the name of the LLM you want to use\n3. Initialize PyLLMs:\n\n```python\nmodel = llms.init(\"tinyllama:latest\")\nresult = model.complete(\"Hello!\")\n```\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.\n",
"bugtrack_url": null,
"license": null,
"summary": "Minimal Python library to connect to LLMs (OpenAI, Anthropic, Google, Mistral, OpenRouter, Reka, Groq, Together, Ollama, AI21, Cohere, Aleph-Alpha, HuggingfaceHub), with a built-in model performance benchmark.",
"version": "0.6.1",
"project_urls": {
"Documentation": "https://github.com/kagisearch/pyllms",
"Issue Tracker": "https://github.com/kagisearch/pyllms/issues",
"Source Code": "https://github.com/kagisearch/pyllms"
},
"split_keywords": [
"llm",
" llms",
" large language model",
" ai",
" nlp",
" natural language processing",
" gpt",
" chatgpt",
" openai",
" anthropic",
" ai21",
" cohere",
" aleph alpha",
" huggingface hub",
" vertex ai",
" palm",
" palm2"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "051a5e700084cb2bb898a6d4225ca766ece2cb2eda20dcbc9b7c02bf3affe318",
"md5": "27b7b1c63fa31fa10595ee64b3015552",
"sha256": "3ed3ef17d4ecc46ccda0ed1885eea6ba7b37c736e4f3c7fd6eefe297b74a0c5e"
},
"downloads": -1,
"filename": "pyllms-0.6.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "27b7b1c63fa31fa10595ee64b3015552",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 44060,
"upload_time": "2024-10-22T20:26:55",
"upload_time_iso_8601": "2024-10-22T20:26:55.026489Z",
"url": "https://files.pythonhosted.org/packages/05/1a/5e700084cb2bb898a6d4225ca766ece2cb2eda20dcbc9b7c02bf3affe318/pyllms-0.6.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "71a8cf0b0bfa298cc5e70bdc556d07e77a0593026a4aeda0de998ecbd34bc696",
"md5": "5a0d2dfa370ef1849a668ea6755f9d59",
"sha256": "a99317e2846e7150eb05399f1f003ef1300d4f85fe2ac215afca639c4bbc9bd9"
},
"downloads": -1,
"filename": "pyllms-0.6.1.tar.gz",
"has_sig": false,
"md5_digest": "5a0d2dfa370ef1849a668ea6755f9d59",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 33264,
"upload_time": "2024-10-22T20:26:56",
"upload_time_iso_8601": "2024-10-22T20:26:56.839688Z",
"url": "https://files.pythonhosted.org/packages/71/a8/cf0b0bfa298cc5e70bdc556d07e77a0593026a4aeda0de998ecbd34bc696/pyllms-0.6.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-22 20:26:56",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "kagisearch",
"github_project": "pyllms",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "openai",
"specs": []
},
{
"name": "tiktoken",
"specs": []
},
{
"name": "anthropic",
"specs": [
[
">=",
"0.3"
]
]
},
{
"name": "anthropic_bedrock",
"specs": []
},
{
"name": "ai21",
"specs": []
},
{
"name": "cohere",
"specs": []
},
{
"name": "aleph-alpha-client",
"specs": []
},
{
"name": "huggingface_hub",
"specs": []
},
{
"name": "prettytable",
"specs": []
},
{
"name": "aiohttp",
"specs": []
},
{
"name": "google-cloud-aiplatform",
"specs": [
[
"~=",
"1.28.1"
]
]
},
{
"name": "einops",
"specs": []
},
{
"name": "accelerate",
"specs": []
},
{
"name": "protobuf",
"specs": []
},
{
"name": "grpcio",
"specs": [
[
"~=",
"1.54.2"
]
]
},
{
"name": "google-generativeai",
"specs": []
},
{
"name": "ollama",
"specs": []
},
{
"name": "reka-api",
"specs": []
},
{
"name": "together",
"specs": []
}
],
"lcname": "pyllms"
}