fix(openai): satisfy type-discipline and master-key CI gates

Read ssl_verify through an isinstance-checked helper instead of repeated
cast() calls, and use a non-reserved placeholder key in the new tests.

Signed-off-by: Raphael Zanarelli <zanarelli.dev@gmail.com>
This commit is contained in:
Raphael Zanarelli 2026-10-08 23:23:00 -03:00
parent da4f6974ea
commit 3dca3aee51
2 changed files with 14 additions and 14 deletions

View file

@ -1,3 +1,4 @@
import ssl
import time
import types
from collections.abc import AsyncIterator, Callable, Coroutine, Iterable, Iterator, Mapping
@ -67,6 +68,13 @@ openaiOSeriesConfig: Final = OpenAIOSeriesConfig()
openAIGPT5Config: Final = OpenAIGPT5Config()
def _get_ssl_verify(litellm_params: Mapping[str, object] | None) -> VerifyTypes | None:
value: Final = litellm_params.get("ssl_verify") if litellm_params else None
if isinstance(value, (str, bool, ssl.SSLContext)):
return value
return None
class MistralEmbeddingConfig:
"""
Reference: https://docs.mistral.ai/api/#operation/createEmbedding
@ -804,9 +812,7 @@ class OpenAIChatCompletion(BaseLLM, BaseOpenAILLM):
headers=headers or {},
)
if stream is True and fake_stream is False:
stream_ssl_verify: VerifyTypes | None = (
cast(VerifyTypes | None, litellm_params.get("ssl_verify", None)) if litellm_params else None
)
stream_ssl_verify: VerifyTypes | None = _get_ssl_verify(litellm_params)
return self.streaming(
logging_obj=logging_obj,
headers=headers,
@ -826,9 +832,7 @@ class OpenAIChatCompletion(BaseLLM, BaseOpenAILLM):
else:
if not isinstance(max_retries, int):
raise OpenAIError(status_code=422, message="max retries must be an int")
ssl_verify: VerifyTypes | None = (
cast(VerifyTypes | None, litellm_params.get("ssl_verify", None)) if litellm_params else None
)
ssl_verify: VerifyTypes | None = _get_ssl_verify(litellm_params)
openai_client: OpenAI = self._get_openai_client(
is_async=False,
api_key=api_key,
@ -972,9 +976,7 @@ class OpenAIChatCompletion(BaseLLM, BaseOpenAILLM):
)
for _ in range(2): # if call fails due to alternating messages, retry with reformatted message
try:
ssl_verify: VerifyTypes | None = (
cast(VerifyTypes | None, litellm_params.get("ssl_verify", None)) if litellm_params else None
)
ssl_verify: VerifyTypes | None = _get_ssl_verify(litellm_params)
openai_aclient: AsyncOpenAI = self._get_openai_client(
is_async=True,
api_key=api_key,
@ -1162,9 +1164,7 @@ class OpenAIChatCompletion(BaseLLM, BaseOpenAILLM):
data.update(self.get_stream_options(stream_options=stream_options, api_base=api_base))
for _ in range(2):
try:
ssl_verify: VerifyTypes | None = (
cast(VerifyTypes | None, litellm_params.get("ssl_verify", None)) if litellm_params else None
)
ssl_verify: VerifyTypes | None = _get_ssl_verify(litellm_params)
openai_aclient: AsyncOpenAI = self._get_openai_client(
is_async=True,
api_key=api_key,

View file

@ -57,12 +57,12 @@ def test_cache_key_differs_by_ssl_verify():
Verify cache keys differ when ssl_verify differs to prevent client poisoning across CAs.
"""
params_ca1 = {
"api_key": "sk-1234",
"api_key": "sk-test-key",
"is_async": True,
"ssl_verify": "/path/ca1.pem",
}
params_ca2 = {
"api_key": "sk-1234",
"api_key": "sk-test-key",
"is_async": True,
"ssl_verify": "/path/ca2.pem",
}