pyllms


Namepyllms JSON
Version 0.6.1 PyPI version JSON
download
home_pageNone
SummaryMinimal 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_time2024-10-22 20:26:56
maintainerNone
docs_urlNone
authorVladimir Prelovac
requires_python>=3.7
licenseNone
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"
}
        
Elapsed time: 0.68617s