import asyncio from unittest.mock import AsyncMock, patch import httpx import pytest from litellm.passthrough.main import allm_passthrough_route from litellm.llms.custom_httpx.http_handler import AsyncHTTPHandler from litellm.utils import ProviderConfigManager from litellm.types.utils import LlmProviders from litellm.llms.vllm.passthrough.transformation import ( VLLMPassthroughConfig, ) def test_get_provider_passthrough_config_for_hosted_vllm_returns_vllm_config(): # When requesting passthrough config for HOSTED_VLLM cfg = ProviderConfigManager.get_provider_passthrough_config( model="hosted_vllm/my-deployment", provider=LlmProviders.HOSTED_VLLM, ) # Then we should get a VLLMPassthroughConfig instance assert isinstance(cfg, VLLMPassthroughConfig) @pytest.mark.asyncio async def test_allm_passthrough_route_with_hosted_vllm_model_does_not_raise(): # Given a hosted_vllm model and an async http client client = AsyncHTTPHandler() # Mock the provider resolution to ensure we use hosted_vllm and provide api_base with patch( "litellm.passthrough.main.get_llm_provider", return_value=( "my-deployment", # normalized model name "hosted_vllm", # provider "fake-api-key", # api key (not required for vllm) "http://localhost:8090", # api base ), ): # Mock the underlying AsyncClient.send to avoid real network I/O fake_request = httpx.Request( method="POST", url="http://localhost:8090/v1/chat/completions" ) fake_response = httpx.Response( status_code=200, content=b'{\n "ok": true\n}', request=fake_request, headers={"content-type": "application/json"}, ) with patch.object( client.client, "send", new=AsyncMock(return_value=fake_response) ): # When calling the async passthrough route with a hosted_vllm/* model response = await allm_passthrough_route( method="POST", endpoint="v1/chat/completions", model="hosted_vllm/my-deployment", api_base="http://localhost:8090", json={ "model": "anything", # will be replaced internally with normalized model "messages": [{"role": "user", "content": "Hello"}], }, client=client, ) # Then it should not raise and return a successful httpx.Response assert isinstance(response, httpx.Response) assert response.status_code == 200