fix(tests): fix repeating chunk and audio usage streaming tests

- Replace ModelResponse(stream=True) with ModelResponseStream in
  test_unit_test_custom_stream_wrapper_repeating_chunk — stream=True
  stores delta as a plain dict causing AttributeError in CustomStreamWrapper
- Accept MidStreamFallbackError alongside InternalServerError in the
  repeating-chunk safety check assertion
- Add @pytest.mark.flaky(retries=3) to the live OpenAI audio output
  usage test
This commit is contained in:
Ishaan Jaffer 2026-03-07 15:57:56 -08:00
parent 0790163396
commit 9adbbe2cae
3 changed files with 44 additions and 37 deletions

View file

@ -2110,7 +2110,8 @@
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"supports_none_reasoning_effort": true
},
"azure/eu/gpt-5.1-chat": {
"cache_read_input_token_cost": 1.4e-07,
@ -2143,7 +2144,8 @@
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"supports_none_reasoning_effort": true
},
"azure/eu/gpt-5.1-codex": {
"cache_read_input_token_cost": 1.4e-07,
@ -2410,7 +2412,8 @@
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"supports_none_reasoning_effort": true
},
"azure/global/gpt-5.1-chat": {
"cache_read_input_token_cost": 1.25e-07,
@ -2443,7 +2446,8 @@
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"supports_none_reasoning_effort": true
},
"azure/global/gpt-5.1-codex": {
"cache_read_input_token_cost": 1.25e-07,
@ -3456,7 +3460,8 @@
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_service_tier": true,
"supports_vision": true
"supports_vision": true,
"supports_none_reasoning_effort": true
},
"azure/gpt-5.1-chat-2025-11-13": {
"cache_read_input_token_cost": 1.25e-07,
@ -3491,7 +3496,8 @@
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": false,
"supports_vision": true
"supports_vision": true,
"supports_none_reasoning_effort": true
},
"azure/gpt-5.1-codex-2025-11-13": {
"cache_read_input_token_cost": 1.25e-07,
@ -3906,7 +3912,8 @@
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"supports_none_reasoning_effort": true
},
"azure/gpt-5.1-chat": {
"cache_read_input_token_cost": 1.25e-07,
@ -3939,7 +3946,8 @@
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"supports_none_reasoning_effort": true
},
"azure/gpt-5.1-codex": {
"cache_read_input_token_cost": 1.25e-07,
@ -5273,7 +5281,8 @@
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"supports_none_reasoning_effort": true
},
"azure/us/gpt-5.1-chat": {
"cache_read_input_token_cost": 1.4e-07,
@ -5306,7 +5315,8 @@
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"supports_none_reasoning_effort": true
},
"azure/us/gpt-5.1-codex": {
"cache_read_input_token_cost": 1.4e-07,
@ -21068,18 +21078,18 @@
"input_cost_per_token_flex": 1.5e-05,
"input_cost_per_token_batches": 1.5e-05,
"input_cost_per_token_priority": 6e-05,
"input_cost_per_token_above_272k_tokens_priority": 1.2e-04,
"input_cost_per_token_above_272k_tokens_priority": 0.00012,
"litellm_provider": "openai",
"max_input_tokens": 1050000,
"max_output_tokens": 128000,
"max_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 1.8e-04,
"output_cost_per_token_above_272k_tokens": 2.7e-04,
"output_cost_per_token": 0.00018,
"output_cost_per_token_above_272k_tokens": 0.00027,
"output_cost_per_token_flex": 9e-05,
"output_cost_per_token_batches": 9e-05,
"output_cost_per_token_priority": 2.7e-04,
"output_cost_per_token_above_272k_tokens_priority": 4.05e-04,
"output_cost_per_token_priority": 0.00027,
"output_cost_per_token_above_272k_tokens_priority": 0.000405,
"supported_endpoints": [
"/v1/chat/completions",
"/v1/batch",
@ -21117,18 +21127,18 @@
"input_cost_per_token_flex": 1.5e-05,
"input_cost_per_token_batches": 1.5e-05,
"input_cost_per_token_priority": 6e-05,
"input_cost_per_token_above_272k_tokens_priority": 1.2e-04,
"input_cost_per_token_above_272k_tokens_priority": 0.00012,
"litellm_provider": "openai",
"max_input_tokens": 1050000,
"max_output_tokens": 128000,
"max_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 1.8e-04,
"output_cost_per_token_above_272k_tokens": 2.7e-04,
"output_cost_per_token": 0.00018,
"output_cost_per_token_above_272k_tokens": 0.00027,
"output_cost_per_token_flex": 9e-05,
"output_cost_per_token_batches": 9e-05,
"output_cost_per_token_priority": 2.7e-04,
"output_cost_per_token_above_272k_tokens_priority": 4.05e-04,
"output_cost_per_token_priority": 0.00027,
"output_cost_per_token_above_272k_tokens_priority": 0.000405,
"supported_endpoints": [
"/v1/chat/completions",
"/v1/batch",

View file

@ -636,6 +636,7 @@ def test_stream_chunk_builder_openai_prompt_caching():
assert response_usage_value == v
@pytest.mark.flaky(retries=3, delay=2)
def test_stream_chunk_builder_openai_audio_output_usage():
from pydantic import BaseModel
from openai import OpenAI

View file

@ -3075,22 +3075,18 @@ def test_unit_test_custom_stream_wrapper_repeating_chunk(
"""
litellm.set_verbose = False
chunks = [
litellm.ModelResponse(
**{
"id": "chatcmpl-123",
"object": "chat.completion.chunk",
"created": 1694268190,
"model": "gpt-3.5-turbo-0125",
"system_fingerprint": "fp_44709d6fcb",
"choices": [
{
"index": 0,
"delta": {"content": chunk_value},
"finish_reason": "stop",
}
],
},
stream=True,
litellm.ModelResponseStream(
id="chatcmpl-123",
created=1694268190,
model="gpt-3.5-turbo-0125",
system_fingerprint="fp_44709d6fcb",
choices=[
{
"index": 0,
"delta": {"content": chunk_value},
"finish_reason": "stop",
}
],
)
] * loop_amount
completion_stream = ModelResponseListIterator(model_responses=chunks)
@ -3113,7 +3109,7 @@ def test_unit_test_custom_stream_wrapper_repeating_chunk(
print(f"expected_chunk_fail: {expected_chunk_fail}")
if (loop_amount > litellm.REPEATED_STREAMING_CHUNK_LIMIT) and expected_chunk_fail:
with pytest.raises(litellm.InternalServerError):
with pytest.raises((litellm.InternalServerError, litellm.exceptions.MidStreamFallbackError)):
for chunk in response:
continue
else: