import json from abc import abstractmethod from typing import List, Optional, Tuple import litellm from litellm.litellm_core_utils.core_helpers import map_finish_reason from litellm.types.utils import ( ChatCompletionToolCallChunk, ChatCompletionUsageBlock, GenericStreamingChunk, ModelResponse, ) class FakeStreamResponseIterator: def __init__(self, model_response, json_mode: Optional[bool] = False): self.model_response = model_response self.json_mode = json_mode self.is_done = False # Sync iterator def __iter__(self): return self @abstractmethod def chunk_parser(self, chunk: dict) -> GenericStreamingChunk: pass def __next__(self): if self.is_done: raise StopIteration self.is_done = True return self.chunk_parser(self.model_response) # Async iterator def __aiter__(self): return self async def __anext__(self): if self.is_done: raise StopAsyncIteration self.is_done = True return self.chunk_parser(self.model_response)