mirror of
https://github.com/BerriAI/litellm.git
synced 2026-08-28 05:25:59 +00:00
fix(vertex-ai): reuse anthropic messages config instances (#26099)
Cache provider config lookups for Vertex Anthropic messages so repeated requests reuse the same config object and preserve credential cache state. Add a regression test to catch any future loss of config reuse. Made-with: Cursor
This commit is contained in:
parent
0db4158c56
commit
04291b48b7
2 changed files with 39 additions and 2 deletions
|
|
@ -8404,6 +8404,17 @@ class ProviderConfigManager:
|
|||
model: str,
|
||||
provider: LlmProviders,
|
||||
) -> Optional[BaseAnthropicMessagesConfig]:
|
||||
return ProviderConfigManager._get_provider_anthropic_messages_config_cached(
|
||||
model=model, provider=provider
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
@lru_cache(maxsize=DEFAULT_MAX_LRU_CACHE_SIZE)
|
||||
def _get_provider_anthropic_messages_config_cached(
|
||||
model: str,
|
||||
provider: LlmProviders,
|
||||
) -> Optional[BaseAnthropicMessagesConfig]:
|
||||
model_lower = model.lower()
|
||||
if litellm.LlmProviders.ANTHROPIC == provider:
|
||||
return litellm.AnthropicMessagesConfig()
|
||||
# The 'BEDROCK' provider corresponds to Amazon's implementation of Anthropic Claude v3.
|
||||
|
|
@ -8413,14 +8424,14 @@ class ProviderConfigManager:
|
|||
|
||||
return BedrockModelInfo.get_bedrock_provider_config_for_messages_api(model)
|
||||
elif litellm.LlmProviders.VERTEX_AI == provider:
|
||||
if "claude" in model.lower():
|
||||
if "claude" in model_lower:
|
||||
from litellm.llms.vertex_ai.vertex_ai_partner_models.anthropic.experimental_pass_through.transformation import (
|
||||
VertexAIPartnerModelsAnthropicMessagesConfig,
|
||||
)
|
||||
|
||||
return VertexAIPartnerModelsAnthropicMessagesConfig()
|
||||
elif litellm.LlmProviders.AZURE_AI == provider:
|
||||
if "claude" in model.lower():
|
||||
if "claude" in model_lower:
|
||||
from litellm.llms.azure_ai.anthropic.messages_transformation import (
|
||||
AzureAnthropicMessagesConfig,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -311,3 +311,29 @@ def test_transform_anthropic_messages_request_removes_scope_from_cache_control()
|
|||
# scope removed from message content
|
||||
assert "scope" not in result["messages"][0]["content"][0]["cache_control"]
|
||||
assert result["messages"][0]["content"][0]["cache_control"]["type"] == "ephemeral"
|
||||
|
||||
|
||||
def test_provider_config_manager_reuses_vertex_anthropic_messages_config_instance():
|
||||
"""
|
||||
Regression test: repeated provider config lookups for the same Vertex Claude model
|
||||
should return the same config instance (which preserves auth cache state).
|
||||
"""
|
||||
import litellm
|
||||
from litellm.utils import ProviderConfigManager
|
||||
|
||||
ProviderConfigManager._get_provider_anthropic_messages_config_cached.cache_clear()
|
||||
try:
|
||||
first_config = ProviderConfigManager.get_provider_anthropic_messages_config(
|
||||
model="claude-opus-4-6",
|
||||
provider=litellm.LlmProviders.VERTEX_AI,
|
||||
)
|
||||
second_config = ProviderConfigManager.get_provider_anthropic_messages_config(
|
||||
model="claude-opus-4-6",
|
||||
provider=litellm.LlmProviders.VERTEX_AI,
|
||||
)
|
||||
|
||||
assert isinstance(first_config, VertexAIPartnerModelsAnthropicMessagesConfig)
|
||||
assert isinstance(second_config, VertexAIPartnerModelsAnthropicMessagesConfig)
|
||||
assert first_config is second_config
|
||||
finally:
|
||||
ProviderConfigManager._get_provider_anthropic_messages_config_cached.cache_clear()
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue