"vscode:/vscode.git/clone" did not exist on "edd270bc781e5a3d250827ac7039d71b8562bb04"
test_stop_reason.py 2.1 KB
Newer Older
1
# SPDX-License-Identifier: Apache-2.0
2
3
4
5
6
"""Test the different finish_reason="stop" situations during generation:
    1. One of the provided stop strings
    2. One of the provided stop tokens
    3. The EOS token

7
Run `pytest tests/engine/test_stop_reason.py`.
8
9
10
"""

import pytest
11
import os
12
13
14
import transformers

from vllm import SamplingParams
15
from ..utils import models_path_prefix
16

zhuwenwen's avatar
zhuwenwen committed
17
MODEL = os.path.join(models_path_prefix, "distilbert/distilgpt2")
18
19
20
21
22
23
24
STOP_STR = "."
SEED = 42
MAX_TOKENS = 1024


@pytest.fixture
def vllm_model(vllm_runner):
25
26
    with vllm_runner(MODEL) as vllm_model:
        yield vllm_model
27
28
29
30
31
32
33
34
35
36


def test_stop_reason(vllm_model, example_prompts):
    tokenizer = transformers.AutoTokenizer.from_pretrained(MODEL)
    stop_token_id = tokenizer.convert_tokens_to_ids(STOP_STR)
    llm = vllm_model.model

    # test stop token
    outputs = llm.generate(example_prompts,
                           sampling_params=SamplingParams(
37
                               ignore_eos=True,
38
39
40
41
42
43
44
45
46
47
48
                               seed=SEED,
                               max_tokens=MAX_TOKENS,
                               stop_token_ids=[stop_token_id]))
    for output in outputs:
        output = output.outputs[0]
        assert output.finish_reason == "stop"
        assert output.stop_reason == stop_token_id

    # test stop string
    outputs = llm.generate(example_prompts,
                           sampling_params=SamplingParams(
49
50
51
52
                               ignore_eos=True,
                               seed=SEED,
                               max_tokens=MAX_TOKENS,
                               stop="."))
53
54
55
56
57
58
59
60
61
62
63
64
65
    for output in outputs:
        output = output.outputs[0]
        assert output.finish_reason == "stop"
        assert output.stop_reason == STOP_STR

    # test EOS token
    outputs = llm.generate(example_prompts,
                           sampling_params=SamplingParams(
                               seed=SEED, max_tokens=MAX_TOKENS))
    for output in outputs:
        output = output.outputs[0]
        assert output.finish_reason == "length" or (
            output.finish_reason == "stop" and output.stop_reason is None)