Skip to content
Merged
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
13 changes: 12 additions & 1 deletion llama_cpp/llama_multimodal.py
Original file line number Diff line number Diff line change
Expand Up @@ -926,16 +926,27 @@ def _create_bitmap_func(idx: int, item: dict):
max_workers = min(llama.n_threads, len(media_items))
with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
futures = [executor.submit(_create_bitmap_func, i, item) for i, item in enumerate(media_items)]

decode_error = None

for future in concurrent.futures.as_completed(futures):
idx, bitmap, video_ctx = future.result()
# Ensure inserting all bitmap/video_ctx into cleanup array except decoding error
try:
idx, bitmap, video_ctx = future.result()
except Exception as exc:
if decode_error is None:
decode_error = exc
continue

bitmaps[idx] = bitmap
bitmap_cleanup.append(bitmap)

if video_ctx:
video_cleanup.append(video_ctx)

if decode_error is not None:
raise decode_error

# Strict validation: Abort if any thread failed to decode its assigned media
if any(b is None for b in bitmaps):
raise RuntimeError(f"{self.log_prefix}(_create_bitmap_func): Failed to decode one or more media files.")
Expand Down