Spaces:
Configuration error
Configuration error
import json | |
from unittest.mock import MagicMock, patch | |
import pytest | |
import requests | |
from click.testing import CliRunner | |
from litellm.proxy.client.cli.main import cli | |
def mock_chat_client(): | |
with patch("litellm.proxy.client.cli.commands.chat.ChatClient") as mock: | |
yield mock | |
def cli_runner(): | |
return CliRunner() | |
def test_chat_completions_success(cli_runner, mock_chat_client): | |
# Mock response data | |
mock_response = { | |
"id": "chatcmpl-123", | |
"object": "chat.completion", | |
"created": 1677858242, | |
"model": "gpt-4", | |
"choices": [ | |
{ | |
"message": { | |
"role": "assistant", | |
"content": "Hello! How can I help you today?", | |
}, | |
"finish_reason": "stop", | |
"index": 0, | |
} | |
], | |
} | |
mock_instance = mock_chat_client.return_value | |
mock_instance.completions.return_value = mock_response | |
# Run command | |
result = cli_runner.invoke( | |
cli, | |
[ | |
"chat", | |
"completions", | |
"gpt-4", | |
"-m", | |
"user:Hello!", | |
"--temperature", | |
"0.7", | |
"--max-tokens", | |
"100", | |
], | |
) | |
# Verify | |
assert result.exit_code == 0 | |
output_data = json.loads(result.output) | |
assert output_data == mock_response | |
mock_instance.completions.assert_called_once_with( | |
model="gpt-4", | |
messages=[{"role": "user", "content": "Hello!"}], | |
temperature=0.7, | |
max_tokens=100, | |
top_p=None, | |
n=None, | |
presence_penalty=None, | |
frequency_penalty=None, | |
user=None, | |
) | |
def test_chat_completions_multiple_messages(cli_runner, mock_chat_client): | |
# Mock response data | |
mock_response = { | |
"id": "chatcmpl-123", | |
"object": "chat.completion", | |
"created": 1677858242, | |
"model": "gpt-4", | |
"choices": [ | |
{ | |
"message": { | |
"role": "assistant", | |
"content": "Paris has a population of about 2.2 million.", | |
}, | |
"finish_reason": "stop", | |
"index": 0, | |
} | |
], | |
} | |
mock_instance = mock_chat_client.return_value | |
mock_instance.completions.return_value = mock_response | |
# Run command | |
result = cli_runner.invoke( | |
cli, | |
[ | |
"chat", | |
"completions", | |
"gpt-4", | |
"-m", | |
"system:You are a helpful assistant", | |
"-m", | |
"user:What's the population of Paris?", | |
], | |
) | |
# Verify | |
assert result.exit_code == 0 | |
output_data = json.loads(result.output) | |
assert output_data == mock_response | |
mock_instance.completions.assert_called_once_with( | |
model="gpt-4", | |
messages=[ | |
{"role": "system", "content": "You are a helpful assistant"}, | |
{"role": "user", "content": "What's the population of Paris?"}, | |
], | |
temperature=None, | |
max_tokens=None, | |
top_p=None, | |
n=None, | |
presence_penalty=None, | |
frequency_penalty=None, | |
user=None, | |
) | |
def test_chat_completions_no_messages(cli_runner, mock_chat_client): | |
# Run command without any messages | |
result = cli_runner.invoke(cli, ["chat", "completions", "gpt-4"]) | |
# Verify | |
assert result.exit_code == 2 | |
assert "At least one message is required" in result.output | |
mock_instance = mock_chat_client.return_value | |
mock_instance.completions.assert_not_called() | |
def test_chat_completions_invalid_message_format(cli_runner, mock_chat_client): | |
# Run command with invalid message format | |
result = cli_runner.invoke( | |
cli, ["chat", "completions", "gpt-4", "-m", "invalid-format"] | |
) | |
# Verify | |
assert result.exit_code == 2 | |
assert "Invalid message format" in result.output | |
mock_instance = mock_chat_client.return_value | |
mock_instance.completions.assert_not_called() | |
def test_chat_completions_http_error(cli_runner, mock_chat_client): | |
# Mock HTTP error | |
mock_instance = mock_chat_client.return_value | |
mock_error_response = MagicMock() | |
mock_error_response.status_code = 400 | |
mock_error_response.json.return_value = { | |
"error": "Invalid request", | |
"message": "Invalid model specified", | |
} | |
mock_instance.completions.side_effect = requests.exceptions.HTTPError( | |
response=mock_error_response | |
) | |
# Run command | |
result = cli_runner.invoke( | |
cli, ["chat", "completions", "invalid-model", "-m", "user:Hello"] | |
) | |
# Verify | |
assert result.exit_code == 1 | |
assert "Error: HTTP 400" in result.output | |
assert "Invalid request" in result.output | |
assert "Invalid model specified" in result.output | |
def test_chat_completions_all_parameters(cli_runner, mock_chat_client): | |
# Mock response data | |
mock_response = { | |
"id": "chatcmpl-123", | |
"object": "chat.completion", | |
"created": 1677858242, | |
"model": "gpt-4", | |
"choices": [ | |
{ | |
"message": { | |
"role": "assistant", | |
"content": "Response with all parameters set", | |
}, | |
"finish_reason": "stop", | |
"index": 0, | |
} | |
], | |
} | |
mock_instance = mock_chat_client.return_value | |
mock_instance.completions.return_value = mock_response | |
# Run command with all available parameters | |
result = cli_runner.invoke( | |
cli, | |
[ | |
"chat", | |
"completions", | |
"gpt-4", | |
"-m", | |
"user:Test message", | |
"--temperature", | |
"0.7", | |
"--top-p", | |
"0.9", | |
"--n", | |
"1", | |
"--max-tokens", | |
"100", | |
"--presence-penalty", | |
"0.5", | |
"--frequency-penalty", | |
"0.5", | |
"--user", | |
"test-user", | |
], | |
) | |
# Verify | |
assert result.exit_code == 0 | |
output_data = json.loads(result.output) | |
assert output_data == mock_response | |
mock_instance.completions.assert_called_once_with( | |
model="gpt-4", | |
messages=[{"role": "user", "content": "Test message"}], | |
temperature=0.7, | |
top_p=0.9, | |
n=1, | |
max_tokens=100, | |
presence_penalty=0.5, | |
frequency_penalty=0.5, | |
user="test-user", | |
) | |