rotates models to avoid hitting rate limit
Project description
Model Rotator
Model Rotator is a Python library for managing multiple LLM (Large Language Model) instances with rate limits and priorities. It dynamically schedules requests to models based on their rate limits, usage, and priority levels, ensuring optimal utilization of available resources.
Features
- Rate-Limit Management: Automatically tracks and enforces rate limits per model.
- Priority-Based Scheduling: Prioritizes high-priority models over medium and low-priority ones.
- Dynamic Updates: Tracks model usage in real-time and prunes stale usage data.
- Stateful: Maintains state for each model's usage across calls.
- Customizable: Easily configure models with different rate limits and priorities.
Installation
Install the package from PyPI:
pip install model-rotator
Usage
- Define Your Models Provide a list of model configurations:
Note: Models listed first will have higher priority if models have same priority given.
from model_rotator import ModelRotator
models = [
{"name": "groq/llama-3.1-70b-versatile", "priority": "high", "limit": 30},
{"name": "groq/llama-3.1-70b-specdec", "priority": "high", "limit": 30},
{"name": "groq/llama-3.1-8b-instant", "priority": "medium", "limit": 30},
{"name": "groq/llama-3.2-1b-preview", "priority": "low", "limit": 30},
{"name": "gemini/gemini-1.5-flash", "priority": "medium", "limit": 30},
{"name": "gemini/gemini-1.5-pro", "priority": "high", "limit": 15},
{"name": "gemini/gemini-exp-1114", "priority": "high", "limit": 2},
]
- Initialize the Scheduler
rotator = ModelRotator(models)
- Schedule Requests Use get_next_model() to get the next available model for processing:
for _ in range(50): # Simulate 50 requests
model = rotator.get_next_model()
if model:
print(f"Using model: {model}")
else:
print("All models exhausted, retry later.")
- Check Model States Inspect the current state of all models:
print(rotator.get_state())
Example Output
Copy code
Request 1: Using model: groq/llama-3.1-70b-versatile
Request 2: Using model: groq/llama-3.1-70b-specdec
...
Request 50: All models exhausted, retry later.
Model States:
[
{"name": "groq/llama-3.1-70b-versatile", "priority": "high", "limit": 30, "current_usage": 30},
{"name": "groq/llama-3.1-70b-specdec", "priority": "high", "limit": 30, "current_usage": 30},
...
]
API
ModelRotator(models:Model)
Initializes the scheduler.
models
: A list of dictionaries. Each dictionary must include:name
(str): The model name.priority
(str): Priority level (high
,medium
,low
).limit
(int): Maximum allowed requests per minute.
get_next_model()
Returns the name of the next available model based on priority and rate limits.
- Returns:
str
: The model name, orNone
if no models are available.
get_state()
Returns the current state of all models, including their usage.
- Returns:
list
: A list of dictionaries with the following fields:name
(str): Model name.priority
(str): Priority level.limit
(int): Rate limit.current_usage
(int): Current number of requests within the last minute.
License
This project is licensed under the MIT License. See the LICENSE file for details.
Contributing
Contributions are welcome! Feel free to open issues or submit pull requests.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file model_rotator-0.1.1.tar.gz
.
File metadata
- Download URL: model_rotator-0.1.1.tar.gz
- Upload date:
- Size: 3.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.2 CPython/3.12.2 Linux/6.8.0-49-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5b2c7f05c7a2cca5f85a46dca3a0d31c55523fbc3475931f8e6437bfc059898e |
|
MD5 | 697771897251eb470eee3030d16d6b6f |
|
BLAKE2b-256 | 00bf7122c079407f8d7d86245a15056beda68968f81e818a4e13d17b33c0ec6f |
File details
Details for the file model_rotator-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: model_rotator-0.1.1-py3-none-any.whl
- Upload date:
- Size: 4.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.2 CPython/3.12.2 Linux/6.8.0-49-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ec9b7a464398e40c748890d21093d9f76c18f6cdb1ecdc3f63768557d7dd444d |
|
MD5 | f905e5ba567c314504cd33db2124d857 |
|
BLAKE2b-256 | 82cc52c776892f85db1d238514d550dcb4ade9bf7a6cec764cf78c4a23236ae2 |