# SPDX-License-Identifier: Apache-2.0 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project import os import shutil import pytest from huggingface_hub import snapshot_download from vllm.plugins.lora_resolvers.filesystem_resolver import FilesystemResolver MODEL_NAME = "mistralai/Mistral-7B-v0.1" LORA_NAME = "typeof/zephyr-7b-beta-lora" PA_NAME = "swapnilbp/llama_tweet_ptune" @pytest.fixture(scope='module') def adapter_cache(request, tmpdir_factory): # Create dir that mimics the structure of the adapter cache adapter_cache = tmpdir_factory.mktemp( request.module.__name__) / "adapter_cache" return adapter_cache @pytest.fixture(scope="module") def zephyr_lora_files(): return snapshot_download(repo_id=LORA_NAME) @pytest.fixture(scope="module") def pa_files(): return snapshot_download(repo_id=PA_NAME) @pytest.mark.asyncio async def test_filesystem_resolver(adapter_cache, zephyr_lora_files): model_files = adapter_cache / LORA_NAME shutil.copytree(zephyr_lora_files, model_files) fs_resolver = FilesystemResolver(adapter_cache) assert fs_resolver is not None lora_request = await fs_resolver.resolve_lora(MODEL_NAME, LORA_NAME) assert lora_request is not None assert lora_request.lora_name == LORA_NAME assert lora_request.lora_path == os.path.join(adapter_cache, LORA_NAME) @pytest.mark.asyncio async def test_missing_adapter(adapter_cache): fs_resolver = FilesystemResolver(adapter_cache) assert fs_resolver is not None missing_lora_request = await fs_resolver.resolve_lora(MODEL_NAME, "foobar") assert missing_lora_request is None @pytest.mark.asyncio async def test_nonlora_adapter(adapter_cache, pa_files): model_files = adapter_cache / PA_NAME shutil.copytree(pa_files, model_files) fs_resolver = FilesystemResolver(adapter_cache) assert fs_resolver is not None pa_request = await fs_resolver.resolve_lora(MODEL_NAME, PA_NAME) assert pa_request is None