diff --git a/llama_cpp/llama_multimodal.py b/llama_cpp/llama_multimodal.py index 1c7d47bdd..afce173db 100644 --- a/llama_cpp/llama_multimodal.py +++ b/llama_cpp/llama_multimodal.py @@ -926,9 +926,17 @@ 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) @@ -936,6 +944,9 @@ def _create_bitmap_func(idx: int, item: dict): 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.")