Concurrent Fast OpenAI calls with Automatic Rate Limiting to avoid hitting limits. Structured Outputs with Pydantic Base Models.
Project description
throttle-openai
A Python library for making concurrent OpenAI API calls with automatic rate limiting and structured outputs using Pydantic models. Credit: Blogpost by Villoro
Installation
pip install throttle-openai
Quick Start
1. Define Your Output Structure
First, create a Pydantic model that defines your expected output structure:
from pydantic import BaseModel, Field
from typing import Literal
class Sentiment_Prediction_Output(BaseModel):
reasoning: str = Field(description="Reasoning for the sentiment prediction in one sentence.")
sentiment: Literal['Positive', 'Negative', 'Neutral']
class Config:
title = "Sentiment Prediction Output"
description = "Sentiment prediction with reasoning."
2. Make API Calls
Here's a complete example showing how to analyze sentiments for multiple product reviews:
from throttle_openai import async_batch_chat_completion
import asyncio
import os
async def analyze_sentiment():
# Prepare batch messages
batch_messages = [
{
"messages": [
{"role": "system", "content": "You are a sentiment analyzer. Analyze the sentiment of the given text."},
{"role": "user", "content": "I like this product. It's good."}
],
"id": "1" # id is optional
},
{
"messages": [
{"role": "system", "content": "You are a sentiment analyzer. Analyze the sentiment of the given text."},
{"role": "user", "content": "I don't like this product. It's bad."}
],
"id": "2"
}
]
# Make concurrent API calls
output, errors = await async_batch_chat_completion(
batch_messages=batch_messages,
gpt_model='gpt-4o-mini',
pydantic_model=Sentiment_Prediction_Output,
api_key=os.getenv("OPENAI_API_KEY")
)
return output, errors
# Run the analysis
output, errors = asyncio.run(analyze_sentiment())
# Process results
print("Results:", output)
if errors:
print("Errors:", errors)
Features
- Concurrent Processing: Automatically handles multiple API calls concurrently
- Rate Limiting: Built-in rate limiting to prevent hitting OpenAI's API limits
- Structured Output: Uses Pydantic models for type-safe and validated outputs
- Error Handling: Separate error collection for failed requests
- ID Tracking: Optional ID field to track individual requests and responses
Environment Variables
Set your OpenAI API key as an environment variable:
export OPENAI_API_KEY=your_api_key
Complete Example
Check out examples/basic_usage_structured_output.py for a complete example featuring structured outputs.
Project details
Release history Release notifications | RSS feed
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file throttle_openai-0.1.2.tar.gz.
File metadata
- Download URL: throttle_openai-0.1.2.tar.gz
- Upload date:
- Size: 6.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.5 CPython/3.10.12 Linux/6.5.0-1025-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e98e5673768aa68ff4bcd2f321f5d9b24f709d0d42c79a031867733077f43c1
|
|
| MD5 |
3cdeb7629adce9b124724a86e9e618c1
|
|
| BLAKE2b-256 |
c588d2f53c8c3c744a1ee4ffe10e3e7fc7ee3bd253d0fe7e52dc8cdc29b2a056
|
File details
Details for the file throttle_openai-0.1.2-py3-none-any.whl.
File metadata
- Download URL: throttle_openai-0.1.2-py3-none-any.whl
- Upload date:
- Size: 8.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.5 CPython/3.10.12 Linux/6.5.0-1025-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98dd1d9b379c65ad2e9b40b87f3bd8adc0e670641251806209c811b87afede3e
|
|
| MD5 |
e807f37eeccf1b447fb6877d4354fd72
|
|
| BLAKE2b-256 |
c66c264d38229e73ca984914bb5f1f95629319dea01244ee2819a7d9de85d41d
|