Source code for pyrit.prompt_target.common.utils

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.

import asyncio
from typing import Callable


[docs] def limit_requests_per_minute(func: Callable) -> Callable: """ A decorator to enforce rate limit of the target through setting requests per minute. This should be applied to all send_prompt_async() functions on PromptTarget and PromptChatTarget. Args: func (Callable): The function to be decorated. Returns: Callable: The decorated function with a sleep introduced. """ async def set_max_rpm(*args, **kwargs): self = args[0] rpm = getattr(self, "_max_requests_per_minute", None) if rpm and rpm > 0: await asyncio.sleep(60 / rpm) return await func(*args, **kwargs) return set_max_rpm