aidial_adapter_vertexai/chat/gemini/error.py (24 lines of code) (raw):

from typing import Any, AsyncIterator, Callable from aidial_adapter_vertexai.utils.log_config import vertex_ai_logger as log class FinishReasonOtherError(Exception): def __init__(self, msg: str, retriable: bool): self.msg = msg self.retriable = retriable super().__init__(self.msg) async def generate_with_retries( generator: Callable[[], AsyncIterator[Any]], max_retries: int ) -> AsyncIterator[Any]: retries = 0 while True: try: async for content in generator(): yield content break except FinishReasonOtherError as e: if not e.retriable: raise e retries += 1 if retries > max_retries: log.debug(f"max retries exceeded ({max_retries})") raise e log.debug(f"retrying [{retries}/{max_retries}]")