# Copyright (c) ModelScope Contributors. All rights reserved. from swift.template import TemplateMeta def test_replace_system_preserves_non_string_elements(): """_replace_system must not drop list elements like ['bos_token_id']. Templates such as ziya, bluelm and emu3_chat use ``prefix=[['bos_token_id'], '{{SYSTEM}}']``. When no system message is provided the prefix is produced by _replace_system, which should keep every non-string element intact and only strip the placeholder from strings. """ meta = TemplateMeta( template_type='_test_replace_system_bug', prefix=[['bos_token_id'], '{{SYSTEM}}'], prompt=['{{QUERY}}'], chat_sep=['\n'], ) # __post_init__ moves prefix to system_prefix and builds a no-system prefix # via _replace_system. The list element must survive. assert any(isinstance(p, list) for p in meta.prefix), (f'_replace_system dropped the bos_token_id list; ' f'meta.prefix={meta.prefix!r}')