From 39b33a3b013337e0209fb5dd96894cdc3880633c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Han?= Date: Mon, 26 May 2025 20:59:03 +0200 Subject: [PATCH] chore: allow to pass CA cert to remote vllm (#2266) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # What does this PR do? The `tls_verify` can now receive a path to a certificate file if the endpoint requires it. Signed-off-by: Sébastien Han --- .../providers/remote/inference/vllm/config.py | 18 +++++++++++++++--- .../providers/remote/inference/vllm/vllm.py | 2 +- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/llama_stack/providers/remote/inference/vllm/config.py b/llama_stack/providers/remote/inference/vllm/config.py index 8530594b6..8ecce6200 100644 --- a/llama_stack/providers/remote/inference/vllm/config.py +++ b/llama_stack/providers/remote/inference/vllm/config.py @@ -4,8 +4,9 @@ # This source code is licensed under the terms described in the LICENSE file in # the root directory of this source tree. +from pathlib import Path -from pydantic import BaseModel, Field +from pydantic import BaseModel, Field, field_validator from llama_stack.schema_utils import json_schema_type @@ -24,11 +25,22 @@ class VLLMInferenceAdapterConfig(BaseModel): default="fake", description="The API token", ) - tls_verify: bool = Field( + tls_verify: bool | str = Field( default=True, - description="Whether to verify TLS certificates", + description="Whether to verify TLS certificates. Can be a boolean or a path to a CA certificate file.", ) + @field_validator("tls_verify") + @classmethod + def validate_tls_verify(cls, v): + if isinstance(v, str): + cert_path = Path(v) + if not cert_path.exists(): + raise ValueError(f"TLS certificate file does not exist: {v}") + if not cert_path.is_file(): + raise ValueError(f"TLS certificate path is not a file: {v}") + return v + @classmethod def sample_run_config( cls, diff --git a/llama_stack/providers/remote/inference/vllm/vllm.py b/llama_stack/providers/remote/inference/vllm/vllm.py index d00218dd5..fe2d8bec1 100644 --- a/llama_stack/providers/remote/inference/vllm/vllm.py +++ b/llama_stack/providers/remote/inference/vllm/vllm.py @@ -313,7 +313,7 @@ class VLLMInferenceAdapter(Inference, ModelsProtocolPrivate): return AsyncOpenAI( base_url=self.config.url, api_key=self.config.api_token, - http_client=None if self.config.tls_verify else httpx.AsyncClient(verify=False), + http_client=httpx.AsyncClient(verify=self.config.tls_verify), ) async def completion(