Spaces:
Sleeping
Sleeping
| def process_all_vision_info(messages, examples=None): | |
| """ | |
| Process vision information from both messages and in-context examples, supporting batch processing. | |
| Args: | |
| messages: List of message dictionaries (single input) OR list of message lists (batch input) | |
| examples: Optional list of example dictionaries (single input) OR list of example lists (batch) | |
| Returns: | |
| A flat list of all images in the correct order: | |
| - For single input: example images followed by message images | |
| - For batch input: interleaved as (item1 examples, item1 input, item2 examples, item2 input, etc.) | |
| - Returns None if no images were found | |
| """ | |
| from qwen_vl_utils import process_vision_info, fetch_image | |
| # Helper function to extract images from examples | |
| def extract_example_images(example_item): | |
| if not example_item: | |
| return [] | |
| # Handle both list of examples and single example | |
| examples_to_process = example_item if isinstance(example_item, list) else [example_item] | |
| images = [] | |
| for example in examples_to_process: | |
| if isinstance(example.get('input'), dict) and example['input'].get('type') == 'image': | |
| images.append(fetch_image(example['input'])) | |
| return images | |
| # Normalize inputs to always be batched format | |
| is_batch = messages and isinstance(messages[0], list) | |
| messages_batch = messages if is_batch else [messages] | |
| is_batch_examples = examples and isinstance(examples, list) and (isinstance(examples[0], list) or examples[0] is None) | |
| examples_batch = examples if is_batch_examples else ([examples] if examples is not None else None) | |
| # Ensure examples batch matches messages batch if provided | |
| if examples and len(examples_batch) != len(messages_batch): | |
| if not is_batch and len(examples_batch) == 1: | |
| # Single example set for a single input is fine | |
| pass | |
| else: | |
| raise ValueError("Examples batch length must match messages batch length") | |
| # Process all inputs, maintaining correct order | |
| all_images = [] | |
| for i, message_group in enumerate(messages_batch): | |
| # Get example images for this input | |
| if examples and i < len(examples_batch): | |
| input_example_images = extract_example_images(examples_batch[i]) | |
| all_images.extend(input_example_images) | |
| # Get message images for this input | |
| input_message_images = process_vision_info(message_group)[0] or [] | |
| all_images.extend(input_message_images) | |
| return all_images if all_images else None | |