Files
litellm/tests/pass_through_tests/test_hosted_vllm_passthrough.py
T
Jean-Adrien Ducastaing 086e557d78 fix: use vllm passthrough config for hosted vllm provider instead of raising error (#16537)
* fix(passthrough): use VLLM passthrough config for hosted VLLM provider instead of raising an error

* test(passthrough): add tests for hosted VLLM passthrough configuration and routing

* fix account linking for CLA
2025-11-12 09:12:14 -08:00

72 lines
2.6 KiB
Python

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