fix llm tests

This commit is contained in:
Sameer Kankute 2026-02-17 20:13:23 +05:30
parent fe20e66a1d
commit 550bb621f7
4 changed files with 45 additions and 15 deletions

View file

@ -654,7 +654,7 @@ def test_transform_text_to_speech_request_ssml_with_mstts_namespace(azure_tts_co
assert "rate='+20%'" in ssml
@patch("litellm.llms.custom_httpx.llm_http_handler.HTTPHandler.post")
@patch("litellm.llms.custom_httpx.http_handler.HTTPHandler.post")
def test_litellm_speech_with_ssml_passthrough(mock_post):
"""
Test that litellm.speech passes SSML through to Azure AVA without transformation
@ -666,13 +666,13 @@ def test_litellm_speech_with_ssml_passthrough(mock_post):
</prosody>
</voice>
</speak>"""
mock_response = Mock(spec=httpx.Response)
mock_response.content = b"fake_audio_data"
mock_response.status_code = 200
mock_response.headers = {"content-type": "audio/mpeg"}
mock_post.return_value = mock_response
litellm.speech(
model="azure/speech/tts",
input=raw_ssml,
@ -680,15 +680,15 @@ def test_litellm_speech_with_ssml_passthrough(mock_post):
api_key="test-key",
api_base="https://eastus.api.cognitive.microsoft.com"
)
mock_post.assert_called_once()
call_kwargs = mock_post.call_args.kwargs
# Verify the SSML was sent in the request body
assert "data" in call_kwargs
assert call_kwargs["data"] == raw_ssml
print("REQUEST BODY: ", json.dumps(call_kwargs["data"], indent=4))
# Verify the SSML contains the original content
assert "en-US-JennyNeural" in call_kwargs["data"]
assert "fast" in call_kwargs["data"]

View file

@ -41,12 +41,18 @@ class TestVertexAIRerankTransform:
for var, value in self._saved_env.items():
os.environ[var] = value
@patch('litellm.llms.vertex_ai.rerank.transformation.get_secret_str')
@patch('litellm.llms.vertex_ai.rerank.transformation.VertexAIRerankConfig._ensure_access_token')
def test_get_complete_url(self, mock_ensure_access_token):
def test_get_complete_url(self, mock_ensure_access_token, mock_get_secret_str):
"""Test URL generation for Vertex AI Discovery Engine rerank API."""
# Mock _ensure_access_token to return (token, project_id)
mock_ensure_access_token.return_value = ("mock-token", None)
# Mock get_secret_str to return the environment variable value
def mock_get_secret(key):
return os.environ.get(key)
mock_get_secret_str.side_effect = mock_get_secret
# Test with project ID from environment
with patch.dict(os.environ, {"VERTEXAI_PROJECT": "test-project-123"}):
url = self.config.get_complete_url(api_base=None, model=self.model)
@ -62,6 +68,9 @@ class TestVertexAIRerankTransform:
litellm.vertex_project = None
original_project = litellm.vertex_project
litellm.vertex_project = "litellm-project-456"
# Reset mock call count
mock_ensure_access_token.reset_mock()
mock_ensure_access_token.return_value = ("mock-token", "litellm-project-456")
try:
url = self.config.get_complete_url(api_base=None, model=self.model)
expected_url = "https://discoveryengine.googleapis.com/v1/projects/litellm-project-456/locations/global/rankingConfigs/default_ranking_config:rank"
@ -78,28 +87,37 @@ class TestVertexAIRerankTransform:
litellm.vertex_project = None
original_project = litellm.vertex_project
litellm.vertex_project = None
# Reset mock and set it to raise an error
mock_ensure_access_token.reset_mock()
mock_ensure_access_token.side_effect = ValueError("Vertex AI project ID is required")
try:
with pytest.raises(ValueError, match="Vertex AI project ID is required"):
self.config.get_complete_url(api_base=None, model=self.model)
finally:
litellm.vertex_project = original_project
@patch('litellm.llms.vertex_ai.rerank.transformation.get_secret_str')
@patch('litellm.llms.vertex_ai.rerank.transformation.VertexAIRerankConfig._ensure_access_token')
def test_validate_environment(self, mock_ensure_access_token):
def test_validate_environment(self, mock_ensure_access_token, mock_get_secret_str):
"""Test environment validation and header setup."""
# Mock the authentication
mock_ensure_access_token.return_value = ("test-access-token", "test-project-123")
# Mock get_secret_str to return the environment variable value
def mock_get_secret(key):
return os.environ.get(key)
mock_get_secret_str.side_effect = mock_get_secret
# Mock the credential and project methods
with patch.object(self.config, 'get_vertex_ai_credentials', return_value=None), \
patch.object(self.config, 'get_vertex_ai_project', return_value="test-project-123"):
headers = self.config.validate_environment(
headers={},
model=self.model,
api_key=None
)
expected_headers = {
"Authorization": "Bearer test-access-token",
"Content-Type": "application/json",

View file

@ -119,7 +119,9 @@ async def test_vertex_ai_gpt_oss_simple_request():
with patch.object(client, "post", side_effect=mock_post_func) as mock_post, \
patch.object(VertexLLM, "_ensure_access_token", return_value=("fake-token", "pathrise-convert-1606954137718")), \
patch.dict('sys.modules', {'vertexai': mock_vertexai, 'vertexai.preview': mock_vertexai.preview}):
patch('litellm.llms.vertex_ai.gemini.vertex_and_google_ai_studio_gemini.VertexAIError', Exception), \
patch.dict('sys.modules', {'vertexai': mock_vertexai, 'vertexai.preview': mock_vertexai.preview}), \
patch.dict(os.environ, {"VERTEXAI_PROJECT": "pathrise-convert-1606954137718"}):
response = await litellm.acompletion(
model="vertex_ai/openai/gpt-oss-20b-maas",
messages=[
@ -222,7 +224,9 @@ async def test_vertex_ai_gpt_oss_reasoning_effort():
with patch.object(client, "post", side_effect=mock_post_func) as mock_post, \
patch.object(VertexLLM, "_ensure_access_token", return_value=("fake-token", "pathrise-convert-1606954137718")), \
patch.dict('sys.modules', {'vertexai': mock_vertexai, 'vertexai.preview': mock_vertexai.preview}):
patch('litellm.llms.vertex_ai.gemini.vertex_and_google_ai_studio_gemini.VertexAIError', Exception), \
patch.dict('sys.modules', {'vertexai': mock_vertexai, 'vertexai.preview': mock_vertexai.preview}), \
patch.dict(os.environ, {"VERTEXAI_PROJECT": "pathrise-convert-1606954137718"}):
response = await litellm.acompletion(
model="vertex_ai/openai/gpt-oss-20b-maas",
messages=[

View file

@ -301,8 +301,16 @@ async def test_watsonx_gpt_oss_prompt_transformation(monkeypatch):
async def mock_post_func(*args, **kwargs):
return mock_completion_response
# Mock the token generation response to avoid actual API call
mock_token_get_response = Mock()
mock_token_get_response.json.return_value = {
"access_token": "mock_access_token",
"expires_in": 3600,
}
mock_token_get_response.raise_for_status = Mock()
with patch.object(client, "post", side_effect=mock_post_func) as mock_post, patch.object(
litellm.module_level_client, "post", return_value=mock_token_response
litellm.module_level_client, "post", return_value=mock_token_get_response
), patch(
"litellm.litellm_core_utils.prompt_templates.huggingface_template_handler._aget_tokenizer_config",
side_effect=mock_aget_tokenizer_config,