Files
wehub-resource-sync a203934033
Lint test / lint (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:34:58 +08:00

63 lines
2.5 KiB
Python

# Copyright (c) ModelScope Contributors. All rights reserved.
import torch
from typing import Any, Dict, List, Optional
from ..base import Template
from ..constant import LLMTemplateType, MLLMTemplateType
from ..register import TemplateMeta, register_template
from ..template_inputs import StdTemplateInputs
from .utils import DEFAULT_SYSTEM, ChatmlTemplateMeta
register_template(ChatmlTemplateMeta(
LLMTemplateType.yi_coder,
default_system=DEFAULT_SYSTEM,
))
yi_vl_default_system = (
'This is a chat between an inquisitive human and an AI assistant. Assume the role of the AI assistant. '
"Read all the images carefully, and respond to the human's questions with informative, "
'helpful, detailed and polite answers. '
'这是一个好奇的人类和一个人工智能助手之间的对话。假设你扮演这个AI助手的角色。'
'仔细阅读所有的图像,并对人类的问题做出信息丰富、有帮助、详细的和礼貌的回答。')
class YiVLTemplate(Template):
image_placeholder = [[-200], '\n']
use_model = True
def _encode(self, inputs: StdTemplateInputs) -> Dict[str, Any]:
encoded = super()._encode(inputs)
model = self.model
from llava.mm_utils import expand2square
if not hasattr(model, 'vision_tower'):
model = model.model
image_processor = model.vision_tower.image_processor
images = inputs.images or []
for i, image in enumerate(images):
background_color = tuple(int(x * 255) for x in image_processor.image_mean)
image = expand2square(image, background_color)
images[i] = image
if images:
image_tensor = image_processor.preprocess(images, return_tensors='pt')['pixel_values']
encoded['images'] = image_tensor.to(model.dtype)
return encoded
def _data_collator(self, batch: List[Dict[str, Any]], *, padding_to: Optional[int] = None) -> Dict[str, Any]:
res = super()._data_collator(batch, padding_to=padding_to)
images = [b['images'] for b in batch if 'images' in b]
if images:
res['images'] = torch.concat(images)
return res
register_template(
TemplateMeta(
MLLMTemplateType.yi_vl,
prefix=[],
prompt=[[8308], ' Human: {{QUERY}}\n', [8308], ' Assistant:'],
chat_sep=['\n'],
suffix=['\n', [8308]],
default_system=yi_vl_default_system,
template_cls=YiVLTemplate,
system_prefix=['{{SYSTEM}}\n\n']))