test(together_ai): stop depending on a serverless model we do not control

Together moved openai/gpt-oss-20b off serverless, so three tests started
failing with a 400 model_not_available from the live API. None of them was
really testing Together: they cover provider-prefix parsing, prompt shaping
and streaming, all litellm side. Mock the transport and assert those, so the
tests answer to our code instead of a vendor catalog.
This commit is contained in:
Yuneng Jiang 2026-09-15 19:52:00 -07:00
parent c64b821a7e
commit 1aa2e19ee4
No known key found for this signature in database

View file

@ -11,6 +11,7 @@ import io
from unittest.mock import AsyncMock, MagicMock, patch
import httpx
import pytest
import litellm
@ -57,21 +58,49 @@ def test_response_model_none():
assert isinstance(x, litellm.ModelResponse)
TOGETHER_AI_CHAT_URL = "https://api.together.ai/v1/chat/completions"
def _together_ai_chat_response(content="Hello!"):
return httpx.Response(
200,
json={
"id": "chatcmpl-together",
"object": "chat.completion",
"created": 1,
"model": "openai/gpt-oss-20b",
"choices": [
{
"index": 0,
"message": {"role": "assistant", "content": content},
"finish_reason": "stop",
}
],
"usage": {
"prompt_tokens": 1,
"completion_tokens": 1,
"total_tokens": 2,
},
},
request=httpx.Request("POST", TOGETHER_AI_CHAT_URL),
)
def test_completion_custom_provider_model_name():
try:
litellm.cache = None
litellm.cache = None
with patch.object(
HTTPHandler, "post", return_value=_together_ai_chat_response()
) as mock_post:
response = completion(
model="together_ai/openai/gpt-oss-20b",
messages=messages,
logger_fn=logger_fn,
api_key="fake-key",
)
# Add assertions here to check the-response
print(response)
print(response["choices"][0]["finish_reason"])
except litellm.Timeout as e:
pass
except Exception as e:
pytest.fail(f"Error occurred: {e}")
assert mock_post.call_args.kwargs["url"] == TOGETHER_AI_CHAT_URL
assert json.loads(mock_post.call_args.kwargs["data"])["model"] == "openai/gpt-oss-20b"
assert response.choices[0].finish_reason == "stop"
def _openai_mock_response(*args, **kwargs) -> litellm.ModelResponse:
@ -2804,12 +2833,11 @@ def test_completion_together_ai_llama():
# test_completion_together_ai()
def test_customprompt_together_ai():
try:
litellm.set_verbose = False
litellm.num_retries = 0
print("in test_customprompt_together_ai")
print(litellm.success_callback)
print(litellm._async_success_callback)
litellm.set_verbose = False
litellm.num_retries = 0
with patch.object(
HTTPHandler, "post", return_value=_together_ai_chat_response()
) as mock_post:
response = completion(
model="together_ai/openai/gpt-oss-20b",
messages=messages,
@ -2827,14 +2855,14 @@ def test_customprompt_together_ai():
"post_message": "<|im_end|>",
},
},
api_key="fake-key",
)
print(response)
except litellm.exceptions.Timeout as e:
print(f"Timeout Error")
pass
except Exception as e:
print(f"ERROR TYPE {type(e)}")
pytest.fail(f"Error occurred: {e}")
body = json.loads(mock_post.call_args.kwargs["data"])
assert body["messages"] == messages
assert "prompt" not in body
assert "roles" not in body
assert response.choices[0].finish_reason == "stop"
# test_customprompt_together_ai()
@ -3648,19 +3676,42 @@ def test_completion_together_ai_stream():
litellm.set_verbose = True
user_message = "Write 1pg about YC & litellm"
messages = [{"content": user_message, "role": "user"}]
try:
sse_body = (
'data: {"id":"chatcmpl-together","object":"chat.completion.chunk","created":1,'
'"model":"openai/gpt-oss-20b","choices":[{"index":0,"delta":{"role":"assistant",'
'"content":"YC"},"finish_reason":null}]}\n\n'
'data: {"id":"chatcmpl-together","object":"chat.completion.chunk","created":1,'
'"model":"openai/gpt-oss-20b","choices":[{"index":0,"delta":{"content":" and '
'litellm"},"finish_reason":null}]}\n\n'
'data: {"id":"chatcmpl-together","object":"chat.completion.chunk","created":1,'
'"model":"openai/gpt-oss-20b","choices":[{"index":0,"delta":{},'
'"finish_reason":"stop"}]}\n\n'
"data: [DONE]\n\n"
)
stream_response = httpx.Response(
200,
content=sse_body.encode(),
headers={"content-type": "text/event-stream"},
request=httpx.Request("POST", TOGETHER_AI_CHAT_URL),
)
with patch.object(
HTTPHandler, "post", return_value=stream_response
) as mock_post:
response = completion(
model="together_ai/openai/gpt-oss-20b",
messages=messages,
stream=True,
max_tokens=5,
api_key="fake-key",
)
print(response)
for chunk in response:
print(chunk)
# print(string_response)
except Exception as e:
pytest.fail(f"Error occurred: {e}")
chunks = list(response)
assert json.loads(mock_post.call_args.kwargs["data"])["stream"] is True
assert "".join(
chunk.choices[0].delta.content or "" for chunk in chunks
) == "YC and litellm"
assert chunks[-1].choices[0].finish_reason == "stop"
# test_completion_together_ai_stream()