""" Test for preset_cache_key multiple values bug fix. This test verifies that get_cache_key doesn't raise TypeError when kwargs already contains preset_cache_key. Issue: When get_cache_key(**kwargs) is called with kwargs containing preset_cache_key, the call to _set_preset_cache_key_in_kwargs() would fail with: TypeError: got multiple values for keyword argument 'preset_cache_key' """ import pytest from unittest.mock import MagicMock, patch class TestPresetCacheKeyFix: """Tests for the preset_cache_key multiple values fix.""" def test_get_cache_key_with_preset_cache_key_in_kwargs(self): """ Test that get_cache_key handles kwargs that already contain preset_cache_key. This was causing: TypeError: _set_preset_cache_key_in_kwargs() got multiple values for keyword argument 'preset_cache_key' """ from litellm.caching.caching import Cache cache = Cache() # Simulate kwargs that already has preset_cache_key (as can happen # when the cache key is recomputed in certain code paths) kwargs_with_preset = { "model": "gpt-4", "messages": [{"role": "user", "content": "Hello"}], "preset_cache_key": "existing_key_12345", # This caused the bug "litellm_params": {}, } # This should NOT raise TypeError try: result = cache.get_cache_key(**kwargs_with_preset) assert result is not None assert isinstance(result, str) except TypeError as e: if "multiple values for keyword argument" in str(e): pytest.fail(f"Bug not fixed: {e}") raise def test_get_cache_key_without_preset_cache_key(self): """Test normal case without preset_cache_key in kwargs still works.""" from litellm.caching.caching import Cache cache = Cache() kwargs_normal = { "model": "gpt-4", "messages": [{"role": "user", "content": "Hello"}], "litellm_params": {}, } result = cache.get_cache_key(**kwargs_normal) assert result is not None assert isinstance(result, str) def test_preset_cache_key_is_set_in_litellm_params(self): """Verify that preset_cache_key is correctly set in litellm_params.""" from litellm.caching.caching import Cache cache = Cache() litellm_params = {} kwargs = { "model": "gpt-4", "messages": [{"role": "user", "content": "Hello"}], "litellm_params": litellm_params, } result = cache.get_cache_key(**kwargs) # The method should set preset_cache_key in litellm_params assert "preset_cache_key" in litellm_params assert litellm_params["preset_cache_key"] == result if __name__ == "__main__": pytest.main([__file__, "-v"])