# Adapted from https://huggingface.co/OpenGVLab/InternVL2-4B/blob/main/modeling_intern_vit.py import logging from functools import lru_cache from typing import List import numpy as np import torch from PIL import Image from sglang.srt.managers.schedule_batch import ( Modality, MultimodalDataItem, MultimodalProcessorOutput, ) from sglang.srt.models.interns1 import InternS1ForConditionalGeneration from sglang.srt.models.internvl import InternVLChatModel from sglang.srt.multimodal.processors.base_processor import ( BaseMultimodalProcessor, BaseMultiModalProcessorOutput, MultimodalSpecialTokens, ) from sglang.srt.utils import get_device from sglang.srt.utils.video_decoder import VideoDecoderWrapper logger = logging.getLogger(__name__) class InternVLProcessor(BaseMultimodalProcessor): models = [InternVLChatModel, InternS1ForConditionalGeneration] gpu_image_decode = False # InternVL HF processor does not support tensor inputs IMAGENET_MEAN = [0.485, 0.456, 0.406] IMAGENET_STD = [0.229, 0.224, 0.225] IMAGE_MAX_NUM = 12 DEFAULT_VIDEO_NUM_FRAMES = 32 VIDEO_MAX_NUM = 1 VIDEO_USE_THUMBNAIL = False CONTEXT_FALLBACK = 40960 CONTEXT_RESERVED = 256 # OpenAI multimodal placeholder tokens IMAGE_PLACEHOLDER_TOKEN = "" VIDEO_PLACEHOLDER_TOKEN = "