LLMhistory / utils.py
freQuensy23's picture
INIT
c0be431
raw
history blame contribute delete
835 Bytes
import asyncio
async def async_zip_stream(*iterators, default_value=''):
tasks = [asyncio.create_task(iterator.__anext__()) for iterator in iterators]
done = [False] * len(iterators)
while not all(done):
results = []
for i, task in enumerate(tasks):
if done[i]:
results.append(default_value)
elif task.done():
try:
results.append(task.result())
tasks[i] = asyncio.create_task(iterators[i].__anext__())
except StopAsyncIteration:
done[i] = True
results.append(default_value)
else:
results.append(default_value)
yield tuple(results)
await asyncio.sleep(0.01) # Slight delay to allow other tasks to progress