from typing import Type

import pytest

from ..conftest import AphroditeRunner, HfRunner
from .utils import check_logprobs_close

models = ["qwen/qwen-vl"]


@pytest.mark.parametrize("dtype", ["half"])
@pytest.mark.parametrize("max_tokens", [32])
@pytest.mark.parametrize("num_logprobs", [5])
@pytest.mark.parametrize("model", models)
def test_text_only_qwen_model(
    hf_runner: Type[HfRunner],
    aphrodite_runner: Type[AphroditeRunner],
    example_prompts,
    model: str,
    *,
    dtype: str,
    max_tokens: int,
    num_logprobs: int,
):
    # This test checks language inputs only, since the visual component
    # for qwen-vl is still unsupported in Aphrodite. In the near-future, the
    # implementation and this test will be extended to consider
    # visual inputs as well.
    with hf_runner(model, dtype=dtype, is_vision_model=False) as hf_model:
        hf_outputs = hf_model.generate_greedy_logprobs_limit(
            example_prompts,
            max_tokens,
            num_logprobs=num_logprobs,
        )

    with aphrodite_runner(model, dtype=dtype) as aphrodite_model:
        aphrodite_outputs = aphrodite_model.generate_greedy_logprobs(
            example_prompts,
            max_tokens,
            num_logprobs=num_logprobs,
        )

    check_logprobs_close(
        outputs_0_lst=hf_outputs,
        outputs_1_lst=aphrodite_outputs,
        name_0="hf",
        name_1="aphrodite",
    )
