perf: replace enum construction with frozenset lookup in _is_streaming_request (#20302)

CallTypes(call_type) was constructing an enum from string on every call,
taking ~4.6µs/call (69.6% of function time). Replace with a frozenset
membership test for ~0.8µs/call (8.3x faster).
This commit is contained in:
ryan-crabbe
2026-02-07 10:50:57 -08:00
committed by GitHub
parent 606b9be0f7
commit 14c2b5da91
2 changed files with 43 additions and 17 deletions
+9 -17
View File
@@ -2081,6 +2081,14 @@ def _is_async_request(
return False
_STREAMING_CALL_TYPES = frozenset({
CallTypes.generate_content_stream,
CallTypes.agenerate_content_stream,
CallTypes.generate_content_stream.value,
CallTypes.agenerate_content_stream.value,
})
def _is_streaming_request(
kwargs: Dict[str, Any],
call_type: Union[CallTypes, str],
@@ -2093,23 +2101,7 @@ def _is_streaming_request(
"""
if "stream" in kwargs and kwargs["stream"] is True:
return True
#########################################################
# Check if it's a google genai streaming request
if isinstance(call_type, str):
# check if it can be casted to CallTypes
try:
call_type = CallTypes(call_type)
except ValueError:
return False
if (
call_type == CallTypes.generate_content_stream
or call_type == CallTypes.agenerate_content_stream
):
return True
#########################################################
return False
return call_type in _STREAMING_CALL_TYPES
def _select_tokenizer(
+34
View File
@@ -18,10 +18,12 @@ from litellm.types.utils import (
ModelResponseStream,
StreamingChoices,
)
from litellm.types.utils import CallTypes
from litellm.utils import (
ProviderConfigManager,
TextCompletionStreamWrapper,
_check_provider_match,
_is_streaming_request,
get_llm_provider,
get_optional_params_image_gen,
is_cached_message,
@@ -3270,3 +3272,35 @@ class TestDropParamsWithPromptCacheKey:
assert "prompt_cache_key" not in result
# temperature should remain (it's supported by Bedrock)
assert result.get("temperature") == 0.7
class TestIsStreamingRequest:
def test_stream_true_in_kwargs(self):
assert _is_streaming_request(kwargs={"stream": True}, call_type="acompletion") is True
def test_stream_false_in_kwargs(self):
assert _is_streaming_request(kwargs={"stream": False}, call_type="acompletion") is False
def test_no_stream_in_kwargs(self):
assert _is_streaming_request(kwargs={}, call_type="acompletion") is False
def test_generate_content_stream_string(self):
assert _is_streaming_request(kwargs={}, call_type=CallTypes.generate_content_stream.value) is True
def test_agenerate_content_stream_string(self):
assert _is_streaming_request(kwargs={}, call_type=CallTypes.agenerate_content_stream.value) is True
def test_generate_content_stream_enum(self):
assert _is_streaming_request(kwargs={}, call_type=CallTypes.generate_content_stream) is True
def test_agenerate_content_stream_enum(self):
assert _is_streaming_request(kwargs={}, call_type=CallTypes.agenerate_content_stream) is True
def test_non_streaming_call_type_string(self):
assert _is_streaming_request(kwargs={}, call_type="acompletion") is False
def test_non_streaming_call_type_enum(self):
assert _is_streaming_request(kwargs={}, call_type=CallTypes.acompletion) is False
def test_stream_true_overrides_non_streaming_call_type(self):
assert _is_streaming_request(kwargs={"stream": True}, call_type=CallTypes.acompletion) is True