Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion examples/api_request_parallel_processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,20 @@
) # for storing API inputs, outputs, and metadata


def validate_processing_limits(
max_requests_per_minute: float,
max_tokens_per_minute: float,
max_attempts: int,
) -> None:
"""Reject limits that can prevent the processor from making progress."""
if max_requests_per_minute < 1:
raise ValueError("max_requests_per_minute must be at least 1")
if max_tokens_per_minute < 1:
raise ValueError("max_tokens_per_minute must be at least 1")
if max_attempts < 1:
raise ValueError("max_attempts must be at least 1")


async def process_api_requests_from_file(
requests_filepath: str,
save_filepath: str,
Expand All @@ -119,6 +133,12 @@ async def process_api_requests_from_file(
logging_level: int,
):
"""Processes API requests in parallel, throttling to stay under rate limits."""
validate_processing_limits(
max_requests_per_minute=max_requests_per_minute,
max_tokens_per_minute=max_tokens_per_minute,
max_attempts=max_attempts,
)

# constants
seconds_to_pause_after_rate_limit_error = 15
seconds_to_sleep_each_loop = (
Expand Down Expand Up @@ -507,4 +527,4 @@ def task_id_generator_function():
```

As with all jsonl files, take care that newlines in the content are properly escaped (json.dumps does this automatically).
"""
"""