# Copyright (c) Alibaba, Inc. and its affiliates. import hashlib import inspect import math import os import re from contextlib import contextmanager, nullcontext from copy import deepcopy from dataclasses import asdict from functools import partial, wraps from typing import TYPE_CHECKING, Any, Callable, Dict, List, Literal, Optional, Tuple, Union import torch import torch.nn as nn import torch.nn.functional as F from modelscope.hub.utils.utils import get_cache_dir from peft import PeftModel from PIL import Image from torch.nn.utils.rnn import pad_sequence from transformers import StoppingCriteriaList from transformers.integrations import is_deepspeed_zero3_enabled from transformers.utils import strtobool from swift.utils import get_dist_setting, get_env_args, get_logger, use_torchacc from ..utils import Processor, ProcessorMixin from .template_inputs import InferRequest, StdTemplateInputs, TemplateInputs from .utils import Context, ContextType, StopWordsCriteria, fetch_one, findall, split_str_parts_by from .vision_utils import load_audio, load_batch, load_image, rescale_image logger = get_logger() if TYPE_CHECKING: from .template_meta import TemplateMeta class MaxLengthError(ValueError): pass class Template(ProcessorMixin): special_tokens = ['', '