Create a huggingface processor to process multimodal data. Args: name_or_path (str): The name of the processor. Returns: transformers.ProcessorMixin: The pretrained processor.
(name_or_path, **kwargs)
| 65 | |
| 66 | |
| 67 | def hf_processor(name_or_path, **kwargs): |
| 68 | """Create a huggingface processor to process multimodal data. |
| 69 | |
| 70 | Args: |
| 71 | name_or_path (str): The name of the processor. |
| 72 | |
| 73 | Returns: |
| 74 | transformers.ProcessorMixin: The pretrained processor. |
| 75 | """ |
| 76 | from transformers import AutoConfig, AutoProcessor |
| 77 | |
| 78 | try: |
| 79 | processor = AutoProcessor.from_pretrained(name_or_path, **kwargs) |
| 80 | config = AutoConfig.from_pretrained(name_or_path, **kwargs) |
| 81 | |
| 82 | # Bind vlm model's get_rope_index method to processor |
| 83 | processor.config = config |
| 84 | match processor.__class__.__name__: |
| 85 | case "Qwen2VLProcessor": |
| 86 | from transformers.models.qwen2_vl import Qwen2VLModel |
| 87 | |
| 88 | processor.get_rope_index = types.MethodType(Qwen2VLModel.get_rope_index, processor) |
| 89 | case "Qwen2_5_VLProcessor": |
| 90 | from transformers.models.qwen2_5_vl import Qwen2_5_VLModel |
| 91 | |
| 92 | processor.get_rope_index = types.MethodType(Qwen2_5_VLModel.get_rope_index, processor) |
| 93 | case "Qwen3VLProcessor": |
| 94 | from transformers.models.qwen3_vl import Qwen3VLModel |
| 95 | |
| 96 | processor.get_rope_index = types.MethodType(Qwen3VLModel.get_rope_index, processor) |
| 97 | case "Glm4vImageProcessor": |
| 98 | from transformers.models.glm4v import Glm4vModel |
| 99 | |
| 100 | processor.get_rope_index = types.MethodType(Glm4vModel.get_rope_index, processor) |
| 101 | case _: |
| 102 | raise ValueError(f"Unsupported processor type: {processor.__class__.__name__}") |
| 103 | except Exception as e: |
| 104 | processor = None |
| 105 | # TODO(haibin.lin): try-catch should be removed after adding transformer version req to setup.py to avoid |
| 106 | # silent failure |
| 107 | warnings.warn(f"Failed to create processor: {e}. This may affect multimodal processing", stacklevel=1) |
| 108 | # Avoid load tokenizer, see: |
| 109 | # https://github.com/huggingface/transformers/blob/v4.49.0/src/transformers/models/auto/processing_auto.py#L344 |
| 110 | if processor is not None and "Processor" not in processor.__class__.__name__: |
| 111 | processor = None |
| 112 | return processor |