| 1 | # SPDX-License-Identifier: Apache-2.0 |
| 2 | # SPDX-FileCopyrightText: Copyright contributors to the vLLM project |
| 3 | import pytest |
| 4 | |
| 5 | from vllm.renderers.inputs.preprocess import ( |
| 6 | parse_dec_only_prompt, |
| 7 | parse_enc_dec_prompt, |
| 8 | prompt_to_seq, |
| 9 | ) |
| 10 | |
| 11 | |
| 12 | def test_empty_input(): |
| 13 | assert prompt_to_seq([]) == [] |
| 14 | assert prompt_to_seq([[]]) == [[]] |
| 15 | assert prompt_to_seq([[], []]) == [[], []] |
| 16 | |
| 17 | |
| 18 | def test_text_input(): |
| 19 | assert prompt_to_seq("foo") == ["foo"] |
| 20 | assert prompt_to_seq(["foo"]) == ["foo"] |
| 21 | assert prompt_to_seq(["foo", "bar"]) == ["foo", "bar"] |
| 22 | |
| 23 | |
| 24 | def test_tokens_input(): |
| 25 | assert prompt_to_seq([1, 2]) == [[1, 2]] |
| 26 | assert prompt_to_seq([[1, 2]]) == [[1, 2]] |
| 27 | assert prompt_to_seq([[1, 2], [3, 4]]) == [[1, 2], [3, 4]] |
| 28 | |
| 29 | |
| 30 | def test_text_tokens_input(): |
| 31 | assert prompt_to_seq([[1, 2], "foo"]) == [[1, 2], "foo"] |
| 32 | assert prompt_to_seq(["foo", [1, 2]]) == ["foo", [1, 2]] |
| 33 | |
| 34 | |
| 35 | def test_bytes_input(): |
| 36 | assert prompt_to_seq(b"foo") == [b"foo"] |
| 37 | assert prompt_to_seq([b"foo"]) == [b"foo"] |
| 38 | assert prompt_to_seq([b"foo", b"bar"]) == [b"foo", b"bar"] |
| 39 | |
| 40 | |
| 41 | def test_dict_input(): |
| 42 | assert prompt_to_seq({"prompt": "foo"}) == [{"prompt": "foo"}] |
| 43 | assert prompt_to_seq([{"prompt": "foo"}]) == [{"prompt": "foo"}] |
| 44 | assert prompt_to_seq([{"prompt": "foo"}, {"prompt_token_ids": [1, 2]}]) == [ |
| 45 | {"prompt": "foo"}, |
| 46 | {"prompt_token_ids": [1, 2]}, |
| 47 | ] |
| 48 | |
| 49 | |
| 50 | def test_parse_dec_only_prompt_rejects_non_string_prompt_field(): |
| 51 | with pytest.raises(TypeError, match="Prompt text should be a string"): |
| 52 | parse_dec_only_prompt({"prompt": [1, 2, 3], "cache_salt": "abc"}) |
| 53 | |
| 54 | |
| 55 | def test_parse_dec_only_prompt_rejects_non_string_prompt_list(): |
| 56 | with pytest.raises(TypeError, match="Prompt text should be a string"): |
| 57 | parse_dec_only_prompt({"prompt": [1, "x"]}) |
| 58 | |
| 59 | |
| 60 | def test_parse_enc_dec_prompt_rejects_nested_non_string_prompt_field(): |
| 61 | with pytest.raises(TypeError, match="Prompt text should be a string"): |
| 62 | parse_enc_dec_prompt( |
| 63 | { |
| 64 | "encoder_prompt": {"prompt": [1, 2, 3]}, |
| 65 | "decoder_prompt": {"prompt": [4, 5]}, |
| 66 | } |
| 67 | ) |